From 057775d6348c8c4f12853934b09e943b333be29b Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 4 Dec 2023 19:15:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/OldSystemController.java | 9 ++ .../OldSystemDepartRelationServiceImpl.java | 20 +++ .../ILawsEnterpriseStandardService.java | 7 + .../LawsEnterpriseStandardServiceImpl.java | 121 +++++++++++------- 4 files changed, 108 insertions(+), 49 deletions(-) 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 e2ac933a..38b41805 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 @@ -107,4 +107,13 @@ public class OldSystemController { enterpriseStandardService.importFileRelationExcel(file, response); } + @PostMapping("/findDuplicateStandardNoData") + @AutoLog(value = "老法规系统-找到标准号重复的数据") + @ApiOperation(value="老法规系统-找到标准号重复的数据", notes="老法规系统-找到标准号重复的数据", produces = "application/octet-stream") + @ApiOperationSupport(order = 8) + public void findDuplicateStandardNoData(@RequestParam("file") MultipartFile file, + HttpServletResponse response) throws IOException { + enterpriseStandardService.findDuplicateStandardNoData(file, response); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java index 183b4067..28842c68 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java @@ -78,6 +78,26 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl dr.getCurOrgName() != null && !dr.getCurOrgName().isEmpty()).collect(Collectors.toList()); + // 将所获取到的所有数据去除前后空格 + list = list.stream().peek(dr -> { + // 判断是否为空 + if (dr.getOldOrgSuperior() == null) { + dr.setOldOrgSuperior(""); + } + if (dr.getOldOrgName() == null) { + dr.setOldOrgName(""); + } + if (dr.getCurOrgSuperior() == null) { + dr.setCurOrgSuperior(""); + } + if (dr.getCurOrgName() == null) { + dr.setCurOrgName(""); + } + dr.setOldOrgSuperior(dr.getOldOrgSuperior().trim()); + dr.setOldOrgName(dr.getOldOrgName().trim()); + dr.setCurOrgSuperior(dr.getCurOrgSuperior().trim()); + dr.setCurOrgName(dr.getCurOrgName().trim()); + }).collect(Collectors.toList()); log.info("过滤掉新部门为空的数据后数据条数:{}", list.size()); // 获取所有有关联的新部门 LambdaQueryWrapper sysDeptWrapper = new LambdaQueryWrapper<>(); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java index db914a91..34c47c29 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java @@ -68,4 +68,11 @@ public interface ILawsEnterpriseStandardService extends IService datalist; - List correctDataList = new ArrayList<>(); + List correctList = new ArrayList<>(); try { // 获取当前时间戳(毫秒) long startTime = System.currentTimeMillis(); @@ -614,8 +614,9 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl sysDeptWrapper = new LambdaQueryWrapper<>(); sysDeptWrapper.eq(SysDepart::getDelFlag, YesOrNoEnum.NO.getValue()); sysDeptWrapper.eq(SysDepart::getStatus, 1); - List curDeptList = sysDepartService.list(sysDeptWrapper); - Map> curDeptNameMap = curDeptList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName)); + + List drList = oldSystemDepartRelationService.list(); + Map drMap = drList.stream().collect(Collectors.toMap(o -> o.getOldOrgName().trim() + "-" + o.getOldOrgSuperior().trim(), o -> o)); for (ESAuthDept ad : datalist) { try { @@ -623,49 +624,17 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl sysDeparts = curDeptNameMap.get(ad.getDeptName()); - if (sysDeparts == null || sysDeparts.isEmpty()) { - throw new JeroBootException("系统中未找到同名的现部门"); + OldSystemDepartRelation oldSystemDepartRelation = drMap.get(oldDeptName + "-" + oldHigherDeptName); + if (oldSystemDepartRelation == null) { + throw new JeroBootException("未找到该部门的现部门名称:" + oldDeptName + ",上级部门名称:" + oldHigherDeptName + ",标准编号:" + ad.getStandardNumber()); } else { - if (sysDeparts.size() > 1) { - // 根据上级部门名称再次匹配 - for (SysDepart sysDepart : sysDeparts) { - String parentDeptName = ad.getHigherDeptName(); - List sysParentDeparts = curDeptNameMap.get(parentDeptName); - if (sysParentDeparts == null || sysParentDeparts.isEmpty()) { - throw new JeroBootException("匹配到多个同名部门,但系统中未找到同名的上级部门"); - } - if (sysParentDeparts.size() > 1) { - String parentParentDeptName = ad.getHigherHigherDeptName(); - if (StrUtil.isBlank(parentParentDeptName)) { - throw new JeroBootException("匹配到多个同名部门,匹配到多个同名上级部门,但缺失上级部门的上级部门"); - } - List sysParentParentDeparts = curDeptNameMap.get(parentParentDeptName); - if (sysParentParentDeparts.size() == 1) { - EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); - authDept.setStandardId(es.getId()); - authDept.setAuthDept(sysDepart.getId()); - correctDataList.add(authDept); - break; - } else { - throw new JeroBootException("匹配到多个同名部门,但无法通过上级部门的上级部门名称确定具体部门"); - } - } else { - EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); - authDept.setStandardId(es.getId()); - authDept.setAuthDept(sysDepart.getId()); - correctDataList.add(authDept); - break; - } - } - } else { - EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); - SysDepart sysDepart = sysDeparts.get(0); - authDept.setStandardId(es.getId()); - authDept.setAuthDept(sysDepart.getId()); - correctDataList.add(authDept); - } + EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); + authDept.setStandardId(es.getId()); + authDept.setAuthDept(oldSystemDepartRelation.getCurOrgId()); + correctList.add(authDept); } } catch (Exception e) { log.error("导入部门对应出现错误:{}", e.getMessage()); @@ -677,8 +646,10 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl duplicateDataList = new ArrayList<>(); + + // 验证文件是否为压缩格式 + 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("导入失败,数据为空"); + } + //找到所欲标准编号重复的数据 + Map> duplicateMap = allDatalist.stream().collect(Collectors.groupingBy(OldSystemImportDTO::getBzh)); + for (String key : duplicateMap.keySet()) { + List list = duplicateMap.get(key); + if (list.size() > 1) { + duplicateDataList.addAll(list); + } + } + // 导出 + this.exportWithExcel(response, duplicateDataList, "DuplicateStandardNoData.xls"); + } + public boolean containsChinese(String text) { Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]"); Matcher matcher = pattern.matcher(text); @@ -1138,10 +1155,16 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl esDatalist, List errImportList) { log.info("企标相关数据条数:{}", esDatalist.size()); + // 过滤字段 根据标准号字段去重 - esDatalist = esDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); - log.info("根据标准号去重后的企标相关数据条数:{}", esDatalist.size()); +// esDatalist = esDatalist.stream() +// .collect(Collectors.collectingAndThen( +// Collectors.toCollection(() -> new TreeSet<>(Comparator +// .comparing(OldSystemImportDTO::getBzh) +// .thenComparing(dto -> !dto.getBzzt().equals("现行有效")))), // 确保“现行有效”状态的记录优先 +// ArrayList::new)); + + log.info("根据标准号和标准状态去重后的企标相关数据条数:{}", esDatalist.size()); long startTime = System.currentTimeMillis(); // 转换数据