Przeglądaj źródła

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

# Conflicts:
#	src/main/java/com/ydtech/modules/order/aop/aspect/AuditVerificationAspect.java
785834757 2 lat temu
rodzic
commit
ab9e5816c8

+ 5 - 0
pom.xml

@@ -561,6 +561,11 @@
             <version>2.3.0</version>
             <version>2.3.0</version>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.56</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
 
 

+ 0 - 1
src/main/java/com/ydtech/config/properties/BohaiApiConfigurationProperties.java

@@ -26,5 +26,4 @@ public class BohaiApiConfigurationProperties {
     private String insurerCode;
     private String insurerCode;
 
 
 
 
-
 }
 }

+ 33 - 0
src/main/java/com/ydtech/config/properties/PingAnApiConfigurationProperties.java

@@ -0,0 +1,33 @@
+package com.ydtech.config.properties;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description: 平安财险 配置文件
+ * @author: wenks
+ * @date: 2024/3/25 9:47
+ **/
+@Data
+@Component
+@ConfigurationProperties(prefix = "pingan.api")
+public class PingAnApiConfigurationProperties {
+
+    // 接口地址
+    private String url;
+
+    // 令牌地址
+    private String accessUrl;
+
+    // 我司公钥
+    private String selfPublicKey;
+
+    // 我司私钥
+    private String selfPrivateKey;
+
+    // 平安财险方公钥
+    private String pingAnPublicKey;
+
+}

+ 1 - 0
src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java

@@ -22,6 +22,7 @@ import java.util.Map;
 public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
 public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
 
 
 
 
+    List<EsmUserReferrer> findParents(String userId);
     Map buildLevelInfo(SysUser agent);
     Map buildLevelInfo(SysUser agent);
 
 
     boolean deldeleteByReferrerId(String userId);
     boolean deldeleteByReferrerId(String userId);

+ 27 - 0
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -31,6 +31,7 @@ import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.util.*;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 
 
 @Service
 @Service
@@ -46,6 +47,32 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
     @Autowired
     @Autowired
     private EsmUserReferrerService esmUserReferrerService;
     private EsmUserReferrerService esmUserReferrerService;
 
 
+
+    // 递归查找节点的所有父级节点
+    public List<EsmUserReferrer> findParents(String userId) {
+        List<EsmUserReferrer> referrers = new ArrayList<>();
+        EsmUserReferrer esmUserReferrer = esmUserReferrerService.getById(userId);
+        //找不到用户的推荐关系
+        if(esmUserReferrer == null){
+            return null;
+        }
+        List<EsmUserReferrer> esmUserReferrers = esmUserReferrerService.list(new LambdaQueryWrapper<EsmUserReferrer>().eq(EsmUserReferrer::getAffiliation, esmUserReferrer.getAffiliation()));
+        findParentsRecursive(userId, esmUserReferrers, referrers);
+        return referrers;
+    }
+
+    private static void findParentsRecursive(String userId, List<EsmUserReferrer> esmUserReferrers,List<EsmUserReferrer> referrers) {
+        EsmUserReferrer collect = esmUserReferrers.stream().filter(item -> item.getId().equals(userId)).findFirst().get();
+        if(collect != null){
+            if(collect.getId().equals(collect.getReferrerId())){
+                referrers.add(collect);
+            }else{
+                referrers.add(collect);
+                findParentsRecursive(collect.getReferrerId(), esmUserReferrers, referrers);
+            }
+        }
+    }
+
     @Override
     @Override
     public Map buildLevelInfo(SysUser agent) {
     public Map buildLevelInfo(SysUser agent) {
         Map m = new HashMap();
         Map m = new HashMap();

+ 16 - 46
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -374,69 +374,39 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //计算分销费用
         //计算分销费用
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
         SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
+
+        //获取分销比例
         List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
         List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
                 new Object[]{sysUser.getDeptId()});
                 new Object[]{sysUser.getDeptId()});
 
 
