Parcourir la source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
dongxin il y a 1 an
Parent
commit
36ffef183c
84 fichiers modifiés avec 1936 ajouts et 410 suppressions
  1. 1 1
      authentication/src/main/java/com/jzg/config/JzgTokenService.java
  2. 2 3
      authentication/src/main/java/com/jzg/controller/AuthController.java
  3. 6 6
      authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java
  4. 1 1
      commons/src/main/java/com/jzg/commons/entity/dto/AgreementAddParam.java
  5. 14 1
      commons/src/main/java/com/jzg/commons/entity/quote/vo/CarInfoVo.java
  6. 1 1
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java
  7. 3 3
      commons/src/main/java/com/jzg/commons/entity/system/po/SysSystemBusPerms.java
  8. 3 3
      commons/src/main/java/com/jzg/commons/entity/system/vo/SysSystemBusPermsVo.java
  9. 4 0
      commons/src/main/java/com/jzg/commons/entity/vo/AgreementVo.java
  10. 6 0
      commons/src/main/java/com/jzg/commons/exception/GlobalExceptionHandler.java
  11. 28 0
      commons/src/main/java/com/jzg/commons/exception/NoneException.java
  12. 9 4
      platform/src/main/java/com/jzg/controller/SysSystemController.java
  13. 1 2
      platform/src/main/java/com/jzg/service/SysSystemService.java
  14. 10 6
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  15. 1 0
      platform/src/main/resources/mapper/InsCompanyClauseMapper.xml
  16. 107 14
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java
  17. 3 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIService.java
  18. 4 0
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java
  19. 20 5
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  20. 56 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/BiVehicleUseCodeUtil.java
  21. 4 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/enums/base/QuoteRuleGroup.java
  22. 43 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/enums/quote/BiVehicleUseCode.java
  23. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/DownloadPolicyResultVo.java
  24. 11 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/DownloadPolicyVo.java
  25. 25 12
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/QuoteVo.java
  26. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationBaseService.java
  27. 35 6
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java
  28. 12 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java
  29. 3 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/BuildingAttributionInformation.java
  30. 76 39
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  31. 7 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java
  32. 43 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/UsedYearCode.java
  33. 11 6
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerActualValueRequest.java
  34. 25 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCheckTokenRequest.java
  35. 5 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCompaniesRequest.java
  36. 70 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerInitDataRequest.java
  37. 23 4
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerPriceRequest.java
  38. 14 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerSaveRequest.java
  39. 11 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/AcctinfoDTO.java
  40. 8 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/BusinessInsuranceDTO.java
  41. 2 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/CheckCarInfomationDTO.java
  42. 88 8
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/CompulsoryInsuranceDTO.java
  43. 10 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/DriveInsuranceDTO.java
  44. 17 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/EmptyObjectDTO.java
  45. 26 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/FlatvhlInfoDTO.java
  46. 26 20
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/PersonnelInformation.java
  47. 27 23
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/ProposalInfoDTO.java
  48. 46 26
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/VehicleInfoDTO.java
  49. 9 6
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/VehicleOwnerInfoDTO.java
  50. 41 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerCheckTokenResponse.java
  51. 175 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerInitDataResponse.java
  52. 62 9
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerPriceResponse.java
  53. 22 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java
  54. 23 19
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  55. 20 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/DESEncryption.java
  56. 3 4
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/component/GuoRenRequestApiComponent.java
  57. 4 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/GuoRenApiOrder.java
  58. 137 40
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java
  59. 78 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarInfoParameterFilling.java
  60. 28 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarKindClassifier.java
  61. 23 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CustomerInfoParameterFilling.java
  62. 22 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/QuoteInfoParameterFilling.java
  63. 39 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/PassengerCarClassifier.java
  64. 37 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/TruckClassifier.java
  65. 12 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  66. 38 12
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java
  67. 29 13
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteRuleConverter.java
  68. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java
  69. 15 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  70. 1 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  71. 1 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java
  72. 8 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/entity/request/InsurancePolicyPrintRequest.java
  73. 56 13
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/service/impl/ZhongMeiApiRequestImpl.java
  74. 14 14
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java
  75. 2 2
      tenant/organization/src/main/java/com/jzg/organization/client/CostsRuleClient.java
  76. 2 1
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementCostController.java
  77. 3 1
      tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java
  78. 1 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementCostMapper.java
  79. 10 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  80. 28 2
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  81. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysDeptServiceImpl.java
  82. 8 8
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  83. 30 30
      tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml
  84. 2 1
      tenant/organization/src/main/resources/mapper/PtlAgreementMapper.xml

+ 1 - 1
authentication/src/main/java/com/jzg/config/JzgTokenService.java

@@ -32,7 +32,7 @@ public class JzgTokenService {
         }
 
         RBucket<Object> bucket = redissonClient.getBucket(token);
