Browse Source

Merge branch 'test' into test_mq

hxl13994548489 1 năm trước cách đây
mục cha
commit
a89965d1ca
57 tập tin đã thay đổi với 1186 bổ sung254 xóa
  1. 10 6
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  2. 1 1
      src/main/java/com/ydtech/modules/admin/controller/SysUserBankController.java
  3. 2 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  4. 175 0
      src/main/java/com/ydtech/modules/admin/model/po/CustVehiclePolicyInfo.java
  5. 1 1
      src/main/java/com/ydtech/modules/admin/service/SysUserBankCardService.java
  6. 4 0
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  7. 9 6
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserBankCardServiceImpl.java
  8. 77 11
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  9. 12 0
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  10. 44 33
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  11. 35 0
      src/main/java/com/ydtech/modules/inv/utils/LocalDateTimeUtils.java
  12. 2 1
      src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java
  13. 6 1
      src/main/java/com/ydtech/modules/order/components/zijin/ZijinRequestApiComponents.java
  14. 2 2
      src/main/java/com/ydtech/modules/order/constants/QuoteNumberConstant.java
  15. 7 0
      src/main/java/com/ydtech/modules/order/controller/QuoteConfigController.java
  16. 2 0
      src/main/java/com/ydtech/modules/order/dao/SysQuoteUserConfigAppendMapper.java
  17. 1 1
      src/main/java/com/ydtech/modules/order/entity/InsBusinessInsurance.java
  18. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/bohai/response/UnderwritingResponse.java
  19. 12 0
      src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java
  20. 2 0
      src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsQueryVo.java
  21. 6 0
      src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsVo.java
  22. 2 0
      src/main/java/com/ydtech/modules/order/service/SysQuoteConfigService.java
  23. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java
  24. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java
  25. 5 3
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  26. 15 3
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  27. 15 1
      src/main/java/com/ydtech/modules/order/service/impl/SysQuoteConfigServiceImpl.java
  28. 1 3
      src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java
  29. 7 7
      src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java
  30. 30 2
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  31. 16 9
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java
  32. 65 11
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  33. 24 0
      src/main/java/com/ydtech/modules/protocols/constants/OperatorType.java
  34. 35 27
      src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java
  35. 12 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLink.java
  36. 15 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java
  37. 10 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  38. 47 1
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java
  39. 28 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java
  40. 5 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java
  41. 16 2
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java
  42. 44 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementAllInformationCopyVo.java
  43. 1 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java
  44. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java
  45. 32 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java
  46. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java
  47. 34 5
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java
  48. 107 39
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  49. 80 58
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java
  50. 5 1
      src/main/resources/application-pre.yml
  51. 4 0
      src/main/resources/application-prod.yml
  52. 4 0
      src/main/resources/application-test.yml
  53. 4 1
      src/main/resources/mapper/modules/admin/CustVehiclePolicyInfoMapper.xml
  54. 13 3
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  55. 2 2
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  56. 1 1
      src/main/resources/mapper/modules/order/SysQuoteRecordMapper.xml
  57. 64 1
      src/main/resources/mapper/modules/order/SysQuoteUserConfigAppendMapper.xml

+ 10 - 6
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -398,6 +398,10 @@ public class SysLoginController {
         String phone = phoneLoginVo.getPhone();
         String phoneMsg = phoneLoginVo.getPhoneMsg();
         SysUser user = sysUserService.findByPhone(phone);
+        if (user == null) {
+            //手机号不存在注册用户:上线测试团队
+            user = sysUserService.registerAPPUser(phone);
+        }
         //验证用户
         SysUser sysUser = sysUserService.getByUserId(user.getId());
         if ("2".equals(sysUser.getManagementSource())){
@@ -427,12 +431,12 @@ public class SysLoginController {
         if (StringUtils.isEmpty(phone)) {
             return HttpResult.error("手机号不能为空");
         }
-        if ("0".equals(type)) {  // 0 登录 1 注册
-            SysUser sysUser = sysUserService.findByPhone(phone);
-            if (sysUser == null) {
-                return HttpResult.error("手机号不存在!");
-            }
-        }
+//        if ("0".equals(type)) {  // 0 登录 1 注册
+//            SysUser sysUser = sysUserService.findByPhone(phone);
+//            if (sysUser == null) {
+//                return HttpResult.error("手机号不存在!");
+//            }
+//        }
 
         Random rand = new Random();
         // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

+ 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("审核卡号开户行")

+ 2 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -547,6 +547,8 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @Description: 查询电销的管理人列表
      */
     List<SysUser> findDxZyUserList();
+
+    List<SysUser> selectByUserId(List<String> ids);
 }
 
 

+ 175 - 0
src/main/java/com/ydtech/modules/admin/model/po/CustVehiclePolicyInfo.java

@@ -250,6 +250,141 @@ public class CustVehiclePolicyInfo implements Serializable {
      */
     private Integer delFlag;
 
+    //企业车新增
+    /**
+     *   固定电话
+     */
+    private String applyTel;
+
+    /**
+     *  省
+     */
+    private String applyProvince;
+
+    /**
+     *  市
+     */
+    private String applyCity;
+
+    /**
+     *  县
+     */
+    private String  applyCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String applyProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String applyRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String applyScope;
+    /***
+     * 联系人
+     */
+    private String applyLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String applyOrganizationCode;
+
+
+    /**
+     *   固定电话
+     */
+    private String insureTel;
+
+    /**
+     *  省
+     */
+    private String insureProvince;
+
+    /**
+     *  市
+     */
+    private String insureCity;
+
+    /**
+     *  县
+     */
+    private String  insureCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String insureProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String insureRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String insureScope;
+    /***
+     * 联系人
+     */
+    private String insureLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String insureOrganizationCode;
+
+
+    /**
+     *   固定电话
+     */
+    private String ownerTel;
+
+    /**
+     *  省
+     */
+    private String ownerProvince;
+
+    /**
+     *  市
+     */
+    private String ownerCity;
+
+    /**
+     *  县
+     */
+    private String  ownerCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String ownerProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String ownerRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String ownerScope;
+    /***
+     * 联系人
+     */
+    private String ownerLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String ownerOrganizationCode;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
@@ -291,6 +426,16 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getOwnerOwnerFlag() != null && custVehiclePolicyInfo.getOwnerOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getOwnerInsuranceHolderFlag() != null && custVehiclePolicyInfo.getOwnerInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getOwnerLegalPerson());
 
         }else if(type ==2){
             //姓名
@@ -328,6 +473,16 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getInsureOwnerFlag() != null && custVehiclePolicyInfo.getInsureOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getInsureInsuranceHolderFlag() != null && custVehiclePolicyInfo.getInsureInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getInsureTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getInsureOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getInsureProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getInsureCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getInsureCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getInsureProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getInsureRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getInsureScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getInsureLegalPerson());
 
         }else if(type ==3){
             //姓名
@@ -365,6 +520,26 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getApplyOwnerFlag() != null && custVehiclePolicyInfo.getApplyOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getApplyInsuranceHolderFlag() != null && custVehiclePolicyInfo.getApplyInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getOwnerLegalPerson());
         }
         return customerInfoVo;
     }

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

