Pārlūkot izejas kodu

报价配置--协议管理-- 复制承保规则

wangguoqiang 3 mēneši atpakaļ
vecāks
revīzija
3cd63362ca

+ 6 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -201,6 +201,12 @@ public interface OrgClient {
     @GetMapping(value = "/agreementRules/rulesGet")
     HttpResult rulesGet(@RequestParam("ruleId") String ruleId);
 
+    /**
+     * 复制承保规则(含parentId)
+     */
+    @GetMapping(value = "/agreementRules/rulesCopy")
+    HttpResult rulesCopy(@RequestParam("ruleId") String ruleId);
+
     /**
      * 根据父ID查询子规则列表
      */

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesService.java

@@ -45,6 +45,17 @@ public interface PtlAgreementUndwrtRulesService extends IService<PtlAgreementUnd
      */
     AgreementRulesVo rulesGet(String ruleId);
 
+
+
+    /**
+     * 承保规则复制
+     * @param ruleId
+     * @return
+     */
+    AgreementRulesVo rulesCopy(String ruleId);
+
+
+
     /**
      * 根据父ID查询规则列表
      *

+ 136 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -391,6 +391,142 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
         return rulesVo;
     }
 
+
+
+    public AgreementRulesVo rulesCCC(String ruleId) {
+        PtlAgreementUndwrtRules rules = baseMapper.selectById(ruleId);
+        if (rules == null) {
+            log.info("承保规则不存在, ruleId={}", ruleId);
+            return null;
+        }
+        PtlAgreement agreement = ptlAgreementService.getById(rules.getAgreementId());//协议id
+        AgreementRulesVo rulesVo = new AgreementRulesVo();
+        BeanUtils.copyProperties(rules, rulesVo);
+
+        // 获取费用因子属性(公共逻辑,仅查询一次)
+        List<PtlAgreementUndwrtRulesAttr> attrList = agreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        Map<String, PtlAgreementUndwrtRulesAttr> attrMap = attrList.stream()
+                .filter(attr -> "all".equals(attr.getCompanyIds()) || attr.getCompanyIds().equals(agreement.getCompanyId()))
+                .collect(Collectors.toMap(PtlAgreementUndwrtRulesAttr::getAttrCode, attr -> attr));
+
+        // 确定需要处理的规则ID列表
+        List<String> ruleIds;
+        if (rules.getParentId() != null && !rules.getParentId().isEmpty()) {
+            ruleIds = baseMapper.queryListByParentId(rules.getParentId()).stream()
+                    .map(AgreementRulesVo::getId).collect(Collectors.toList());
+        } else {
+            ruleIds = List.of(ruleId);
+        }
+
+        // 统一组装 groups
+        List<RulesGroupParam> groups = new ArrayList<>();
+        for (String id : ruleIds) {
+            List<PtlAgreementUndwrtRulesAttrLink> linkList = agreementUndwrtRulesAttrLinkService.queryLinkList(id);
+            List<PtlAgreementUndwrtRulesAttr> enrichedAttrs = enrichAttrLinks(linkList, attrMap);
+            RulesGroupParam group = new RulesGroupParam();
+            group.setRulesAttrList(linkList);
+            group.setCostsAttrLinks(enrichedAttrs);
+            groups.add(group);
+        }
+        rulesVo.setRulesGroups(groups);
+        // 单条模式向后兼容,同时设置 costsAttrLinks
+        if (ruleIds.size() == 1) {
+            rulesVo.setCostsAttrLinks(groups.get(0).getCostsAttrLinks());
+        }
+        return rulesVo;
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AgreementRulesVo rulesCopy(String ruleId) {
+        PtlAgreementUndwrtRules rules = baseMapper.selectById(ruleId);
+        if (rules == null) {
+            log.info("承保规则不存在, ruleId={}", ruleId);
+            return null;
+        }
+
+        // 获取费用因子属性(公共逻辑,仅查询一次)
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = agreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+
+        // 根据协议id获取最大的序号
+        LambdaQueryWrapper<PtlAgreementUndwrtRules> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PtlAgreementUndwrtRules::getAgreementId, rules.getAgreementId())
+                .eq(PtlAgreementUndwrtRules::getIsDelete, 0);
+        queryWrapper.orderByDesc(PtlAgreementUndwrtRules::getOrderNum);
+        queryWrapper.last("LIMIT 1");
+        PtlAgreementUndwrtRules maxRules = baseMapper.selectOne(queryWrapper);
+        int startOrderNum = Objects.nonNull(maxRules) ? maxRules.getOrderNum() + 1 : 1;
+
+        // 确定需要复制的源规则ID列表
+        List<String> sourceRuleIds;
+        if (rules.getParentId() != null && !rules.getParentId().isEmpty()) {
+            sourceRuleIds = baseMapper.queryListByParentId(rules.getParentId()).stream()
+                    .map(AgreementRulesVo::getId).collect(Collectors.toList());
+        } else {
+            sourceRuleIds = List.of(ruleId);
+        }
+
+        // 批量复制:多条规则共享同一个新 parentId
+        String newParentId = sourceRuleIds.size() > 1 ? IdGenerate.nextId() : null;
+        List<RulesGroupParam> groups = new ArrayList<>();
+
+        // 获取属性映射(用于组装返回结果)
+        PtlAgreement agreement = ptlAgreementService.getById(rules.getAgreementId());
+        Map<String, PtlAgreementUndwrtRulesAttr> attrMap = undwrtRulesAttrList.stream()
+                .filter(attr -> "all".equals(attr.getCompanyIds()) || attr.getCompanyIds().equals(agreement.getCompanyId()))
+                .collect(Collectors.toMap(PtlAgreementUndwrtRulesAttr::getAttrCode, attr -> attr));
+
+        for (int i = 0; i < sourceRuleIds.size(); i++) {
+            String sourceId = sourceRuleIds.get(i);
+            // 查询源规则的属性链接
+            List<PtlAgreementUndwrtRulesAttrLink> sourceLinkList = agreementUndwrtRulesAttrLinkService.queryLinkList(sourceId);
+
+            // 构建新规则记录
+            String newRuleId = IdGenerate.nextId();
+            PtlAgreementUndwrtRules newRules = new PtlAgreementUndwrtRules();
+            newRules.setId(newRuleId);
+            newRules.setAgreementId(rules.getAgreementId());
+            newRules.setStartTime(rules.getStartTime());
+            newRules.setEndTime(rules.getEndTime());
+            newRules.setInputDescription(rules.getInputDescription());
+            newRules.setParentId(newParentId);
+            newRules.setOrderNum(startOrderNum + i);
+
+            // 复制属性链接,关联到新规则ID
+            List<PtlAgreementUndwrtRulesAttrLink> newAttrLinks = processAndAttrs(sourceLinkList, undwrtRulesAttrList, newRuleId);
+            if (CollUtil.isNotEmpty(newAttrLinks)) {
+                agreementUndwrtRulesAttrLinkMapper.insert(newAttrLinks);
+            }
+
+            newRules.setRuleDescription(buildDesc(newAttrLinks, undwrtRulesAttrList));
+            baseMapper.insert(newRules);
+
+            // 组装返回的 groups
+            List<PtlAgreementUndwrtRulesAttr> enrichedAttrs = enrichAttrLinks(newAttrLinks, attrMap);
+            RulesGroupParam group = new RulesGroupParam();
+            group.setRulesAttrList(newAttrLinks);
+            group.setCostsAttrLinks(enrichedAttrs);
+            groups.add(group);
+        }
+
+        // 构建返回结果
+        AgreementRulesVo rulesVo = new AgreementRulesVo();
+        rulesVo.setAgreementId(rules.getAgreementId());
+        rulesVo.setStartTime(rules.getStartTime());
+        rulesVo.setEndTime(rules.getEndTime());
+        rulesVo.setInputDescription(rules.getInputDescription());
+        rulesVo.setParentId(newParentId);
+        rulesVo.setRulesGroups(groups);
+        if (groups.size() == 1) {
+            rulesVo.setCostsAttrLinks(groups.get(0).getCostsAttrLinks());
+        }
+        return rulesVo;
+    }
+
+
+
+
     /**
      * 将属性链接丰富为完整的属性对象
      */