Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master' into dev_jzg_lipf_v20260622

lipf 4 nedēļas atpakaļ
vecāks
revīzija
f73ee24634
33 mainītis faili ar 637 papildinājumiem un 354 dzēšanām
  1. 10 0
      commons/src/main/java/com/jzg/commons/constants/dict/InsOrderStatusEnum.java
  2. 4 0
      commons/src/main/java/com/jzg/commons/entity/dto/InsOrdersParamVO.java
  3. 3 3
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateFollow.java
  4. 2 2
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSuperviseCar.java
  5. 1 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSuperviseNoCar.java
  6. 3 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java
  7. 2 0
      commons/src/main/java/com/jzg/commons/entity/po/SysOrganization.java
  8. 6 0
      commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java
  9. 1 8
      partner/src/main/java/com/jzg/service/Impl/PartnerUserServiceImpl.java
  10. 33 20
      partner/src/main/resources/mapper/PartnerUserMapper.xml
  11. 7 2
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/constants/OperatorConstant.java
  12. 51 62
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java
  13. 3 3
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  14. 15 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java
  15. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  16. 23 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  17. 6 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  18. 1 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java
  19. 9 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/TaipingCrawlerConfigureParameters.java
  20. 235 207
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerPremiumCalculateRequest.java
  21. 6 9
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerSubmitValidateRequest.java
  22. 8 3
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerPremiumCalculateData.java
  23. 117 11
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java
  24. 3 3
      tenant/organization/src/main/java/com/jzg/organization/controller/SysOrganizationController.java
  25. 4 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/EsmUserReferrerMapper.java
  26. 8 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java
  27. 6 1
      tenant/organization/src/main/java/com/jzg/organization/service/SysOrganizationService.java
  28. 14 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  29. 6 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  30. 21 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysOrganizationServiceImpl.java
  31. 3 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgAppServiceImpl.java
  32. 15 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  33. 10 0
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

+ 10 - 0
commons/src/main/java/com/jzg/commons/constants/dict/InsOrderStatusEnum.java

@@ -46,5 +46,15 @@ public enum InsOrderStatusEnum implements IBaseEnum {
         return result;
     }
 
+    /**
+     * 根据code获取描述
+     * @param code 状态码
+     * @return desc,找不到返回null
+     */
+    public static String getDescByCode(String code) {
+        InsOrderStatusEnum statusEnum = matchKey(code);
+        return statusEnum != null ? statusEnum.getDesc() : null;
+    }
+
 
 }

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/dto/InsOrdersParamVO.java

@@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 
 @Data