-        bucket.set(authorization, 2, TimeUnit.HOURS);
+        bucket.set(authorization, 30, TimeUnit.DAYS);
     }
 
     public String getToken(String token){

+ 2 - 3
authentication/src/main/java/com/jzg/controller/AuthController.java

@@ -140,10 +140,9 @@ public class AuthController extends BaseController {
 
             String weOpenId = null;
             String aliOpenId = null;
-            if(loginFormVo.getType().equals(0)){
+            if("0".equals(loginFormVo.getType())){
                 weOpenId = wechatService.auth(loginFormVo);
-
-            }else if(loginFormVo.getType().equals(1)){
+            }else if("1".equals(loginFormVo.getType())){
                 aliOpenId = alipayService.auth(loginFormVo);
             }
             SysUser userById = sysUserService.getOne(new LambdaQueryWrapper<SysUser>()

+ 6 - 6
authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java

@@ -69,14 +69,14 @@ public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHan
         response.setContentType("application/json");
         JSONObject json = new JSONObject();
         JSONObject data = new JSONObject();
-//        data.put("token",token);
-//        data.put("isFirst",isFirst);
-//        json.put("code",200);
-//        json.put("msg","login success");
-//        json.put("data",data);
+        data.put("token",token);
+        data.put("isFirst",isFirst);
         json.put("code",200);
         json.put("msg","login success");
-        json.put("data",token);
+        json.put("data",data);
+//        json.put("code",200);
+//        json.put("msg","login success");
+//        json.put("data",token);
         // 将 Token 返回给前端
         response.getWriter().write(json.toJSONString());
 

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/dto/AgreementAddParam.java

@@ -68,7 +68,7 @@ public class AgreementAddParam {
     private String dockingPerson;
 
     @Schema(description = "api类型")
-//    @NotNull(message = "请选择api类型")
+    @NotNull(message = "请选择api类型")
     private Integer apiType;
 
     @Schema(description = "联系方式(对接人)")

+ 14 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/CarInfoVo.java

@@ -224,7 +224,7 @@ public class CarInfoVo implements Serializable {
      * @return 核定载质量吨位
      */
     public String getTonCount() {
-        if (StringUtils.hasLength(limitLoad) || Objects.isNull(limitLoad)) {
+        if (!StringUtils.hasLength(limitLoad)) {
             return null;
         }
         double v = Double.parseDouble(limitLoad);
@@ -232,6 +232,15 @@ public class CarInfoVo implements Serializable {
         return String.valueOf(v);
     }
 
+    public String completeKerbMassToTonCount(){
+        if (!StringUtils.hasLength(completeKerbMass)) {
+            return null;
+        }
+        double v = Double.parseDouble(completeKerbMass);
+        v = v / 1000;
+        return String.valueOf(v);
+    }
+
     public Double getTonCountDouble() {
         if (limitLoad == null || limitLoad.isBlank()) {
             return null;
@@ -241,6 +250,10 @@ public class CarInfoVo implements Serializable {
         return v;
     }
 
+    public String getLimitLoad() {
+        return StringUtils.hasLength(limitLoad) ? limitLoad : "0";
+    }
+
     /**
      * 排量(单位:升(L),能源种类为燃油时必传
      */

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java

@@ -210,7 +210,7 @@ public class PtlSchemeSaveVo {
 
     private String inputNumberIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttr ptlAgreementProductCostsAttrLink) {
         if ("1".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
-            return ptlAgreementUndwrtRulesAttr.getAttrCode() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
+            return ptlAgreementUndwrtRulesAttr.getAttrName() + "范围值" + ptlAgreementProductCostsAttrLink.getMin() + "到" + ptlAgreementProductCostsAttrLink.getMax();
         } else if ("2".equals(ptlAgreementProductCostsAttrLink.getOperator())) {
             return ptlAgreementUndwrtRulesAttr.getAttrName() + "小于" + ptlAgreementProductCostsAttrLink.getMin();
         } else if ("3".equals(ptlAgreementProductCostsAttrLink.getOperator())) {

+ 3 - 3
commons/src/main/java/com/jzg/commons/entity/system/po/SysSystemBusPerms.java

@@ -27,8 +27,8 @@ public class SysSystemBusPerms implements Serializable {
     @TableId
     private String id;
 
-    @Schema(description = "保司id")
-    private String companyId;
+//    @Schema(description = "保司id")
+//    private String companyId;
 
     @Schema(description = "系统编码")
     private String systemCode;
@@ -59,7 +59,7 @@ public class SysSystemBusPerms implements Serializable {
         }else{
             this.id = IdGenerate.nextId();
         }
-        this.companyId = sysSystemBusPermsVo.getCompanyId();
+//        this.companyId = sysSystemBusPermsVo.getCompanyId();
         this.systemCode = sysSystemBusPermsVo.getSystemCode();
         this.quoteCompany = sysSystemBusPermsVo.getQuoteCompany();
         this.orderMode = sysSystemBusPermsVo.getOrderMode();

+ 3 - 3
commons/src/main/java/com/jzg/commons/entity/system/vo/SysSystemBusPermsVo.java

@@ -29,8 +29,8 @@ public class SysSystemBusPermsVo implements Serializable {
     @TableId
     private String id;
 
-    @Schema(description = "保司id")
-    private String companyId;
+//    @Schema(description = "保司id")
+//    private String companyId;
 
     @Schema(description = "系统编码")
     private String systemCode;
@@ -70,7 +70,7 @@ public class SysSystemBusPermsVo implements Serializable {
 
     public SysSystemBusPermsVo(SysSystemBusPerms sysSystemBusPerms, List<SysSystemBusPermsLink> links) {
         this.id = sysSystemBusPerms.getId();
-        this.companyId = sysSystemBusPerms.getCompanyId();
+//        this.companyId = sysSystemBusPerms.getCompanyId();
         this.systemCode = sysSystemBusPerms.getSystemCode();
         this.quoteCompany = sysSystemBusPerms.getQuoteCompany();
         this.orderMode = sysSystemBusPerms.getOrderMode();

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/vo/AgreementVo.java

@@ -93,6 +93,10 @@ public class AgreementVo extends BaseModel {
     @Schema(description = "审核状态 0 申请审核 1 审核通过 2 审核不通过")
     private String auditStatus;
 
+    /** api类型 **/
+    @Schema(description = "api类型")
+    private String apiType;
+
     /** 序号 */
     @Schema(description = "序号")
     private Integer serialNumber;

+ 6 - 0
commons/src/main/java/com/jzg/commons/exception/GlobalExceptionHandler.java

@@ -38,6 +38,12 @@ public class GlobalExceptionHandler {
         return HttpResult.error(Integer.parseInt(validateException.getCode()), validateException.getMessage());
     }
 
+    @ExceptionHandler(value = NoneException.class)
+    @ResponseBody
+    public HttpResult NoneException(NoneException noneException) {
+        return HttpResult.error(Integer.parseInt(noneException.getCode()), noneException.getMessage());
+    }
+
     @ExceptionHandler(value = TokenExpireException.class)
     @ResponseBody
     public HttpResult TokenExpireException(TokenExpireException tokenExpireException) {

+ 28 - 0
commons/src/main/java/com/jzg/commons/exception/NoneException.java

@@ -0,0 +1,28 @@
+package com.jzg.commons.exception;
+
+
+public class NoneException extends RuntimeException {
+
+    private final String code;
+
+    public NoneException(String message) {
+        super(message);
+        this.code = "410";
+    }
+
+    public NoneException(String code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public NoneException(String code, String message, Throwable cause) {
+        super(message, cause);
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+}
+

+ 9 - 4
platform/src/main/java/com/jzg/controller/SysSystemController.java

@@ -135,8 +135,13 @@ public class SysSystemController {
     @GetMapping(value = { "/userGet"})
     @Operation(summary = "根据手机号获取用户信息")
     public HttpResult userGet(String mobile) {
-        return HttpResult.ok(sysUserService.list(new LambdaQueryWrapper<SysUser>()
-                .eq(SysUser::getMobile, mobile)));
+        List<SysUser> list = sysUserService.list(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getMobile, mobile));
+        list.forEach(item->{
+            item.setPassword("password");
+            item.setSalt("salt");
+        });
+        return HttpResult.ok(list);
     }
 
     /**
@@ -213,8 +218,8 @@ public class SysSystemController {
 
     @GetMapping("/getBusPerms")
     @Operation(summary = "获取租户业务权限")
-    public HttpResult getBusPerms(String systemCode,String companyId) {
-        return HttpResult.ok(sysSystemService.getBusPerms(systemCode,companyId));
+    public HttpResult getBusPerms(String systemCode) {
+        return HttpResult.ok(sysSystemService.getBusPerms(systemCode));
     }
 
 

+ 1 - 2
platform/src/main/java/com/jzg/service/SysSystemService.java

@@ -170,10 +170,9 @@ public interface SysSystemService extends IService<SysSystem> {
     /**
      * 获取租户业务权限
      * @param systemCode
-     * @param companyId
      * @return
      */
-    SysSystemBusPermsVo getBusPerms(String systemCode,String companyId);
+    SysSystemBusPermsVo getBusPerms(String systemCode);
 
     //endregion
 }

+ 10 - 6
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -20,6 +20,7 @@ import com.jzg.commons.entity.vo.SysSystemPermsVo;
 import com.jzg.commons.entity.vo.SysSystemVo;
 import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.mapper.*;
@@ -31,9 +32,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -513,7 +512,11 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean saveBusPerms(SysSystemBusPermsVo sysSystemBusPermsVo) {
+        SysSystemBusPerms busOne = sysSystemBusPermsMapper.selectOne(new LambdaQueryWrapper<SysSystemBusPerms>().eq(SysSystemBusPerms::getSystemCode, sysSystemBusPermsVo.getSystemCode()));
         SysSystemBusPerms sysSystemBusPerms = new SysSystemBusPerms(sysSystemBusPermsVo);
+        if(Objects.nonNull(busOne)){
+            sysSystemBusPerms.setId(busOne.getId());
+        }
         sysSystemBusPermsMapper.insertOrUpdate(sysSystemBusPerms);
         sysSystemBusPermsVo.setId(sysSystemBusPermsVo.getId());
         List<SysSystemBusPermsLink> sysSystemBusPermsLink = SysSystemBusPermsLink.getSystemBusPermsLink(sysSystemBusPermsVo);
@@ -528,11 +531,12 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     }
 
     @Override
-    public SysSystemBusPermsVo getBusPerms(String systemCode,String companyId) {
+    public SysSystemBusPermsVo getBusPerms(String systemCode) {
 
         SysSystemBusPerms sysSystemBusPerms = sysSystemBusPermsMapper.selectOne(new LambdaQueryWrapper<SysSystemBusPerms>()
-                .eq(SysSystemBusPerms::getSystemCode, systemCode)
-                .eq(SysSystemBusPerms::getCompanyId, companyId));
+                .eq(SysSystemBusPerms::getSystemCode, systemCode));
+
+        AssertionUtils.isFail(Objects.isNull(sysSystemBusPerms),"该租户不存在租户功能配置");
 
         List<SysSystemBusPermsLink> sysSystemBusPermsLinks = sysSystemBusPermsLinkMapper.selectList(new LambdaQueryWrapper<SysSystemBusPermsLink>()
                 .eq(SysSystemBusPermsLink::getPermsId, sysSystemBusPerms.getId()));

+ 1 - 0
platform/src/main/resources/mapper/InsCompanyClauseMapper.xml

@@ -30,6 +30,7 @@
         <if test="param.clauseContent != null and param.clauseContent != ''">
             AND clause_content LIKE CONCAT('%', #{param.clauseContent}, '%')
         </if>
+        order by icc.create_time desc
     </select>
 
     <select id="getClause" resultType="com.jzg.commons.entity.vo.InsCompanyClauseVo">

+ 107 - 14
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java

@@ -1,12 +1,15 @@
 package com.jzg.quotation.bohai.api.service.impl;
 
 import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
 import com.jzg.commons.entity.quote.vo.*;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.bohai.api.build.BoHaiApiQuoteResultsVoBuild;
 import com.jzg.quotation.bohai.api.component.BoHaiRequestApiComponent;
 import com.jzg.quotation.bohai.api.constant.enums.ResponseCode;
+import com.jzg.quotation.bohai.api.constant.enums.ResultCode;
 import com.jzg.quotation.bohai.api.entity.BoHaiConfigureParameters;
 import com.jzg.quotation.bohai.api.entity.po.BoHaiApiOrder;
 import com.jzg.quotation.bohai.api.entity.request.*;
@@ -23,9 +26,11 @@ import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversi
 import com.jzg.quotation.commons.utils.DateUtil;
 import lombok.RequiredArgsConstructor;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -169,13 +174,48 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         OrderBase order = underwritingVo.getOrder();
         //获取配置信息
         BoHaiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(BoHaiConfigureParameters.class, order.getAttributionInformationVo().getConfigInfo());
-
         //核保请求
         BoHaiApiOrder apiOrder = boHaiApiOrderService.findByOrdersNo(order.getOrdersNo());
         UnderwritingRequest underwritingRequest = new UnderwritingRequest(parameters, apiOrder.getOrderNo());
         UnderwritingResponse underwritingResponse;
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         underwritingResponse = boHaiRequestApiComponent.underwriting(underwritingRequest, parameters.getSysSourceCode());
+        if (ResponseCode.R_Z00001.getCode().equals(underwritingResponse.getResponseCode())) {
+            String jqStatus = underwritingResponse.getData().getTrafficResultCode();
+            String syStatus = underwritingResponse.getData().getBusinessResultCode();
+            if ("A4".equals(jqStatus) || "A4".equals(syStatus)) {
+                //人工核保
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+                underwritingResultsVo.setUnderwritingResult("人工处理");
+            } else if ("A6".equals(jqStatus) || "A6".equals(syStatus)) {
+                // 核保失败
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                StringBuilder sb = new StringBuilder();
+                if (null != underwritingResponse.getData().getTrafficResultMsg()) {
+                    sb.append(String.format("交强险提示信息:s%", underwritingResponse.getData().getTrafficResultMsg()));
+                }
+                if (null != underwritingResponse.getData().getBusinessResultMsg()) {
+                    sb.append(String.format("商业险提示信息:s%", underwritingResponse.getData().getBusinessResultMsg()));
+                }
+                underwritingResultsVo.setUnderwritingResult(sb.toString());
+            } else if ("A0".equals(jqStatus) || "A0".equals(syStatus)) {
+                // 自动核保成功
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                String jq = underwritingResponse.getData().getTrafficPolicy().getApplicationNo(); // 交强险投保单号
+                String sy = underwritingResponse.getData().getBusinessPolicy().getApplicationNo(); // 商业险投保单号
+                underwritingResultsVo.setJqApplyNo(jq);
+                underwritingResultsVo.setSyApplyNo(sy);
+                // 获取缴费地址
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                getPaymentLink(paymentLinkVo);
+                // 如果有驾意险 获取驾意险投保单号
+                if (underwritingResponse.getData().getCasualtyPolicies().size() > 0) {
+                    String jyApplyNo = underwritingResponse.getData().getCasualtyPolicies().get(0).getApplicationNo(); // 驾意险投保单号
+                    underwritingResultsVo.setJyApplyNo(jyApplyNo);
+                }
+            }
+        }
 
         return underwritingResultsVo;
     }
@@ -222,34 +262,87 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         //获取配置信息
         BoHaiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(BoHaiConfigureParameters.class, downloadPolicyVo.getOrder().getAttributionInformationVo().getConfigInfo());
         BoHaiApiOrder apiOrder = boHaiApiOrderService.findByOrdersNo(downloadPolicyVo.getOrder().getOrdersNo());
+        // 保单号
+        InsOrdersPolicy policie = downloadPolicyVo.getPolicie();
+        String jqPolicyNo = policie.getJqPolicyNo();
+        String syPolicyNo = policie.getSyPolicyNo();
         // 如何获取交强险保单号,商业险保单号 待补充
-        ElectronicPolicyRequest electronicPolicyRequest = new ElectronicPolicyRequest(parameters, apiOrder.getOrderNo(), "", "");
+        ElectronicPolicyRequest electronicPolicyRequest = new ElectronicPolicyRequest(parameters, apiOrder.getOrderNo(), jqPolicyNo, syPolicyNo);
         ElectronicPolicyResponse electronicPolicyResponse;
+        DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         try {
             electronicPolicyResponse = boHaiRequestApiComponent.electronicPolicy(electronicPolicyRequest, parameters.getSysSourceCode());
+            ElectronicPolicyResponse.DataDTO data = electronicPolicyResponse.getData();
+            if (StringUtils.isNotEmpty(data.getTrafficEPolicyUrl())) {
+                downloadPolicyResultVo.setJqUrl(data.getTrafficEPolicyUrl());
+                downloadPolicyResultVo.setJqFlagUrl(data.getTrafficEFlagUrl());
+            }
+            if (StringUtils.isNotEmpty(data.getBusinessEPolicyUrl())) {
+                downloadPolicyResultVo.setSyUrl(data.getBusinessEPolicyUrl());
+            }
+            if (StringUtils.isNotEmpty(data.getAcciEPolicyUrl())) {
+                downloadPolicyResultVo.setJyUrl(data.getAcciEPolicyUrl());
+            }
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        return null;
+        return downloadPolicyResultVo;
     }
 
     /**
-     * 后续需补充如何获取投保单号
+     * 查询订单状态
      * @param orderStatusVo
      */
     @Override
-    public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {
-        //获取配置信息
+    public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception {
+        List<StatusDocumentsResponse.DataDTO.DocumentListDTO> documentList = getDocumentListDTO(orderStatusVo);
+        OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
+        List<StatusDocumentsResponse.DataDTO.DocumentListDTO> documentListDTOS =
+                documentList.stream().filter(x -> ResultCode.RC_A0.getCode().equals(x.getStatus())).collect(Collectors.toList());
+        documentList = documentList.stream().filter(doc -> !doc.getInsuranceType().equals("2")).collect(Collectors.toList());
+        StatusDocumentsResponse.DataDTO.DocumentListDTO jqDocumentListDTO = (StatusDocumentsResponse.DataDTO.DocumentListDTO) documentList.stream().filter(doc -> doc.getInsuranceType().equals("1"));
+        StatusDocumentsResponse.DataDTO.DocumentListDTO syDocumentListDTO = (StatusDocumentsResponse.DataDTO.DocumentListDTO) documentList.stream().filter(doc -> doc.getInsuranceType().equals("2"));
+        String jqStatus = jqDocumentListDTO.getStatus();
+        String syStatus = syDocumentListDTO.getStatus();
+        // 核保通过
+        if (jqStatus.equals(ResultCode.RC_A0.getCode()) || syStatus.equals(ResultCode.RC_A0.getCode())) {
+            orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+            // 获取缴费地址
+            PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+            paymentLinkVo.setOrder(orderStatusVo.getOrder());
+            PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+            orderStatusResultVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
+        } else if (jqStatus.equals(ResultCode.RC_A4.getCode()) || syStatus.equals(ResultCode.RC_A4.getCode())) {
+            // 人工核保
+            orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
+        } else if (jqStatus.equals(ResultCode.RC_A6.getCode()) || syStatus.equals(ResultCode.RC_A6.getCode())) {
+            // 核保失败
+            orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            StringBuilder sb = new StringBuilder();
+            if (null != jqDocumentListDTO.getAuditOpinion()) {
+                sb.append(String.format("交强险提示信息:s%", jqDocumentListDTO.getAuditOpinion()));
+            }
+            if (null != syDocumentListDTO.getAuditOpinion()) {
+                sb.append(String.format("商业险提示信息:s%", syDocumentListDTO.getAuditOpinion()));
+            }
+            orderStatusResultVo.setErrorMsg(sb.toString());
+            // 已承保
+        } else if (jqStatus.equals(ResultCode.RC_B5.getCode()) || syStatus.equals(ResultCode.RC_B5.getCode())) {
+            orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+        }
+        return orderStatusResultVo;
+    }
+
+    private List<StatusDocumentsResponse.DataDTO.DocumentListDTO> getDocumentListDTO(OrderStatusVo orderStatusVo) throws Exception {
+        // 账号信息
         BoHaiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(BoHaiConfigureParameters.class, orderStatusVo.getOrder().getAttributionInformationVo().getConfigInfo());
         BoHaiApiOrder apiOrder = boHaiApiOrderService.findByOrdersNo(orderStatusVo.getOrder().getOrdersNo());
-        StatusDocumentsRequest statusDocumentsRequest = new StatusDocumentsRequest(parameters, apiOrder.getOrderNo(),  apiOrder.getProposalNo());
-        StatusDocumentsResponse statusDocumentsResponse;
-        try {
-            statusDocumentsResponse = boHaiRequestApiComponent.statusDocuments(statusDocumentsRequest, parameters.getSysSourceCode());
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        return null;
+        // 账号信息
+        String applyno = !StringUtils.isEmpty(orderStatusVo.getInsOrdersPolicy().getJqApplyNo()) ? orderStatusVo.getInsOrdersPolicy().getJqApplyNo() :
+                orderStatusVo.getInsOrdersPolicy().getSyApplyNo();
+        StatusDocumentsRequest statusDocumentsRequest = new StatusDocumentsRequest(parameters, apiOrder.getOrderNo(), applyno);
+        StatusDocumentsResponse response = boHaiRequestApiComponent.statusDocuments(statusDocumentsRequest, parameters.getSysSourceCode());
+        return response.getData().getDocumentList();
     }
 
     public Map<String, Object> getVehicleConfirmationResponse(QuoteVo quoteVo, BoHaiConfigureParameters parameters,

+ 3 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIService.java

@@ -363,7 +363,7 @@ public class ChengTaiAPIService {
 
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
 
         ChengTaiSystemResult.Response response = requestComponent.get(ChengTaiAPI.System.url(), param, null, ChengTaiSystemResult.Response.class, headers);
 
@@ -381,8 +381,7 @@ public class ChengTaiAPIService {
 
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
-
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
         ChengTaiFindAreaConfigResult.Response response = requestComponent.get(ChengTaiAPI.FindAreaConfig.url(), param, null, ChengTaiFindAreaConfigResult.Response.class, headers);
 
         if (response == null) {
@@ -435,7 +434,7 @@ public class ChengTaiAPIService {
         HttpHeaders headers = new HttpHeaders();
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
 
         ChengTaiInsureResult.Response response = requestComponent.get(ChengTaiAPI.Insure.url().replace("{uuid}", uuid), param, null, ChengTaiInsureResult.Response.class, headers);
 

+ 4 - 0
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java

@@ -16,7 +16,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
+import org.springframework.http.client.reactive.ClientHttpRequest;
 import org.springframework.http.client.reactive.ReactorClientHttpConnector;
+import org.springframework.web.reactive.function.BodyInserter;
 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Mono;
@@ -76,6 +78,8 @@ public class ChengTaiAPIServiceTest {
                                     .forEach((key, values) -> {
                                         logger.info("请求头: {}: {}", key, values);
                                     });
+                            BodyInserter<?, ? super ClientHttpRequest> body = clientRequest.body();
+
                             return Mono.just(clientRequest);
                         }
                 ))

+ 20 - 5
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -16,6 +16,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.DefaultUriBuilderFactory;
+import org.springframework.web.util.UriComponentsBuilder;
 import reactor.core.publisher.Flux;
 
 import java.io.IOException;
@@ -59,6 +61,18 @@ public class RequestComponent {
         };
     }
 
+    public String buildUrl(String baseUrl, MultiValueMap<String, String> params) {
+        StringBuilder sb = new StringBuilder(baseUrl);
+        if (!params.isEmpty()) {
+            sb.append("?");
+            params.forEach((key, values) -> {
+                values.forEach(value -> sb.append(key).append("=").append(value).append("&"));
+            });
+            sb.deleteCharAt(sb.length() - 1); // 移除末尾多余的&
+        }
+        return sb.toString();
+    }
+
     /**
      * 判断响应体 是否为空
      *
@@ -84,7 +98,7 @@ public class RequestComponent {
      * @param headers       请求头
      * @return 响应
      */
-    public <Response> Response get(String url, Map<String, Object> param, String description, Class<Response> responseClass, HttpHeaders headers) {
+    public <Response> Response get(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass, HttpHeaders headers) {
         ResponseEntity<Response> responseEntity = baseGet(url, param, responseClass, headers);
         return bodyIsEmpty(responseEntity, description);
     }
@@ -119,9 +133,10 @@ public class RequestComponent {
      * @param <Response>    响应实体
      * @return 响应
      */
-    public <Response> ResponseEntity<Response> baseGet(String url, Map<String, Object> param, Class<Response> responseClass, HttpHeaders headers) {
+    public <Response> ResponseEntity<Response> baseGet(String url, MultiValueMap<String, String> param, Class<Response> responseClass, HttpHeaders headers) {
+        String requestUrl = buildUrl(url, param);
         return webClient.get()
-                .uri(url, param)
+                .uri(requestUrl)
                 .headers(setHeaders(headers))
                 .retrieve()
                 .toEntity(responseClass)
@@ -154,7 +169,7 @@ public class RequestComponent {
      * @param <Response>    响应实体
      * @return 响应
      */
-    public <Response> Response requestGET(String url, Map<String, Object> param, String description, Class<Response> responseClass) {
+    public <Response> Response requestGET(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass) {
         return get(url, param, description, responseClass, new HttpHeaders());
     }
 
@@ -319,7 +334,7 @@ public class RequestComponent {
      * 下载文件
      *
      * @param url      请求链接
-     * @param param     请求内容
+     * @param param    请求内容
      * @param filePath 文件下载路劲
      * @param headers  请求头
      */

+ 56 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/BiVehicleUseCodeUtil.java

@@ -0,0 +1,56 @@
+package com.jzg.quotation.commons.constant;
+
+import com.jzg.quotation.commons.constant.enums.quote.BiVehicleUseCode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @description: 商业险车辆使用代码映射
+ * @author: wenks
+ * @date: 2025/5/23 11:56
+ **/
+public final class BiVehicleUseCodeUtil {
+
+    private static final Map<String, BiVehicleUseCode> CODE_MAPPING = new HashMap<>();
+
+    static {
+        // 初始化映射关系
+        // 个人类型
+        CODE_MAPPING.put("1-05", BiVehicleUseCode.CI01);  // 个人-家庭自用 -> 家庭自用客车
+        CODE_MAPPING.put("1-01", BiVehicleUseCode.CI07);  // 个人-营业出租租赁 -> 营业个人.出租.租赁
+        CODE_MAPPING.put("1-02", BiVehicleUseCode.CI08);  // 个人-营业城市公交 -> 营业个人.城市公交
+        CODE_MAPPING.put("1-03", BiVehicleUseCode.CI09);  // 个人-营业公路客运 -> 营业个人.公路客运
+        CODE_MAPPING.put("1-04", BiVehicleUseCode.CI10);  // 个人-营业货运 -> 营业个人.货车
+        CODE_MAPPING.put("1-08", BiVehicleUseCode.CI04);  // 个人-非营业货运 -> 非营业个人货车
+
+        // 企业类型
+        CODE_MAPPING.put("2-07", BiVehicleUseCode.CI02);  // 企业-非营业企业 -> 非营业企业客车
+        CODE_MAPPING.put("2-01", BiVehicleUseCode.CI11);  // 企业-营业出租租赁 -> 营业企业.出租.租赁
+        CODE_MAPPING.put("2-02", BiVehicleUseCode.CI12);  // 企业-营业城市公交 -> 营业企业.城市公交
+        CODE_MAPPING.put("2-03", BiVehicleUseCode.CI13);  // 企业-营业公路客运 -> 营业企业.公路客运
+        CODE_MAPPING.put("2-04", BiVehicleUseCode.CI14);  // 企业-营业货运 -> 营业企业.货车
+        CODE_MAPPING.put("2-08", BiVehicleUseCode.CI05);  // 企业-非营业货运 -> 非营业企业货车
+
+        // 机关类型
+        CODE_MAPPING.put("3-06", BiVehicleUseCode.CI03);  // 机关-非营业机关 -> 非营业机关客车
+        CODE_MAPPING.put("3-08", BiVehicleUseCode.CI06);  // 机关-非营业货运 -> 非营业机关货车
+    }
+
+    /**
+     * 根据PropertyCode和VehicleUseCode获取对应的BiVehicleUseCode
+     *
+     * @param propertyCode   属性代码
+     * @param vehicleUseCode 车辆使用代码
+     * @return 对应的商业险车辆使用代码
+     */
+    public static BiVehicleUseCode getBiVehicleUseCode(String propertyCode, String vehicleUseCode) {
+        String key = propertyCode + "-" + vehicleUseCode;
+        BiVehicleUseCode result = CODE_MAPPING.get(key);
+        if (result == null) {
+            throw new IllegalArgumentException("不支持的车辆使用性质组合: " + key);
+        }
+        return result;
+    }
+}

+ 4 - 2
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/enums/base/QuoteRuleGroup.java

@@ -24,10 +24,12 @@ public enum QuoteRuleGroup {
     PROPERTY("PROPERTY", "所属性质"),
     TRANSFER_SIGN("TRANSFER_SIGN", "过户标志"),
     VEHICLE_INSPECTION_STATUS("VEHICLE_INSPECTION_STATUS", "验车情况"),
-    POLICYHOLDER_INSURED_RELATIONSHIP("POLICYHOLDER_INSURED_RELATIONSHIP", "投被保人关系"),
     CAR_KIND_DETAIL("CAR_KIND_DETAIL", "车种明细"),
     LICENSE_COLOR("LICENSE_COLOR", "号牌颜色"),
-    LICENSE_KIND("LICENSE_KIND", "号牌种类");
+    LICENSE_KIND("LICENSE_KIND", "号牌种类"),
+    // 人员信息
+    POLICYHOLDER_INSURED_RELATIONSHIP("POLICYHOLDER_INSURED_RELATIONSHIP", "投被保人关系"),
+    GENDER("GENDER", "性别");
 
     private final String code;
 

+ 43 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/enums/quote/BiVehicleUseCode.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.commons.constant.enums.quote;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * @version
+ * @description: 车险出单 车辆类型 商业险
+ * @author: wenks
+ * @date: 2025/5/23 11:27
+ **/
+@AllArgsConstructor
+@Getter
+public enum BiVehicleUseCode {
+
+    CI01("CI01", "家庭自用客车"),
+    CI02("CI02", "非营业企业客车"),
+    CI03("CI03", "非营业机关客车"),
+    CI04("CI04", "非营业个人货车"),
+    CI05("CI05", "非营业企业货车"),
+    CI06("CI06", "非营业机关货车"),
+    CI07("CI07", "营业个人.出租.租赁"),
+    CI08("CI08", "营业个人.城市公交"),
+    CI09("CI09", "营业个人.公路客运"),
+    CI10("CI10", "营业个人.货车"),
+    CI11("CI11", "营业企业.出租.租赁"),
+    CI12("CI12", "营业企业.城市公交"),
+    CI13("CI13", "营业企业.公路客运"),
+    CI14("CI14", "营业企业.货车"),
+    CI15("CI15", "营业特种车"),
+    CI16("CI16", "非营业特种车"),
+    CI17("CI17", "营业特种车挂车"),
+    CI18("CI18", "非营业特种车挂车"),
+    CI19("CI19", "营业挂车"),
+    CI20("CI20", "非营业挂车");
+
+    // 编号
+    private final String code;
+    // 说明
+    private final String desc;
+
+}

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/DownloadPolicyResultVo.java

@@ -19,6 +19,6 @@ public class DownloadPolicyResultVo {
     @Schema(description = "商业险保单地址")
     private String syUrl;
 
-    @Schema(description = "保单地址")
+    @Schema(description = "驾意险保单地址")
     private String jyUrl;
 }

+ 11 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/DownloadPolicyVo.java

@@ -1,5 +1,7 @@
 package com.jzg.quotation.commons.entity.vo.aggregated;
 
+import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
 import com.jzg.commons.entity.orders.po.InsOrdersRisk;
 import com.jzg.quotation.commons.entity.vo.base.OrderBase;
@@ -25,4 +27,13 @@ public class DownloadPolicyVo {
      * 投保单号信息
      */
     private InsOrdersPolicy policie;
+    /**
+     * 车辆信息
+     */
+    private InsOrdersCarInfo carInfo;
+
+    /**
+     * 类型 1 标志 2 保单
+     */
+    private String type;
 }

+ 25 - 12
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/aggregated/QuoteVo.java

@@ -92,10 +92,11 @@ public class QuoteVo implements Serializable {
 
     /**
      * 订单数据库查询数据转 QuoteVo对象
+     *
      * @param insOrdersVo
      */
-    public QuoteVo(InsOrdersVo insOrdersVo){
-        if(Objects.isNull(order)){
+    public QuoteVo(InsOrdersVo insOrdersVo) {
+        if (Objects.isNull(order)) {
             order = new OrderBase();
         }
         order.setOrdersNo(insOrdersVo.getId());
@@ -112,21 +113,23 @@ public class QuoteVo implements Serializable {
         this.setInsuredPersonInfo(insOrdersVo.getInsuredPersonInfo());
 
         //险种处理
-        insOrdersVo.getInsOrdersRiskList().forEach(item->{
-            if(item.getRiskCode().equals(RiskCode.TRAFFIC.getCode())){
+        insOrdersVo.getInsOrdersRiskList().forEach(item -> {
+            if (item.getRiskCode().equals(RiskCode.TRAFFIC.getCode())) {
                 RiskInfoVo riskInfoVo = new RiskInfoVo();
                 riskInfoVo.setRiskCode(RiskCode.TRAFFIC.getCode());
                 riskInfoVo.setStartDate(item.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                 riskInfoVo.setEndDate(item.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                riskInfoVo.setInstantFlag(item.getStartDate().getHour() != 0 || item.getStartDate().getMinute() != 0 || item.getStartDate().getSecond() != 0);
+                riskInfoVo.setInstantFlag(item.getStartDate().getHour() != 0 || item.getStartDate()
+                        .getMinute() != 0 || item.getStartDate().getSecond() != 0);
                 this.setCiRiskInfoVo(riskInfoVo);
             }
-            if(item.getRiskCode().equals(RiskCode.BUSINESS.getCode())){
+            if (item.getRiskCode().equals(RiskCode.BUSINESS.getCode())) {
                 RiskInfoVo riskInfoVo = new RiskInfoVo();
                 riskInfoVo.setRiskCode(RiskCode.BUSINESS.getCode());
                 riskInfoVo.setStartDate(item.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                 riskInfoVo.setEndDate(item.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                riskInfoVo.setInstantFlag(item.getStartDate().getHour() != 0 || item.getStartDate().getMinute() != 0 || item.getStartDate().getSecond() != 0);
+                riskInfoVo.setInstantFlag(item.getStartDate().getHour() != 0 || item.getStartDate()
+                        .getMinute() != 0 || item.getStartDate().getSecond() != 0);
                 this.setBiRiskInfoVo(riskInfoVo);
             }
         });
@@ -138,31 +141,41 @@ public class QuoteVo implements Serializable {
         this.setVehicleAndVesselTaxVo(insOrdersVo.getVehicleAndVesselTaxVo());
     }
 
-    public CustomerInfoVo converCustomerInfoVo(InsOrdersCarUserInfo insOrdersCarUserInfo){
+    public CustomerInfoVo converCustomerInfoVo(InsOrdersCarUserInfo insOrdersCarUserInfo) {
         CustomerInfoVo customerInfoVo = new CustomerInfoVo();
         customerInfoVo.setDocumentsTypeCode(insOrdersCarUserInfo.getCerType().toString());
         //身份证 个人
-        if(insOrdersCarUserInfo.getCerType() == 1){
+        if (insOrdersCarUserInfo.getCerType() == 1) {
             customerInfoVo.setName(insOrdersCarUserInfo.getName());
             customerInfoVo.setIdentifyNumber(insOrdersCarUserInfo.getIdentifyNumber());
             customerInfoVo.setBirthday(IDCardUtils.getBirthDate(insOrdersCarUserInfo.getIdentifyNumber()));
             customerInfoVo.setAge(IDCardUtils.getAgeFromIDCard(insOrdersCarUserInfo.getIdentifyNumber()));
             customerInfoVo.setGender(IDCardUtils.getSex(insOrdersCarUserInfo.getIdentifyNumber()));
             customerInfoVo.setMobile(insOrdersCarUserInfo.getMobile());
-            customerInfoVo.setIdentifyValidDate(insOrdersCarUserInfo.getIdentifyValidDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-            customerInfoVo.setIdentifyValidEndDate(insOrdersCarUserInfo.getIdentifyValidEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            customerInfoVo.setIdentifyValidDate(insOrdersCarUserInfo.getIdentifyValidDate()
+                    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            customerInfoVo.setIdentifyValidEndDate(insOrdersCarUserInfo.getIdentifyValidEndDate()
+                    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
             customerInfoVo.setAddr(insOrdersCarUserInfo.getAddr());
             customerInfoVo.setProvinceCode(insOrdersCarUserInfo.getProvinceCode());
             customerInfoVo.setCityCode(insOrdersCarUserInfo.getCityCode());
             customerInfoVo.setCountyCode(insOrdersCarUserInfo.getCountyCode());
         }
         //机构 企业
-        if(insOrdersCarUserInfo.getCerType() == 2){
+        if (insOrdersCarUserInfo.getCerType() == 2) {
 
         }
         return customerInfoVo;
     }
 
+    /**
+     * 获取人员信息列表
+     *
+     * @return 人员信息列表
+     */
+    public List<CustomerInfoVo> fetchCustomerInfoVoList() {
+        return List.of(this.ownersInfo, this.insuredPersonInfo, this.policyHolderInfo);
+    }
 
 
 }

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationBaseService.java

@@ -40,6 +40,6 @@ public interface QuotationBaseService {
     /**
      * 查询订单状态
      */
-    OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws JsonProcessingException;
+    OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception;
 
 }

+ 35 - 6
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java

@@ -7,6 +7,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 
 import java.beans.PropertyDescriptor;
+import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -23,24 +24,52 @@ public final class RequestObjectConversion {
     private static final ObjectMapper objectMapper = new ObjectMapper();
 
     public static MultiValueMap<String, Object> convertMultiValueMap(Object obj) {
-        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
+        MultiValueMap<String, Object> result = new LinkedMultiValueMap<>();
         BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);
         for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
             String key = pd.getName();
+            if ("class".equals(key)) {
+                continue;
+            }
+
             Object value = wrapper.getPropertyValue(key);
-            if (value != null && !"class".equals(key)) {
-                multiValueMap.add(key, value);
+            if (value != null) {
+                if (value instanceof Collection) {
+                    ((Collection<?>) value).forEach(item -> result.add(key, item));
+                } else {
+                    result.add(key, value);
+                }
             }
         }
-        return multiValueMap;
+        return result;
     }
 
+    public static MultiValueMap<String, String> convertMultiValueStringMap(Object obj) {
+        MultiValueMap<String, String> result = new LinkedMultiValueMap<>();
+        BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);
+        for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
+            String key = pd.getName();
+            if ("class".equals(key)) {
+                continue;
+            }
+
+            Object value = wrapper.getPropertyValue(key);
+            if (value != null) {
+                if (value instanceof Collection) {
+                    ((Collection<?>) value).forEach(item -> result.add(key, item != null ? item.toString() : ""));
+                } else {
+                    result.add(key, value.toString());
+                }
+            }
+        }
+        return result;
+    }
+
+
     public static Map<String, Object> convertToMap(Object object) {
         return objectMapper.convertValue(object, new TypeReference<>() {
         });
     }
 
 
-
-
 }

+ 12 - 2
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java

@@ -35,10 +35,20 @@ public final class TimeProcessing {
 
     public static final long ONE = 1L;
 
-    private static LocalDateTime parse(String date) {
+    public static LocalDateTime parse(String date) {
         return LocalDateTime.parse(date, DATE_TIME_FORMATTER);
     }
 
+    /**
+     * 时间格式转换
+     * yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
+     * @param date yyyy-MM-dd
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    public static String dateToDateTime(String date) {
+        return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MIN).format(DATE_TIME_FORMATTER);
+    }
+
     /**
      * 一年以后减1秒得时间
      *
@@ -95,7 +105,7 @@ public final class TimeProcessing {
      * @return 明天0点0分0秒
      */
     public static String tomorrowDateTime() {
-        return LocalDateTime.of(LocalDate.now(), LocalTime.MIN).format(DATE_TIME_FORMATTER);
+        return LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN).format(DATE_TIME_FORMATTER);
     }
 
     /**

+ 3 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/BuildingAttributionInformation.java

@@ -25,8 +25,10 @@ public class BuildingAttributionInformation {
     private final DaJiaCrawlerRequestComponent daJiaCrawlerRequestComponent;
 
     public ProposalInfoDTO build(DaJiaCrawlerConfigureParameters parameters, String operatorCode, HttpHeaders headers) {
-        DaJiaCrawlerCompaniesRequest daJiaCrawlerCompaniesRequest = new DaJiaCrawlerCompaniesRequest(parameters.getLoginCompany(), operatorCode);
+        // 机构查询
+        DaJiaCrawlerCompaniesRequest daJiaCrawlerCompaniesRequest = new DaJiaCrawlerCompaniesRequest(parameters.getCDptCde(), parameters.getLoginCompany(), operatorCode);
         DaJiaCrawlerCompaniesResponse.ListDTO companies = daJiaCrawlerRequestComponent.companies(daJiaCrawlerCompaniesRequest, parameters.getCDptCde(), headers);
+        // 渠道套餐查询
         DaJiaCrawlerChannelPackagesRequest daJiaCrawlerChannelPackagesRequest = new DaJiaCrawlerChannelPackagesRequest(parameters, operatorCode);
         DaJiaCrawlerChannelPackagesResponse daJiaCrawlerChannelPackagesResponse = daJiaCrawlerRequestComponent.channelPackages(daJiaCrawlerChannelPackagesRequest, parameters.getChannelPackages(), headers);
         return new ProposalInfoDTO(companies, daJiaCrawlerChannelPackagesResponse);

+ 76 - 39
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java

@@ -3,9 +3,11 @@ package com.jzg.quotation.dajia.crawler.component;
 
 import com.alibaba.fastjson2.JSON;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
+import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.dajia.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.dajia.crawler.entity.request.*;
 import com.jzg.quotation.dajia.crawler.entity.response.*;
@@ -13,20 +15,18 @@ import com.jzg.quotation.dajia.crawler.properties.DaJiaCrawlerProperties;
 import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.beanutils.PropertyUtils;
-import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Mono;
 
-import java.lang.reflect.InvocationTargetException;
 import java.util.Base64;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 @Slf4j
@@ -86,7 +86,9 @@ public class DaJiaCrawlerRequestComponent {
         if (frequency <= 0) {
             throw new SystemException("验证码异常");
         }
-        Map<String, Object> map = Map.of("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
+
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
         // 请求
         DaJiaCrawlerBaseResponse request = requestComponent.requestGET(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), map, "", DaJiaCrawlerBaseResponse.class);
         DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
@@ -112,17 +114,16 @@ public class DaJiaCrawlerRequestComponent {
      * @return 唯一机构列表
      */
     public DaJiaCrawlerCompaniesResponse.ListDTO companies(DaJiaCrawlerCompaniesRequest request, String cDptCde, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            DaJiaCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = requestComponent.get(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", DaJiaCrawlerCompaniesResponse.class, headers);
-            return daJiaCrawlerCompaniesResponse.getList()
-                    .stream()
-                    .filter(x -> cDptCde.equals(x.getCDptCde()))
-                    .findFirst()
-                    .orElseThrow(() -> new SystemException(""));
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> multiValueMap = RequestObjectConversion.convertMultiValueStringMap(request);
+        DaJiaCrawlerBaseResponse response = requestComponent.get(RequestUrl.COMPANIES.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), multiValueMap, "", DaJiaCrawlerBaseResponse.class, headers);
+        DaJiaCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerCompaniesResponse.class);
+
+        return daJiaCrawlerCompaniesResponse.getList()
+                .stream()
+                .filter(x -> cDptCde.equals(x.getCDptCde()))
+                .findFirst()
+                .orElseThrow(() -> new SystemException(""));
+
     }
 
     /**
@@ -134,17 +135,13 @@ public class DaJiaCrawlerRequestComponent {
      * @return 套餐信息
      */
     public DaJiaCrawlerChannelPackagesResponse channelPackages(DaJiaCrawlerChannelPackagesRequest request, String packagesName, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            List<DaJiaCrawlerChannelPackagesResponse> responses = requestComponent.get(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", new ParameterizedTypeReference<>() {
-            }, headers);
-            return responses.stream()
-                    .filter(x -> packagesName.equals(x.getName()))
-                    .findFirst()
-                    .orElseThrow(() -> new SystemException(""));
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> describe = RequestObjectConversion.convertMultiValueStringMap(request);
+        DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(RequestUrl.CHANNEL_PACKAGES.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), describe, "", DaJiaCrawlerBaseResponse.class, headers);
+        List<DaJiaCrawlerChannelPackagesResponse> responses = DESEncryption.decryptStrToObjectList(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerChannelPackagesResponse.class);
+        return responses.stream()
+                .filter(x -> packagesName.equals(x.getName()))
+                .findFirst()
+                .orElseThrow(() -> new SystemException(""));
     }
 
     /**
@@ -175,13 +172,45 @@ public class DaJiaCrawlerRequestComponent {
      * @return
      */
     public <DaJiaResponse> DaJiaResponse request(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<DaJiaResponse> responseClass, HttpHeaders headers) {
-        ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = requestComponent.objectPost(crawlerRequestUrlStandard.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), request, DaJiaCrawlerBaseResponse.class, headers);
+        // 参数加密
+        DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(request);
+        ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = requestComponent.objectPost(crawlerRequestUrlStandard.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class, headers);
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = responseEntity.getBody();
-        assert daJiaCrawlerBaseResponse != null;
+        AssertionUtils.isEmpty(daJiaCrawlerBaseResponse, "请求异常请重试");
+        if (!"200".equals(daJiaCrawlerBaseResponse.getCode())) {
+            throw new SystemException(daJiaCrawlerBaseResponse.getMessage());
+        }
+        // 参数解密
         String decrypt = DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult());
         return JSON.parseObject(decrypt, responseClass);
     }
 
+    /**
+     * 创建token(查看token是否过期前一步)
+     *
+     * @param operatorCode
+     * @param headers      请求头
+     * @return
+     */
+    public String createToken(String operatorCode, HttpHeaders headers) {
+        String url = RequestUrl.CREATE_TOKEN.getRequestUrl(daJiaCrawlerProperties.getBaseUrl());
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("operatorCode", operatorCode);
+        DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
+        return DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult()).replace("\"", "");
+    }
+
+    /**
+     * 校验token(获取新的token)
+     *
+     * @param daJiaCrawlerCheckTokenRequest 校验token
+     * @param headers                       请求头
+     * @return 车型列表
+     */
+    public DaJiaCrawlerCheckTokenResponse checkToken(DaJiaCrawlerCheckTokenRequest daJiaCrawlerCheckTokenRequest, HttpHeaders headers) {
+        return request(RequestUrl.CHECK_TOKEN, daJiaCrawlerCheckTokenRequest, DaJiaCrawlerCheckTokenResponse.class, headers);
+    }
+
     /**
      * 车型查询
      *
@@ -189,9 +218,8 @@ public class DaJiaCrawlerRequestComponent {
      * @param headers                请求头
      * @return 车型列表
      */
-    public List<DaJiaCrawlerCarResponse.ListDTO> car(DaJiaCrawlerCarRequest daJiaCrawlerCarRequest, HttpHeaders headers) {
-        DaJiaCrawlerCarResponse request = request(RequestUrl.CAR, daJiaCrawlerCarRequest, DaJiaCrawlerCarResponse.class, headers);
-        return request.getList();
+    public DaJiaCrawlerCarResponse car(DaJiaCrawlerCarRequest daJiaCrawlerCarRequest, HttpHeaders headers) {
+        return request(RequestUrl.CAR, daJiaCrawlerCarRequest, DaJiaCrawlerCarResponse.class, headers);
     }
 
     /**
@@ -227,6 +255,18 @@ public class DaJiaCrawlerRequestComponent {
         return request(RequestUrl.SAVE, request, DaJiaCrawlerSaveResponse.class, headers);
     }
 
+    /**
+     * 初始化数据
+     *
+     * @param request 初始化数据
+     * @param headers 请求头
+     * @return 初始化数据响应
+     */
+    public DaJiaCrawlerInitDataResponse initData(DaJiaCrawlerInitDataRequest request, HttpHeaders headers) {
+        ResponseEntity<DaJiaCrawlerInitDataResponse> responseEntity = requestComponent.objectPost(RequestUrl.INIT_DATA.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), request, DaJiaCrawlerInitDataResponse.class, headers);
+        return responseEntity.getBody();
+    }
+
     /**
      * 上传标志
      *
@@ -284,7 +324,8 @@ public class DaJiaCrawlerRequestComponent {
      */
     public String qrcode(String orderNo, String operatorCode, HttpHeaders headers) {
         String url = RequestUrl.QRCODE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()) + "/" + orderNo + "/1";
-        Map<String, Object> map = Map.of("operatorCode", operatorCode);
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("operatorCode", operatorCode);
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
         DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
         return daJiaCrawlerCaptchaResponse.getUrl();
@@ -321,12 +362,8 @@ public class DaJiaCrawlerRequestComponent {
      * @return 保单数据
      */
     public DaJiaCrawlerDownloadResponse electronPolicyIODownload(DaJiaCrawlerDownloadRequest request, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            return requestComponent.get(RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", DaJiaCrawlerDownloadResponse.class, headers);
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> describe = RequestObjectConversion.convertMultiValueStringMap(request);
+        return requestComponent.get(RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", DaJiaCrawlerDownloadResponse.class, headers);
     }
 
 }

+ 7 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java

@@ -15,14 +15,18 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     // 登录
     CAPTCHA("captcha", "验证码"),
     AUTHENTICATE("authenticate", "登录"),
+    CREATE_TOKEN("/cabinet/createToken", "创建token"),
+    CHECK_TOKEN("checkToken", "校验token(获取新的token)"),
     //归属信息
-    COMPANIES("/api/companies", "承保机构"),
+    COMPANIES("/companies", "承保机构"),
     CHANNEL_PACKAGES("/default/package/list", "渠道套餐"),
     // 报价
-    PRICE("price", "报价"),
-    SAVE("save", "保存订单"),
     CAR("car", "车型查询"),
     ACTUAL_VALUE("actualvalue", "计算折旧价格"),
+    PRICE("price", "报价"),
+    SAVE("save", "保存订单"),
+    INIT_DATA("imp/web/page/init_data", "初始化数据"),
+
     //上传影像
     UPLOAD_SIGNS("imp/web/file/upload_signs", "上传标志"),
     UPLOAD("imp/web/file/upload", "上传"),

+ 43 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/UsedYearCode.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.dajia.crawler.constant.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 使用年限编码
+ * @author: wenks
+ * @date: 2025/5/23 15:53
+ **/
+@Getter
+@AllArgsConstructor
+public enum UsedYearCode {
+
+    U_373001("373001", "0"),
+    U_373002("373002", "1"),
+    U_373003("373003", "2"),
+    U_373004("373004", "3"),
+    U_373005("373005", "4"),
+    U_373006("373006", "5");
+
+    private final String code;
+
+    private final String usedYear;
+
+    public static UsedYearCode getUsedYearCode(String usedYear) {
+        if (Integer.parseInt(usedYear) < 1) {
+            return U_373001;
+        } else if (Integer.parseInt(usedYear) < 2) {
+            return U_373002;
+        } else if (Integer.parseInt(usedYear) < 3) {
+            return U_373003;
+        } else if (Integer.parseInt(usedYear) < 4) {
+            return U_373004;
+        } else if (Integer.parseInt(usedYear) < 6) {
+            return U_373005;
+        }
+        return U_373006;
+    }
+
+}

+ 11 - 6
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerActualValueRequest.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.dajia.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCarResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -59,17 +60,21 @@ public class DaJiaCrawlerActualValueRequest {
     private String operatorCode;
 
 
-    public DaJiaCrawlerActualValueRequest(DaJiaCrawlerCarResponse.ListDTO listDTO, CarInfoVo carInfoVo, String operatorCode) {
+    public DaJiaCrawlerActualValueRequest(DaJiaCrawlerCarResponse.ListDTO listDTO, CarInfoVo carInfoVo, String operatorCode, String combineProductCode) {
         this.purchaseValue = listDTO.getPurchasePrice();
-        this.registerDate = carInfoVo.getRegisterDate();
+        // 注册日期
+        this.registerDate = TimeProcessing.dateToDateTime(carInfoVo.getRegisterDate());
+        // 车辆明细
         this.rideKind = carInfoVo.getCarKindDetailIdCode();
-        this.startDate = startDate;
-        this.usage = usage;
+        this.startDate = TimeProcessing.tomorrowDateTime();
+        // 车辆用途代码
+        this.usage = carInfoVo.getVehicleUseCode();
         this.vehicleName = listDTO.getVehicleName();
-        this.fuelType = fuelType;
+        // 能源种类代码
+        this.fuelType = carInfoVo.getEnergyTypeCode();
         this.combineProductCode = combineProductCode;
         this.seatNumber = carInfoVo.getSeatCount();
-        this.modelEnergyType = modelEnergyType;
+        this.modelEnergyType = carInfoVo.getEnergyTypeCode();
         this.operatorCode = operatorCode;
     }
 }

+ 25 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCheckTokenRequest.java

@@ -0,0 +1,25 @@
+package com.jzg.quotation.dajia.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @version
+ * @description: 大家财险【校验token】响应
+ * @author: wenks
+ * @date: 2025/5/21 16:59
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class DaJiaCrawlerCheckTokenRequest {
+
+    @JsonProperty("tokenId")
+    private String tokenId;
+
+    @JsonProperty("operatorCode")
+    private String operatorCode;
+
+}

+ 5 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCompaniesRequest.java

@@ -20,15 +20,18 @@ public class DaJiaCrawlerCompaniesRequest {
 
     private String recommendCode;
 
+    private String loginCompany;
+
     private int pageNum;
 
     private int pageSize;
 
     private String operatorCode;
 
-    public DaJiaCrawlerCompaniesRequest(String companyPrefix, String operatorCode) {
+    public DaJiaCrawlerCompaniesRequest(String companyPrefix, String loginCompany, String operatorCode) {
         this.companyPrefix = companyPrefix;
-        this.companyName = "";
+        this.companyName = null;
+        this.loginCompany = loginCompany;
         this.recommendCode = operatorCode;
         this.pageNum = 1;
         this.pageSize = 10;

+ 70 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerInitDataRequest.java

@@ -0,0 +1,70 @@
+package com.jzg.quotation.dajia.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.dajia.crawler.entity.request.quote.BusinessInsuranceDTO;
+import com.jzg.quotation.dajia.crawler.entity.request.quote.CompulsoryInsuranceDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.util.StringUtils;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@NoArgsConstructor
+@Data
+public class DaJiaCrawlerInitDataRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7696042732582461206L;
+
+    @JsonProperty("businessType")
+    private String businessType;
+
+    @JsonProperty("businessNo")
+    private String businessNo;
+
+    @JsonProperty("busiInfoList")
+    private List<BusiInfoListDTO> busiInfoList;
+
+    public DaJiaCrawlerInitDataRequest(CompulsoryInsuranceDTO compulsoryInsurance, BusinessInsuranceDTO businessInsurance) {
+        this.businessType = "XKCXT";
+        this.businessNo = businessNo;
+        this.busiInfoList = new ArrayList<>();
+        // 交强险
+        Optional.ofNullable(compulsoryInsurance)
+                .map(CompulsoryInsuranceDTO::getProductInfo)
+                .map(CompulsoryInsuranceDTO.ProductInfoDTO::getPolicyNo)
+                .filter(StringUtils::hasLength)
+                .ifPresent(x->{
+                    this.busiInfoList.add(new BusiInfoListDTO(x, "proNoE", "交强险投保单号"));
+                });
+        Optional.ofNullable(businessInsurance)
+                .map(BusinessInsuranceDTO::getProductInfo)
+                .map(BusinessInsuranceDTO.ProductInfoDTO::getPolicyNo)
+                .filter(StringUtils::hasLength)
+                .ifPresent(x->{
+                    this.busiInfoList.add(new BusiInfoListDTO(x, "proNoB", "商业险投保单号"));
+                });
+    }
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class BusiInfoListDTO {
+
+        @JsonProperty("bussNo")
+        private String bussNo;
+
+        @JsonProperty("bussType")
+        private String bussType;
+
+        @JsonProperty("bussName")
+        private String bussName;
+
+    }
+
+}

+ 23 - 4
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerPriceRequest.java

@@ -7,6 +7,7 @@ import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerActualValueRe
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCarResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.util.ObjectUtils;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -95,14 +96,27 @@ public class DaJiaCrawlerPriceRequest implements Serializable {
                                     DaJiaCrawlerCarResponse.ListDTO car,
                                     DaJiaCrawlerActualValueResponse daJiaCrawlerActualValueResponse,
                                     ProposalInfoDTO proposalInfo,
-                                    String userCode) {
+                                    String userCode,
+                                    String channelOrderNo) {
+        proposalInfo.setChannelOrderNo(channelOrderNo);
         this.applicantInfo = new PersonnelInformation(quoteVo.getPolicyHolderInfo());
-        this.businessInsurance = new BusinessInsuranceDTO(quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo());
+        // 商业险
+        if (!ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo())) {
+            this.businessInsurance = new BusinessInsuranceDTO(quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo());
+            proposalInfo.setMark("3");
+        }else {
+            this.businessInsurance = new BusinessInsuranceDTO();
+        }
+
+        if (!ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo()) && !ObjectUtils.isEmpty(quoteVo.getCiRiskInfoVo())) {
+            proposalInfo.setMark("1");
+        }
         this.checkCarInformationDTO = new CheckCarInfomationDTO();
         String vehicleExhaust = car.getVehicleExhaust();
         String seatCount = quoteVo.getCarInfoVo().getSeatCount();
-
-        this.compulsoryInsurance = new CompulsoryInsuranceDTO(quoteVo.getCiRiskInfoVo(), Double.parseDouble(vehicleExhaust), Integer.parseInt(seatCount));
+        // 交强险
+        String completeKerbMass = quoteVo.getCarInfoVo().completeKerbMassToTonCount();
+        this.compulsoryInsurance = new CompulsoryInsuranceDTO(quoteVo.getCiRiskInfoVo(), Double.parseDouble(vehicleExhaust), Integer.parseInt(seatCount), completeKerbMass);
         this.driveInsurance = new DriveInsuranceDTO(quoteVo.getAccidentalDrivings());
         this.jabFamilyDriveInsurance = new Object();
         this.rqbFamilyDriveInsurance = new Object();
@@ -112,6 +126,8 @@ public class DaJiaCrawlerPriceRequest implements Serializable {
         this.jkhosDriveInsurance = new Object();
         this.jyChargeDriveInsurance = new Object();
         this.motorDriveInsurance = new Object();
+        this.flatvhlInfo = new FlatvhlInfoDTO();
+        this.acctinfo = new AcctinfoDTO();
         this.insuredInfos = List.of(new PersonnelInformation(quoteVo.getInsuredPersonInfo()));
         this.proposalInfo = proposalInfo;
         this.vehicleInfo = new VehicleInfoDTO(quoteVo.getCarInfoVo(), car, daJiaCrawlerActualValueResponse, quoteVo.getOwnersInfo()
@@ -122,3 +138,6 @@ public class DaJiaCrawlerPriceRequest implements Serializable {
         this.operatorCode = userCode;
     }
 }
+
+
+

+ 14 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerSaveRequest.java

@@ -2,10 +2,12 @@ package com.jzg.quotation.dajia.crawler.entity.request;
 
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.*;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerPriceResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.util.ObjectUtils;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -90,11 +92,20 @@ public class DaJiaCrawlerSaveRequest implements Serializable {
     @JsonProperty("operatorCode")
     private String operatorCode;
 
-    public DaJiaCrawlerSaveRequest(DaJiaCrawlerPriceResponse crawlerPriceResponse, String operatorCode) {
+    public DaJiaCrawlerSaveRequest(DaJiaCrawlerPriceResponse crawlerPriceResponse, String operatorCode, QuoteVo quoteVo) {
         this.applicantInfo = crawlerPriceResponse.getApplicantInfo();
-        this.businessInsurance = crawlerPriceResponse.getBusinessInsurance();
+        if (!ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo())) {
+            this.businessInsurance = crawlerPriceResponse.getBusinessInsurance();
+        }else {
+            this.businessInsurance = new BusinessInsuranceDTO();
+        }
         this.checkCarInfomation = crawlerPriceResponse.getCheckCarInfomation();
-        this.compulsoryInsurance = crawlerPriceResponse.getCompulsoryInsurance();
+
+        if (!ObjectUtils.isEmpty(quoteVo.getCiRiskInfoVo())) {
+            this.compulsoryInsurance = crawlerPriceResponse.getCompulsoryInsurance();
+        }else {
+            this.compulsoryInsurance = new CompulsoryInsuranceDTO();
+        }
         this.driveInsurance = crawlerPriceResponse.getDriveInsurance();
         this.jabFamilyDriveInsurance = crawlerPriceResponse.getJabFamilyDriveInsurance();
         this.rqbFamilyDriveInsurance = crawlerPriceResponse.getRqbFamilyDriveInsurance();

+ 11 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/AcctinfoDTO.java

@@ -7,7 +7,6 @@ import lombok.NoArgsConstructor;
 import java.io.Serial;
 import java.io.Serializable;
 
-@NoArgsConstructor
 @Data
 public class AcctinfoDTO implements Serializable {
 
@@ -38,4 +37,15 @@ public class AcctinfoDTO implements Serializable {
     @JsonProperty("bankCdeName")
     private String bankCdeName;
 
+
+    public AcctinfoDTO() {
+        this.acctNme = "";
+        this.acctTyp = "";
+        this.acctNo = "";
+        this.bankPro = "";
+        this.bankArea = "";
+        this.bankRelCde = "";
+        this.bankCde = "";
+        this.bankCdeName = "";
+    }
 }

+ 8 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/BusinessInsuranceDTO.java

@@ -13,7 +13,6 @@ import java.io.Serializable;
 import java.util.List;
 import java.util.stream.Collectors;
 
-@NoArgsConstructor
 @Data
 public class BusinessInsuranceDTO implements Serializable {
 
@@ -55,6 +54,14 @@ public class BusinessInsuranceDTO implements Serializable {
         this.specialInfos = List.of();
     }
 
+    public BusinessInsuranceDTO(){
+        this.coefficientInfo = new CoefficientInfoDTO();
+        this.deviceInfos = List.of();
+        this.itemKinds = List.of();
+        this.productInfo = new ProductInfoDTO();
+        this.specialInfos = List.of();
+    }
+
     @NoArgsConstructor
     @Data
     public static class ProductInfoDTO {

+ 2 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/CheckCarInfomationDTO.java

@@ -54,7 +54,7 @@ public class CheckCarInfomationDTO implements Serializable {
         this.inspectionResult = "";
         this.damagedSite = "";
         this.inspectionTime = "";
-        this.noInspectReason = "";
-        this.checkStatus = "";
+        this.noInspectReason = "383001";
+        this.checkStatus = "0";
     }
 }

+ 88 - 8
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/CompulsoryInsuranceDTO.java

@@ -11,7 +11,6 @@ import lombok.NoArgsConstructor;
 
 import java.util.List;
 
-@NoArgsConstructor
 @Data
 public class CompulsoryInsuranceDTO {
 
@@ -39,14 +38,22 @@ public class CompulsoryInsuranceDTO {
     @JsonProperty("specialInfos")
     private List<Object> specialInfos;
 
-    public CompulsoryInsuranceDTO(RiskInfoVo ciRiskInfoVo, double vehicleExhaust, int seatCount ) {
+    public CompulsoryInsuranceDTO(RiskInfoVo ciRiskInfoVo, double vehicleExhaust, int seatCount, String completeKerbMass) {
         this.productInfo = new ProductInfoDTO(ciRiskInfoVo);
         this.itemKinds = ItemKindsDTO.getKinds();
-        this.carShipTax = new CarShipTaxDTO(vehicleExhaust, seatCount);
+        this.carShipTax = new CarShipTaxDTO(vehicleExhaust, seatCount, completeKerbMass);
         this.coefficientInfo = new CoefficientInfoDTO();
         this.specialInfos = List.of();
     }
 
+    public CompulsoryInsuranceDTO() {
+        this.coefficientInfo = new CoefficientInfoDTO();
+        this.carShipTax = new CarShipTaxDTO();
+        this.itemKinds = List.of();
+        this.productInfo = new ProductInfoDTO();
+        this.specialInfos = List.of();
+    }
+
     @NoArgsConstructor
     @Data
     public static class ProductInfoDTO {
@@ -196,7 +203,7 @@ public class CompulsoryInsuranceDTO {
             this.policyNo = "";
             this.premium = "0.00";
             this.productCode = "0320";
-            this.proposalNo = "0356";
+            this.proposalNo = "";
             this.proposalStatus = "";
             this.proposalTime = "";
             this.renewMark = "";
@@ -379,7 +386,7 @@ public class CompulsoryInsuranceDTO {
         @JsonProperty("taxEndDate")
         private String taxEndDate;
 
-        public CarShipTaxDTO(double vehicleExhaust, int seatCount) {
+        public CarShipTaxDTO(double vehicleExhaust, int seatCount, String completeKerbMass) {
             String payCarType = PayCarType.getPayCarType(vehicleExhaust, seatCount);
             this.comDocumentNumber = "";
             this.comTaxOrg = "";
@@ -406,14 +413,13 @@ public class CompulsoryInsuranceDTO {
             this.taxPayerName = "";
             this.totalTax = "";
             this.unitTaxAmt = "";
-            this.weight = String.valueOf(vehicleExhaust);
+            this.weight = completeKerbMass;
             this.usage = "200";
             this.certificateDate = "";
             this.abateAmt = "";
         }
     }
 
-    @NoArgsConstructor
     @Data
     public static class CoefficientInfoDTO {
         @JsonProperty("proposalNo")
@@ -558,6 +564,80 @@ public class CompulsoryInsuranceDTO {
         private String pingAnBillCTPELR;
         @JsonProperty("pingAnBillELR")
         private String pingAnBillELR;
+
+        public CoefficientInfoDTO() {
+            this.proposalNo = "";
+            this.entireDiscount = "";
+            this.claimAdjustValue = "";
+            this.claimFlatReason = "";
+            this.peccancyAdjustValue = "";
+            this.noFloatReason = "";
+            this.lastPolicyNum = "";
+            this.drunkFeeRateFlat = "";
+            this.totalCoefNum = "";
+            this.drunkTotalCoef = "";
+            this.totalCoef = "";
+            this.drinkFeeRateFlat = "";
+            this.lossRatioCi = "";
+            this.lossRatioBi = "";
+            this.totalRatio = "";
+            this.handFeeCi = "";
+            this.expDisCoef = "";
+            this.noComLastFlatRsn = "";
+            this.selfChannelRatio = "";
+            this.selfSubmitRatio = "";
+            this.reason = "";
+            this.recordCoefCi = "";
+            this.trafficFloatRes = "";
+            this.areaCoef = "";
+            this.lastPayAmt = "";
+            this.handFeeBi = "";
+            this.channelCoefRes = "";
+            this.trafficRateFloat = "";
+            this.startTm = "";
+            this.endTm = "";
+            this.lowestCoef = "";
+            this.suggestCoef = "";
+            this.payoutRateCi = "";
+            this.payoutRateBi = "";
+            this.payoutRate = "";
+            this.riskScore = "";
+            this.totalFeeRate = "";
+            this.singlePaymentCi = "";
+            this.singlePaymentBi = "";
+            this.singlePayment = "";
+            this.insureYears = "";
+            this.claimTimes = "";
+            this.claimAdjustLvl = "";
+            this.pricingAdjustValue = "";
+            this.riskVar = "";
+            this.pricePlan = "";
+            this.floatDown = "";
+            this.compensateFeeRate = "";
+            this.fixedDropDiscount = "";
+            this.entireInitialDiscount = "";
+            this.coefficientScore = "";
+            this.pubScores = "";
+            this.microDiscoverScore = "";
+            this.truckRiskMrk = "";
+            this.busRiskMrk = "";
+            this.truckScore = "";
+            this.truckRiskWarning = "";
+            this.predictedNature = "";
+            this.fullCoverageScore = "";
+            this.liabilityOnlyScore = "";
+            this.ctpOnlyScore = "";
+            this.renewalFrequency = "";
+            this.didScore = "";
+            this.vhlPriceType = "";
+            this.suggestedDiscount = "";
+            this.onlineCarScore = "";
+            this.carIllegalScore = "";
+            this.completeControlScore = "";
+            this.pingAnBillCOMELR = "";
+            this.pingAnBillCTPELR = "";
+            this.pingAnBillELR = "";
+        }
     }
 
     @NoArgsConstructor
@@ -690,7 +770,7 @@ public class CompulsoryInsuranceDTO {
             ItemKindsDTO itemKindsDTO = new ItemKindsDTO();
             itemKindsDTO.setProposalNo("");
             itemKindsDTO.setKindCode(ciKind.getKindCode());
-            itemKindsDTO.setKindName(ciKind.getKindCode());
+            itemKindsDTO.setKindName(ciKind.getKindName());
             itemKindsDTO.setKindPackage("");
             itemKindsDTO.setProductName("");
             itemKindsDTO.setBasePremium("0");

+ 10 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/DriveInsuranceDTO.java

@@ -5,6 +5,7 @@ import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.util.CollectionUtils;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -24,9 +25,16 @@ public class DriveInsuranceDTO implements Serializable {
     @JsonProperty("itemKinds")
     private List<ItemKindsDTO> itemKinds;
 
+    public DriveInsuranceDTO() {
+        this.productInfo = new ProductInfoDTO();
+        this.itemKinds = new ArrayList<>();
+    }
+
     public DriveInsuranceDTO(List<AccidentalDrivingVo> accidentalDrivings) {
-        AccidentalDrivingVo accidentalDrivingVo = accidentalDrivings.get(0);
-        this.productInfo = new ProductInfoDTO(accidentalDrivingVo);
+        if (!CollectionUtils.isEmpty(accidentalDrivings)) {
+            AccidentalDrivingVo accidentalDrivingVo = accidentalDrivings.get(0);
+            this.productInfo = new ProductInfoDTO(accidentalDrivingVo);
+        }
         this.itemKinds = new ArrayList<>();
     }
 

+ 17 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/EmptyObjectDTO.java

@@ -0,0 +1,17 @@
+package com.jzg.quotation.dajia.crawler.entity.request.quote;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class EmptyObjectDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2766925425429553845L;
+
+    public EmptyObjectDTO() {
+    }
+
+}

+ 26 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/FlatvhlInfoDTO.java

@@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-@NoArgsConstructor
 @Data
 public class FlatvhlInfoDTO {
 
@@ -58,4 +57,30 @@ public class FlatvhlInfoDTO {
     private String industryModelCode;
 
 
+    public FlatvhlInfoDTO() {
+        this.modelNo = "";
+        this.modelIDCode = "";
+        this.tradeName = "";
+        this.brand = "";
+        this.series = "";
+        this.carName = "";
+        this.noticeType = "";
+        this.configType = "";
+        this.categoryName = "";
+        this.deptName = "";
+        this.pureRiskPremium = "";
+        this.pureRiskPremiumFlag = "";
+        this.refcode2 = "";
+        this.dataSource = "";
+        this.modelFlag = "";
+        this.selection = "1";
+        this.vehlcleCode = "";
+        this.vehlcleModeCode = "";
+        this.curbWt = "";
+        this.displacement = "";
+        this.seatNum = "";
+        this.fuelType = "";
+        this.vehicleStyleUniqueId = "";
+        this.industryModelCode = "";
+    }
 }

+ 26 - 20
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/PersonnelInformation.java

@@ -2,11 +2,14 @@ package com.jzg.quotation.dajia.crawler.entity.request.quote;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 @NoArgsConstructor
 @Data
@@ -161,17 +164,17 @@ public class PersonnelInformation implements Serializable {
 
     public PersonnelInformation(CustomerInfoVo customerInfoVo) {
         this.personId = "";
-        this.personName = "";
-        this.clientType = "";
-        this.identifyType = "";
-        this.identifyNo = "";
-        this.gender = "";
-        this.birthday = "";
-        this.companyNature = "";
-        this.province = "";
-        this.city = "";
-        this.county = "";
-        this.suffixAddr = "";
+        this.personName = customerInfoVo.getName();
+        this.clientType = "1";
+        this.identifyType = "01";
+        this.identifyNo = customerInfoVo.getIdentifyNumber();
+        this.gender = customerInfoVo.getGender();
+        this.birthday = TimeProcessing.dateToDateTime(customerInfoVo.getBirthday());
+        this.companyNature = "9";
+        this.province = customerInfoVo.getProvinceCode();
+        this.city = customerInfoVo.getCityCode();
+        this.county = customerInfoVo.getCountyCode();
+        this.suffixAddr = customerInfoVo.getAddr();
         this.address = customerInfoVo.getAddr();
         this.agentCertNo = "";
         this.agentCertType = "";
@@ -190,19 +193,19 @@ public class PersonnelInformation implements Serializable {
         this.customerSource = "";
         this.driverNear = "";
         this.email = "";
-        this.identifyEndDate = "";
+        this.identifyEndDate = TimeProcessing.dateToDateTime(customerInfoVo.getIdentifyValidEndDate());
         this.identifyEndDateMrk = "";
         this.invoiceType = "";
         this.marriageStatus = "";
-        this.middleMoneyRisk = "";
+        this.middleMoneyRisk = "1801";
         this.bigMoneyRisk = "1008";
-        this.mobile = "";
+        this.mobile = customerInfoVo.getMobile();
         this.mobileId = "";
         this.mobileIdType = "";
         this.mobileName = "";
         this.mobileType = "";
-        this.nation = "";
-        this.occupation = "";
+        this.nation = "1";
+        this.occupation = "1H";
         this.payerRelation = "";
         this.postCode = "";
         this.remark = "";
@@ -215,8 +218,8 @@ public class PersonnelInformation implements Serializable {
         this.identifyBeginDate = "";
         this.issueOrg = "";
         this.idCardAddr = "";
-        this.clientMessagePower = "";
-        this.authenticationStatus = "";
+        this.clientMessagePower = "1";
+        this.authenticationStatus = "B";
         this.relCode = "";
         this.isOcr = "";
         this.relOwnerCode = "";
@@ -226,7 +229,6 @@ public class PersonnelInformation implements Serializable {
         this.ocrTaskId = "";
     }
 
-    @NoArgsConstructor
     @Data
     public static class SupplementInfoDTO implements Serializable {
 
@@ -272,7 +274,11 @@ public class PersonnelInformation implements Serializable {
         @JsonProperty("correlations")
         private String correlations;
         @JsonProperty("beneficiaryInfo")
-        private String beneficiaryInfo;
+        private List<Object> beneficiaryInfo;
+
+        public SupplementInfoDTO() {
+            this.beneficiaryInfo = new ArrayList<>();
+        }
     }
 
 }

+ 27 - 23
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/ProposalInfoDTO.java

@@ -20,6 +20,9 @@ public class ProposalInfoDTO implements Serializable {
     private String orderNo;
     @JsonProperty("drivingsNo")
     private String drivingsNo;
+    /**
+     * 联合出单类型 1 商业 2 单交
+     */
     @JsonProperty("mark")
     private String mark;
     @JsonProperty("jyMark")
@@ -284,8 +287,8 @@ public class ProposalInfoDTO implements Serializable {
     public ProposalInfoDTO(DaJiaCrawlerCompaniesResponse.ListDTO companies, DaJiaCrawlerChannelPackagesResponse response) {
         this.orderNo = "";
         this.drivingsNo = "";
-        this.mark = "";
-        this.jyMark = "";
+        this.mark = "2";
+        this.jyMark = "0";
         this.copdpt = companies.getCDptCde();
         String[] split = response.getDptRelCde().split(";");
         if (split.length > 1) {
@@ -296,10 +299,10 @@ public class ProposalInfoDTO implements Serializable {
         this.status = "";
         this.totalPremium = "";
         this.operateDate = "";
-        this.nessElectronic = "";
+        this.nessElectronic = "1";
         this.electronicFinish = "";
         this.sendMessage = "";
-        this.electronicPolicy = "";
+        this.electronicPolicy = "1";
         this.saleManagerId = "";
         this.saleManagerName = "";
         this.licenseNumber = "";
@@ -320,7 +323,7 @@ public class ProposalInfoDTO implements Serializable {
         this.referrerName = "";
         this.channelCode = response.getChannelCode();
         this.channelName = "";
-        this.repairFactory = "";
+        this.repairFactory = response.getReworkPlantCode();
         this.repairFactoryName = "";
         this.customeServiceCode = "";
         this.saleCode = "";
@@ -333,7 +336,7 @@ public class ProposalInfoDTO implements Serializable {
         this.operatorName = "";
         // 收费方式
         this.feeType = "10";
-        this.argueSolution = "";
+        this.argueSolution = "007001";
         this.manageCompanyCode = companies.getManageCompanyCode();
         this.companyNature = companies.getCompanyNature();
         this.channelSource = "";
@@ -353,28 +356,29 @@ public class ProposalInfoDTO implements Serializable {
         this.underWriteAdvice = "";
         this.relPolicyNo = "";
         this.sumPremium = "";
-        this.isElectronicInsurance = "";
+        this.isElectronicInsurance = "0";
         this.electronicInsuranceFinish = "";
         this.isIdentityColle = "";
         this.identityColleFinish = "";
-        this.isCaptcha = "";
+        this.isCaptcha = "1";
         this.captchaFinish = "";
         this.machineCode = "";
-        this.salesDisabled = "";
+        this.salesDisabled = "0";
         this.referrerDisabled = "";
-        this.departmentCode = "";
+        this.departmentCode = companies.getDepartmentCode();
         this.inform = "";
         this.isDxProducts = "";
         this.dataFlag = "";
         this.recommendCode = "";
         this.loadModel = response.getLoadModel();
-        this.recSubChannel = "";
+        // 推荐子渠道
+        this.recSubChannel = response.getRecSubChannel();
         this.isNeedFaceRecognition = "";
-        this.jsMark = "";
+        this.jsMark = "0";
         this.edrPrjNo = "";
         this.payPath = "";
         this.channelOrderNo = "";
-        this.renewalCollaboration = "";
+        this.renewalCollaboration = "0";
         this.newChannelMajorCde = "";
         this.newChannelMinorCde = "";
         this.policySerialNo = "";
@@ -385,23 +389,23 @@ public class ProposalInfoDTO implements Serializable {
         this.currencyPrm = "";
         this.exchangeRate = "";
         this.totalUncarPremium = "";
-        this.jabMark = "";
-        this.rqbMark = "";
-        this.specMark = "";
+        this.jabMark = "0";
+        this.rqbMark = "0";
+        this.specMark = "0";
         this.frontIntroduceCde = "";
         this.frontIntroduceNme = "";
-        this.followWeChatFlag = "";
-        this.renewImageFlag = "";
+        this.followWeChatFlag = "0";
+        this.renewImageFlag = "0";
         this.leadsId = "";
         this.chaSalesCde = "";
         this.chaSalesType = "";
         this.busiLabel = "";
         this.dualRecordCde = "";
         this.dualRecordType = "";
-        this.jkMark = "";
-        this.yyMark = "";
-        this.hyMark = "";
-        this.jkhosMark = "";
+        this.jkMark = "0";
+        this.yyMark = "0";
+        this.hyMark = "0";
+        this.jkhosMark = "0";
         this.orderNoOrg = "";
         this.retrospectFlag = "";
         this.authenticateFlag = "";
@@ -414,7 +418,7 @@ public class ProposalInfoDTO implements Serializable {
         this.bankSubName = "";
         this.relDptCde = "";
         this.bankBsnsTyp = "";
-        this.jyChargeMark = "";
+        this.jyChargeMark = "0";
         this.orderNoCore = "";
         this.jqPlyNoOrg = "";
         this.syPlyNoOrg = "";

+ 46 - 26
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/VehicleInfoDTO.java

@@ -2,6 +2,9 @@ package com.jzg.quotation.dajia.crawler.entity.request.quote;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.utils.TimeProcessing;
+import com.jzg.quotation.dajia.crawler.constant.enums.UsedYearCode;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerActualValueResponse;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCarResponse;
 import lombok.Data;
@@ -208,49 +211,66 @@ public class VehicleInfoDTO {
                           DaJiaCrawlerActualValueResponse daJiaCrawlerActualValueResponse,
                           String ownerName) {
         this.pureRange = "";
-        this.approvedLoad = "0";
+        this.approvedLoad = carInfoVo.getLimitLoad();
         this.brand = car.getVehicleName();
-        this.brandName = car.getBrandName();
+        this.brandName = car.getVehicleId();
         this.buyCarDate = "";
         this.carOwnerName = ownerName;
-        this.carYear = daJiaCrawlerActualValueResponse.getUsedYearCode();
-        this.certificationDate = "";
+        UsedYearCode usedYearCode = UsedYearCode.getUsedYearCode(daJiaCrawlerActualValueResponse.getUsedYear());
+        this.carYear = usedYearCode.getCode();
+        this.certificationDate = TimeProcessing.dateToDateTime(carInfoVo.getIssueDate());
         this.colorCode = "";
         this.countryNature = car.getVehicleType();
         this.displacement = car.getVehicleExhaust();
         this.engineNo = carInfoVo.getEngineNo();
-        this.fuelType = "";
+        this.fuelType = carInfoVo.getEnergyTypeCode();
         this.glassType = "";
-        this.isFieldCar = "";
-        this.isPlateNo = "";
+        // 外地车
+        this.isFieldCar = "0";
+        this.isPlateNo = "0";
         this.isSuccess = "";
-        this.isTransferCar = "";
-        this.loanVehicleFlag = "";
-        this.motorType = "";
+        // 过户车
+        if (carInfoVo.isTransfer()) {
+            this.isTransferCar = "1";
+            this.specialMark = "1";
+            this.transferDate = carInfoVo.getTransferDate();
+            this.transferRoll = "1";
+            this.transferRollTime = carInfoVo.getTransferDate();
+        } else {
+            this.isTransferCar = "0";
+            this.specialMark = "0";
+            this.transferDate = carInfoVo.getTransferDate();
+            this.transferRoll = "0";
+            this.transferRollTime = carInfoVo.getTransferDate();
+        }
+        this.loanVehicleFlag = "0";
+        this.motorType = carInfoVo.getCarTypeCode();
         this.negotiatedActulValue = daJiaCrawlerActualValueResponse.getActualValue();
         this.negotiatedValue = daJiaCrawlerActualValueResponse.getActualValue();
-        this.newCarFlag = "";
+        // 新车编制
+        if (StringUtils.hasText(carInfoVo.getLicenseNo())) {
+            this.newCarFlag = "0";
+        } else {
+            this.newCarFlag = "1";
+        }
         this.plateNo = carInfoVo.getLicenseNo();
-        this.plateType = "";
-        this.power = "";
+        this.plateType = carInfoVo.getLicenseKindCode();
+        this.power = car.getPower();
         this.purchasePrice = car.getPurchasePrice();
         this.queryCode = "";
         this.jqQueryCode = "";
-        this.registerDate = "";
+        this.registerDate = carInfoVo.getRegisterDate();
         this.seatCount = carInfoVo.getSeatCount();
-        this.specialMark = "";
-        this.transferDate = "";
-        this.transferRoll = "";
-        this.transferRollTime = "";
-        this.useNatureShow = "";
+        this.useNatureShow = carInfoVo.getVehicleUseCode();
         this.vehicleCheckCode = "";
-        this.vehicleCode = "";
-        this.vehicleType = "";
+        this.vehicleCode = car.getBrandId();
+        this.vehicleType = carInfoVo.getCarKindDetailIdCode();
         this.vhlCertDate = "";
         this.vhlCertNo = "";
         this.vhlCertType = "";
         this.vin = carInfoVo.getVinNo();
-        this.weight = "";
+        // 整备质量
+        this.weight = carInfoVo.completeKerbMassToTonCount();
         this.premiumFlag = "";
         this.traUsageCde = "";
         this.saleShop = "";
@@ -258,10 +278,10 @@ public class VehicleInfoDTO {
         this.newSalesName = "";
         this.specialRiskFlag = "";
         this.topSpeed = "";
-        this.newPower = "";
-        this.isOcr = "0";
-        this.vehicleStyleUniqueId = "0";
-        this.industryModelCode = "0";
+        this.newPower = car.getPower();
+        this.isOcr = "";
+        this.vehicleStyleUniqueId = "";
+        this.industryModelCode = "";
         this.ocrTaskId = "";
         this.vehicleTypeNew = car.getVehicleTypeNew();
     }

+ 9 - 6
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/quote/VehicleOwnerInfoDTO.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.dajia.crawler.entity.request.quote;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -109,14 +110,13 @@ public class VehicleOwnerInfoDTO {
     private String samePerson;
 
     public VehicleOwnerInfoDTO(CustomerInfoVo ownersInfo) {
-        // TODO
         this.address = ownersInfo.getAddr();
-        this.birthday = "";
-        this.clientType = "";
-        this.companyNature = "";
-        this.gender = "";
+        this.birthday = TimeProcessing.dateToDateTime(ownersInfo.getBirthday());
+        this.clientType = "1";
+        this.companyNature = "9";
+        this.gender = ownersInfo.getGender();
         this.identifyEndDate = ownersInfo.getIdentifyNumber();
-        this.identifyType = "";
+        this.identifyType = "01";
         this.mobile = ownersInfo.getMobile();
         this.personName = ownersInfo.getName();
         this.postCode = "";
@@ -124,5 +124,8 @@ public class VehicleOwnerInfoDTO {
         this.province = ownersInfo.getProvince();
         this.city = ownersInfo.getCity();
         this.county = ownersInfo.getCounty();
+        this.province = ownersInfo.getProvinceCode();
+        this.city = ownersInfo.getCityCode();
+        this.county = ownersInfo.getCountyCode();
     }
 }

+ 41 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerCheckTokenResponse.java

@@ -0,0 +1,41 @@
+package com.jzg.quotation.dajia.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @version
+ * @description: 大家财险【校验token】 响应
+ * @author: wenks
+ * @date: 2025/5/21 16:59
+ **/
+@NoArgsConstructor
+@Data
+public class DaJiaCrawlerCheckTokenResponse {
+
+    @JsonProperty("flag")
+    private String flag;
+
+    @JsonProperty("mobile")
+    private String mobile;
+
+    @JsonProperty("userRole")
+    private String userRole;
+
+    @JsonProperty("hrCode")
+    private String hrCode;
+
+    @JsonProperty("version")
+    private String version;
+
+    @JsonProperty("userName")
+    private String userName;
+
+    @JsonProperty("userCode")
+    private String userCode;
+
+    @JsonProperty("id_token")
+    private String idToken;
+
+}

+ 175 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerInitDataResponse.java

@@ -0,0 +1,175 @@
+package com.jzg.quotation.dajia.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class DaJiaCrawlerInitDataResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7012502024760048805L;
+
+    @JsonProperty("code")
+    private String code;
+
+    @JsonProperty("message")
+    private String message;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = -8706490072836830895L;
+
+        @JsonProperty("app")
+        private AppDTO app;
+
+        @JsonProperty("businessType")
+        private BusinessTypeDTO businessType;
+
+        @JsonProperty("transferConfig")
+        private List<TransferConfigDTO> transferConfig;
+
+        @NoArgsConstructor
+        @Data
+        public static class AppDTO  implements Serializable  {
+
+            @Serial
+            private static final long serialVersionUID = -442538458569530930L;
+
+            @JsonProperty("businessNo")
+            private String businessNo;
+
+            @JsonProperty("appName")
+            private String appName;
+
+            @JsonProperty("appId")
+            private String appId;
+
+            @JsonProperty("businessType")
+            private String businessType;
+
+            @JsonProperty("busiInfoList")
+            private List<BusiInfoListDTO> busiInfoList;
+
+            @NoArgsConstructor
+            @Data
+            public static class BusiInfoListDTO  implements Serializable  {
+
+                @Serial
+                private static final long serialVersionUID = -5238688197616100006L;
+
+                @JsonProperty("bussNo")
+                private String bussNo;
+
+                @JsonProperty("bussType")
+                private String bussType;
+
+                @JsonProperty("bussName")
+                private String bussName;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class BusinessTypeDTO implements Serializable  {
+
+            @Serial
+            private static final long serialVersionUID = -5207296415917323496L;
+
+            @JsonProperty("id")
+            private String id;
+
+            @JsonProperty("name")
+            private String name;
+
+            @JsonProperty("appId")
+            private String appId;
+
+            @JsonProperty("defaulted")
+            private Boolean defaulted;
+
+            @JsonProperty("fileCount")
+            private Integer fileCount;
+
+            @JsonProperty("children")
+            private List<ChildrenDTO> children;
+
+            @NoArgsConstructor
+            @Data
+            public static class ChildrenDTO implements Serializable  {
+
+                @Serial
+                private static final long serialVersionUID = 6640654291319567423L;
+
+                @JsonProperty("id")
+                private String id;
+
+                @JsonProperty("name")
+                private String name;
+
+                @JsonProperty("fileCount")
+                private Integer fileCount;
+
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class TransferConfigDTO implements Serializable  {
+            @Serial
+            private static final long serialVersionUID = -8299761853834329874L;
+
+            @JsonProperty("iconL")
+            private String iconL;
+            @JsonProperty("compress")
+            private Boolean compress;
+            @JsonProperty("icon")
+            private String icon;
+            @JsonProperty("scale")
+            private Double scale;
+            @JsonProperty("pid")
+            private Integer pid;
+            @JsonProperty("delFlag")
+            private String delFlag;
+            @JsonProperty("look")
+            private Boolean look;
+            @JsonProperty("fileCompressSize")
+            private Integer fileCompressSize;
+            @JsonProperty("quality")
+            private Double quality;
+            @JsonProperty("createBy")
+            private String createBy;
+            @JsonProperty("encryption")
+            private Boolean encryption;
+            @JsonProperty("fileSize")
+            private Integer fileSize;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("id")
+            private String id;
+            @JsonProperty("businessType")
+            private String businessType;
+            @JsonProperty("contentType")
+            private String contentType;
+            @JsonProperty("remarks")
+            private String remarks;
+            @JsonProperty("fileType")
+            private String fileType;
+            @JsonProperty("createDate")
+            private Long createDate;
+            @JsonProperty("status")
+            private String status;
+        }
+    }
+}

+ 62 - 9
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerPriceResponse.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.*;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
 
@@ -36,7 +38,7 @@ public class DaJiaCrawlerPriceResponse {
     private DriveInsuranceDTO driveInsurance;
 
     @JsonProperty("motorDriveInsurance")
-    private String motorDriveInsurance;
+    private Object motorDriveInsurance;
 
     @JsonProperty("checkCarInfomation")
     private CheckCarInfomationDTO checkCarInfomation;
@@ -57,7 +59,7 @@ public class DaJiaCrawlerPriceResponse {
     private ExceptionCodeDTO exceptionCode;
 
     @JsonProperty("deliveryVO")
-    private String deliveryVO;
+    private Object deliveryVO;
 
     @JsonProperty("incrementVO")
     private IncrementVODTO incrementVO;
@@ -66,10 +68,10 @@ public class DaJiaCrawlerPriceResponse {
     private String increasedValueMsg;
 
     @JsonProperty("jabFamilyDriveInsurance")
-    private String jabFamilyDriveInsurance;
+    private Object jabFamilyDriveInsurance;
 
     @JsonProperty("rqbFamilyDriveInsurance")
-    private String rqbFamilyDriveInsurance;
+    private Object rqbFamilyDriveInsurance;
 
     @JsonProperty("reInsureVo")
     private String reInsureVo;
@@ -78,19 +80,19 @@ public class DaJiaCrawlerPriceResponse {
     private String chdDivisorVoList;
 
     @JsonProperty("jkFamilyDriveInsurance")
-    private String jkFamilyDriveInsurance;
+    private Object jkFamilyDriveInsurance;
 
     @JsonProperty("yyDriveInsurance")
-    private String yyDriveInsurance;
+    private Object yyDriveInsurance;
 
     @JsonProperty("hyDriveInsurance")
-    private String hyDriveInsurance;
+    private Object hyDriveInsurance;
 
     @JsonProperty("jkhosDriveInsurance")
-    private String jkhosDriveInsurance;
+    private Object jkhosDriveInsurance;
 
     @JsonProperty("jyChargeDriveInsurance")
-    private String jyChargeDriveInsurance;
+    private Object jyChargeDriveInsurance;
 
     @NoArgsConstructor
     @Data
@@ -111,4 +113,55 @@ public class DaJiaCrawlerPriceResponse {
         private String incrementList;
     }
 
+    private Object emptyToObject(Object str) {
+        if(ObjectUtils.isEmpty(str) || !StringUtils.hasLength(str.toString())) {
+            return new Object();
+        }
+        return str;
+    }
+
+    public DriveInsuranceDTO getDriveInsurance() {
+        if(ObjectUtils.isEmpty(driveInsurance) || !StringUtils.hasLength(driveInsurance.toString())) {
+            return new DriveInsuranceDTO();
+        }
+        return driveInsurance;
+    }
+
+    public Object getDeliveryVO() {
+        return emptyToObject(deliveryVO);
+    }
+
+    public Object getMotorDriveInsurance() {
+        return emptyToObject(motorDriveInsurance);
+    }
+
+    public Object getJabFamilyDriveInsurance() {
+        return emptyToObject(jabFamilyDriveInsurance);
+    }
+
+    public Object getRqbFamilyDriveInsurance() {
+        return emptyToObject(rqbFamilyDriveInsurance);
+    }
+
+    public Object getJyChargeDriveInsurance() {
+        return emptyToObject(jyChargeDriveInsurance);
+    }
+
+    public Object getJkhosDriveInsurance() {
+        return emptyToObject(jkhosDriveInsurance);
+    }
+
+    public Object getHyDriveInsurance() {
+        return emptyToObject(hyDriveInsurance);
+    }
+
+    public Object getYyDriveInsurance() {
+        return emptyToObject(yyDriveInsurance);
+    }
+
+    public Object getJkFamilyDriveInsurance() {
+        return emptyToObject(jkFamilyDriveInsurance);
+    }
+
+
 }

+ 22 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java

@@ -3,8 +3,10 @@ package com.jzg.quotation.dajia.crawler.service.impl;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerCacheComponent;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerRequestComponent;
+import com.jzg.quotation.dajia.crawler.entity.request.DaJiaCrawlerCheckTokenRequest;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerAuthenticateResponse;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerBaseResponse;
+import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCheckTokenResponse;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
 import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.RequiredArgsConstructor;
@@ -33,10 +35,14 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
             DaJiaCrawlerBaseResponse response = Optional.of(responseEntity)
                     .map(ResponseEntity::getBody)
                     .orElseThrow();
+
             if ("200".equals(response.getCode())) {
                 DaJiaCrawlerAuthenticateResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerAuthenticateResponse.class);
-                return daJiaCrawlerCacheComponent.cacheAuthorization(daJiaCrawlerCaptchaResponse.getIdToken(), daJiaCrawlerCaptchaResponse.getUserCode(), username);
+                // 校验token
+                String token = checkToken(daJiaCrawlerCaptchaResponse.getUserCode(), daJiaCrawlerCaptchaResponse.getIdToken());
+                return daJiaCrawlerCacheComponent.cacheAuthorization(token, daJiaCrawlerCaptchaResponse.getUserCode(), username);
             }
+
             String message = Optional.ofNullable(responseEntity.getBody())
                     .map(DaJiaCrawlerBaseResponse::getMessage)
                     .orElseThrow(() -> new SystemException("登录失败"));
@@ -55,7 +61,22 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
         }
         HttpHeaders headers = new HttpHeaders();
         headers.set(HttpHeaders.AUTHORIZATION, authorization);
+        headers.set("sec-ch-ua", "\"Not)A;Brand\";v=\"24\", \"Chromium\";v=\"116\"");
+        headers.set("sec-ch-ua-mobile", "?0");
+        headers.set("sec-ch-ua-platform", "\"Windows\"");
+        headers.set("source", "0");
         return headers;
     }
 
+    public String checkToken(String userCode, String token) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.set(HttpHeaders.AUTHORIZATION, "Bearer " + token);
+        // 创建token
+        String tokenId = daJiaCrawlerRequestComponent.createToken(userCode, httpHeaders);
+        DaJiaCrawlerCheckTokenRequest daJiaCrawlerCheckTokenRequest = new DaJiaCrawlerCheckTokenRequest(tokenId, userCode);
+        // 校验token
+        DaJiaCrawlerCheckTokenResponse daJiaCrawlerCheckTokenResponse = daJiaCrawlerRequestComponent.checkToken(daJiaCrawlerCheckTokenRequest, httpHeaders);
+        return  daJiaCrawlerCheckTokenResponse.getIdToken();
+    }
+
 }

+ 23 - 19
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -51,31 +51,37 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         // 1.0获取token的请求头
-        AttributionInformationVo attributionInformationVo = quoteVo
-                .getOrder()
-                .getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         // 1.1 配置信息
         DaJiaCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(DaJiaCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        // 1.2 获取归属信息
+        ProposalInfoDTO proposalInfoDTO = buildingAttributionInformation.build(parameters, userCode, headers);
+
         // 2.0 车型查询
-        DaJiaCrawlerCarRequest daJiaCrawlerCarRequest = new DaJiaCrawlerCarRequest(quoteVo.getCarInfoVo(), "", "", userCode);
-        List<DaJiaCrawlerCarResponse.ListDTO> car = daJiaCrawlerRequestComponent.car(daJiaCrawlerCarRequest, headers);
+        DaJiaCrawlerCarRequest daJiaCrawlerCarRequest = new DaJiaCrawlerCarRequest(quoteVo.getCarInfoVo(), parameters.getLoginCompany(), parameters.getCDptCde(), userCode);
+        DaJiaCrawlerCarResponse daJiaCrawlerCarResponse = daJiaCrawlerRequestComponent.car(daJiaCrawlerCarRequest, headers);
         // 2.1 获取相同的车型
-        DaJiaCrawlerCarResponse.ListDTO listDTO = CarModelsFilterUtils.to(car, quoteVo.getCarInfoVo());
+        DaJiaCrawlerCarResponse.ListDTO listDTO = CarModelsFilterUtils.to(daJiaCrawlerCarResponse.getList(), quoteVo.getCarInfoVo());
         // 2.2 计算折旧价格
-        DaJiaCrawlerActualValueRequest daJiaCrawlerActualValueRequest = new DaJiaCrawlerActualValueRequest(listDTO, quoteVo.getCarInfoVo(), userCode);
+        DaJiaCrawlerActualValueRequest daJiaCrawlerActualValueRequest = new DaJiaCrawlerActualValueRequest(listDTO, quoteVo.getCarInfoVo(), userCode, parameters.getCombineProductCode());
         DaJiaCrawlerActualValueResponse daJiaCrawlerActualValueResponse = daJiaCrawlerRequestComponent.actualValue(daJiaCrawlerActualValueRequest, headers);
-        // 3.0 获取归属信息
-        ProposalInfoDTO proposalInfoDTO = buildingAttributionInformation.build(parameters, userCode, headers);
-        // 3.1 保费计算
-        DaJiaCrawlerPriceRequest daJiaCrawlerPriceRequest = new DaJiaCrawlerPriceRequest(quoteVo, listDTO, daJiaCrawlerActualValueResponse, proposalInfoDTO, userCode);
+
+        // 3.0 保费计算
+        DaJiaCrawlerPriceRequest daJiaCrawlerPriceRequest = new DaJiaCrawlerPriceRequest(quoteVo, listDTO, daJiaCrawlerActualValueResponse, proposalInfoDTO, userCode, daJiaCrawlerCarResponse.getChannelOrderNo());
         DaJiaCrawlerPriceResponse crawlerPriceResponse = daJiaCrawlerRequestComponent.price(daJiaCrawlerPriceRequest, headers);
-        // 3.2 订单保存
-        DaJiaCrawlerSaveRequest daJiaCrawlerSaveRequest = new DaJiaCrawlerSaveRequest(crawlerPriceResponse, userCode);
+        // 3.1 订单保存
+        DaJiaCrawlerSaveRequest daJiaCrawlerSaveRequest = new DaJiaCrawlerSaveRequest(crawlerPriceResponse, userCode, quoteVo);
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerRequestComponent.save(daJiaCrawlerSaveRequest, headers);
-        // 3.3 缓存数据
-        daJiaCrawlerCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder().getOrdersNo());
+
+        DaJiaCrawlerInitDataRequest daJiaCrawlerInitDataRequest = new DaJiaCrawlerInitDataRequest(daJiaCrawlerSaveResponse.getCompulsoryInsurance(), daJiaCrawlerSaveResponse.getBusinessInsurance());
+        DaJiaCrawlerInitDataResponse daJiaCrawlerInitDataResponse = daJiaCrawlerRequestComponent.initData(daJiaCrawlerInitDataRequest, headers);
+
+        // 3.2 缓存数据
+        daJiaCrawlerCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder()
+                .getOrdersNo());
+
         // 4.0 保存数据
         daJiaCrawlerOrderService.saveOrderInfo(quoteVo, daJiaCrawlerSaveResponse);
         // 返回报价信息
@@ -85,9 +91,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
-        AttributionInformationVo attributionInformationVo = underwritingVo
-                .getOrder()
-                .getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(underwritingVo.getOrder()
@@ -103,7 +107,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
-        daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(),userCode, headers);
+        daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(), userCode, headers);
         return new PaymentLinkResultsVo();
     }
 

+ 20 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/DESEncryption.java

@@ -7,16 +7,19 @@ import cn.hutool.crypto.Padding;
 import cn.hutool.crypto.symmetric.DES;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.tomcat.util.buf.HexUtils;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 /**
  * @description: 大家财险 DES ECB 加密解密
  * @author: wenks
  * @date: 2025/2/11 15:36
  **/
+@Slf4j
 public final class DESEncryption {
 
     private DESEncryption() {
@@ -45,6 +48,7 @@ public final class DESEncryption {
      * @return 加密参数
      */
     public static String encrypt(String data) {
+        log.info("加密前参数:{}", data);
         init();
         return DES.encryptHex(data);
     }
@@ -58,7 +62,9 @@ public final class DESEncryption {
     public static String decrypt(String data) {
         init();
         byte[] bytes = HexUtils.fromHexString(data);
-        return DES.decryptStr(bytes);
+        String decrypt = DES.decryptStr(bytes);
+        log.info("解密后参数:{}", decrypt);
+        return decrypt;
     }
 
     /**
@@ -74,6 +80,19 @@ public final class DESEncryption {
         return JSON.parseObject(decrypt, tClass);
     }
 
+    /**
+     * 解密并且转码
+     *
+     * @param data   加密参数
+     * @param tClass json转换后的类型
+     * @param <T>    json转换后的泛型
+     * @return 解密后的类
+     */
+    public static <T> List<T> decryptStrToObjectList(String data, Class<T> tClass) {
+        String decrypt = decrypt(data);
+        return JSON.parseArray(decrypt, tClass);
+    }
+
     /**
      * 将对象转为json并加密
      *

+ 3 - 4
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/component/GuoRenRequestApiComponent.java

@@ -119,9 +119,9 @@ public class GuoRenRequestApiComponent {
     /**
      * 查询非车险保单号
      */
-    public void queryNoCarPolicyNo(GuoRenApiOrder guoRenApiOrder) {
+    public List<DrivingInsuranceDTO> queryNoCarPolicyNo(GuoRenApiOrder guoRenApiOrder) {
         if (guoRenApiOrder.getJyPremium() == null || guoRenApiOrder.getJyPremium().compareTo(new BigDecimal(0)) == 0) {
-            return;
+            return null;
         }
 
         //构造请求参数
@@ -142,8 +142,7 @@ public class GuoRenRequestApiComponent {
             drivingInsuranceDto.setApplicationNumber(noCarProposalNo.get(i));
             drivingInsuranceDtos.add(drivingInsuranceDto);
         }
-        JSONArray objects = JSON.parseArray(JSON.toJSONString(drivingInsuranceDtos));
-        //guoRenApiOrder.setCrossInsurance(objects);以后注意该数据应如何处理
+        return drivingInsuranceDtos;
     }
 
 

+ 4 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/GuoRenApiOrder.java

@@ -66,4 +66,8 @@ public class GuoRenApiOrder {
      * 产品代码
      */
     private String productsCode;
+    /**
+     * 外部订单号
+     */
+    private String othBusinessNo;
 }

+ 137 - 40
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -5,6 +5,10 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.orders.po.InsOrders;
+import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
 import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.exception.SystemException;
@@ -29,6 +33,7 @@ import com.jzg.quotation.guoren.api.entity.GuoRenApiOrder;
 import com.jzg.quotation.guoren.api.entity.GuoRenConfigureParameters;
 import com.jzg.quotation.guoren.api.entity.Request.*;
 import com.jzg.quotation.guoren.api.entity.Response.*;
+import com.jzg.quotation.guoren.api.entity.dto.DrivingInsuranceDTO;
 import com.jzg.quotation.guoren.api.entity.vo.GuoRenAccidentalDrivingVo;
 import com.jzg.quotation.guoren.api.entity.vo.GuoRenSpecialAgreementVo;
 import com.jzg.quotation.guoren.api.properties.GuoRenApiConfigurationProperties;
@@ -140,6 +145,7 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
             guoRenApiOrder.setProductsCode(orderBase.getProductsCode());
             guoRenApiOrder.setJqApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoCI());
             guoRenApiOrder.setSyApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoBI());
+            guoRenApiOrder.setOthBusinessNo(carPriceQuery.getInputvo());
             return handleSuccessQuote(guoRenApiOrder,quoteVo, premiumResponse);
         }
     }
@@ -170,6 +176,57 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
 
         SubmitAuditResponse auditResponse = guoRenRequestApiComponent.submitAudit(guoRenApiOrder, parameters);
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        String jqStatus = auditResponse.getData().get(0).getUnderWriteFlagCI();
+        String syStatus = auditResponse.getData().get(0).getUnderWriteFlagBI();
+        String message = auditResponse.getData().get(0).getMessage();
+        // 0初始值/1通过/2不通过/3无需核保/9人工核保
+        if (StringUtils.isEmpty(jqStatus) && StringUtils.isEmpty(syStatus)) {
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            underwritingResultsVo.setUnderwritingResult("核保失败:"+ message);
+            return underwritingResultsVo;
+        }
+        // 单交核保状态
+        if (StringUtils.isNotEmpty(jqStatus) && StringUtils.isEmpty(syStatus)) {
+            if (jqStatus.equals("1") || jqStatus.equals("3")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                getPaymentLink(paymentLinkVo);
+            } else if (jqStatus.equals("2")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                underwritingResultsVo.setUnderwritingResult(message);
+            }
+        }
+        //单商核保状态
+        if (StringUtils.isEmpty(syStatus) && StringUtils.isNotEmpty(syStatus)) {
+            if (syStatus.equals("1") || syStatus.equals("3")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                getPaymentLink(paymentLinkVo);
+            } else if (syStatus.equals("2")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                underwritingResultsVo.setUnderwritingResult(message);
+            }
+        }
+
+        //交商
+        if (StringUtils.isNotEmpty(jqStatus) && StringUtils.isNotEmpty(syStatus)) {
+            if (jqStatus.equals("2") || syStatus.equals("2")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                underwritingResultsVo.setUnderwritingResult(message);
+            } else if (jqStatus.equals("1") && syStatus.equals("1")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                getPaymentLink(paymentLinkVo);
+            } else if (jqStatus.equals("3") && syStatus.equals("3")) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                getPaymentLink(paymentLinkVo);
+            }
+        }
         return underwritingResultsVo;
     }
 
@@ -178,7 +235,7 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
      * @param paymentLinkVo
      */
     @Override
-    public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws JsonProcessingException {
+    public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         //配置信息
         GuoRenConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(GuoRenConfigureParameters.class, paymentLinkVo.getOrder().getAttributionInformationVo().getConfigInfo());
         GuoRenApiOrder guoRenApiOrder = guoRenApiOrderService.findByOrdersNo(paymentLinkVo.getOrder().getOrdersNo());
@@ -205,43 +262,31 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
 
     /**
      * 下载保单
-     * @param orderBase
+     * @param downloadPolicyVo
      */
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
-        //配置信息
-        GuoRenConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(GuoRenConfigureParameters.class, downloadPolicyVo.getOrder().getAttributionInformationVo().getConfigInfo());
-
-        String policyPrintType = "";//以后增加赋值
+        InsOrdersPolicy policie = downloadPolicyVo.getPolicie();
+        DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         GuoRenApiOrder guoRenApiOrder = guoRenApiOrderService.findByOrdersNo(downloadPolicyVo.getOrder().getOrdersNo());
-        String riskCode = "";
-        String templateName;
-        String busNo = "";
-        String url;
-
-        if (InsuranceRisk.TRAFFIC.getCode().equals(riskCode)) {
-            PolicyResponse ciResponse = guoRenRequestApiComponent.policyPrint(guoRenApiOrder.getJqPolicyNo());
-            if (PolicyPrintType.PPT_1.getCode().equals(policyPrintType)) {
-                templateName = "-交强险标志.pdf";
-                //交强险标志
-                url = properties.getPolicyFlagUrl() + ciResponse.getData();
-            } else {
-                templateName = "-交强险保单.pdf";
-                url = properties.getPolicyUrl() + ciResponse.getData();
-            }
-        } else if (InsuranceRisk.BUSINESS.getCode().equals(riskCode)) {
-            templateName = "-商业险保单.pdf";
-            PolicyResponse biResponse = guoRenRequestApiComponent.policyPrint(guoRenApiOrder.getSyPolicyNo());
-            url = properties.getPolicyUrl() + biResponse.getData();
-        } else if (InsuranceRisk.ACCIDENT.getCode().equals(riskCode)) {
-            //busNo = policyPrintVo.getPolicyNumber();
-            url = guoRenRequestApiComponent.noCarElectronicPolicy(properties.getChannelCode(),
-                    downloadPolicyVo.getOrder().getOrdersNo(), busNo);//以后需观察参数是否正确
-            templateName = busNo + "-非车险保单.pdf";
-        } else {
-            throw new SystemException("保险编号异常");
+        // 获取保单号
+        String jqPolicyNo = policie.getJqPolicyNo();
+        String syPolicyNo = policie.getSyPolicyNo();
+        String jyPolicyNo = policie.getJyPolicyNo();
+        if (jqPolicyNo != null) {
+            PolicyResponse jqResponse = guoRenRequestApiComponent.policyPrint(jqPolicyNo);
+            downloadPolicyResultVo.setJqFlagUrl(properties.getPolicyFlagUrl() + jqResponse.getData());
+            downloadPolicyResultVo.setJqUrl(properties.getPolicyUrl() + jqResponse.getData());
         }
-        return null;
+        if (syPolicyNo != null) {
+            PolicyResponse syResponse = guoRenRequestApiComponent.policyPrint(syPolicyNo);
+            downloadPolicyResultVo.setSyUrl(properties.getPolicyUrl() + syResponse.getData());
+        }
+        if (jyPolicyNo != null) {
+            String jyResponse = guoRenRequestApiComponent.noCarElectronicPolicy(properties.getChannelCode(),guoRenApiOrder.getOthBusinessNo(),jyPolicyNo);
+            downloadPolicyResultVo.setJyUrl(jyResponse);
+        }
+        return downloadPolicyResultVo;
     }
 
     /**
@@ -251,17 +296,69 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
      */
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderBase) {
-        //配置信息
-        GuoRenConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(GuoRenConfigureParameters.class, orderBase.getOrder().getAttributionInformationVo().getConfigInfo());
+        //查询投保单信息
+        InsOrdersPolicy insOrdersPolicy = orderBase.getInsOrdersPolicy();
+        InsOrders insOrders = orderBase.getInsOrders();
+        // 获取保司订单状态
+        OrderStateResponse orderStateResponse = insOrderStatus(insOrdersPolicy);
         GuoRenApiOrder guoRenApiOrder = guoRenApiOrderService.findByOrdersNo(orderBase.getOrder().getOrdersNo());
+        OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
+        if (null != orderStateResponse && CollUtil.isNotEmpty(orderStateResponse.getData())) {
+            OrderStateResponse.DataDTO jqDataDTO =
+                    orderStateResponse.getData().stream().filter(a -> a.getProposalNo().equals(insOrdersPolicy.getJqApplyNo())).findFirst().orElse(null);
+            OrderStateResponse.DataDTO syDataDTO =
+                    orderStateResponse.getData().stream().filter(b -> b.getProposalNo().equals(insOrdersPolicy.getSyApplyNo())).findFirst().orElse(null);
+
+            //待核保订单处理
+            if (insOrders.getOrderStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode())) {
+                //单交
+                boolean jqBoo = null != jqDataDTO && null == syDataDTO && jqDataDTO.getUnderwriteFlag().equals("1");
+                //单商
+                boolean syBoo = null != syDataDTO && null == jqDataDTO && syDataDTO.getUnderwriteFlag().equals("1");
+                //交商
+                boolean jqSyBoo =
+                        null != syDataDTO && null != jqDataDTO && syDataDTO.getUnderwriteFlag().equals("1") && jqDataDTO.getUnderwriteFlag().equals("1");
+                if (jqBoo || syBoo || jqSyBoo) {
+                    orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+                    PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                    paymentLinkVo.setOrder(orderBase.getOrder());
+                    PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+                    orderStatusResultVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
+                }
+            }
+            boolean updateFlag = false;
+            if (null != jqDataDTO && StringUtils.isNotEmpty(jqDataDTO.getPolicyNo())) {
+                orderStatusResultVo.setJqPolicyno(jqDataDTO.getPolicyNo());
+                updateFlag = true;
+            }
+            if (null != syDataDTO && StringUtils.isNotEmpty(syDataDTO.getPolicyNo())) {
+                orderStatusResultVo.setSyPolicyno(syDataDTO.getPolicyNo());
+                updateFlag = true;
+            }
 
-        OrderStateRequest orderStateRequest = new OrderStateRequest();
-        orderStateRequest.addProposalNos(guoRenApiOrder.getJqApplyNo());
-        orderStateRequest.addProposalNos(guoRenApiOrder.getSyApplyNo());
+            // 支付
+            if (updateFlag) {
+                orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+                List<DrivingInsuranceDTO> drivingInsuranceDTOList = guoRenRequestApiComponent.queryNoCarPolicyNo(guoRenApiOrder);
+                drivingInsuranceDTOList.forEach(drivingInsuranceDTO -> {
+                    orderStatusResultVo.setJyPolicyno(drivingInsuranceDTO.getPolicyNumber());
+                    orderStatusResultVo.setJyApplyNo(drivingInsuranceDTO.getApplicationNumber());
+                });
+                return orderStatusResultVo;
+            }
+        }
+        return null;
+    }
 
-        OrderStateResponse orderStateResponse = guoRenRequestApiComponent.request(orderStateRequest, PlatformInterfaceCode.API_IIRBT00010,
+    public OrderStateResponse insOrderStatus(InsOrdersPolicy insOrdersPolicy) {
+        OrderStateRequest orderStateRequest = new OrderStateRequest();
+        // 交强投保单号
+        orderStateRequest.addProposalNos(insOrdersPolicy.getJqApplyNo());
+        // 商业投保单号
+        orderStateRequest.addProposalNos(insOrdersPolicy.getSyApplyNo());
+        //投保单状态查询
+        return guoRenRequestApiComponent.request(orderStateRequest, PlatformInterfaceCode.API_IIRBT00010,
                 OrderStateResponse.class);
-        return null;
     }
 
     /**

+ 78 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarInfoParameterFilling.java

@@ -0,0 +1,78 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.constant.BiVehicleUseCodeUtil;
+import com.jzg.quotation.commons.constant.enums.quote.*;
+import com.jzg.quotation.summary.classifier.impl.PassengerCarClassifier;
+import com.jzg.quotation.summary.classifier.impl.TruckClassifier;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 车辆信息未知参数填充
+ * @author: wenks
+ * @date: 2025/5/22 16:41
+ **/
+public final class CarInfoParameterFilling {
+
+    private static final Map<String, CarKindClassifier> CAR_KIND_CLASSIFIER_MAP = new HashMap<>();
+
+    static {
+        CAR_KIND_CLASSIFIER_MAP.put(CarKindCode.CAR_KIND_CODE_A0.getCode(), new PassengerCarClassifier());
+        CAR_KIND_CLASSIFIER_MAP.put(CarKindCode.CAR_KIND_CODE_A1.getCode(), new TruckClassifier());
+    }
+
+    /**
+     * 设置车辆明细
+     *
+     * @param carInfoVo
+     */
+    private static void setCarKindCode(CarInfoVo carInfoVo) {
+        CarKindClassifier carKindClassifier = CAR_KIND_CLASSIFIER_MAP.get(carInfoVo.getCarKindCode());
+        carKindClassifier.matches(carInfoVo);
+        CarKindDetailIdCode kind = carKindClassifier.getKind(carInfoVo);
+        carInfoVo.setCarKindDetailIdCode(kind.getCode());
+    }
+
+    /**
+     * 商业险车辆使用代码
+     *
+     * @param carInfoVo 车辆信息
+     */
+    private static void setBiVehicleUseCodeUtil(CarInfoVo carInfoVo) {
+        BiVehicleUseCode biVehicleUseCode = BiVehicleUseCodeUtil.getBiVehicleUseCode(carInfoVo.getPropertyCode(), carInfoVo.getVehicleUseCode());
+        carInfoVo.setVehicleUseCode(biVehicleUseCode.getCode());
+    }
+
+    /**
+     * 设置车牌
+     *
+     * @param carInfoVo 车辆类型
+     */
+    private static void setLicense(CarInfoVo carInfoVo) {
+        if(carInfoVo.getLicenseNo().length() < 8){
+            carInfoVo.setLicenseKindCode(LicenseKindCode.L02.getCode());
+            carInfoVo.setLicenseColorCode(LicenseColorCode.LICENSE_COLOR_CODE_01.getCode());
+        }else {
+            carInfoVo.setLicenseKindCode(LicenseKindCode.L08.getCode());
+            carInfoVo.setLicenseColorCode(LicenseColorCode.LICENSE_COLOR_CODE_06.getCode());
+        }
+
+        if(EnergyTypeCode.getNewEnergy().contains(carInfoVo.getEnergyTypeCode())){
+            carInfoVo.setLicenseKindCode(LicenseKindCode.L08.getCode());
+            carInfoVo.setLicenseColorCode(LicenseColorCode.LICENSE_COLOR_CODE_06.getCode());
+        }
+
+    }
+
+
+    public static void setParameterSettings(CarInfoVo carInfoVo, boolean isBi) {
+        setCarKindCode(carInfoVo);
+        if (isBi) {
+            setBiVehicleUseCodeUtil(carInfoVo);
+        }
+        setLicense(carInfoVo);
+    }
+
+}

+ 28 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarKindClassifier.java

@@ -0,0 +1,28 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+
+/**
+ * @version
+ * @description: 车型分类器
+ * @author: wenks
+ * @date: 2025/5/22 16:33
+ **/
+public interface CarKindClassifier {
+
+    /**
+     * 比较是否符合要求
+     * @param car 车辆参数
+     * @return
+     */
+    void matches(CarInfoVo car);
+
+    /**
+     * 返回车险明细代码
+     * @return 车辆明细代码
+     */
+    CarKindDetailIdCode getKind(CarInfoVo car);
+
+
+}

+ 23 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CustomerInfoParameterFilling.java

@@ -0,0 +1,23 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.commons.util.IDCardUtils;
+
+import java.util.List;
+
+public class CustomerInfoParameterFilling {
+
+    /**
+     * 设置参数配置
+     *
+     * @param customerInfoVoList 人员信息列表
+     */
+    public static void setParameterSettings(List<CustomerInfoVo> customerInfoVoList) {
+        customerInfoVoList.forEach(customerInfoVo -> {
+            customerInfoVo.setBirthday(IDCardUtils.getBirthDate(customerInfoVo.getIdentifyNumber()));
+            customerInfoVo.setAge(IDCardUtils.getAgeFromIDCard(customerInfoVo.getIdentifyNumber()));
+            customerInfoVo.setGender(IDCardUtils.getSex(customerInfoVo.getIdentifyNumber()));
+        });
+    }
+
+}

+ 22 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/QuoteInfoParameterFilling.java

@@ -0,0 +1,22 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.constants.CompanyConstants;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+
+/**
+ * @description: 报价信息填充
+ * @author: wenks
+ * @date: 2025/5/23 18:06
+ **/
+public final class QuoteInfoParameterFilling {
+
+
+    public static void setParameterSettings(QuoteVo quoteVo, String companyCode) {
+        // 车辆未知信息填充
+        CarInfoParameterFilling.setParameterSettings(quoteVo.getCarInfoVo(), CompanyConstants.DJPC.getCompanyCode().equals(companyCode));
+        // 人员未知信息填充
+        CustomerInfoParameterFilling.setParameterSettings(quoteVo.fetchCustomerInfoVoList());
+    }
+
+}

+ 39 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/PassengerCarClassifier.java

@@ -0,0 +1,39 @@
+package com.jzg.quotation.summary.classifier.impl;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+import com.jzg.quotation.summary.classifier.CarKindClassifier;
+
+public class PassengerCarClassifier implements CarKindClassifier {
+
+    @Override
+    public void matches(CarInfoVo car) {
+        try {
+            int seats = Integer.parseInt(car.getSeatCount());
+            if (seats > 0) {
+                return;
+            }
+        } catch (NumberFormatException ignored) {
+        }
+        throw new SystemException("客车需有座位数");
+    }
+
+    @Override
+    public CarKindDetailIdCode getKind(CarInfoVo car) {
+        int seats = Integer.parseInt(car.getSeatCount());
+        if (seats <= 6) {
+            return CarKindDetailIdCode.K01;
+        }
+        if (seats <= 10) {
+            return CarKindDetailIdCode.K02;
+        }
+        if (seats <= 20) {
+            return CarKindDetailIdCode.K03;
+        }
+        if (seats <= 36) {
+            return CarKindDetailIdCode.K04;
+        }
+        return CarKindDetailIdCode.K05;
+    }
+}

+ 37 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/TruckClassifier.java

@@ -0,0 +1,37 @@
+package com.jzg.quotation.summary.classifier.impl;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+import com.jzg.quotation.summary.classifier.CarKindClassifier;
+
+public class TruckClassifier implements CarKindClassifier {
+
+    @Override
+    public void matches(CarInfoVo car) {
+        try {
+            double mass = Double.parseDouble(car.getCompleteKerbMass());
+            if (mass > 0) {
+                return;
+            }
+        } catch (NumberFormatException ignored) {
+        }
+        throw new SystemException("货车需有整备质量");
+    }
+
+    @Override
+    public CarKindDetailIdCode getKind(CarInfoVo car) {
+        double mass = car.getTonCountDouble();
+        if (mass <= 2) {
+            return CarKindDetailIdCode.H01;
+        }
+        if (mass <= 5) {
+            return CarKindDetailIdCode.H02;
+        }
+        if (mass <= 10) {
+            return CarKindDetailIdCode.H03;
+        }
+        return CarKindDetailIdCode.H04;
+    }
+
+}

+ 12 - 5
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -25,6 +25,7 @@ import com.jzg.quotation.commons.entity.vo.orders.InsOrdersVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.summary.constants.QuoteNumberConstant;
+import com.jzg.quotation.summary.classifier.QuoteInfoParameterFilling;
 import com.jzg.quotation.summary.converter.QuoteInfoConverter;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
 import com.jzg.quotation.summary.factory.CompanyFactory;
@@ -117,6 +118,7 @@ public class UnifyOrderManager {
 
     @Value("${minio.bucket-name}")
     private String bucketName;
+
     @Autowired
     private InsOrdersTrackService insOrdersTrackService;
 
@@ -190,23 +192,29 @@ public class UnifyOrderManager {
         PtlAgreement ptlAgreement = byCompanyId.getData().get(0);
         quoteVo.getOrder().setAgreementId(ptlAgreement.getId());
         quoteVo.getOrder().setApiType(Integer.valueOf(ptlAgreement.getApiType()));
+        // 设置人员区划
+        insOrdersService.setUserAreaCode(quoteVo);
         //获取保司实体
         QuotationBaseService quoteService = companyFactory.getQuoteService(esmInsCompanyHttpResult.getData()
                 .getCompanyCode(), quoteVo.getOrder()
                 .getApiType(), sysQuoteConfigService, sysQuoteRedisService, platformClient, baseController);
 
-        // 生成订单
-        String ordersNo = insOrdersService.generateOrders(quoteVo, companyName);
-        quoteVo.getOrder().setOrdersNo(ordersNo);
+        // 添加车辆没有的参数: 车辆明细、
+        QuoteInfoParameterFilling.setParameterSettings(quoteVo, esmInsCompanyHttpResult.getData().getCompanyCode());
 
         //保司相关代码转换
         Map<String, List<QuoteRuleMapping>> quoteKindMappingMap = quoteRuleMappingService.getByInsuranceCompanyCode(esmInsCompanyHttpResult.getData()
                 .getCode());
-        QuoteInfoConverter.converterCarInfoVo(quoteVo.getCarInfoVo(), quoteKindMappingMap.get(QuoteRuleCategory.QUOTE_INFO.getCode()));
+        QuoteInfoConverter.converterCarInfoVo(quoteVo, quoteKindMappingMap.get(QuoteRuleCategory.QUOTE_INFO.getCode()));
+
         if (CollUtil.isNotEmpty(quoteVo.getKindInfoVo())) {
             QuoteInfoConverter.converterKindInfoVo(quoteVo.getKindInfoVo(), quoteKindMappingMap.get(QuoteRuleCategory.KIND.getCode()), quoteVo.getCarInfoVo());
         }
 
+        // 生成订单
+        String ordersNo = insOrdersService.generateOrders(quoteVo, companyName);
+        quoteVo.getOrder().setOrdersNo(ordersNo);
+
         // 报价
         QuoteResultsVo quoteResultsVo = quoteService.quote(quoteVo);
         quoteResultsVo.setKindInfoVo(quoteVo.getKindInfoVo());
@@ -228,7 +236,6 @@ public class UnifyOrderManager {
                 quoteResultsVo.getErrorMessage()
         );
         insOrdersTrackService.save(track);
-
         // 报价后更新订单
         insOrdersService.orderAfterUpdateQuote(ordersNo, quoteResultsVo);
         return quoteResultsVo.getQuoteStatusEnum()

+ 38 - 12
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java

@@ -1,8 +1,10 @@
 package com.jzg.quotation.summary.converter;
 
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.quotation.commons.constant.enums.base.QuoteRuleGroup;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
 
 import java.util.List;
@@ -19,34 +21,58 @@ public class QuoteInfoConverter {
     /**
      * 车辆信息转换
      *
-     * @param carInfoVo            车辆信息
+     * @param quoteVo              报价参数
      * @param quoteRuleMappingList 报价规则映射
      */
-    public static void converterCarInfoVo(CarInfoVo carInfoVo, List<QuoteRuleMapping> quoteRuleMappingList) {
+    public static void converterCarInfoVo(QuoteVo quoteVo, List<QuoteRuleMapping> quoteRuleMappingList) {
         Map<String, Map<String, QuoteRuleMapping>> groupCodeMap = quoteRuleMappingList.stream()
                 .collect(Collectors.groupingBy(QuoteRuleMapping::getGroupCode, Collectors.toMap(QuoteRuleMapping::getPlatformCode, quoteRuleMapping -> quoteRuleMapping)));
+        QuoteRuleConverter quoteRuleConverter = new QuoteRuleConverter(groupCodeMap);
+        vehicleInformation(quoteRuleConverter, quoteVo.getCarInfoVo());
+        quoteRuleConverter(quoteRuleConverter, quoteVo);
+    }
 
-        QuoteRuleConverter quoteRuleConverter = new QuoteRuleConverter(groupCodeMap, carInfoVo);
+    /**
+     * 车辆信息
+     *
+     * @param quoteRuleConverter 报价信息转换
+     * @param carInfoVo          车辆信息
+     */
+    private static void vehicleInformation(QuoteRuleConverter quoteRuleConverter, CarInfoVo carInfoVo) {
         // 使用性质
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_NATURE.getCode(), CarInfoVo::setCarNatureCode, CarInfoVo::setCarNatureName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_NATURE.getCode(), carInfoVo.getCarNatureCode(), carInfoVo, CarInfoVo::setCarNatureCode, CarInfoVo::setCarNatureName);
         // 车辆用途
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.VEHICLE_USE.getCode(), CarInfoVo::setVehicleUseCode, CarInfoVo::setVehicleUseName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.VEHICLE_USE.getCode(), carInfoVo.getVehicleUseCode(), carInfoVo, CarInfoVo::setVehicleUseCode, CarInfoVo::setVehicleUseName);
         // 车辆种类
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND.getCode(), CarInfoVo::setCarKindCode, CarInfoVo::setCarKindName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND.getCode(), carInfoVo.getCarKindCode(), carInfoVo, CarInfoVo::setCarKindCode, CarInfoVo::setCarKindName);
         // 能源类型
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.ENERGY_TYPE.getCode(), CarInfoVo::setEnergyTypeCode, CarInfoVo::setEnergyTypeName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.ENERGY_TYPE.getCode(), carInfoVo.getEnergyTypeCode(), carInfoVo, CarInfoVo::setEnergyTypeCode, CarInfoVo::setEnergyTypeName);
         // 车辆类型 有的保险公司不需要映射
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_TYPE.getCode(), CarInfoVo::setCarTypeCode, CarInfoVo::setCarTypeName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_TYPE.getCode(), carInfoVo.getCarTypeCode(), carInfoVo, CarInfoVo::setCarTypeCode, CarInfoVo::setCarTypeName);
         // 所属性质
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.PROPERTY.getCode(), CarInfoVo::setPropertyCode, CarInfoVo::setPropertyName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.PROPERTY.getCode(), carInfoVo.getPropertyCode(), carInfoVo, CarInfoVo::setPropertyCode, CarInfoVo::setPropertyName);
         // 车辆明细
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND_DETAIL.getCode(), CarInfoVo::setCarKindDetailIdCode, CarInfoVo::setCarKindDetailIdName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND_DETAIL.getCode(), carInfoVo.getCarKindDetailIdCode(), carInfoVo, CarInfoVo::setCarKindDetailIdCode, CarInfoVo::setCarKindDetailIdName);
         // 号牌颜色
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseColorCode(), carInfoVo, CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
         // 号牌种类
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseKindCode(), carInfoVo, CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
     }
 
+    /**
+     * 人员信息
+     *
+     * @param quoteRuleConverter 报价信息转换
+     * @param quoteVo            报价信息
+     */
+    private static void quoteRuleConverter(QuoteRuleConverter quoteRuleConverter, QuoteVo quoteVo) {
+        List<CustomerInfoVo> customerInfoVos = List.of(quoteVo.getOwnersInfo(), quoteVo.getInsuredPersonInfo(), quoteVo.getPolicyHolderInfo());
+        customerInfoVos.forEach(customerInfoVo -> {
+            quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.GENDER.getCode(), customerInfoVo.getGender(), customerInfoVo, CustomerInfoVo::setGender);
+        });
+    }
+
+
     /**
      * @param kindInfoVo           险种信息
      * @param quoteRuleMappingList 报价规则映射

+ 29 - 13
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteRuleConverter.java

@@ -1,6 +1,5 @@
 package com.jzg.quotation.summary.converter;
 
-import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
 
 import java.util.Map;
@@ -16,11 +15,8 @@ public final class QuoteRuleConverter {
 
     private final Map<String, Map<String, QuoteRuleMapping>> groupCodeMap;
 
-    private final CarInfoVo carInfoVo;
-
-    public QuoteRuleConverter(Map<String, Map<String, QuoteRuleMapping>> groupCodeMap, CarInfoVo carInfoVo) {
+    public QuoteRuleConverter(Map<String, Map<String, QuoteRuleMapping>> groupCodeMap) {
         this.groupCodeMap = groupCodeMap;
-        this.carInfoVo = carInfoVo;
     }
 
     /**
@@ -30,14 +26,34 @@ public final class QuoteRuleConverter {
      * @param codeSetter 编码set
      * @param nameSetter 名称set
      */
-    public void applyRuleMapping(String groupCode, BiConsumer<CarInfoVo, String> codeSetter, BiConsumer<CarInfoVo, String> nameSetter) {
-        Optional.ofNullable(groupCodeMap)
-                .map(map -> map.get(groupCode))
-                .map(ruleMap -> ruleMap.get(carInfoVo.getCarNatureCode()))
-                .ifPresent(mapping -> {
-                    codeSetter.accept(carInfoVo, mapping.getRuleCode());
-                    nameSetter.accept(carInfoVo, mapping.getRuleName());
-                });
+    public <T> void applyRuleMapping(String groupCode, String code, T target, BiConsumer<T, String> codeSetter, BiConsumer<T, String> nameSetter) {
+        getMapping(groupCode, code).ifPresent(mapping -> {
+            codeSetter.accept(target, mapping.getRuleCode());
+            Optional.ofNullable(nameSetter).ifPresent(setter -> setter.accept(target, mapping.getRuleName()));
+        });
+    }
+
+    /**
+     * 应用规则映射
+     *
+     * @param groupCode  分组参数
+     * @param code       晋掌柜参数
+     * @param target     映射对象
+     * @param codeSetter 需要映射参数的setter 方法
+     * @param <T>        需要映射的类型
+     */
+    public <T> void applyRuleMapping(String groupCode, String code, T target, BiConsumer<T, String> codeSetter) {
+        applyRuleMapping(groupCode, code, target, codeSetter, null);
+    }
+
+    /**
+     * 应用规则映射
+     *
+     * @param groupCode 规则标识
+     * @param code      编码set
+     */
+    private Optional<QuoteRuleMapping> getMapping(String groupCode, String code) {
+        return Optional.ofNullable(groupCodeMap).map(map -> map.get(groupCode)).map(ruleMap -> ruleMap.get(code));
     }
 
 }

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java

@@ -249,6 +249,8 @@ public class CompanyFactory {
                 .eq(InsOrdersRisk::getOrderNo, insOrders.getId())));
         downloadPolicyVo.setPolicie(insOrdersPolicyService.getOne(new LambdaUpdateWrapper<InsOrdersPolicy>()
                 .eq(InsOrdersPolicy::getOrderNo, insOrders.getId())));
+        downloadPolicyVo.setCarInfo(insOrdersCarInfoService.getOne(new LambdaUpdateWrapper<InsOrdersCarInfo>()
+                .eq(InsOrdersCarInfo::getOrderNo, insOrders.getId())));
         HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(insOrders.getAgreementId(), token, systemCode);
         AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");
         Map<String, String> fieldMap = agreementAttribution.getData().getFields().stream()

+ 15 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -36,10 +36,19 @@ public interface InsOrdersService extends IService<InsOrders> {
      * 根据报价参数生成订单  返回订单号
      */
 
-    String generateOrders(QuoteVo quoteVo,String companyName);
+    String generateOrders(QuoteVo quoteVo, String companyName);
+
+    /**
+     * 设置人员地址
+     *
+     * @param quoteVo 报价信息
+     */
+    void setUserAreaCode(QuoteVo quoteVo);
+
 
     /**
      * 保存报价的订单
+     *
      * @return
      */
     boolean saveQuoteOrders(QuoteVo quoteVo) throws InvocationTargetException, IllegalAccessException;
@@ -47,6 +56,7 @@ public interface InsOrdersService extends IService<InsOrders> {
 
     /**
      * 订单报价更新后处理
+     *
      * @param quoteResponse
      */
     void orderAfterUpdateQuote(String ordersNo, QuoteResultsVo quoteResponse);
@@ -58,6 +68,7 @@ public interface InsOrdersService extends IService<InsOrders> {
 
     /**
      * 查询订单列表
+     *
      * @param insOrdersParam
      * @return
      */
@@ -65,6 +76,7 @@ public interface InsOrdersService extends IService<InsOrders> {
 
     /**
      * 查询订单详情
+     *
      * @param ordersNo
      * @return
      */
@@ -72,6 +84,7 @@ public interface InsOrdersService extends IService<InsOrders> {
 
     /**
      * 获取历史报价信息
+     *
      * @return
      */
     List<HistoryQuoteResultVo> getHistoryQuote();
@@ -81,6 +94,6 @@ public interface InsOrdersService extends IService<InsOrders> {
     /**
      * 保存状态查询结果
      */
-    void orderAfterUpdateOrderStatus(String orderNo,OrderStatusResultVo orderStatusResultVo);
+    void orderAfterUpdateOrderStatus(String orderNo, OrderStatusResultVo orderStatusResultVo);
 
 }

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

@@ -459,6 +459,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return true;
     }
 
+    @Override
     public void setUserAreaCode(QuoteVo quoteVo){
         HttpResult<PersonAreaVo> ownerAddress = orgClient.queryByAddress(
                 quoteVo.getOwnersInfo().getAddr(), quoteVo.getOwnersInfo().getIdentifyNumber());
@@ -677,8 +678,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
         // 保存订单用户信息
         List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = new ArrayList<>();
-        //更新用户的区划code
-        setUserAreaCode(quoteVo);
 
         // 添加车主信息
         insOrdersCarUserInfoList.add(new InsOrdersCarUserInfo(quoteVo.getOwnersInfo(), insOrders.getId(),1));

+ 1 - 1
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java

@@ -89,7 +89,7 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
             }
             return handleFailedQuote(response, quoteVo);
         } else {
-            // 商业险有重复投保提示时 设置商业险起保时间 重复递归报价 ps:商业险重复投保不会返回到errorMessage 只会返回到remarkBi 并且会报价成功
+            // 商业险有重复投保提示时 设置商业险起保时间 重复递归报价 ps:商业险重复投保不会返回到errorMessage 只会返回到remarkBi 并且会显示报价成功
             if (!response.getRemarkBi().equals("")) {
                 String remarkBi = response.getRemarkBi();
                 Pattern pattern = Pattern.compile("终保日期:(\\d{12})");

+ 8 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/entity/request/InsurancePolicyPrintRequest.java

@@ -1,6 +1,8 @@
 package com.jzg.quotation.zhongmei.api.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
+import com.jzg.quotation.commons.entity.vo.aggregated.DownloadPolicyVo;
 import com.jzg.quotation.zhongmei.api.constant.TransCode;
 import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
 import lombok.Data;
@@ -61,4 +63,10 @@ public class InsurancePolicyPrintRequest extends BaseRequest {
         super.getHead().setTransCode(TransCode.INSURANCE_POLICY_PRINT);
     }
 
+    public InsurancePolicyPrintRequest(String policyNo, String riskCode, String documentType) {
+        this.policyNo = policyNo;
+        this.riskCode = riskCode;
+        this.documentType = documentType;
+    }
+
 }

+ 56 - 13
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/service/impl/ZhongMeiApiRequestImpl.java

@@ -1,9 +1,13 @@
 package com.jzg.quotation.zhongmei.api.service.impl;
 
 
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.quote.vo.*;
+import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
@@ -30,7 +34,9 @@ import org.springframework.transaction.annotation.Transactional;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @QuoteApiService(value = InsuranceCode.INSURANCE_ZMBX)
 @RequiredArgsConstructor
@@ -302,25 +308,62 @@ public class ZhongMeiApiRequestImpl implements ZhongMeiApiRequest {
         OrderBase orderBase = downloadPolicyVo.getOrder();
         AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         ZmApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZmApiConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
+        InsOrdersCarInfo carInfo = downloadPolicyVo.getCarInfo();
+        String riskCode;
+        if (carInfo.getEnergyTypeCode().equals("0")) {
+            riskCode = "0361";
+        } else {
+            riskCode = "0365";
+        }
+        String jqPolicyNo = downloadPolicyVo.getPolicie().getJqPolicyNo();
+        if (Objects.nonNull(jqPolicyNo)) {
+            queryPolicy(jqPolicyNo, parameters,"0330",PolicyType.JQ,"2",downloadPolicyResultVo);
+            queryPolicy(jqPolicyNo, parameters,"0330",PolicyType.BZ,"1",downloadPolicyResultVo);
+        }
+        String syPolicyNo = downloadPolicyVo.getPolicie().getSyPolicyNo();
+        if (Objects.nonNull(syPolicyNo)) {
+            queryPolicy(syPolicyNo, parameters,riskCode,PolicyType.SY,"2",downloadPolicyResultVo);
+        }
+        String jyPolicyNo = downloadPolicyVo.getPolicie().getJyPolicyNo();
+        if (Objects.nonNull(jyPolicyNo)) {
+            queryPolicy(jyPolicyNo, parameters,riskCode,PolicyType.JY,"2",downloadPolicyResultVo);
+        }
+        return downloadPolicyResultVo;
+    }
 
-        //先调用缴费查询接口获取保单号
-        OrderStatusRequest orderStatusRequest = new OrderStatusRequest();
-        BaseRequestHead baseRequestHead = new BaseRequestHead(parameters);
-        orderStatusRequest.setHead(baseRequestHead);
-        ZmApiOrder zmApiOrder = zhongmeiApiOrderService.findByOrdersNo(orderBase.getOrdersNo());
-        orderStatusRequest.setBusinessNo(zmApiOrder.getBussinessNo());
-        OrderStatusResponse orderStatusResponse = zmApiRequestComponent.orderStatus(orderStatusRequest, OrderStatusResponse.class);
-
-        //获取保单号,然后调用下载保单接口
-        InsurancePolicyPrintRequest insurancePolicyPrintRequest = new InsurancePolicyPrintRequest();
+    private void queryPolicy(String policyNo,ZmApiConfigureParameters zmApiConfigureParameters,String riskCode,PolicyType policyType,String type,DownloadPolicyResultVo downloadPolicyResultVo) {
+        BaseRequestHead baseRequestHead = new BaseRequestHead(zmApiConfigureParameters);
+        InsurancePolicyPrintRequest insurancePolicyPrintRequest = new InsurancePolicyPrintRequest(policyNo,riskCode,type);
         insurancePolicyPrintRequest.setHead(baseRequestHead);
         // 需设置参数 保单号,险种编码,业务类型,单证类型
-
         InsurancePolicyPrintResponse printResponse = zmApiRequestComponent.insurancePolicyPrint(insurancePolicyPrintRequest, InsurancePolicyPrintResponse.class);
-
-        return null;
+        if ("0".equals(printResponse.getHead().getReturnCode())) {
+            if (ArrayUtil.isNotEmpty(printResponse.getDownloadUrl())) {
+                String url = printResponse.getDownloadUrl().get(0);
+                switch (policyType) {
+                    case JQ:
+                        downloadPolicyResultVo.setJqUrl(url);
+                        break;
+                    case SY:
+                        downloadPolicyResultVo.setSyUrl(url);
+                        break;
+                    case JY:
+                        downloadPolicyResultVo.setJyUrl(url);
+                        break;
+                    case BZ:
+                        downloadPolicyResultVo.setJqFlagUrl(url);
+                        break;
+                }
+            }
+        } else {
+            throw new SystemException(printResponse.getHead().getReturnMessage());
+        }
     }
 
+    private enum PolicyType {
+        JQ, SY, JY, BZ
+    }
 
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {

+ 14 - 14
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java

@@ -393,16 +393,16 @@ public class ZmCrawlerRequestComponent {
      * </root>
      */
     public String getUploadedImages(String userCode, String batchId) {
-        Map<String, Object> params = new HashMap<>();
-        params.put("a", "");
-        params.put("_", System.currentTimeMillis() * 1000);//毫秒级时间戳
-        params.put("appCode", ZmCrawlerImageConstant.ZM_IMAGE_APP_CODE);
-        params.put("appName", ZmCrawlerImageConstant.ZM_IMAGE_APP_NAME);
-        params.put("userCode", userCode);
-        params.put("batchId", batchId);//批次号
-        params.put("batchVer", "");//提交图片数量
-        params.put("orgCode", ZmCrawlerImageConstant.ZM_IMAGE_ORG_CODE);
-        params.put("newBatch", "");
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+        params.add("a", "");
+        params.add("_", System.currentTimeMillis() * 1000 + "");//毫秒级时间戳
+        params.add("appCode", ZmCrawlerImageConstant.ZM_IMAGE_APP_CODE);
+        params.add("appName", ZmCrawlerImageConstant.ZM_IMAGE_APP_NAME);
+        params.add("userCode", userCode);
+        params.add("batchId", batchId);//批次号
+        params.add("batchVer", "");//提交图片数量
+        params.add("orgCode", ZmCrawlerImageConstant.ZM_IMAGE_ORG_CODE);
+        params.add("newBatch", "");
 
         String responseXml = requestComponent.get(RequestUrl.GET_UPLOADED_IMAGE.getRequestUrl(zmCrawlerProperties.getImageUrl()), params, "", String.class, null);
         return responseXml;
@@ -635,16 +635,16 @@ public class ZmCrawlerRequestComponent {
         //解析已上传的图片url
         Document document = XmlUtil.readXML(uploadedImageXml.replace("\t", "").replace("\n", ""));
         Node responseCode = document.getElementsByTagName(ZmCrawlerImageConstant.ZM_IMAGE_UPLOADED_RES_NODE).item(0);
-        Map<String, Object> params = new HashMap<>();
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
         if ("200".equals(responseCode.getTextContent())) {
             Node sydNode = document.getElementsByTagName("SYD").item(0);
             String sydNodeStr = XmlUtil.toStr(sydNode.getFirstChild());
 
             //组装提交图片xml字符串
             String submitImageXml = buildSubmitXml(sydNodeStr, parameters, userCode, docCodeAndImage, crawlerOrder);
-            params.put("xmlStr", submitImageXml);
-            params.put("svrIp", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_IP);
-            params.put("svrPort", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_PORT);
+            params.add("xmlStr", submitImageXml);
+            params.add("svrIp", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_IP);
+            params.add("svrPort", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_PORT);
         } else {
             Node resMsg = document.getElementsByTagName(ZmCrawlerImageConstant.ZM_IMAGE_UPLOADED_RES_MSG).item(0);
             throw new SystemException(resMsg.getTextContent());

+ 2 - 2
tenant/organization/src/main/java/com/jzg/organization/client/CostsRuleClient.java

@@ -3,13 +3,13 @@ package com.jzg.organization.client;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.costsorrule.model.ValidateSchemeRuleVo;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 @FeignClient(name="jzg-costsorrule",url = "http://localhost:8001/")
 public interface CostsRuleClient {
 
-    @GetMapping("/validate/rule/validateSchemeRule")
+    @PostMapping("/validate/rule/validateSchemeRule")
     public HttpResult validateSchemeRule(@RequestBody ValidateSchemeRuleVo validateSchemeRuleVo);
 
 

+ 2 - 1
tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementCostController.java

@@ -84,7 +84,8 @@ public class PtlAgreementCostController {
     @Operation(summary = "费用管理分页列表")
     @PostMapping("pageList")
     public HttpResult<CostManagementVo> pageList(@RequestBody PtlAgreementCostParam costParam){
-        return ptlAgreementCostService.pageList(costParam);
+        HttpResult httpResult = ptlAgreementCostService.pageList(costParam);
+        return httpResult;
     }
 
 }

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

@@ -7,6 +7,7 @@ import com.jzg.commons.constants.OperationTypeEnum;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.SysUserInfoParam;
+import com.jzg.commons.entity.dto.SysUserJzgInfoDto;
 import com.jzg.commons.entity.vo.*;
 import com.jzg.commons.request.RequestSingleParam;
 import com.jzg.organization.mapper.SysUserJzgInfoMapper;
@@ -35,7 +36,8 @@ public class UserController extends BaseController {
     @PostMapping(value = "/getUserInfoList")
     public HttpResult getUserInfoList(@RequestBody SysUserInfoListVo sysUserInfoListVo) {
         Page page = sysUserInfoListVo.getPage();
-        return HttpResult.ok(sysUserService.getUserInfoList(page,sysUserInfoListVo));
+        Page<SysUserJzgInfoDto> userInfoList = sysUserService.getUserInfoList(page, sysUserInfoListVo);
+        return HttpResult.ok(userInfoList);
     }
 
     @Operation(summary = "获取待办数量接口", description = "获取待办数量接口")

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementCostMapper.java

@@ -25,6 +25,6 @@ public interface PtlAgreementCostMapper extends BaseMapper<PtlAgreementCost> {
     Page<CostManagementVo> pageList(Page page,@Param("costParam") PtlAgreementCostParam costParam);
 
 
-    PtlAgreementCostVo selectById(@Param("id") Long id);
+//    PtlAgreementCostVo selectById(@Param("id") Long id);
 
 }

+ 10 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -278,7 +278,16 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
     @Override
     public HttpResult pageList(PtlAgreementCostParam costParam) {
-        return HttpResult.ok(baseMapper.pageList(costParam.getPage(),costParam));
+        Page<CostManagementVo> costManagementVoPage = baseMapper.pageList(costParam.getPage(), costParam);
+        costManagementVoPage.getRecords().forEach(item->{
+            if(item.getCostRules() != null && !item.getCostRules().equals("")){
+                item.setCostRules(item.getCostRules().substring(0,item.getCostRules().length()-1));
+            }
+            if(item.getRuleDescription() != null && !item.getRuleDescription().equals("")){
+                item.setRuleDescription(item.getRuleDescription().substring(0,item.getRuleDescription().length()-1));
+            }
+        });
+        return HttpResult.ok(costManagementVoPage);
     }
 
 

+ 28 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -10,6 +10,7 @@ import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.*;
 import com.jzg.commons.entity.scheme.vo.*;
 import com.jzg.commons.entity.vo.EsmInsCompanyResVo;
+import com.jzg.commons.exception.NoneException;
 import com.jzg.commons.exception.ValidateException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
@@ -151,6 +152,30 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                 item.getOptionId().add(option.getOptionId());
             });
         });
+        List<PtlSchemeInsuranceVo> ptlSchemeInsurancesNew = new ArrayList<>();
+        Map<String, PtlSchemeInsuranceVo> insuranceMap = new HashMap<>();
+
+        for (PtlSchemeInsuranceVo item : ptlSchemeInsurances) {
+            String insuranceId = item.getInsuranceId();
+
+            // 如果已存在则合并
+            if (insuranceMap.containsKey(insuranceId)) {
+                PtlSchemeInsuranceVo existingVo = insuranceMap.get(insuranceId);
+                existingVo.getOptionId().addAll(item.getOptionId());
+                existingVo.getOptionVos().addAll(item.getOptionVos());
+            } else {
+                // 否则新增,并放入 Map 和 List
+                PtlSchemeInsuranceVo newVo = new PtlSchemeInsuranceVo();
+                newVo.setId(item.getId());
+                newVo.setSchemeInfoId(item.getSchemeInfoId());
+                newVo.setInsuranceId(insuranceId);
+                newVo.setKindName(item.getKindName());
+                newVo.setOptionId(new ArrayList<>(item.getOptionId()));
+                newVo.setOptionVos(new ArrayList<>(item.getOptionVos()));
+                insuranceMap.put(insuranceId, newVo);
+                ptlSchemeInsurancesNew.add(newVo);
+            }
+        }
 
         //获取驾意险
         List<PtlSchemeInsuranceDrivingIntention> ptlSchemeInsuranceDrivingIntentions = ptlSchemeInsuranceDrivingIntentionMapper.getSchemeDrivingIntention(ptlSchemeInfo.getId());
@@ -162,7 +187,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         List<PtlAgreementUndwrtRulesAttr> agreementRulesVo = rulesGet(ptlScheme.getId());
 
         //拼装返回数据
-        PtlSchemeQueryVo vo = new PtlSchemeQueryVo(ptlScheme,ptlSchemeInfo,ptlSchemeInsurances,ptlSchemeInsuranceDrivingIntentions,ptlSchemeRulesAttrLinks,agreementRulesVo);
+        PtlSchemeQueryVo vo = new PtlSchemeQueryVo(ptlScheme,ptlSchemeInfo,ptlSchemeInsurancesNew,ptlSchemeInsuranceDrivingIntentions,ptlSchemeRulesAttrLinks,agreementRulesVo);
 
         return vo;
     }
@@ -175,7 +200,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                 .eq(PtlScheme::getProductId, productId));
 
         if(Objects.isNull(ptlScheme)){
-            throw new ValidateException("方案不存在");
+            throw new NoneException("方案不存在");
         }
 
         //获取方案信息
@@ -364,6 +389,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         SchemeResultVo schemeResultVo = new SchemeResultVo();
         //基础方案
         SchemeResultVo.SchemeVo schemeVo = schemeInsuranceInfo.stream().filter(x -> x.getSchemeType().equals("1")).findFirst().orElse(null);
+        assert schemeVo != null;
         schemeResultVo.setSchemes(schemeVo.getInfos());
         //把基础方案的商业险的value 赋值
         schemeResultVo.getSchemes().forEach(schemeInfoVo -> {

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

@@ -178,7 +178,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 
                     // 设置负责人信息
                     Optional.ofNullable(item.getLeaderId())
-                            .map(sysUserJzgInfoService::getUserByUserId)
+                            .map(sysUserJzgInfoService::getUserById)
                             .map(SysUserJzgInfo::getName)
                             .ifPresent(sysDeptVo::setLeaderName);
 

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

@@ -330,14 +330,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult<Boolean> deleteUserInfo(IsDeleteVo isDeleteVo) {
-//        for (String id : isDeleteVo.getIds()) {
-//            SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getById(id);
-//            sysDeptService.checkChangeDept(sysUserJzgInfo.getUserId());
-//            if (sysUserJzgInfo == null) {
-//                throw new SystemException("该用户不存在");
-//            }
-//            sysUserJzgInfoService.removeById(id);
-//        }
+        for (String id : isDeleteVo.getIds()) {
+            SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getById(id);
+            sysDeptService.checkChangeDept(sysUserJzgInfo.getUserId());
+            if (sysUserJzgInfo == null) {
+                throw new SystemException("该用户不存在");
+            }
+            sysUserJzgInfoService.removeById(id);
+        }
         return HttpResult.ok("删除成功");
     }
 

+ 30 - 30
tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml

@@ -321,35 +321,35 @@
         order by pc.create_time desc
     </select>
 
-    <select id="selectById" resultMap="BaseResultMap">
-        SELECT
-        t.id,
-        t.ptl_agreement_id,
-        t.product_name,
-        t.product_id,
-        t.effective_time,
-        t.failure_time,
-        t.audit_method,
-        t.cost_describe,
-        t.is_delete,
-        t.create_by,
-        t.create_time,
-        t.update_by,
-        t.update_time,
-        t.audit_person,
-        t.review_description,
-        t.audit_time,
-        pa.agreement_code,
-        pa.agreement_title
-        FROM
-        ptl_agreement_cost t
-        LEFT JOIN ptl_agreement pa ON pa.id = t.ptl_agreement_id
-        <where>
-            t.is_delete = 0
-            <if test="id != null">
-                AND t.id = #{id}
-            </if>
-        </where>
-    </select>
+<!--    <select id="selectById" resultMap="BaseResultMap">-->
+<!--        SELECT-->
+<!--        t.id,-->
+<!--        t.ptl_agreement_id,-->
+<!--        t.product_name,-->
+<!--        t.product_id,-->
+<!--        t.effective_time,-->
+<!--        t.failure_time,-->
+<!--        t.audit_method,-->
+<!--        t.cost_describe,-->
+<!--        t.is_delete,-->
+<!--        t.create_by,-->
+<!--        t.create_time,-->
+<!--        t.update_by,-->
+<!--        t.update_time,-->
+<!--        t.audit_person,-->
+<!--        t.review_description,-->
+<!--        t.audit_time,-->
+<!--        pa.agreement_code,-->
+<!--        pa.agreement_title-->
+<!--        FROM-->
+<!--        ptl_agreement_cost t-->
+<!--        LEFT JOIN ptl_agreement pa ON pa.id = t.ptl_agreement_id-->
+<!--        <where>-->
+<!--            t.is_delete = 0-->
+<!--            <if test="id != null">-->
+<!--                AND t.id = #{id}-->
+<!--            </if>-->
+<!--        </where>-->
+<!--    </select>-->
 
 </mapper>

+ 2 - 1
tenant/organization/src/main/resources/mapper/PtlAgreementMapper.xml

@@ -53,7 +53,8 @@
         pa.create_by,pa.create_time,pa.update_by,
         pa.update_time,pa.is_delete,paa.username,paa.user_abbr as userAbber,
         suji.name as managerName,sd.name as managerDeptName,suf.file_name as fileName,suf.file_size as fileSize,
-        eic.name_simple as company,sdd.name as deptName
+        eic.name_simple as company,sdd.name as deptName,
+        pa.api_type
     </sql>
     <select id="queryPage" resultType="com.jzg.commons.entity.vo.AgreementVo">
         select <include refid="Base_Column_List"/>