소스 검색

Merge remote-tracking branch 'origin/test' into test

Qchen 1 년 전
부모
커밋
8b5cd6a8ce
24개의 변경된 파일645개의 추가작업 그리고 167개의 파일을 삭제
  1. 1 1
      src/main/java/com/ydtech/modules/admin/controller/SysUserBankController.java
  2. 1 1
      src/main/java/com/ydtech/modules/admin/service/SysUserBankCardService.java
  3. 6 4
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserBankCardServiceImpl.java
  4. 1 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  5. 35 0
      src/main/java/com/ydtech/modules/inv/utils/LocalDateTimeUtils.java
  6. 16 9
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java
  7. 65 11
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  8. 24 0
      src/main/java/com/ydtech/modules/protocols/constants/OperatorType.java
  9. 35 27
      src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java
  10. 12 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLink.java
  11. 15 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java
  12. 10 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  13. 47 1
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java
  14. 28 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java
  15. 5 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java
  16. 16 2
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java
  17. 44 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementAllInformationCopyVo.java
  18. 1 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java
  19. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java
  20. 32 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java
  21. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java
  22. 34 5
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java
  23. 107 39
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  24. 80 58
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

+ 1 - 1
src/main/java/com/ydtech/modules/admin/controller/SysUserBankController.java

@@ -81,7 +81,7 @@ public class SysUserBankController extends BaseController {
     @PostMapping("/insertByBankNumber")
     @ApiOperation("新增卡号开户行")
     public HttpResult<Object> insertByBankNumber(@RequestBody SysUserBankCardVO sysUserBankCardVO) {
-        return  bankCardService.insertByBankNumber(sysUserBankCardVO);
+        return  bankCardService.insertByBankNumber(sysUserBankCardVO,true);
     }
     @PostMapping("/auditByBankNumber")
     @ApiOperation("审核卡号开户行")

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/SysUserBankCardService.java

@@ -35,7 +35,7 @@ public interface SysUserBankCardService extends IService<SysUserBankCard> {
 
     SysUserBankCard getByBankNumber(String bankNumber, String userId);
 
-    HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO);
+    HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO,boolean flag);
 
     void auditByBankNumber(SysUserBankCardVO sysUserBankCardVO);
 

+ 6 - 4
src/main/java/com/ydtech/modules/admin/service/impl/SysUserBankCardServiceImpl.java

@@ -148,7 +148,7 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
 
     @Override
     @Transactional
