使用EasyPoi实现批量导入并处理重复数据 |
您所在的位置:网站首页 › excel表格如何避免重复数据导出 › 使用EasyPoi实现批量导入并处理重复数据 |
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 |