easypoi实现导入逻辑

153 阅读1分钟

通过easypoi实现数据导入,便于下次快速使用

引入maven依赖

<dependency>
         <groupId>cn.afterturn</groupId>
         <artifactId>easypoi-spring-boot-starter</artifactId>
         <version>4.1.2</version>
  </dependency>
  

实体对象

@ApiModel("仪表导入模板对象")
@Data
public class EnergyMeterModel implements Serializable {

    @ColumnWidth(20)
    @ExcelProperty(value = "系统名称", index = 0)
    @ApiModelProperty(value = "系统名称")
    private String nodeName;

    @ColumnWidth(20)
    @ExcelProperty(value = "设备名称",index = 1)
    @ApiModelProperty(value = "设备名称")
    private String deviceName;

    @ColumnWidth(20)
    @ExcelProperty(value = "设备ID", index = 2)
    @ApiModelProperty(value = "设备ID")
    private String deviceSn;


    @ColumnWidth(30)
    @ExcelProperty(value = "位置", index = 3)
    @ApiModelProperty(value = "位置")
    private String position;


    @ColumnWidth(30)
    @ExcelProperty(value = "标签", index = 4)
    @ApiModelProperty(value = "标签")
    private String tagNames;

}

导入模板下载

@ApiOperation(value = "模板下载")
@GetMapping("getMeterTemplate")
public void getMeterTemplate(HttpServletResponse response) {
    try {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding(StringPool.UTF_8);
        // 这里URLEncoder.encode可以防止中文乱码
        String fileName = URLEncoder.encode("xx模板", StringPool.UTF_8);
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        ArrayList<EnergyMeterModel> demoList = new ArrayList<>();
        EnergyMeterModel energyMeterModel = new EnergyMeterModel();
        energyMeterModel.setDeviceSn("00000009");
        energyMeterModel.setDeviceName("智能水表x");
        energyMeterModel.setNodeName("架构x");
        energyMeterModel.setTagNames("xxxx");
        energyMeterModel.setPosition("xxx");
        demoList.add(energyMeterModel);
        EasyExcelFactory.write(response.getOutputStream(), EnergyMeterModel.class).sheet("sheet0").doWrite(demoList);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

导入controller层

@ApiOperation(value = "导入")
@PostMapping("/import")
public Result<?>  downloadWithPanel(@RequestParam("excel") MultipartFile file) {
    try {
        // 验证上传文件的格式
        String filename = file.getOriginalFilename();
        String excelType = null;
        if (StringUtils.isNotEmpty(filename)) {
            excelType = filename.substring(filename.lastIndexOf(StringPool.DOT));
        }
        MeterTreeDeviceReadListener<EnergyMeterModel> listener = new MeterTreeDeviceReadListener<EnergyMeterModel>();
        ExcelTypeEnum excelTypeEnum = ExcelTypeEnum.XLS;
        if (ExcelTypeEnum.XLSX.getValue().equals(excelType)) {
            excelTypeEnum = ExcelTypeEnum.XLSX;
        }
        EasyExcelFactory.read(file.getInputStream(), EnergyMeterModel.class, listener).excelType(excelTypeEnum).sheet().doRead();
        List<EnergyMeterModel> list = listener.getList();
        //调用导入逻辑
        energyMeterTreeService.doImport(list);
        return Result.success();
    } catch (BusinessException | IOException e) {
        e.printStackTrace();
        ReturnEnum returnEnum = ReturnEnum.MSG_ERROR_1;
        returnEnum.setValue(e.getMessage());
        return Result.fail(returnEnum);
    }
}