-    public HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO) {
+    public HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO,boolean flag) {
         //个贷验证银行卡
         SysUser sysUser;
         String userId = sysUserBankCardVO.getUserId();
@@ -168,9 +168,11 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             request.setPhoneNo(sysUserBankCardVO.getPhoneNo());
             request.setName(sysUser.getName());
             request.setCertNo(sysUser.getIdentity());
-            response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
-            if (response != null && !"00".equals(response.getRespCode())) {
-                return HttpResult.error("未通过银行卡认证:" + response.getDetailRespMsg());
+            if(flag) {
+                response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
+                if (response != null && !"00".equals(response.getRespCode())) {
+                    return HttpResult.error("未通过银行卡认证:" + response.getDetailRespMsg());
+                }
             }
         }
         SysUserBankCard findSysUserBankCard = sysUserBankCardService.getOne(new LambdaQueryWrapper<SysUserBankCard>()

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -2803,7 +2803,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUserBankCardVO.setPhoneNo(user.getMobile());
             sysUserBankCardVO.setRealUserName(user.getName());
             sysUserBankCardVO.setUserName(user.getName());
-            bankCardService.insertByBankNumber(sysUserBankCardVO);
+            bankCardService.insertByBankNumber(sysUserBankCardVO,false);
         }
         // 保存个代银行卡认证轨迹
         SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(

+ 35 - 0
src/main/java/com/ydtech/modules/inv/utils/LocalDateTimeUtils.java

@@ -4,7 +4,11 @@ package com.ydtech.modules.inv.utils;
  * @author jianlong
  * @date 2024-01-24 18:26
  */
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+
 import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
@@ -467,4 +471,35 @@ public class LocalDateTimeUtils {
         return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
     }
 
+    public static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 现在时间在开始和结束时间之间
+     *
+     * @param start 开始时间
+     * @param end   结束时间
+     * @return true -> 在 false -> 不在
+     */
+    public static boolean nowIsBetweenStartAndEnd(String start, String end) {
+        try {
+            LocalDateTime startDateTime = LocalDateTime.parse(start, dateTimeFormatter);
+            LocalDateTime endDateTime = LocalDateTime.parse(end, dateTimeFormatter);
+            return nowIsBetweenStartAndEnd(startDateTime, endDateTime);
+        }catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 现在时间在开始和结束时间之间
+     *
+     * @param start 开始时间
+     * @param end   结束时间
+     * @return true -> 在 false -> 不在
+     */
+    public static boolean nowIsBetweenStartAndEnd(LocalDateTime start, LocalDateTime end) {
+        LocalDateTime now = LocalDateTime.now();
+        return start.isBefore(now) && end.isAfter(now);
+    }
+
 }

+ 16 - 9
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java

@@ -12,6 +12,7 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
 import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocols.entity.vo.AgreementAllInformationCopyVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -231,15 +232,14 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
 
 
     /**
-     *  @version
-     *  @author: whp
-     *  @Date: 2024/07/23
-     *  @Description: 查询审核的所有协议  协议名称拼接
+     * @version
+     * @author: whp
+     * @Date: 2024/07/23
+     * @Description: 查询审核的所有协议  协议名称拼接
      */
     List<PtlAgreement> findCheckAgreementListNew(PtlAgreement ptlAgreement);
 
 
-
     /**
      * 获取当前费用的保险公司所有协议
      *
@@ -272,12 +272,19 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
     List<PtlAgreement> getAllAgreement(String agreementId);
 
     HttpResult getAgreementCopy(PtlAgreementVo ptlAgreementVo);
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/21 15:33
-     *  @Description: 通过协议名称查询数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/21 15:33
+     * @Description: 通过协议名称查询数据
      */
     PtlAgreement getByAgreementTitle(String title);
 
+    /**
+     * 复制协议费用承保规则
+     *
+     * @param agreementAllInformationCopyVo 复制协议对象
+     */
+    void agreementAllInformationCopyVo(AgreementAllInformationCopyVo agreementAllInformationCopyVo);
 }

+ 65 - 11
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -2,9 +2,11 @@ package com.ydtech.modules.protocol.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.config.DictEnumConfig;
@@ -20,6 +22,7 @@ import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.service.InsCrawlerOrderService;
 import com.ydtech.modules.order.service.InsUploadFilesService;
 import com.ydtech.modules.protocol.constants.HistoryStatusConstants;
+import com.ydtech.modules.protocol.constants.ValidStatus;
 import com.ydtech.modules.protocol.dao.PtlAgreementGroupLinkDeptMapper;
 import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
@@ -32,6 +35,15 @@ import com.ydtech.modules.protocol.entity.po.*;
 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;
@@ -89,12 +101,16 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     private final PtlInsAttributionTemplateService ptlInsAttributionTemplateService;
 
     @Autowired
-    private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
 
+    @Autowired
+    private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
 
     @Autowired
-    private PtlAgreementMapper ptlAgreementMapper;
+    private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
 
+    @Autowired
+    private PtlAgreementMapper ptlAgreementMapper;
 
     @Value("${python.check}")
     private String pythonCheck;
@@ -840,7 +856,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             ptlAgreementAttributionService.saveAttribution(agreementId, esmInsCompany, agreement.getAttribution());
         }
         // 部门授权
-        ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
+//        ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
     }
 
 
@@ -998,8 +1014,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return list;
     }
 
-    //    @Autowired
-//    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
     public List<PtlAgreement> getCurrentAgreementList(String agreementId) {
         PtlAgreement ptlAgreement = this.getById(agreementId);
         String insuranceCompanyId = ptlAgreement.getInsuranceCompanyId();
@@ -1102,13 +1117,13 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
         }
         // 复制授权部门