+
         if (esmRetailList != null && !esmRetailList.isEmpty()) {
         if (esmRetailList != null && !esmRetailList.isEmpty()) {
             EsmRetail esmRetail = esmRetailList.get(0);
             EsmRetail esmRetail = esmRetailList.get(0);
+            //分销等级
+            insFeeOrderNew.setDistributionStatus(esmRetailList.get(0).getRetailtype());
+            //用户分销人员id
+            List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
+
             if (esmRetail != null) {
             if (esmRetail != null) {
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
                     insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
                     insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
                     insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
                     insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
+                    if(parents.size() > 2){
+                        insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId());
+                    }
                 }
                 }
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
                     insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
                     insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
                     insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
                     insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
+                    if(parents.size() > 1){
+                        insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId());
+                    }
                 }
                 }
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
                     insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
                     insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
                     insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
                     insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
-                }
-            }
-        }
-//      判断分销等级   通过userId  去查询  esm_user_referrer  如果 referrer_id  与 userId  相同时 一级分销   不同且还有上级为三级分销   其余  则二级分销
-        String userId = insFeeOrderNew.getUserId();
-        EsmUserReferrer esmUserReferrerServiceById = esmUserReferrerService.getById(userId);
-        if (ObjectUtils.isNotEmpty(esmUserReferrerServiceById)) {
-            String referrerId = esmUserReferrerServiceById.getReferrerId();
-//              如果相等则为一级
-            if (StringUtils.isNotEmpty(referrerId) && referrerId.equals(userId)) {
-                BigDecimal jqPremium = insFeeOrderNew.getJqPremium();  // 交强
-                BigDecimal bigdecimalFomat = new BigDecimal("100");
-                BigDecimal firstDetailProportion = insFeeOrderNew.getFirstDetailProportion();   // 一级分销比例
-                BigDecimal divide = firstDetailProportion.divide(bigdecimalFomat, 2, RoundingMode.HALF_UP);
-                BigDecimal jqAmount = jqPremium.multiply(divide);    //交强分销费用
-
-                BigDecimal jaLevelAmount1 = insFeeOrderNew.getJqDeptProportionLevel1() != null ? jqAmount.multiply(insFeeOrderNew.getJqDeptProportionLevel1().divide(bigdecimalFomat, 2, RoundingMode.HALF_UP)) : BigDecimal.ZERO;
-                BigDecimal jaLevelAmount2 = insFeeOrderNew.getJqDeptProportionLevel2() != null ? jqAmount.multiply(insFeeOrderNew.getJqDeptProportionLevel2().divide(bigdecimalFomat, 2, RoundingMode.HALF_UP)) : BigDecimal.ZERO;
-                BigDecimal jaLevelAmount3 = insFeeOrderNew.getJqDeptProportionLevel3() != null ? jqAmount.multiply(insFeeOrderNew.getJqDeptProportionLevel3().divide(bigdecimalFomat, 2, RoundingMode.HALF_UP)) : BigDecimal.ZERO;
-                BigDecimal jaLevelAmount4 = insFeeOrderNew.getJqDeptProportionLevel4() != null ? jqAmount.multiply(insFeeOrderNew.getJqDeptProportionLevel4().divide(bigdecimalFomat, 2, RoundingMode.HALF_UP)) : BigDecimal.ZERO;
-                BigDecimal jaLevelAmount5 = insFeeOrderNew.getJqDeptProportionLevel4() != null ? jqAmount.multiply(insFeeOrderNew.getJqDeptProportionLevel5().divide(bigdecimalFomat, 2, RoundingMode.HALF_UP)) : BigDecimal.ZERO;
-
-                insFeeOrderNew.setJqDeptPremiumsLevel1(insFeeOrderNew.getJqDeptPremiumsLevel1().add(jaLevelAmount1));//    交强一级机构管理费
-                insFeeOrderNew.setJqDeptPremiumsLevel2(insFeeOrderNew.getJqDeptPremiumsLevel2().add(jaLevelAmount2));//    交强二级机构管理费
-                insFeeOrderNew.setJqDeptPremiumsLevel3(insFeeOrderNew.getJqDeptPremiumsLevel3().add(jaLevelAmount3));//    交强三级机构管理费
-                insFeeOrderNew.setJqDeptPremiumsLevel4(insFeeOrderNew.getJqDeptPremiumsLevel4().add(jaLevelAmount4));//    交强四级机构管理费
-                insFeeOrderNew.setJqDeptPremiumsLevel5(insFeeOrderNew.getJqDeptPremiumsLevel5().add(jaLevelAmount5));//    交强五级机构管理费
-
-            } else {
-                EsmUserReferrer secondReferrer = esmUserReferrerService.getById(referrerId);
-                if (ObjectUtils.isNotEmpty(secondReferrer)) {
-                    //                二级分销
-                    BigDecimal secondDetailPremiums = insFeeOrderNew.getSecondDetailPremiums();
-                    BigDecimal thirdDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
-                    if (StringUtils.isNotEmpty(secondReferrer.getReferrerId()) && secondReferrer.getReferrerId().equals(referrerId)) {
-//                     二级分销  则  添加到 sys_user_account  表的 promotion  推广金 字段里
-                        SysUserAccount sysUserAccount = new SysUserAccount();
-                        sysUserAccount.setUserId(referrerId);
-                        sysUserAccount.setPromotion(secondDetailPremiums);
-                        sysUserAccountService.addOrUpdate(sysUserAccount);
-                    } else {
-//                     最后为三级
-                        SysUserAccount sysUserAccount = new SysUserAccount();
-                        sysUserAccount.setUserId(secondReferrer.getReferrerId());
-                        sysUserAccount.setPromotion(thirdDetailPremiums);
-                        sysUserAccountService.addOrUpdate(sysUserAccount);
+                    if(parents.size() > 0) {
+                        insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId());
                     }
                     }
                 }
                 }
             }
             }

