使用EasyPoi实现批量导入并处理重复数据

您所在的位置:网站首页 excel表格如何避免重复数据导出 使用EasyPoi实现批量导入并处理重复数据

使用EasyPoi实现批量导入并处理重复数据

2024-05-09 06:30| 来源: 网络整理| 查看: 265

1.功能实现:把excel表格的数据导入数据库,对于数据库有的数据,跳过不导入,不重复的数据插入数据库。对于业务校验、重复的数据在导入后返回一个excel表格,全部正常导入返回200

2.技术实现:EasyPOi、异步化

 

一、maven配置

cn.afterturn easypoi-base 3.3.0 cn.afterturn easypoi-web 3.3.0 cn.afterturn easypoi-annotation 3.3.0

二、实现

1.excel对应的实体类,并做相应的业务校验。实体类实现IExcelDataModel, IExcelModel这两个接口

2.导入实现

1)contorller层

service层省略

最重要的实现类 Impl

ImportParams params = new ImportParams(); params.setTitleRows(1); params.setHeadRows(1); params.setStartRows(2); params.setNeedVerfiy(true); params.setVerifyHandler(pmsBunkImportHandler); ExcelImportResult result=null; try { result = ExcelImportUtil.importExcelMore(file.getInputStream(), PmsMallBunkImportMapDTO.class, params); } catch (Exception e) { e.printStackTrace(); } List list = result.getList(); List pmsMallBunks = pmsMallBunkMapper.selectAllBunkCode(); List collectCodes = pmsMallBunks.stream().map(PmsMallBunk::getBunkCode).collect(Collectors.toList()); //入库 for (PmsMallBunkImportMapDTO mallBunkImportMapDTO:list){ String bunkCode = String.format(mallBunkImportMapDTO.getMallName() + mallBunkImportMapDTO.getFloorNo() + mallBunkImportMapDTO.getAreaCode() + mallBunkImportMapDTO.getBunkCategory() + "-" + mallBunkImportMapDTO.getStallCode()); if (collectCodes.contains(bunkCode)){ continue; } pmsBunkExcelImportTask.asyncExcelImport(mallBunkImportMapDTO,bunkCode); } List failList = result.getFailList(); //验证是否有失败的数据 String fileName="导入失败的信息"; if (result.isVerfiyFail()) { ServletOutputStream fos = resp.getOutputStream(); //mime类型 resp.setCharacterEncoding("UTF-8"); resp.setHeader("content-type", "application/octet-stream;"); resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls"); resp.setContentType("application/octet-stream;charset=UTF-8"); result.getFailWorkbook().write(fos); fos.close(); }

 2)excel业务校验handler类,实现 IExcelVerifyHandler接口

3.为了提交插入的效率,使用线程池异步插入数据库,具体参考spring+线程池相关文章。

Impl实现类中的 pmsBunkExcelImportTask.asyncExcelImport(mallBunkImportMapDTO,bunkCode)方法

 线程池相关配置

3.测试

excel的数据如下

初次导入成功!

再次导入!出现Download file表示有错误的数据!点击下载

打开后如下,其他校验也是同样效果,至此完成批量导入excel的功能



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3