Просмотр исходного кода

fix 承保规则复制时只复制了一条规则问题

liub 1 месяц назад
Родитель
Сommit
83ca8ad729

+ 79 - 37
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java

@@ -399,25 +399,43 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         if(CollUtil.isEmpty(costIds)){
         if(CollUtil.isEmpty(costIds)){
             return;
             return;
         }
         }
-        List<PtlAgreementCost> costList = agreementCostService.listByIds(costIds);
+        List<PtlAgreementCost> selectedCostList = agreementCostService.listByIds(costIds);
+        if (CollUtil.isEmpty(selectedCostList)) {
+            return;
+        }
+        // 根据被勾选费用关联的承保规则,查询其 parent_id 相同的所有承保规则(整组复制)
+        Set<String> coverRuleIds = selectedCostList.stream()
+                .map(PtlAgreementCost::getCoverRuleId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        List<PtlAgreementUndwrtRules> selectedRules = agreementRulesService.listByIds(coverRuleIds);
+        Set<String> parentIds = selectedRules.stream()
+                .map(PtlAgreementUndwrtRules::getParentId)
+                .filter(parentId -> parentId != null && !parentId.isEmpty())
+                .collect(Collectors.toSet());
+        List<PtlAgreementUndwrtRules> rulesList;
+        if (CollUtil.isNotEmpty(parentIds)) {
+            // 查询 parent_id 相同的所有承保规则
+            LambdaQueryWrapper<PtlAgreementUndwrtRules> rulesWrapper = new LambdaQueryWrapper<>();
+            rulesWrapper.in(PtlAgreementUndwrtRules::getParentId, parentIds);
+            rulesList = agreementRulesService.list(rulesWrapper);
+        } else {
+            rulesList = selectedRules;
+        }
+        Set<String> allRuleIds = rulesList.stream().map(PtlAgreementUndwrtRules::getId).collect(Collectors.toSet());
+        // 查询整组承保规则关联的所有费用
+        LambdaQueryWrapper<PtlAgreementCost> costWrapper = new LambdaQueryWrapper<>();
+        costWrapper.in(PtlAgreementCost::getCoverRuleId, allRuleIds);
+        List<PtlAgreementCost> costList = agreementCostService.list(costWrapper);
         if(CollUtil.isEmpty(costList)){
         if(CollUtil.isEmpty(costList)){
             return;
             return;
         }
         }
+        List<String> allCostIds = costList.stream().map(PtlAgreementCost::getId).collect(Collectors.toList());
 
 
-        Map<String,List<PtlAgreementCost>> costGroup = new HashMap<>();
-        for (PtlAgreementCost ptlAgreementCost : costList) {
-            List<PtlAgreementCost> costGroupList = new ArrayList<>();
-            if(costGroup.containsKey(ptlAgreementCost.getCoverRuleId())){
-                costGroupList = costGroup.get(ptlAgreementCost.getCoverRuleId());
-                costGroupList.add(ptlAgreementCost);
-                costGroup.put(ptlAgreementCost.getCoverRuleId(), costGroupList);
-            }else{
-                costGroupList.add(ptlAgreementCost);
-                costGroup.put(ptlAgreementCost.getCoverRuleId(), costGroupList);
-            }
-        }
+        Map<String, List<PtlAgreementCost>> costGroup = costList.stream()
+                .collect(Collectors.groupingBy(PtlAgreementCost::getCoverRuleId));
         // 复制承保规则和费用
         // 复制承保规则和费用
-        this.copyRuleAndCost(costGroup,costIds,costList,newAgreement);
+        this.copyRuleAndCost(costGroup, allCostIds, costList, newAgreement);
 
 
     }
     }
 
 
@@ -428,35 +446,53 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                                 List<PtlAgreementCost> costList,
                                 List<PtlAgreementCost> costList,
                                 PtlAgreement newAgreement) {
                                 PtlAgreement newAgreement) {
 
 
-        // 获取查询所有的旧承保规则
+        // 获取所有的旧承保规则,并按 parent_id 扩展为整组(含无费用关联的规则)
         Set<String> rulesIds = costList.stream().map(PtlAgreementCost :: getCoverRuleId).collect(Collectors.toSet());
         Set<String> rulesIds = costList.stream().map(PtlAgreementCost :: getCoverRuleId).collect(Collectors.toSet());
         List<PtlAgreementUndwrtRules> rulesList = agreementRulesService.listByIds(rulesIds);
         List<PtlAgreementUndwrtRules> rulesList = agreementRulesService.listByIds(rulesIds);
-        Map<String, PtlAgreementUndwrtRules> rulesMap = rulesList.stream().collect(
-                Collectors.toMap(PtlAgreementUndwrtRules::getId,rules -> rules));
+        Set<String> parentIds = rulesList.stream()
+                .map(PtlAgreementUndwrtRules::getParentId)
+                .filter(parentId -> parentId != null && !parentId.isEmpty())
+                .collect(Collectors.toSet());
+        if (CollUtil.isNotEmpty(parentIds)) {
+            // 查询 parent_id 相同的所有承保规则(整组复制)
+            LambdaQueryWrapper<PtlAgreementUndwrtRules> rulesWrapper = new LambdaQueryWrapper<>();
+            rulesWrapper.in(PtlAgreementUndwrtRules::getParentId, parentIds);
+            rulesList = agreementRulesService.list(rulesWrapper);
+        }
+        Set<String> allRuleIds = rulesList.stream().map(PtlAgreementUndwrtRules::getId).collect(Collectors.toSet());
 
 
         // 查询所有承保规则明细
         // 查询所有承保规则明细
         LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink> queryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesIds);
