Răsfoiți Sursa

Merge remote-tracking branch 'origin/master'

xuqiang 1 săptămână în urmă
părinte
comite
0ae6b41799

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/dto/CostExternalPageParam.java

@@ -34,6 +34,9 @@ public class CostExternalPageParam extends PageRequest {
     @Schema(description = "协议id")
     private String ptlAgreementId;
 
+    @Schema(description = "协议id集")
+    private String[] agreementIds;
+
     @Schema(description = "生效时间")
     private List<String> effectiveTime;
 

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

+ 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())){

+ 4 - 1
tenant/costsorrule/src/main/java/com/jzg/costsorrule/constants/OperatorConstant.java

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

+ 32 - 24
tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java

@@ -130,13 +130,11 @@ 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 isEqgate = OperatorConstant.InputNumber.EQ.getCode().equals(linkVo.getOperator());
+        return isEqgate ? contains : !contains;
     }
 
     private boolean inputNumberEqual(RuleAttrLinkVo linkVo, String value) {
@@ -165,7 +163,7 @@ public class RuleServiceImpl implements RuleService {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator())) {// 不包含:不在 [min, max] 区间内
-            if (min > v && max < v) {
+            if (min > v || max < v) {
                 return true;
             }
         }
@@ -174,27 +172,32 @@ 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");
-
-        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 isEqgate = OperatorConstant.InputNumber.EQ.getCode().equals(linkVo.getOperator());
+        return isEqgate ? 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 isEqgate = OperatorConstant.InputNumber.EQ.getCode().equals(linkVo.getOperator());
+        return isEqgate ? contains : !contains;
     }
 
     private boolean radioEqual(RuleAttrLinkVo linkVo, String value) {
@@ -204,6 +207,7 @@ public class RuleServiceImpl implements RuleService {
             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;
@@ -249,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;
     }

+ 7 - 5
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -345,14 +345,15 @@ 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 "1".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 "1".equals(rule.getOperator()) ? rule.getMin().contains(value) : !rule.getMin().contains(value);
     }
 
     private static boolean radioEqual(PtlAgreementCostRule rule, String value) {
@@ -362,7 +363,7 @@ public class FactorMatch {
             // min 为 "1" 表示新能源,否则表示非新能源
             // operator "1"(等于):新能源状态与规则一致即匹配;operator "6"(不包含):相反
             boolean matched = EnergyTypeCode.isNewEnergy(value) == "1".equals(min);
-            return "6".equals(rule.getOperator()) ? !matched : matched;
+            return "1".equals(rule.getOperator()) ? matched : !matched;
         }
         return "1".equals(rule.getOperator()) ? min.contains(value) : !min.contains(value);
     }
@@ -389,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()) || "2".equals(rule.getOperator()));
         return notOp ? !contains : contains;
     }
 
@@ -422,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;
         }
     }

+ 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 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -2254,6 +2254,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 {

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

+ 6 - 0
tenant/organization/src/main/resources/mapper/PtlAgreementCostExternalMapper.xml

@@ -173,6 +173,12 @@
             <if test="costParam.ptlAgreementId != null and costParam.ptlAgreementId != ''">
                 AND ce.ptl_agreement_id = #{costParam.ptlAgreementId}
             </if>
+            <if test="costParam.agreementIds.length > 0 ">
+                AND ce.ptl_agreement_id in
+                <foreach collection="costParam.agreementIds" item="ptlAgreementId" separator="," open="(" close=")">
+                    #{ptlAgreementId}
+                </foreach>
+            </if>
             <if test="costParam.rulesName != null and costParam.rulesName != ''">
                 AND ce.rule_description  like concat('%',#{costParam.rulesName},'%')
             </if>

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

@@ -2371,6 +2371,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>