Kaynağa Gözat

协议复制修改

wks 1 yıl önce
ebeveyn
işleme
00758c1e5b

+ 24 - 36
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -34,10 +34,14 @@ import com.ydtech.modules.protocol.entity.vo.*;
 import com.ydtech.modules.protocol.service.*;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsExport;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNew;
 import com.ydtech.modules.protocols.entity.vo.AgreementAllInformationCopyVo;
 import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsExportService;
 import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesNewService;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -94,13 +98,18 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
     private final PtlInsAttributionTemplateService ptlInsAttributionTemplateService;
 
+    @Autowired
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
+
     @Autowired
     private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
 
     @Autowired
     private PtlAgreementMapper ptlAgreementMapper;
 
-
     @Value("${python.check}")
     private String pythonCheck;
 
@@ -1141,55 +1150,34 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return null;
     }
 
-
-    @Autowired
-    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
-
-    @Autowired
-    private PtlAgreementProductCostsAttrLinkService ptlAgreementProductCostsAttrLinkService;
-
-
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(rollbackFor = {Exception.class})
     public void agreementAllInformationCopyVo(AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
         PtlAgreement ptlAgreement = getById(agreementAllInformationCopyVo.getAgreementId());
         ptlAgreement.setId(null);
         save(ptlAgreement);
-
         AgreementAllInformationCopyVo.InformationDTO cost = agreementAllInformationCopyVo.getCost();
+        // 协议费用
         List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = new ArrayList<>();
+        // 判断是否选择全部
         if (cost.isAll()) {
             ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByAgreementId(ptlAgreement.getId());
-            ptlAgreementProductCostsNews.forEach(x -> {
-                x.setAgreementId(ptlAgreement.getId());
-                x.setId(null);
-            });
-        } else if(!cost.getInformationId().isEmpty()){
-            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.lambdaQuery()
-                    .in(PtlAgreementProductCostsNew::getId, cost.getInformationId()).list();
+        } else if (!cost.getInformationId().isEmpty()) {
+            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByCostsIdList(cost.getInformationId());
         }
-
-        if (!ptlAgreementProductCostsNews.isEmpty()) {
-            List<String> collect = ptlAgreementProductCostsNews.stream().map(PtlAgreementProductCostsNew::getId).collect(Collectors.toList());
-            List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinkList = ptlAgreementProductCostsAttrLinkService.lambdaQuery()
-                    .in(PtlAgreementProductCostsAttrLink::getCostsId, collect)
-                    .list();
-        }
-
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        ptlAgreementProductCostsNewService.copyFeesAndRules(ptlAgreementProductCostsNews, ptlAgreement.getId());
 
         AgreementAllInformationCopyVo.InformationDTO underwritingRules = agreementAllInformationCopyVo.getUnderwritingRules();
+        // 判断是否选择全部
+        List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews = new ArrayList<>();
         if (underwritingRules.isAll()) {
-
-        } else {
-
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByAgreementId(ptlAgreement.getId());
+        } else if (!underwritingRules.getInformationId().isEmpty())  {
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByRulesIdList(underwritingRules.getInformationId());
         }
-
-    }
-
-    public static void main(String[] args) {
-        List<Object> list = new ArrayList<>();
-        int size = list.size();
-        System.out.println(size);
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        ptlAgreementUndwrtRulesNewService.copyUndwrtRules(ptlAgreementUndwrtRulesNews, ptlAgreement.getId());
     }
 
 }

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/constants/OperatorType.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 操作类型
+ * @author: wenks
+ * @date: 2024/12/16 10:56
+ **/
+@Getter
+@AllArgsConstructor
+public enum OperatorType {
+
+    ADD("add", "增加"),
+    UPDATE("update", "修改"),
+    DELETE("delete", "删除");
+
+    private final String code;
+
+    private final String description;
+
+}

+ 29 - 29
src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java

@@ -25,10 +25,10 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 /**
-*@author: tz
-*@description: 协议controller
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议controller
+ * @create: 2024-2-22 15:44:29
+ */
 @Api(tags = "新版协议")
 @RequestMapping("/plt/new/agreement")
 @RestController
@@ -66,7 +66,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "查询保险公司所有协议列表")
     @GetMapping("/companyAgreementList")
