From a2646f80292819114587230573efbfe5a120c689 Mon Sep 17 00:00:00 2001 From: liyawei Date: Thu, 25 Aug 2022 14:50:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A4=E8=AF=81-=E4=B8=8A=E6=8A=A5=E5=BA=93-?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B-=E5=AF=BC=E5=87=BA-=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=86=85=E5=AE=B9=E5=B9=B6=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8Dbug58358?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ParamsReportDetailEOServiceImpl.java | 227 +++++++++++++++--- 1 file changed, 188 insertions(+), 39 deletions(-) diff --git a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java index 5ac86ab0a..85d6d0b5a 100644 --- a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java +++ b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java @@ -35,6 +35,7 @@ import com.jero.modules.project.util.WordUtil; import com.jero.modules.split.common.ReadExcel; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.service.ISysDictItemService; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.util.HSSFColor; @@ -762,21 +763,21 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl allParamsInfoList = queryForExportCustom(paramsReportDetailVO); - Map params = allParamsInfoList.get(0); - List> imgListAll = (List>) allParamsInfoList.get(1).get("imgListAll"); - - String templateUrl = ""; - ParamsExportTemplateEO paramsExportTemplateEO = paramsExportTemplateEOService.getById(paramsReportDetailVO.getExportTemplateId()); - List ossFiles = ossFileService.getFileInfosByConnectId(paramsExportTemplateEO.getFileConnectId()); - if (CollectionUtil.isNotEmpty(ossFiles)) { - templateUrl = ossFiles.get(0).getUrl(); - } - // 替换模板中的占位符 try { + // 查询导出数据 + List allParamsInfoList = queryForExportCustom(paramsReportDetailVO); + Map params = allParamsInfoList.get(0); + List> imgListAll = (List>) allParamsInfoList.get(1).get("imgListAll"); + + String templateUrl = ""; + ParamsExportTemplateEO paramsExportTemplateEO = paramsExportTemplateEOService.getById(paramsReportDetailVO.getExportTemplateId()); + List ossFiles = ossFileService.getFileInfosByConnectId(paramsExportTemplateEO.getFileConnectId()); + if (CollectionUtil.isNotEmpty(ossFiles)) { + templateUrl = ossFiles.get(0).getUrl(); + } + // 拿取模板 String repFileName = fileName.replaceAll("/","_"); wordOS = new FileOutputStream(fileNowPath + File.separator + repFileName); @@ -788,16 +789,36 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl> fileListAll = (List>) allParamsInfoList.get(2).get("fileListAll"); if (fileListAll != null && !fileListAll.isEmpty()) { - Map paramsAfterFilter = WordUtil.filterParams(wordMLPackage, params); + Map paramsAfterFilter = WordUtil.filterParams(wordMLPackage, params); // 过滤出需要导出的参数项 if (CollectionUtil.isNotEmpty(paramsAfterFilter)) { List nioNumberList = paramsAfterFilter.keySet().stream().collect(Collectors.toList()); List allRelevFileList = new ArrayList<>(); + // 判断文件是否重复 for (Map fileMap : fileListAll) { for (Map.Entry map : fileMap.entrySet()) { String key = (String) map.getKey(); List fileList = (List) map.getValue(); + if (nioNumberList.contains(key)) { - allRelevFileList.addAll(fileList); + String newFileName = isRepeat(allRelevFileList, fileList.get(0)); + if (!"".equals(newFileName) && !"old".equals(newFileName)) { // 文件名称重复 且文件内容不同 + String configDataStr = params.get(key); + if (StringUtils.isNotEmpty(configDataStr)) { + if (configDataStr.contains("#")) { + String newConfigDataStr = configDataStr.substring(0, configDataStr.lastIndexOf("#")) + newFileName; + params.put(key, newConfigDataStr); + } else { + params.put(key, newFileName); + } + } + + fileList.get(0).setFileName(newFileName); + allRelevFileList.addAll(fileList); + + } else if ("".equals(newFileName)) { // 文件名称不重复 + allRelevFileList.addAll(fileList); + + } } } } @@ -893,21 +914,21 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl allParamsInfoList = queryForExportCustom(paramsReportDetailVO); - HashMap params = (HashMap) allParamsInfoList.get(0); - List> imgListAll = (List>) allParamsInfoList.get(1).get("imgListAll"); - - String templateUrl = ""; - ParamsExportTemplateEO paramsExportTemplateEO = paramsExportTemplateEOService.getById(paramsReportDetailVO.getExportTemplateId()); - List ossFiles = ossFileService.getFileInfosByConnectId(paramsExportTemplateEO.getFileConnectId()); - if (CollectionUtil.isNotEmpty(ossFiles)) { - templateUrl = ossFiles.get(0).getUrl(); - } - // 替换模板中的占位符 try { + // 查询导出数据 + List allParamsInfoList = queryForExportCustom(paramsReportDetailVO); + HashMap params = (HashMap) allParamsInfoList.get(0); + List> imgListAll = (List>) allParamsInfoList.get(1).get("imgListAll"); + + String templateUrl = ""; + ParamsExportTemplateEO paramsExportTemplateEO = paramsExportTemplateEOService.getById(paramsReportDetailVO.getExportTemplateId()); + List ossFiles = ossFileService.getFileInfosByConnectId(paramsExportTemplateEO.getFileConnectId()); + if (CollectionUtil.isNotEmpty(ossFiles)) { + templateUrl = ossFiles.get(0).getUrl(); + } + // 拿取模板 String repFileName = fileName.replaceAll("/","_"); wordOS = new FileOutputStream(fileNowPath + File.separator + repFileName); @@ -931,7 +952,25 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl fileList = (List) map.getValue(); if (nioNumberList.contains(key)) { - allRelevFileList.addAll(fileList); + String newFileName = isRepeat(allRelevFileList, fileList.get(0)); + if (!"".equals(newFileName) && !"old".equals(newFileName)) { // 文件名称重复 且文件内容不同 + String configDataStr = params.get(key); + if (StringUtils.isNotEmpty(configDataStr)) { + if (configDataStr.contains("#")) { + String newConfigDataStr = configDataStr.substring(0, configDataStr.lastIndexOf("#")) + newFileName; + params.put(key, newConfigDataStr); + } else { + params.put(key, newFileName); + } + } + + fileList.get(0).setFileName(newFileName); + allRelevFileList.addAll(fileList); + + } else if ("".equals(newFileName)) { // 文件名称不重复 + allRelevFileList.addAll(fileList); + + } } } } @@ -1064,7 +1103,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl> queryForExportNormal(ParamsReportDetailVO paramsReportDetailVO) { + private List> queryForExportNormal(ParamsReportDetailVO paramsReportDetailVO) throws IOException { List idList = new ArrayList<>(); if (StringUtils.isNotEmpty(paramsReportDetailVO.getIds())) { idList = Arrays.asList(paramsReportDetailVO.getIds().split(",")); @@ -1074,6 +1113,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl paramsConfigEOList = paramsReportConfigEOService.queryList(paramsReportDetailVO.getParamsManifestId()); // 查询所有配置列 + List fileListAll = new ArrayList<>(); // 仅用于校验文件是否重复 // 查询配置列数据 for (Map record1 : dataList) { @@ -1086,7 +1126,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImplconfigIdList.contains(e.getId())).collect(Collectors.toList()); // 过滤出要导出的配置列 - paramsConfigEOList.forEach(paramsConfigEO -> { // 参数配置 + for (ParamsConfigEO paramsConfigEO : paramsConfigEOList) { // 参数配置 if (ControlTypeEnum.Title.getValue().equals(controlType)) { record1.put(paramsConfigEO.getId(), titleDefaultValue); @@ -1103,9 +1143,24 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl ossFileList = ossFileService.getFileInfosByConnectId(paramsConfigDataEO.getFileConnectId()); if (CollectionUtil.isNotEmpty(ossFileList)) { - configDataBuilder.append(ossFileList.get(0).getFileName()).append("#"); + // 不合并导出时 验证文件名是否相同,相同进一步验证文件内容是否相同,不同时重命名文件 + String fileName = ossFileList.get(0).getFileName(); + String newFileName = isRepeat(fileListAll, ossFileList.get(0)); + if (!"".equals(newFileName) && !"old".equals(newFileName)) { // 文件名称重复 且文件内容不同 + configDataBuilder.append(newFileName).append("#"); + ossFileList.get(0).setFileName(newFileName); + fileList.addAll(ossFileList); + fileListAll.addAll(ossFileList); + + } else if ("old".equals(newFileName)) { // 文件名称重复 且文件内容相同 + configDataBuilder.append(fileName).append("#"); + fileList.addAll(ossFileList); + }else { + configDataBuilder.append(fileName).append("#"); + fileList.addAll(ossFileList); + fileListAll.addAll(ossFileList); + } - fileList.addAll(ossFileList); } } @@ -1116,7 +1171,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl ossFileList = ossFileService.getFileInfosByConnectId(paramsReportConfigDataEO.getFileConnectId()); if (CollectionUtil.isNotEmpty(ossFileList)) { - fileNameList.add(ossFileList.get(0).getFileName()); + // 合并导出时 验证文件名是否相同,相同进一步验证文件内容是否形同,不同时重命名文件 + String fileName = ossFileList.get(0).getFileName(); + String newFileName = isRepeat(fileListAll, ossFileList.get(0)); + if (!"".equals(newFileName) && !"old".equals(newFileName)) { // 文件名称重复 且文件内容不同 + // 判断 新文件名是不是当前参数下 配置间的 重复 + int count = (int) fileList.stream().filter(e->newFileName.equals(e.getFileName())).count(); + if (count <= 0) { // 不是 (如果是,不做任何操作) + fileNameList.add(newFileName); + ossFileList.get(0).setFileName(newFileName); + fileList.addAll(ossFileList); + fileListAll.addAll(ossFileList); + } + + } else if ("old".equals(newFileName)) { // 文件名称重复 且文件内容相同 + + // 判断这种重复是不是当前参数下 配置间的 + int count = (int) fileList.stream().filter(e->fileName.equals(e.getFileName())).count(); + if (count <= 0) { // 不是 (如果是,不做任何操作) + fileNameList.add(fileName); + fileList.addAll(ossFileList); + fileListAll.addAll(ossFileList); + } + + }else { // 文件名称不重复 + fileNameList.add(fileName); + fileList.addAll(ossFileList); + fileListAll.addAll(ossFileList); + } - fileList.addAll(ossFileList); } } } @@ -1151,7 +1232,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl queryForExportCustom(ParamsReportDetailVO paramsReportDetailVO) { + private List queryForExportCustom(ParamsReportDetailVO paramsReportDetailVO) throws IOException { paramsReportDetailVO.setSeparator("*"); // 设置分隔符 List idList = new ArrayList<>(); @@ -1194,8 +1275,8 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl fileList = new ArrayList<>(); - List imgFileList = new ArrayList<>(); + List fileList = new ArrayList<>(); // 存放当前编号下的非图片文件 + List imgFileList = new ArrayList<>(); // 存放当前编号下的图片文件 // 合并配置数据 String configData = ""; @@ -1208,7 +1289,8 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl fileNameList = new ArrayList<>(); - for (ParamsReportConfigDataEO paramsReportConfigDataEO : paramsReportConfigDataEOS) { // 获取”导出文件夹“下的文件 + if (CollectionUtil.isNotEmpty(paramsReportConfigDataEOS)) { + ParamsReportConfigDataEO paramsReportConfigDataEO = paramsReportConfigDataEOS.get(0); // 获取”导出文件夹“下的文件 if (StringUtils.isNotEmpty(paramsReportConfigDataEO.getFileConnectId())) { List ossFileList = ossFileService.getFileInfosByConnectId(paramsReportConfigDataEO.getFileConnectId()); if (CollectionUtil.isNotEmpty(ossFileList)) { @@ -1561,6 +1643,73 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl fileList, OSSFile ossFile) throws IOException { + String fileName = ossFile.getFileName(); + String currentFileUrl = ossFile.getUrl(); + + List result = fileList.stream().filter(e-> fileName.equals(e.getFileName())).collect(Collectors.toList()); + if (result.size() > 0) { // 文件名重复 + String fileUrl = result.get(0).getUrl(); + if (!compareFileContent(currentFileUrl, fileUrl)) { // 文件内容不同 + List sameFileList = fileList.stream().filter(e-> compareFileName(fileName, e.getFileName())).collect(Collectors.toList()); + int count = sameFileList.size(); + if (count > 0) { + // 判断 和重命名的文件 内容是否相同 + for (OSSFile file : sameFileList) { + if (compareFileContent(currentFileUrl, file.getUrl())) { + return file.getFileName(); + } + } + // 遍历完 没相同的 再重命名 + String newFileName = fileName.substring(0, fileName.lastIndexOf(".")) + (count + 1) + fileName.substring(fileName.lastIndexOf(".")); + return newFileName; + + } else { + String newFileName = fileName.substring(0, fileName.lastIndexOf(".")) + (count + 1) + fileName.substring(fileName.lastIndexOf(".")); + return newFileName; + } + + } else { // 文件内容相同 + return "old"; + } + + } else { // 文件名不重复 + return ""; + } + } + + // 比较文件名,如 currentFileName: 文件.pdf ; fileName: 文件1.pdf + private boolean compareFileName(String currentFileName, String fileName) { + StringBuilder sb = new StringBuilder(); + sb.append(fileName.substring(0, fileName.lastIndexOf(".") - 1)); + sb.append(fileName.substring(fileName.lastIndexOf("."), fileName.length())); + if (currentFileName.equals(sb.toString())) { + return true; + } else { // 当 currentFileName = fileName 时 也返回false + return false; + } + } + /** * 实体对象转成Map * @param obj 实体对象