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 b3592436..3725fd18 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 @@ -150,5 +150,12 @@ public class OldSystemController { HttpServletResponse response) throws IOException { oldSystemService.importGbStandSystem(file, response, "recommend"); } + @GetMapping("/esAuthDeptDataFix") + @AutoLog(value = "老法规系统-企标授权部门数据修复") + @ApiOperation(value="老法规系统-企标授权部门数据修复", notes="老法规系统-企标授权部门数据修复", produces = "application/octet-stream") + @ApiOperationSupport(order = 100) + public void esAuthDeptDataFix() { + oldSystemDeptRelationService.esAuthDeptDataFix(); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java index 4f8fa861..be583ff9 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java @@ -22,4 +22,5 @@ public interface OldSystemDepartRelationService extends IService errImportList = new ArrayList<>(); @@ -166,6 +192,111 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl needSaveAllData = new ArrayList<>(); + // 获取所有没有被删除的部门 + LambdaQueryWrapper departWrapper = new LambdaQueryWrapper<>(); + departWrapper.eq(SysDepart::getDelFlag, YesOrNoEnum.NO.getValue()); + List departListTree = departService.queryTreeList(); + // 找到所有已有授权部门权限 + LambdaQueryWrapper esAdWrapper = new LambdaQueryWrapper<>(); + esAdWrapper.isNull(EnterpriseStandardAuthDept::getAuthExpireDate); + List esAdList = esAdService.list(esAdWrapper); + Map> esAdMap = esAdList.stream() + .collect(Collectors.groupingBy(EnterpriseStandardAuthDept::getStandardId)); + List esIdList = esAdList.stream() + .map(EnterpriseStandardAuthDept::getStandardId).distinct().collect(Collectors.toList()); + // 找到所有授权部门不为空的企标 + List lawsEnterpriseStandards = esService.listByIds(esIdList); + // 遍历企标数据的现有授权部门 + for (LawsEnterpriseStandard es : lawsEnterpriseStandards) { + String curStandardId = es.getId(); + Set authDeptIdList = esAdMap.get(es.getId()).stream() + .map(EnterpriseStandardAuthDept::getAuthDept) + .collect(Collectors.toSet()); + // 创建一个部门Id Set 根据现有授权部门的部门Id找到所有子部门Id + Set childDeptIdSet = new HashSet<>(); + // 根据现有授权部门的部门Id找到所有子部门Id + for (String authDeptId : authDeptIdList) { + List childDeptIdList = this.queryChildDeptIdList(authDeptId, departListTree); + if (childDeptIdList.isEmpty()) { + continue; + } + childDeptIdSet.addAll(childDeptIdList); + } + // 根据authDeptIdList去重 + childDeptIdSet.removeAll(authDeptIdList); + // 构造需要保存的数据 + for (String childDeptId : childDeptIdSet) { + EnterpriseStandardAuthDept esAd = new EnterpriseStandardAuthDept(); + esAd.setStandardId(curStandardId); + esAd.setAuthDept(childDeptId); + needSaveAllData.add(esAd); + } + if (childDeptIdSet.isEmpty()) { + log.info("企标编号为{}的企标没有需要修复的数据", es.getStandardNumber()); + } else { + log.info("企标编号为{}的企标需要修复的数据条数为:{}", es.getStandardNumber(), childDeptIdSet.size()); + } + } + if (needSaveAllData.isEmpty()) { + return; + } + // 根据standardId和authDept去重 + List distinctData = needSaveAllData.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> + new TreeSet<>(Comparator.comparing(o -> o.getStandardId() + ";" + o.getAuthDept()))), ArrayList::new)); + log.info("需要保存的数据条数为:{}", distinctData.size()); + esAdService.saveBatch(needSaveAllData, distinctData.size()); + } + + // 递归查询所有子部门Id + private List queryChildDeptIdList(String parentId, List departListTree) { + List childDeptIdList = new ArrayList<>(); + SysDepartTreeModel depart = getDepartTreeModel(parentId, departListTree); + if (depart != null) { + childDeptIdList.add(depart.getId()); + List childList = depart.getChildren(); + if (childList != null && !childList.isEmpty()) { + for (SysDepartTreeModel child : childList) { + // 这里改为传递完整的 departList + childDeptIdList.addAll(queryChildDeptIdList(child.getId(), departListTree)); + } + } + } + return childDeptIdList; + } + + private SysDepartTreeModel getDepartTreeModel(String parentId, List departListTree) { + return getSysDepartTreeModel(parentId, departListTree); + } + + private SysDepartTreeModel findDepartInTree(String parentId, List children) { + if (children == null || children.isEmpty()) { + return null; + } + + return getSysDepartTreeModel(parentId, children); + } + + @Nullable + private SysDepartTreeModel getSysDepartTreeModel(String parentId, List children) { + for (SysDepartTreeModel child : children) { + if (parentId.equals(child.getId())) { + return child; + } + // 继续在子节点的子节点中查找 + SysDepartTreeModel found = findDepartInTree(parentId, child.getChildren()); + if (found != null) { + return found; + } + } + return null; + } + + }