+ 12 - 4
src/main/java/com/ydtech/modules/order/aop/aspect/AuditVerificationAspect.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.order.aop.aspect;
 
 
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.alibaba.fastjson.JSONObject;
 import com.ydtech.constants.sys.SystemConstant;
 import com.ydtech.constants.sys.SystemConstant;
 import com.ydtech.exception.SystemException;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUserRole;
 import com.ydtech.modules.admin.model.SysUserRole;
@@ -17,6 +18,7 @@ import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.order.entity.vo.SpecialAuditVo;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersKindService;
 import com.ydtech.modules.order.service.InsOrdersKindService;
 import com.ydtech.modules.order.service.InsOrdersRiskService;
 import com.ydtech.modules.order.service.InsOrdersRiskService;
@@ -67,8 +69,14 @@ public class AuditVerificationAspect {
     public void doBefore(JoinPoint point) {
     public void doBefore(JoinPoint point) {
         Object[] args = point.getArgs();
         Object[] args = point.getArgs();
         for (Object arg : args) {
         for (Object arg : args) {
-            //接收保险公司id参数
-            String companyId = arg.toString();
+            String companyId = "";
+            if (arg instanceof SpecialAuditVo) {
+                JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(arg));
+                companyId = jsonObject.getString("companyId");
+            }else {
+                //接收保险公司id参数
+                companyId = arg.toString();
+            }
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
             InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
             InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
 
 
@@ -97,9 +105,9 @@ public class AuditVerificationAspect {
             insOrders.setKind(insOrdersKindService.queryByOrderNo(insOrders.getOrderno()));
             insOrders.setKind(insOrdersKindService.queryByOrderNo(insOrders.getOrderno()));
 
 
             //先进行承保规则判断
             //先进行承保规则判断
-            feeRuleSchemeNewService.verificationRuleFactor(insAreaCompany,insOrders);
+            feeRuleSchemeNewService.verificationRuleFactor(insAreaCompany, insOrders);
             //再进行费用因子判断
             //再进行费用因子判断
-            feeRuleSchemeNewService.verificationCostFactor(insAreaCompany,insOrders);
+            feeRuleSchemeNewService.verificationCostFactor(insAreaCompany, insOrders);
         }
         }
     }
     }
 
 

+ 15 - 1
src/main/java/com/ydtech/modules/order/entity/api/bohai/request/VehicleConfirmationReqeust.java

@@ -10,12 +10,14 @@ import com.ydtech.modules.order.entity.api.bohai.constants.*;
 import com.ydtech.modules.order.entity.api.bohai.response.VehicleTypeQueryResponse;
 import com.ydtech.modules.order.entity.api.bohai.response.VehicleTypeQueryResponse;
 import com.ydtech.modules.order.entity.config.BoHaiConfigureParameters;
 import com.ydtech.modules.order.entity.config.BoHaiConfigureParameters;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.utils.IDCardUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -325,6 +327,9 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
         @JsonProperty("residentialAddress")
         @JsonProperty("residentialAddress")
         private String residentialAddress;
         private String residentialAddress;
 
 
+        @JsonProperty("birthday")
+        private String birthday;
+
         public CarOwnerDTO(CustomerInfoVo ownerInfo, PersonAreaVo ownerInfoArea) {
         public CarOwnerDTO(CustomerInfoVo ownerInfo, PersonAreaVo ownerInfoArea) {
             this.certType = CertType.CT_111.getCode();
             this.certType = CertType.CT_111.getCode();
             this.ownerName = ownerInfo.getName();
             this.ownerName = ownerInfo.getName();
@@ -341,6 +346,7 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
             this.cityName = ownerInfoArea.getCityName();
             this.cityName = ownerInfoArea.getCityName();
             this.distCode = ownerInfoArea.getCountyCode();
             this.distCode = ownerInfoArea.getCountyCode();
             this.distName = ownerInfoArea.getCountyName();
             this.distName = ownerInfoArea.getCountyName();
+            this.birthday = IDCardUtils.GetBirthday(ownerInfo.getIdentifyNumber());
         }
         }
     }
     }
 
 