-        List<PtlAgreementDept> ptlAgreementDept = ptlAgreementDeptService.list(new LambdaQueryWrapper<PtlAgreementDept>().eq(PtlAgreementDept::getAgreementId, ptlAgreement.getId()));
-        List<String> deptIds = ptlAgreementDept.stream().map(PtlAgreementDept::getDeptId).collect(Collectors.toList());
-        ptlAgreementDeptService.saveBatchDept(newPtlAgreement.getId(), deptIds);
+//        List<PtlAgreementDept> ptlAgreementDept = ptlAgreementDeptService.list(new LambdaQueryWrapper<PtlAgreementDept>().eq(PtlAgreementDept::getAgreementId, ptlAgreement.getId()));
+//        List<String> deptIds = ptlAgreementDept.stream().map(PtlAgreementDept::getDeptId).collect(Collectors.toList());
+//        ptlAgreementDeptService.saveBatchDept(newPtlAgreement.getId(), deptIds);
         // 添加授权部门记录
-        List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(newPtlAgreement.getId(),
-                deptIds, batchNo);
-        ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
+//        List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(newPtlAgreement.getId(),
+//                deptIds, batchNo);
+//        ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
         // 添加协议轨迹
         PtlAgreementTrajectory ptlAgreementTrajectory = new PtlAgreementTrajectory();
         ptlAgreementTrajectory.setId(IdGenerate.nextId());
@@ -1137,5 +1152,44 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return null;
     }
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void agreementAllInformationCopyVo(AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
+        PtlAgreement ptlAgreement = getById(agreementAllInformationCopyVo.getAgreementId());
+        ptlAgreement.setId(null);
+        ptlAgreement.setAuditStatus(0);
+        ptlAgreement.setValidStatus(String.valueOf(ValidStatus.AVS_0.getCode()));
+        save(ptlAgreement);
+
+        // 复制账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementAllInformationCopyVo.getAgreementId());
+        if(!Objects.isNull(ptlAgreementAttribution)) {
+            ptlAgreementAttribution.setId(ptlAgreement.getId());
+            ptlAgreementAttributionService.save(ptlAgreementAttribution);
+        }
+
+        AgreementAllInformationCopyVo.InformationDTO cost = agreementAllInformationCopyVo.getCost();
+        // 协议费用
+        List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = new ArrayList<>();
+        // 判断是否选择全部
+        if (cost.isAll()) {
+            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementAllInformationCopyVo.getAgreementId());
+        } else if (!cost.getInformationId().isEmpty()) {
+            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByCostsIdList(cost.getInformationId());
+        }
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        ptlAgreementProductCostsNewService.copyFeesAndRules(ptlAgreementProductCostsNews, ptlAgreement.getId());
+
+        AgreementAllInformationCopyVo.InformationDTO underwritingRules = agreementAllInformationCopyVo.getUnderwritingRules();
+        // 判断是否选择全部
+        List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews = new ArrayList<>();
+        if (underwritingRules.isAll()) {
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByAgreementId(agreementAllInformationCopyVo.getAgreementId());
+        } else if (!underwritingRules.getInformationId().isEmpty()) {
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByRulesIdList(underwritingRules.getInformationId());
+        }
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        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;
+
+}

+ 35 - 27
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,21 +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(@RequestBody AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
+        ptlAgreementService.agreementAllInformationCopyVo(agreementAllInformationCopyVo);
+        return HttpResult.ok("复制成功");
+    }
+
 }

+ 12 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLink.java

@@ -10,6 +10,10 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * 协议费用与规则属性关联表
  */
@@ -56,4 +60,12 @@ public class PtlAgreementProductCostsAttrLink {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementProductCostsAttrLink children;
+
+//    public static boolean beforeAndAfterTheChange(List<PtlAgreementProductCostsAttrLink> before, List<PtlAgreementProductCostsAttrLink> after) {
+//        Map<String, PtlAgreementProductCostsAttrLink> collect = before.stream().collect(Collectors.toMap(PtlAgreementProductCostsAttrLink::getAttrCode, x -> x));
+//
+//
+//
+//    }
+
 }

+ 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();
+    }
+
 }

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