-    public HttpResult<List<PtlAgreement>> companyAgreementList(String agreementId){
+    public HttpResult<List<PtlAgreement>> companyAgreementList(String agreementId) {
         return HttpResult.ok(ptlAgreementService.getCurrentAgreementList(agreementId));
     }
 
@@ -74,15 +74,15 @@ public class PtlNewAgreementController extends BaseController {
     @ApiOperation("查询协议产品费用列表")
     public PageResult getProduct(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
         Page<T> page = buildPageRequest(agreementProductQueryVo.getPageDto());
-        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getByAgreementId(page,agreementProductQueryVo);
+        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getByAgreementId(page, agreementProductQueryVo);
         return buildPageResponse(schemeQueryDto);
     }
 
     @ApiOperation("获取费用审核列表")
     @PostMapping("/getCostsAuditList")
-    public HttpResult<PageResult> getCostsAuditList(@RequestBody AgreementProductQueryVo agreementProductQueryVo){
+    public HttpResult<PageResult> getCostsAuditList(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
         Page<T> page = buildPageRequest(agreementProductQueryVo.getPageDto());
-        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getCostsAuditList(page,agreementProductQueryVo);
+        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getCostsAuditList(page, agreementProductQueryVo);
         return HttpResult.ok(buildPageResponse(schemeQueryDto));
     }
 
@@ -95,7 +95,7 @@ public class PtlNewAgreementController extends BaseController {
         PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
         String companyId = ptlAgreementService.getById(ptlAgreementProductCostsNew.getAgreementId()).getPartnerCompaniesId();
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList(companyId);
-        AgreementProductCostsSave agreementProductCosts = ptlAgreementProductCostsNewService.costsGet(costsId,undwrtRulesAttrList);
+        AgreementProductCostsSave agreementProductCosts = ptlAgreementProductCostsNewService.costsGet(costsId, undwrtRulesAttrList);
         return HttpResult.ok(agreementProductCosts);
     }
 
@@ -107,7 +107,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "更新协议费用")
     @PostMapping("/costs/update")
-    public HttpResult costsUpdate(@RequestBody AgreementProductCosts agreementProductCosts){
+    public HttpResult costsUpdate(@RequestBody AgreementProductCosts agreementProductCosts) {
         return ptlAgreementProductCostsNewService.costsUpdate(agreementProductCosts) ? HttpResult.ok("更新协议费用成功") : HttpResult.error("更新协议费用失败");
     }
 
@@ -125,13 +125,13 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "删除协议费用")
     @PostMapping("/costs/delete")
-    public HttpResult costsDelete(String costsId){
+    public HttpResult costsDelete(String costsId) {
         return ptlAgreementProductCostsNewService.costsDelete(costsId) ? HttpResult.ok("删除协议费用成功") : HttpResult.error("删除协议费用失败");
     }
 
     @ApiOperation(value = "复制协议费用")
     @PostMapping("/costs/copy")
-    public HttpResult costsCopy(@RequestBody  AgreementProductCostsCopyVo agreementProductCostsCopyVo){
+    public HttpResult costsCopy(@RequestBody AgreementProductCostsCopyVo agreementProductCostsCopyVo) {
         //orgCostsId:原协议费用id
         //newAgreementId:新协议id
         return ptlAgreementProductCostsNewService.costsCopy(agreementProductCostsCopyVo) ? HttpResult.ok("复制协议费用成功") : HttpResult.error("复制协议费用失败");
@@ -139,7 +139,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "批量复制协议费用")
     @PostMapping("/costs/copyBatch")
-    public HttpResult costsCopyBatch(@RequestBody  AgreementProductCostsCopyVo agreementProductCostsCopyVo){
+    public HttpResult costsCopyBatch(@RequestBody AgreementProductCostsCopyVo agreementProductCostsCopyVo) {
         //orgCostsId:原协议费用id
         //newAgreementId:新协议id
         return ptlAgreementProductCostsNewService.costsCopyBatch(agreementProductCostsCopyVo) ? HttpResult.ok("复制协议费用成功") : HttpResult.error("复制协议费用失败");
@@ -147,31 +147,31 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "调整费用")
     @PostMapping("/costs/adjust")
-    public HttpResult costsAdjust(@RequestBody FeeOrderNewRecordVo feeOrderNewRecordVo){
+    public HttpResult costsAdjust(@RequestBody FeeOrderNewRecordVo feeOrderNewRecordVo) {
         return HttpResult.ok("调整费用成功", ptlAgreementProductCostsNewService.costsAdjust(feeOrderNewRecordVo));
     }
 
     @ApiOperation(value = "费用审核")
     @PostMapping("/costs/audit")
-    public HttpResult costsAudit(@RequestBody CostsAuditVo costsAuditVo){
+    public HttpResult costsAudit(@RequestBody CostsAuditVo costsAuditVo) {
         return ptlAgreementProductCostsNewService.costsAudit(costsAuditVo) ? HttpResult.ok("费用审核成功") : HttpResult.error("费用审核失败");
     }
 
     @ApiOperation(value = "费用批量审核")
     @PostMapping("/costs/auditBatch")
-    public HttpResult costsAuditBatch(@RequestBody CostsAuditVo costsAuditVo){
+    public HttpResult costsAuditBatch(@RequestBody CostsAuditVo costsAuditVo) {
         return ptlAgreementProductCostsNewService.costsAuditBatch(costsAuditVo) ? HttpResult.ok("费用批量审核成功") : HttpResult.error("费用批量审核失败");
     }
 
     @ApiOperation(value = "费用批量修改起止期")
     @PostMapping("/costs/costsDateBatch")
-    public HttpResult costsDateBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo){
+    public HttpResult costsDateBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo) {
         return ptlAgreementProductCostsNewService.costsDateBatch(agreementProductCostsVo) ? HttpResult.ok("费用批量修改起止期成功") : HttpResult.error("费用批量修改起止期失败");
     }
 
     @ApiOperation(value = "费用批量修改")
     @PostMapping("/costs/costsBatch")
-    public HttpResult costsBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo){
+    public HttpResult costsBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo) {
         return ptlAgreementProductCostsNewService.costsBatch(agreementProductCostsVo) ? HttpResult.ok("费用批量修改成功") : HttpResult.error("费用批量修改失败");
     }
 
@@ -184,10 +184,10 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "获取承保规则列表")
     @PostMapping("/undwrt/rules/list")
-    public PageResult getRulesList(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo){
+    public PageResult getRulesList(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo) {
 
         Page<T> page = buildPageRequest(agreementUndwrtRulesQueryVo.getPageDto());
-        Page rulesPage = ptlAgreementUndwrtRulesNewService.rulesPage(page,agreementUndwrtRulesQueryVo.getAgreementId());
+        Page rulesPage = ptlAgreementUndwrtRulesNewService.rulesPage(page, agreementUndwrtRulesQueryVo.getAgreementId());
         return buildPageResponse(rulesPage);
     }
 
@@ -208,19 +208,19 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "更新承保规则")
     @PostMapping("/undwrt/rules/update")
-    public HttpResult rulesUpdate(@RequestBody AgreementUndwrtRules agreementUndwrtRules){
+    public HttpResult rulesUpdate(@RequestBody AgreementUndwrtRules agreementUndwrtRules) {
         return ptlAgreementUndwrtRulesNewService.rulesUpdate(agreementUndwrtRules) ? HttpResult.ok("更新承保规则成功") : HttpResult.error("更新承保规则失败");
     }
 
     @ApiOperation(value = "删除承保规则")
     @PostMapping("/undwrt/rules/delete")
-    public HttpResult rulesDelete(String ruleId){
+    public HttpResult rulesDelete(String ruleId) {
         return ptlAgreementUndwrtRulesNewService.rulesDelete(ruleId) ? HttpResult.ok("删除承保规则成功") : HttpResult.error("删除承保规则失败");
     }
 
     @ApiOperation(value = "费用轨迹查询")
     @GetMapping("/costs/trajectory/get")
-    public HttpResult getTrajectory(String costsId){
+    public HttpResult getTrajectory(String costsId) {
         return HttpResult.ok(ptlAgreementProductCostsTrajectoryService.getTrajectory(costsId));
     }
 
@@ -232,29 +232,29 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation("获取产品id")
     @PostMapping("getProductId")
-    public HttpResult getProductId(@RequestBody ProductQueryVo productQueryVo){
-        return HttpResult.ok("",InsuranceRisk.determineInsuranceInformation(productQueryVo.getKindList(), productQueryVo.getRiskList()).getCode());
+    public HttpResult getProductId(@RequestBody ProductQueryVo productQueryVo) {
+        return HttpResult.ok("", InsuranceRisk.determineInsuranceInformation(productQueryVo.getKindList(), productQueryVo.getRiskList()).getCode());
     }
 
     @ApiOperation("复制承保规则")
     @PostMapping("/undwrt/copyRules")
-    public HttpResult copyRules(@RequestBody AgreementUndwrtRules agreementUndwrtRules){
+    public HttpResult copyRules(@RequestBody AgreementUndwrtRules agreementUndwrtRules) {
         return ptlAgreementUndwrtRulesNewService.copyRules(agreementUndwrtRules) ? HttpResult.ok("复制承保规则成功") : HttpResult.error("复制承保规则失败");
     }
 
 
     @ApiOperation("复制承保规则查询同保险公司协议")
     @GetMapping("/getAllAgreement")
-    public HttpResult<List<PtlAgreement>> getAllAgreement(String companyCode){
+    public HttpResult<List<PtlAgreement>> getAllAgreement(String companyCode) {
         return HttpResult.ok(ptlAgreementService.getByCompanyCode(companyCode));
     }
 
 
     @ApiOperation("复制协议费用承保规则")
     @PostMapping("/copyAgreementAllInformation")
-    public HttpResult<Object> copyAgreementAllInformation(AgreementAllInformationCopyVo agreementAllInformationCopyVo){
+    public HttpResult<Object> copyAgreementAllInformation(AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
         ptlAgreementService.agreementAllInformationCopyVo(agreementAllInformationCopyVo);
-        return HttpResult.ok();
+        return HttpResult.ok("复制成功");
     }
 
 }

+ 15 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -75,4 +76,18 @@ public class PtlAgreementProductCostsAttrLinkHistory {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementProductCostsAttrLinkHistory children;
+
+    public PtlAgreementProductCostsAttrLinkHistory(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, OperatorType operatorType, String batch, String modifier) {
+        this.costsId = ptlAgreementProductCostsAttrLink.getCostsId();
+        this.attrId = ptlAgreementProductCostsAttrLink.getAttrId();
+        this.attrCode = ptlAgreementProductCostsAttrLink.getAttrCode();
+        this.min = ptlAgreementProductCostsAttrLink.getMin();
+        this.operator = ptlAgreementProductCostsAttrLink.getOperator();
+        this.max = ptlAgreementProductCostsAttrLink.getMax();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java

@@ -238,6 +238,12 @@ public class PtlAgreementProductCostsNew {
     @TableField(exist = false)
     private String feeFileUrl;
 
+    /**
+     * 插入之前id存储
+     */
+    @TableField(exist = false)
+    private String saveBeforeId;
+
     @TableField(exist = false)
     private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;
 

+ 47 - 1
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java

@@ -4,6 +4,8 @@ package com.ydtech.modules.protocols.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocols.constants.OperatorType;
+import com.ydtech.utils.BigDecimalUtils;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -206,5 +208,49 @@ public class PtlAgreementProductCostsNewHistory {
     private LocalDateTime operatorTime;
 
 
-
+    public PtlAgreementProductCostsNewHistory(PtlAgreementProductCostsNew ptlAgreementProductCostsNew,
+                                              PtlAgreementProductCostsExport ptlAgreementProductCostsExport,
+                                              OperatorType operatorType,
+                                              String batch,
+                                              String modifier
+    ) {
+        this.agreementId = ptlAgreementProductCostsNew.getAgreementId();
+        this.costsId = ptlAgreementProductCostsNew.getId();
+        this.productId = ptlAgreementProductCostsNew.getProductId();
+        this.productName = ptlAgreementProductCostsNew.getProductName();
+        this.jqCarCostsProportion = ptlAgreementProductCostsNew.getJqCarCostsProportion();
+        this.jqCostsProportion = ptlAgreementProductCostsNew.getJqCostsProportion();
+        this.jqCostsProportionAddInvsestment = ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment();
+        this.jqCarOtherCostsProportion = ptlAgreementProductCostsNew.getJqCarOtherCostsProportion();
+        this.syCarCostsProportion = ptlAgreementProductCostsNew.getSyCarCostsProportion();
+        this.syCostsProportion = ptlAgreementProductCostsNew.getSyCostsProportion();
+        this.syCostsProportionAddInvsestment = ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment();
+        this.syCarOtherCostsProportion = ptlAgreementProductCostsNew.getSyCarOtherCostsProportion();
+        this.noCarCostsProportion = ptlAgreementProductCostsNew.getNoCarCostsProportion();
+        this.noCostsProportion = ptlAgreementProductCostsNew.getNoCostsProportion();
+        this.noCarOtherCostsProportion = ptlAgreementProductCostsNew.getNoCarOtherCostsProportion();
+        this.costsDescription = ptlAgreementProductCostsNew.getCostsDescription();
+        this.costsStartDate = ptlAgreementProductCostsNew.getCostsStartDate();
+        this.costsEndDate = ptlAgreementProductCostsNew.getCostsEndDate();
+        this.priorityLevel = ptlAgreementProductCostsNew.getPriorityLevel();
+        this.jqExportRadioLevel1 = ptlAgreementProductCostsExport.getJqExportRadioLevel1();
+        this.jqExportRadioLevel2 = ptlAgreementProductCostsExport.getJqExportRadioLevel2();
+        this.jqExportRadioLevel3 = ptlAgreementProductCostsExport.getJqExportRadioLevel3();
+        this.jqExportRadioLevel4 = ptlAgreementProductCostsExport.getJqExportRadioLevel4();
+        this.jqExportRadioLevel5 = ptlAgreementProductCostsExport.getJqExportRadioLevel5();
+        this.syExportRadioLevel1 = ptlAgreementProductCostsExport.getSyExportRadioLevel1();
+        this.syExportRadioLevel2 = ptlAgreementProductCostsExport.getSyExportRadioLevel2();
+        this.syExportRadioLevel3 = ptlAgreementProductCostsExport.getSyExportRadioLevel3();
+        this.syExportRadioLevel4 = ptlAgreementProductCostsExport.getSyExportRadioLevel4();
+        this.syExportRadioLevel5 = ptlAgreementProductCostsExport.getSyExportRadioLevel5();
+        this.noCarExportRadioLevel1 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel1();
+        this.noCarExportRadioLevel2 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel2();
+        this.noCarExportRadioLevel3 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel3();
+        this.noCarExportRadioLevel4 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel4();
+        this.noCarExportRadioLevel5 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel5();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 28 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -56,6 +57,9 @@ public class PtlAgreementUndwrtRulesAttrLinkHistory {
     @TableField(value = "batch")
     private String batch;
 
+    /**
+     * @see com.ydtech.modules.protocols.constants.OperatorType
+     */
     @ApiModelProperty(value = "操作类型")
     @TableField(value = "operator_type")
     private String operatorType;
@@ -74,4 +78,28 @@ public class PtlAgreementUndwrtRulesAttrLinkHistory {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementUndwrtRulesAttrLinkHistory children;
+
+
+    /**
+     * @param ptlAgreementUndwrtRulesAttrLink 协议承保规则与规则属性
+     * @param operatorType                    操作类型
+     * @param batch                           批次号
+     * @param modifier                        操作人
+     */
+    public PtlAgreementUndwrtRulesAttrLinkHistory(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,
+                                                  OperatorType operatorType,
+                                                  String batch,
+                                                  String modifier
+    ) {
+        this.rulesId = ptlAgreementUndwrtRulesAttrLink.getRulesId();
+        this.attrId = ptlAgreementUndwrtRulesAttrLink.getAttrId();
+        this.attrCode = ptlAgreementUndwrtRulesAttrLink.getAttrCode();
+        this.min = ptlAgreementUndwrtRulesAttrLink.getMin();
+        this.operator = ptlAgreementUndwrtRulesAttrLink.getOperator();
+        this.max = ptlAgreementUndwrtRulesAttrLink.getMax();
+        this.operatorType = operatorType.getCode();
+        this.batch = batch;
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 5 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java

@@ -56,6 +56,11 @@ public class PtlAgreementUndwrtRulesNew {
     @TableField(exist = false)
     private String desc;
 
+    /**
+     * 插入之前id存储
+     */
+    @TableField(exist = false)
+    private String saveBeforeId;
 
     @ApiModelProperty(value = "规则属性")
     @TableField(exist = false)

+ 16 - 2
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -72,6 +73,19 @@ public class PtlAgreementUndwrtRulesNewHistory {
     @TableField(value = "operator_time")
     private LocalDateTime operatorTime;
 
-
-
+    public PtlAgreementUndwrtRulesNewHistory(PtlAgreementUndwrtRulesNew ptlAgreementUndwrtRulesNew,
+                                             OperatorType operatorType,
+                                             String batch,
+                                             String modifier
+    ) {
+        this.agreementId = ptlAgreementUndwrtRulesNew.getAgreementId();
+        this.rulesId = ptlAgreementUndwrtRulesNew.getId();
+        this.rulesType = ptlAgreementUndwrtRulesNew.getRulesType();
+        this.productType = ptlAgreementUndwrtRulesNew.getProductType();
+        this.validInd = ptlAgreementUndwrtRulesNew.getValidInd();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 21 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java

@@ -9,6 +9,7 @@ import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.ydtech.modules.protocols.entity.vo.*;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -41,6 +42,16 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
         return lambdaQuery().eq(PtlAgreementProductCostsNew::getAgreementId, agreementId).list();
     }
 
+    /**
+     * 费用id列表 获取费用
+     *
+     * @param costsIdList 费用id列表
+     * @return 费用列表
+     */
+    default List<PtlAgreementProductCostsNew> getByCostsIdList(List<String> costsIdList) {
+        return lambdaQuery().eq(PtlAgreementProductCostsNew::getId, costsIdList).list();
+    }
+
     /**
      * 获取协议费用列表(用于分组费用关联)
      *
@@ -154,6 +165,7 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
      * @return
      */
     List<PtlAgreementProductCostsNew> getInquiryNowFee(InquiryNowFeeQueryVo inquiryNowFeeQueryVo);
+
     /**
      * 获取现询费用
      *
@@ -176,4 +188,13 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
      * @return
      */
     HttpResult costsDisable(String costsId);
+
+    /**
+     * 复制费用和规则
+     *
+     * @param ptlAgreementProductCostsNews 费用列表
+     * @param agreementId                  协议id
+     */
+    void copyFeesAndRules(List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews, String agreementId);
+
 }

+ 15 - 4
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java

@@ -4,11 +4,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
 
+import java.util.List;
+
 /**
-*@author: tz
-*@description: 协议承保规则属性 service
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议承保规则属性 service
+ * @create: 2024-2-22 15:44:29
+ */
 public interface PtlAgreementUndwrtRulesAttrLinkService extends IService<PtlAgreementUndwrtRulesAttrLink> {
 
+    /**
+     * 通过规则id列表获取 规则列表
+     *
+     * @param rulesId 规则id列表
+     * @return 规则列表
+     */
+    default List<PtlAgreementUndwrtRulesAttrLink> getByRulesIdList(List<String> rulesId) {
+        return lambdaQuery().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId).list();
+    }
 }

+ 34 - 5
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java

@@ -12,19 +12,20 @@ import com.ydtech.modules.protocols.entity.vo.*;
 import java.util.List;
 
 /**
-*@author: tz
-*@description: 协议承保规则属性 service
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议承保规则属性 service
+ * @create: 2024-2-22 15:44:29
+ */
 public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreementUndwrtRulesNew> {
     AgreementUndwrtRulesSave rulesGet(String costsId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
 
     List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId);
 
-    Page rulesPage(Page page,String agreementId);
+    Page rulesPage(Page page, String agreementId);
 
     /**
      * 添加协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
@@ -32,6 +33,7 @@ public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreement
 
     /**
      * 更新协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
@@ -42,8 +44,35 @@ public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreement
 
     /**
      * 复制协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
     boolean copyRules(AgreementUndwrtRules agreementUndwrtRules);
+
+    /**
+     * 通过协议id 获取承保规则
+     *
+     * @param id 承保规则
+     * @return 承保规则列表
+     */
+    default List<PtlAgreementUndwrtRulesNew> getByAgreementId(String id) {
+        return lambdaQuery().eq(PtlAgreementUndwrtRulesNew::getAgreementId, id).list();
+    }
+
+    /**
+     * 通过规则列表获取 承保规则列表
+     * @param rulesList 承保规则列表
+     * @return 承保规则列表
+     */
+    default List<PtlAgreementUndwrtRulesNew> getByRulesIdList(List<String> rulesList) {
+        return lambdaQuery().eq(PtlAgreementUndwrtRulesNew::getAgreementId, rulesList).list();
+    }
+
+    /**
+     * 复制承保规则
+     * @param ptlAgreementUndwrtRulesNews 承保规则列表
+     * @param agreementId 协议id
+     */
+    void copyUndwrtRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews, String agreementId);
 }

+ 63 - 0
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -37,6 +37,7 @@ import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocols.constants.AgreementProductCostsAuditStatus;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
 import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.*;
@@ -2424,6 +2425,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
         return ptlAgreementProductCostsNews;
     }
+
     /**
      * 获取现询费用
      *
@@ -2511,4 +2513,65 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         return HttpResult.ok("修改成功");
     }
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void copyFeesAndRules(List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews, String agreementId) {
+        if (ptlAgreementProductCostsNews.isEmpty()) {
+            return;
+        }
+        // 批次号
+        String batchId = IdGenerate.nextId();
+        // 用户id
+        String userId = BaseController.getUserId();
+        List<String> list = new ArrayList<>();
+        ptlAgreementProductCostsNews.forEach(x -> {
+            list.add(x.getId());
+            x.setAgreementId(agreementId);
+            x.setSaveBeforeId(x.getId());
+            x.setId(null);
+
+        });
+        // 协议费用出口比例
+        List<PtlAgreementProductCostsExport> ptlAgreementProductCostsExportList = ptlAgreementProductCostsExportService.lambdaQuery()
+                .in(PtlAgreementProductCostsExport::getCostsId, list)
+                .list();
+        // 协议费用与规则属性关联
+        List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinkList = ptlAgreementProductCostsAttrLinkService.lambdaQuery()
+                .in(PtlAgreementProductCostsAttrLink::getCostsId, list)
+                .list();
+
+        ptlAgreementProductCostsNewService.saveBatch(ptlAgreementProductCostsNews);
+        // 映射新增之后的id 和 原先的数据
+        Map<String, PtlAgreementProductCostsNew> costsMapping = ptlAgreementProductCostsNews.stream()
+                .collect(Collectors.toMap(PtlAgreementProductCostsNew::getSaveBeforeId, x -> x));
+        // 协议费用出口比例
+        ptlAgreementProductCostsExportList.forEach(x -> {
+            x.setId(null);
+            x.setCostsId(costsMapping.get(x.getCostsId()).getId());
+        });
+        ptlAgreementProductCostsExportService.saveBatch(ptlAgreementProductCostsExportList);
+
+        // 将出口和入口合并
+        List<PtlAgreementProductCostsNewHistory> ptlAgreementProductCostsNewHistories = ptlAgreementProductCostsExportList.stream()
+                .map(x -> {
+                    PtlAgreementProductCostsNew ptlAgreementProductCostsNew = costsMapping.get(x.getCostsId());
+                    return new PtlAgreementProductCostsNewHistory(ptlAgreementProductCostsNew, x, OperatorType.ADD, batchId, userId);
+                })
+                .collect(Collectors.toList());
+        ptlAgreementProductCostsNewHistoryService.saveBatch(ptlAgreementProductCostsNewHistories);
+
+        // 费用因子规则
+        ptlAgreementProductCostsAttrLinkList.forEach(x -> {
+            x.setId(null);
+            x.setCostsId(costsMapping.get(x.getCostsId()).getId());
+        });
+        ptlAgreementProductCostsAttrLinkService.saveBatch(ptlAgreementProductCostsAttrLinkList);
+
+        // 费用因子规则历史表
+        List<PtlAgreementProductCostsAttrLinkHistory> ptlAgreementProductCostsAttrLinkHistories = ptlAgreementProductCostsAttrLinkList.stream()
+                .map(x -> new PtlAgreementProductCostsAttrLinkHistory(x, OperatorType.ADD, batchId, userId))
+                .collect(Collectors.toList());
+        ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(ptlAgreementProductCostsAttrLinkHistories);
+    }
+
 }

+ 68 - 50
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

@@ -8,6 +8,7 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesNewMapper;
 import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRules;
@@ -30,8 +31,7 @@ import java.util.stream.Collectors;
  * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
  */
 @Service
-public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewMapper, PtlAgreementUndwrtRulesNew>
-        implements PtlAgreementUndwrtRulesNewService {
+public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewMapper, PtlAgreementUndwrtRulesNew> implements PtlAgreementUndwrtRulesNewService {
 
     @Autowired
     private PtlAgreementUndwrtRulesAttrLinkService ptlAgreementUndwrtRulesAttrLinkService;
@@ -57,8 +57,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
         //设置费用因子属性
         List<PtlAgreementUndwrtRulesAttr> ptlAgreementUndwrtRulesAttrs = new ArrayList<>();
-        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ruleId));
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ruleId));
 
         undwrtRulesAttrList.stream().forEach(x -> {
             //处理多选和下拉
@@ -108,11 +107,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId) {
         LocalDateTime now = LocalDateTime.now();
-        List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
-                .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId)
-                .eq(PtlAgreementUndwrtRulesNew::getValidInd, "1")
-                .le(PtlAgreementUndwrtRulesNew::getRulesStartDate, now)
-                .ge(PtlAgreementUndwrtRulesNew::getRulesEndDate, now));
+        List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>().eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId).eq(PtlAgreementUndwrtRulesNew::getValidInd, "1").le(PtlAgreementUndwrtRulesNew::getRulesStartDate, now).ge(PtlAgreementUndwrtRulesNew::getRulesEndDate, now));
 
         List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
         rulesList.forEach(item -> {
@@ -125,8 +120,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public Page rulesPage(Page page, String agreementId) {
 
-        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
-                .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
+        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>().eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
 
 //        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
         List<PtlAgreementUndwrtRulesNew> records = rulesPage.getRecords();
@@ -141,11 +135,9 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         if (ids.isEmpty()) {
             throw new SystemException("该协议暂无承保规则");
         }
-        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .in(PtlAgreementUndwrtRulesAttrLink::getRulesId, ids));
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().in(PtlAgreementUndwrtRulesAttrLink::getRulesId, ids));
 
-        Map<String, List<PtlAgreementUndwrtRulesAttrLink>> groupedByCostsId = list.stream()
-                .collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
+        Map<String, List<PtlAgreementUndwrtRulesAttrLink>> groupedByCostsId = list.stream().collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
         groupedByCostsId.forEach((k, v) -> {
             records.stream().filter(x -> x.getId().equals(k)).findFirst().ifPresent(x -> x.setDesc(buildDesc(v, undwrtRulesAttrList)));
         });
@@ -160,6 +152,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
     /**
      * 遍历费用属性描述文字
+     *
      * @param v
      * @param undwrtRulesAttrList
      * @return
@@ -179,10 +172,10 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
             if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                 desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
             }
-            if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
-                if(v.get(i).getOperator() != null && v.get(i).getOperator().equals("1")) {
+            if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                if (v.get(i).getOperator() != null && v.get(i).getOperator().equals("1")) {
                     desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
-                }else{
+                } else {
                     desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "不包含" + v.get(i).getMin() + "\n";
                 }
             }
@@ -191,8 +184,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     }
 
     private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLink ptlAgreementProductCostsAttrLink) {
-        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
+        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
         return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
     }
 
@@ -214,9 +206,8 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     /**
      * 验证承保规则表单
      */
-    private void validateRules(AgreementUndwrtRules agreementUndwrtRules){
-        if(agreementUndwrtRules.getValidInd() == null)
-        {
+    private void validateRules(AgreementUndwrtRules agreementUndwrtRules) {
+        if (agreementUndwrtRules.getValidInd() == null) {
             throw new RuntimeException("有效标志不能为空");
         }
     }
@@ -315,22 +306,20 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
         //设置费用因子属性
         //先删除属性值
-        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ptlAgreementUndwrtRulesNew.getId()));
+        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ptlAgreementUndwrtRulesNew.getId()));
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //再添加属性值
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = agreementUndwrtRules.getRulesAttrList();
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
         costsAttrLinks.forEach(x -> {
             //转换数组
-            if(x.getMinArray() != null && x.getMinArray().length > 0){
-                x.setMin(String.join(",",x.getMinArray()));
+            if (x.getMinArray() != null && x.getMinArray().length > 0) {
+                x.setMin(String.join(",", x.getMinArray()));
             }
 
             //处理中文逗号
-            if(x.getMin() != null && x.getMin().contains(","))
-            {
-                x.setMin(x.getMin().replace(",",","));
+            if (x.getMin() != null && x.getMin().contains(",")) {
+                x.setMin(x.getMin().replace(",", ","));
             }
             //单独处理车牌号
             if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")) {
@@ -410,11 +399,10 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         ptlAgreementUndwrtRulesNewHistoryService.save(ptlAgreementUndwrtRulesNewHistory);
 
         //创建承包规则费用因子历史记录容器
-        List< PtlAgreementUndwrtRulesAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
 
         //获取承包规则费用因子出口历史记
-        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
+        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
 
         costsAttrLinks.forEach(x -> {
             PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
@@ -441,35 +429,23 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public boolean copyRules(AgreementUndwrtRules agreementUndwrtRules) {
         List<PtlAgreementUndwrtRulesNew> list = baseMapper.selectBatchIds(Arrays.asList(agreementUndwrtRules.getIds()));
-        for (PtlAgreementUndwrtRulesNew originalRule  : list) {
+        for (PtlAgreementUndwrtRulesNew originalRule : list) {
             PtlAgreementUndwrtRulesNew clonedRule = new PtlAgreementUndwrtRulesNew();
-            BeanUtils.copyProperties(originalRule, clonedRule, "id","agreementId");
-
+            BeanUtils.copyProperties(originalRule, clonedRule, "id", "agreementId");
             clonedRule.setId(null);
             clonedRule.setAgreementId(agreementUndwrtRules.getAgreementId());
-
             AgreementUndwrtRules convertedAgreementUndwrtRules = convertToAgreementUndwrtRules(clonedRule);
-
             convertedAgreementUndwrtRules.setRulesAttrList(agreementUndwrtRules.getRulesAttrList());
 
             //调用承保规则新增方法
             rulesAdd(convertedAgreementUndwrtRules);
-            List<PtlAgreementUndwrtRulesAttrLink> attrLinks =
-                    ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, originalRule.getId()));
+            List<PtlAgreementUndwrtRulesAttrLink> attrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, originalRule.getId()));
 
             List<PtlAgreementUndwrtRulesAttrLinkHistory> undwrtRulesAttrLinkHistories = new ArrayList<>();
-            String uuid = IdGenerate.nextId();
             attrLinks.forEach(x -> {
                 x.setId(null);
                 x.setRulesId(convertedAgreementUndwrtRules.getId());
-                PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
-                BeanUtils.copyProperties(x, costsAttrLinkHistory);
-                //设置承包规则费用因子历史记录
-                costsAttrLinkHistory.setBatch(uuid);
-                costsAttrLinkHistory.setId(null);
-                costsAttrLinkHistory.setOperatorType("add");
-                costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
-                costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory(x, OperatorType.ADD, IdGenerate.nextId(), BaseController.getUserId());
                 undwrtRulesAttrLinkHistories.add(costsAttrLinkHistory);
             });
             ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(undwrtRulesAttrLinkHistories);
@@ -477,9 +453,51 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         }
         return true;
     }
+
     private AgreementUndwrtRules convertToAgreementUndwrtRules(PtlAgreementUndwrtRulesNew rule) {
         AgreementUndwrtRules agreementUndwrtRules = new AgreementUndwrtRules();
-        BeanUtils.copyProperties(rule, agreementUndwrtRules,"ids");
+        BeanUtils.copyProperties(rule, agreementUndwrtRules, "ids");
         return agreementUndwrtRules;
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void copyUndwrtRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews, String agreementId) {
+        if (ptlAgreementUndwrtRulesNews.isEmpty()) {
+            return;
+        }
+        List<String> list = new ArrayList<>();
+        String batch = IdGenerate.nextId();
+
+        // 协议费用与规则属性
+        ptlAgreementUndwrtRulesNews.forEach(x -> {
+            list.add(x.getId());
+            x.setSaveBeforeId(x.getId());
+            x.setAgreementId(agreementId);
+            x.setId(null);
+        });
+        saveBatch(ptlAgreementUndwrtRulesNews);
+
+        //  协议费用与规则属性历史
+        List<PtlAgreementUndwrtRulesNewHistory> ptlAgreementUndwrtRulesNewHistories = ptlAgreementUndwrtRulesNews.stream()
+                .map(x-> new PtlAgreementUndwrtRulesNewHistory(x, OperatorType.ADD, batch, BaseController.getUserId()) )
+                .collect(Collectors.toList());
+        ptlAgreementUndwrtRulesNewHistoryService.saveBatch(ptlAgreementUndwrtRulesNewHistories);
+
+        Map<String, String> idMapping = ptlAgreementUndwrtRulesNews.stream().collect(Collectors.toMap(PtlAgreementUndwrtRulesNew::getSaveBeforeId, PtlAgreementUndwrtRulesNew::getId));
+        // 规则保存
+        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.getByRulesIdList(list);
+        ptlAgreementUndwrtRulesAttrLinkList.forEach(x -> {
+            x.setRulesId(idMapping.get(x.getId()));
+            x.setId(null);
+        });
+        ptlAgreementUndwrtRulesAttrLinkService.saveBatch(ptlAgreementUndwrtRulesAttrLinkList);
+
+        // 规则历史记录保存
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> ptlAgreementUndwrtRulesAttrLinkHistories = ptlAgreementUndwrtRulesAttrLinkList.stream()
+                .map(x->new PtlAgreementUndwrtRulesAttrLinkHistory(x, OperatorType.ADD, batch, BaseController.getUserId()))
+                .collect(Collectors.toList());
+        ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(ptlAgreementUndwrtRulesAttrLinkHistories);
+    }
+
 }