|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 将属性链接丰富为完整的属性对象
|
|
|
*/
|