@@ -61,6 +62,9 @@ public class InsOrdersParamVO extends PageRequest {
     @Schema(description = "主订单标识")
     private String parentId;
 
+    @Schema(description = "主订单标识")
+    private List<String> parentIds;
+
     @Schema(description = "投保人")
     private String policyholder;
 

+ 3 - 3
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateFollow.java

@@ -39,15 +39,15 @@ public class ExcelContent4PrivateFollow implements Serializable {
     private String jyPolicyNo;
 
     @Schema(description = "交强险跟单费比例")
-    @ExcelProperty(value = "交强险跟单费比例,单位:百分比(%)", index = 4)
+    @ExcelProperty(value = "交强险跟单费比例,单位:小数", index = 4)
     private String jqOtherCostsProportion;
 
     @Schema(description = "商业险跟单费比例")
-    @ExcelProperty(value = "商业险跟单费比例,单位:百分比(%)", index = 5)
+    @ExcelProperty(value = "商业险跟单费比例,单位:小数", index = 5)
     private String syOtherCostsProportion;
 
     @Schema(description = "非车险跟单费比例")
-    @ExcelProperty(value = "非车险跟单费比例,单位:百分比(%)", index = 6)
+    @ExcelProperty(value = "非车险跟单费比例,单位:小数", index = 6)
     private String jyOtherCostsProportion;
 
 }

+ 2 - 2
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSuperviseCar.java

@@ -34,12 +34,12 @@ public class ExcelContent4PrivateSuperviseCar implements InsuranceData {
     private String syPolicyNo;
 
     @Schema(description = "交强险手续费比例")
-    @ExcelProperty(value = "交强险手续费比例,单位:百分比(%)", index = 3)
+    @ExcelProperty(value = "交强险手续费比例,单位:小数", index = 3)
     private String jqSuperviseCostsProportion;
 
 
     @Schema(description = "商业险手续费比例")
-    @ExcelProperty(value = "商业险手续费比例,单位:百分比(%)", index = 4)
+    @ExcelProperty(value = "商业险手续费比例,单位:小数", index = 4)
     private String sySuperviseCostsProportion;
 
 

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/finance/vo/importimcome/ExcelContent4PrivateSuperviseNoCar.java

@@ -31,7 +31,7 @@ public class ExcelContent4PrivateSuperviseNoCar implements InsuranceData {
 
 
     @Schema(description = "非车险手续费比例")
-    @ExcelProperty(value = "非车险手续费比例,单位:百分比(%)", index = 2)
+    @ExcelProperty(value = "非车险手续费比例,单位:小数", index = 2)
     private String jySuperviseCostsProportion;
 
 }

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java

@@ -38,6 +38,9 @@ public class OrderListVo {
     //订单状态
     @ExcelProperty("订单状态")
     private String orderStatus;
+    //订单状态
+    @ExcelProperty("订单状态值")
+    private String orderStatusName;
     //车牌号
     @ExcelProperty("车牌号")
     private String licenseNo;

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/po/SysOrganization.java

@@ -25,6 +25,8 @@ public class SysOrganization extends BaseModel {
 
     private String managerId;
 
+    private String principalId;
+
     private String describeInformation;
 
     private int attribute;

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/vo/RuleAttrMappingVo.java

@@ -107,6 +107,8 @@ public class RuleAttrMappingVo {
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("OwnersInfoSex", ownerInfo.getGender().equals("男") ? "1" : "2"));
             //车主 地址
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAddress", ownerInfo.getAddr()));
+            //车主姓名
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersName" ,ownerInfo.getName()));
         }
         // 投保人
         InsOrdersCarUserInfo policyHolderInfo = insOrdersCarUserInfos.stream()
@@ -120,6 +122,8 @@ public class RuleAttrMappingVo {
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyHolderInfoSex", policyHolderInfo.getGender().equals("男") ? "1" : "2"));
             //投保人 地址
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyHolderInfoAddress", policyHolderInfo.getAddr()));
+            //投保人姓名
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("PolicyHolderInfoName", policyHolderInfo.getName()));
         }
         //被保人
         InsOrdersCarUserInfo insuredPersonInfo = insOrdersCarUserInfos.stream()
@@ -133,6 +137,8 @@ public class RuleAttrMappingVo {
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredPersonInfoSex", insuredPersonInfo.getGender().equals("男") ? "1" : "2"));
             //被保人 地址
             ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredPersonInfoAddress", insuredPersonInfo.getAddr()));
+            //被保人 姓名
+            ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredPersonInfoName", insuredPersonInfo.getName()));
         }
         String OPIConsistent = "0";
         if(StringUtils.isNotBlank(ownerInfo.getCerType().toString())){

+ 1 - 8
partner/src/main/java/com/jzg/service/Impl/PartnerUserServiceImpl.java

@@ -94,15 +94,8 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
     @Override
     public List<RelationalVo> relationalQuery(String id) {
         SysUserJzgInfo sysUserJzgInfo = getSysUserJzgInfo(id);
-        List<RelationalVo> list = new ArrayList<>();
         Integer grade = baseMapper.selectGradeMin(sysUserJzgInfo.getId());
-        List<RelationalVo> partnerUsers = baseMapper.selectByUserId(sysUserJzgInfo.getId(), grade);
-        if (1 < grade) {
-            querySuperiors(list, grade, partnerUsers);
-        }
-        list.addAll(partnerUsers);
-        querySubordinates(partnerUsers, grade, list);
-        return list;
+        return baseMapper.selectByUserId(sysUserJzgInfo.getId(), grade);
     }
 
     public void querySuperiors(List<RelationalVo> list, Integer grade, List<RelationalVo> partnerUsers) {

+ 33 - 20
partner/src/main/resources/mapper/PartnerUserMapper.xml

@@ -144,25 +144,39 @@
     </select>
 
     <select id="selectByUserId" resultType="com.jzg.entity.vo.RelationalVo">
-        SELECT
-        p.id,
-        p.NAME AS userName,
-        p.mobile,
-        p.user_id,
-        p.dept_id,
-        (SELECT `name` FROM sys_dept d WHERE d.id = p.dept_id AND d.is_delete = 0) AS deptName,
-        (SELECT username FROM sys_user u WHERE u.id = p.referrer_id AND u.is_delete = 0) AS suggestName,
-        p.grade AS type,
-        p.referrer_id,
-        p.create_time
-        FROM
-        partner_user p
-        LEFT JOIN sys_user_jzg_info u ON u.user_id = p.user_id AND u.is_delete = 0
-        <where>
-            AND p.is_delete = 0
-            AND p.user_id = #{id}
-            AND p.grade = #{grade}
-        </where>
+        WITH RECURSIVE cte_name AS (
+            SELECT
+            p.id,
+            p.NAME AS userName,
+            p.mobile,
+            p.user_id,
+            p.dept_id,
+            (SELECT `name` FROM sys_dept d WHERE d.id = p.dept_id AND d.is_delete = 0) AS deptName,
+            (SELECT username FROM sys_user u WHERE u.id = p.referrer_id AND u.is_delete = 0) AS suggestName,
+            p.grade AS type,
+            p.referrer_id,
+            p.create_time
+            FROM
+            partner_user p
+            WHERE p.user_id = #{id} AND grade = #{grade}
+            UNION ALL
+            SELECT
+                pu.id,
+                pu.NAME AS userName,
+                pu.mobile,
+                pu.user_id,
+                pu.dept_id,
+                    (SELECT `name` FROM sys_dept d WHERE d.id = pu.dept_id AND d.is_delete = 0) AS deptName,
+                    (SELECT username FROM sys_user u WHERE u.id = pu.referrer_id AND u.is_delete = 0) AS suggestName,
+                pu.grade AS type,
+                pu.referrer_id,
+                pu.create_time
+                    FROM
+                    partner_user pu
+                    INNER JOIN cte_name rt ON pu.referrer_id = rt.user_id
+                    WHERE  pu.grade = (rt.type + 1)
+                    )
+        SELECT * FROM cte_name
     </select>
 
     <select id="selectTodayOverview" resultType="com.jzg.entity.vo.TodayOverview">
@@ -893,7 +907,6 @@
         LEFT JOIN sys_user_jzg_info u ON u.id = p.user_id AND u.is_delete = 0
         <where>
             p.is_delete = 0
-            AND u.`status` = 3
             AND p.user_id = #{userId}
             AND p.grade = #{grade}
         </where>

+ 7 - 2
tenant/costsorrule/src/main/java/com/jzg/costsorrule/constants/OperatorConstant.java

@@ -20,7 +20,9 @@ public class OperatorConstant {
         //选择框
         GT("4","大于"),
         //单选框
-        GE("5","大于等于");
+        GE("5","大于等于"),
+        //不等于
+        NE("6","不等于");
 
         private final String code;
         private final String name;
@@ -39,7 +41,10 @@ public class OperatorConstant {
         //选择框
         GT("4","大于"),
         //单选框
-        GE("5","大于等于");
+        GE("5","大于等于"),
+        //不等于
+        NE("6","不等于");
+
 
         private final String code;
         private final String name;

+ 51 - 62
tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java

@@ -130,37 +130,40 @@ public class RuleServiceImpl implements RuleService {
         if (min == null || min.isEmpty()) {
             return false;
         }
-        String[] split = min.split(",");
-        for (String sp : split) {
-            if (sp.equals(value)) {
-                return true;
-            }
-        }
-        return false;
+        boolean contains = Arrays.stream(min.split(","))
+                .anyMatch(sp -> sp.trim().equals(value.trim()));
+        // "1"(EQ):在列表中匹配;"6"(NE):不在列表中匹配
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !contains : contains;
     }
 
     private boolean inputNumberEqual(RuleAttrLinkVo linkVo, String value) {
         double v = Double.parseDouble(value);
+        double min = linkVo.getMin() != null ? Double.parseDouble(linkVo.getMin()) : Double.MIN_VALUE;
+        double max = linkVo.getMax() != null ? Double.parseDouble(linkVo.getMax()) : Double.MAX_VALUE;
         //统一处理数值
         if (OperatorConstant.InputNumber.EQ.getCode().equals(linkVo.getOperator())) {
-            if (Double.parseDouble(linkVo.getMin()) <= v &&
-                    Double.parseDouble(linkVo.getMax()) >= v) {
+            if (min <= v && max >= v) {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.LT.getCode().equals(linkVo.getOperator())) {
-            if (Double.parseDouble(linkVo.getMin()) > v) {
+            if (min > v) {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.LE.getCode().equals(linkVo.getOperator())) {
-            if (Double.parseDouble(linkVo.getMin()) >= v) {
+            if (min >= v) {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.GT.getCode().equals(linkVo.getOperator())) {
-            if (Double.parseDouble(linkVo.getMax()) < v) {
+            if (max < v) {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.GE.getCode().equals(linkVo.getOperator())) {
-            if (Double.parseDouble(linkVo.getMax()) <= v) {
+            if (max <= v) {
+                return true;
+            }
+        } else if (OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator())) {// 不包含:不在 [min, max] 区间内
+            if (min > v || max < v) {
                 return true;
             }
         }
@@ -169,68 +172,50 @@ public class RuleServiceImpl implements RuleService {
 
 
     private boolean inputTagEqual(RuleAttrLinkVo linkVo, String value) {
-        //将值进行分割
-
-        AtomicBoolean returnBool = new AtomicBoolean(false);
-
-        List<String> equalsMap = new ArrayList<>();
-        //字符型评分
-        equalsMap.add("CharacterBasedRating");
-        //交强字符型评分
-        equalsMap.add("JqCharacterBasedRating");
-        //商业字符型评分
-        equalsMap.add("SyCharacterBasedRating");
-
-
-
-        //equest 等于判断
-//        if(equalsMap.contains(linkVo.getAttrCode())){
-//            boolean b = value.anyMatch(value::equals);
-//            returnBool.set(b);
-//        }else if((ptlAgreementProductCostsAttrLink.getAttrCode().equals("BrandandModel") || ptlAgreementProductCostsAttrLink.getAttrCode().equals("CarOwnerName"))
-//                && ptlAgreementProductCostsAttrLink.getOperator().equals("2")){
-//            //处理品牌型号  不包含的情况
-//            boolean anyMatch = Arrays.stream(split)
-//                    .anyMatch(value::contains);
-//            returnBool.set(!anyMatch);
-//        }else {
-//            boolean anyMatch = Arrays.stream(split)
-//                    .anyMatch(value::contains);
-//            returnBool.set(anyMatch);
-//        }
-        return returnBool.get();
+        String min = linkVo.getMin();
+        if (min == null || min.isEmpty() || value == null) {
+            return false;
+        }
+        String[] split = min.split(",");
+        List<String> equalsMap = Arrays.asList(
+                "CharacterBasedRating", "JqCharacterBasedRating", "SyCharacterBasedRating");
+        boolean matched;
+        if (equalsMap.contains(linkVo.getAttrCode())) {
+            matched = Arrays.stream(split).anyMatch(value::equals);
+        } else {
+            matched = Arrays.stream(split).anyMatch(value::contains);
+        }
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !matched : matched;
     }
 
 
     private boolean selectEqual(RuleAttrLinkVo linkVo, String value) {
-        if (linkVo.getMin() != null && linkVo.getMin().contains(value)) {
-            return true;
+        String min = linkVo.getMin();
+        if (min == null || min.isEmpty() || value == null) {
+            return false;
         }
-        return false;
+        boolean contains = min.contains(value);
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !contains : contains;
     }
 
     private boolean radioEqual(RuleAttrLinkVo linkVo, String value) {
-        //新能源判断
-//        if ("NewEnergy".equals(linkVo.getAttrCode())) {
-//            // 是否是新能源车
-//            boolean newEnergy = EnergyType.isNewEnergy(value);
-//            if (newEnergy && linkVo.getMin().equals("1")) {
-//                return true;
-//            } else if (!newEnergy && linkVo.getMin().equals("0")) {
-//                return true;
-//            }
-//        } else if (linkVo.getMin().contains(value)) {
-//            return true;
-//        }
-        //判断如果value 是 boolean值 则将min进行转换为bool
-        boolean minValue = Boolean.valueOf(linkVo.getMin());
         if ("NewEnergyMark".equals(linkVo.getAttrCode())) {
+            //判断如果value 是 boolean值 则将min进行转换为bool
+            boolean minValue = Boolean.valueOf(linkVo.getMin());
+            boolean valueBool = Boolean.valueOf(value);
             if (linkVo.getMin().equals("5") || linkVo.getMin().equals("6")) {
                 minValue = linkVo.getMin().equals("5") ? false : true;
+                valueBool = value.equals("5") ? false : true;
+            }
+            if (linkVo.getOperator().equals(OperatorConstant.InputNumber.EQ.getCode())) {
+                return minValue == valueBool;
+            } else if (linkVo.getOperator().equals(OperatorConstant.InputNumber.NE.getCode())) {
+                return !(minValue == valueBool);
             }
         }
-        boolean valueBool = Boolean.valueOf(value);
-        return minValue == valueBool;
+        return linkVo.getOperator().equals(OperatorConstant.InputNumber.EQ.getCode()) ? linkVo.getMin().contains(value) : !linkVo.getMin().contains(value);
     }
 
     public boolean dateTimeEqual(RuleAttrLinkVo linkVo, String value){
@@ -268,6 +253,10 @@ public class RuleServiceImpl implements RuleService {
             if (v.isAfter(max) || v.isEqual(max)) {
                 return true;
             }
+        } else if (OperatorConstant.DateTime.NE.getCode().equals(linkVo.getOperator())) {
+            if (!(v.isAfter(min) && v.isBefore(max))) {
+                return true;
+            }
         }
         return false;
     }

+ 3 - 3
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -278,9 +278,9 @@ public interface OrgClient {
 
     /**
      * 根据人员id 查询是否为团队长
-     * @param id
+     * @param userId
      */
-    @GetMapping("/sysOrganization/queryOrganizationByManagerId")
-    HttpResult<List<SysOrganization>> queryOrganizationByManagerId(@RequestParam("userId")String userId);
+    @GetMapping("/sysOrganization/queryOrganizationByPrincipalId")
+    HttpResult<List<SysOrganization>> queryOrganizationByPrincipalId(@RequestParam("userId")String userId);
 
 }

+ 15 - 9
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -345,24 +345,27 @@ public class FactorMatch {
 
     private static boolean checkBoxEqual(PtlAgreementCostRule rule, String value) {
         if (rule.getMin() == null || value == null) return false;
-        return Arrays.stream(rule.getMin().split(",")).anyMatch(o -> o.trim().equals(value.trim()));
+        boolean contains = Arrays.stream(rule.getMin().split(",")).anyMatch(o -> o.trim().equals(value.trim()));
+        return "6".equals(rule.getOperator()) ? !contains : contains;
     }
 
     private static boolean selectEqual(PtlAgreementCostRule rule, String value, PtlAgreementUndwrtRulesAttr meta) {
         if (rule.getMin() == null || value == null) return false;
         if ("LicenseArea".equals(meta.getAttrCode()) || "LicenseNo".equals(meta.getAttrCode())) return inputTextEqual(rule, value);
         if ("VehicleAge".equals(meta.getAttrCode())) return inputNumberEqual(rule, value);
-        return rule.getMin().contains(value);
+        return "6".equals(rule.getOperator()) ? rule.getMin().contains(value) : !rule.getMin().contains(value);
     }
 
     private static boolean radioEqual(PtlAgreementCostRule rule, String value) {
+        String min = rule.getMin();
+        if (min == null || value == null) return false;
         if ("NewEnergyMark".equals(rule.getAttrCode())) {
-            boolean newEnergy = EnergyTypeCode.isNewEnergy(value);
-            if (newEnergy && "1".equals(rule.getMin())) return true;
-            if (!newEnergy && "0".equals(rule.getMin())) return true;
-            return false;
+            // min 为 "1" 表示新能源,否则表示非新能源
+            // operator "1"(等于):新能源状态与规则一致即匹配;operator "6"(不包含):相反
+            boolean matched = EnergyTypeCode.isNewEnergy(value) == "1".equals(min);
+            return "6".equals(rule.getOperator()) ? !matched : matched;
         }
-        return rule.getMin().contains(value);
+        return "1".equals(rule.getOperator()) ? min.contains(value) : !min.contains(value);
     }
 
     private static boolean inputNumberEqual(PtlAgreementCostRule rule, String value) {
@@ -376,6 +379,8 @@ public class FactorMatch {
             case "3": return min >= v;
             case "4": return max < v;
             case "5": return max <= v;
+            // 不包含:不在 [min, max] 区间内
+            case "6": return v < min || v > max;
             default:  return false;
         }
     }
@@ -385,12 +390,12 @@ public class FactorMatch {
         String[] split = rule.getMin().split(",");
         List<String> equalsMap = Arrays.asList("CharacterBasedRating", "JqCharacterBasedRating", "SyCharacterBasedRating");
         if (equalsMap.contains(rule.getAttrCode())) {
-            return Arrays.stream(split).anyMatch(value::equals);
+            return "1".equals(rule.getOperator()) ? Arrays.stream(split).anyMatch(value::equals) : Arrays.stream(split).noneMatch(value::equals);
         }
         boolean contains = Arrays.stream(split).anyMatch(value::contains);
         boolean notOp = ("BrandandModel".equals(rule.getAttrCode()) || "CarOwnerName".equals(rule.getAttrCode())
                 || "CarOwnersAddress".equals(rule.getAttrCode()) || "ApplicantAddress".equals(rule.getAttrCode())
-                || "InsuredAddress".equals(rule.getAttrCode())) && "2".equals(rule.getOperator());
+                || "InsuredAddress".equals(rule.getAttrCode())) && "6".equals(rule.getOperator());
         return notOp ? !contains : contains;
     }
 
@@ -418,6 +423,7 @@ public class FactorMatch {
             case "3": return !v.isAfter(min);
             case "4": return v.isAfter(max);
             case "5": return !v.isBefore(max);
+            case "6": return !v.isAfter(min) || !v.isBefore(max);
             default:  return false;
         }
     }

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -952,7 +952,7 @@ public class QuoteVerificationAspect {
      */
     private boolean isTeamLeader(String userId) {
         try {
-            HttpResult<List<SysOrganization>> organizations = orgClient.queryOrganizationByManagerId(userId);
+            HttpResult<List<SysOrganization>> organizations = orgClient.queryOrganizationByPrincipalId(userId);
             return organizations.getData() != null && !organizations.getData().isEmpty();
         } catch (Exception e) {
             // 异常处理,默认不是团队长

+ 23 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -1151,11 +1151,17 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (CollUtil.isNotEmpty(records)) {
             Map<String, String> attrTypeMap = orgClient.queryAllTypeAttrMap();
             List<OrderListVo> list = records.stream().peek(action -> {
+                // 转换状态的值
+                String descByCode = InsOrderStatusEnum.getDescByCode(action.getOrderStatus());
+                action.setOrderStatusName(descByCode);
+
                 String jzgInfoId1 = action.getJzgInfoId();
                 if (StrUtil.isNotEmpty(jzgInfoId1)) {
                     action.setSalesmanType(attrTypeMap.get(jzgInfoId1));
                 }
             }).toList();
+
+
             orderListVoPage.setRecords(list);
         }
         if (StringUtils.equals("1", insOrdersParam.getIsLargeOrder())) {
@@ -1536,15 +1542,29 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         insOrdersParam.setSystemCode(systemCode);
         Page<OrderListVo> orderListVoPage = queryMainOrderList(insOrdersParam);
+        if (null == orderListVoPage){
+            throw new SystemException("数据为空,导出失败!");
+        }
         List<OrderListVo> orderListVos = orderListVoPage.getRecords();
+        if (CollUtil.isEmpty(orderListVos)){
+            throw new SystemException("数据为空,导出失败!");
+        }
+
+        insOrdersParam.setParentIds(orderListVos.stream().map(OrderListVo::getOrderNo).toList());
+        Page<OrderListVo> orderListVoPageVos = queryList(insOrdersParam);
+        List<OrderListVo> records = orderListVoPageVos.getRecords();
 
-        log.info("导出订单列表,导出[{}]条记录", CollUtil.size(orderListVos));
+        log.info("导出订单列表,导出[{}]条记录", CollUtil.size(records));
         // 动态设置要导出的字段
         String exportDynamicFields = insOrdersParam.getExportDynamicFields();
+        // 把订单状态的枚举值,转换成订单状态的名称
+        if (exportDynamicFields.contains("orderStatus")){
+            exportDynamicFields = exportDynamicFields.replace("orderStatus", "orderStatusName");
+        }
         Set<String> exportFields = new LinkedHashSet<>(Arrays.asList(exportDynamicFields.split(";")));
 
         // 调用动态导出
-        return exportBaseService.upLoadFileDynamic(OrderListVo.class, orderListVos, exportFields, "车险出单-订单管理-动态导出-" + Instant.now());
+        return exportBaseService.upLoadFileDynamic(OrderListVo.class, records, exportFields, "车险出单-订单管理-动态导出-" + Instant.now());
     }
 
 
@@ -2594,7 +2614,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      */
     private boolean isTeamLeader(String userId) {
         try {
-            HttpResult<List<SysOrganization>> organizations = orgClient.queryOrganizationByManagerId(userId);
+            HttpResult<List<SysOrganization>> organizations = orgClient.queryOrganizationByPrincipalId(userId);
             return organizations.getData() != null && !organizations.getData().isEmpty();
         } catch (Exception e) {
             // 异常处理,默认不是团队长

+ 6 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -952,6 +952,12 @@
             <if test="insOrdersParam.parentId != null and insOrdersParam.parentId != ''">
                 AND io.parent_id = #{insOrdersParam.parentId}
             </if>
+            <if test="insOrdersParam.parentIds != null and insOrdersParam.parentIds.size() > 0">
+                AND io.parent_id IN
+                <foreach collection="insOrdersParam.parentIds" item="pid" open="(" separator="," close=")">
+                    #{pid}
+                </foreach>
+            </if>
             <if test="insOrdersParam.licenseNo != null and insOrdersParam.licenseNo != ''">
                 AND ioci.license_no = #{insOrdersParam.licenseNo}
             </if>

+ 1 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java

@@ -306,7 +306,7 @@ public class TaiPingCrawlerRequestComponent {
                 = requestPostStrDecrypt(RequestUrl.FIND_APPLY_NO, request, new TypeReference<>(){}, httpHeaders,parameters);
         return response.getData()
                 .getGsApplyInfoMainDtos()
-                .stream().filter(x -> x.getApplyNo().equals(response.getData().getApplyNoDefault()))
+                .stream().filter(x -> x.getApplyNo().equals(parameters.getApplyNo()))
                 .findFirst().orElseThrow(() -> new SystemException("决策单元代码不存在"));
     }
 

+ 9 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/TaipingCrawlerConfigureParameters.java

@@ -39,9 +39,13 @@ public class TaipingCrawlerConfigureParameters implements ConfigureParameters {
      */
     private String salesmanCode;
     /**
-     * 业务归属机构
+     * 业务归属机构code
      */
     private String companyCode;
+    /**
+     *
+     */
+    private String companyName;
     /**
      * 销售信息代码
      */
@@ -66,6 +70,10 @@ public class TaipingCrawlerConfigureParameters implements ConfigureParameters {
      * 中介业务员
      */
     private String interSalesmanCode;
+    /**
+     * 决策单元代码
+     */
+    private String applyNo;
 
     private String policySort;
 

+ 235 - 207
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerPremiumCalculateRequest.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.taiping.crawler.entity.request;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.*;
 import com.jzg.quotation.taiping.crawler.constant.KindCodeEnum;
@@ -19,6 +20,7 @@ import java.util.stream.Collectors;
 
 @NoArgsConstructor
 @Data
+@JsonInclude(JsonInclude.Include.ALWAYS)
 public class TaiPingCrawlerPremiumCalculateRequest {
 
     @JsonProperty("riskCodeType")
@@ -96,10 +98,6 @@ public class TaiPingCrawlerPremiumCalculateRequest {
     @JsonProperty("isMatchClause")
     private Boolean isMatchClause;
 
-    @JsonProperty("isStandardProduct")
-    private String isStandardProduct;
-
-
     public TaiPingCrawlerPremiumCalculateRequest(QuoteVo quoteVo, TaipingCrawlerConfigureParameters parameters, String orderNo,
                                                  TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO motor, String carActualValue,
                                                  TaiPingCrawlerFindByProductCodeResponse.Record record, TaiPingCrawlerFindSolutionCodeData.RecordsDTO taiPingCrawlerFindSolutionCodeData,
@@ -129,11 +127,11 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         // 投保人
         this.pfRelatedPartyDto = new PfRelatedPartyDtoDTO(quoteVo.getPolicyHolderInfo());
         // 车辆信息
-        this.pfItemMotorDto = new PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), motor, orderNo, carActualValue);
+        this.pfItemMotorDto = new PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), motor, orderNo, carActualValue,quoteVo);
         // 被保险人
         this.pfRiskRelatedPartyDto = new PfRiskRelatedPartyDtoDTO(quoteVo.getInsuredPersonInfo());
         if (taiPingCrawlerGetGuCarShipTaxListData != null) {
-            this.pfProposalCarShipTaxDto = new PfProposalCarShipTaxDtoDTO(quoteVo.getVehicleAndVesselTaxVo(),quoteVo.getCarInfoVo(),taiPingCrawlerGetGuCarShipTaxListData.getPfProposalCarShipTaxDto());
+            this.pfProposalCarShipTaxDto = new PfProposalCarShipTaxDtoDTO(quoteVo.getVehicleAndVesselTaxVo(),taiPingCrawlerGetGuCarShipTaxListData.getPfProposalCarShipTaxDto());
         }
         this.pfPolicyInfoDto = new PfPolicyInfoDtoDTO(quoteVo);
         if (quoteVo.getAccidentalDrivings() != null && quoteVo.getAccidentalDrivings().size() > 0) {
@@ -156,6 +154,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfMainDtoDTO {
         @JsonProperty("agreementCode")
         private String agreementCode;
@@ -221,14 +220,14 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String departmentName;
         @JsonProperty("disabled")
         private boolean disabled;
-        @JsonProperty("differentProtectFlag")
-        private String differentProtectFlag;
+//        @JsonProperty("differentProtectFlag")
+//        private String differentProtectFlag;
         @JsonProperty("doubleProtectFlag")
         private String doubleProtectFlag;
         @JsonProperty("dsMakingTypeDetail")
         private String dsMakingTypeDetail;
-        @JsonProperty("feeServiceLinkage")
-        private String feeServiceLinkage;
+//        @JsonProperty("feeServiceLinkage")
+//        private String feeServiceLinkage;
         @JsonProperty("forceLinkCIFlag")
         private boolean forceLinkCIFlag;
         @JsonProperty("frontingCompany")
@@ -270,7 +269,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("isSpecialCarFlag")
         private String isSpecialCarFlag;
         @JsonProperty("itemAddress")
-        private List<String> itemAddress;
+        private String itemAddress;
         @JsonProperty("label")
         private String label;
         @JsonProperty("lables")
@@ -283,8 +282,8 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String oano;
         @JsonProperty("optBtn")
         private String optBtn;
-        @JsonProperty("outOrderNo")
-        private String outOrderNo;
+//        @JsonProperty("outOrderNo")
+//        private String outOrderNo;
         @JsonProperty("outerCompanyCode")
         private String outerCompanyCode;
         @JsonProperty("outerCompanyName")
@@ -343,8 +342,8 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String teamManagerName;
         @JsonProperty("teamName")
         private String teamName;
-        @JsonProperty("telKetConfSwitch")
-        private String telKetConfSwitch;
+//        @JsonProperty("telKetConfSwitch")
+//        private String telKetConfSwitch;
         @JsonProperty("touchId")
         private String touchId;
         @JsonProperty("tpFeeFlag")
@@ -353,12 +352,6 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String value;
         @JsonProperty("zlbWindowNo")
         private String zlbWindowNo;
-        @JsonProperty("underwriteName")
-        private String underwriteName;
-        @JsonProperty("underWriteInd")
-        private String underWriteInd;
-        @JsonProperty("underwriteCode")
-        private String underwriteCode;
         public PfMainDtoDTO(TaiPingCrawlerFindByProductCodeResponse.Record record, TaipingCrawlerConfigureParameters parameters,
                             TaiPingCrawlerFindSolutionCodeData.RecordsDTO taiPingCrawlerFindSolutionCodeData,
                             TaiPingCrawlerFindApplyNoResponse.GsApplyInfoMainDto gsApplyInfoMainDto, QuoteVo quoteVo) {
@@ -374,7 +367,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.businessMode = "2";
             this.agreementNo = parameters.getAgreementNo();
             this.companyCode = parameters.getCompanyCode();
-            this.companyName = record.getCompanyName();
+            this.companyName = taiPingCrawlerFindSolutionCodeData.getCompanyName();
             this.salesmanCode = parameters.getSalesmanCode();
             this.salesmanName = taiPingCrawlerFindSolutionCodeData.getSalesmanName();
             this.outerUserCode = "";
@@ -395,7 +388,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.departmentCode = "";
             this.departmentName = "";
             this.governmentType = "";
-            this.itemAddress = new ArrayList<>();
+            this.itemAddress = "";
             this.governmentServiceType = "";
             this.agreementTypeName = record.getAgreementTypeName();
             this.lables = record.getLables();
@@ -432,41 +425,40 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.zlbWindowNo =  "";
             this.optBtn = "";
             this.applyName = "";
-            this.decisionMakingUnit = "";
-            this.dsMakingTypeDetail = "";
+            this.decisionMakingUnit = gsApplyInfoMainDto.getDecisionMakingUnit();
+            this.dsMakingTypeDetail = gsApplyInfoMainDto.getDsMakingTypeDetail();
             this.compLevel = "0";
             this.serialNo = "";
-            this.outOrderNo = "";
+//            this.outOrderNo = "";
             this.bankCustomerManagerCode = "";
             this.bankBranchCode = "";
             this.newCarFlag = "1";
             if (quoteVo.getCiRiskInfoVo()!= null && quoteVo.getBiRiskInfoVo() != null) {
-                this.differentProtectFlag = "1";
                 this.doubleProtectFlag = "1";
             } else {
                 this.doubleProtectFlag = "0";
-                this.differentProtectFlag = "0";
             }
             this.oano = "";
             this.poaSerialNo = "";
             this.isDangerBz = null;
             this.tpFeeFlag = "0";
-            this.feeServiceLinkage = "0";
+//            this.feeServiceLinkage = "0";
             this.policySort = "NSP";
             this.argueSolution = "1";
-            this.arbitoryName = null;
+            this.arbitoryName = "";
             this.quotationPlanFlag = "0";
             this.isSpecialCarFlag = "0";
             this.carIdSplitFlag = "";
             this.appId = "";
             this.touchId = "";
-            this.telKetConfSwitch = "0";
+//            this.telKetConfSwitch = "0";
             this.premiumTrialFlag = "0";
         }
     }
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfVehicleOwnerDTO {
         @JsonProperty("name")
         private String name;
@@ -533,29 +525,30 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.lifeInd = "";
             this.customerGradeLabel = "";
             this.carDriveAddress = "";
-            this.customerGroup = "";
-            this.licenseNo = carInfoVo.getLicenseNo();
-            if (carInfoVo.getCarNatureCode().equals("02")) {
-                this.driveUseAttribute = "A";
-            } else {
-                this.driveUseAttribute = "F";
-            }
-            this.printBrandName = carInfoVo.getBrandName();
-            this.frameNo = carInfoVo.getVinNo();
-            this.engineNo = carInfoVo.getEngineNo();
-            this.singeinDate = carInfoVo.getRegisterDate();
-            this.certificateDate = carInfoVo.getIssueDate();
-            this.address = ownersInfo.getAddr();
-            this.enrollDate = carInfoVo.getRegisterDate();
-            this.nationality = "汉";
-            this.identifyStartDate = ownersInfo.getIdentifyValidDate();
-            this.identifyEndDate = ownersInfo.getIdentifyValidEndDate();
+//            this.customerGroup = "";
+//            this.licenseNo = carInfoVo.getLicenseNo();
+//            if (carInfoVo.getCarNatureCode().equals("02")) {
+//                this.driveUseAttribute = "A";
+//            } else {
+//                this.driveUseAttribute = "F";
+//            }
+//            this.printBrandName = carInfoVo.getBrandName();
+//            this.frameNo = carInfoVo.getVinNo();
+//            this.engineNo = carInfoVo.getEngineNo();
+//            this.singeinDate = carInfoVo.getRegisterDate();
+//            this.certificateDate = carInfoVo.getIssueDate();
+//            this.address = ownersInfo.getAddr();
+//            this.enrollDate = carInfoVo.getRegisterDate();
+//            this.nationality = "汉";
+//            this.identifyStartDate = ownersInfo.getIdentifyValidDate();
+//            this.identifyEndDate = ownersInfo.getIdentifyValidEndDate();
         }
 
     }
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfRelatedPartyDtoDTO {
         @JsonProperty("actController")
         private String actController;
@@ -601,8 +594,8 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String companyCode;
         @JsonProperty("companyType")
         private String companyType;
-        @JsonProperty("contactDealType")
-        private String contactDealType;
+//        @JsonProperty("contactDealType")
+//        private String contactDealType;
         @JsonProperty("contactIdEndDate")
         private String contactIdEndDate;
         @JsonProperty("contactIdStartDate")
@@ -752,7 +745,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.longTermIdentifyCard = "0";
             }
             this.identifyStartDate = policyHolderInfo.getIdentifyValidDate();
-            this.identifyEndDate = policyHolderInfo.getIdentifyValidEndDate();
+            this.identifyEndDate = policyHolderInfo.getIdentifyValidEndDate().equals("9999-12-31") ? "2199-12-31" : policyHolderInfo.getIdentifyValidEndDate();
             this.itemAddress = List.of(
                     policyHolderInfo.getProvinceCode(),
                     policyHolderInfo.getCityCode(),
@@ -775,17 +768,17 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.countryCode = "CN";
             this.contactIdentifyType = "01";
             this.contactIdentifyNumber = "";
-            this.contactSex = "";
-            this.contactDealType = "1";
+            this.contactSex = "0";
+//            this.contactDealType = "1";
             this.appliPhoneHolderName = "";
             this.appliPhoneHolderCertiType = "";
             this.appliPhoneHolderCertNumber = "";
-            this.leaderType = "1";
+//            this.leaderType = "1";
             this.leaderName = "";
-            this.leaderIdType = "01";
+//            this.leaderIdType = "01";
             this.leaderIdNo = "";
-            this.leaderIdSDate = "";
-            this.leaderIdEDate = "";
+//            this.leaderIdSDate = "";
+//            this.leaderIdEDate = "";
             this.leaderContact = "";
             this.leaderPCD = "";
             this.leaderAddress = "";
@@ -802,43 +795,44 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.shareHolderIdNo = "";
             this.shareHolderIdSDate = "";
             this.shareHolderIdEDate = "";
-            this.actControllerType = "";
+//            this.actControllerType = "";
             this.actController = "";
             this.actControllerIdType = "";
             this.actControllerIdNo = "";
             this.actControllerSDate = "";
             this.actControllerEDate = "";
-            this.companyType = "";
+            this.companyType = "01";
             this.nation = "汉";
-            this.name = "";
-            this.ownerNature = "";
-            this.isApplicantOperator = "";
-            this.clientCode = "";
-            this.clientCName = "";
-            this.clientType = "";
-            this.cifCode = "";
-            this.department = "";
-            this.relationWithBrach = "";
-            this.showClientAddress = "";
-            this.addressCName = "";
-            this.mobile = "";
-            this.identifyTypeName = "";
-            this.companyCode = "";
-            this.departmentName = "";
-            this.relationWithBrachName = "";
-            this.riskCode = "";
-            this.countryName = "";
-            this.isIntercept = "";
+//            this.name = "";
+//            this.ownerNature = "";
+//            this.isApplicantOperator = "";
+//            this.clientCode = "";
+//            this.clientCName = "";
+//            this.clientType = "";
+//            this.cifCode = "";
+//            this.department = "";
+//            this.relationWithBrach = "";
+//            this.showClientAddress = "";
+//            this.addressCName = "";
+//            this.mobile = "";
+//            this.identifyTypeName = "";
+//            this.companyCode = "";
+//            this.departmentName = "";
+//            this.relationWithBrachName = "";
+//            this.riskCode = "";
+//            this.countryName = "";
+//            this.isIntercept = "";
             this.issuer = "";
-            this.newCustomSystemOperatorType = "";
+//            this.newCustomSystemOperatorType = "";
             this.operatorType = "1";
-            this.detailAddress = Collections.emptyList();
+            this.detailAddress = new ArrayList<>();
         }
 
     }
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfItemMotorDtoDTO {
         @JsonProperty("actualValue")
         private String actualValue;
@@ -905,7 +899,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("commercialCarGradeSource")
         private String commercialCarGradeSource;
         @JsonProperty("completeKerbMass")
-        private Double completeKerbMass;
+        private String completeKerbMass;
         @JsonProperty("configModel")
         private String configModel;
         @JsonProperty("coreValueType")
@@ -913,7 +907,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("countryNature")
         private String countryNature;
         @JsonProperty("cvFlag")
-        private Boolean cvFlag;
+        private String cvFlag;
         @JsonProperty("doubleProtectFlag")
         private String doubleProtectFlag;
         @JsonProperty("driveUseAttribute")
@@ -1047,7 +1041,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("saleCompany")
         private String saleCompany;
         @JsonProperty("seatCount")
-        private Integer seatCount;
+        private String seatCount;
         @JsonProperty("shVehicleCode")
         private String shVehicleCode;
         @JsonProperty("singeinDate")
@@ -1059,7 +1053,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("thirdRunRoute")
         private String thirdRunRoute;
         @JsonProperty("tonCount")
-        private Integer tonCount;
+        private String tonCount;
         @JsonProperty("totalTractionMass")
         private String totalTractionMass;
         @JsonProperty("transferDate")
@@ -1090,7 +1084,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String whiteListFlag;
         @JsonProperty("zjxlGrade")
         private String zjxlGrade;
-        public PfItemMotorDtoDTO(CarInfoVo carInfoVo, TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO motor, String orderNo, String actualValue) {
+        public PfItemMotorDtoDTO(CarInfoVo carInfoVo, TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO motor, String orderNo, String actualValue, QuoteVo quoteVo) {
             this.isJy = false;
             this.val2 = false;
             this.brandName = motor.getBrandName();
@@ -1103,12 +1097,12 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.carKindCodeShow = "12";
             }
             this.carKindCodeShowName = motor.getCiModelClass();
-            this.vehicleCategory = carInfoVo.getCarTypeCode();
-            this.seatCount = Integer.valueOf(carInfoVo.getSeatCount());
+            this.vehicleCategory = motor.getVehicleCategory();
+            this.seatCount = carInfoVo.getSeatCount();
             if (carInfoVo.getTonCount() != null && !carInfoVo.getTonCount().isEmpty()) {
-                this.tonCount = (int) Double.parseDouble(carInfoVo.getTonCount());
+                this.tonCount =carInfoVo.getTonCount();
             } else {
-                this.tonCount = 0;
+                this.tonCount = "0";
             }
             this.negotiatedActualValue = actualValue;
             this.useNatureShow = carInfoVo.getCarNatureCode();
@@ -1119,7 +1113,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.driveUseAttribute = "F";
             }
             this.carUseType = carInfoVo.getPropertyCode();
-            this.carID = motor.getCarID();
+            this.carID = "";
             this.familyName = motor.getFamilyName();
             this.colorCode = motor.getColorCode();
             this.ciModelCode = motor.getCiModelCode();
@@ -1127,18 +1121,18 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.purchasePrice = motor.getPurchasePrice();
             this.carBrand = motor.getCarBrand();
             this.actualValue = actualValue;
-            this.localVehicleInd = motor.getLocalVehicleInd();
-            this.completeKerbMass = motor.getCompleteKerbMass();
+            this.localVehicleInd = carInfoVo.getLicenseNo().contains("晋") ? "1" : "0";
+            this.completeKerbMass = motor.getCompleteKerbMass().toString();
             this.fuelType = motor.getFuelType();
             this.factory = motor.getFactory();
-            this.engineModel = motor.getEngineModel();
+            this.engineModel = "";
             this.factoryId = motor.getFactoryId();
             this.clauseType = motor.getClauseType();
             this.vehicleModelKind = motor.getVehicleModelKind();
             this.hazardType = motor.getHazardType();
             this.glassType = motor.getGlassType();
             this.carName = motor.getCarName();
-            this.runAreaCode = motor.getRunAreaCode();
+            this.runAreaCode = "02";
             this.noticeType = motor.getNoticeType();
             this.carCheckValidTime = "";
             this.configModel = "";
@@ -1146,22 +1140,22 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.licenseTypeCode = motor.getLicenseTypeCode();
             this.powerTypeCode = "";
             this.powerType = "";
-            this.doubleProtectFlag = "";
+            if (quoteVo.getCiRiskInfoVo()!= null && quoteVo.getBiRiskInfoVo() != null) {
+                this.doubleProtectFlag = "1";
+            } else {
+                this.doubleProtectFlag = "0";
+            }
             this.taxVehicleCategory = motor.getTaxVehicleCategory();
             this.countryNature = motor.getCountryNature();
             this.makeDate = motor.getMakeDate();
-            this.jgVehicleCheckCode = motor.getJgVehicleCheckCode();
-            this.carId = motor.getCarID();
+            this.jgVehicleCheckCode = "";
             this.noLicenseNo = Boolean.FALSE;
-            this.vehicleQueryType = motor.getVehicleQueryType();
-            this.runAreaName = motor.getRunAreaName();
-            this.sale4SFlag = motor.getSale4SFlag();
-            this.saleCompany = motor.getSaleCompany();
-            this.saleAreaCode = motor.getSaleAreaCode();
-            this.provinceEcdemicVehicleFlag = motor.getProvinceEcdemicVehicleFlag();
-            this.vehicleFatteryFlag = motor.getVehicleFatteryFlag();
-            this.nerveCentre = motor.getNerveCentre();
-            this.thirdRunRoute = motor.getThirdRunRoute();
+            this.vehicleQueryType = "1";
+            this.runAreaName = "境内";
+            this.sale4SFlag = null;
+            this.saleCompany = "";
+            this.saleAreaCode = "";
+            this.provinceEcdemicVehicleFlag = "";
             this.licenseNo = carInfoVo.getLicenseNo();
             this.frameNo = carInfoVo.getVinNo();
             this.engineNo = carInfoVo.getEngineNo();
@@ -1170,7 +1164,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             if (StringUtils.hasLength(carInfoVo.getLicenseNo())) {
                 this.carNewOldFlag = "1";
             } else {
-                this.carNewOldFlag = "0";
+                this.carNewOldFlag = "O";
             }
             this.enrollDate = carInfoVo.getRegisterDate() ;
             this.useYears = getUseYears(carInfoVo.getRegisterDate());
@@ -1187,26 +1181,25 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.transferDate = carInfoVo.isTransferBi() || carInfoVo.isTransfer() ? carInfoVo.getTransferDate() : "";
             this.loanVehicleFlag = carInfoVo.isLoanStatus() ? "1" : "0";
             this.familyCode = motor.getFamilyCode();
-            this.hkFlag = motor.getHkFlag();
+            this.hkFlag = "1";
             this.fuelTypeName = motor.getFuelTypeName();
-            this.whiteListFlag = motor.getWhiteListFlag();
-            this.whiteListElecContactNo = motor.getWhiteListElecContactNo();
-            this.groupCode = motor.getGroupCode();
-            this.commercialCarGradeSource = motor.getCommercialCarGradeSource();
-            this.commercialCarGrade = motor.getCommercialCarGrade();
-            this.saleAreaName = motor.getSaleAreaName();
-            this.totalTractionMass = motor.getTotalTractionMass();
+            this.whiteListFlag = "0";
+            this.whiteListElecContactNo = "";
+            this.groupCode = "";
+            this.commercialCarGradeSource = "";
+            this.commercialCarGrade = "";
+            this.saleAreaName = "";
+            this.totalTractionMass = "0";
             this.quoteName = "";
-            this.classificationOfCDW = motor.getClassificationOfCDW();
-            this.isSpecialCarFlag = motor.getIsSpecialCarFlag();
-            this.cvFlag = Boolean.valueOf(motor.getCvFlag());
-            this.frameNoHeteroType = motor.getFrameNoHeteroType();
-            this.principalCHDVehicleGrade = motor.getPrincipalCHDVehicleGrade();
-            this.principalCHDTeamGrade = motor.getPrincipalCHDTeamGrade();
-            this.principalQuotationDiscount = motor.getPrincipalQuotationDiscount();
-            this.chdVehicleGrade = motor.getChdVehicleGrade();
-            this.chdTeamGrade = motor.getChdTeamGrade();
-            this.zjxlGrade = motor.getZjxlGrade();
+            this.classificationOfCDW = "";
+            this.isSpecialCarFlag = "0";
+            this.cvFlag = "0";
+            this.principalCHDVehicleGrade = "";
+            this.principalCHDTeamGrade = "";
+            this.principalQuotationDiscount = "";
+            this.chdVehicleGrade = "";
+            this.chdTeamGrade = "";
+            this.zjxlGrade = "";
             if (carInfoVo.getEnergyTypeCode().equals("0")) {
                 this.newEnergyFlag = "0";
                 this.energyType = "0";
@@ -1214,12 +1207,12 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.newEnergyFlag = "1";
                 this.energyType = "1";
             }
-            this.energyTypeDescribe = motor.getEnergyTypeDescribe();
-            this.range = motor.getRange();
-            this.vehicleStyleUniqueId = motor.getVehicleStyleUniqueId();
-            this.certificateType = motor.getCertificateType();
-            this.certificateNo = motor.getCertificateNo();
-            this.certificateReportDate = motor.getCertificateReportDate();
+            this.energyTypeDescribe = "";
+            this.range = "";
+            this.vehicleStyleUniqueId = "";
+            this.certificateType = "";
+            this.certificateNo = "";
+            this.certificateReportDate = "";
             this.longLoadPermit = motor.getLongLoadPermit();
             this.brandId = motor.getBrandId();
             this.colorName = motor.getColorName();
@@ -1236,6 +1229,11 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.motorTypeName = motor.getMotorTypeName();
             this.newEnergyClauseFlag = motor.getNewEnergyClauseFlag();
             this.carIdRenewalFlag = "";
+//            this.vehicleFatteryFlag = motor.getVehicleFatteryFlag();
+//            this.nerveCentre = motor.getNerveCentre();
+//            this.thirdRunRoute = motor.getThirdRunRoute();
+//            this.carId = motor.getCarID();
+//            this.frameNoHeteroType = motor.getFrameNoHeteroType();
         }
 
         public int getUseYears(String registerDate) {
@@ -1252,6 +1250,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfRiskRelatedPartyDtoDTO {
         @JsonProperty("actController")
         private String actController;
@@ -1268,7 +1267,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("appliAddress")
         private String appliAddress;
         @JsonProperty("appliAge")
-        private Integer appliAge;
+        private String appliAge;
         @JsonProperty("appliCompanyAddress")
         private String appliCompanyAddress;
         @JsonProperty("appliName")
@@ -1318,7 +1317,9 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("countyCode")
         private String countyCode;
         @JsonProperty("detailAddress")
-        private List<Object> detailAddress;
+        private List<String> detailAddress;
+        @JsonProperty("packageOwner")
+        private String packageOwner;
         @JsonProperty("email")
         private String email;
         @JsonProperty("fileType")
@@ -1467,7 +1468,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.longTermIdentifyCard = "0";
             }
             this.identifyStartDate = insuredPersonInfo.getIdentifyValidDate();
-            this.identifyEndDate = insuredPersonInfo.getIdentifyValidEndDate();
+            this.identifyEndDate = insuredPersonInfo.getIdentifyValidEndDate().equals("9999-12-31") ? "2199-12-31" : insuredPersonInfo.getIdentifyValidEndDate();
             this.itemAddress = List.of(
                     insuredPersonInfo.getProvinceCode(),
                     insuredPersonInfo.getCityCode(),
@@ -1491,81 +1492,84 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.insuredPhoneHolderName = "";
             this.insuredPhoneHolderCertiType = "";
             this.insuredPhoneHolderCertNumber = "";
-            this.leaderType = "1";
             this.subLeaderName = "";
+//            this.leaderType = "1";
             this.leaderIdType = "01";
             this.leaderIdNo = "";
             this.leaderIdSDate = "";
             this.leaderIdEDate = "";
             this.subLeaderConactMobile = "";
-            this.businessScope = "";
-            this.leaderPCD = "";
             this.subLeaderAddress = "";
-            this.insuredSex = "";
+            this.businessScope = "";
+
+            this.insuredSex = insuredPersonInfo.getGender();
             this.insuredBirthDate = insuredPersonInfo.getBirthday();
             this.insuredAge = insuredPersonInfo.getAge();
             this.insuredCompanyAddress = "";
             this.countryCode = "CN";
-            this.companyType = "";
+            this.companyType = "01";
             this.companyEstablishDate = "";
             this.nation = "汉";
             this.issuer = "";
+            this.appliName = "";
+            this.appliAddress = "";
+            this.mobilePhone = "";
+            this.industryCode = "";
+            this.contactSex = "";
+            this.contactDealType = "1";
+            this.appliPhoneHolderName = "";
+            this.appliPhoneHolderCertiType = "";
+            this.appliPhoneHolderCertNumber = "";
+            this.leaderName = "";
+            this.leaderContact = "";
+            this.leaderAddress = "";
+            this.leaderPCD = "";
             this.businessDealerName = "";
             this.businessDealerIdType = "";
             this.businessDealerIdNumber = "";
+            this.sex = "";
+            this.birthDate = "";
+            this.appliAge = "";
+            this.appliCompanyAddress = "";
+//            this.ownerNature = "";
+//            this.isApplicantOperator = "";
+//            this.clientCode = "";
+//            this.clientCName = "";
+//            this.clientType = "";
+//            this.cifCode = "";
+//            this.department = "";
+//            this.relationWithBrach = "";
+//            this.showClientAddress = "";
+//            this.addressCName = addressCName;
             this.shareHolder = "";
             this.shareHolderIdType = "";
             this.shareHolderIdNo = "";
             this.shareHolderIdSDate = "";
             this.shareHolderIdEDate = "";
-            this.actControllerType = "1";
+//            this.actControllerType = "1";
             this.actController = "";
             this.actControllerIdType = "";
             this.actControllerIdNo = "";
             this.actControllerSDate = "";
             this.actControllerEDate = "";
-            this.appliName = insuredPersonInfo.getName();
-            this.appliAddress = insuredPersonInfo.getAddr();
-            this.mobilePhone = insuredPersonInfo.getMobile();
-            this.industryCode = "";
-            this.contactSex = "";
-            this.contactDealType = "1";
-            this.appliPhoneHolderName = "";
-            this.appliPhoneHolderCertiType = "";
-            this.appliPhoneHolderCertNumber = "";
-            this.leaderName = "";
-            this.leaderContact = "";
-            this.leaderAddress = "";
-            this.sex = insuredPersonInfo.getGender();
-            this.birthDate = insuredPersonInfo.getBirthday();
-            this.appliAge = insuredPersonInfo.getAge();
-            this.appliCompanyAddress = "";
-            this.ownerNature = "";
-            this.isApplicantOperator = "";
-            this.clientCode = "";
-            this.clientCName = "";
-            this.clientType = "";
-            this.cifCode = "";
-            this.department = "";
-            this.relationWithBrach = "";
-            this.showClientAddress = "";
-            this.addressCName = addressCName;
-            this.mobile = insuredPersonInfo.getMobile();
-            this.identifyTypeName = "";
-            this.companyCode = "";
-            this.departmentName = "";
-            this.relationWithBrachName = "";
-            this.riskCode = "";
-            this.countryName = "";
-            this.isIntercept = "";
-            this.newCustomSystemOperatorType = "";
+//            this.mobile = insuredPersonInfo.getMobile();
+//            this.identifyTypeName = "";
+//            this.companyCode = "";
+//            this.departmentName = "";
+//            this.relationWithBrachName = "";
+//            this.riskCode = "";
+//            this.countryName = "";
+//            this.isIntercept = "";
+//            this.newCustomSystemOperatorType = "";
             this.detailAddress = Collections.emptyList();
+            this.packageOwner = "";
         }
 
     }
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfProposalCarShipTaxDtoDTO {
 
         @JsonProperty("taxpayerIdentifier")
@@ -1663,7 +1667,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("certiType")
         private String certiType;
 
-        public PfProposalCarShipTaxDtoDTO(VehicleAndVesselTaxVo vehicleAndVesselTax,CarInfoVo carInfoVo,TaiPingCrawlerGetGuCarShipTaxListData.PfProposalCarShipTaxDTO pfProposalCarShipTaxDto) {
+        public PfProposalCarShipTaxDtoDTO(VehicleAndVesselTaxVo vehicleAndVesselTax,TaiPingCrawlerGetGuCarShipTaxListData.PfProposalCarShipTaxDTO pfProposalCarShipTaxDto) {
             this.taxpayerIdentifier = vehicleAndVesselTax.getIdentifyNumber();
             this.taxRelifFlag = pfProposalCarShipTaxDto.getTaxRelifFlag();
             this.fuelType = pfProposalCarShipTaxDto.getFuelType();
@@ -1716,6 +1720,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfPolicyInfoDtoDTO {
         @JsonProperty("arbitoryName")
         private String arbitoryName;
@@ -1797,6 +1802,9 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private Boolean tradingRelevanceNo;
         @JsonProperty("transferDate")
         private String transferDate;
+
+        @JsonProperty("fcPolicyno0")
+        private String fcPolicyno0;
         public PfPolicyInfoDtoDTO(QuoteVo quoteVo) {
             if (quoteVo.getCiRiskInfoVo() != null) {
                 String startDate = quoteVo.getCiRiskInfoVo().getStartDate();
@@ -1805,6 +1813,8 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.startTime0801 = startDate.substring(11);
                 this.endDate0801 = endDate.substring(0, 10);
                 this.endTime0801 = endDate.substring(11);
+                this.immEffectStartDate0801 = startDate.substring(0, 10);
+                this.policyNo0801 = "";
             }
             if (quoteVo.getBiRiskInfoVo() != null) {
                 String startDate = quoteVo.getBiRiskInfoVo().getStartDate();
@@ -1813,21 +1823,21 @@ public class TaiPingCrawlerPremiumCalculateRequest {
                 this.startTime0802 = startDate.substring(11);
                 this.endDate0802 = endDate.substring(0, 10);
                 this.endTime0802 = endDate.substring(11);
+                this.immEffectStartDate0802 = startDate.substring(0, 10);
+                this.policyNo0802 = "";
             }
             this.proposalNo = "";
             this.renewalNo0801 = "";
             this.renewalNo0802 = "";
             this.proposalNo0801 = "";
-            this.demandNoForce = "";
-            this.immEffectStartDate0801 = null;
-            this.immEffectStartDate0802 = null;
+            this.proposalNo0802 = "";
             this.immEffectType0801 = null;
             this.immEffectType0802 = null;
+            this.demandNoForce = "";
             this.demandNoBusi = "";
             this.poaSerialNo = "";
             this.effectFlag0801 = false;
             this.effectFlag0802 = false;
-            this.proposalNo0802 = "";
             CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
             // 商业险过户标识
             this.chgOwnerFlag = carInfoVo.isTransferBi() ? "1" : "0";
@@ -1835,7 +1845,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.specialCarFlag = carInfoVo.isTransfer() ? "1" : "";
             // 过户日期
             this.transferDate = carInfoVo.isTransferBi() || carInfoVo.isTransfer() ? carInfoVo.getTransferDate() : "";
-            this.loanVehicleFlag = carInfoVo.isLoanStatus();
+            this.loanVehicleFlag = false;
             this.noDamageYears = 0;
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             this.operateDate = LocalDate.now().format(formatter);
@@ -1852,6 +1862,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfItemKind0801DtoListDTO {
         @JsonProperty("nodeBtGrossPremium")
         private Object nodeBtGrossPremium;
@@ -1896,7 +1907,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("sumValue")
         private Object sumValue;
         @JsonProperty("sumInsured")
-        private Double sumInsured;
+        private Integer sumInsured;
         @JsonProperty("ratePeriod")
         private Object ratePeriod;
         @JsonProperty("rate")
@@ -1904,31 +1915,31 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("shortRateFlag")
         private String shortRateFlag;
         @JsonProperty("shortRateNumerator")
-        private Double shortRateNumerator;
+        private Integer shortRateNumerator;
         @JsonProperty("shortRateDenominator")
         private Integer shortRateDenominator;
         @JsonProperty("shortRate")
-        private Double shortRate;
+        private Integer shortRate;
         @JsonProperty("basePremium")
-        private Double basePremium;
+        private Integer basePremium;
         @JsonProperty("pureBenchPremium")
         private Object pureBenchPremium;
         @JsonProperty("basePureBenchPremium")
         private Object basePureBenchPremium;
         @JsonProperty("benchmarkPremium")
-        private Double benchmarkPremium;
+        private Integer benchmarkPremium;
         @JsonProperty("noDebtPremium")
         private Object noDebtPremium;
         @JsonProperty("loading")
         private Object loading;
         @JsonProperty("grossPremium")
-        private Double grossPremium;
+        private BigDecimal grossPremium;
         @JsonProperty("discount")
-        private Double discount;
+        private Integer discount;
         @JsonProperty("adjustRate")
-        private Double adjustRate;
+        private Integer adjustRate;
         @JsonProperty("netPremium")
-        private Double netPremium;
+        private BigDecimal netPremium;
         @JsonProperty("deductibleRate")
         private Object deductibleRate;
         @JsonProperty("deductible")
@@ -1948,21 +1959,21 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("assistKindFlag")
         private Object assistKindFlag;
         @JsonProperty("remark")
-        private Object remark;
+        private String remark;
         @JsonProperty("flag")
         private Object flag;
         @JsonProperty("uwCount")
         private Object uwCount;
         @JsonProperty("uwPremium")
-        private Double uwPremium;
+        private BigDecimal uwPremium;
         @JsonProperty("originUWPremium")
-        private Double originUWPremium;
+        private BigDecimal originUWPremium;
         @JsonProperty("originGrossPremium")
-        private Double originGrossPremium;
+        private BigDecimal originGrossPremium;
         @JsonProperty("relatedInd")
         private Object relatedInd;
         @JsonProperty("endorAdjustRate")
-        private Double endorAdjustRate;
+        private Integer endorAdjustRate;
         @JsonProperty("pubInsuredInd")
         private Object pubInsuredInd;
         @JsonProperty("specialInd")
@@ -1982,7 +1993,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("valueType")
         private Object valueType;
         @JsonProperty("franchise")
-        private Double franchise;
+        private Integer franchise;
         @JsonProperty("reSpecialInd")
         private String reSpecialInd;
         @JsonProperty("additionalRate")
@@ -1990,13 +2001,13 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("allBrokenRate")
         private Object allBrokenRate;
         @JsonProperty("addTax")
-        private Double addTax;
+        private BigDecimal addTax;
         @JsonProperty("addTaxRate")
-        private Double addTaxRate;
+        private BigDecimal addTaxRate;
         @JsonProperty("priceTaxTotal")
-        private Double priceTaxTotal;
+        private Integer priceTaxTotal;
         @JsonProperty("orgPriceTaxTotal")
-        private Double orgPriceTaxTotal;
+        private Integer orgPriceTaxTotal;
         @JsonProperty("serviceTimes")
         private Object serviceTimes;
         @JsonProperty("relatedFlagFG2020")
@@ -2015,16 +2026,27 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private Object deductibleList;
         @JsonProperty("relieveFund")
         private Object relieveFund;
-        @JsonProperty("kindcodeKindname")
+        @JsonProperty("kindCode_kindName")
         private String kindcodeKindname;
+        @JsonProperty("clauseCode")
+        private String clauseCode;
+        @JsonProperty("calcMedicalModel")
+        private String calcMedicalModel;
+        @JsonProperty("isExist")
+        private String isExist;
+        @JsonProperty("shareList")
+        private List<?> shareList;
+        @JsonProperty("endorPolicyNo")
+        private String endorPolicyNo;
+
 
 
         public static PfItemKind0801DtoListDTO getCiKindInfo() {
             PfItemKind0801DtoListDTO pfItemKind0801DtoListDTO = new PfItemKind0801DtoListDTO();
             pfItemKind0801DtoListDTO.kindcodeKindname = "BZ-机动车交通事故责任强制险";
             pfItemKind0801DtoListDTO.basePremium = null;
-            pfItemKind0801DtoListDTO.shortRate = Double.valueOf("100.00");
-            pfItemKind0801DtoListDTO.discount = Double.valueOf("100.00");
+            pfItemKind0801DtoListDTO.shortRate = Integer.valueOf("100");
+            pfItemKind0801DtoListDTO.discount = Integer.valueOf("100");
             pfItemKind0801DtoListDTO.grossPremium = null;
             pfItemKind0801DtoListDTO.priceTaxTotal = null;
             pfItemKind0801DtoListDTO.relieveFund = "0.00";
@@ -2035,6 +2057,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfItemKind0802DtoListDTO {
         @JsonProperty("riskCode")
         private String riskCode;
@@ -2154,6 +2177,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
     }
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class ClauseList0801DTO {
         @JsonProperty("proposalNo")
         private String proposalNo;
@@ -2246,7 +2270,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String isEndor;
 
         @JsonProperty("ggClauseParameterVos")
-        private String ggClauseParameterVos;
+        private List<String> ggClauseParameterVos;
 
         @JsonProperty("clauseVariableArr")
         private String clauseVariableArr;
@@ -2278,6 +2302,8 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
+
     public static class ClauseList0802DTO {
         @JsonProperty("proposalNo")
         private String proposalNo;
@@ -2402,6 +2428,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class FCsaleinfoDTO {
         @JsonProperty("businessType")
         private String businessType;
@@ -2419,7 +2446,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         private String channelDetailName;
 
         @JsonProperty("creditPeriod")
-        private Integer creditPeriod;
+        private String creditPeriod;
 
         @JsonProperty("channelTip")
         private String channelTip;
@@ -2569,11 +2596,11 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.businessMode = "2";
             this.channelDetailCode = record.getChannelSort();
             this.channelDetailName = record.getChannelSortName();
-            this.creditPeriod = 15;
+            this.creditPeriod = taiPingCrawlerFindSolutionCodeData.getCreditPeriod();
             this.channelTip = record.getChannelTip();
             this.channelTipName = record.getChannelTipName();
             this.companyCode = parameters.getCompanyCode();
-            this.companyName = record.getCompanyName();
+            this.companyName = taiPingCrawlerFindSolutionCodeData.getCompanyName();
             this.salesmanCode = parameters.getSalesmanCode();
             this.salesmanName = taiPingCrawlerFindSolutionCodeData.getSalesmanName();
             this.teamManager = taiPingCrawlerFindSolutionCodeData.getTeamManager();
@@ -2623,6 +2650,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class FcProductListDto {
         @JsonProperty("orderNo")
         private String orderNo;

+ 6 - 9
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerSubmitValidateRequest.java

@@ -1312,14 +1312,12 @@ public class TaiPingCrawlerSubmitValidateRequest{
             this.bankBranchName = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getBankBranchName();
             this.applyNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getApplyNo();
             this.queryApplyNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getQueryApplyNo();
-            this.zlbWindowNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getZlbWindowNo();
             this.optBtn = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getOptBtn();
             this.applyName = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getApplyName();
             this.decisionMakingUnit = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getDecisionMakingUnit();
             this.dsMakingTypeDetail = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getDsMakingTypeDetail();
             this.compLevel = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getCompLevel();
             this.serialNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getSerialNo();
-            this.outOrderNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getOutOrderNo();
             this.bankCustomerManagerCode = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getBankCustomerManagerCode();
             this.bankBranchCode = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getBankBranchCode();
             this.newCarFlag = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getNewCarFlag();
@@ -1328,7 +1326,6 @@ public class TaiPingCrawlerSubmitValidateRequest{
             this.poaSerialNo = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getPoaSerialNo();
             this.isDangerBz = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getIsDangerBz();
             this.tpFeeFlag = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getTpFeeFlag();
-            this.feeServiceLinkage = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getFeeServiceLinkage();
             this.policySort = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getPolicySort();
             this.argueSolution = taiPingCrawlerPremiumCalculateRequest.getPfMainDto().getArgueSolution();
             this.arbitoryName = null;
@@ -2586,10 +2583,10 @@ public class TaiPingCrawlerSubmitValidateRequest{
         private String vehicleCategory;
 
         @JsonProperty("seatCount")
-        private Integer seatCount;
+        private String seatCount;
 
         @JsonProperty("tonCount")
-        private Integer tonCount;
+        private String tonCount;
 
         @JsonProperty("negotiatedActualValue")
         private String negotiatedActualValue;
@@ -2631,7 +2628,7 @@ public class TaiPingCrawlerSubmitValidateRequest{
         private String localVehicleInd;
 
         @JsonProperty("completeKerbMass")
-        private Integer completeKerbMass;
+        private String completeKerbMass;
 
         @JsonProperty("fuelType")
         private String fuelType;
@@ -2829,7 +2826,7 @@ public class TaiPingCrawlerSubmitValidateRequest{
         private String isSpecialCarFlag;
 
         @JsonProperty("cvFlag")
-        private Boolean cvFlag;
+        private String cvFlag;
 
         @JsonProperty("frameNoHeteroType")
         private String frameNoHeteroType;
@@ -3026,7 +3023,7 @@ public class TaiPingCrawlerSubmitValidateRequest{
             this.carBrand = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getCarBrand();
             this.actualValue = new BigDecimal(taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getActualValue());
             this.localVehicleInd = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getLocalVehicleInd();
-            this.completeKerbMass = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getCompleteKerbMass().intValue();
+            this.completeKerbMass = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getCompleteKerbMass();
             this.fuelType = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getFuelType();
             this.factory = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getFactory();
             this.engineModel = taiPingCrawlerPremiumCalculateRequest.getPfItemMotorDto().getEngineModel();
@@ -3368,7 +3365,7 @@ public class TaiPingCrawlerSubmitValidateRequest{
         private String birthDate;
 
         @JsonProperty("appliAge")
-        private Integer appliAge;
+        private String appliAge;
 
         @JsonProperty("appliCompanyAddress")
         private String appliCompanyAddress;

+ 8 - 3
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerPremiumCalculateData.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.taiping.crawler.entity.response;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.quotation.taiping.crawler.entity.request.TaiPingCrawlerPremiumCalculateRequest;
 import lombok.Data;
@@ -105,7 +106,7 @@ public class TaiPingCrawlerPremiumCalculateData {
     @JsonProperty("bzInformationDetailDto")
     private BzInformationDetailDtoDTO bzInformationDetailDto;
     @JsonProperty("fcProductList")
-    private List<?> fcProductList;
+    private List<TaiPingCrawlerPremiumCalculateRequest.FcProductListDto> fcProductList;
     @JsonProperty("clauseList0801")
     private List<ClauseList0801DTO> clauseList0801;
     @JsonProperty("clauseList0802")
@@ -239,6 +240,7 @@ public class TaiPingCrawlerPremiumCalculateData {
 
     @NoArgsConstructor
     @Data
+    @JsonInclude(JsonInclude.Include.ALWAYS)
     public static class PfItemKindDto0801DTO {
         @JsonProperty("addTax")
         private BigDecimal addTax;
@@ -369,7 +371,7 @@ public class TaiPingCrawlerPremiumCalculateData {
         @JsonProperty("serviceTimes")
         private Integer serviceTimes;
         @JsonProperty("shareList")
-        private Object shareList;
+        private List<?> shareList;
         @JsonProperty("shareModel")
         private String shareModel;
         @JsonProperty("shortRate")
@@ -412,6 +414,9 @@ public class TaiPingCrawlerPremiumCalculateData {
         private String valueType;
         @JsonProperty("yearPremium")
         private BigDecimal yearPremium;
+
+        @JsonProperty("clauseCode")
+        private String clauseCode;
     }
 
     @NoArgsConstructor
@@ -1267,7 +1272,7 @@ public class TaiPingCrawlerPremiumCalculateData {
         @JsonProperty("isEndor")
         private String isEndor;
         @JsonProperty("ggClauseParameterVos")
-        private String ggClauseParameterVos;
+        private List<String> ggClauseParameterVos;
         @JsonProperty("clauseVariableArr")
         private String clauseVariableArr;
         @JsonProperty("showDelete")

+ 117 - 11
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java

@@ -35,6 +35,7 @@ import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RedissonClient;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 
@@ -123,6 +124,9 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
         // 车型查询
         TaiPingCrawlerBrandNameQueryRequest brandNameQueryRequest = new TaiPingCrawlerBrandNameQueryRequest(quoteVo.getCarInfoVo(),orderNo,record,parameters);
         TaiPingCrawlerBaseResponse<TaiPingCrawlerBrandNameQueryData> brandNameQuery = taiPingCrawlerRequestComponent.queryBrand(brandNameQueryRequest, httpHeaders,parameters);
+        if (brandNameQuery.getData() == null || brandNameQuery.getData().getItemMotorDtoList() == null) {
+            throw new SystemException("查询不到车型信息,请检查厂牌型号是否录入正确");
+        }
         List<TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO> itemMotorDtoList = brandNameQuery.getData()
                 .getItemMotorDtoList();
         TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO itemMotorDtoListDTO = CarModelsFilterUtils.to(itemMotorDtoList, quoteVo.getCarInfoVo());
@@ -171,7 +175,7 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
             TaiPingCrawlerBaseResponse<TaiPingCrawlerVehicleForPRPQueryResponse> taiPingCrawlerVehicleForPRPQueryResponse = taiPingCrawlerRequestComponent.vehicleForPRPQuery(taiPingCrawlerVehicleForPRPQueryRequest, httpHeaders, parameters);
             if (taiPingCrawlerVehicleForPRPQueryResponse.isSucc() && taiPingCrawlerVehicleForPRPQueryResponse.getData().getItemMotorDtoList().size() > 0) {
                 TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO itemMotorDtoListDTONew = taiPingCrawlerVehicleForPRPQueryResponse.getData().getItemMotorDtoList().get(0);
-                TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO pfItemMotorDtoDTO = new TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), itemMotorDtoListDTONew, orderNo, carActualValue);
+                TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO pfItemMotorDtoDTO = new TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), itemMotorDtoListDTONew, orderNo, carActualValue,quoteVo);
                 taiPingCrawlerPremiumCalculateRequest.setPfItemMotorDto(pfItemMotorDtoDTO);
                 premiumCalculateResponse = taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, httpHeaders, parameters);
             } else {
@@ -204,6 +208,7 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
                     policyInfo.setStartTime0801(finalStartDateBZ.substring(11));
                     policyInfo.setEndDate0801(finalEndDateBZ.substring(0, 10));
                     policyInfo.setEndTime0801(finalEndDateBZ.substring(11));
+                    policyInfo.setImmEffectStartDate0801(finalStartDateBZ.substring(0, 10));
                     policyInfo.setEffectFlag0801(false);
                     if (taiPingCrawlerPremiumCalculateRequest.getFcProductList().size() > 0) {
                         taiPingCrawlerPremiumCalculateRequest.getFcProductList().get(0).setStartDate(finalStartDateBZ);
@@ -219,6 +224,7 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
                     policyInfo.setStartTime0802(finalStartDateBS.substring(11));
                     policyInfo.setEndDate0802(finalEndDateBS.substring(0, 10));
                     policyInfo.setEndTime0802(finalEndDateBS.substring(11));
+                    policyInfo.setImmEffectStartDate0802(finalStartDateBS.substring(0, 10));
                     policyInfo.setEffectFlag0802(false);
                     if (taiPingCrawlerPremiumCalculateRequest.getFcProductList().size() > 0) {
                         taiPingCrawlerPremiumCalculateRequest.getFcProductList().get(0).setStartDate(finalStartDateBS);
@@ -234,7 +240,7 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
                     TaiPingCrawlerBaseResponse<TaiPingCrawlerVehicleForPRPQueryResponse> taiPingCrawlerVehicleForPRPQueryResponse = taiPingCrawlerRequestComponent.vehicleForPRPQuery(taiPingCrawlerVehicleForPRPQueryRequest, httpHeaders, parameters);
                     if (taiPingCrawlerVehicleForPRPQueryResponse.isSucc()) {
                         TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO itemMotorDtoListDTONew = taiPingCrawlerVehicleForPRPQueryResponse.getData().getItemMotorDtoList().get(0);
-                        TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO pfItemMotorDtoDTO = new TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), itemMotorDtoListDTONew, orderNo, carActualValue);
+                        TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO pfItemMotorDtoDTO = new TaiPingCrawlerPremiumCalculateRequest.PfItemMotorDtoDTO(quoteVo.getCarInfoVo(), itemMotorDtoListDTONew, orderNo, carActualValue,quoteVo);
                         taiPingCrawlerPremiumCalculateRequest.setPfItemMotorDto(pfItemMotorDtoDTO);
                         premiumCalculateResponse = taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, httpHeaders, parameters);
                     }
@@ -243,8 +249,12 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
         }
         // 添加特约重新报价
         if (premiumCalculateResponse != null && premiumCalculateResponse.isSucc()) {
-            taiPingCrawlerPremiumCalculateRequest.setClauseList0801(addClauseList0801(premiumCalculateResponse));
-            taiPingCrawlerPremiumCalculateRequest.setClauseList0802(addClauseList0802(premiumCalculateResponse));
+            if (quoteVo.getCiRiskInfoVo() != null) {
+                taiPingCrawlerPremiumCalculateRequest.setClauseList0801(addClauseList0801(premiumCalculateResponse));
+            }
+            if (quoteVo.getBiRiskInfoVo() != null) {
+                taiPingCrawlerPremiumCalculateRequest.setClauseList0802(addClauseList0802(premiumCalculateResponse));
+            }
             if (premiumCalculateResponse.getData().getDemandNoForce() != null) {
                 taiPingCrawlerPremiumCalculateRequest.setDemandNoForce(premiumCalculateResponse.getData().getDemandNoForce());
             }
@@ -405,12 +415,10 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
 
         // 获取订单信息
         TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
-
         // 获取缓存的报价请求
         TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest = taiPingCrawlerCacheComponent
                 .getTaiPingCrawlerPremiumCalculateRequest(underwritingVo.getOrder().getOrdersNo());
-
-        // 重新计算保费(核保前必须设置forceLinkCIFlag关联交商)
+        // 重新计算保费
         taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setForceLinkCIFlag(true);
         log.info("[太平核保]保费重算请求: orderNo={}", taiPingCrawlerOrder.getCompanyOrderNo());
         TaiPingCrawlerBaseResponse<TaiPingCrawlerPremiumCalculateData> recalculateResponse =
@@ -420,7 +428,12 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
         }
         log.info("[太平核保]保费重算成功");
         taiPingCrawlerPremiumCalculateRequest.setIncrementServiceMatchFlag(false);
-        taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setForceLinkCIFlag(true);
+        taiPingCrawlerPremiumCalculateRequest.setPfItemKind0801DtoList(bulidPf0801List(recalculateResponse.getData(), taiPingCrawlerPremiumCalculateRequest));
+//        if (recalculateResponse.getData().getPfItemKindDto0802List() == null) {
+//            taiPingCrawlerPremiumCalculateRequest.setPfItemKind0802DtoList(null);
+//            taiPingCrawlerPremiumCalculateRequest.setClauseList0802(null);
+//        }
+//        taiPingCrawlerPremiumCalculateRequest.getPfPolicyInfoDto().setFcPolicyno0(recalculateResponse.getData().getFcProductList().get(0).getFcOrderNo());
         if (recalculateResponse.getData().getDemandNoForce() != null) {
             taiPingCrawlerPremiumCalculateRequest.setDemandNoForce(recalculateResponse.getData().getDemandNoForce());
             taiPingCrawlerPremiumCalculateRequest.getPfPolicyInfoDto().setDemandNoForce(recalculateResponse.getData().getDemandNoForce());
@@ -438,9 +451,11 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
             taiPingCrawlerPremiumCalculateRequest.getPfPolicyInfoDto().setProposalNo0801(recalculateResponse.getData().getProposalNo0801());
             taiPingCrawlerPremiumCalculateRequest.getPfPolicyInfoDto().setProposalNo0802(recalculateResponse.getData().getProposalNo0802());
         }
-        taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setUnderwriteCode(parameters.getUsername());
-        taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setUnderwriteName("自动核保");
-        taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setUnderWriteInd("2");
+        if (recalculateResponse.getData().getFcProductList() != null && recalculateResponse.getData().getFcProductList().size() > 0) {
+            TaiPingCrawlerPremiumCalculateRequest.FcProductListDto fcProductListDTO = recalculateResponse.getData().getFcProductList().get(0);
+            taiPingCrawlerPremiumCalculateRequest.getFcProductList().get(0).setFcOrderNo(fcProductListDTO.getFcOrderNo());
+            taiPingCrawlerPremiumCalculateRequest.getFcProductList().get(0).setPoaserialNo(fcProductListDTO.getPoaserialNo());
+        }
 
         // 提交验证 python代码直接用报价入参提交
 //        TaiPingCrawlerSubmitValidateRequest submitValidateRequest = new TaiPingCrawlerSubmitValidateRequest(
@@ -538,6 +553,97 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
         return underwritingResultsVo;
     }
 
+    public static List<TaiPingCrawlerPremiumCalculateRequest.PfItemKind0801DtoListDTO> bulidPf0801List(TaiPingCrawlerPremiumCalculateData data, TaiPingCrawlerPremiumCalculateRequest request){
+        List<TaiPingCrawlerPremiumCalculateRequest.PfItemKind0801DtoListDTO> pfItemKind0801DtoList = request.getPfItemKind0801DtoList();
+        pfItemKind0801DtoList.clear();
+        TaiPingCrawlerPremiumCalculateData.PfItemKindDto0801DTO pfItemKind0801DtoDTO = data.getPfItemKindDto0801();
+        TaiPingCrawlerPremiumCalculateRequest.PfItemKind0801DtoListDTO target = new TaiPingCrawlerPremiumCalculateRequest.PfItemKind0801DtoListDTO();
+        BeanUtils.copyProperties(pfItemKind0801DtoDTO, target);
+        target.setNodeBtGrossPremium(pfItemKind0801DtoDTO.getNodeBtGrossPremium());
+        target.setItemCode(pfItemKind0801DtoDTO.getItemCode());
+        target.setItemDetailCode(pfItemKind0801DtoDTO.getItemDetailCode());
+        target.setItemDetailList(pfItemKind0801DtoDTO.getItemDetailList());
+        target.setModeCode(pfItemKind0801DtoDTO.getModeCode());
+        target.setModeName(pfItemKind0801DtoDTO.getModeName());
+        target.setStartDate(pfItemKind0801DtoDTO.getStartDate());
+        target.setEndDate(pfItemKind0801DtoDTO.getEndDate());
+        target.setUnitValue(pfItemKind0801DtoDTO.getUnitValue());
+        target.setUnitInsured(pfItemKind0801DtoDTO.getUnitInsured());
+        target.setUnitPremium(pfItemKind0801DtoDTO.getUnitPremium());
+        target.setQuantity(pfItemKind0801DtoDTO.getQuantity());
+        target.setUnit(pfItemKind0801DtoDTO.getUnit());
+        target.setSumValue(pfItemKind0801DtoDTO.getSumValue());
+        target.setSumInsured(pfItemKind0801DtoDTO.getSumInsured());
+        target.setRatePeriod(pfItemKind0801DtoDTO.getRatePeriod());
+        target.setRate(pfItemKind0801DtoDTO.getRate());
+        target.setShortRateFlag(pfItemKind0801DtoDTO.getShortRateFlag());
+        target.setShortRateNumerator(pfItemKind0801DtoDTO.getShortRateNumerator());
+        target.setShortRateDenominator(pfItemKind0801DtoDTO.getShortRateDenominator());
+        target.setShortRate(pfItemKind0801DtoDTO.getShortRate());
+        target.setBasePremium(pfItemKind0801DtoDTO.getBasePremium());
+        target.setPureBenchPremium(pfItemKind0801DtoDTO.getPureBenchPremium());
+        target.setBasePureBenchPremium(pfItemKind0801DtoDTO.getBasePureBenchPremium());
+        target.setBenchmarkPremium(pfItemKind0801DtoDTO.getBenchmarkPremium());
+        target.setNoDebtPremium(pfItemKind0801DtoDTO.getNoDebtPremium());
+        target.setLoading(pfItemKind0801DtoDTO.getLoading());
+        target.setGrossPremium(pfItemKind0801DtoDTO.getGrossPremium());
+        target.setDiscount(pfItemKind0801DtoDTO.getDiscount());
+        target.setAdjustRate(pfItemKind0801DtoDTO.getAdjustRate());
+        target.setNetPremium(pfItemKind0801DtoDTO.getNetPremium());
+        target.setDeductibleRate(pfItemKind0801DtoDTO.getDeductibleRate());
+        target.setDeductible(pfItemKind0801DtoDTO.getDeductible());
+        target.setPremiumFormula(pfItemKind0801DtoDTO.getPremiumFormula());
+        target.setYearPremium(pfItemKind0801DtoDTO.getYearPremium());
+        target.setSurrenderInd(pfItemKind0801DtoDTO.getSurrenderInd());
+        target.setFirstLossRate(pfItemKind0801DtoDTO.getFirstLossRate());
+        target.setKindInd(pfItemKind0801DtoDTO.getKindInd());
+        target.setSuitProduct(pfItemKind0801DtoDTO.getSuitProduct());
+        target.setAssistKindFlag(pfItemKind0801DtoDTO.getAssistKindFlag());
+        target.setRemark(pfItemKind0801DtoDTO.getRemark());
+        target.setFlag(pfItemKind0801DtoDTO.getFlag());
+        target.setUwCount(pfItemKind0801DtoDTO.getUwCount());
+        target.setUwPremium(pfItemKind0801DtoDTO.getUwPremium());
+        target.setOriginUWPremium(pfItemKind0801DtoDTO.getOriginUWPremium());
+        target.setOriginGrossPremium(pfItemKind0801DtoDTO.getOriginGrossPremium());
+        target.setRelatedInd(pfItemKind0801DtoDTO.getRelatedInd());
+        target.setEndorAdjustRate(pfItemKind0801DtoDTO.getEndorAdjustRate());
+        target.setPubInsuredInd(pfItemKind0801DtoDTO.getPubInsuredInd());
+        target.setSpecialInd(pfItemKind0801DtoDTO.getSpecialInd());
+        target.setSubProposalNo(pfItemKind0801DtoDTO.getSubProposalNo());
+        target.setProjectCode(pfItemKind0801DtoDTO.getProjectCode());
+        target.setItemDetailNo(pfItemKind0801DtoDTO.getItemDetailNo());
+        target.setMustInsureInd(pfItemKind0801DtoDTO.getMustInsureInd());
+        target.setPremiumType(pfItemKind0801DtoDTO.getPremiumType());
+        target.setValueType(pfItemKind0801DtoDTO.getValueType());
+        target.setFranchise(pfItemKind0801DtoDTO.getFranchise());
+        target.setReSpecialInd(pfItemKind0801DtoDTO.getReSpecialInd());
+        target.setAdditionalRate(pfItemKind0801DtoDTO.getAdditionalRate());
+        target.setAllBrokenRate(pfItemKind0801DtoDTO.getAllBrokenRate());
+        target.setAddTax(pfItemKind0801DtoDTO.getAddTax());
+        target.setAddTaxRate(pfItemKind0801DtoDTO.getAddTaxRate());
+        target.setPriceTaxTotal(pfItemKind0801DtoDTO.getPriceTaxTotal());
+        target.setOrgPriceTaxTotal(pfItemKind0801DtoDTO.getOrgPriceTaxTotal());
+        target.setServiceTimes(pfItemKind0801DtoDTO.getServiceTimes());
+        target.setRelatedFlagFG2020(pfItemKind0801DtoDTO.getRelatedFlagFG2020());
+        target.setScUpdateTime(pfItemKind0801DtoDTO.getScUpdateTime());
+        target.setUseFormula(pfItemKind0801DtoDTO.getUseFormula());
+        target.setClauseCode(pfItemKind0801DtoDTO.getClauseCode());
+        target.setEasyKindName(pfItemKind0801DtoDTO.getEasyKindName());
+        target.setShareModel(pfItemKind0801DtoDTO.getShareModel());
+        target.setCalcMedicalModel(pfItemKind0801DtoDTO.getCalcMedicalModel());
+        target.setIsExist(pfItemKind0801DtoDTO.getIsExist());
+        target.setRiskShareModelSwitch(pfItemKind0801DtoDTO.getRiskShareModelSwitch());
+        target.setDeductibleList(pfItemKind0801DtoDTO.getDeductibleList());
+        target.setShareList(pfItemKind0801DtoDTO.getShareList());
+        target.setEndorPolicyNo(pfItemKind0801DtoDTO.getEndorPolicyNo());
+        target.setKindCode(pfItemKind0801DtoDTO.getKindCode());
+        target.setKindName("机动车交通事故责任强制险");
+        target.setKindcodeKindname("BZ-机动车交通事故责任强制险");
+        target.setRelieveFund(pfItemKind0801DtoDTO.getRelieveFund());
+        pfItemKind0801DtoList.add(target);
+        return pfItemKind0801DtoList;
+    }
+
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         OrderBase order = paymentLinkVo.getOrder();

+ 3 - 3
tenant/organization/src/main/java/com/jzg/organization/controller/SysOrganizationController.java

@@ -167,8 +167,8 @@ public class SysOrganizationController {
     }
 
     @Operation(summary = "根据用户id查询团队")
-    @GetMapping("queryOrganizationByManagerId")
-    public HttpResult<List<SysOrganization>> queryOrganizationByManagerId(@RequestParam("userId") String userId){
-        return HttpResult.ok(sysOrganizationService.queryOrganizationByManagerId(userId));
+    @GetMapping("queryOrganizationByPrincipalId")
+    public HttpResult<List<SysOrganization>> queryOrganizationByPrincipalId(@RequestParam("userId") String userId){
+        return HttpResult.ok(sysOrganizationService.queryOrganizationByPrincipalId(userId));
     }
 }

+ 4 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/EsmUserReferrerMapper.java

@@ -2,8 +2,12 @@ package com.jzg.organization.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.po.EsmUserReferrer;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface EsmUserReferrerMapper extends BaseMapper<EsmUserReferrer> {
+    @Delete("DELETE FROM esm_user_referrer WHERE id = #{id} AND is_delete = 0")
+    int deleteByIdCheck(@Param("id") String id);
 }

+ 8 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java

@@ -301,4 +301,12 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
      * @date 2026/8/6 9:38
      */
     List<String> queryDistinctParternerCompanyId(@Param("incomeIds") List<String> incomeIds);
+
+    /**
+     * 查询应收订单涉及到的对接人
+     *
+     * @author lipf
+     * @date 2026/9/1 19:17
+     */
+    List<String> queryConcatCount(@Param("incomeIds") List<String> incomeIds);
 }

+ 6 - 1
tenant/organization/src/main/java/com/jzg/organization/service/SysOrganizationService.java

@@ -31,6 +31,11 @@ public interface SysOrganizationService extends IService<SysOrganization> {
 
     HttpResult addTeamUsers(SysOrganizationUserLinkAdd organizationUserLinkAdd);
 
+    /**
+     * 设置团队管理人
+     */
+    HttpResult<String> setManagerPerson(SysOrganizationSetPerson setPerson);
+
     /**
      * 设置团队负责人
      *
@@ -62,6 +67,6 @@ public interface SysOrganizationService extends IService<SysOrganization> {
      */
     Page<SysOrganizationUserLinkVo> getTeamUserPage(Page page,SysOrganizationUserLinkQueryVo sysOrganizationUserLinkQueryVo);
 
-    List<SysOrganization> queryOrganizationByManagerId(String userId);
+    List<SysOrganization> queryOrganizationByPrincipalId(String userId);
 
 }

+ 14 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -610,6 +610,8 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
             }
 
             if (wasAdjusted) {
+                // 出口留点比例 大于 出口比例 设置 出口留点比例 等于 出口比例
+                clampKeepPointRatios(costType);
                 adjustedCount++;
             }
         }
@@ -624,6 +626,18 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
         return HttpResult.ok("批量调整成功,共调整 " + adjustedCount + " 条记录");
     }
 
+    /**
+     * 出口留点比例 大于 出口比例 设置 出口留点比例 等于 出口比例
+     */
+    private void clampKeepPointRatios(PtlAgreementCostType costType) {
+        // 出口留点 ≤ 出口比例
+        BigDecimal exportKeep = costType.getExportKeepPointRatio();
+        BigDecimal export = costType.getExport();
+        if (exportKeep != null && export != null && exportKeep.compareTo(export) > 0) {
+            costType.setExportKeepPointRatio(export);
+        }
+    }
+
     /**
      * 调整费用类型的各项比例
      */

+ 6 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -2273,6 +2273,12 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if (StrUtil.isBlank(platformSettlementVo.getInvoicingVo().getContactPerson())){
             throw new SystemException("对接人信息不能为空");
         }
+        // add by lipf 校验对接人一致
+        List<String> incomeIds = invoicingVo.getIncomeIds();
+        List<String> concatPersons = baseMapper.queryConcatCount(incomeIds);
+        if(CollUtil.size(concatPersons) == 0 || CollUtil.size(concatPersons) >1){
+            throw new SystemException("所选记录的对接人不唯一");
+        }
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime settlementDateTime = LocalDateTime.parse(platformSettlementVo.getSettlementVo().getReceivePaymentDate(), formatter);
         try {

+ 21 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysOrganizationServiceImpl.java

@@ -125,6 +125,24 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
         BeanUtils.copyProperties(organizationUserLinkAdd, organizationUserLink);
         return sysOrganizationUserLinkService.save(organizationUserLink) ? HttpResult.ok("添加成功") : HttpResult.error("添加失败");
     }
+    /**
+     * 设置团队负责人
+     *
+     * @param setPerson 要设置的团队负责人
+     * @author lipf
+     * @date 2026/4/28 9:08
+     */
+    @Override
+    public HttpResult<String> setManagerPerson(SysOrganizationSetPerson setPerson) {
+        SysOrganization sysOrganization = sysOrganizationMapper.selectById(setPerson.getId());
+        if (ObjectUtil.isNotEmpty(sysOrganization)){
+            sysOrganization.setManagerId(setPerson.getManagerId());
+            return sysOrganizationMapper.updateById(sysOrganization) > 0 ? HttpResult.ok("设置成功") : HttpResult.error("设置失败");
+        }
+        return HttpResult.error("所选团队、渠道、电销组不存在或以删除,请刷新");
+    }
+
+
 
     /**
      * 设置团队负责人
@@ -137,7 +155,7 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
     public HttpResult<String> setResponsiblePerson(SysOrganizationSetPerson setPerson) {
         SysOrganization sysOrganization = sysOrganizationMapper.selectById(setPerson.getId());
         if (ObjectUtil.isNotEmpty(sysOrganization)){
-            sysOrganization.setManagerId(setPerson.getManagerId());
+            sysOrganization.setPrincipalId(setPerson.getManagerId());
             return sysOrganizationMapper.updateById(sysOrganization) > 0 ? HttpResult.ok("设置成功") : HttpResult.error("设置失败");
         }
         return HttpResult.error("所选团队、渠道、电销组不存在或以删除,请刷新");
@@ -206,9 +224,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
     }
 
     @Override
-    public List<SysOrganization> queryOrganizationByManagerId(String managerId) {
+    public List<SysOrganization> queryOrganizationByPrincipalId(String principalId) {
         LambdaQueryWrapper<SysOrganization> lambdaQueryWrapper = new LambdaQueryWrapper<SysOrganization>()
-                .eq(SysOrganization::getManagerId, managerId)
+                .eq(SysOrganization::getPrincipalId, principalId)
                 .eq(SysOrganization::getIsDelete, 0);
         return sysOrganizationMapper.selectList(lambdaQueryWrapper);
     }

+ 3 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgAppServiceImpl.java

@@ -101,7 +101,9 @@ public class SysUserJzgAppServiceImpl extends ServiceImpl<SysUserJzgAppMapper, S
         }
         log.info("获取用户信息:systemCode=[{}],userName=[{}]", systemCode, userName);
         UserInfoVo infoVo = sysUserJzgAppMapper.userInfoGet(userName,systemCode);
-        infoVo.setHeadSculpture(MinioUtils.getPresignedObjectUrl("jzg", infoVo.getHeadSculpture()));
+        if(Objects.nonNull(infoVo.getHeadSculpture())) {
+            infoVo.setHeadSculpture(MinioUtils.getPresignedObjectUrl("jzg", infoVo.getHeadSculpture()));
+        }
         // 获取身份信息
         LambdaQueryWrapper<SysUserJzgInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.select(SysUserJzgInfo::getTypeAttr)

+ 15 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -16,6 +16,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.po.*;
+import com.jzg.commons.entity.rights.po.InsOrderRightsPackage;
 import com.jzg.commons.entity.user.vo.SysTennatVo;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.exception.SystemException;
@@ -110,6 +111,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Autowired
     private EsmUserReferrerService esmUserReferrerService;
 
+    @Autowired
+    private EsmUserReferrerMapper esmUserReferrerMapper;
+
     @Autowired
     private SysUserJzgInfoBankCardRecordService sysUserJzgInfoBankCardRecordService;
     @Qualifier("baseController")
@@ -1118,6 +1122,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUserJzgInfoSalesmanService.save(salesman);
         }
 
+        // 修改推荐关系 先删除再添加
+        EsmUserReferrer esmUserReferrer = esmUserReferrerService.getOne(new LambdaQueryWrapper<EsmUserReferrer>()
+                .eq(EsmUserReferrer::getId, sysUserVo.getId())
+                .eq(EsmUserReferrer::getIsDelete, 0));
+        if (esmUserReferrer != null) {
+            esmUserReferrerMapper.deleteByIdCheck(esmUserReferrer.getId());
+            SysUserJzgInfo sysUserJzgInfoReferrer = sysUserJzgInfoService.getById(sysUserVo.getReferrerId());
+            EsmUserReferrer referrer = new EsmUserReferrer(sysUserJzgInfo,sysUserJzgInfoReferrer);
+            esmUserReferrerService.save(referrer);
+        }
+
         boolean isPartner = sysUserJzgInfoService.isPartnerPresent(sysUserJzgInfo.getId());
         if (isPartner){
             sysUserJzgInfoService.updatePartnerByUserId(sysUserJzgInfo);

+ 10 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -2352,6 +2352,16 @@
             </foreach>
         </where>
     </select>
+    <!-- 查询应收订单涉及到的对接人 lipf 2026年9月1日19:18:26 -->
+    <select id="queryConcatCount" resultType="java.lang.String">
+        select distinct ipi.contact_person   from ins_ply_income ipi
+        <where>
+            ipi.id in
+            <foreach collection="incomeIds" separator="," close=")" open="(" item="id">
+                #{id}
+            </foreach>
+        </where>
+    </select>
 
 
 </mapper>