+ 4 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -126,6 +126,7 @@ public interface SysUserService extends BaseIService<SysUser> {
     boolean saveUser(SysUser sysUser);
 
     HttpResult saveUserInfo(SysUser2Vo sysUserVo);
+    SysUser saveUserJzgInfo(SysUser2Vo sysUserVo);
 
     HttpResult saveUserInfoByPartner(SysUser2Vo sysUserVo);
 
@@ -345,6 +346,9 @@ public interface SysUserService extends BaseIService<SysUser> {
 
     List<SysUser> findNextTreeContain(String managementSource);
 
+    SysUser registerAPPUser(String phone);
+
+    List<SysUser> selectByUserId(List<String> ids);
 }
 
 

+ 9 - 6
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>()
@@ -186,7 +188,8 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             findSysUserBankCard.setBankAddress(sysUserBankCardVO.getBankAddress());
             findSysUserBankCard.setBankAccount(sysUserBankCardVO.getBankAccount());
             findSysUserBankCard.setRealUserName(sysUserBankCardVO.getRealUserName());
-            findSysUserBankCard.setBankVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
+
+            findSysUserBankCard.setBankVerify(flag ? (response != null && "00".equals(response.getRespCode()) ? 1 : 0) : 1);
             sysUserBankCardService.updateById(findSysUserBankCard);
             SysUserBankCardHistory sysUserBankCardHistory = new SysUserBankCardHistory();
             sysUserBankCardHistory.setBankNumber(sysUserBankCardVO.getBankNumber());
@@ -205,7 +208,7 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             sysUserBankCard.setBankNumber(sysUserBankCardVO.getBankNumber().replaceAll("\\s+", ""));
             sysUserBankCard.setUserName(sysUserBankCardVO.getUserName());
             sysUserBankCard.setUserId(sysUserBankCardVO.getUserId());
-            sysUserBankCard.setBankVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
+            sysUserBankCard.setBankVerify(flag ? (response != null && "00".equals(response.getRespCode()) ? 1 : 0) : 1);
             //校验登录用户是否为合伙人或者是机构负责人
             boolean a = sysPartnerService.checkPartner(sysUser.getId());
             boolean b = sysAgencyLeaderService.checkUserId(sysUser.getId());

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

@@ -144,6 +144,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Value("${httpUrl}")
     private String httpUrl;
+    //晋掌柜APP: 未注册的手机号登录时创建新账户使用 -deptId -referrerId
+    @Value("${jzg.deptId}")
+    private String deptId;
+
+    @Value("${jzg.referrerId}")
+    private String referrerId;
+
+
 
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
@@ -160,15 +168,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysUserBaseVO> records = userList.getRecords();
         if (!CollectionUtils.isEmpty(records)) {
             for (SysUserBaseVO record : records) {
-                //合伙人APP邀请团队长查询推介人
-//                if (record.getType() != 0) {
-//                    String referrerId = record.getReferrerId();
-//                    if (StringUtils.isNotEmpty(referrerId)) {
-//                        record.setReferrerId(referrerId);
-//                        SysUser sysUser = sysUserMapper.selectById(record.getReferrerId());
-//                        record.setReferrerName(sysUser.getName());
-//                    }
-//                }
                 // 查询推荐人
                 EsmUserReferrer referrer = esmUserReferrerService.getById(record.getUserId());
                 if (ObjectUtils.isEmpty(referrer)) {
@@ -915,6 +914,45 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return HttpResult.ok("新增成功");
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public SysUser saveUserJzgInfo(SysUser2Vo sysUserVo) {
+        SysUser sysUser = sysUserVo.getSysUser();
+        //处理密码
+        if (StringUtils.isNotEmpty(sysUser.getPassword())) {
+            String salt = PasswordUtils.getSalt();
+            String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
+            sysUser.setPassword(pwd);
+            sysUser.setSalt(salt);
+        } else {
+            throw new SystemException("密码不能为空");
+        }
+        String userId = gainNextUserId(sysUser.getDeptId());
+
+        sysUser.setId(userId);
+        save(sysUser);
+
+        //角色配置
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(sysUser.getId());
+        userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
+        sysUserRoleService.save(userRole);
+        if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
+            //推荐人
+            esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
+        } else if ("20".equals(sysUser.getRoleId()) || "21".equals(sysUser.getRoleId())) {
+            //如果是 团队长或代理人 并且没有推荐人 则默认推荐人为自己
+            esmUserReferrerService.addReferrer(sysUser.getId(), userId);
+        }
+        SysUserInfo userInfo = sysUserVo.getSysUserInfo();
+        userInfo.setId(sysUser.getId());
+        sysUserInfoService.save(userInfo);
+
+        SysUser sysUser1 = sysUserMapper.selectById(sysUser.getReferrerId());
+        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, sysUser1.getName());
+        return sysUserMapper.selectById(userId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult saveUserInfoByPartner(SysUser2Vo sysUserVo) {
@@ -2765,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(
@@ -2835,9 +2873,37 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     }
 
+    @Override
+    public SysUser registerAPPUser(String phone) {
+
+        SysUser2Vo sysUser2Vo = new SysUser2Vo();
+        SysUser sysUser = new SysUser();
+        SysUserInfo sysUserInfo = new SysUserInfo();
+        sysUser.setMobile(phone);
+        sysUser.setReferrerId(referrerId);
+        sysUser.setDeptId(deptId);
+        sysUser.setStatus(0);
+        sysUser.setFactorVerify(0);
+        sysUser.setPassword("123456");
+        sysUser.setRoleId("20");
+        sysUser.setRoleName("代理人");
+        sysUser.setName("新增用户"+phone);
+        sysUser2Vo.setSysUser(sysUser);
+        sysUserInfo.setSex("U");
+        sysUser2Vo.setSysUserInfo(sysUserInfo);
+
+        return this.saveUserJzgInfo(sysUser2Vo);
+
+    }
+
+    @Override
+    public List<SysUser> selectByUserId(List<String> ids) {
+        return sysUserMapper.selectByUserId(ids);
+    }
+
     /**
      * 拼接机构来源
-     * @param users
+     * @param user
      */
     private void appendName(SysUser user) {
         StringBuilder stringBuilder = new StringBuilder();

+ 12 - 0
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -594,6 +594,18 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
      **/
     @Override
     public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
+            if("7".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDateType("2");
+            } else if ("30".equals(taskStatisticsVo.getDays())) {
+                taskStatisticsVo.setDateType("3");
+            } else if ("1".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDateType("1");
+            }
+        }
+        HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
+        taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
+        taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
         List<TaskStatisticsDto> result = new ArrayList<>();
          //0 报价中 1 待核保  2 已核保代缴费  3 已承保  4  核保退回
         for (int i = 0; i < 5; i++) {

+ 44 - 33
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -1,7 +1,9 @@
 package com.ydtech.modules.fee.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.constants.enums.dict.insurance.EnergyType;
+import com.ydtech.constants.enums.dict.insurance.NatureOfVehicleUse;
 import com.ydtech.constants.enums.dict.insurance.VehicleType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
@@ -46,6 +48,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -1621,10 +1624,6 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //默认分销比例设置
         RetailProportion retailProportion = new RetailProportion();
         if (!Objects.isNull(esmRetailList) && !esmRetailList.isEmpty()) {
-            //处理数据空指针异常   add by hxl  2024-12-19
-            if(esmRetailList.get(0).getRetailtype()==null){
-                esmRetailList.get(0).setRetailtype("0");
-            }
             retailLevel = Integer.parseInt(esmRetailList.get(0).getRetailtype());
             //赋值默认的分销比例
             retailProportion.setProportion(esmRetailList.get(0).getDisrate1(), esmRetailList.get(0).getDisrate2(), esmRetailList.get(0).getDisrate3());
@@ -2829,7 +2828,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 
         for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
             //判断是否匹配
-            if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList, logs)) {
+            if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList, logs,insOrders)) {
                 throw new SystemException(logs.toString());
             }
         }
@@ -2928,7 +2927,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      */
     private boolean judgementsRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinks,
                                     List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList,
-                                    StringBuilder logs) {
+                                    StringBuilder logs,InsOrders insOrders) {
         boolean useFlag = true;
 
         for (int i = 0; i < ptlAgreementUndwrtRulesAttrLinks.size(); i++) {
@@ -2963,7 +2962,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 }
             }
             if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
-                useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
+                useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),insOrders);
             }else{
                 useFlag = false;
             }
