|
|
@@ -7,10 +7,7 @@ import com.alibaba.fastjson.JSONArray;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.jzg.commons.entity.dto.AgreementRulesAddParam;
|
|
|
-import com.jzg.commons.entity.dto.AgreementRulesEditParam;
|
|
|
-import com.jzg.commons.entity.dto.CostAgreementParam;
|
|
|
-import com.jzg.commons.entity.dto.RulesGroupParam;
|
|
|
+import com.jzg.commons.entity.dto.*;
|
|
|
import com.jzg.commons.entity.po.*;
|
|
|
import com.jzg.commons.entity.vo.AgreementRulesVo;
|
|
|
import com.jzg.commons.entity.vo.CostListVo;
|
|
|
@@ -767,6 +764,124 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
|
|
|
return newAttrList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean rulesAttrBatchCopy(AgreementRulesAttrCopyParam param) {
|
|
|
+ log.info("批量复制规则因子:param=[{}]", JSONUtil.toJsonStr(param));
|
|
|
+
|
|
|
+ // 按 attrIds 精确查询要复制的因子记录,源规则由因子记录所属规则反推
|
|
|
+ List<PtlAgreementUndwrtRulesAttrLink> sourceLinks = agreementUndwrtRulesAttrLinkService.list(
|
|
|
+ new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
|
|
|
+ .in(PtlAgreementUndwrtRulesAttrLink::getId, param.getAttrIds()));
|
|
|
+ if (CollUtil.isEmpty(sourceLinks)) {
|
|
|
+ throw new SystemException("源规则因子不存在");
|
|
|
+ }
|
|
|
+ if (sourceLinks.size() != new HashSet<>(param.getAttrIds()).size()) {
|
|
|
+ throw new SystemException("部分规则因子不存在或已被删除");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 源因子所属规则必须一致(同一规则或同一批量组)
|
|
|
+ List<String> sourceRuleIds = sourceLinks.stream()
|
|
|
+ .map(PtlAgreementUndwrtRulesAttrLink::getRulesId)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<PtlAgreementUndwrtRules> sourceRuleList = baseMapper.selectBatchIds(sourceRuleIds);
|
|
|
+ if (CollUtil.isEmpty(sourceRuleList)) {
|
|
|
+ throw new SystemException("源规则因子所属承保规则不存在或已被删除");
|
|
|
+ }
|
|
|
+ PtlAgreementUndwrtRules sourceRules = sourceRuleList.get(0);
|
|
|
+ if (sourceRuleList.size() > 1) {
|
|
|
+ boolean sameGroup = sourceRuleList.stream().allMatch(r ->
|
|
|
+ StrUtil.isNotBlank(r.getParentId()) && r.getParentId().equals(sourceRules.getParentId()));
|
|
|
+ if (!sameGroup) {
|
|
|
+ throw new SystemException("源规则因子分属不同规则组,无法批量复制");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = agreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
|
|
|
+
|
|
|
+ // 遍历目标协议:每个目标协议下新增一条规则承接所选因子,
|
|
|
+ // 新增规则与目标协议已有规则共享 parentId(无已有规则则独立展示),前端按组合并成一条展示;源规则保持不变
|
|
|
+ for (AgreementRulesAttrCopyParam.CopyTarget target : param.getTargets()) {
|
|
|
+ String targetAgreementId = target.getAgreementId();
|
|
|
+
|
|
|
+ // 1. 定位锚定规则(用于确定归组):优先指定的规则,否则取该协议下第一条规则(序号最小)
|
|
|
+ PtlAgreementUndwrtRules anchor = null;
|
|
|
+ if (StrUtil.isNotBlank(target.getRuleId())) {
|
|
|
+ anchor = baseMapper.selectById(target.getRuleId());
|
|
|
+ if (anchor == null) {
|
|
|
+ throw new SystemException("目标承保规则不存在:" + target.getRuleId());
|
|
|
+ }
|
|
|
+ if (!targetAgreementId.equals(anchor.getAgreementId())) {
|
|
|
+ throw new SystemException("目标承保规则[" + target.getRuleId() + "]不属于协议[" + targetAgreementId + "]");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ LambdaQueryWrapper<PtlAgreementUndwrtRules> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(PtlAgreementUndwrtRules::getAgreementId, targetAgreementId)
|
|
|
+ .eq(PtlAgreementUndwrtRules::getIsDelete, 0)
|
|
|
+ .orderByAsc(PtlAgreementUndwrtRules::getOrderNum)
|
|
|
+ .last("LIMIT 1");
|
|
|
+ anchor = baseMapper.selectOne(wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 获取该协议下最大序号,新规则追加在末尾
|
|
|
+ LambdaQueryWrapper<PtlAgreementUndwrtRules> maxWrapper = new LambdaQueryWrapper<>();
|
|
|
+ maxWrapper.eq(PtlAgreementUndwrtRules::getAgreementId, targetAgreementId)
|
|
|
+ .eq(PtlAgreementUndwrtRules::getIsDelete, 0)
|
|
|
+ .orderByDesc(PtlAgreementUndwrtRules::getOrderNum)
|
|
|
+ .last("LIMIT 1");
|
|
|
+ PtlAgreementUndwrtRules maxRules = baseMapper.selectOne(maxWrapper);
|
|
|
+ int orderNum = Objects.nonNull(maxRules) ? maxRules.getOrderNum() + 1 : 1;
|
|
|
+
|
|
|
+ // 3. 新增规则(仅含本次所选因子),基础信息沿用源规则
|
|
|
+ PtlAgreementUndwrtRules targetRules = new PtlAgreementUndwrtRules();
|
|
|
+ targetRules.setId(IdGenerate.nextId());
|
|
|
+ targetRules.setAgreementId(targetAgreementId);
|
|
|
+ targetRules.setStartTime(sourceRules.getStartTime());
|
|
|
+ targetRules.setEndTime(sourceRules.getEndTime());
|
|
|
+ targetRules.setInputDescription(sourceRules.getInputDescription());
|
|
|
+ targetRules.setOrderNum(orderNum);
|
|
|
+ if (anchor != null) {
|
|
|
+ // 与锚定规则同组展示:锚定已有 parentId 则复用;锚定无 parentId 则生成新组ID并将锚定规则归入该组
|
|
|
+ String groupParentId = anchor.getParentId();
|
|
|
+ if (StrUtil.isBlank(groupParentId)) {
|
|
|
+ groupParentId = IdGenerate.nextId();
|
|
|
+ LambdaUpdateWrapper<PtlAgreementUndwrtRules> anchorUpdate = new LambdaUpdateWrapper<>();
|
|
|
+ anchorUpdate.eq(PtlAgreementUndwrtRules::getId, anchor.getId())
|
|
|
+ .set(PtlAgreementUndwrtRules::getParentId, groupParentId);
|
|
|
+ baseMapper.update(null, anchorUpdate);
|
|
|
+ }
|
|
|
+ targetRules.setParentId(groupParentId);
|
|
|
+ }
|
|
|
+ baseMapper.insert(targetRules);
|
|
|
+
|
|
|
+ // 4. 复制所选因子到新规则(同一 attrCode 仅复制一次)
|
|
|
+ List<PtlAgreementUndwrtRulesAttrLink> copiedLinks = new ArrayList<>();
|
|
|
+ Set<String> copiedCodes = new HashSet<>();
|
|
|
+ for (PtlAgreementUndwrtRulesAttrLink sourceLink : sourceLinks) {
|
|
|
+ if (!copiedCodes.add(sourceLink.getAttrCode())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ PtlAgreementUndwrtRulesAttrLink newLink = new PtlAgreementUndwrtRulesAttrLink();
|
|
|
+ newLink.setRulesId(targetRules.getId());
|
|
|
+ newLink.setAttrId(sourceLink.getAttrId());
|
|
|
+ newLink.setAttrCode(sourceLink.getAttrCode());
|
|
|
+ newLink.setMin(sourceLink.getMin());
|
|
|
+ newLink.setOperator(sourceLink.getOperator());
|
|
|
+ newLink.setMax(sourceLink.getMax());
|
|
|
+ agreementUndwrtRulesAttrLinkMapper.insert(newLink);
|
|
|
+ copiedLinks.add(newLink);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 生成新规则描述
|
|
|
+ String ruleDescription = BuildDescUtils.buildDesc(copiedLinks, undwrtRulesAttrList);
|
|
|
+ LambdaUpdateWrapper<PtlAgreementUndwrtRules> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(PtlAgreementUndwrtRules::getId, targetRules.getId())
|
|
|
+ .set(PtlAgreementUndwrtRules::getRuleDescription, ruleDescription);
|
|
|
+ baseMapper.update(null, updateWrapper);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<AgreementRulesVo> queryListByParentId(String parentId) {
|
|
|
log.info("根据父ID查询协议承保规则列表。 parentId=[{}]", parentId);
|