+        queryWrapper.in(PtlAgreementUndwrtRulesAttrLink::getRulesId, allRuleIds);
         List<PtlAgreementUndwrtRulesAttrLink> linkList = agreementUndwrtRulesAttrLinkService.list(queryWrapper);
         List<PtlAgreementUndwrtRulesAttrLink> linkList = agreementUndwrtRulesAttrLinkService.list(queryWrapper);
         Map<String, List<PtlAgreementUndwrtRulesAttrLink>> linkMap = linkList.stream().collect(
         Map<String, List<PtlAgreementUndwrtRulesAttrLink>> linkMap = linkList.stream().collect(
                 Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
                 Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
 
 
+        // 整组承保规则关联的所有费用
+        LambdaQueryWrapper<PtlAgreementCost> costWrapper = new LambdaQueryWrapper<>();
+        costWrapper.in(PtlAgreementCost::getCoverRuleId, allRuleIds);
+        List<PtlAgreementCost> allCostList = agreementCostService.list(costWrapper);
+        Set<String> allCostIds = allCostList.stream().map(PtlAgreementCost::getId).collect(Collectors.toSet());
+        Map<String, List<PtlAgreementCost>> allCostGroup = allCostList.stream().collect(
+                Collectors.groupingBy(PtlAgreementCost::getCoverRuleId));
+
         // 查询所有旧的费用规则
         // 查询所有旧的费用规则
         LambdaQueryWrapper<PtlAgreementCostRule> costRuleLambdaQueryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<PtlAgreementCostRule> costRuleLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        costRuleLambdaQueryWrapper.in(PtlAgreementCostRule::getPtlAgreementCostId, costIds);
+        costRuleLambdaQueryWrapper.in(PtlAgreementCostRule::getPtlAgreementCostId, allCostIds);
         List<PtlAgreementCostRule> costRuleList = agreementCostRuleService.list(costRuleLambdaQueryWrapper);
         List<PtlAgreementCostRule> costRuleList = agreementCostRuleService.list(costRuleLambdaQueryWrapper);
         Map<String, List<PtlAgreementCostRule>> costRulesMap = costRuleList.stream().collect(
         Map<String, List<PtlAgreementCostRule>> costRulesMap = costRuleList.stream().collect(
                 Collectors.groupingBy(PtlAgreementCostRule::getPtlAgreementCostId));
                 Collectors.groupingBy(PtlAgreementCostRule::getPtlAgreementCostId));
         // 查询所有旧的费用明细
         // 查询所有旧的费用明细
         LambdaQueryWrapper<PtlAgreementCostType> costTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<PtlAgreementCostType> costTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        costTypeLambdaQueryWrapper.in(PtlAgreementCostType::getPtlAgreementCostId, costIds);
+        costTypeLambdaQueryWrapper.in(PtlAgreementCostType::getPtlAgreementCostId, allCostIds);
         List<PtlAgreementCostType> costTypeList = agreementCostTypeService.list(costTypeLambdaQueryWrapper);
         List<PtlAgreementCostType> costTypeList = agreementCostTypeService.list(costTypeLambdaQueryWrapper);
         Map<String, List<PtlAgreementCostType>> costTypeMap = costTypeList.stream().collect(
         Map<String, List<PtlAgreementCostType>> costTypeMap = costTypeList.stream().collect(
                 Collectors.groupingBy(PtlAgreementCostType::getPtlAgreementCostId));
                 Collectors.groupingBy(PtlAgreementCostType::getPtlAgreementCostId));
 
 
-        costGroup.forEach((key, value) -> {
+        // 源 parentId -> 新 parentId,同组规则复制后共享同一个新 parentId,保持分组结构
+        Map<String, String> newParentIdMap = new HashMap<>();
+        for (PtlAgreementUndwrtRules agreementUndwrtRules : rulesList) {
             //1-承保规则复制
             //1-承保规则复制
-            PtlAgreementUndwrtRules agreementUndwrtRules = rulesMap.get(key);
             PtlAgreementUndwrtRules newAgreementUndwrtRules = new PtlAgreementUndwrtRules();
             PtlAgreementUndwrtRules newAgreementUndwrtRules = new PtlAgreementUndwrtRules();
             BeanUtils.copyProperties(agreementUndwrtRules,newAgreementUndwrtRules);
             BeanUtils.copyProperties(agreementUndwrtRules,newAgreementUndwrtRules);
             newAgreementUndwrtRules.setId(null);
             newAgreementUndwrtRules.setId(null);
@@ -469,7 +505,10 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             PtlAgreementUndwrtRules maxRules = agreementRulesService.getOne(undwrtRulesLambdaQueryWrapper);
             PtlAgreementUndwrtRules maxRules = agreementRulesService.getOne(undwrtRulesLambdaQueryWrapper);
             newAgreementUndwrtRules.setOrderNum(Objects.nonNull(maxRules) ? maxRules.getOrderNum() + 1 : 1);
             newAgreementUndwrtRules.setOrderNum(Objects.nonNull(maxRules) ? maxRules.getOrderNum() + 1 : 1);
             newAgreementUndwrtRules.setAgreementId(newAgreement.getId());
             newAgreementUndwrtRules.setAgreementId(newAgreement.getId());
-            newAgreementUndwrtRules.setParentId(IdGenerate.nextId());
+            String sourceParentId = agreementUndwrtRules.getParentId();
+            newAgreementUndwrtRules.setParentId(sourceParentId != null && !sourceParentId.isEmpty()
+                    ? newParentIdMap.computeIfAbsent(sourceParentId, k -> IdGenerate.nextId())
+                    : IdGenerate.nextId());
             agreementRulesService.save(newAgreementUndwrtRules);
             agreementRulesService.save(newAgreementUndwrtRules);
 
 
             // 复制承保规则因子
             // 复制承保规则因子
@@ -482,8 +521,8 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 agreementUndwrtRulesAttrLinkService.saveBatch(links);
                 agreementUndwrtRulesAttrLinkService.saveBatch(links);
             }
             }
 
 
-            // 2-费用复制
-            List<PtlAgreementCost> agreementCostList = costGroup.get(key);
+            // 2-费用复制(该规则关联的所有费用,无费用关联的规则仅复制规则本身)
+            List<PtlAgreementCost> agreementCostList = allCostGroup.get(agreementUndwrtRules.getId());
             if(CollUtil.isNotEmpty(agreementCostList)) {
             if(CollUtil.isNotEmpty(agreementCostList)) {
                 agreementCostList.forEach(agreementCost -> {
                 agreementCostList.forEach(agreementCost -> {
                     PtlAgreementCost newAgreementCost = new PtlAgreementCost();
                     PtlAgreementCost newAgreementCost = new PtlAgreementCost();
@@ -495,21 +534,24 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                     newAgreementCost.setPtlAgreementId(newAgreement.getId());
                     newAgreementCost.setPtlAgreementId(newAgreement.getId());
                     agreementCostService.save(newAgreementCost);
                     agreementCostService.save(newAgreementCost);
                     List<PtlAgreementCostRule> costRules = costRulesMap.get(agreementCost.getId());
                     List<PtlAgreementCostRule> costRules = costRulesMap.get(agreementCost.getId());
-                    costRules.forEach(costRule -> {
-                        costRule.setId(null);
-                        costRule.setPtlAgreementCostId(newAgreementCost.getId());
-                    });
-                    agreementCostRuleService.saveBatch(costRules);
+                    if (CollUtil.isNotEmpty(costRules)) {
+                        costRules.forEach(costRule -> {
+                            costRule.setId(null);
+                            costRule.setPtlAgreementCostId(newAgreementCost.getId());
+                        });
+                        agreementCostRuleService.saveBatch(costRules);
+                    }
                     List<PtlAgreementCostType> costTypes = costTypeMap.get(agreementCost.getId());
                     List<PtlAgreementCostType> costTypes = costTypeMap.get(agreementCost.getId());
-                    costTypes.forEach(costType -> {
-                        costType.setId(null);
-                        costType.setPtlAgreementCostId(newAgreementCost.getId());
-                    });
-                    agreementCostTypeService.saveBatch(costTypes);
-
+                    if (CollUtil.isNotEmpty(costTypes)) {
+                        costTypes.forEach(costType -> {
+                            costType.setId(null);
+                            costType.setPtlAgreementCostId(newAgreementCost.getId());
+                        });
+                        agreementCostTypeService.saveBatch(costTypes);
+                    }
                 });
                 });
             }
             }
-        });
+        }
     }
     }
 
 
     @Override
     @Override