@@ -3072,7 +3071,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     }
 
     private boolean attrEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,
-                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value) {
+                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value,InsOrders insOrders) {
         if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
             return checkBoxEqual(ptlAgreementUndwrtRulesAttrLink, value);
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
@@ -3092,7 +3091,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
             return radioEqual(ptlAgreementUndwrtRulesAttrLink, value);
         } else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){
-            return dateTimeEqual(ptlAgreementUndwrtRulesAttrLink, value);
+            return dateTimeEqual(ptlAgreementUndwrtRulesAttrLink, value, insOrders);
         }
         return false;
     }
@@ -3354,37 +3353,49 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     }
 
 
-    public boolean dateTimeEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+    public boolean dateTimeEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value, InsOrders insOrders){
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        LocalDateTime v = LocalDateTime.parse(value,formatter);
-        LocalDateTime min = null,max = null;
-        if(!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())){
-            min = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMin(),formatter);
-        }
-        if(!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())){
-            max = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMax(),formatter);
-        }
-
-        //统一处理数值
-        if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(min) && v.isBefore(max)) {
+        //判断险种 的起保时间
+        if(ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime"))
+        {
+            if(insOrders.getProductid().equals(ProductsType.PT_0330.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime")){
                 return true;
             }
-        } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isBefore(min)) {
+            if(insOrders.getProductid().equals(ProductsType.PT_034001.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime")){
                 return true;
             }
-        } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isBefore(min)) {
-                return true;
+        }
+        if(!Objects.isNull(value) && !value.isEmpty()) {
+            LocalDateTime v = LocalDateTime.parse(value, formatter);
+            LocalDateTime min = null, max = null;
+            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())) {
+                min = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMin(), formatter);
             }
