diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java index 961cb954..b3592436 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java @@ -60,6 +60,17 @@ public class OldSystemController { oldSystemService.importExcelOldSystem(file, type, response); } + @PostMapping("/importOldSystemStateAndReplaceStandardFix") + @AutoLog(value = "老法规系统-老法规企标国标外标数据修正") + @ApiOperation(value="老法规系统-老法规企标国标外标数据修正", notes="老法规系统-老法规企标国标外标数据修正", produces = "application/octet-stream") + @ApiOperationSupport(order = 12) + public void importOldSystemDataFix(@RequestParam("file") MultipartFile file, + @ApiParam(value = "0不导入 1导入企标 2导入国标 3外标", required = true) + @RequestParam("type") String type, + HttpServletResponse response) { + oldSystemService.importOldSystemDataFix(file, type, response); + } + @PostMapping("/importOldESAuthAllExcel") @AutoLog(value = "老法规系统-老法规企标所有人权限数据导入") @ApiOperation(value="老法规系统-老法规企标所有人权限数据导入", notes="老法规系统-老法规企标所有人权限数据导入", produces = "application/octet-stream") diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java index 50966881..3d8d9cb0 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java @@ -82,4 +82,11 @@ public interface OldSystemService { */ void importGbStandSystem(MultipartFile file, HttpServletResponse response, String type); + /** + * 老法规数据导入状态和代替标准数据修正 + * @param file + * @param type + * @param response + */ + void importOldSystemDataFix(MultipartFile file, String type, HttpServletResponse response); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java index 3c392537..a4edbccf 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java @@ -187,6 +187,264 @@ public class OldSystemServiceImpl implements OldSystemService { } } + + @Override + public void importOldSystemDataFix(MultipartFile file, String type, HttpServletResponse response) { + List errImportList = new ArrayList<>(); + + // 验证文件是否为压缩格式file.getContentType()).contains("xls") + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + // 获取数据 + List allDatalist = null; + + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); + // 删除空行 + allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); + log.info("获取数据成功,数据条数:{}", allDatalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (allDatalist == null) { + throw new JeroBootException("导入失败,数据为空"); + } + // 导入企标 + switch (type) { + case "0": + break; + case "1": + // 导入企标 + this.oldSysESDataFix(allDatalist, errImportList); + break; + case "2": + // 导入国标 + this.oldSysGBDataFix(allDatalist, errImportList); + break; + case "3": + // 导入外标 + this.oldSysFBDataFix(allDatalist, errImportList); + + } + if (!errImportList.isEmpty()) { + this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); + } + } + + private void oldSysFBDataFix(List allDatalist, List errImportList) { + List fbDatalist = allDatalist.stream().filter(o -> o.getBzfl().contains("ISO") || + o.getBzfl().contains("引进") || + o.getBzfl().contains("国外")).collect(Collectors.toList()); + log.info("外标相关数据条数:{}", fbDatalist.size()); + + // 过滤字段 根据标准号字段去重 + fbDatalist = fbDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的外标相关数据条数:{}", fbDatalist.size()); + long startTime = System.currentTimeMillis(); + // 转换数据 + List fbList = new ArrayList<>(); + // 导入企标 + for (OldSystemImportDTO dto : fbDatalist) { + LawsOverseasStandard fb = new LawsOverseasStandard(); + String tdbzh = dto.getTdbzh(); + String btdbzh = dto.getBtdbzh(); + // 先将标准号中的中文横杠替换为英文横杠 + String newBzh = dto.getBzh().replace("—", "-"); + fb.setStandardNumber(newBzh); + fb.setStandardName(dto.getBzmc()); + String standardState = dto.getBzzt(); + fb.setStandardState(standardState.equals("现行有效") ? "6" : "7"); + fb.setSubstituteStandardNumber(tdbzh); + fb.setReplacedByStandardNumber(btdbzh); + fbList.add(fb); + } + List existingEntities = overseasStandardService.list(); + Map dataMap = existingEntities.stream() + .collect(Collectors.toMap(LawsOverseasStandard::getStandardNumber, d -> d)); + for (LawsOverseasStandard fb : fbList) { + LawsOverseasStandard dbData = dataMap.get(fb.getStandardNumber()); + dbData.setStandardState(fb.getStandardState()); + String tdbzh = fb.getSubstituteStandardNumber(); + String btdbzh = fb.getReplacedByStandardNumber(); + // 代替标准号 + // 先删除已经存储的关联 + String standardNumber = dbData.getStandardNumber(); + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.removeRelation(standardNumber, 1); + lawsReplacedStandardService.addRelationOldSystemSync(tdbzh, standardNumber, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(",")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.removeRelation(replaceCode, 1); + lawsReplacedStandardService.addRelationOldSystemSync(standardNumber, replaceCode, 1); + }); + } + LambdaUpdateWrapper fbWrapper = new LambdaUpdateWrapper<>(); + fbWrapper.eq(LawsOverseasStandard::getId, dbData.getId()); + fbWrapper.set(LawsOverseasStandard::getStandardState, dbData.getStandardState()); + overseasStandardService.update(fbWrapper); + } + + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + } + + private void oldSysGBDataFix(List allDatalist, List errImportList) { + List gbDatalist = allDatalist.stream().filter(o -> + o.getBzfl().contains("国家标准/") || // “/”是为了避免匹配到“美国国家标准”这个外标 + o.getBzfl().contains("团体标准") || + o.getBzfl().contains("地方标准") || + o.getBzfl().contains("行业标准")).collect(Collectors.toList()); + log.info("国标相关数据条数:{}", gbDatalist.size()); + + // 首先,使用Map来记录每个标准号出现的次数 + Map frequencyMap = gbDatalist.stream() + .collect(Collectors.groupingBy(OldSystemImportDTO::getBzh, Collectors.counting())); + + // 然后,过滤掉那些出现次数超过1次的数据 + gbDatalist = gbDatalist.stream() + .filter(dto -> frequencyMap.get(dto.getBzh()) == 1) + .collect(Collectors.toList()); + + log.info("删除掉所有重复的数据后相关数据条数:{}", gbDatalist.size()); + + long startTime = System.currentTimeMillis(); + // 转换数据 + List gbList = new ArrayList<>(); + // 导入企标 + for (OldSystemImportDTO dto : gbDatalist) { + LawsDomesticStandard db = new LawsDomesticStandard(); + String tdbzh = dto.getTdbzh(); + String btdbzh = dto.getBtdbzh(); + // 先将标准号中的中文横杠替换为英文横杠 + String newBzh = dto.getBzh().replace("—", "-"); + db.setStandardNumber(newBzh); + db.setStandardName(dto.getBzmc()); + String standardState = dto.getBzzt(); + db.setStandardState(standardState.equals("现行有效") ? "6" : "7"); + db.setSubstituteStandardNumber(tdbzh); + db.setReplacedByStandardNumber(btdbzh); + gbList.add(db); + } + List existingEntities = domesticStandardService.list(); + Map dataMap = existingEntities.stream() + .collect(Collectors.toMap(LawsDomesticStandard::getStandardNumber, d -> d)); + for (LawsDomesticStandard gb : gbList) { + LawsDomesticStandard dbData = dataMap.get(gb.getStandardNumber()); + dbData.setStandardState(gb.getStandardState()); + String tdbzh = gb.getSubstituteStandardNumber(); + String btdbzh = gb.getReplacedByStandardNumber(); + // 代替标准号 + // 先删除已经存储的关联 + String standardNumber = dbData.getStandardNumber(); + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.removeRelation(standardNumber, 1); + lawsReplacedStandardService.addRelationOldSystemSync(tdbzh, standardNumber, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(",")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.removeRelation(replaceCode, 1); + lawsReplacedStandardService.addRelationOldSystemSync(standardNumber, replaceCode, 1); + }); + } + LambdaUpdateWrapper gbWrapper = new LambdaUpdateWrapper<>(); + gbWrapper.eq(LawsDomesticStandard::getId, dbData.getId()); + gbWrapper.set(LawsDomesticStandard::getStandardState, dbData.getStandardState()); + domesticStandardService.update(gbWrapper); + } + + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + } + + private void oldSysESDataFix(List esDatalist, List errImportList) { + esDatalist = esDatalist.stream().filter(o -> o.getBzfl().contains("企业标准")) + .collect(Collectors.toList()); + log.info("企标相关数据条数:{}", esDatalist.size()); + // 首先,使用Map来记录每个标准号出现的次数 + Map frequencyMap = esDatalist.stream() + .collect(Collectors.groupingBy(OldSystemImportDTO::getBzh, Collectors.counting())); + // 然后,过滤掉那些出现次数超过1次的数据 + esDatalist = esDatalist.stream() + .filter(dto -> frequencyMap.get(dto.getBzh()) == 1) + .collect(Collectors.toList()); + log.info("删除掉所有重复的数据后相关数据条数:{}", esDatalist.size()); + long startTime = System.currentTimeMillis(); + // 转换数据 + List esList = new ArrayList<>(); + // 导入企标 + for (OldSystemImportDTO dto : esDatalist) { + LawsEnterpriseStandard es = new LawsEnterpriseStandard(); + String tdbzh = dto.getTdbzh(); + String btdbzh = dto.getBtdbzh(); + es.setOldSystemId(dto.getId()); + es.setStandardNumber(dto.getBzh()); + es.setStandardName(dto.getBzmc()); + String standardState = dto.getBzzt(); + es.setStandardState(standardState.equals("现行有效") ? "8" : "9"); + es.setSubstituteStandardNumber(tdbzh); + es.setReplacedByStandardNumber(btdbzh); + esList.add(es); + } + List existingEntities = esService.list(); + Map dataMap = existingEntities.stream() + .collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, d -> d)); + for (LawsEnterpriseStandard es : esList) { + LawsEnterpriseStandard dbData = dataMap.get(es.getOldSystemId()); + dbData.setStandardState(es.getStandardState()); + String tdbzh = es.getSubstituteStandardNumber(); + String btdbzh = es.getReplacedByStandardNumber(); + // 代替标准号 + // 先删除已经存储的关联 + String standardNumber = dbData.getStandardNumber(); + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.removeRelation(standardNumber, 1); + lawsReplacedStandardService.addRelationOldSystemSync(tdbzh, standardNumber, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(",")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.removeRelation(replaceCode, 1); + lawsReplacedStandardService.addRelationOldSystemSync(standardNumber, replaceCode, 1); + }); + } + LambdaUpdateWrapper esWrapper = new LambdaUpdateWrapper<>(); + esWrapper.eq(LawsEnterpriseStandard::getId, dbData.getId()); + esWrapper.set(LawsEnterpriseStandard::getStandardState, dbData.getStandardState()); + esService.update(esWrapper); + } + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + } + private void oldSysFBImport(List allDatalist, List errImportList) { List fbDatalist = allDatalist.stream().filter(o -> o.getBzfl().contains("ISO") || o.getBzfl().contains("引进") ||