@@ -433,6 +439,8 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
         @JsonProperty("residentialAddress")
         @JsonProperty("residentialAddress")
         private String residentialAddress;
         private String residentialAddress;
 
 
+        @JsonProperty("birthday")
+        private String birthday;
 
 
         public HolderDTO(CustomerInfoVo policyHolderInfo, PersonAreaVo policyHolderArea) {
         public HolderDTO(CustomerInfoVo policyHolderInfo, PersonAreaVo policyHolderArea) {
             // 通用参数
             // 通用参数
@@ -459,7 +467,7 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
             this.distName = policyHolderArea.getCountyName();
             this.distName = policyHolderArea.getCountyName();
 
 
             this.residentialAddress = policyHolderInfo.getAddr();
             this.residentialAddress = policyHolderInfo.getAddr();
-
+            this.birthday = IDCardUtils.GetBirthday(policyHolderInfo.getIdentifyNumber());
         }
         }
     }
     }
 
 
@@ -538,6 +546,9 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
         private String residentialAddress;
         private String residentialAddress;
 
 
 
 
+        @JsonProperty("birthday")
+        private String birthday;
+
         public InsurederDTO(CustomerInfoVo insuredPersonInfo, PersonAreaVo insuredPersonArea) {
         public InsurederDTO(CustomerInfoVo insuredPersonInfo, PersonAreaVo insuredPersonArea) {
             // 通用参数
             // 通用参数
             this.certType = CertType.CT_111.getCode();
             this.certType = CertType.CT_111.getCode();
@@ -556,8 +567,11 @@ public class VehicleConfirmationReqeust extends BoHaiBaseRequest {
             this.cityName = insuredPersonArea.getCityName();
             this.cityName = insuredPersonArea.getCityName();
             this.distCode = insuredPersonArea.getCountyCode();
             this.distCode = insuredPersonArea.getCountyCode();
             this.distName = insuredPersonArea.getCountyName();
             this.distName = insuredPersonArea.getCountyName();
+            this.birthday = IDCardUtils.GetBirthday(insuredPersonInfo.getIdentifyNumber());
 
 
         }
         }
 
 
     }
     }
+
+
 }
 }

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