-        } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(max)) {
-                return true;
+            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())) {
+                max = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMax(), formatter);
             }
-        } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(max)) {
-                return true;
+
+            //统一处理数值
+            if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(min) && v.isBefore(max)) {
+                    return true;
+                }
+            } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isBefore(min)) {
+                    return true;
+                }
+            } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isBefore(min)) {
+                    return true;
+                }
+            } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(max)) {
+                    return true;
+                }
+            } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(max)) {
+                    return true;
+                }
             }
         }
         return false;

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

+ 2 - 1
src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java

@@ -57,7 +57,8 @@ public class DaJiaRequestApiComponents {
      */
     private <Q, S> S post(Q q, TradeCode tradeCode, Class<S> tClass) throws Exception {
 
-        String url = apiComponents.getUrl() + tradeCode.getCode() + "/inf.dd";
+//        String url = apiComponents.getUrl() + tradeCode.getCode() + "/inf.dd";
+        String url = apiComponents.getUrl() + tradeCode.getCode();
 
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.setContentType(MediaType.TEXT_PLAIN);

+ 6 - 1
src/main/java/com/ydtech/modules/order/components/zijin/ZijinRequestApiComponents.java

@@ -83,7 +83,7 @@ public class ZijinRequestApiComponents {
                                                           HttpHeaders httpHeaders) {
         String url = zijinApiConfigurationProperties.getUrl() + requestUrl.getUri();
         B b = insCrawlerOrderComponents.request(url, InsuranceEnum.ZKIC, requestUrl.getDesc(), requestBody, responseType, httpHeaders);
-        ResultEnum.verifyQuotation(b.getRtnCode(), b.getRtnMsg());
+//        ResultEnum.verifyQuotation(b.getRtnCode(), b.getRtnMsg());
         return b;
     }
 
@@ -137,6 +137,11 @@ public class ZijinRequestApiComponents {
         if (!ObjectUtils.isEmpty(entries)) {
             String authorization = (String) entries.get(AUTHORIZATION);
             String zKIApiAuthorization = (String) entries.get(ZKI_API_AUTHORIZATION);
+
+            System.out.printf("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
+            System.out.printf("authorization:" + authorization);
+            System.out.printf("zKIApiAuthorization:" + zKIApiAuthorization);
+            System.out.printf("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
             httpHeaders.set(AUTHORIZATION, authorization);
             httpHeaders.set(ZKI_API_AUTHORIZATION, zKIApiAuthorization);
             return httpHeaders;

+ 2 - 2
src/main/java/com/ydtech/modules/order/constants/QuoteNumberConstant.java

@@ -54,8 +54,8 @@ public class QuoteNumberConstant {
     @Getter
     public enum QuoteResult{
         FAIL(0,"报价失败"),
-        SUCCESS(1,"报价成功"),
-        QUOTE_NUM_NOT_ENOUGH(2,"次数不足"),;
+        SUCCESS(1,"报价成功"),;
+//        QUOTE_NUM_NOT_ENOUGH(2,"次数不足"),;
         private Integer code;
         private String desc;
         public static String getByCode(String code){

+ 7 - 0
src/main/java/com/ydtech/modules/order/controller/QuoteConfigController.java

@@ -102,6 +102,13 @@ public class QuoteConfigController extends BaseController {
         return HttpResult.ok(quoteDetails);
     }
 
+    @PostMapping(value = "getAppendUserQuoteInfo")
+    @ApiOperation(value = "增次详情")
+    public HttpResult getAppendUserQuoteInfo(@RequestBody QuoteDetailsQueryVo quoteDetailsQueryVo){
+        QuoteDetailsVo quoteDetailsVo = sysQuoteConfigService.getAppendUserQuoteInfo(quoteDetailsQueryVo.getCompanyId(),quoteDetailsQueryVo.getAgentId(),quoteDetailsQueryVo.getId());
+        return HttpResult.ok(quoteDetailsVo);
+    }
+
     @GetMapping(value = "getQuoteAction")
     @ApiModelProperty(value = "获取报价动作字典")
     public HttpResult getQuoteAction(){

+ 2 - 0
src/main/java/com/ydtech/modules/order/dao/SysQuoteUserConfigAppendMapper.java

@@ -18,4 +18,6 @@ import java.util.List;
  */
 public interface SysQuoteUserConfigAppendMapper extends BaseMapper<SysQuoteUserConfigAppend> {
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,@Param("param") QuoteDetailsQueryVo quoteDetailsQueryVo);
+
+    public QuoteDetailsVo getAppendUserQuoteInfo(@Param("companyId") String companyId,@Param("userId") String userId,@Param("id") String id);
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/InsBusinessInsurance.java

@@ -69,7 +69,7 @@ public class InsBusinessInsurance implements Serializable {
     public static boolean isAdditionalInsurance(String kindCode){
         if(kindCode.equals("D3") || kindCode.equals("D4") || kindCode.equals("L") || kindCode.equals("MJ1") || kindCode.equals("MJ2") ||
         kindCode.equals("MJ3") || kindCode.equals("MJ4") || kindCode.equals("SY_FJ_YBW1") || kindCode.equals("SY_FJ_YBW2") ||
-        kindCode.equals("SY_FJ_YBW3") || kindCode.equals("BD")){
+        kindCode.equals("SY_FJ_YBW3") || kindCode.equals("BD") || kindCode.equals("SY_WBDWGZ")){
             return true;
         }
         return false;

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/api/bohai/response/UnderwritingResponse.java

@@ -186,7 +186,7 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             private static final String MESSAGES = "核保成功";
 
             public DrivingInsuranceDto toDrivingInsuranceDto() {
-                if (!MESSAGES.equals(this.getResultMsg())) {
+                if (StringUtils.isEmpty(this.getApplicationNo())) {
                     throw new SystemException(this.getResultMsg());
                 }
 

+ 12 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java

@@ -142,6 +142,18 @@ public class CrawlerQuoteResponse extends CrawlerBaseResponse {
         @JsonProperty("price")
         private String price;
 
+        /**
+         * 非车险起保时间
+         */
+        @JsonProperty("fcx_startDate")
+        private String divingInsurancesStartDate;
+
+        /**
+         * 非车险终保时间
+         */
+        @JsonProperty("fcx_endDate")
+        private String divingInsurancesEndDate;
+
         public static List<AccidentResponseVo> toAccidentResponseVoList(List<DivingInsurancesDto> drivingInsurances) {
             return drivingInsurances.stream().map(DivingInsurancesDto::toAccidentResponseVo).collect(Collectors.toList());
         }

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsQueryVo.java

@@ -21,6 +21,8 @@ public class QuoteDetailsQueryVo extends PageRequest {
     @ApiModelProperty(value = "子订单号")
     private String subOrderNo;
 
+    private String id;
+
     @ApiModelProperty(value = "动作")
     private String action;
 

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsVo.java

@@ -8,6 +8,9 @@ import lombok.Data;
  */
 @Data
 public class QuoteDetailsVo {
+
+    private String id;
+
     @ApiModelProperty(value = "子订单号")
     private String subOrderNo;
 
@@ -38,6 +41,9 @@ public class QuoteDetailsVo {
     @ApiModelProperty(value = "联系电话")
     private String mobile;
 
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
     @ApiModelProperty(value = "结果")
     private String result;
 

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/SysQuoteConfigService.java

@@ -70,6 +70,8 @@ public interface SysQuoteConfigService extends IService<SysQuoteConfig> {
      */
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,QuoteDetailsQueryVo quoteDetailsQueryVo);
 
+    public QuoteDetailsVo getAppendUserQuoteInfo(String companyId,String userId,String id);
+
     /**
      * 根据保险公司获取今天用户追加的数据
      */

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -443,7 +443,7 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
         if (!Objects.isNull(nvhlodr1001Response)) {
             insAreaCompany.setCrossInsurance(JSONArray.parseArray(JSON.toJSONString(nvhlodr1001Response.getPolicyInfos())));
         }
-        insAreaCompanyService.insertCompanyAndOrders(insAreaCompany, insAreaCompanyAccidentalDriving);
+        insAreaCompanyService.insertCompanyAndOrders(companyId,insAreaCompany, insAreaCompanyAccidentalDriving);
         quoteRespVo.setCompanyId(companyId);
         quoteRespVo.setOrderno(quoteInfoVo.getOrderNo());
         // 车船税

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -351,7 +351,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         });
         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
         //刷新redis中的报价次数
-        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteVo.getUserId(),sysQuoteRecords);
+        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),yaQuoteInfoVo.getUserid(),sysQuoteRecords);
         log.debug("--------报价结束,车牌:{},vin:{}--------------", carInfo.getLicenseNo(), carInfo.getVinNo());
         return HttpResult.ok("报价成功", quoteRespVo);
 

+ 5 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -168,9 +168,11 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
                 sysQuoteRecords.forEach(item -> {
                     item.setSubOrderNo(subOrderNo);
                 });
-                sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
-                //刷新redis中的报价次数
-                sysQuoteRedisService.refreshQuoteNum(t.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+                if(sysQuoteRecords.size() > 0) {
+                    sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+                    //刷新redis中的报价次数
+                    sysQuoteRedisService.refreshQuoteNum(t.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+                }
             }
             throw new SystemException(response.getMessage());
         }

+ 15 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -537,6 +537,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             quoteInfoVo.setKindList(new ArrayList<>());
         }
 
+
         //添加后线人员不能报价的验证
         if (!"admin".equals(realUserId) && !realUserId.contains("M")) {
             throw new SystemException("后线人员不允许报价!!");
@@ -549,6 +550,17 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         SysDept dept = sysDeptService.getById(user.getDeptId());
         // 2 构造订单
         InsOrders insOrders = new InsOrders(user, dept, quoteInfoVo);
+
+        //单交过滤risk中的商业时间问题。
+        if(insOrders.getProductid().equals("0330")){
+            //说明存在商业信息
+            if(quoteInfoVo.getRiskList().size()>1){
+                //移除商业信息
+                quoteInfoVo.getRiskList().removeIf(risk -> risk.getRiskCode().equals("0510"));
+            }
+        }
+
+
         if (daikeFlag) {//当时代客录单业务时,才需要赋值该字段
             insOrders.setOperatorid(userId);//赋值代客录单操作人为登录人
         }
@@ -778,7 +790,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置车主信息
             JSONObject ownerInfo = insOrdersExcel.getOwnerInfo();
-            CustomerInfoVo owner = ownerInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo owner =  JSON.parseObject(JSON.toJSONString(ownerInfo), CustomerInfoVo.class);
             insOrdersExcel.setOwnerName(owner.getName());
             insOrdersExcel.setOwnerAge(owner.getAge());
             insOrdersExcel.setOwnerMobile(owner.getMobile());
@@ -786,7 +798,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置申请人信息
             JSONObject applyInfo = insOrdersExcel.getApplyInfo();
-            CustomerInfoVo apply = applyInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo apply = JSON.parseObject(JSON.toJSONString(applyInfo), CustomerInfoVo.class);
             insOrdersExcel.setApplyName(apply.getName());
             insOrdersExcel.setApplyAge(apply.getAge());
             insOrdersExcel.setApplyMobile(apply.getMobile());
@@ -794,7 +806,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置被保险人信息
             JSONObject insureInfo = insOrdersExcel.getInsureInfo();
-            CustomerInfoVo insure = insureInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo insure = JSON.parseObject(JSON.toJSONString(insureInfo), CustomerInfoVo.class);
             insOrdersExcel.setInsureName(insure.getName());
             insOrdersExcel.setInsureAge(insure.getAge());
             insOrdersExcel.setInsureMobile(insure.getMobile());

+ 15 - 1
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteConfigServiceImpl.java

@@ -236,7 +236,7 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
             List<SysQuoteUser> sysQuoteUsers = sysQuoteUserMapper.selectList(new LambdaQueryWrapper<SysQuoteUser>()
                   .eq(SysQuoteUser::getConfigId, sysQuoteConfig.getId()));
             List<String> users = sysQuoteUsers.stream().map(user -> user.getUserId()).collect(Collectors.toList());
-            List<SysUser> sysUsers = sysUserService.getByIds(users);
+            List<SysUser> sysUsers = sysUserService.selectByUserId(users);
             sysQuoteConfig.setProxyList(sysUsers);
         }
         return sysQuoteConfig;
@@ -291,10 +291,20 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
 
     @Override
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,QuoteDetailsQueryVo quoteDetailsQueryVo) {
+        if(!Objects.isNull(quoteDetailsQueryVo.getStartTime()) && !quoteDetailsQueryVo.getStartTime().equals("")){
+            quoteDetailsQueryVo.setStartTime(quoteDetailsQueryVo.getStartTime() + " 00:00:00");
+            quoteDetailsQueryVo.setEndTime(quoteDetailsQueryVo.getEndTime() + " 23:59:59");
+        }
         Page<QuoteDetailsVo> appendUserQuote = sysQuoteUserConfigAppendMapper.getAppendUserQuote(page,quoteDetailsQueryVo);
         return appendUserQuote;
     }
 
+    @Override
+    public QuoteDetailsVo getAppendUserQuoteInfo(String companyId,String userId,String id){
+        QuoteDetailsVo appendUserQuoteInfo = sysQuoteUserConfigAppendMapper.getAppendUserQuoteInfo(companyId, userId, id);
+        return appendUserQuoteInfo;
+    }
+
     /**
      * 根据保险公司获取今天用户追加的数据
      */
@@ -309,6 +319,10 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
 
     @Override
     public Page<QuoteDetailsVo> getQuoteRecordPage(Page page, QuoteDetailsQueryVo quoteDetailsQueryVo) {
+        if(!Objects.isNull(quoteDetailsQueryVo.getStartTime()) && !quoteDetailsQueryVo.getStartTime().equals("")){
+            quoteDetailsQueryVo.setStartTime(quoteDetailsQueryVo.getStartTime() + " 00:00:00");
+            quoteDetailsQueryVo.setEndTime(quoteDetailsQueryVo.getEndTime() + " 23:59:59");
+        }
         if(quoteDetailsQueryVo.getDeptId() == null) {
             quoteDetailsQueryVo.setDeptId(BaseController.getDeptId());
         }

+ 1 - 3
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java

@@ -384,10 +384,8 @@ public class SysQuoteRedisServiceImpl implements SysQuoteRedisService {
     public void refreshQuoteNum(String companyId, String userId, List<SysQuoteRecord> sysQuoteRecords) {
         String licenseNo = sysQuoteRecords.get(0).getLicenseNo();
         QuoteNumRedisVo quoteNumberRedisData = getQuoteNumberRedisData(userId);
-        QuoteNumRedisVo.QuoteNumberCompanyVo quoteNumberCompanyVo = quoteNumberRedisData.getQuoteCompanyList().stream()
-                .filter(company -> company.getCompanyId().equals(companyId)).findFirst().orElse(null);
 
-        if(!Objects.isNull(quoteNumberCompanyVo)){
+        if(quoteNumberRedisData.getQuoteCompanyList().stream().anyMatch(company -> company.getCompanyId().equals(companyId))){
             quoteNumberRedisData.getQuoteCompanyList().forEach(item->{
                 if(item.getCompanyId().equals(companyId)){
                     item.setDayMaxQuoteNum(item.getDayMaxQuoteNum() + sysQuoteRecords.size());

+ 7 - 7
src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java

@@ -226,7 +226,7 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                     } else {
                         InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
                         InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
-                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                        if (yangGuangAccuracyCalculateResponseRe.getErrorMessage().contains("重复投保")) {
                             insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
                         }
                         String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(), insOrderStatusEnum);
@@ -241,18 +241,18 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
                         //刷新redis中的报价次数
                         sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
-                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                        throw new SystemException(yangGuangAccuracyCalculateResponseRe.getErrorMessage());
                     }
                 } else {
                     boolean isEnergy = carInfo.isNewEnergy();
-                    if (!yangGuangAccuracyCalculateResponse.getErrorCode().equals("0")) {
+                    if (!yangGuangAccuracyCalculateResponseRe.getErrorCode().equals("0")) {
                         QuoteRespVo resp  = new QuoteRespVo();
                         InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
                         InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
-                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                        if (yangGuangAccuracyCalculateResponseRe.getErrorMessage().contains("重复投保")) {
                         insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
                         }
-                        String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(), insOrderStatusEnum);
+                        String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponseRe.getErrorMessage(), insOrderStatusEnum);
                         SysQuoteRecord sysQuoteRecord2 = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
                                 QuoteNumberConstant.QuoteAction.QUOTE_FAILED.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
                         sysQuoteRecords.add(sysQuoteRecord2);
@@ -264,10 +264,10 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
                         //刷新redis中的报价次数
                         sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
-                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                        throw new SystemException(yangGuangAccuracyCalculateResponseRe.getErrorMessage());
                     }
                     // 处理数据
-                    QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
+                    QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponseRe, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
 
                 // 设置核心报价车型
                 quoteRespVo.setCoreModels(carModelList1.toCoreModelsVo());

+ 30 - 2
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -15,7 +15,9 @@ import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
 import com.ydtech.modules.order.components.zijin.ZijinRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
+import com.ydtech.modules.order.constants.QuoteNumberConstant;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
+import com.ydtech.modules.order.dao.SysQuoteRecordMapper;
 import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.zijin.constants.enums.*;
 import com.ydtech.modules.order.entity.api.zijin.request.*;
@@ -25,6 +27,7 @@ import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
+import com.ydtech.modules.order.entity.po.SysQuoteRecord;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
@@ -71,6 +74,10 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     private final InsImagesUploadCacheComponents insImagesUploadCacheComponents;
 
+    private final SysQuoteRecordMapper sysQuoteRecordMapper;
+
+    private final SysQuoteRedisService sysQuoteRedisService;
+
     // 重复投保次数
     private static final int REPEAT_NUMBER = 3;
 
@@ -107,6 +114,9 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<List<ZjQuoteAccidentVo>> quoteVo) {
+        Integer maxQuoteNum = quoteVo.getMaxQuoteNum();
+        List<SysQuoteRecord> sysQuoteRecords = new ArrayList<>();
+
         // 1. 协议id获取配置实体
         String agreementId = quoteVo.getAgreementId();
         // 1.1 账号信息
@@ -160,7 +170,15 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
                 insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
             }
             String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, calculatePremiumResponse.getRtnMsg(), insOrderStatusEnum);
-
+            SysQuoteRecord deplSysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
+                    QuoteNumberConstant.QuoteAction.QUOTE_SUCCESS.getCode().toString(),QuoteNumberConstant.QuoteResult.SUCCESS.getCode().toString());
+            sysQuoteRecords.add(deplSysQuoteRecord);
+            sysQuoteRecords.forEach(item->{
+                item.setSubOrderNo(subOrderNo);
+            });
+            sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+            //刷新redis中的报价次数
+            sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
             throw new SystemException(calculatePremiumResponse.getRtnMsg());
         }
 
@@ -174,8 +192,18 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
         // 设置核心报价车型
         quoteRespVo.setCoreModels(vehicleModelInfosDTO.toCoreModelsVo());
-        return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, calculatePremiumRequest.getOrderId(),
+        HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, calculatePremiumRequest.getOrderId(),
                 calculatePremiumRequest.getOrderNo(), quoteVo.getAccidentalDrivingVo());
+        SysQuoteRecord deplSysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
+                QuoteNumberConstant.QuoteAction.QUOTE_SUCCESS.getCode().toString(),QuoteNumberConstant.QuoteResult.SUCCESS.getCode().toString());
+        sysQuoteRecords.add(deplSysQuoteRecord);
+        sysQuoteRecords.forEach(item->{
+            item.setSubOrderNo(quoteRespVoHttpResult.getData().getCompanyId());
+        });
+        sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+        //刷新redis中的报价次数
+        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+        return quoteRespVoHttpResult;
     }
 
     @Override

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

+ 5 - 1
src/main/resources/application-pre.yml

@@ -481,4 +481,8 @@ ttqf:
   tokenUrl: https://test.baoxianzhanggui.com/web-api
 
 #灵活用工平台实时推送ip地址
-sendMessage-zg-yggl-IP: https://test.baoxianzhanggui.com/prod-api
+sendMessage-zg-yggl-IP: https://test.baoxianzhanggui.com/prod-api
+#晋掌柜APP  手机注册用户 机构id  推荐人id
+jzg:
+  deptId: "99140121M09D01"
+  referrerId: "99140121M09D01001"

+ 4 - 0
src/main/resources/application-prod.yml

@@ -487,3 +487,7 @@ ttqf:
 
 #灵活用工平台实时推送ip地址
 sendMessage-zg-yggl-IP: https://test.baoxianzhanggui.com/prod-api
+#晋掌柜APP  手机注册用户 机构id  推荐人id
+jzg:
+  deptId: "99140121M09D01"
+  referrerId: "99140121M09D01001"

+ 4 - 0
src/main/resources/application-test.yml

@@ -564,3 +564,7 @@ httpUrl: https://test.baoxianzhanggui.com/copartnerH5/#/pages/index/result?
 
 #灵活用工平台实时推送ip地址
 sendMessage-zg-yggl-IP: https://test.baoxianzhanggui.com/prod-api
+#晋掌柜APP  手机注册用户 机构id  推荐人id
+jzg:
+  deptId: "99140121M09D01"
+  referrerId: "99140121M09D01001"

+ 4 - 1
src/main/resources/mapper/modules/admin/CustVehiclePolicyInfoMapper.xml

@@ -19,7 +19,10 @@
         owner_identify_valid_end_date,create_by,create_time,
         update_by,update_time,del_flag,
         insure_owner_flag,insure_insurance_holder_flag,owner_owner_flag,
-        owner_insurance_holder_flag,apply_owner_flag,apply_insurance_holder_flag
+        owner_insurance_holder_flag,apply_owner_flag,apply_insurance_holder_flag,
+        apply_tel,apply_province,apply_city,apply_county,apply_property,apply_registered_capital,apply_scope,apply_legal_person,apply_organization_code,
+        insure_tel,insure_province,insure_city,	insure_county,insure_property,insure_registered_capital,insure_scope,insure_legal_person,insure_organization_code,
+        owner_tel,owner_province,owner_city,owner_county,owner_property,owner_registered_capital,owner_scope,owner_legal_person,owner_organization_code
     </sql>
     <select id="findCustomerInfo" resultType="com.ydtech.modules.admin.model.po.CustVehiclePolicyInfo">
         select

+ 13 - 3
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -60,6 +60,9 @@
             <if test="sysUser.roleId != null &amp;&amp; sysUser.roleId != ''">
                 and sur.role_id = #{sysUser.roleId}
             </if>
+            <if test="sysUser.deptId != null &amp;&amp; sysUser.deptId != ''">
+                and su.dept_id = #{sysUser.deptId}
+            </if>
 
             <if test="sysUser.status != null">
                 and su.status = #{sysUser.status}
@@ -102,9 +105,7 @@
     <select id="selectUserPage" resultMap="sysUserMap">
         select
         <include refid="Sys_User_Column_List"/>
-        <if test="sysUser.deptName == null || sysUser.deptName == ''">
-            <include refid="Sys_User_Where_Clause"></include>
-        </if>
+        <include refid="Sys_User_Where_Clause"></include>
 
          <if test="sysUser.deptName != null &amp;&amp; sysUser.deptName != ''">
             <include refid="Sys_User_Where_Clause_deptName"></include>
@@ -2092,4 +2093,13 @@
           AND t1.id LIKE '%M%'
           AND t2.management_source = 3
     </select>
+    
+    <select id="selectByUserId" resultType="com.ydtech.modules.admin.model.SysUser">
+        SELECT su.*,sd.name as dept_name
+        from sys_user su left join sys_dept sd on su.dept_id = sd.id
+        where 1 = 1
+        <foreach collection="ids" item="item" open="and" separator="or">
+            su.id = #{item}
+        </foreach>
+    </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -2250,8 +2250,8 @@
             a.partnerCompaniesName as "partnerCompaniesName",
             sum(a.totalPremium) as  "totalPremium",
             sum(a.qutationInsureCount) as  "qutationInsureCount",
-            sum(a.totalPremium) / sum(a.qutationInsureCount)  AS "averagePremium",
-            sum(a.totalPremium)  /   sum(a.userNumber)   as "perCapitaAmount",
+            ROUND(sum(a.totalPremium) / sum(a.qutationInsureCount), 2)   AS "averagePremium",
+            ROUND(sum(a.totalPremium) / sum(a.userNumber),2)  as "perCapitaAmount",
             sum(a.userNumber) as "userNumber"
         from  (
         select

+ 1 - 1
src/main/resources/mapper/modules/order/SysQuoteRecordMapper.xml

@@ -55,7 +55,7 @@
                 AND sqr.result = #{param.result}
             </if>
             <if test="param.agent != null and param.agent != ''">
-                AND sqr.agent = #{param.agent}
+                AND (sqr.user_id = #{param.agent} or su.name = #{param.agent})
             </if>
             <if test="param.operator != null and param.operator != ''">
                 AND sqr.operator = #{param.operator}

+ 64 - 1
src/main/resources/mapper/modules/order/SysQuoteUserConfigAppendMapper.xml

@@ -7,7 +7,7 @@
     <select id="getAppendUserQuote" resultType="com.ydtech.modules.order.entity.vo.QuoteDetailsVo">
         SELECT
             eic.namesimple as company,
-            sd.id,
+            squca.id,
             sd.name as dept_name,
             sd.id as dept_id,
             su.name,
@@ -37,4 +37,67 @@
             squca.create_time DESC
     </select>
 
+    <select id="getAppendUserQuoteInfo" resultType="com.ydtech.modules.order.entity.vo.QuoteDetailsVo">
+        SELECT
+            squca.*,
+            eic.namesimple as company,
+            su.name,
+            sd.name as dept_name,
+            jrbj.numCount,
+            jrcb.dayCoverOrder,
+            COALESCE((COALESCE(dayCoverOrder, 0) / NULLIF(dayAllOrder, 0)), 0) * 100 AS rate
+        FROM
+            sys_quote_user_config_append squca
+                LEFT JOIN (
+                -- 今日已承保
+                SELECT
+                    COUNT(*) AS dayCoverOrder
+                FROM
+                    sys_quote_record sqr
+                        LEFT JOIN
+                    ins_area_company iac ON iac.id = sqr.sub_order_no
+                WHERE
+                    user_id = #{userId}
+                  AND sqr.company_id = #{companyId}
+                  AND orderstatus = 3
+                  AND DATE(create_time) = CURRENT_DATE
+            ) jrcb ON 1 = 1
+                LEFT JOIN (
+                -- 今日已报价
+                SELECT
+                    COUNT(*) AS numCount
+                FROM
+                    sys_quote_record sqr
+                WHERE
+                    user_id = #{userId}
+                  AND sqr.company_id = #{companyId}
+                  AND DATE(create_time) = CURRENT_DATE
+            ) jrbj ON 1 = 1
+                LEFT JOIN (
+                -- 今日已报价单的订单号
+                SELECT
+                    COUNT(*) AS dayAllOrder
+                FROM (
+                         SELECT
+                             sub_order_no
+                         FROM
+                             sys_quote_record sqr
+                         WHERE
+                             user_id = #{userId}
+                           AND sqr.company_id = #{companyId}
+                           AND DATE(create_time) = CURRENT_DATE
+                         GROUP BY
+                             sub_order_no
+                     ) grouped_sub_orders
+            ) jrbjdd ON 1 = 1
+                left join sys_user su on squca.user_id = su.id
+                left join sys_dept sd on su.dept_id = sd.id
+                left join esm_ins_company eic on eic.id = squca.company_id
+        WHERE
+            squca.user_id = #{userId}
+          AND squca.company_id = #{companyId}
+          AND DATE(squca.create_time) = CURRENT_DATE
+        AND squca.id = #{id}
+    </select>
+
 </mapper>