回顾:这几天不在的日子!!!遗留问题:求解!!!

130 阅读2分钟

就在这几天,代码开始开工了,由于开发周期较短,所以我在赶代码,而且还是一期代码。我就做了很多的任务,而且这些任务是比较复杂的,就是对数据的处理实现和列表。 我就在最近遇到了几个让我十分头疼的问题,就是解决文件导入的问题,至于问题哪里头痛呢,就是之前在做数据导入的时候没有做过相关的问题,所以每一个问题都是需要网上找一些相关的解决方案。至于成功的方案目前有两种,一个是excel 导入 一个是CSV导入 已经都实现了 这两个问题让我头痛不已。至于具体的代码 如下

CSV方式


@Data
public class CarWarnExcelDto extends BaseRowModel {
​
    //@ExcelProperty(value = "所属辖区编码", index = 0)
    @Alias("所属辖区编码")
    private String orgCode;
​
    //@ExcelProperty(value = "车辆编码", index = 1)
    @Alias("车辆编码")
    private String carCode;
​
    //@ExcelProperty(value = "预警类别  01-超速   02-越界   03-超载", index = 2)
    @Alias("预警类别")
    private String alarmType;
​
    //@ExcelProperty(value = "运营单位", index = 3)
    @Alias("运营单位")
    private String operationUnit;
​
    //@ExcelProperty(value = "开始时间", index = 4)
    @Alias("开始时间")
    private Date startDate;
​
    //@ExcelProperty(value = "结束时间", index = 5)
    @Alias("结束时间")
    private Date endDate;
​
    //@ExcelProperty(value = "速度", index = 6)
    @Alias("速度")
    private Integer speed;
​
    //@ExcelProperty(value = "运输重量", index = 7)
    @Alias("运输重量")
    private BigDecimal transportWeight;
​
    @Alias("失败信息")
    private String message;
}
​
前端传入的数据是 MultipartFile multipartFile 这种类型的数据
​
List<CarWarnExcelDto> rows = csvReader.read(ResourceUtil.getReader(multiToFile(multipartFile).getPath(), CharsetUtil.CHARSET_GBK), CarWarnExcelDto.class);
后面就是对数据的校验了
​
/**
 * MultipartFile转file
 * @param multipartFile
 * @return
 */
private File multiToFile(MultipartFile multipartFile) {
    //选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。
    File file = null;
    try {
        String originalFilename = multipartFile.getOriginalFilename();
        String[] filename = originalFilename.split("\.");
        file= File.createTempFile(filename[0], filename[1]);
        multipartFile.transferTo(file);
        file.deleteOnExit();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return file;
}

EXCEL方式

​
   List<Object> objects = ExcelUtil.readExcel(file, new CarWarnExcelDto());
​
   for (Object object : objects) {
       ObjectMapper objectMapper = new ObjectMapper();
​
       CarWarnExcelDto excelDto = objectMapper.convertValue(object, CarWarnExcelDto.class);
       // 插入数据操作
       Boolean res = insertOperation(excelDto);
   }
  数据插入操作

上面的问题是成功的两个例子 至于出处 记不清了

不过确实很好用 希望有大佬可以留下自己优秀的解决方案

结束之前,我再一个问题


// 获取导入失败的错误信息列表
private byte[] getFailImportExportList(List<CarWarnExcelDto> failrows) {
    StringBuffer buf = new StringBuffer();
​
    // 输出列头的公共数据
    buf.append("所属辖区编码,").append("车辆编码,").append("预警类别,").append("运营单位,").append("开始时间,").append("结束时间,")
            .append("速度,").append("运输重量,").append("错误信息,");
​
    // 表头之后换行
    buf.append("\r\n");
​
    // 组装每行数据
    if (CollectionUtil.isNotEmpty(failrows)) {
        for (CarWarnExcelDto s : failrows) {
            buf.append(s.getOrgCode() + ",")
                    .append(s.getCarCode() != null ? s.getCarCode()  + "," : "" + ",")
                    .append(s.getAlarmType() != null ? s.getAlarmType() + "," : "" + ",")
                    .append(s.getOperationUnit() != null ? s.getOperationUnit() + "," : "" + ",")
                    .append(s.getStartDate() != null ? s.getStartDate() + "," : "" + ",")
                    .append(s.getEndDate() != null ? s.getEndDate() + "," : "" + ",")
                    .append(s.getSpeed() != null ? s.getSpeed() + "," : "" + ",")
                    .append(s.getTransportWeight() != null ? s.getTransportWeight() + "," : "" + ",")
                    .append(s.getOperationUnit() != null ? s.getOperationUnit() + "," : "" + ",")
            ;
​
            // 一行数据之后换行
            buf.append("\r\n");
​
        }
    }
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    try {
        // 写出响应
        os.write(buf.toString().getBytes("GBK"));
        os.flush();
        os.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return os.toByteArray();
}
​
返回前端  new ResponseEntity<byte[]>(value, headers, HttpStatus.OK)

这种如何去设置某行某列做标红操作