@@ -238,6 +238,16 @@ public class PtlAgreementProductCostsNew {
     @TableField(exist = false)
     private String feeFileUrl;
 
+    @ApiModelProperty(value = "是否有效")
+    @TableField(exist = false)
+    private boolean effective;
+
+    /**
+     * 插入之前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();
+    }
 }

+ 44 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementAllInformationCopyVo.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("协议复制信息实体")
+public class AgreementAllInformationCopyVo implements Serializable {
+
+    private static final long serialVersionUID = -7422542310742227930L;
+
+    @ApiModelProperty("协议id")
+    private String agreementId;
+
+    @ApiModelProperty("费用")
+    private InformationDTO cost;
+
+    @ApiModelProperty("承保规则")
+    private InformationDTO underwritingRules;
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("信息实体")
+    public static class InformationDTO{
+
+        @ApiModelProperty("是否全部")
+        private boolean all;
+
+        @ApiModelProperty("承保规则id列表 和 费用id列表")
+        private List<String> informationId;
+
+    }
+
+}

+ 1 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java

@@ -20,6 +20,7 @@ public class AgreementProductQueryVo extends PageRequest {
 
     @ApiModelProperty(value = "协议id列表")
     private List<String> agreementIdList;
+
     @ApiModelProperty(value = "协议id")
     private String agreementId;
 

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

@@ -5,11 +5,22 @@ import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
 
+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 PtlAgreementProductCostsAttrLinkService extends IService<PtlAgreementProductCostsAttrLink> {
 
+    /**
+     * 通过费用id 获取费用因子
+     *
+     * @param costsId 费用id
+     * @return 费用因子列表
+     */
+    default List<PtlAgreementProductCostsAttrLink> getByCostsId(String costsId) {
+        return lambdaQuery().eq(PtlAgreementProductCostsAttrLink::getCostsId, costsId).list();
+    }
 }

+ 32 - 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;
 
@@ -30,6 +31,27 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
 
     List<PtlAgreementProductCostsNew> getByAgreementId(AgreementProductQueryVo agreementProductQueryVo);
 
+
+    /**
+     * 通过协议id 查询 协议费用表
+     *
+     * @param agreementId 协议id
+     * @return 费用列表
+     */
+    default List<PtlAgreementProductCostsNew> getByAgreementId(String agreementId) {
+        return lambdaQuery().eq(PtlAgreementProductCostsNew::getAgreementId, agreementId).list();
+    }
+
+    /**
+     * 费用id列表 获取费用
+     *
+     * @param costsIdList 费用id列表
+     * @return 费用列表
+     */
+    default List<PtlAgreementProductCostsNew> getByCostsIdList(List<String> costsIdList) {
+        return lambdaQuery().in(PtlAgreementProductCostsNew::getId, costsIdList).list();
+    }
+
     /**
      * 获取协议费用列表(用于分组费用关联)
      *
@@ -143,6 +165,7 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
      * @return
      */
     List<PtlAgreementProductCostsNew> getInquiryNowFee(InquiryNowFeeQueryVo inquiryNowFeeQueryVo);
+
     /**
      * 获取现询费用
      *
@@ -165,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().in(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().in(PtlAgreementUndwrtRulesNew::getId, rulesList).list();
+    }
+
+    /**
+     * 复制承保规则
+     * @param ptlAgreementUndwrtRulesNews 承保规则列表
+     * @param agreementId 协议id
+     */
+    void copyUndwrtRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews, String agreementId);
 }

+ 107 - 39
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.protocols.service.impl;
 
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,6 +25,7 @@ import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
 import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.inv.utils.LocalDateTimeUtils;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.FeeOrderNewRecordVo;