@@ -185,8 +185,8 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
 
 
 
 
             public DrivingInsuranceDto toDrivingInsuranceDto() {
             public DrivingInsuranceDto toDrivingInsuranceDto() {
-                if (StringUtils.isNotEmpty(resultMsg)) {
-                    throw new SystemException(resultMsg);
+                if (StringUtils.isNotEmpty(this.getResultMsg())) {
+                    throw new SystemException(this.getResultMsg());
                 }
                 }
 
 
                 DrivingInsuranceDto drivingInsuranceDto = new DrivingInsuranceDto();
                 DrivingInsuranceDto drivingInsuranceDto = new DrivingInsuranceDto();

+ 41 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/constants/RequestUrl.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.order.entity.api.pingan.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+
+/**
+ * @version
+ * @description: 平安
+ * @author: wenks
+ * @date: 2024/3/25 14:16
+ **/
+@AllArgsConstructor
+@Getter
+public enum RequestUrl {
+
+    R_001("001", "/property/chexian/query/searchPAVehicleList", "平安车型搜索接口"),
+    R_002("002", "/property/chexian/query/getPolicyPdf", "电子保单"),
+    R_31("31", "/property/chexian/insure/index", "标的检查"),
+    R_41("41", "/property/chexian/insure/renewalConfirm", "续保确认"),
+    R_42("42", "/property/chexian/insure/carConfirm", "车辆信息确认"),
+    R_43("43", "/property/chexian/insure/getDmvehicleInfo", "交管车辆验证码"),
+    R_44("44", "/property/chexian/insure/getUnAutoProductList", "获取财意险险种套餐列表"),
+    R_45("45", "/property/chexian/insure/ getUnAutoProductDetail", "获取财意险险种套餐责任信息"),
+    R_51("51", "/property/chexian/insure/quote", "保费计算"),
+    R_52("52", "/property/chexian/insure/queryServiceContract", "服务类特约检索"),
+    R_61("61", "/property/chexian/insure/submitApply", "补充信息并核保"),
+    R_78("78", "/property/getScanCodeURL", "二维码支付"),
+    R_82("82", "/property/chexian/insure/accept", "承保接口"),
+    R_91("91", "/property/chexian/insure/getDocumentStatusList", "单证状态查询"),
+    R_92("92", "/property/chexian/insure/repealDocument", "撤销单证"),
+    R_93("93", "/property/chexian/insure/uploadFiles", "资料上传");
+
+    private final String code;
+
+    private final String url;
+
+    private final String desc;
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/order/entity/config/PingAnConfigureParameters.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.entity.config;
+
+
+import lombok.Data;
+
+
+/**
+ * @version
+ * @description: 平安财险配置
+ * @author: wenks
+ * @date: 2024/3/25 9:46
+ **/
+@Data
+public class PingAnConfigureParameters implements ConfigureParameters {
+
+
+
+
+}

+ 222 - 0
src/main/java/com/ydtech/modules/order/utils/PingAnRSAUtils.java

@@ -0,0 +1,222 @@
+package com.ydtech.modules.order.utils;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.lf5.util.StreamUtils;
+
+import javax.crypto.Cipher;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.security.*;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.*;
+
+public class PingAnRSAUtils {
+
+    private static String algorithm = "SHA256withRSA";
+
+    public static void main(String[] args) {
+        String keyword = "奥迪";
+        String userId = "123456789";
+        String oldSign = "Ugaug0keK0tm/4Aq9easzvNUDtnEELnXq6IS52tPSCmRVccfYZe3WvOt/RmIaO2JX8vDTHcA4X3zEzXTNpJ80+75Q1t" +
+                "/5hl5HafoWOYumRsbbywEtGtRZgngxKtNeQ6Jz/Jr6YlAki6g3y5XyKBKfE5EUpwjesR5QAZU7vs0vUY=";
+        String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUoFBcJMk+rQhs" +
+                "/MpXcxY8ltZ3Pjxsxec9cIyJ8GIKHvueh92gstmvR4ebNV3PPD4LmL7yJlycz4n17+HGF1uGpNMN5j/EFds0boan5jpetLlQ43ylzqrzq+5VG7l2Gwe" +
+                "+YO6GSaJsstP0Av8GaXEZcGT2B0E1c5gx3XTo9th+uQIDAQAB";
+        String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJSgUFwkyT6tCGz8yldzFjyW1nc+PGzF5z1wjInwYgoe" +
+                "+56H3aCy2a9Hh5s1Xc88PguYvvImXJzPifXv4cYXW4ak0w3mP8QV2zRuhqfmOl60uVDjfKXOqvOr7lUbuXYbB75g7oZJomyy0/QC" +
+                "/wZpcRlwZPYHQTVzmDHddOj22H65AgMBAAECgYBKTh" +
+                "//AVEvqZiFzJhowhwC7LKKaS4Sf5rNZ8CLkgeh4b2Qk4KlPeWBMTTFzxd4bTjj2VjVfYJdz5C8yVJKFBFoa0w+P/g" +
+                "/YT5V8IqsRuF74eJeVScrBDqk5Tk5WpE/P" +
+                "+au8gWamHrJnsansfYDCArCfOf4T48pxq4i0LXgkbg6pQJBAMj2343kFRE1ViPI87F3g7dWJv2qLgEWX9xPM4HJdtQsRpuyV5n9UGp7Nn7i08sv4Rg9aLMOjtS97Sn4M6zssKcCQQC9VCQPsPxRejznNCVYTiq6hRhCXaK5ysrVLQXFs9I7gVX3CEA746GMV8iNIv7K7q9ZnKuj2ZHcreSriyMRTOGfAkBJQcUIYkZTuY+nB8/dt2VqZZtdCLYwa0mSc8Sg4SHSAjnS89X/KlowFq4s3t65yMBTJ7+M1he28W0MyY98z+MtAkAG7jCPvnvOA7p9ACSp0dqwjzSvITxWrry0BvziGs4ETZy2+T9YseF1ALWfrPtEtG4IyrphuhIj0N3BBcvX00ejAkBkc7AXJAb+Cn0rsGZe9ZdLogVWJKA5gTYy0ThSQ2SocoCLuy+rRlBX67rHN3/0BKF+byWaf/MTdc5QtbH5pK9J";
+        Map<String, String> bizdata = new HashMap<String, String>();
+        bizdata.put("keyword", keyword);
+        bizdata.put("userId", userId);
+        // 签名前先排序
+        String wtsign = sortParametersWithASCII(bizdata);
+        System.out.println(wtsign);
+        String signData = "";
+        try {
+            // 加签
+            signData = sign(wtsign, privateKey);
+            System.out.println(signData);
+        } catch (Exception se) {
+        }
+        //验签
+        Boolean verifyresult = verifySignRsa(bizdata, oldSign, publicKey);
+        System.out.println(verifyresult);
+        //解密方式
+        //原始加密串
+        String pwd = "g4otiaYyELiIEv2x9X4CDvMYfmWFZzV3VRDgzGCSjgyVR4FWxEKneEYJp" +
+                "/MvOfqkHfseuDnJvgnNKXDOUY37q40w4GoUiurIyXOaorhpjtrBJ9jmL3n3ExDHrq0kARnUjRuw3Y2dio9WocfpCMyW0XEAYaQQZtHcIs3k2lWbLYc=";
+        //解密
+        try {
+            System.out.println("解密后值为:" + rsaDecrypt(pwd, privateKey, "UTF-8"));
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+    public static String sign(String responseBody, String inPrivateKey) throws Exception {
+        byte[] dataEncode = Base64.encodeBase64(responseBody.getBytes("UTF-8"));
+        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(inPrivateKey.getBytes()));
+        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
+        Signature signatureChecker;
+        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+        signatureChecker = Signature.getInstance(algorithm);
+        signatureChecker.initSign(privateKey);
+        signatureChecker.update(dataEncode);
+        byte[] sign = signatureChecker.sign();
+        return new String(Base64.encodeBase64(sign));
+    }
+
+    public static Boolean verifySignRsa(Map param, String signature, String verifyKey) {
+        if (!hasText(signature)) {
+            return false;
+        }
+        String wtsign = "";
+        wtsign = sortParametersWithASCII(param);
+        Boolean verifyresult = false;
+        verifyresult = verify(wtsign, signature, verifyKey);
+        //兼容partnerId不加密
+        if (!verifyresult) {
+            param.remove("partnerId");
+            wtsign = sortParametersWithASCII(param);
+            verifyresult = verify(wtsign, signature, verifyKey);
+        }
+        return verifyresult;
+    }
+
+    /**
+     * 验签
+     *
+     * @param businessdata 实际业务数据
+     * @param signedText   加密后待验证数据
+     * @return boolean
+     */
+    public static boolean verify(String businessdata, String signedText, String verifyKey) {
+        try {
+            String dataEncode = new String(Base64.encodeBase64(businessdata.getBytes("UTF-8")));
+            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decodeBase64(verifyKey.getBytes()));
+            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+            PublicKey publicKey = keyFactory.generatePublic(keySpec);
+            Signature signatureChecker = null;
+            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+            signatureChecker = Signature.getInstance(algorithm);
+            signatureChecker.initVerify(publicKey);
+            signatureChecker.update(dataEncode.replace("\n", "").getBytes());
+            byte[] signBytes = signedText.getBytes("UTF-8");
+            byte[] sign = Base64.decodeBase64(signBytes);
+            return signatureChecker.verify(sign);
+        } catch (Exception e) {
+        }
+        return false;
+    }
+
+    public static String rsaDecrypt(String content, String privateKey, String charset) throws Exception {
+        return rsaDecrypt(content, privateKey, charset, null);
+    }
+
+    public static String rsaDecrypt(String content, String privateKey, String charset, String signType) throws Exception {
+        int maxDecryptBlock = 256;
+        try {
+            PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", new ByteArrayInputStream(privateKey.getBytes()));
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(2, priKey);
+            byte[] encryptedData = StringUtils.isEmpty(charset) ? Base64.decodeBase64(content.getBytes()) :
+                    Base64.decodeBase64(content.getBytes(charset));
+            int inputLen = encryptedData.length;
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            int offSet = 0;
+            int i = 0;
+            while (inputLen - offSet > 0) {
+                byte[] cache;
+                if (inputLen - offSet > maxDecryptBlock) {
+                    cache = cipher.doFinal(encryptedData, offSet, maxDecryptBlock);
+                } else {
+                    cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
+                }
+                out.write(cache, 0, cache.length);
+                i++;
+                offSet = i * maxDecryptBlock;
+            }
+            byte[] decryptedData = out.toByteArray();
+            out.close();
+
+            return StringUtils.isEmpty(charset) ? new String(decryptedData) : new String(decryptedData, charset);
+        } catch (Exception e) {
+            throw new Exception("RSA解密失败. EncodeContent = " + content + ",charset = " + charset, e);
+        }
+    }
+
+    public static PrivateKey getPrivateKeyFromPKCS8(String algorithm, InputStream ins) throws Exception {
+        if ((ins == null) || (StringUtils.isEmpty(algorithm))) {
+            return null;
+        }
+        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
+        byte[] encodedKey = StreamUtils.getBytes(ins);
+        encodedKey = Base64.decodeBase64(encodedKey);
+        return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
+    }
+
+    public static boolean hasText(String str) {
+        if (!hasLength(str)) {
+            return false;
+        } else {
+            int strLen = str.length();
+
+            for (int i = 0; i < strLen; ++i) {
+                if (!Character.isWhitespace(str.charAt(i))) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+
+    public static boolean hasLength(String str) {
+        return str != null && str.length() > 0;
+    }
+
+    public static String sortParametersWithASCII(Map param) {
+        List sortList = new LinkedList<String>();
+        Iterator listadd = param.keySet().iterator();
+        while (listadd.hasNext()) {
+            Object obj = listadd.next();
+            sortList.add(obj.toString());
+        }
+        //参数排序
+        Collections.sort(sortList);
+        String sortStr = "";
+        for (int i = 0; i < sortList.size(); i++) {
+            String paramListStr = "";
+            //对List数据进行排序
+            if (param.get(sortList.get(i)) instanceof java.util.List) {
+                List dataList = (List) param.get(sortList.get(i));
+                if (null != dataList && dataList.size() > 0) {
+                    Collections.sort(dataList);
+                    for (int k = 0; k < dataList.size(); k++) {
+                        paramListStr = paramListStr + dataList.get(k) + ",";
+                    }
+                    paramListStr = paramListStr.substring(0, paramListStr.length() - 1);
+
+                }
+                sortStr = sortStr + sortList.get(i) + "=" + paramListStr + "&";
+
+            } else {
+                sortStr = sortStr + sortList.get(i) + "=" + param.get(sortList.get(i)) + "&";
+
+            }
+
+        }
+        sortStr = sortStr.substring(0, sortStr.length() - 1);
+        return sortStr;
+
+    }
+}

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/InsFeeOrderNew.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
+import org.apache.poi.hpsf.Decimal;
 
 
 import javax.persistence.Table;
 import javax.persistence.Table;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -319,5 +320,28 @@ public class InsFeeOrderNew {
     @TableField(value = "third_detail_premiums")
     @TableField(value = "third_detail_premiums")
     private BigDecimal thirdDetailPremiums;
     private BigDecimal thirdDetailPremiums;
 
 
+    @ApiModelProperty(value = "一级分销用户id")
+    @TableField(value = "first_level_user_id")
+    private String firstLevelUserId;
+
+    @ApiModelProperty(value = "二级分销用户id")
+    @TableField(value = "two_level_user_id")
+    private String twoLevelUserId;
+
+    @ApiModelProperty(value = "三级分销用户id")
+    @TableField(value = "three_level_user_id")
+    private String threeLevelUserId;
+
+    @ApiModelProperty(value = "分销等级")
+    @TableField(value = "distribution_status")
+    private String distributionStatus;
+
+
+    @ApiModelProperty(value = "机构分销费用")
+    @TableField(value = "dept_distribution")
+    private BigDecimal deptDistribution;
+
+
+
 
 
 }
 }

+ 9 - 0
src/main/resources/application-pre.yml

@@ -288,6 +288,15 @@ bohai:
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     insurerCode: 'BPIC'
     insurerCode: 'BPIC'
 
 
+# 平安财险
+pingan:
+  api:
+    url: https://api.pingan.com.cn/open/appsvr
+    accessUrl: https://api.pingan.com.cn/oauth/oauth2/access_token
+    selfPublicKey:
+    selfPrivateKey:
+    pingAnPublicKey:
+
 knife4j:
 knife4j:
   enable: false
   enable: false
 
 

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

@@ -287,6 +287,15 @@ bohai:
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     insurerCode: 'BPIC'
     insurerCode: 'BPIC'
 
 
+# 平安财险
+pingan:
+  api:
+    url: https://api.pingan.com.cn/open/appsvr
+    accessUrl: https://api.pingan.com.cn/oauth/oauth2/access_token
+    selfPublicKey:
+    selfPrivateKey:
+    pingAnPublicKey:
+
 knife4j:
 knife4j:
   enable: false
   enable: false
 
 

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

@@ -372,6 +372,16 @@ bohai:
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     boHaiPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCIC3wgJd+7Wue63Qjdh3/uscQSKec2m9gaeCq007kjEiSFES5Tfx75VPSxRj6qk6XN4umHOsHY+W9jkv+Cj4+z3XpPozsRdoj21oxPx8fPJzpVeaUHrEkZtj9Yvo/KhByBK5sRjKmlENXVF3wXVfAg48JZR2XUyUcBdZhR9aHhoQIDAQAB
     insurerCode: 'BPIC'
     insurerCode: 'BPIC'
 
 
+
+# 平安财险
+pingan:
+  api:
+    url: https://test-api.pingan.com.cn:20443/open/appsvr
+    accessUrl: https://test-api.pingan.com.cn:20443/oauth/oauth2/access_token
+    selfPublicKey:
+    selfPrivateKey:
+    pingAnPublicKey:
+
 xxl:
 xxl:
   job:
   job:
     admin:
     admin:

+ 3 - 3
src/main/resources/mapper/modules/xxl/XxlInsAreaCompanyMapper.xml

@@ -93,12 +93,12 @@
             iac.inside_pay_time
             iac.inside_pay_time
         FROM
         FROM
             ins_orders io
             ins_orders io
-        LEFT JOIN ins_area_company iac
-            ON iac.orderno = io.orderno
+                LEFT JOIN ins_area_company iac
+                          ON iac.orderno = io.orderno
         WHERE
         WHERE
             io.orderstatus != 3
             io.orderstatus != 3
           AND iac.orderstatus = 2
           AND iac.orderstatus = 2
-        AND
+          AND
             iac.createtime between #{startTime} and #{endTime}
             iac.createtime between #{startTime} and #{endTime}
     </select>
     </select>