@@ -33,10 +35,12 @@ import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocol.constants.ValidStatus;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 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.*;
@@ -50,6 +54,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -59,6 +64,7 @@ import java.util.function.Consumer;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
+
 /**
  * @description 协议承保规则属性 service实现类
  * @createDate 2024-2-22 15:44:29
@@ -103,6 +109,8 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
     @Resource
     private InsFeeAuditHistoryService insFeeAuditHistoryService;
+    @Autowired
+    private PtlAgreementAttributionService ptlAgreementAttributionService;
 
     @Override
     public Page<PtlAgreementProductCostsNew> getProductPage(Page page, SysChannelGroupPageVo sysChannelGroupPageVo) {
@@ -227,32 +235,29 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         });
         //赋值出口比例
         List<PtlAgreementProductCostsNew> records = pages.getRecords();
-        for (int i = 0; i < records.size(); i++) {
-            int finalI = i;
-            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExports.stream().filter(y -> y.getCostsId().equals(records.get(finalI).getId())).findFirst().orElse(null);
-            if (!Objects.isNull(ptlAgreementProductCostsExport)) {
-                records.get(i).setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1().toString());
-                records.get(i).setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2().toString());
-                records.get(i).setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3().toString());
-                records.get(i).setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4().toString());
-                records.get(i).setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5().toString());
+        Map<String, PtlAgreementProductCostsExport> ptlAgreementProductCostsExportMap = ptlAgreementProductCostsExports.stream().collect(Collectors.toMap(PtlAgreementProductCostsExport::getCostsId, x -> x));
+        records.forEach(x -> {
+            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportMap.get(x.getId());
+            x.setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1().toString());
+            x.setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2().toString());
+            x.setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3().toString());
+            x.setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4().toString());
+            x.setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5().toString());
 //                records.get(i).setJqExportInvestmentRadio(ptlAgreementProductCostsExport.getJqExportInvestmentRadio().toString());
-                records.get(i).setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1().toString());
-                records.get(i).setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2().toString());
-                records.get(i).setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3().toString());
-                records.get(i).setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4().toString());
-                records.get(i).setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5().toString());
+            x.setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1().toString());
+            x.setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2().toString());
+            x.setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3().toString());
+            x.setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4().toString());
+            x.setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5().toString());
 //                records.get(i).setSyExportInvestmentRadio(ptlAgreementProductCostsExport.getSyExportInvestmentRadio().toString());
-                records.get(i).setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1().toString());
-                records.get(i).setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2().toString());
-                records.get(i).setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3().toString());
-                records.get(i).setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4().toString());
-                records.get(i).setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5().toString());
-            }
-        }
-        pages.getRecords().stream().forEach(x -> {
-
+            x.setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1().toString());
+            x.setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2().toString());
+            x.setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3().toString());
+            x.setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4().toString());
+            x.setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5().toString());
+            x.setEffective(LocalDateTimeUtils.nowIsBetweenStartAndEnd(x.getCostsStartDate(), x.getCostsEndDate()));
         });
+
         return pages;
     }
 
@@ -588,6 +593,9 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             ptlAgreementProductCostsNew.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
             ptlAgreementProductCostsNew.setCreateBy(BaseController.getUser().getId());
             ptlAgreementProductCostsNew.blank();
+            ptlAgreementProductCostsNew.setIsAudit(AgreementProductCostsAuditStatus.COSTS_AUDIT_STATUS_0.getCode());
+            ptlAgreementProductCostsNew.setValidStatus(ValidStatus.AVS_0.getCode());
+
             int insert = baseMapper.insert(ptlAgreementProductCostsNew);
 
             //添加费用出口信息
@@ -829,27 +837,21 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         }
         ptlAgreementProductCostsExportService.saveOrUpdate(ptlAgreementProductCostsExport);
 
-        //保存产品费用历史记录
-        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
-        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
-        //添加费用ID
-        ptlAgreementProductCostsNewHistory.setId(IdGenerate.nextId());
-        ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
-        //生成批次ID
+        //保存产品费用历史记录.
         String uuid = IdGenerate.nextId();
-        ptlAgreementProductCostsNewHistory.setBatch(uuid);
-        ptlAgreementProductCostsNewHistory.setProductId(newProjectId);
-        ptlAgreementProductCostsNewHistory.setProductName(newProjectName);
-        ptlAgreementProductCostsNewHistory.setOperatorType("update");
-        ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
-        ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
+        String userId = BaseController.getUser().getId();
+        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory(ptlAgreementProductCostsNew, ptlAgreementProductCostsExport, OperatorType.UPDATE, uuid, userId);
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
         ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
 
+        // 获取上次提交的信息
+        List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinkList = ptlAgreementProductCostsAttrLinkService.getByCostsId(ptlAgreementProductCostsNew.getId());
+        List<String> costsAttrLinkId = ptlAgreementProductCostsAttrLinkList.stream().map(PtlAgreementProductCostsAttrLink::getCostsId).collect(Collectors.toList());
 
         //设置费用因子属性
         //先删除属性值
-        ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
-                .eq(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNew.getId()));
+        ptlAgreementProductCostsAttrLinkService.removeBatchByIds(costsAttrLinkId);
+
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //创建产品费用因子历史记录容器
         List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
@@ -912,7 +914,6 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                         BeanUtils.copyProperties(x, costsAttrLinkHistory);
                         costsAttrLinkHistory.setId(null);
                         costsAttrLinkHistory.setBatch(uuid);
-
                         costsAttrLinkHistory.setOperatorType("update");
                         costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
                         costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
@@ -923,6 +924,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         });
         //保存产品费用因子历史记录
         ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
+
         ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
         //添加费用因子轨迹
         ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), "修改费用因子", BaseController.getUser().getId());
@@ -1029,6 +1031,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             PtlAgreementProductCostsNew ptlAgreementProductCostsNew = baseMapper.selectById(agreementProductCostsCopyVo.getOrgCostsId());
             ptlAgreementProductCostsNew.setAgreementId(agreementProductCostsCopyVo.getNewAgreementId());
             ptlAgreementProductCostsNew.setCreateTime(new Date().toString());
+
             BeanUtils.copyProperties(ptlAgreementProductCostsNew, agreementProductCosts);
             agreementProductCosts.getProductId().add(ptlAgreementProductCostsNew.getProductId());
             agreementProductCosts.getProductName().add(ptlAgreementProductCostsNew.getProductName());
@@ -2424,6 +2427,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
         return ptlAgreementProductCostsNews;
     }
+
     /**
      * 获取现询费用
      *
@@ -2513,4 +2517,68 @@ 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);
+            x.setValidStatus(ValidStatus.AVS_0.getCode());
+            x.setIsAudit(AgreementProductCostsAuditStatus.COSTS_AUDIT_STATUS_0.getCode());
+        });
+        // 协议费用出口比例
+        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, String> costsMapping = ptlAgreementProductCostsNews.stream()
+                .collect(Collectors.toMap(PtlAgreementProductCostsNew::getSaveBeforeId, PtlAgreementProductCostsNew::getId));
+        // 协议费用出口比例
+        ptlAgreementProductCostsExportList.forEach(x -> {
+            x.setId(null);
+            x.setCostsId(costsMapping.get(x.getCostsId()));
+        });
+        ptlAgreementProductCostsExportService.saveBatch(ptlAgreementProductCostsExportList);
+
+        // 将出口和入口合并
+        Map<String, PtlAgreementProductCostsNew> costsMappingNew = ptlAgreementProductCostsNews.stream()
+                .collect(Collectors.toMap(PtlAgreementProductCostsNew::getId, x-> x));
+        List<PtlAgreementProductCostsNewHistory> ptlAgreementProductCostsNewHistories = ptlAgreementProductCostsExportList.stream()
+                .map(x -> {
+                    PtlAgreementProductCostsNew ptlAgreementProductCostsNew = costsMappingNew.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()));
+        });
+        ptlAgreementProductCostsAttrLinkService.saveBatch(ptlAgreementProductCostsAttrLinkList);
+
+        // 费用因子规则历史表
+        List<PtlAgreementProductCostsAttrLinkHistory> ptlAgreementProductCostsAttrLinkHistories = ptlAgreementProductCostsAttrLinkList.stream()
+                .map(x -> new PtlAgreementProductCostsAttrLinkHistory(x, OperatorType.ADD, batchId, userId))
+                .collect(Collectors.toList());
+        ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(ptlAgreementProductCostsAttrLinkHistories);
+    }
+
 }

+ 80 - 58
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,39 +152,43 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
     /**
      * 遍历费用属性描述文字
+     *
      * @param v
      * @param undwrtRulesAttrList
      * @return
      */
     private String buildDesc(List<PtlAgreementUndwrtRulesAttrLink> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
-        String desc = "";
+        StringBuilder desc = new StringBuilder();
         for (int i = 0; i < v.size(); i++) {
             int finalI = i;
-            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
+                    .filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode()))
+                    .findAny()
+                    .get();
             //数值范围判断
+
             if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+                desc.append(inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i))).append("\n");
             }
             if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+                desc.append(radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i))).append("\n");
             }
             if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+                desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(v.get(i).getMin()).append("\n");
             }
-            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{
-                    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")) {
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(v.get(i).getMin()).append("\n");
+                } else {
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("不包含").append(v.get(i).getMin()).append("\n");
                 }
             }
         }
-        return desc;
+        return desc.toString();
     }
 
     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 +210,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 +310,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 +403,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 +433,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 +457,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.getRulesId()));
+            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);
+    }
+
 }