shenweidong 1 год назад
Родитель
Сommit
f1bb853202
51 измененных файлов с 6933 добавлено и 102 удалено
  1. 140 0
      commons/src/main/java/com/jzg/commons/util/StringUtils.java
  2. 0 95
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/constant/enums/InsuranceEnum.java
  3. 2 3
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/entity/request/QuotationRequest.java
  4. 0 1
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/util/SignatureUtils.java
  5. 9 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/enums/quote/EnergyTypeCode.java
  6. 183 2
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/component/GuoRenRequestApiComponent.java
  7. 23 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/BaseTaxation.java
  8. 99 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/CarKindCode.java
  9. 29 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/CategoriesOfVehicles.java
  10. 21 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/ClauseTypeSystem.java
  11. 64 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/InsurKindGuoRen.java
  12. 57 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/PlatformInterfaceCode.java
  13. 27 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/RelifReason.java
  14. 30 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/Response.java
  15. 108 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/TrafficManagementVehicleType.java
  16. 33 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/UseNatureCode.java
  17. 31 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/UseNatureCodeMapping.java
  18. 45 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/GuoRenApiOrder.java
  19. 41 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/GuoRenConfigureParameters.java
  20. 28 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/CarPriceMuchRequest.java
  21. 810 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/CarPriceRequest.java
  22. 27 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/IIRBT00012Request.java
  23. 531 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/InsuranceSlipRequest.java
  24. 56 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/NoCarElectronicPolicyRequest.java
  25. 84 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/PayRequest.java
  26. 1360 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/PremiumRequest.java
  27. 25 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/QueryNoCarPolicyNoRequest.java
  28. 32 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/SignatureRequest.java
  29. 65 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/SubmitAuditRequest.java
  30. 60 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/VinQueryRequest.java
  31. 373 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/CarPriceMuchResponse.java
  32. 59 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/CarPriceResponse.java
  33. 23 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/IIRBT00012Response.java
  34. 142 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/InsuranceSlipResponse.java
  35. 69 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/NoCarElectronicPolicyResponse.java
  36. 52 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PayResponse.java
  37. 28 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PolicyResponse.java
  38. 1148 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PremiumResponse.java
  39. 45 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/QueryNoCarPolicyNoResponse.java
  40. 56 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/SignatureResponse.java
  41. 41 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/SubmitAuditResponse.java
  42. 240 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/VinQueryResponse.java
  43. 167 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/ChannelInfoDTO.java
  44. 34 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/DrivingInsuranceDTO.java
  45. 142 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/RequestDTO.java
  46. 35 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/ResponseDTO.java
  47. 46 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/vo/GuoRenSpecialAgreementVo.java
  48. 9 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/vo/GuorenAccidentalDrivingVo.java
  49. 14 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/GuoRenApiOrderService.java
  50. 36 0
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/Impl/GuoRenApiOrderServiceImpl.java
  51. 154 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/Impl/GuoRenApiRequestImpl.java

+ 140 - 0
commons/src/main/java/com/jzg/commons/util/StringUtils.java

@@ -5,6 +5,10 @@ import com.jzg.commons.text.StrFormatter;
 import org.springframework.util.AntPathMatcher;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Pattern;
+
+import static org.apache.el.lang.ELArithmetic.isNumber;
 
 /**
  * 字符串工具类
@@ -19,6 +23,11 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
     /** 下划线 */
     private static final char SEPARATOR = '_';
 
+    /**
+     * 编译后的正则表达式缓存
+     */
+    private static final Map<String, Pattern> PATTERN_CACHE = new ConcurrentHashMap<>();
+
     /**
      * 获取参数不为空值
      * 
@@ -631,4 +640,135 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
         }
         return sb.toString();
     }
+
+    /**
+     * 将对象转为字符串,如果对象为null,则返回null,而不是"null"
+     *
+     * @param object 要转换的对象
+     * @return 转换后的对象
+     */
+    public static String toString(Object object) {
+        return toString(object, null);
+    }
+
+    /**
+     * 将对象转为字符串,如果对象为null,则使用默认值
+     *
+     * @param object       要转换的对象
+     * @param defaultValue 默认值
+     * @return 转换后的字符串
+     */
+    public static String toString(Object object, String defaultValue) {
+        if (object == null) return defaultValue;
+        return String.valueOf(object);
+    }
+
+    /**
+     * 将对象转为Double,如果对象无法转换,将使用默认值
+     *
+     * @param object       要转换的对象
+     * @param defaultValue 默认值
+     * @return 转换后的值
+     */
+    public static double toDouble(Object object, double defaultValue) {
+        if (object instanceof Number)
+            return ((Number) object).doubleValue();
+        if (isNumber(object)) {
+            return Double.parseDouble(object.toString());
+        }
+        if (null == object) return defaultValue;
+        return 0;
+    }
+
+    /**
+     * 将对象转为Double,如果对象无法转换,将使用默认值0
+     *
+     * @param object 要转换的对象
+     * @return 转换后的值
+     */
+    public static double toDouble(Object object) {
+        return toDouble(object, 0);
+    }
+
+    /**
+     * 将对象转为int值,如果对象无法进行转换,则使用默认值
+     *
+     * @param object       要转换的对象
+     * @param defaultValue 默认值
+     * @return 转换后的值
+     */
+    public static int toInt(Object object, int defaultValue) {
+        if (object instanceof Number)
+            return ((Number) object).intValue();
+        if (isInt(object)) {
+            return Integer.parseInt(object.toString());
+        }
+        if (isDouble(object)) {
+            return (int) Double.parseDouble(object.toString());
+        }
+        return defaultValue;
+    }
+
+    /**
+     * 对象是否为无效值
+     *
+     * @param obj 要判断的对象
+     * @return 是否为有效值(不为null 和 "" 字符串)
+     */
+    public static boolean isNullOrEmpty(Object obj) {
+        return obj == null || "".equals(obj.toString().trim());
+    }
+
+    /**
+     * 参数是否是有效整数
+     *
+     * @param obj 参数(对象将被调用string()转为字符串类型)
+     * @return 是否是整数
+     */
+    public static boolean isInt(Object obj) {
+        if (isNullOrEmpty(obj))
+            return false;
+        if (obj instanceof Integer)
+            return true;
+        return obj.toString().matches("[-+]?\\d+");
+    }
+
+    /**
+     * 字符串参数是否是double
+     *
+     * @param obj 参数(对象将被调用string()转为字符串类型)
+     * @return 是否是double
+     */
+    public static boolean isDouble(Object obj) {
+        if (isNullOrEmpty(obj))
+            return false;
+        if (obj instanceof Double || obj instanceof Float)
+            return true;
+        return compileRegex("[-+]?\\d+\\.\\d+").matcher(obj.toString()).matches();
+    }
+
+    /**
+     * 编译一个正则表达式,并且进行缓存,如果换成已存在则使用缓存
+     *
+     * @param regex 表达式
+     * @return 编译后的Pattern
+     */
+    public static final Pattern compileRegex(String regex) {
+        Pattern pattern = PATTERN_CACHE.get(regex);
+        if (pattern == null) {
+            pattern = Pattern.compile(regex);
+            PATTERN_CACHE.put(regex, pattern);
+        }
+        return pattern;
+    }
+
+    /**
+     * 将对象转为int值,如果对象不能转为,将返回0
+     *
+     * @param object 要转换的对象
+     * @return 转换后的值
+     */
+    public static int toInt(Object object) {
+        return toInt(object, 0);
+    }
 }

+ 0 - 95
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/constant/enums/InsuranceEnum.java

@@ -1,95 +0,0 @@
-package com.jzg.quote.bohai.api.constant.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @description: todo
- * @author: shenwd
- * @date: 2025/3/3 15:45
- **/
-@AllArgsConstructor
-@Getter
-public enum InsuranceEnum {
-
-    AAIC("AAIC", "安信农业保险股份有限公司", ""),
-    ABIC("ABIC", "安邦财产保险股份有限公司", ""),
-    ACIC("ACIC", "安诚财产保险股份有限公司", ""),
-    AHIC("AHIC", "安华农业保险股份有限公司", ""),
-    AICS("AICS", "永诚财产保险股份有限公司", "yongcheng"),
-    AIGC("AIGC", "美亚财产保险有限公司", ""),
-    AMIC("AMIC", "中航安盟财产保险有限公司", ""),
-    APIC("APIC", "安心财产保险有限责任公司", ""),
-    AZCN("AZCN", "京东安联财产保险有限公司", ""),
-    BGIC("BGIC", "北部湾财产保险股份有限公司", ""),
-    BOCI("BOCI", "中银保险有限公司", ""),
-    BPIC("BPIC", "渤海财产保险股份有限公司", "bohai"),
-    CAIC("CAIC", "长安责任保险股份有限公司", ""),
-    CATH("CATH", "国泰财产保险有限责任公司", ""),
-    CCBP("CCBP", "建信财产保险有限公司", ""),
-    CCIC("CCIC", "中国大地财产保险股份有限公司", ""),
-    CHAC("CHAC", "诚泰财产保险股份有限公司", "chengtai"),
-    CICP("CICP", "中华联合财产保险股份有限公司", ""),
-    CJCX("CJCX", "长江财产保险股份有限公司", ""),
-    CPIC("CPIC", "中国太平洋财产保险股份有限公司", "taipingyang"),
-    CRCI("CRCI", "中国铁路财产保险自保有限公司", ""),
-    CRIC("CRIC", "富德财产保险股份有限公司", ""),
-    DBIC("DBIC", "都邦财产保险股份有限公司", ""),
-    DHIC("DHIC", "鼎和财产保险股份有限公司", ""),
-    DICC("DICC", "史带财产保险股份有限公司", ""),
-    DJPC("DJPC", "大家财产保险有限责任公司", "dajia"),
-    EAIC("EAIC", "易安财产保险股份有限公司", ""),
-    FPIC("FPIC", "富邦财产保险有限公司", ""),
-    GPIC("GPIC", "中国人寿财产保险股份有限公司", "renshou"),
-    GYIC("GYIC", "国元农业保险股份有限公司", ""),
-    HAIC("HAIC", "华安财产保险股份有限公司", ""),
-    HBIC("HBIC", "恒邦财产保险股份有限公司", "hengbang"),
-    HGIC("HGIC", "海峡金桥财产保险股份有限公司", ""),
-    HHBX("HHBX", "华海财产保险股份有限公司", ""),
-    HNIC("HNIC", "华农财产保险股份有限公司", "huanong"),
-    HTIC("HTIC", "华泰财产保险有限公司", "huatai"),
-    HYIC("HYIC", "现代财产保险(中国)有限公司", ""),
-    JLIC("JLIC", "久隆财产保险有限公司", ""),
-    JTIC("JTIC", "锦泰财产保险股份有限公司", ""),
-    LIHI("LIHI", "利宝保险有限公司", ""),
-    MACN("MACN", "亚太财产保险有限公司", ""),
-    MSIC("MSIC", "三井住友海上火灾保险(中国)有限公司", ""),
-    PAIC("PAIC", "中国平安财产保险股份有限公司", "pingan"),
-    PICC("PICC", "中国人民财产保险股份有限公司", ""),
-    QHIC("QHIC", "新疆前海联合财产保险股份有限公司", ""),
-    RSIC("RSIC", "融盛财产保险股份有限公司", ""),
-    SJIC("SJIC", "日本财产保险(中国)有限公司", ""),
-    SMIC("SMIC", "阳光农业相互保险公司", ""),
-    SPIC("SPIC", "三星财产保险(中国)有限公司", ""),
-    TAIC("TAIC", "天安财产保险股份有限公司", ""),
-    TKIC("TKIC", "泰康在线财产保险股份有限公司", "taikang"),
-    TMNF("TMNF", "东京海上日动火灾保险(中国)有限公司", ""),
-    TPBX("TPBX", "安盛天平财产保险股份有限公司", "ansheng"),
-    TPIC("TPIC", "太平财产保险有限公司", "taiping"),
-    TSBX("TSBX", "泰山财产保险股份有限公司", ""),
-    ULIC("ULIC", "合众财产保险股份有限公司", ""),
-    UTIC("UTIC", "众诚汽车保险股份有限公司", ""),
-    XAIC("XAIC", "鑫安汽车保险股份有限公司", ""),
-    XDCX("XDCX", "国任财产保险股份有限公司", "guoren"),
-    YAIC("YAIC", "永安财产保险股份有限公司", "yongan"),
-    YDCX("YDCX", "英大泰和财产保险股份有限公司", ""),
-    YGBX("YGBX", "阳光财产保险股份有限公司", "yangguang"),
-    YPIC("YPIC", "黄河财产保险股份有限公司", ""),
-    YZIC("YZIC", "燕赵财产保险股份有限公司", ""),
-    ZAPA("ZAPA", "众安在线财产保险股份有限公司", "zongan"),
-    ZFIC("ZFIC", "珠峰财产保险股份有限公司", ""),
-    ZKIC("ZKIC", "紫金财产保险股份有限公司", "zijin"),
-    ZLIC("ZLIC", "中路财产保险股份有限公司", ""),
-    ZMBX("ZMBX", "中煤财产保险股份有限公司", "zhongmei"),
-    ZSIC("ZSIC", "浙商财产保险股份有限公司", ""),
-    ZYBX("ZYBX", "中原农业保险股份有限公司", ""),
-    ZYIC("ZYIC", "中意财产保险有限公司", ""),
-    SNPIC("SNPIC", "申能财产保险股份有限公司", "");
-
-    private final String code;
-
-    private final String name;
-
-    private final String pinyin;
-
-}

+ 2 - 3
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/entity/request/QuotationRequest.java

@@ -2,14 +2,13 @@ package com.jzg.quote.bohai.api.entity.request;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.commons.constants.InsuranceRisk;
 import com.jzg.quotation.commons.constant.InsuranceTypeCorrespondence;
+import com.jzg.quotation.commons.constant.enums.quote.KindCode;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
 import com.jzg.quotation.commons.entity.vo.quote.KindInfoVo;
 import com.jzg.quotation.commons.entity.vo.quote.RiskInfoVo;
 import com.jzg.quote.bohai.api.constant.enums.Coverages;
-import com.jzg.quote.bohai.api.constant.enums.InsurKind;
 import com.jzg.quote.bohai.api.entity.BoHaiConfigureParameters;
 import com.jzg.quote.bohai.api.entity.vo.BoHaiQuoteAccidentVo;
 import lombok.Data;
@@ -258,7 +257,7 @@ public class QuotationRequest extends BoHaiBaseRequest {
                 }
                 coveragesDTO.extendInfos = new HashMap<>();
 
-                if (InsurKind.A.getCode().equals(kindCode)) {
+                if (KindCode.A.getCode().equals(kindCode)) {
                     coveragesDTO.setSumInsurd(currentValue);
                 }
                 // 乘客

+ 0 - 1
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quote/bohai/api/util/SignatureUtils.java

@@ -2,7 +2,6 @@ package com.jzg.quote.bohai.api.util;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.jzg.quote.bohai.api.constant.enums.InsuranceEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.Base64Utils;
 

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

@@ -4,6 +4,9 @@ package com.jzg.quotation.commons.constant.enums.quote;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * @description: 车险出单 能源种类代码
  * @author: wenks
@@ -34,4 +37,10 @@ public enum EnergyTypeCode {
         return null;
     }
 
+    private static final String[] NEW_ENERGY = new String[]{ENERGY_TYPE_CODE_1.code, ENERGY_TYPE_CODE_2.code, ENERGY_TYPE_CODE_3.code};
+
+    public static List<String> getNewEnergy() {
+        return Arrays.asList(NEW_ENERGY);
+    }
+
 }

+ 183 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/component/GuoRenRequestApiComponent.java

@@ -1,11 +1,41 @@
 package com.jzg.quote.guoren.api.component;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.component.RequestComponent;
+import com.jzg.quotation.commons.constant.enums.base.InsuranceEnum;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quote.guoren.api.constant.enums.PlatformInterfaceCode;
+import com.jzg.quote.guoren.api.constant.enums.Response;
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+import com.jzg.quote.guoren.api.entity.Request.*;
+import com.jzg.quote.guoren.api.entity.Response.*;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import com.jzg.quote.guoren.api.entity.dto.DrivingInsuranceDTO;
+import com.jzg.quote.guoren.api.entity.dto.RequestDTO;
+import com.jzg.quote.guoren.api.entity.dto.ResponseDTO;
+import com.jzg.quote.guoren.api.entity.vo.GuoRenSpecialAgreementVo;
 import com.jzg.quote.guoren.api.properties.GuoRenApiConfigurationProperties;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @description: 国任财险
  * @author: shenwd
@@ -16,8 +46,159 @@ import org.springframework.web.client.RestTemplate;
 @RequiredArgsConstructor
 public class GuoRenRequestApiComponent {
 
-    private final RestTemplate restTemplate;
-
     private final GuoRenApiConfigurationProperties properties;
 
+    private final RequestComponent requestComponent;
+
+    private ResponseDTO<JSONObject> post(String logId, String message, @Nullable RequestDTO requestBody) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
+        String request = JSON.toJSONString(requestBody);
+        String baseUrl = properties.getBaseUrl();
+        HttpEntity<String> httpEntity = new HttpEntity<>(request, httpHeaders);
+
+//        InsuranceLog.infoLog(logId, "\n\t---------> {} \n\t---------> URL: {} \n\t---------> 请求参数: {}", message, baseUrl, request);
+
+        ResponseEntity<String> exchange = requestComponent.objectPost(baseUrl, httpEntity, String.class);
+        String body1 = exchange.getBody();
+//        InsuranceLog.infoLog(logId, "\n\t---------> {} \n\t---------> 响应参数:{}", message, body1);
+
+        if (body1 == null) {
+            throw new SystemException(message + "接口请求失败");
+        }
+
+        JSONObject jsonObject = JSON.parseObject(body1);
+        Object responseBody = jsonObject.get("RESPONSE_BODY");
+        if(responseBody instanceof String){
+            throw new SystemException((String) responseBody);
+        }
+
+        return JSON.parseObject(body1, new TypeReference<ResponseDTO<JSONObject>>() {
+        });
+    }
+
+    private ResponseDTO<JSONObject> post(Object o, PlatformInterfaceCode platformInterfaceCode) {
+        RequestDTO requestBody = RequestDTO.builRequestDto(o, platformInterfaceCode.getCode(), properties);
+        ResponseDTO<JSONObject> post = post(InsuranceEnum.XDCX.getPinyin(), platformInterfaceCode.getDesc(), requestBody);
+        Response.verification(Response.API_T0000000, post);
+        return post;
+    }
+
+    public <B> B request(Object o, PlatformInterfaceCode platformInterfaceCode, Class<B> bClass) {
+        ResponseDTO<JSONObject> request = post(o, platformInterfaceCode);
+        return request.getResponseBody().toJavaObject(bClass);
+    }
+
+    public JSONObject request(Object o, PlatformInterfaceCode platformInterfaceCode) {
+        ResponseDTO<JSONObject> post = post(o, platformInterfaceCode);
+        return post.getResponseBody();
+    }
+
+
+    /**
+     * 投保单保存
+     */
+    public InsuranceSlipResponse insuranceSlip(QuoteVo quoteVo, String carPriceNum, String orderCode, List<GuoRenSpecialAgreementVo> specialAgreementVo) {
+        //构造请求参数
+        InsuranceSlipRequest req = InsuranceSlipRequest.buildParam(quoteVo, carPriceNum, orderCode, specialAgreementVo);
+        return request(req, PlatformInterfaceCode.API_IIRBT00006, InsuranceSlipResponse.class);
+    }
+
+
+    /**
+     * 提交核保
+     */
+    public SubmitAuditResponse submitAudit(GuoRenApiOrder guoRenApiOrder, ChannelInfoDTO channelInfo) {
+        //构造请求参数
+        SubmitAuditRequest req = SubmitAuditRequest.buildParam(guoRenApiOrder, channelInfo);
+        return request(req, PlatformInterfaceCode.API_IIRBT00007, SubmitAuditResponse.class);
+    }
+
+    /**
+     * 查询非车险保单号
+     */
+    public void queryNoCarPolicyNo(GuoRenApiOrder guoRenApiOrder) {
+        if (guoRenApiOrder.getJyPremium() == null || guoRenApiOrder.getJyPremium().compareTo(new BigDecimal(0)) == 0) {
+            return;
+        }
+
+        //构造请求参数
+        QueryNoCarPolicyNoRequest queryNoCarPolicyNoRequest = new QueryNoCarPolicyNoRequest(StringUtils.isNotEmpty(guoRenApiOrder.getSyApplyNo()) ?
+                guoRenApiOrder.getSyApplyNo() : guoRenApiOrder.getJqApplyNo());
+        QueryNoCarPolicyNoResponse request = request(queryNoCarPolicyNoRequest, PlatformInterfaceCode.API_IIIRBT00052,
+                QueryNoCarPolicyNoResponse.class);
+        QueryNoCarPolicyNoResponse.DataDTO data = request.getData();
+        // 非车保单号
+        List<String> noCarPolicyNo = data.getNoCarPolicyNo();
+        // 非车投保单号
+        List<String> noCarProposalNo = data.getNoCarProposalNo();
+
+        List<DrivingInsuranceDTO> drivingInsuranceDtos = new ArrayList<>();
+        for (int i = 0; i < noCarPolicyNo.size(); i++) {
+            DrivingInsuranceDTO drivingInsuranceDto = new DrivingInsuranceDTO();
+            drivingInsuranceDto.setPolicyNumber(noCarPolicyNo.get(i));
+            drivingInsuranceDto.setApplicationNumber(noCarProposalNo.get(i));
+            drivingInsuranceDtos.add(drivingInsuranceDto);
+        }
+        JSONArray objects = JSON.parseArray(JSON.toJSONString(drivingInsuranceDtos));
+        //guoRenApiOrder.setCrossInsurance(objects);以后注意该数据应如何处理
+    }
+
+
+    /**
+     * 支付获取支付url
+     */
+    public PayResponse.DataDTO getPaid(GuoRenApiOrder guoRenApiOrder, ChannelInfoDTO channelInfo) {
+        //构造请求参数
+        PayRequest req = PayRequest.buildParam(guoRenApiOrder, properties.getRedirectUrl(), channelInfo);
+        PayResponse payResp = request(req, PlatformInterfaceCode.API_IIRBT00008, PayResponse.class);
+        if (null != payResp) {
+            return payResp.getData();
+        }
+        return null;
+    }
+
+    /**
+     * 已核投保单注销
+     * @param req
+     * @return
+     */
+    public IIRBT00012Response proposalPolicyLogout(IIRBT00012Request req) {
+        return request(req, PlatformInterfaceCode.API_IIRBT00012, IIRBT00012Response.class);
+    }
+
+    /**
+     * 通过二维码扫描获取电子投保单签名
+     */
+    public SignatureResponse signature(GuoRenApiOrder guoRenApiOrder) {
+        //构造请求参数
+        SignatureRequest signatureRequest = new SignatureRequest();
+        signatureRequest.setProposalNoCI(guoRenApiOrder.getJqApplyNo());
+        signatureRequest.setProposalNoBI(guoRenApiOrder.getSyApplyNo());
+        return request(signatureRequest, PlatformInterfaceCode.API_IIIRBT00055, SignatureResponse.class);
+    }
+
+    /**
+     * 电子保单
+     */
+    public PolicyResponse policyPrint(String policyNo) {
+        Map<String, String> m = new HashMap<>();
+        m.put("policyNo", policyNo);
+        PolicyResponse resp = request(m, PlatformInterfaceCode.API_IIRBT00027, PolicyResponse.class);
+        if (null != resp && resp.getResultCode() == 0) {
+            return resp;
+        }
+        return null;
+    }
+
+    /**
+     * 获取非车电子保单下载链接
+     */
+    public String noCarElectronicPolicy(String channelCode, String othBusinessNo, String policyNo) {
+        NoCarElectronicPolicyRequest noCarElectronicPolicyRequest = new NoCarElectronicPolicyRequest(channelCode, othBusinessNo, policyNo);
+        NoCarElectronicPolicyResponse response = request(noCarElectronicPolicyRequest, PlatformInterfaceCode.API_IIRBT00089,
+                NoCarElectronicPolicyResponse.class);
+        return response.getData().getEpolicyUrl();
+    }
 }

+ 23 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/BaseTaxation.java

@@ -0,0 +1,23 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 国任财险 减免税计算方式
+ * @author: shenwd
+ * @date: 2025/3/14 17:00
+ **/
+@Getter
+@AllArgsConstructor
+public enum BaseTaxation {
+
+    BR_1("1", "减免金额"),
+    BR_2("2", "减免比例"),
+    BR_3("3", "免税");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 99 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/CarKindCode.java

@@ -0,0 +1,99 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 国任财险 车辆种类
+ * @author: shenwd
+ * @date: 2025/3/16 15:59
+ **/
+@Getter
+@AllArgsConstructor
+public enum CarKindCode {
+
+    A0("A0", "客车"),
+    A1("A1", "警车"),
+    A2("A2", "普通救护车"),
+    A3("A3", "普通囚车"),
+    A4("A4", "普通殡葬车"),
+    G0("G0", "挂车"),
+    G1("G1", "罐式挂车"),
+    G2("G2", "特种二挂"),
+    G3("G3", "特种三挂"),
+    H0("H0", "载货机动车"),
+    H1("H1", "低速载货汽车"),
+    H2("H2", "三轮汽车"),
+    H3("H3", "厢式货车"),
+    H4("H4", "客货两用车"),
+    H5("H5", "半挂牵引车"),
+    H6("H6", "自卸车"),
+    H7("H7", "电瓶运输车"),
+    H8("H8", "起重运输车"),
+    J0("J0", "拖拉机"),
+    J1("J1", "大中型拖拉机"),
+    J2("J2", "联合收割机"),
+    J3("J3", "合规变拖"),
+    J4("J4", "超标变拖"),
+    M1("M1", "两轮摩托车"),
+    M5("M5", "正三轮摩托车"),
+    M6("M6", "侧三轮摩托车"),
+    N0("N0", "农用运输车"),
+    T1("T1", "起重车"),
+    T10("T10", "专用净水车"),
+    T11("T11", "罐式货车"),
+    T12("T12", "保温车"),
+    T13("T13", "推土车"),
+    T14("T14", "压路车"),
+    T15("T15", "矿山车"),
+    T16("T16", "油汽田操作用车"),
+    T17("T17", "清扫车"),
+    T18("T18", "水泥泵车"),
+    T19("T19", "牵引车"),
+    T2("T2", "装卸车"),
+    T20("T20", "清障车"),
+    T21("T21", "雷达车"),
+    T22("T22", "X光检测车"),
+    T23("T23", "电信工程车"),
+    T24("T24", "电力工程车"),
+    T25("T25", "专业拖车"),
+    T26("T26", "运钞车"),
+    T27("T27", "警用车"),
+    T3("T3", "工程车"),
+    T4("T4", "监测车"),
+    T5("T5", "邮电车"),
+    T6("T6", "消防车"),
+    T7("T7", "清洁车"),
+    T8("T8", "医疗车"),
+    T9("T9", "救护车"),
+    TA("TA", "一类特种车(油罐车、气罐车、液罐车、冷藏车)"),
+    TB("TB", "二类特种车(起重车、装卸车、工程车、监测车、邮电车、消防车、清洁车、医疗车、救护车)"),
+    TC("TC", "电视转播车"),
+    TD("TD", "升降车"),
+    TE("TE", "搅拌车"),
+    TF("TF", "挖掘车"),
+    TG("TG", "推土车"),
+    TH("TH", "压路车"),
+    TI("TI", "矿用车"),
+    TJ("TJ", "油汽田操作用车"),
+    TK("TK", "清扫车"),
+    TL("TL", "水泥泵车"),
+    TM("TM", "牵引车"),
+    TN("TN", "清障车"),
+    TO("TO", "雷达车"),
+    TP("TP", "油罐车"),
+    TQ("TQ", "气罐车"),
+    TR("TR", "液罐车"),
+    TS("TS", "冷藏车"),
+    TT("TT", "集装箱拖头"),
+    TU("TU", "X光检测车"),
+    TV("TV", "电信工程车"),
+    TW("TW", "电力工程车"),
+    TX("TX", "专业拖车"),
+    TY("TY", "运钞车"),
+    TZ("TZ", "警用车");
+
+    private final String code;
+
+    private final String desc;
+}

+ 29 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/CategoriesOfVehicles.java

@@ -0,0 +1,29 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 国任财险 车辆大类
+ * @author: shenwd
+ * @date: 2025/3/16 15:53
+ **/
+@Getter
+@AllArgsConstructor
+public enum CategoriesOfVehicles {
+    COV_A0("A", "客车"),
+    COV_G("G", "挂车"),
+    COV_A1("H", "货车"),
+    COV_J("J", "拖拉机"),
+    COV_M("M", "摩托车"),
+    COV_T1("T1", "特种车一"),
+    COV_T2("T2", "特种车二"),
+    COV_T3("T3", "特种车三"),
+    COV_T4("T4", "特种车四");
+
+    private final String code;
+
+    private final String desc;
+
+    public static final String TITLE = "COV_";
+}

+ 21 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/ClauseTypeSystem.java

@@ -0,0 +1,21 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/14 16:17
+ **/
+@Getter
+@AllArgsConstructor
+public enum ClauseTypeSystem {
+    CTS_04("04", "默认"),
+    CTS_05("05", "新能源");
+
+    private final String code;
+
+    private final String desc;
+}

+ 64 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/InsurKindGuoRen.java

@@ -0,0 +1,64 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 险种   保险种类   国任
+ * @author: shenwd
+ * @date: 2025/3/14 16:37
+ **/
+@Getter
+@AllArgsConstructor
+public enum InsurKindGuoRen {
+    B("20B", "机动车第三者责任保险", "33", " 1  1"),
+    A("20A", "机动车损失保险", "34", " 1  1"),
+    D3("20D3", "机动车车上人员责任保险(驾驶员)", "35", " 1  1"),
+    D4("20D4", "机动车车上人员责任保险(乘客)", "37", " 1  1"),
+
+    MJ1("20E1", "附加绝对免赔率特约险(机动车损失保险)", "39", " 2  0"),
+    MJ2("20E3", "附加绝对免赔率特约险(机动车第三者责任保险)", "41", " 2  0"),
+    MJ3("20E4", "附加绝对免赔率特约险(机动车车上人员责任保险(司机))", "42", " 2  0"),
+    MJ4("20E5", "附加绝对免赔率特约险(机动车车上人员责任保险(乘客))", "43", " 2  0"),
+    BD("20J", "附加法定节假日限额翻倍险", "45", " 2  0"),
+    L("20L", "附加车身划痕损失险", "47", " 2  0"),
+
+    SY_FJ_YBW1("20Y", "附加医保外医疗费用责任险-三者险", "54", " 2  0"),
+    SY_FJ_YBW3("20Y1", "附加医保外医疗费用责任险-驾驶员", "55", " 2  0"),
+    SY_FJ_YBW2("20Y2", "附加医保外医疗费用责任险-乘客", "56", " 2  0"),
+
+    B_N("21B", "新能源汽车第三者责任保险", "33", " 1  1"),
+    A_N("21A", "新能源汽车损失保险", "34", " 1  1"),
+    D3_N("21D3", "新能源汽车车上人员责任保险(司机", "35", " 1  1"),
+    D4_N("21D4", "新能源汽车车上人员责任保险(乘客)", "37", " 1  1"),
+
+    TY1("20Z1", "道路救援服务特约条款", "57", " 2  1"),
+    TY2("20Z2", "车辆安全检测特约条款", "58", " 2  1"),
+    TY3("20Z3", "代为驾驶服务特约条款", "59", " 2  1"),
+    TY4("20Z4", "代为送检服务特约条款", "38", " 2  1"),
+
+    TY1_N("21Z1", "道路救援服务特约条款(新能源车)", "66", " 2  1"),
+    TY2_N("21Z2", "车辆安全检测特约条款(新能源车)", "67", " 2  1"),
+    TY3_N("21Z3", "代为驾驶服务特约条款(新能源车)", "68", " 2  1"),
+    TY4_N("21Z4", "代为送检服务特约条款(新能源车)", "69", "  2  1"),
+    ;
+
+    public static InsurKindGuoRen matchKey(String key) {
+        InsurKindGuoRen result = null;
+        for (InsurKindGuoRen e : values()) {
+            if (e.getCode() == key) {
+                result = e;
+                break;
+            }
+        }
+        return result;
+    }
+
+    private final String code;
+
+    private final String desc;
+
+    private final String itemKindNo;
+
+    private final String flag;
+}

+ 57 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/PlatformInterfaceCode.java

@@ -0,0 +1,57 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 国任财险 api类型
+ * @author: shenwd
+ * @date: 2025/3/14 11:10
+ **/
+@Getter
+@AllArgsConstructor
+public enum PlatformInterfaceCode {
+
+    API_IIRBT00002("IIRBT00002", "车型(决策单元)查询"),
+
+    API_IIRBT00003("IIRBT00003", "车价查询"),
+
+    API_IIRBT00004("IIRBT00004", "保费计算"),
+
+    API_IIRBT00005("IIRBT00005", "获取特别约定"),
+
+    API_IIRBT00006("IIRBT00006", "投保单保存"),
+
+    API_IIRBT00007("IIRBT00007", "提交核保"),
+
+    API_IIRBT00008("IIRBT00008", "支付接口"),
+
+    API_IIRBT00009("IIRBT00009", "VIN码查询(针对进口车型)"),
+
+    API_IIRBT00010("IIRBT00010", "投保单状态查询"),
+
+    API_IIRBT00012("IIRBT00012", "已核投保单注销"),
+
+    API_IIRBT00017("IIRBT00017", "匹配多条车型记录需再次做车价查询"),
+
+    API_IIRBT00018("IIRBT00018", "获取出单所需的基本信息"),
+
+    API_IIRBT00027("IIRBT00027", "加密保单号并获取电子保单(标识)下载链接"),
+
+    API_IIRBT00046("IIRBT00046", "获取电子投保单链接(核保通过状态)"),
+
+    API_IIIRBT00052("IIIRBT00052", "通过车险投保单号查询非车投保单号"),
+
+    API_IIIRBT00053("IIIRBT00053", "查询非车商品信息"),
+
+    API_IIIRBT00055("IIIRBT00055", "通过二维码扫描获取电子投保单签名"),
+
+    API_IIIRBT00054("IIIRBT00054", "创建非车订单"),
+
+    API_IIRBT00089("IIRBT00089", "获取非车电子保单下载链接");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 27 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/RelifReason.java

@@ -0,0 +1,27 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 国任财险 纳税类型
+ * @author: shenwd
+ * @date: 2025/3/14 16:57
+ **/
+@AllArgsConstructor
+@Getter
+public enum RelifReason {
+    RR_1("1", "正常缴税"),
+    RR_2("2", "免税"),
+    RR_3("3", "减税"),
+    RR_4("4", "已完税"),
+    RR_6("6", "拒缴"),
+    RR_8("8", "不征");
+
+    private final String code;
+
+    private final String desc;
+
+
+    public static final String TITLE = "RR_";
+}

+ 30 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/Response.java

@@ -0,0 +1,30 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quote.guoren.api.entity.dto.ResponseDTO;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/14 11:45
+ **/
+@Getter
+@AllArgsConstructor
+public enum Response {
+
+    API_T0000000("T0000000", "请求成功");
+
+    private final String code;
+
+    private final String desc;
+
+    public static void verification(Response response, ResponseDTO<JSONObject> bResponseDto) {
+        if (!response.code.equals(bResponseDto.getPlatformCode())) {
+            throw new SystemException(bResponseDto.getPlatformMsg());
+        }
+    }
+
+}

+ 108 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/TrafficManagementVehicleType.java

@@ -0,0 +1,108 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * @description: 交通管理车辆类型
+ * @author: shenwd
+ * @date: 2025/3/16 15:55
+ **/
+@Getter
+@AllArgsConstructor
+public enum TrafficManagementVehicleType {
+    H11("H11", "重型普通货车", 38, 0),
+    H12("H12", "重型厢式货车", 39, 0),
+    H13("H13", "重型封闭货车", 40, 0),
+    H14("H14", "重型罐式货车", 41, 0),
+    H15("H15", "重型平板货车", 42, 0),
+    H16("H16", "重型集装厢车", 43, 0),
+    H17("H17", "重型自卸货车", 44, 0),
+    H18("H18", "重型特殊结构货车", 45, 0),
+    H21("H21", "中型普通货车", 46, 0),
+    H22("H22", "中型厢式货车", 47, 0),
+    H23("H23", "中型封闭货车", 48, 0),
+    H24("H24", "中型罐式货车", 49, 0),
+    H25("H25", "中型平板货车", 50, 0),
+    H26("H26", "中型集装厢车", 51, 0),
+    H27("H27", "中型自卸货车", 52, 0),
+    H28("H28", "中型特殊结构货车", 53, 0),
+    H31("H31", "轻型普通货车", 54, 0),
+    H32("H32", "轻型厢式货车", 55, 0),
+    H33("H33", "轻型封闭货车", 56, 0),
+    H34("H34", "轻型罐式货车", 57, 0),
+    H35("H35", "轻型平板货车", 58, 0),
+    H37("H37", "轻型自卸货车", 59, 0),
+    H38("H38", "轻型特殊结构货车", 60, 0),
+    H39("H39", "轻型仓栅式货车", 60, 0),
+    H41("H41", "微型普通货车", 61, 0),
+    H42("H42", "微型厢式货车", 62, 0),
+    H43("H43", "微型封闭货车", 63, 0),
+    H44("H44", "微型罐式货车", 64, 0),
+    H45("H45", "微型自卸货车", 65, 0),
+    H46("H46", "微型特殊结构货车", 66, 0),
+    H51("H51", "低速普通货车", 67, 0),
+    H52("H52", "低速厢式货车", 68, 0),
+    H53("H53", "罐式低速货车", 69, 0),
+    H54("H54", "低速自卸货车", 70, 0),
+
+    J11("J11", "轮式装载机械", 71, 0),
+    J12("J12", "轮式挖掘机械", 72, 0),
+    J13("J13", "轮式平地机械", 73, 0),
+    K11("K11", "大型普通客车", 74, 0),
+    K12("K12", "大型双层客车", 75, 0),
+    K13("K13", "大型卧铺客车", 76, 0),
+    K14("K14", "大型铰接客车", 77, 0),
+    K15("K15", "大型越野客车", 78, 0),
+    K21("K21", "中型普通客车", 79, 0),
+    K22("K22", "中型双层客车", 80, 0),
+    K23("K23", "中型卧铺客车", 81, 0),
+    K24("K24", "中型铰接客车", 82, 0),
+    K25("K25", "中型越野客车", 83, 0),
+    K31("K31", "小型普通客车", 84, 0),
+    K32("K32", "小型越野客车", 85, 0),
+    K33("K33", "轿车", 86, 0),
+    K41("K41", "微型普通客车", 87, 0),
+    K42("K42", "微型越野客车", 88, 0),
+    K43("K43", "微型轿车", 89, 0);
+//    M11("M11", "普通正三轮摩托车", 90, 0),
+//    M12("M12", "轻便正三轮摩托车", 91, 0),
+//    M13("M13", "正三轮载客摩托车", 92, 0),
+//    M14("M14", "正三轮载货摩托车", 93, 0),
+//    M15("M15", "侧三轮摩托车", 94, 0),
+//    M21("M21", "普通二轮摩托车", 95, 0),
+//    M22("M22", "轻便二轮摩托车", 96, 0),
+//    N11("N11", "三轮农用运输车", 97, 0),
+//    Q11("Q11", "重型半挂牵引车", 98, 0),
+//    Q21("Q21", "中型半挂牵引车", 99, 0),
+//    Q31("Q31", "轻型半挂牵引车", 100, 0),
+//    S("S", "特种作业专用车", 101, 0),
+//    T11("T11", "大型轮式拖拉机", 102, 0),
+//    T21("T21", "中型轮式拖拉机", 103, 0),
+//    T22("T22", "手扶拖拉机", 104, 0),
+//    T23("T23", "手扶变形运输机", 105, 0),
+//    X99("X99", "其它", 106, 0),
+//    Z11("Z11", "大型专项作业车", 107, 0),
+//    Z21("Z21", "中型专项作业车", 108, 0),
+//    Z31("Z31", "小型专项作业车", 109, 0),
+//    Z41("Z41", "微型专项作业车", 110, 0),
+//    Z51("Z51", "重型专项作业车", 111, 0),
+//    Z71("Z71", "轻型专项作业车", 112, 0);
+
+    // 编号
+    private final String code;
+    // 说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+
+    public static String getDesc(String code){
+        TrafficManagementVehicleType trafficManagementVehicleType = Arrays.stream(TrafficManagementVehicleType.values()).filter(x -> x.code.equals(code)).findFirst().orElse(null);
+        return !Objects.isNull(trafficManagementVehicleType) ? trafficManagementVehicleType.getDesc() : "";
+    }
+}

+ 33 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/UseNatureCode.java

@@ -0,0 +1,33 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/16 15:51
+ **/
+@Getter
+@AllArgsConstructor
+public enum UseNatureCode {
+
+    UNC_8A("8A",	"家庭自用"),
+    UNC_8B("8B",	"非营业企业"),
+    UNC_8D("8D",	"非营业个人"),
+    UNC_8E("8E",	"非营业党政机关"),
+    UNC_8F("8F",	"非营业事业团体"),
+    UNC_9B("9B",	"营业城市公交"),
+    UNC_9C("9C",	"营业公路客运"),
+    UNC_9D("9D",	"营业货运"),
+    UNC_9E("9E",	"营业旅游客运"),
+    UNC_9F("9F",	"营业出租 预约 出租客运"),
+    UNC_9G("9G",	"营业租赁"),
+    UNC_9H("9H",	"危化品运输"),
+    UNC_7A("7A", " 兼用型"),
+    UNC_7B("7B",	"运输型");
+
+    private final String code;
+
+    private final String desc;
+}

+ 31 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/constant/enums/UseNatureCodeMapping.java

@@ -0,0 +1,31 @@
+package com.jzg.quote.guoren.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+* @description: 使用性质映射
+* @author: shenwd
+* @date: 2025/3/16 15:50
+**/
+@Getter
+@AllArgsConstructor
+public enum UseNatureCodeMapping {
+    UM_01("01", "营业出租租赁", UseNatureCode.UNC_9F.getCode()),
+    UM_02("02", "营业城市公交", UseNatureCode.UNC_9B.getCode()),
+    UM_03("03", "营业公路客运", UseNatureCode.UNC_9C.getCode()),
+    UM_04("04", "营业货运", UseNatureCode.UNC_9D.getCode()),
+
+    UM_05("05", "家庭自用", UseNatureCode.UNC_8A.getCode()),
+    UM_06("06", "非营业机关", UseNatureCode.UNC_8E.getCode()),
+    UM_07("07", "非营业企业", UseNatureCode.UNC_8B.getCode()),
+    UM_08("08", "非营业货运", UseNatureCode.UNC_8D.getCode());
+
+    private final String code;
+
+    private final String desc;
+
+    private final String useNatureCode;
+
+    public static final String TITLE = "UM_";
+}

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

@@ -1,9 +1,54 @@
 package com.jzg.quote.guoren.api.entity;
 
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.math.BigDecimal;
+
 /**
  * @description: 国任财险需要在mongodb中保存的数据
  * @author: shenwd
  * @date: 2025/3/14 10:18
  **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Document("huatai.api.order")
 public class GuoRenApiOrder {
+
+    @Id
+    private String id;
+
+    /**
+     * 交互唯一订单 OrderBase类的ordersNo
+     */
+    private String ordersNo;
+
+    /**
+     * 国任财险 交强险投保单号
+     */
+    private String jqApplyNo;
+
+    /**
+     * 国任财险 商业险投保单号
+     */
+    private String syApplyNo;
+
+    /**
+     * 国任财险 驾意险保费
+     */
+    private BigDecimal jyPremium;
+
+    /**
+     * 国任财险 商业险保费
+     */
+    private BigDecimal syPremium;
+
+    /**
+     * 国任财险 交强险保费
+     */
+    private BigDecimal jqPremium;
 }

+ 41 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/GuoRenConfigureParameters.java

@@ -0,0 +1,41 @@
+package com.jzg.quote.guoren.api.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.standard.ConfigureParameters;
+import lombok.Data;
+
+import java.io.Serial;
+
+/**
+ * @description: 国任财险 API配置信息
+ * @author: shenwd
+ * @date: 2025/3/14 10:47
+ **/
+@Data
+public class GuoRenConfigureParameters implements ConfigureParameters {
+
+    @Serial
+    private static final long serialVersionUID = -7246413263114229371L;
+
+    private String baseUrl;
+
+    private String uploadUrl;
+
+    private String redirectUrl;
+
+    // 保单
+    private String policyUrl;
+    // 标志
+    private String policyFlagUrl;
+    // 服务代码
+    private String serveCode;
+    // 渠道编码
+    private String channelCode;
+    // 访问账号
+    private String interfaceUserCode;
+    // 访问口令
+    private String interfacePwd;
+    // 环境类型 测试环境填”Y”;生产环境填”N”
+    private String iftest;
+}

+ 28 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/CarPriceMuchRequest.java

@@ -0,0 +1,28 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.guoren.api.entity.Response.CarPriceMuchResponse;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: 车价查询多条  请求
+ * @author: shenwd
+ * @date: 2025/3/16 17:16
+ **/
+@NoArgsConstructor
+@Data
+public class CarPriceMuchRequest {
+
+    /**
+     * 车价查询返回inputvo
+     */
+    @JsonProperty(value = "uuid")
+    @JSONField(name = "uuid")
+    private String uuid;
+
+    @JsonProperty(value = "carPriceQueryRespVo")
+    @JSONField(name = "carPriceQueryRespVo")
+    private CarPriceMuchResponse.DataDTO.CarsDTO carPriceMuchResp;
+}

+ 810 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/CarPriceRequest.java

@@ -0,0 +1,810 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.constant.enums.quote.EnergyTypeCode;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.CustomerInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.RiskInfoVo;
+import com.jzg.quote.guoren.api.constant.enums.*;
+import com.jzg.quote.guoren.api.entity.Response.VinQueryResponse;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 
+ * @author: shenwd
+ * @date: 2025/3/16 14:37
+ **/
+@NoArgsConstructor
+@Data
+public class CarPriceRequest {
+
+    /**
+     * 保单主对象
+     */
+    @JsonProperty(value = "bc")
+    @JSONField(name = "bc")
+    private BcDTO bc;
+
+    @JsonProperty(value = "basePartVo")
+    @JSONField(name = "basePartVo")
+    private BasePartVoDTO basePartVo;
+
+    @JsonProperty(value = "bi")
+    @JSONField(name = "bi")
+    private BiDTO bi;
+
+    @JsonProperty(value = "ci")
+    @JSONField(name = "ci")
+    private CiDTO ci;
+
+    @JsonIgnore
+    public static CarPriceRequest buildCarPriceParam(QuoteVo quoteVo, VinQueryResponse.DataDTO vinQ, ChannelInfoDTO channelInfo) {
+        CarInfoVo carInfo = quoteVo.getCarInfoVo();
+        CustomerInfoVo ownerInfo = quoteVo.getOwnersInfo();
+        //交强
+        RiskInfoVo ciRiskInfo = quoteVo.getCiRiskInfoVo();
+        //商业
+        RiskInfoVo biRiskInfo = quoteVo.getBiRiskInfoVo();
+        CarPriceRequest req = new CarPriceRequest();
+        BcDTO bc = new BcDTO();
+        bc.setLoginComCode(channelInfo.getComCode());
+        /**
+         *  主信息====================
+         */
+        BcDTO.PrpTmainDTO prpTmain = new BcDTO.PrpTmainDTO();
+        //机构代码
+        prpTmain.setComCode(channelInfo.getComCode());
+        prpTmain.setArgueSolution("1");
+
+
+        prpTmain.setUnitMaintenanceName(channelInfo.getUnitMaintenanceName());
+        prpTmain.setBusinessNature("2");
+        //渠道标志(我司提供)
+        prpTmain.setActivityPlan("TQDL");
+        //签单时间	signDate	字符串	Y	默认为投保当天
+        prpTmain.setSignDate(DateUtil.today());
+        prpTmain.setHandlerCode(channelInfo.getHandlerCode());
+        prpTmain.setChanneltypeoneName(channelInfo.getChannelTypeOneName());
+        prpTmain.setUnitMaintenanceCode(channelInfo.getUnitMaintenanceCode());
+        prpTmain.setUnitmainTenanceType1(channelInfo.getUnitmainTenanceType1());
+        prpTmain.setUnitmainTenanceType2(channelInfo.getUnitmainTenanceType2());
+        prpTmain.setChanneltypetwoName(channelInfo.getChannelTypeTwoName());
+        prpTmain.setHandler1Code(channelInfo.getHandlerCode());
+        prpTmain.setComName(channelInfo.getComName());
+        prpTmain.setComCode(channelInfo.getComCode());
+        prpTmain.setOperateDate(DateUtil.today());
+        //起保日期      商业险起保日期,如果单交强,传交强起保日期
+        prpTmain.setStartDate(biRiskInfo == null ? ciRiskInfo.getStartDate() : biRiskInfo.getStartDate());
+        prpTmain.setEProposalFlag("1");
+        //购车发票日期
+        prpTmain.setBusiness(carInfo.getIssueDate());
+
+        prpTmain.setAgentName(channelInfo.getAgentName());
+        prpTmain.setChanneltypetwoName(channelInfo.getChannelTypeTwoName());
+        prpTmain.setChanneltypeoneName(channelInfo.getChannelTypeOneName());
+        //代理人
+        prpTmain.setAgentCode(channelInfo.getAgentCode());
+        prpTmain.setAgreementNo(channelInfo.getAgreementNo());
+        prpTmain.setUnitmainTenanceType2Name(channelInfo.getUnitmainTenanceType2Name());
+        prpTmain.setChanneltypeone(channelInfo.getChannelTypeOne());
+        prpTmain.setHandler1Name(channelInfo.getHandler1Name());
+        prpTmain.setChanneltypetwo(channelInfo.getChannelTypeTwo());
+        /**
+         *  车辆信息====================
+         */
+        BcDTO.PrpTitemCarDTO prpTitemCar = new BcDTO.PrpTitemCarDTO();
+        prpTitemCar.setFrameNo(carInfo.getVinNo());
+        prpTitemCar.setLicenseNo(carInfo.getLicenseNo());
+        //类比排量
+        prpTitemCar.setExhaustScalelb(vinQ.getExHaustScale());
+        //排量
+        prpTitemCar.setExhaustScale(vinQ.getExHaustScale());
+//        prpTitemCar.setTonCount(carInfo.getLimitLoad());
+        prpTitemCar.setTonCount(vinQ.getTonCount());
+        //新车标识	newCarFlag	字符串	新车传空,非新车-1
+        prpTitemCar.setNewCarFlag(StringUtils.isEmpty(carInfo.getLicenseNo()) ? "" : "-1");
+
+        prpTitemCar.setLicenseKindCode("02");
+        prpTitemCar.setPurchasePrice(vinQ.getPurchasePriceSZ());
+        prpTitemCar.setClauseType("F54");
+        prpTitemCar.setVinNo(carInfo.getVinNo());
+        prpTitemCar.setVehicleBrand(vinQ.getBrandNameBC());
+//        prpTitemCar.setVehicleBrand(carInfo.getCarBrand());
+        prpTitemCar.setCompleteKerbMass(vinQ.getCompleteKerbMass());
+        prpTitemCar.setLoanVehicleFlag("0");
+        prpTitemCar.setChgOwnerFlag(carInfo.isTransfer() ? "1" : "0");
+        prpTitemCar.setProductType("0101");
+
+        // 新能源车
+        if (EnergyTypeCode.getNewEnergy().contains(vinQ.getFuelType())) {
+            prpTitemCar.setClauseTypeSystem(ClauseTypeSystem.CTS_05.getCode());
+            prpTitemCar.setTermsSystem(ClauseTypeSystem.CTS_05.getCode());
+            prpTitemCar.setNewEnergyFlag("1");
+        } else {
+            prpTitemCar.setClauseTypeSystem(ClauseTypeSystem.CTS_04.getCode());
+            prpTitemCar.setTermsSystem(ClauseTypeSystem.CTS_04.getCode());
+            prpTitemCar.setNewEnergyFlag("0");
+        }
+
+        prpTitemCar.setEngineNo(carInfo.getEngineNo());
+        prpTitemCar.setBrandName(vinQ.getBrandNameBC());
+        // 发证日期
+        prpTitemCar.setCertifiCateDate(carInfo.getIssueDate());
+
+        //使用性质  8A	家庭自用
+        String vehicleUse = carInfo.getVehicleUseCode();
+        UseNatureCodeMapping useNatureCodeMapping = UseNatureCodeMapping.valueOf(UseNatureCodeMapping.TITLE + vehicleUse);
+        prpTitemCar.setUseNatureCode(useNatureCodeMapping.getUseNatureCode());
+        // 初登日期
+        prpTitemCar.setEnrollDate(carInfo.getRegisterDate());
+        //核定载客数
+        prpTitemCar.setSeatCount(carInfo.getSeatCount());
+        prpTitemCar.setFuelType(vinQ.getFuelType());
+
+        prpTitemCar.setTonCountlb(vinQ.getTonCount());
+//        prpTitemCar.setTonCountlb("0");
+        prpTitemCar.setVinClick("0");
+
+        String cimodelclass = carInfo.getCarKindCode();
+        CategoriesOfVehicles categoriesOfVehicles = CategoriesOfVehicles.valueOf( CategoriesOfVehicles.TITLE + cimodelclass);
+        if(categoriesOfVehicles.getCode().equals(CategoriesOfVehicles.COV_A1.getCode())){
+            TrafficManagementVehicleType trafficManagementVehicleType = TrafficManagementVehicleType.valueOf(carInfo.getCarTypeCode());
+            // 货车修改
+            if (trafficManagementVehicleType.getDesc().contains("罐式")) {
+                prpTitemCar.setCarKindCode(CarKindCode.T11.getCode());
+            } else {
+                prpTitemCar.setCarKindCode(CarKindCode.H3.getCode());
+            }
+        }
+
+        prpTitemCar.setMaincarKindCode(categoriesOfVehicles.getCode());
+
+        //过户日期
+
+        prpTitemCar.setChgOwnerDate(carInfo.getIssueDate());
+        /**
+         * vin car
+         */
+        prpTitemCar.setBrandCode(vinQ.getBrandCode());
+        prpTitemCar.setModelCode(vinQ.getModelCodeBC());
+        prpTitemCar.setModelName(vinQ.getBrandNameBC());
+        prpTitemCar.setNewFuelModel(vinQ.getNewFuelModel());
+        /**
+         * 车主信息
+         */
+        prpTitemCar.setCarOwner(ownerInfo.getName());
+        prpTitemCar.setCarOwnerIdentifyNumber(ownerInfo.getIdentifyNumber());
+        prpTitemCar.setCarOwnerIdentifyType("01");
+        //车主客户性质	carOwnerNature	字符串	Y	1:机关 2:企业 0:个人
+        prpTitemCar.setCarOwnerNature("0");
+        prpTitemCar.setIDValidStartDate(ownerInfo.getIdentifyValidDate());
+        prpTitemCar.setIdValidDate(ownerInfo.getIdentifyValidEndDate());
+        /**
+         *  整合
+         */
+        bc.setPrpTmain(prpTmain);
+        bc.setPrpTitemCar(prpTitemCar);
+        //登录机构
+        bc.setLoginComCode(channelInfo.getComCode());
+
+        //保费计算折扣    0是第一次计算保费,1是价费联动,2是批折扣,默认0
+        bc.setFeeandDiscountFlag("0");
+        //险种信息  0500-车险 摩托车、拖拉机的商业险-0521
+        bc.setRiskCode("0500");
+        //是否涉及农险业务  默认0
+        bc.setAgriFlagBC("0");
+
+        BasePartVoDTO basePartVo = new BasePartVoDTO();
+        basePartVo.setEditType("EditType_ProposalInput");
+        basePartVo.setInputType("34");
+        basePartVo.setLoginComCode(channelInfo.getComCode());
+        basePartVo.setLoginComCodeSub(channelInfo.getComCode().substring(0, 2));
+//        basePartVo.setLoginRiskCode("0500");
+        basePartVo.setUserCode(channelInfo.getAgentCode());
+
+        req.setBi(new BiDTO());
+        req.setCi(new CiDTO());
+
+        req.setBc(bc);
+        req.setBasePartVo(basePartVo);
+        return req;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BcDTO {
+
+        /**
+         * 车辆信息
+         */
+        @JsonProperty(value = "prpTitemCar")
+        @JSONField(name = "prpTitemCar")
+        private PrpTitemCarDTO prpTitemCar;
+
+        /**
+         * 登陆机构
+         */
+        @JsonProperty(value = "loginComCode")
+        @JSONField(name = "loginComCode")
+        private String loginComCode;
+
+        /**
+         * 主表数据
+         */
+        @JsonProperty(value = "prpTmain")
+        @JSONField(name = "prpTmain")
+        private PrpTmainDTO prpTmain;
+
+        /**
+         * 保费计算折扣
+         */
+        @JsonProperty(value = "feeandDiscountFlag")
+        @JSONField(name = "feeandDiscountFlag")
+        private String feeandDiscountFlag;
+
+        /**
+         * 险种信息
+         */
+        @JsonProperty(value = "riskCode")
+        @JSONField(name = "riskCode")
+        private String riskCode;
+
+        /**
+         * 是否涉及农险业
+         */
+        @JsonProperty(value = "agriFlagBC")
+        @JSONField(name = "agriFlagBC")
+        private String agriFlagBC;
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTitemCarDTO {
+            /**
+             * 车架号
+             */
+            @JsonProperty(value = "frameNo")
+            @JSONField(name = "frameNo")
+            private String frameNo;
+
+            /**
+             * 车牌
+             */
+            @JsonProperty(value = "licenseNo")
+            @JSONField(name = "licenseNo")
+            private String licenseNo;
+
+            /**
+             * 是否新能源
+             * 1是0否
+             */
+            @JsonProperty(value = "newEnergyFlag")
+            @JSONField(name = "newEnergyFlag")
+            private String newEnergyFlag;
+
+            /**
+             * 类比排量
+             */
+            @JsonProperty(value = "exhaustScalelb")
+            @JSONField(name = "exhaustScalelb")
+            private String exhaustScalelb;
+
+            /**
+             * 总质量
+             */
+            @JsonProperty(value = "tonCount")
+            @JSONField(name = "tonCount")
+            private String tonCount;
+
+            /**
+             * 新车标识
+             */
+            @JsonProperty(value = "newCarFlag")
+            @JSONField(name = "newCarFlag")
+            private String newCarFlag;
+
+            /**
+             * 车辆种类
+             */
+            @JsonProperty(value = "carKindCode")
+            @JSONField(name = "carKindCode")
+            private String carKindCode;
+
+            /**
+             * 属性号牌种类
+             */
+            @JsonProperty(value = "licenseKindCode")
+            @JSONField(name = "licenseKindCode")
+            private String licenseKindCode;
+
+            /**
+             * 新车购置价
+             */
+            @JsonProperty(value = "purchasePrice")
+            @JSONField(name = "purchasePrice")
+            private String purchasePrice;
+
+            /**
+             * 条款体系
+             * 默认F54
+             */
+            @JsonProperty(value = "clauseType")
+            @JSONField(name = "clauseType")
+            private String clauseType;
+
+            /**
+             * Vin码
+             */
+            @JsonProperty(value = "vinNo")
+            @JSONField(name = "vinNo")
+            private String vinNo;
+
+            /**
+             * 车辆品牌
+             */
+            @JsonProperty(value = "vehicleBrand")
+            @JSONField(name = "vehicleBrand")
+            private String vehicleBrand;
+
+            /**
+             * 车主
+             */
+            @JsonProperty(value = "carOwner")
+            @JSONField(name = "carOwner")
+            private String carOwner;
+
+            /**
+             * 厂牌型号
+             * 传车型查询返参codeCode
+             */
+            @JsonProperty(value = "modelCode")
+            @JSONField(name = "modelCode")
+            private String modelCode;
+
+            /**
+             * 排量
+             */
+            @JsonProperty(value = "exhaustScale")
+            @JSONField(name = "exhaustScale")
+            private String exhaustScale;
+
+            /**
+             * 整备质量
+             */
+            @JsonProperty(value = "completeKerbMass")
+            @JSONField(name = "completeKerbMass")
+            private String completeKerbMass;
+
+            /**
+             * 车贷投保多年标志
+             */
+            @JsonProperty(value = "loanVehicleFlag")
+            @JSONField(name = "loanVehicleFlag")
+            private String loanVehicleFlag;
+
+            /**
+             * 过户车标志
+             */
+            @JsonProperty(value = "chgOwnerFlag")
+            @JSONField(name = "chgOwnerFlag")
+            private String chgOwnerFlag;
+
+            /**
+             * 车主证件号码
+             */
+            @JsonProperty(value = "carOwnerIdentifyNumber")
+            @JSONField(name = "carOwnerIdentifyNumber")
+            private String carOwnerIdentifyNumber;
+
+            /**
+             * 车主证件号码
+             */
+            @JsonProperty(value = "productType")
+            @JSONField(name = "productType")
+            private String productType;
+
+            /**
+             * 厂牌型号代码
+             */
+            @JsonProperty(value = "brandCode")
+            @JSONField(name = "brandCode")
+            private String brandCode;
+
+            /**
+             * 过户日期
+             */
+            @JsonProperty(value = "chgOwnerDate")
+            @JSONField(name = "chgOwnerDate")
+            private String chgOwnerDate;
+            /**
+             * 条款体系
+             * 默认04,新能源05
+             */
+            @JsonProperty(value = "clauseTypeSystem")
+            @JSONField(name = "clauseTypeSystem")
+            private String clauseTypeSystem;
+
+            /**
+             * 发动机号
+             */
+            @JsonProperty(value = "engineNo")
+            @JSONField(name = "engineNo")
+            private String engineNo;
+
+            /**
+             * 厂牌型号名称
+             */
+            @JsonProperty(value = "brandName")
+            @JSONField(name = "brandName")
+            private String brandName;
+
+            /**
+             * 发证日期
+             */
+            @JsonProperty(value = "certifiCateDate")
+            @JSONField(name = "certifiCateDate")
+            private String certifiCateDate;
+
+            /**
+             * 使用性质
+             */
+            @JsonProperty(value = "useNatureCode")
+            @JSONField(name = "useNatureCode")
+            private String useNatureCode;
+            /**
+             * 初登日期
+             */
+            @JsonProperty(value = "enrollDate")
+            @JSONField(name = "enrollDate")
+            private String enrollDate;
+
+            /**
+             * 核定载客数
+             */
+            @JsonProperty(value = "seatCount")
+            @JSONField(name = "seatCount")
+            private String seatCount;
+
+            /**
+             * 车主证件类型
+             */
+            @JsonProperty(value = "carOwnerIdentifyType")
+            @JSONField(name = "carOwnerIdentifyType")
+            private String carOwnerIdentifyType;
+
+            /**
+             * 车主客户性质
+             */
+            @JsonProperty(value = "carOwnerNature")
+            @JSONField(name = "carOwnerNature")
+            private String carOwnerNature;
+
+            /**
+             * 厂牌型号名
+             */
+            @JsonProperty(value = "modelName")
+            @JSONField(name = "modelName")
+            private String modelName;
+
+            /**
+             * 能源种类
+             */
+            @JsonProperty(value = "fuelType")
+            @JSONField(name = "fuelType")
+            private String fuelType;
+            /**
+             * 商业险体系
+             */
+            @JsonProperty(value = "termsSystem")
+            @JSONField(name = "termsSystem")
+            private String termsSystem;
+
+            /**
+             * 类比总质量
+             */
+            @JsonProperty(value = "tonCountlb")
+            @JSONField(name = "tonCountlb")
+            private String tonCountlb;
+
+            /**
+             * 车船税减免标志
+             */
+            @JsonProperty(value = "newFuelModel")
+            @JSONField(name = "newFuelModel")
+            private String newFuelModel;
+
+            /**
+             * 是否点击vin码
+             */
+            @JsonProperty(value = "vinClick")
+            @JSONField(name = "vinClick")
+            private String vinClick;
+
+            /**
+             * 车型代码
+             */
+            @JsonProperty(value = "maincarKindCode")
+            @JSONField(name = "maincarKindCode")
+            private String maincarKindCode;
+
+            /**
+             * 车主证件有效期起期
+             */
+            @JSONField(name = "IDValidStartDate")
+            @JsonProperty(value = "IDValidStartDate")
+            private String IDValidStartDate;
+
+            /**
+             * 车主证件有效期止期
+             */
+            @JsonProperty(value = "idValidDate")
+            @JSONField(name = "idValidDate")
+            private String idValidDate;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTmainDTO {
+            /**
+             * 代理人代码
+             */
+            @JsonProperty(value = "agentCode")
+            @JSONField(name = "agentCode")
+            private String agentCode;
+
+            /**
+             * 代理协议
+             */
+            @JsonProperty(value = "agreementNo")
+            @JSONField(name = "agreementNo")
+            private String agreementNo;
+
+            /**
+             * 决策单元小类名称
+             */
+            @JsonProperty(value = "unitmainTenanceType2Name")
+            @JSONField(name = "unitmainTenanceType2Name")
+            private String unitmainTenanceType2Name;
+
+            /**
+             * 部门大类
+             */
+            @JsonProperty(value = "channeltypeone")
+            @JSONField(name = "channeltypeone")
+            private String channeltypeone;
+
+            /**
+             * 争议解决方式
+             */
+            @JsonProperty(value = "argueSolution")
+            @JSONField(name = "argueSolution")
+            private String argueSolution;
+
+            /**
+             * 操作人姓名
+             */
+            @JsonProperty(value = "handler1Name")
+            @JSONField(name = "handler1Name")
+            private String handler1Name;
+
+            /**
+             * 部门小类
+             */
+            @JsonProperty(value = "channeltypetwo")
+            @JSONField(name = "channeltypetwo")
+            private String channeltypetwo;
+
+            /**
+             * 代理名称
+             */
+            @JsonProperty(value = "agentName")
+            @JSONField(name = "agentName")
+            private String agentName;
+
+            /**
+             * 决策单元名称
+             */
+            @JsonProperty(value = "unitMaintenanceName")
+            @JSONField(name = "unitMaintenanceName")
+            private String unitMaintenanceName;
+
+            /**
+             * 业务来源
+             * 0	直接业务
+             * 1	个人代理
+             * 2	专业代理
+             * 4	经纪业务—境内经纪
+             * 5	经纪业务—境外经纪
+             * 8	网上业务
+             * 9	兼业代理—银行代理
+             * 99	其它
+             * B	兼业代理-车行代理
+             * C	兼业代理-寿代产代理
+             * D	兼业代理—邮政代理
+             * E	兼业代理—其他
+             * F	专业代理-国任销售
+             */
+            @JsonProperty(value = "businessNature")
+            @JSONField(name = "businessNature")
+            private String businessNature;
+
+            /**
+             * 渠道标志
+             */
+            @JsonProperty(value = "activityPlan")
+            @JSONField(name = "activityPlan")
+            private String activityPlan;
+
+            /**
+             * 签单时间
+             */
+            @JsonProperty(value = "signDate")
+            @JSONField(name = "signDate")
+            private String signDate;
+
+            /**
+             * 经办人编码
+             */
+            @JsonProperty(value = "handlerCode")
+            @JSONField(name = "handlerCode")
+            private String handlerCode;
+
+            /**
+             * 部门大类名称
+             */
+            @JsonProperty(value = "channeltypeoneName")
+            @JSONField(name = "channeltypeoneName")
+            private String channeltypeoneName;
+
+            /**
+             * 决策单元编码
+             */
+            @JsonProperty(value = "unitMaintenanceCode")
+            @JSONField(name = "unitMaintenanceCode")
+            private String unitMaintenanceCode;
+
+            /**
+             * 决策单元大类
+             */
+            @JsonProperty(value = "unitmainTenanceType1")
+            @JSONField(name = "unitmainTenanceType1")
+            private String unitmainTenanceType1;
+
+            /**
+             * 决策单元小类
+             */
+            @JsonProperty(value = "unitmainTenanceType2")
+            @JSONField(name = "unitmainTenanceType2")
+            private String unitmainTenanceType2;
+
+            /**
+             * 部门小类名称
+             */
+            @JsonProperty(value = "channeltypetwoName")
+            @JSONField(name = "channeltypetwoName")
+            private String channeltypetwoName;
+
+            /**
+             * 业务员编码
+             */
+            @JsonProperty(value = "handler1Code")
+            @JSONField(name = "handler1Code")
+            private String handler1Code;
+
+            /**
+             * 机构名称
+             */
+            @JsonProperty(value = "comName")
+            @JSONField(name = "comName")
+            private String comName;
+
+            /**
+             * 机构代码
+             */
+            @JsonProperty(value = "comCode")
+            @JSONField(name = "comCode")
+            private String comCode;
+
+            /**
+             * 操作时间
+             */
+            @JsonProperty(value = "operateDate")
+            @JSONField(name = "operateDate")
+            private String operateDate;
+
+            /**
+             * 电子投保单标志
+             */
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+
+            /**
+             * 电子投保单标志
+             */
+            @JsonProperty(value = "eProposalFlag")
+            @JSONField(name = "eProposalFlag")
+            private String eProposalFlag;
+
+            /**
+             * 购车发票日期
+             */
+            @JsonProperty(value = "business")
+            @JSONField(name = "business")
+            private String business;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BasePartVoDTO {
+
+        /**
+         * 编辑类型
+         * 投保单录入 EditType_ProposalInput
+         * 投保单修改
+         * EditType_ProposalModify
+         */
+        @JsonProperty(value = "editType")
+        @JSONField(name = "editType")
+        private String editType;
+
+        /**
+         * 输入类型
+         * 34-同保
+         */
+        @JsonProperty(value = "inputType")
+        @JSONField(name = "inputType")
+        private String inputType;
+
+        /**
+         * 登录机构
+         */
+        @JsonProperty(value = "loginComCode")
+        @JSONField(name = "loginComCode")
+        private String loginComCode;
+
+        /**
+         * 登录机构地区编码
+         * 取登录机构前两位
+         */
+        @JsonProperty(value = "loginComCodeSub")
+        @JSONField(name = "loginComCodeSub")
+        private String loginComCodeSub;
+
+        /**
+         * 险种代码
+         * 0500同保
+         */
+        @JsonProperty(value = "loginRiskCode")
+        @JSONField(name = "loginRiskCode")
+        private String loginRiskCode;
+
+        /**
+         * 业务员代码
+         */
+        @JsonProperty(value = "userCode")
+        @JSONField(name = "userCode")
+        private String userCode;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BiDTO {
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class CiDTO {
+    }
+}

+ 27 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/IIRBT00012Request.java

@@ -0,0 +1,27 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 已核投保单注销
+ * @author: shenwd
+ * @date: 2025/3/16 09:49
+ **/
+@Data
+@NoArgsConstructor
+public class IIRBT00012Request {
+    @JsonProperty("proposalNoList")
+    private List<String> proposalNoList;
+
+    @JsonProperty("cancelFlag")
+    private String cancelFlag;
+
+    public IIRBT00012Request(List<String> proposalNoList) {
+        this.proposalNoList = proposalNoList;
+        this.cancelFlag = "0";
+    }
+}

+ 531 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/InsuranceSlipRequest.java

@@ -0,0 +1,531 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.CustomerInfoVo;
+import com.jzg.quote.guoren.api.entity.Response.PremiumResponse;
+import com.jzg.quote.guoren.api.entity.vo.GuoRenSpecialAgreementVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 投保单保存 入参
+ * @author: shenwd
+ * @date: 2025/3/14 11:57
+ **/
+@NoArgsConstructor
+@Data
+public class InsuranceSlipRequest {
+
+
+    @JsonProperty(value = "uuid")
+    @JSONField(name = "uuid")
+    private String uuid;
+
+    /**
+     * 投被保人信息
+     */
+    @JsonProperty(value = "prpTinsured")
+    @JSONField(name = "prpTinsured")
+    private PrpTinsuredDTO prpTinsured;
+
+    /**
+     * 商业险特约
+     */
+    @JsonProperty(value = "biPrptenages")
+    @JSONField(name = "biPrptenages")
+    private List<PremiumResponse.DataDTO.BiPrptenagesDTO> biPrptenages;
+
+    /**
+     * 交强险特约
+     */
+    @JsonProperty(value = "ciPrptenages")
+    @JSONField(name = "ciPrptenages")
+    private List<PremiumResponse.DataDTO.CiPrptenagesDTO> ciPrptenages;
+
+    /**
+     * 非车险订单单号
+     */
+    @JsonProperty(value = "order")
+    @JSONField(name = "order")
+    private String order;
+
+    /**
+     * 车主证件OCR识别增加标识
+     */
+    @JsonProperty(value = "ocrOrder")
+    @JSONField(name = "ocrOrder")
+    private OcrOrderDTO ocrOrderDTO;
+
+    /**
+     * 构造请求参数
+     */
+    @JsonIgnore
+    public static InsuranceSlipRequest buildParam(QuoteVo quoteVo,
+                                                  String carPriceNum,
+                                                  String orderCode,
+                                                  List<GuoRenSpecialAgreementVo> specialAgreementVo) {
+        //投保人
+        CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
+        //被保人
+        CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
+
+        InsuranceSlipRequest req = new InsuranceSlipRequest();
+
+        req.setUuid(carPriceNum);
+
+        PrpTinsuredDTO prpTinsured = new PrpTinsuredDTO();
+        /**
+         *  投保人信息
+         */
+        prpTinsured.setAppliName(policyHolderInfo.getName());
+        //投保人性质	appliInsuredNature	字符串	Y	3自然人,4法人
+        prpTinsured.setAppliInsuredNature("3");
+        prpTinsured.setAppliIdentifyType("01");
+        prpTinsured.setAppliIdentifyNumber(policyHolderInfo.getIdentifyNumber());
+        prpTinsured.setAppliMobile(policyHolderInfo.getMobile());
+        prpTinsured.setAppliAddress(policyHolderInfo.getAddr());
+        prpTinsured.setAppliPostCode("");
+        prpTinsured.setAppliIDValidStartDate(policyHolderInfo.getIdentifyValidDate());
+        prpTinsured.setAppliIDValidDate(policyHolderInfo.getIdentifyValidEndDate());
+        prpTinsured.setAppliValidDateLongFlag("1");
+        prpTinsured.setAppliNationality("中国");
+
+        /**
+         *  被保人信息
+         */
+        prpTinsured.setInsuredName(insuredPersonInfo.getName());
+        //投保人性质	appliInsuredNature	字符串	Y	3自然人,4法人
+        prpTinsured.setInsuredInsuredNature("3");
+        prpTinsured.setInsuredIdentifyType("01");
+        prpTinsured.setInsuredIdentifyNumber(insuredPersonInfo.getIdentifyNumber());
+        prpTinsured.setInsuredMobile(insuredPersonInfo.getMobile());
+        prpTinsured.setInsuredAddress(insuredPersonInfo.getAddr());
+        prpTinsured.setInsuredPostCode("");
+        prpTinsured.setInsuredIDValidStartDate(insuredPersonInfo.getIdentifyValidDate());
+        prpTinsured.setInsuredIDValidDate(insuredPersonInfo.getIdentifyValidEndDate());
+        prpTinsured.setInsuredValidDateLongFlag("1");
+        prpTinsured.setInsuredNationality("中国");
+
+        req.setOrder(orderCode);
+        req.setPrpTinsured(prpTinsured);
+
+        List<PremiumResponse.DataDTO.CiPrptenagesDTO> ciPrptenages = specialAgreementVo.stream()
+                .filter(x -> InsuranceRisk.TRAFFIC.getCode().equals(x.getRiskCode()))
+                .map(PremiumResponse.DataDTO.CiPrptenagesDTO::new)
+                .collect(Collectors.toList());
+
+        List<PremiumResponse.DataDTO.BiPrptenagesDTO> biPrptenages = specialAgreementVo.stream()
+                .filter(x -> InsuranceRisk.BUSINESS.getCode().equals(x.getRiskCode()))
+                .map(PremiumResponse.DataDTO.BiPrptenagesDTO::new)
+                .collect(Collectors.toList());
+
+        req.setBiPrptenages(biPrptenages);
+        req.setCiPrptenages(ciPrptenages);
+
+        OcrOrderDTO orderDTO = new OcrOrderDTO(quoteVo);
+        req.setOcrOrderDTO(orderDTO);
+
+        return req;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class PrpTinsuredDTO {
+        /**
+         * 投保人姓名
+         */
+        @JsonProperty(value = "appliName")
+        @JSONField(name = "appliName")
+        private String appliName;
+
+        /**
+         * 投保人性质 3自然人,4法人
+         */
+        @JsonProperty(value = "appliInsuredNature")
+        @JSONField(name = "appliInsuredNature")
+        private String appliInsuredNature;
+
+        /**
+         * 投保人证件类型
+         */
+        @JsonProperty(value = "appliIdentifyType")
+        @JSONField(name = "appliIdentifyType")
+        private String appliIdentifyType;
+
+        /**
+         * 投保人证件号码
+         */
+        @JsonProperty(value = "appliIdentifyNumber")
+        @JSONField(name = "appliIdentifyNumber")
+        private String appliIdentifyNumber;
+
+        /**
+         * 投保人手机号
+         */
+        @JsonProperty(value = "appliMobile")
+        @JSONField(name = "appliMobile")
+        private String appliMobile;
+
+        /**
+         * 投保人联系地址
+         */
+        @JsonProperty(value = "appliAddress")
+        @JSONField(name = "appliAddress")
+        private String appliAddress;
+
+        /**
+         * 投保人邮编
+         */
+        @JsonProperty(value = "appliPostCode")
+        @JSONField(name = "appliPostCode")
+        private String appliPostCode;
+
+        /**
+         * 被保人名字
+         */
+        @JsonProperty(value = "insuredName")
+        @JSONField(name = "insuredName")
+        private String insuredName;
+
+        /**
+         * 被保人性质 3自然人,4法人
+         */
+        @JsonProperty(value = "insuredInsuredNature")
+        @JSONField(name = "insuredInsuredNature")
+        private String insuredInsuredNature;
+
+        /**
+         * 被保人手机号
+         */
+        @JsonProperty(value = "insuredMobile")
+        @JSONField(name = "insuredMobile")
+        private String insuredMobile;
+
+        /**
+         * 被保人证件类型
+         */
+        @JsonProperty(value = "insuredIdentifyType")
+        @JSONField(name = "insuredIdentifyType")
+        private String insuredIdentifyType;
+
+        /**
+         * 被保人证件号码
+         */
+        @JsonProperty(value = "insuredIdentifyNumber")
+        @JSONField(name = "insuredIdentifyNumber")
+        private String insuredIdentifyNumber;
+
+        /**
+         * 被保人地址
+         */
+        @JsonProperty(value = "insuredAddress")
+        @JSONField(name = "insuredAddress")
+        private String insuredAddress;
+
+        /**
+         * 被保人邮编
+         */
+        @JsonProperty(value = "insuredPostCode")
+        @JSONField(name = "insuredPostCode")
+        private String insuredPostCode;
+
+        /**
+         * 投保人证件有效期起期
+         */
+        @JsonProperty(value = "appliIDValidStartDate")
+        @JSONField(name = "appliIDValidStartDate")
+        private String appliIDValidStartDate;
+
+        /**
+         * 投保人证件有效期止期
+         */
+        @JsonProperty(value = "appliIDValidDate")
+        @JSONField(name = "appliIDValidDate")
+        private String appliIDValidDate;
+
+        /**
+         * 投保人证件是否长期有效
+         * 投保人为个人是必传 0:非长期有效,1:长期有效
+         */
+        @JsonProperty(value = "appliValidDateLongFlag")
+        @JSONField(name = "appliValidDateLongFlag")
+        private String appliValidDateLongFlag;
+
+        /**
+         * 投保人国籍 默认 中国
+         */
+        @JsonProperty(value = "appliNationality")
+        @JSONField(name = "appliNationality")
+        private String appliNationality;
+
+        /**
+         * 被保人证件有效期起期
+         */
+        @JsonProperty(value = "insuredIDValidStartDate")
+        @JSONField(name = "insuredIDValidStartDate")
+        private String insuredIDValidStartDate;
+
+        /**
+         * 投保人证件是否长期有效
+         * 投保人为个人是必传 0:非长期有效,1:长期有效
+         */
+        @JsonProperty(value = "insuredValidDateLongFlag")
+        @JSONField(name = "insuredValidDateLongFlag")
+        private String insuredValidDateLongFlag;
+
+        /**
+         * 被保人国籍
+         */
+        @JsonProperty(value = "insuredNationality")
+        @JSONField(name = "insuredNationality")
+        private String insuredNationality;
+
+        /**
+         * 被保人证件有效期止期
+         */
+        @JsonProperty(value = "insuredIDValidDate")
+        @JSONField(name = "insuredIDValidDate")
+        private String insuredIDValidDate;
+    }
+
+
+    @NoArgsConstructor
+    @Data
+    public static class OcrOrderDTO {
+
+        /**
+         * ocr车主姓名
+         */
+        @JsonProperty(value = "ocrCarOwner")
+        @JSONField(name = "ocrCarOwner")
+        private String ocrCarOwner;
+
+        /**
+         * ocr车主证件号码
+         */
+        @JsonProperty(value = "ocrCarOwnerIdentifyNumber")
+        @JSONField(name = "ocrCarOwnerIdentifyNumber")
+        private String ocrCarOwnerIdentifyNumber;
+
+        /**
+         * ocr车主地址
+         */
+        @JsonProperty(value = "ocrCarAddress")
+        @JSONField(name = "ocrCarAddress")
+        private String ocrCarAddress;
+
+        /**
+         * ocr车主证件有效期起期
+         */
+        @JsonProperty(value = "ocrIdvalidStartDate")
+        @JSONField(name = "ocrIdvalidStartDate")
+        private String ocrIdvalidStartDate;
+
+        /**
+         * ocr车主证件有效期止期
+         */
+        @JsonProperty(value = "ocrIdvalidDate")
+        @JSONField(name = "ocrIdvalidDate")
+        private String ocrIdvalidDate;
+
+        /**
+         * ocr被保人姓名
+         */
+        @JsonProperty(value = "ocrInsuredName")
+        @JSONField(name = "ocrInsuredName")
+        private String ocrInsuredName;
+
+        /**
+         * ocr被保人证件号码
+         */
+        @JsonProperty(value = "ocrInsuredIdentifyNumber")
+        @JSONField(name = "ocrInsuredIdentifyNumber")
+        private String ocrInsuredIdentifyNumber;
+
+        /**
+         * ocr被保人地址
+         */
+        @JsonProperty(value = "ocrInsuredAddress")
+        @JSONField(name = "ocrInsuredAddress")
+        private String ocrInsuredAddress;
+
+        /**
+         * ocr被保人证件有效期起期
+         */
+        @JsonProperty(value = "ocrInsuredIDValidStartDate")
+        @JSONField(name = "ocrInsuredIDValidStartDate")
+        private String ocrInsuredIDValidStartDate;
+
+        /**
+         * ocr被保人证件有效期止期
+         */
+        @JsonProperty(value = "ocrInsuredIDValidDate")
+        @JSONField(name = "ocrInsuredIDValidDate")
+        private String ocrInsuredIDValidDate;
+
+        /**
+         * ocr投保人姓名
+         */
+        @JsonProperty(value = "ocrAppliName")
+        @JSONField(name = "ocrAppliName")
+        private String ocrAppliName;
+
+        /**
+         * ocr投保人证件号码
+         */
+        @JsonProperty(value = "ocrAppliIdentifyNumber")
+        @JSONField(name = "ocrAppliIdentifyNumber")
+        private String ocrAppliIdentifyNumber;
+
+        /**
+         * ocr投保人地址
+         */
+        @JsonProperty(value = "ocrAppliAddress")
+        @JSONField(name = "ocrAppliAddress")
+        private String ocrAppliAddress;
+
+        /**
+         * ocr投保人证件有效期起期
+         */
+        @JsonProperty(value = "ocrAppliIDValidStartDate")
+        @JSONField(name = "ocrAppliIDValidStartDate")
+        private String ocrAppliIDValidStartDate;
+
+        /**
+         * ocr投保人证件有效期止期
+         */
+        @JsonProperty(value = "ocrAppliIDValidDate")
+        @JSONField(name = "ocrAppliIDValidDate")
+        private String ocrAppliIDValidDate;
+
+        /**
+         * ocr行驶证地址
+         */
+        @JsonProperty(value = "ocrOwnerAddress")
+        @JSONField(name = "ocrOwnerAddress")
+        private String ocrOwnerAddress;
+
+        /**
+         * ocr车架号
+         */
+        @JsonProperty(value = "ocrVinNo")
+        @JSONField(name = "ocrVinNo")
+        private String ocrVinNo;
+
+        /**
+         * 发动机号
+         */
+        @JsonProperty(value = "ocrEngineNo")
+        @JSONField(name = "ocrEngineNo")
+        private String ocrEngineNo;
+
+        /**
+         * 初登日期
+         */
+        @JsonProperty(value = "ocrEnrolLDate")
+        @JSONField(name = "ocrEnrolLDate")
+        private String ocrEnrolLDate;
+
+        /**
+         * 发证日期
+         */
+        @JsonProperty(value = "ocrChgOwnerDate")
+        @JSONField(name = "ocrChgOwnerDate")
+        private String ocrChgOwnerDate;
+
+        /**
+         * 厂牌型号
+         */
+        @JsonProperty(value = "ocrModelName")
+        @JSONField(name = "ocrModelName")
+        private String ocrModelName;
+
+        /**
+         * 使用年限
+         */
+        @JsonProperty(value = "ocrUseYears")
+        @JSONField(name = "ocrUseYears")
+        private String ocrUseYears;
+
+        /**
+         * 使用性质
+         */
+        @JsonProperty(value = "ocrUseNatureCode")
+        @JSONField(name = "ocrUseNatureCode")
+        private String ocrUseNatureCode;
+
+        /**
+         * 车辆大类
+         */
+        @JsonProperty(value = "ocrMaincarKindCode")
+        @JSONField(name = "ocrMaincarKindCode")
+        private String ocrMaincarKindCode;
+
+        /**
+         * 车辆种类
+         */
+        @JsonProperty(value = "ocrCarKindCode")
+        @JSONField(name = "ocrCarKindCode")
+        private String ocrCarKindCode;
+
+        /**
+         * 车辆类型描述
+         */
+        @JsonProperty(value = "ocrLicenseCategory")
+        @JSONField(name = "ocrLicenseCategory")
+        private String ocrLicenseCategory;
+
+        /**
+         * 号牌种类
+         */
+        @JsonProperty(value = "ocrLicenseKindCode")
+        @JSONField(name = "ocrLicenseKindCode")
+        private String ocrLicenseKindCode;
+
+
+        public OcrOrderDTO(QuoteVo quoteVo) {
+            // 车主
+            CustomerInfoVo ownerInfo = quoteVo.getOwnersInfo();
+            // 被保人
+            CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
+            // 投保人信息
+            CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
+            // 车辆信息
+            CarInfoVo carInfo = quoteVo.getCarInfoVo();
+
+            this.ocrCarOwner = ownerInfo.getName();
+            this.ocrCarOwnerIdentifyNumber = ownerInfo.getIdentifyNumber();
+            this.ocrCarAddress = ownerInfo.getAddr();
+            this.ocrIdvalidStartDate = ownerInfo.getIdentifyValidDate();
+            this.ocrIdvalidDate = ownerInfo.getIdentifyValidEndDate();
+
+            this.ocrInsuredName = insuredPersonInfo.getName();
+            this.ocrInsuredIdentifyNumber = insuredPersonInfo.getIdentifyNumber();
+            this.ocrInsuredAddress = insuredPersonInfo.getAddr();
+            this.ocrInsuredIDValidStartDate = insuredPersonInfo.getIdentifyValidDate();
+            this.ocrInsuredIDValidDate = insuredPersonInfo.getIdentifyValidEndDate();
+
+            this.ocrAppliName = policyHolderInfo.getName();
+            this.ocrAppliIdentifyNumber = policyHolderInfo.getIdentifyNumber();
+            this.ocrAppliAddress = policyHolderInfo.getAddr();
+            this.ocrAppliIDValidStartDate = policyHolderInfo.getIdentifyValidDate();
+            this.ocrAppliIDValidDate = policyHolderInfo.getIdentifyValidEndDate();
+
+            this.ocrVinNo = carInfo.getVinNo();
+            this.ocrEngineNo = carInfo.getEngineNo();
+            this.ocrEnrolLDate = carInfo.getRegisterDate();
+            this.ocrChgOwnerDate = carInfo.getIssueDate();
+
+        }
+    }
+
+}

+ 56 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/NoCarElectronicPolicyRequest.java

@@ -0,0 +1,56 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.Instant;
+
+/**
+ * @description: 非车险电子保单 请求
+ * @author: shenwd
+ * @date: 2025/3/16 09:58
+ **/
+public class NoCarElectronicPolicyRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 4054222177005920140L;
+    @JsonProperty("requestTime")
+    private String requestTime;
+
+    @JsonProperty("channelCode")
+    private String channelCode;
+
+    @JsonProperty("othBusinessNo")
+    private String othBusinessNo;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    public NoCarElectronicPolicyRequest(String channelCode, String othBusinessNo, String policyNo) {
+        this.requestTime = String.valueOf(Instant.now().getEpochSecond() * 1000);
+        this.channelCode = channelCode;
+        this.othBusinessNo = othBusinessNo;
+        this.data = new DataDTO(policyNo);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = -7848843272727197769L;
+        @JsonProperty("policyNo")
+        private String policyNo;
+
+        @JsonProperty("flag")
+        private String flag;
+
+        public DataDTO(String policyNo) {
+            this.policyNo = policyNo;
+            this.flag = "1";
+        }
+    }
+}

+ 84 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/PayRequest.java

@@ -0,0 +1,84 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 支付  入参
+ * @author: shenwd
+ * @date: 2025/3/16 09:30
+ **/
+@NoArgsConstructor
+@Data
+public class PayRequest {
+
+    @JsonProperty(value = "proposalNo")
+    @JSONField(name = "proposalNo")
+    private List<String> proposalNo;
+    @JsonProperty(value = "channelFlag")
+    @JSONField(name = "channelFlag")
+    private String channelFlag;
+    @JsonProperty(value = "amount")
+    @JSONField(name = "amount")
+    private Double amount;
+    @JsonProperty(value = "riskType")
+    @JSONField(name = "riskType")
+    private String riskType;
+    @JsonProperty(value = "redirectUrl")
+    @JSONField(name = "redirectUrl")
+    private String redirectUrl;
+    @JsonProperty(value = "comCode")
+    @JSONField(name = "comCode")
+    private String comCode;
+    @JsonProperty(value = "verificationCode")
+    @JSONField(name = "verificationCode")
+    private String verificationCode;
+    @JsonProperty(value = "productCode")
+    @JSONField(name = "productCode")
+    private String productCode;
+    @JsonProperty(value = "orderCode")
+    @JSONField(name = "orderCode")
+    private String orderCode;
+
+    @JsonIgnore
+    public static PayRequest buildParam(GuoRenApiOrder guoRenApiOrder, String redirectUrl, ChannelInfoDTO channelInfo) {
+
+
+        PayRequest req = new PayRequest();
+        List<String> proposalNoList = new ArrayList<>();
+        String ciStr = guoRenApiOrder.getJqApplyNo();
+        String biStr = guoRenApiOrder.getSyApplyNo();
+        if (StringUtils.isNotEmpty(ciStr)) {
+            proposalNoList.add(ciStr);
+        }
+        if (StringUtils.isNotEmpty(biStr)) {
+            proposalNoList.add(biStr);
+        }
+        req.setProposalNo(proposalNoList);
+
+        req.setChannelFlag("RBT");
+        //非车险(N);车险(Y);组合险(P)
+        req.setRiskType("Y");
+        req.setRedirectUrl(redirectUrl);
+        req.setComCode(channelInfo.getComCode());
+        req.setVerificationCode("");
+        BigDecimal amount = guoRenApiOrder.getJqPremium().add(guoRenApiOrder.getSyPremium()).add(guoRenApiOrder.getJyPremium());
+        req.setAmount(amount.doubleValue());
+        //产品标识  车+意必录:CA
+//        req.setProductCode();
+        //非车订单号     车+意必录
+//        req.setOrderCode();
+
+        return req;
+    }
+}

+ 1360 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/PremiumRequest.java

@@ -0,0 +1,1360 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.constant.enums.quote.EnergyTypeCode;
+import com.jzg.quotation.commons.constant.enums.quote.KindCode;
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
+import com.jzg.quotation.commons.entity.vo.quote.CustomerInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.KindInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.RiskInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.VehicleAndVesselTaxVo;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
+import com.jzg.quote.guoren.api.constant.enums.BaseTaxation;
+import com.jzg.quote.guoren.api.constant.enums.ClauseTypeSystem;
+import com.jzg.quote.guoren.api.constant.enums.InsurKindGuoRen;
+import com.jzg.quote.guoren.api.constant.enums.RelifReason;
+import com.jzg.quote.guoren.api.entity.Response.CarPriceResponse;
+import com.jzg.quote.guoren.api.entity.Response.VinQueryResponse;
+import com.jzg.quote.guoren.api.entity.vo.GuoRenSpecialAgreementVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 报价请求参数
+ * @author: shenwd
+ * @date: 2025/3/14 14:39
+ **/
+@NoArgsConstructor
+@Data
+public class PremiumRequest {
+
+    /**
+     * 交强险实体
+     */
+    @JsonProperty(value = "ci")
+    @JSONField(name = "ci")
+    private CiDTO ci;
+    /**
+     * 商业险实体
+     */
+    @JsonProperty(value = "bi")
+    @JSONField(name = "bi")
+    private BiDTO bi;
+    @JsonProperty(value = "actualValue")
+    @JSONField(name = "actualValue")
+    private String actualValue;
+    @JsonProperty(value = "uuid")
+    @JSONField(name = "uuid")
+    private String uuid;
+
+
+    /**
+     * 构造保费计算请求参数
+     *
+     * @author: lig
+     * @date: 2023年08月14日 0014
+     */
+    @JsonIgnore
+    public static PremiumRequest buildQuoteParam(QuoteVo quoteVo, CarPriceResponse.DataDTO carPriceResult,
+                                                 VinQueryResponse.DataDTO vinQ, boolean isNoCar,
+                                                 List<GuoRenSpecialAgreementVo> specialAgreementVo,
+                                                 String noCarPremium,
+                                                 String goodsCode) {
+
+        CustomerInfoVo ownersInfo = quoteVo.getOwnersInfo();
+
+//        List<RiskInfoVo> riskList = quoteVo.getRiskList();
+        RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();//获取交强险数据
+        RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();//获取商业险数据
+        List<KindInfoVo> kindInfoVList = quoteVo.getKindInfoVo();
+
+        PremiumRequest quoteReq = new PremiumRequest();
+        VehicleAndVesselTaxVo vehicleAndVesselTax = quoteVo.getVehicleAndVesselTax();
+
+        //处理车主约定特约
+        specialAgreementVo.forEach(item->{
+            if("T0028".equals(item.getClauseCode())){
+                String replace = item.getClausesContext().replaceFirst("_", quoteVo.getInsuredPersonInfo().getName());
+                replace = replace.replaceFirst("_",ownersInfo.getName());
+                item.setClausesContext(replace);
+            }
+        });
+
+        List<GuoRenSpecialAgreementVo> trafficSpecialAgreement =
+                specialAgreementVo.stream().filter(x -> InsuranceRisk.TRAFFIC.getCode().equals(x.getRiskCode())).collect(Collectors.toList());
+        CiDTO ciDto = buildCiDto(vehicleAndVesselTax, ownersInfo, ciRiskInfoVo, isNoCar, trafficSpecialAgreement, noCarPremium, goodsCode);
+        ciDto.setTrafficTime(ciRiskInfoVo.getStartDate());
+        quoteReq.setCi(ciDto);
+
+        List<GuoRenSpecialAgreementVo> businessSpecialAgreement =
+                specialAgreementVo.stream().filter(x -> InsuranceRisk.BUSINESS.getCode().equals(x.getRiskCode())).collect(Collectors.toList());
+        BiDTO biDto = buildBiDto(ownersInfo, biRiskInfoVo, kindInfoVList, carPriceResult, vinQ, isNoCar, businessSpecialAgreement, noCarPremium, goodsCode);
+        biDto.setBusinessTime(biRiskInfoVo.getStartDate());
+        quoteReq.setBi(biDto);
+
+        /*riskList.forEach(a -> {
+            if (a.getRiskCode().equals(InsuranceRisk.TRAFFIC.getCode())) {
+                List<GuoRenSpecialAgreementVo> trafficSpecialAgreement =
+                        specialAgreementVo.stream().filter(x -> InsuranceRisk.TRAFFIC.getCode().equals(x.getRiskCode())).collect(Collectors.toList());
+                CiDTO ciDto = buildCiDto(vehicleAndVesselTax, ownersInfo, a, isNoCar, trafficSpecialAgreement, noCarPremium, goodsCode);
+                ciDto.setTrafficTime(a.getStartDate());
+                quoteReq.setCi(ciDto);
+            } else if (a.getRiskCode().equals(InsuranceRisk.BUSINESS_CODE)) {
+                List<GuoRenSpecialAgreementVo> businessSpecialAgreement =
+                        specialAgreementVo.stream().filter(x -> InsuranceRisk.BUSINESS_CODE.equals(x.getRiskCode())).collect(Collectors.toList());
+                BiDTO biDto = buildBiDto(ownerInfo, a, kindInfoVList, carPriceResult, vinQ, isNoCar, businessSpecialAgreement, noCarPremium, goodsCode);
+                biDto.setBusinessTime(a.getStartDate());
+                quoteReq.setBi(biDto);
+            }
+        });*/
+
+        //未投保交强
+        if (null == quoteReq.getCi()) {
+            ciDto = buildCiDto(null, ownersInfo, null, false, new ArrayList<>(), "", "");
+            quoteReq.setCi(ciDto);
+        }
+        //未投保商业
+        if (null == quoteReq.getBi()) {
+            biDto = buildBiDto(ownersInfo, null, null, null, vinQ, false, new ArrayList<>(), "", "");
+            quoteReq.setBi(biDto);
+        }
+
+        //车价查询uid
+        quoteReq.setUuid(carPriceResult.getInputvo());
+        //不超过业实际参考价格上下30%
+        quoteReq.setActualValue(StringUtils.toString(carPriceResult.getActualValue()));
+
+        return quoteReq;
+
+    }
+
+    /**
+     * 构造 交强险
+     *
+     * @author: lig
+     * @date: 2023-08-15
+     */
+    @JsonIgnore
+    public static CiDTO buildCiDto(VehicleAndVesselTaxVo vehicleAndVesselTax, CustomerInfoVo ownerInfo, RiskInfoVo ciRiskInfo,
+                                   boolean isNoCar, List<GuoRenSpecialAgreementVo> specialAgreementVo, String noCarPremium,
+                                   String goodsCode) {
+        CiDTO ciDto = new CiDTO();
+        ciDto.setPrpTrenewal(new ArrayList<>());
+        ciDto.setPrpTmainRate(new CiDTO.PrpTmainRateDTO());
+        ciDto.setCalculateFlagCI("");
+        ciDto.setEditType("NEW");
+        /**
+         * 主信息
+         */
+        CiDTO.PrpTmainDTO ciPrpTmain = new CiDTO.PrpTmainDTO();
+        ciPrpTmain.setInputDate(DateUtil.formatDate(new Date()));
+        ciPrpTmain.setSignDate(DateUtil.formatDate(new Date()));
+        ciPrpTmain.setStartHour("0");
+        ciPrpTmain.setEndHour("24");
+        /**
+         * 险种列表
+         */
+        List<CiDTO.PrptitemkindListDTO> prptitemkindList = new ArrayList<>();
+        /**
+         * 车船税
+         */
+        CiDTO.PrpTcarshipTaxDTO prpTcarshipTax = new CiDTO.PrpTcarshipTaxDTO();
+        //交强起保
+        if (null != ciRiskInfo) {
+            ciDto.setCalculateFlagCI("1");
+            //构造保险日期
+            ciDto.setInputRisk("1");
+
+            //转保验证码
+            ciPrpTmain.setAnswer("");
+            if (isNoCar) {
+                //非车标识      车+非车必传:1
+                ciPrpTmain.setNoCarFlag("1");
+                //车+非车标识    车加非车必传:N
+                ciPrpTmain.setOrderFlag("N");
+
+                ciPrpTmain.setNoCarCodes(goodsCode);
+                ciPrpTmain.setNoCarPremium(noCarPremium);
+            }
+            prpTcarshipTax = new CiDTO.PrpTcarshipTaxDTO(vehicleAndVesselTax);
+            /**
+             * 平台交互信息
+             */
+            CiDTO.CiInsureDemandDTO ciInsureDemand = new CiDTO.CiInsureDemandDTO();
+            //转保业务必传,传上次保费计算返回对应查询码,否则传空
+            ciInsureDemand.setDemandNo("");
+            ciDto.setCiInsureDemand(ciInsureDemand);
+            prpTcarshipTax.setTaxRelifFlag("1");
+            ciDto.setPrpTcarshipTax(prpTcarshipTax);
+            prptitemkindList = buildCiKindList(ciRiskInfo);
+        } else {
+            ciDto.setInputRisk("0");
+            ciPrpTmain.setStartDate("");
+            ciPrpTmain.setEndDate("");
+            prpTcarshipTax.setTaxRelifFlag("");
+            ciDto.setPrpTcarshipTax(prpTcarshipTax);
+
+        }
+        /**
+         * 车辆信息对象
+         */
+        CiDTO.PrpTitemCarDTO ciPrpTitemCar = new CiDTO.PrpTitemCarDTO();
+        ciPrpTitemCar.setClauseType("F40");
+        ciPrpTitemCar.setCarOwner(ownerInfo.getName());
+        ciPrpTitemCar.setCarOwnerIdentifyNumber(ownerInfo.getIdentifyNumber());
+        ciPrpTitemCar.setOtherNature("0");
+
+        ciDto.setPrpTitemCar(ciPrpTitemCar);
+        ciDto.setPrptitemkindList(prptitemkindList);
+        ciDto.setPrpTmain(ciPrpTmain);
+
+        // 特别约定
+        List<PrptengageListDTO> prptengageListDTO = GuoRenSpecialAgreementVo.toPrptengageListDTO(specialAgreementVo);
+        ciDto.setPrptengageList(prptengageListDTO);
+
+        return ciDto;
+    }
+
+    /**
+     * 构造 商业险
+     *
+     * @author: lig
+     * @date: 2023-08-15
+     */
+    @JsonIgnore
+    public static BiDTO buildBiDto(CustomerInfoVo ownerInfo, RiskInfoVo biRiskInfo, List<KindInfoVo> kindInfoVList,
+                                   CarPriceResponse.DataDTO carPriceResult, VinQueryResponse.DataDTO vinQ, boolean isNoCar,
+                                   List<GuoRenSpecialAgreementVo> specialAgreementVo,String noCarPremium,
+                                   String goodsCode) {
+
+        BiDTO biDto = new BiDTO();
+        biDto.setPrpTmainRate(new BiDTO.PrpTmainRateDTO());
+        biDto.setPrpTChargingPostDataList(new ArrayList<>());
+        BiDTO.CiInsureDemandDTO bidtoCiInsureDemandDto = new BiDTO.CiInsureDemandDTO();
+        bidtoCiInsureDemandDto.setDemandNo("");
+        biDto.setCiInsureDemand(bidtoCiInsureDemandDto);
+        biDto.setCiInsureDemandPay(new ArrayList<>());
+        biDto.setCiInsureDemandWarningClaim(new ArrayList<>());
+        biDto.setPrpTrenewal(new ArrayList<>());
+
+        List<PrptengageListDTO> prptengageListDTO = GuoRenSpecialAgreementVo.toPrptengageListDTO(specialAgreementVo);
+        biDto.setPrptengageList(prptengageListDTO);
+
+        /**
+         * 主信息
+         */
+        BiDTO.PrpTmainDTO biPrpTmain = new BiDTO.PrpTmainDTO();
+        biPrpTmain.setImmeValidEndDate("");
+        /**
+         * 车辆信息对象
+         */
+        BiDTO.PrpTitemCarDTO biPrpTitemCar = new BiDTO.PrpTitemCarDTO();
+
+        if (EnergyTypeCode.getNewEnergy().contains(vinQ.getFuelType())) {
+            biPrpTitemCar.setTermsSystem(ClauseTypeSystem.CTS_05.getCode());
+        } else {
+            biPrpTitemCar.setTermsSystem(ClauseTypeSystem.CTS_04.getCode());
+        }
+
+        biPrpTitemCar.setClauseType("F54");
+        biPrpTitemCar.setCarOwner(ownerInfo.getName());
+        biPrpTitemCar.setCarOwnerIdentifyNumber(ownerInfo.getIdentifyNumber());
+        biPrpTitemCar.setOtherNature("0");
+        biPrpTitemCar.setCiInsureDemandPay(new ArrayList<>());
+        biPrpTitemCar.setCiInsureDemandWarningClaim(new ArrayList<>());
+        biPrpTitemCar.setPrpTrenewal("");
+        biPrpTitemCar.setPrptengageList("");
+        biPrpTitemCar.setPrpTmainRate("");
+
+        biPrpTmain.setStartHour("0");
+        biPrpTmain.setEndHour("24");
+        biPrpTmain.setFeeandDiscountFlag("0");
+        //期望折扣
+        biPrpTmain.setExpectDiscount("");
+
+        //转保验证码
+        biPrpTmain.setAnswer("");
+
+
+        if (null != biRiskInfo) {
+
+            biPrpTmain.setInputDate(DateUtil.formatDate(new Date()));
+            biPrpTmain.setSignDate(DateUtil.formatDate(new Date()));
+
+            if (isNoCar) {
+                // 非车标识      车+非车必传:1
+                biPrpTmain.setNoCarFlag("1");
+                //车+非车标识    车加非车必传:N
+                biPrpTmain.setOrderFlag("N");
+
+                biPrpTmain.setNoCarCodes(goodsCode);
+                biPrpTmain.setNoCarPremium(noCarPremium);
+            }
+
+            List<BiDTO.PrptitemkindListDTO> prptitemkindList = buildBiKindList(kindInfoVList, carPriceResult, biRiskInfo, vinQ);
+            biDto.setPrptitemkindList(prptitemkindList);
+
+        } else {
+            biPrpTmain.setStartDate("");
+            biPrpTmain.setEndDate("");
+            biPrpTmain.setNoCarFlag("0");
+            biPrpTmain.setImmeValiFlag("");
+            biPrpTmain.setImmeValidStartDate("");
+            biPrpTmain.setInputDate("");
+            biPrpTmain.setSignDate("");
+            biDto.setPrptitemkindList(new ArrayList<>());
+        }
+        biDto.setPrpTitemCar(biPrpTitemCar);
+        biDto.setPrpTmain(biPrpTmain);
+        if (CollUtil.isNotEmpty(kindInfoVList)) {
+            biDto.setCalculateFlagBI("1");
+            biDto.setInputRisk("1");
+        } else {
+            biDto.setCalculateFlagBI("0");
+            biDto.setInputRisk("0");
+
+        }
+        return biDto;
+    }
+
+    private static List<BiDTO.PrptitemkindListDTO> buildBiKindList(List<KindInfoVo> kindInfoVList, CarPriceResponse.DataDTO carPriceResult,
+                                                                   RiskInfoVo biRiskInfo, VinQueryResponse.DataDTO vinQ) {
+        List<BiDTO.PrptitemkindListDTO> prptitemkindList = new ArrayList<>();
+        kindInfoVList.forEach(k -> {
+            BiDTO.PrptitemkindListDTO prptitemkind = new BiDTO.PrptitemkindListDTO();
+            prptitemkind.setChecked("1");
+            prptitemkind.setModeCode("1");
+            //免赔额
+            prptitemkind.setDeductible("0");
+            //不计免赔
+            prptitemkind.setIsDeductible("0");
+            //座位数/服务次数
+            prptitemkind.setQuantity("");
+            prptitemkind.setRate("0");
+
+            //乘客数
+            BigDecimal passengerNum = BigDecimal.valueOf(StringUtils.toInt(vinQ.getSeatCountBC()) - 1);
+
+            boolean isEnergy = false;
+            if (EnergyTypeCode.getNewEnergy().contains(vinQ.getFuelType())) {
+                isEnergy = true;
+            }
+
+            //起保时间
+            prptitemkind.setStartDate(biRiskInfo.getStartDate());
+            prptitemkind.setEndDate(biRiskInfo.getEndDate());
+
+
+            String deductible = "0";
+            if (StringUtils.isNotEmpty(k.getDeductibleRate())) {
+                deductible = BigDecimal.valueOf(StringUtils.toDouble(k.getDeductibleRate())).divide(BigDecimal.valueOf(100)).toString();
+            }
+
+            //第三者责任险
+            if (k.getKindCode().equals(KindCode.B.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.B_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.B_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.B_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.B_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.B.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.B.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.B.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.B.getFlag());
+                }
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("M");
+                prptitemkind.setUnitAmount("0");
+            }
+            //乘客责任险
+            if (k.getKindCode().equals(KindCode.D4.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.D4_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.D4_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.D4_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.D4_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.D4.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.D4.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.D4.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.D4.getFlag());
+                }
+                prptitemkind.setMainKindFlag("M");
+                prptitemkind.setQuantity(passengerNum.toString());
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(BigDecimal.valueOf(StringUtils.toDouble(k.getUnitAmount())).multiply(passengerNum).toString());
+
+            }
+            //机动车损失险
+            if (k.getKindCode().equals(KindCode.A.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.A_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.A_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.A_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.A_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.A.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.A.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.A.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.A.getFlag());
+                }
+                //车辆折损价
+                prptitemkind.setAmount(StringUtils.toString(carPriceResult.getActualValue()));
+                prptitemkind.setMainKindFlag("");
+                prptitemkind.setUnitAmount("");
+                prptitemkind.setMainKindFlag("M");
+
+            }
+            //司机责任险
+            if (k.getKindCode().equals(KindCode.D3.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.D3_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.D3_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.D3_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.D3_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.D3.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.D3.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.D3.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.D3.getFlag());
+                }
+                prptitemkind.setMainKindFlag("M");
+                prptitemkind.setQuantity("1");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+            }
+            //附加绝对免赔率特约条款(车损)
+            if (k.getKindCode().equals(KindCode.MJ1.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.MJ1.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.MJ1.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.MJ1.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.MJ1.getFlag());
+                prptitemkind.setDeductible(deductible);
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+
+            }
+            //绝对免赔率特约险(三者)
+            if (k.getKindCode().equals(KindCode.MJ2.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.MJ2.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.MJ2.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.MJ2.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.MJ2.getFlag());
+                prptitemkind.setDeductible(deductible);
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+            }
+            //绝对免赔率特约险(司机)
+            if (k.getKindCode().equals(KindCode.MJ3.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.MJ3.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.MJ3.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.MJ3.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.MJ3.getFlag());
+                prptitemkind.setDeductible(deductible);
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity("1");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+            }
+            //绝对免赔率特约险(乘客)
+            if (k.getKindCode().equals(KindCode.MJ4.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.MJ4.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.MJ4.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.MJ4.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.MJ4.getFlag());
+                prptitemkind.setDeductible(deductible);
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(StringUtils.toString(StringUtils.toInt(vinQ.getSeatCountBC()) - 1));
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(BigDecimal.valueOf(StringUtils.toDouble(k.getUnitAmount())).multiply(passengerNum).toString());
+            }
+            //车身划痕险
+            if (k.getKindCode().equals(KindCode.L.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.L.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.L.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.L.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.L.getFlag());
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+            }
+            //附加法定节假日限额翻倍险
+            if (k.getKindCode().equals(KindCode.BD.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.BD.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.BD.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.BD.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.BD.getFlag());
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+
+
+            }
+            //医保外  三者
+            if (k.getKindCode().equals(KindCode.SY_FJ_YBW1.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.SY_FJ_YBW1.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.SY_FJ_YBW1.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.SY_FJ_YBW1.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.SY_FJ_YBW1.getFlag());
+                prptitemkind.setUnitAmount("0");
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+            }
+            //医保外  乘客
+            if (k.getKindCode().equals(KindCode.SY_FJ_YBW2.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.SY_FJ_YBW2.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.SY_FJ_YBW2.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.SY_FJ_YBW2.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.SY_FJ_YBW2.getFlag());
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getUnitAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(StringUtils.toString(StringUtils.toInt(vinQ.getSeatCountBC()) - 1));
+                prptitemkind.setAmount(BigDecimal.valueOf(StringUtils.toDouble(k.getUnitAmount())).multiply(passengerNum).toString());
+            }
+            //医保外  司机
+            if (k.getKindCode().equals(KindCode.SY_FJ_YBW3.getCode())) {
+                prptitemkind.setKindCode(InsurKindGuoRen.SY_FJ_YBW3.getCode());
+                prptitemkind.setKindName(InsurKindGuoRen.SY_FJ_YBW3.getDesc());
+                prptitemkind.setItemKindNo(InsurKindGuoRen.SY_FJ_YBW3.getItemKindNo());
+                prptitemkind.setFlag(InsurKindGuoRen.SY_FJ_YBW3.getFlag());
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setUnitAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity("1");
+            }
+
+            if (k.getKindCode().equals(KindCode.TY1.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY1_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY1_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY1_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY1_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY1.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY1.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY1.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY1.getFlag());
+                }
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(String.valueOf(k.getServiceTimes()));
+            }
+
+            if (k.getKindCode().equals(KindCode.TY2.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY2_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY2_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY2_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY2_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY2.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY2.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY2.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY2.getFlag());
+                }
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(String.valueOf(k.getServiceTimes()));
+            }
+
+            if (k.getKindCode().equals(KindCode.TY3.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY3_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY3_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY3_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY3_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY3.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY3.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY3.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY3.getFlag());
+                }
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(String.valueOf(k.getServiceTimes()));
+            }
+
+            if (k.getKindCode().equals(KindCode.TY4.getCode())) {
+                if (isEnergy) {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY4_N.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY4_N.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY4_N.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY4_N.getFlag());
+                } else {
+                    prptitemkind.setKindCode(InsurKindGuoRen.TY4.getCode());
+                    prptitemkind.setKindName(InsurKindGuoRen.TY4.getDesc());
+                    prptitemkind.setItemKindNo(InsurKindGuoRen.TY4.getItemKindNo());
+                    prptitemkind.setFlag(InsurKindGuoRen.TY4.getFlag());
+                }
+                prptitemkind.setAmount(StringUtils.toString(k.getAmount()));
+                prptitemkind.setMainKindFlag("S");
+                prptitemkind.setQuantity(String.valueOf(k.getServiceTimes()));
+            }
+
+            prptitemkindList.add(prptitemkind);
+        });
+        return prptitemkindList;
+
+    }
+
+    /**
+     * 构造 交强险  具体险种信息
+     *
+     * @author: lig
+     * @date: 2023年08月15日 0015
+     */
+    private static List<CiDTO.PrptitemkindListDTO> buildCiKindList(RiskInfoVo ciRiskInfo) {
+        List<CiDTO.PrptitemkindListDTO> prptitemkindList = new ArrayList<>();
+        CiDTO.PrptitemkindListDTO prptitemkind = new CiDTO.PrptitemkindListDTO();
+        prptitemkind.setKindCode("BZ");
+        prptitemkind.setKindName("机动车交通事故责任强制保险");
+        prptitemkind.setStartDate(ciRiskInfo.getStartDate());
+        prptitemkind.setEndDate(ciRiskInfo.getEndDate());
+        prptitemkind.setDeductible("");
+        prptitemkind.setIsDeductible("true");
+        prptitemkind.setRate("");
+        //prptitemkind.setAmount(ciRiskInfo.getAmount());暂时不设置交强险保额
+        prptitemkind.setNoTaxPremium("");
+        prptitemkind.setTaxFee("");
+        prptitemkind.setFlag("2 03");
+        prptitemkindList.add(prptitemkind);
+        return prptitemkindList;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class CiDTO {
+
+        @JsonProperty(value = "prpTrenewal")
+        @JSONField(name = "prpTrenewal")
+        private List<?> prpTrenewal;
+
+        @JsonProperty(value = "prpTitemCar")
+        @JSONField(name = "prpTitemCar")
+        private PrpTitemCarDTO prpTitemCar;
+
+        /**
+         * 特别约定
+         */
+        @JsonProperty(value = "prptengageList")
+        @JSONField(name = "prptengageList")
+        private List<PrptengageListDTO> prptengageList;
+
+        @JsonProperty(value = "prpTmain")
+        @JSONField(name = "prpTmain")
+        private PrpTmainDTO prpTmain;
+
+        @JsonProperty(value = "inputRisk")
+        @JSONField(name = "inputRisk")
+        private String inputRisk;
+
+        @JsonProperty(value = "prptitemkindList")
+        @JSONField(name = "prptitemkindList")
+        private List<PrptitemkindListDTO> prptitemkindList;
+
+        @JsonProperty(value = "calculateFlagCI")
+        @JSONField(name = "calculateFlagCI")
+        private String calculateFlagCI;
+
+        @JsonProperty(value = "ciInsureDemand")
+        @JSONField(name = "ciInsureDemand")
+        private CiInsureDemandDTO ciInsureDemand;
+
+        @JsonProperty(value = "editType")
+        @JSONField(name = "editType")
+        private String editType;
+
+        @JsonProperty(value = "prpTmainRate")
+        @JSONField(name = "prpTmainRate")
+        private PrpTmainRateDTO prpTmainRate;
+
+        @JsonProperty(value = "prpTcarshipTax")
+        @JSONField(name = "prpTcarshipTax")
+        private PrpTcarshipTaxDTO prpTcarshipTax;
+
+        public void setTrafficTime(String coverageEndDate) {
+            LocalDateTime start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+            String newStartDate;
+            String newEndDate;
+            //及时起保
+            if (start.getHour() > 0) {
+                LocalDateTime end = start.plusYears(1L);
+                newStartDate = DateTimeUtil.format(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.format(end, DateTimeUtil.DATETIME_PATTERN);
+
+                this.getPrpTmain().setStartHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setEndHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setImmeValidStartDate(newStartDate);
+                this.getPrpTmain().setImmeValidEndDate(newEndDate);
+                this.getPrpTmain().setImmeValiFlag("1");
+
+            } else {
+                LocalDateTime end = start.plusYears(1L).minusDays(1L);
+                newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
+                this.getPrpTmain().setImmeValidStartDate(null);
+                this.getPrpTmain().setImmeValidEndDate(null);
+            }
+
+            this.getPrpTmain().setStartDate(newStartDate);
+            this.getPrpTmain().setEndDate(newEndDate);
+            this.getPrptitemkindList().get(0).setStartDate(newStartDate);
+            this.getPrptitemkindList().get(0).setEndDate(newEndDate);
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTitemCarDTO {
+
+            @JsonProperty(value = "clauseTypeSystem")
+            @JSONField(name = "clauseTypeSystem")
+            private String clauseTypeSystem;
+
+            @JsonProperty(value = "clauseType")
+            @JSONField(name = "clauseType")
+            private String clauseType;
+
+            @JsonProperty(value = "termsSystem")
+            @JSONField(name = "termsSystem")
+            private String termsSystem;
+
+            @JsonProperty(value = "carOwner")
+            @JSONField(name = "carOwner")
+            private String carOwner;
+
+            @JsonProperty(value = "otherNature")
+            @JSONField(name = "otherNature")
+
+            private String otherNature;
+            @JsonProperty(value = "carOwnerIdentifyNumber")
+            @JSONField(name = "carOwnerIdentifyNumber")
+            private String carOwnerIdentifyNumber;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTmainDTO {
+
+            @JsonProperty(value = "endDate")
+            @JSONField(name = "endDate")
+            private String endDate;
+
+            @JsonProperty(value = "noCarFlag")
+            @JSONField(name = "noCarFlag")
+            private String noCarFlag;
+
+            @JsonProperty(value = "immeValiFlag")
+            @JSONField(name = "immeValiFlag")
+            private String immeValiFlag;
+
+            @JsonProperty(value = "signDate")
+            @JSONField(name = "signDate")
+            private String signDate;
+
+            @JsonProperty(value = "inputDate")
+            @JSONField(name = "inputDate")
+            private String inputDate;
+
+            @JsonProperty(value = "endHour")
+            @JSONField(name = "endHour")
+            private String endHour;
+
+            @JsonProperty(value = "immeValidEndDate")
+            @JSONField(name = "immeValidEndDate")
+            private String immeValidEndDate;
+
+            @JsonProperty(value = "answer")
+            @JSONField(name = "answer")
+            private String answer;
+
+            @JsonProperty(value = "startHour")
+            @JSONField(name = "startHour")
+            private String startHour;
+
+            @JsonProperty(value = "orderFlag")
+            @JSONField(name = "orderFlag")
+            private String orderFlag;
+
+            @JsonProperty(value = "immeValidStartDate")
+            @JSONField(name = "immeValidStartDate")
+            private String immeValidStartDate;
+
+            @JsonProperty(value = "simpleOrderFlag")
+            @JSONField(name = "simpleOrderFlag")
+            private String simpleOrderFlag;
+
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+
+            @JsonProperty(value = "noCarCodes")
+            @JSONField(name = "noCarCodes")
+            private String noCarCodes;
+
+            @JsonProperty(value = "noCarPremium")
+            @JSONField(name = "noCarPremium")
+            private String noCarPremium;
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CiInsureDemandDTO {
+
+            @JsonProperty(value = "demandNo")
+            @JSONField(name = "demandNo")
+            private String demandNo;
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTmainRateDTO {
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTcarshipTaxDTO {
+
+            /**
+             * 见纳税类型码表
+             */
+            @JsonProperty(value = "taxRelifFlag")
+            @JSONField(name = "taxRelifFlag")
+            private String taxRelifFlag;
+
+            /**
+             * 见减免税原因码表
+             */
+            @JsonProperty(value = "taxRelifFlag")
+            @JSONField(name = "taxRelifFlag")
+            private String relifReason;
+            /**
+             * 减免税计算方式
+             * 1减免金额
+             * 2 减免比例
+             * 3免税(纳税类型为免税时默认为3)
+             * 纳税类型为减免税的必录
+             */
+            @JsonProperty(value = "baseTaxation")
+            @JSONField(name = "baseTaxation")
+            private String baseTaxation;
+            /**
+             * 减免金额
+             * 减免类型为减免金额的时候必录
+             */
+            @JsonProperty(value = "taxRelief")
+            @JSONField(name = "taxRelief")
+            private String taxRelief;
+
+            /**
+             * 减免比例
+             * 减免类型为减免比例的时候必录(单位%)
+             */
+            @JsonProperty(value = "freeRate")
+            @JSONField(name = "freeRate")
+            private String freeRate;
+
+            /**
+             * 完/减免税凭证号
+             * 当纳税类型为减税、免税、已完税时必传
+             */
+            @JsonProperty(value = "paidFreeCertificate")
+            @JSONField(name = "paidFreeCertificate")
+            private String paidFreeCertificate;
+
+            /**
+             * 开具税务机关
+             * 当纳税类型为减税、免税、已完税时必传
+             */
+            @JsonProperty(value = "taxComName")
+            @JSONField(name = "taxComName")
+            private String taxComName;
+
+            /**
+             * 税务机关代码
+             * 当纳税类型为已完税时必传
+             */
+            @JsonProperty(value = "taxComCode")
+            @JSONField(name = "taxComCode")
+            private String taxComCode;
+
+            /**
+             * 开具完税凭证地区代码
+             * 当纳税类型为已完税时必传
+             */
+            @JsonProperty(value = "taxPaidAreaCode")
+            @JSONField(name = "taxPaidAreaCode")
+            private String taxPaidAreaCode;
+
+            /**
+             * 完税凭证填发日期
+             * 当纳税类型为已完税时必传
+             */
+            @JsonProperty(value = "taxDocumentDate")
+            @JSONField(name = "taxDocumentDate")
+            private String taxDocumentDate;
+
+            public PrpTcarshipTaxDTO(VehicleAndVesselTaxVo vehicleAndVesselTax) {
+                RelifReason flag = Enum.valueOf(RelifReason.class, RelifReason.TITLE + vehicleAndVesselTax.getTaxRelifFlag());
+                AssertionUtils.isEmpty(flag, "车船税信息不能为空");
+
+                this.taxRelifFlag = flag.getCode();
+
+                //返回空
+                if (StringUtils.isNotEmpty(vehicleAndVesselTax.getRelifReason())) {
+                    RelifReason reason = Enum.valueOf(RelifReason.class, RelifReason.TITLE + vehicleAndVesselTax.getRelifReason());
+                    this.relifReason = reason.getCode();
+
+                    switch (this.relifReason) {
+                        case "3":
+                            this.baseTaxation = BaseTaxation.BR_2.getCode();
+                            this.freeRate = vehicleAndVesselTax.getTaxRelief();
+                            break;
+                        case "2":
+                            this.baseTaxation = BaseTaxation.BR_3.getCode();
+                            break;
+                        default:
+                            break;
+                    }
+                }
+
+
+                this.paidFreeCertificate = vehicleAndVesselTax.getPaidFreeCertificate();
+                this.taxComName = vehicleAndVesselTax.getTaxComName();
+                this.taxComCode = vehicleAndVesselTax.getTaxComCode();
+                this.taxPaidAreaCode = vehicleAndVesselTax.getTaxPaidAreaCode();
+                this.taxDocumentDate = vehicleAndVesselTax.getTaxDocumentDate();
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrptitemkindListDTO {
+
+            @JsonProperty(value = "amount")
+            @JSONField(name = "amount")
+            private String amount;
+
+            @JsonProperty(value = "kindCode")
+            @JSONField(name = "kindCode")
+            private String kindCode;
+
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+
+            @JsonProperty(value = "endDate")
+            @JSONField(name = "endDate")
+            private String endDate;
+
+            @JsonProperty(value = "isDeductible")
+            @JSONField(name = "isDeductible")
+            private String isDeductible;
+
+            @JsonProperty(value = "rate")
+            @JSONField(name = "rate")
+            private String rate;
+
+            @JsonProperty(value = "deductible")
+            @JSONField(name = "deductible")
+            private String deductible;
+
+            @JsonProperty(value = "kindName")
+            @JSONField(name = "kindName")
+            private String kindName;
+
+            @JsonProperty(value = "taxFee")
+            @JSONField(name = "taxFee")
+            private String taxFee;
+
+            @JsonProperty(value = "noTaxPremium")
+            @JSONField(name = "noTaxPremium")
+            private String noTaxPremium;
+
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class PrptengageListDTO {
+
+        /**
+         * 序号
+         */
+        @JsonProperty(value = "serialNo")
+        @JSONField(name = "serialNo")
+        private String serialNo;
+
+        /**
+         * 特约编码
+         */
+        @JsonProperty(value = "clauseCode")
+        @JSONField(name = "clauseCode")
+        private String clauseCode;
+
+        /**
+         * 特约名
+         */
+        @JsonProperty(value = "clauses")
+        @JSONField(name = "clauses")
+        private String clauses;
+
+        /**
+         * 特约内容
+         */
+        @JsonProperty(value = "clausesContext")
+        @JSONField(name = "clausesContext")
+        private String clausesContext;
+
+        /**
+         * 投保单号
+         */
+        @JsonProperty(value = "proposalNo")
+        @JSONField(name = "proposalNo")
+        private String proposalNo;
+
+        public PrptengageListDTO(GuoRenSpecialAgreementVo guoRenSpecialAgreementVo, int i) {
+            this.serialNo = String.valueOf(i);
+            this.clauseCode = guoRenSpecialAgreementVo.getClauseCode();
+            this.clauses = guoRenSpecialAgreementVo.getClauses();
+            this.clausesContext = guoRenSpecialAgreementVo.getClausesContext();
+        }
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BiDTO {
+
+        @JsonProperty(value = "prpTrenewal")
+        @JSONField(name = "prpTrenewal")
+        private List<?> prpTrenewal;
+
+        @JsonProperty(value = "prptengageList")
+        @JSONField(name = "prptengageList")
+        private List<PrptengageListDTO> prptengageList;
+
+        @JsonProperty(value = "prpTitemCar")
+        @JSONField(name = "prpTitemCar")
+        private PrpTitemCarDTO prpTitemCar;
+
+        @JsonProperty(value = "prpTmain")
+        @JSONField(name = "prpTmain")
+        private PrpTmainDTO prpTmain;
+
+        @JsonProperty(value = "inputRisk")
+        @JSONField(name = "inputRisk")
+        private String inputRisk;
+
+        @JsonProperty(value = "calculateFlagBI")
+        @JSONField(name = "calculateFlagBI")
+        private String calculateFlagBI;
+
+        @JsonProperty(value = "prptitemkindList")
+        @JSONField(name = "prptitemkindList")
+        private List<PrptitemkindListDTO> prptitemkindList;
+
+        @JsonProperty(value = "ciInsureDemand")
+        @JSONField(name = "ciInsureDemand")
+        private CiInsureDemandDTO ciInsureDemand;
+
+        @JsonProperty(value = "prpTChargingPostDataList")
+        @JSONField(name = "prpTChargingPostDataList")
+        private List<?> prpTChargingPostDataList;
+
+        @JsonProperty(value = "ciInsureDemandPay")
+        @JSONField(name = "ciInsureDemandPay")
+        private List<?> ciInsureDemandPay;
+
+        @JsonProperty(value = "editType")
+        @JSONField(name = "editType")
+        private String editType;
+
+        @JsonProperty(value = "ciInsureDemandWarningClaim")
+        @JSONField(name = "ciInsureDemandWarningClaim")
+        private List<?> ciInsureDemandWarningClaim;
+
+        @JsonProperty(value = "prpTmainRate")
+        @JSONField(name = "prpTmainRate")
+        private PrpTmainRateDTO prpTmainRate;
+
+        public void setBusinessTime(String coverageEndDate) {
+            LocalDateTime start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+            String newStartDate;
+            String newEndDate;
+            //及时起保
+            if (start.getHour() > 0) {
+                LocalDateTime end = start.plusYears(1L);
+                newStartDate = DateTimeUtil.format(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.format(end, DateTimeUtil.DATETIME_PATTERN);
+                this.getPrpTmain().setStartHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setEndHour(StringUtils.toString(start.getHour()));
+                this.getPrpTmain().setImmeValidStartDate(newStartDate);
+                this.getPrpTmain().setImmeValidEndDate(newEndDate);
+                this.getPrpTmain().setImmeValiFlag("1");
+
+            } else {
+                LocalDateTime end = start.plusYears(1L).minusDays(1L);
+                newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
+                newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
+                this.getPrpTmain().setImmeValidStartDate(null);
+                this.getPrpTmain().setImmeValidEndDate(null);
+            }
+            this.getPrpTmain().setStartDate(newStartDate);
+            this.getPrpTmain().setEndDate(newEndDate);
+            this.getPrptitemkindList().forEach(x -> {
+                x.setStartDate(newStartDate);
+                x.setEndDate(newEndDate);
+            });
+        }
+
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTitemCarDTO {
+
+
+            /**
+             * 商业险体系
+             * 2020综改-04,新能源-05
+             */
+            @JsonProperty(value = "termsSystem")
+            @JSONField(name = "termsSystem")
+            private String termsSystem;
+
+            /**
+             * 条款体系
+             * 商业险家庭自用对应F54,
+             */
+            @JsonProperty(value = "clauseType")
+            @JSONField(name = "clauseType")
+            private String clauseType;
+
+            /**
+             * 输入标志
+             * 选了对应险种传1,否则传0
+             */
+            @JsonProperty(value = "inputRisk")
+            @JSONField(name = "inputRisk")
+            private String inputRisk;
+
+            /**
+             * 保费计算标志
+             * 选了对应险种传1,否则传0
+             */
+            @JsonProperty(value = "calculateFlagBI")
+            @JSONField(name = "calculateFlagBI")
+            private String calculateFlagBI;
+
+            /**
+             * 理赔对象
+             * 默认传空
+             */
+            @JsonProperty(value = "ciInsureDemandPay")
+            @JSONField(name = "ciInsureDemandPay")
+            private List ciInsureDemandPay;
+
+            /**
+             * 风险警示信息对象
+             * 默认传空
+             */
+            @JsonProperty(value = "ciInsureDemandWarningClaim")
+            @JSONField(name = "ciInsureDemandWarningClaim")
+            private List ciInsureDemandWarningClaim;
+
+            /**
+             * 续保对象
+             * 默认传空
+             */
+            @JsonProperty(value = "prpTrenewal")
+            @JSONField(name = "prpTrenewal")
+            private String prpTrenewal;
+
+            /**
+             * 特别约定对象
+             * 默认传空
+             */
+            @JsonProperty(value = "prptengageList")
+            @JSONField(name = "prptengageList")
+            private String prptengageList;
+
+            /**
+             * 费率对象
+             * 默认传空
+             */
+            @JsonProperty(value = "prpTmainRate")
+            @JSONField(name = "prpTmainRate")
+            private String prpTmainRate;
+
+            /**
+             * 电池类型
+             * 上海必传
+             */
+            @JsonProperty(value = "pureElectricBatteryType")
+            @JSONField(name = "pureElectricBatteryType")
+            private String pureElectricBatteryType;
+
+            @JsonProperty(value = "carOwner")
+            @JSONField(name = "carOwner")
+            private String carOwner;
+
+            @JsonProperty(value = "otherNature")
+            @JSONField(name = "otherNature")
+            private String otherNature;
+
+            @JsonProperty(value = "carOwnerIdentifyNumber")
+            @JSONField(name = "carOwnerIdentifyNumber")
+            private String carOwnerIdentifyNumber;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTmainDTO {
+
+            @JsonProperty(value = "endDate")
+            @JSONField(name = "endDate")
+            private String endDate;
+            @JsonProperty(value = "noCarFlag")
+            @JSONField(name = "noCarFlag")
+            private String noCarFlag;
+            @JsonProperty(value = "immeValiFlag")
+            @JSONField(name = "immeValiFlag")
+            private String immeValiFlag;
+            @JsonProperty(value = "feeandDiscountFlag")
+            @JSONField(name = "feeandDiscountFlag")
+            private String feeandDiscountFlag;
+            @JsonProperty(value = "signDate")
+            @JSONField(name = "signDate")
+            private String signDate;
+            @JsonProperty(value = "inputDate")
+            @JSONField(name = "inputDate")
+            private String inputDate;
+            @JsonProperty(value = "expectDiscount")
+            @JSONField(name = "expectDiscount")
+            private String expectDiscount;
+            @JsonProperty(value = "endHour")
+            @JSONField(name = "endHour")
+            private String endHour;
+            @JsonProperty(value = "immeValidEndDate")
+            @JSONField(name = "immeValidEndDate")
+            private String immeValidEndDate;
+            @JsonProperty(value = "answer")
+            @JSONField(name = "answer")
+            private String answer;
+            @JsonProperty(value = "startHour")
+            @JSONField(name = "startHour")
+            private String startHour;
+            @JsonProperty(value = "orderFlag")
+            @JSONField(name = "orderFlag")
+            private String orderFlag;
+            @JsonProperty(value = "immeValidStartDate")
+            @JSONField(name = "immeValidStartDate")
+            private String immeValidStartDate;
+            @JsonProperty(value = "simpleOrderFlag")
+            @JSONField(name = "simpleOrderFlag")
+            private String simpleOrderFlag;
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+
+            @JsonProperty(value = "noCarCodes")
+            @JSONField(name = "noCarCodes")
+            private String noCarCodes;
+
+            @JsonProperty(value = "noCarPremium")
+            @JSONField(name = "noCarPremium")
+            private String noCarPremium;
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CiInsureDemandDTO {
+
+            @JsonProperty(value = "demandNo")
+            @JSONField(name = "demandNo")
+            private String demandNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTmainRateDTO {
+
+            @JsonProperty(value = "demandNo")
+            @JSONField(name = "demandNo")
+            private String demandNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrptitemkindListDTO {
+            @JsonProperty(value = "amount")
+            @JSONField(name = "amount")
+            private String amount;
+            @JsonProperty(value = "kindCode")
+            @JSONField(name = "kindCode")
+            private String kindCode;
+            @JsonProperty(value = "quantity")
+            @JSONField(name = "quantity")
+            private String quantity;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+            @JsonProperty(value = "endDate")
+            @JSONField(name = "endDate")
+            private String endDate;
+            @JsonProperty(value = "mainKindFlag")
+            @JSONField(name = "mainKindFlag")
+            private String mainKindFlag;
+            @JsonProperty(value = "isDeductible")
+            @JSONField(name = "isDeductible")
+            private String isDeductible;
+            @JsonProperty(value = "rate")
+            @JSONField(name = "rate")
+            private String rate;
+            @JsonProperty(value = "modeCode")
+            @JSONField(name = "modeCode")
+            private String modeCode;
+            @JsonProperty(value = "deductible")
+            @JSONField(name = "deductible")
+            private String deductible;
+            @JsonProperty(value = "kindName")
+            @JSONField(name = "kindName")
+            private String kindName;
+            @JsonProperty(value = "checked")
+            @JSONField(name = "checked")
+            private String checked;
+            @JsonProperty(value = "unitAmount")
+            @JSONField(name = "unitAmount")
+            private String unitAmount;
+            @JsonProperty(value = "itemKindNo")
+            @JSONField(name = "itemKindNo")
+            private String itemKindNo;
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+        }
+    }
+}

+ 25 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/QueryNoCarPolicyNoRequest.java

@@ -0,0 +1,25 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 通过车险投保单号查询非车投保单号
+ * @author: shenwd
+ * @date: 2025/3/14 18:22
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class QueryNoCarPolicyNoRequest implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4271150708855287300L;
+
+    @JsonProperty("carProposalNo")
+    private String carProposalNo;
+}

+ 32 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/SignatureRequest.java

@@ -0,0 +1,32 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: shenwd
+ * @date: 2025/3/16 09:53
+ **/
+@Data
+@NoArgsConstructor
+public class SignatureRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6611212701239808372L;
+    /**
+     * 商业险投保单
+     */
+    @JsonProperty("proposalNoBI")
+    private String proposalNoBI;
+
+    /**
+     * 交强险投保单
+     */
+    @JsonProperty("proposalNoCI")
+    private String proposalNoCI;
+}

+ 65 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/SubmitAuditRequest.java

@@ -0,0 +1,65 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 提交核保 入参
+ * @author: shenwd
+ * @date: 2025/3/14 17:53
+ **/
+@Data
+@NoArgsConstructor
+public class SubmitAuditRequest {
+    @JsonProperty(value = "proposalNoSubList")
+    @JSONField(name = "proposalNoSubList")
+    private List<ProposalNoSubListDTO> proposalNoSubList;
+    @JsonProperty(value = "userCode")
+    @JSONField(name = "userCode")
+    private String userCode;
+
+    /**
+     * 构造报价请求参数
+     *
+     * @author: lig
+     * @date: 2023年08月14日 0014
+     */
+    @JsonIgnore
+    public static SubmitAuditRequest buildParam(GuoRenApiOrder guoRenApiOrder, ChannelInfoDTO channelInfo) {
+
+        SubmitAuditRequest req = new SubmitAuditRequest();
+        req.setUserCode(channelInfo.getHandlerCode());
+
+        List<ProposalNoSubListDTO> proposalNoSubList = new ArrayList<>();
+        ProposalNoSubListDTO dto = new ProposalNoSubListDTO();
+        dto.setProposalNoCI(guoRenApiOrder.getJqApplyNo());
+        dto.setProposalNoBI(guoRenApiOrder.getSyApplyNo());
+
+        proposalNoSubList.add(dto);
+
+        req.setProposalNoSubList(proposalNoSubList);
+
+        return req;
+
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ProposalNoSubListDTO {
+        @JsonProperty(value = "proposalNoBI")
+        @JSONField(name = "proposalNoBI")
+        private String proposalNoBI;
+        @JsonProperty(value = "proposalNoCI")
+        @JSONField(name = "proposalNoCI")
+        private String proposalNoCI;
+    }
+}

+ 60 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Request/VinQueryRequest.java

@@ -0,0 +1,60 @@
+package com.jzg.quote.guoren.api.entity.Request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.guoren.api.entity.GuoRenConfigureParameters;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: vin查询 入参
+ * @author: shenwd
+ * @date: 2025/3/14 10:41
+ **/
+@NoArgsConstructor
+@Data
+public class VinQueryRequest {
+    /**
+     * 车架号
+     */
+    @JsonProperty(value = "frameNo")
+    @JSONField(name = "frameNo")
+    private String frameNo;
+
+    /**
+     * 发动机号
+     */
+    @JsonProperty(value = "engineNo")
+    @JSONField(name = "engineNo")
+    private String engineNo;
+
+    /**
+     * 车牌
+     */
+    @JsonProperty(value = "licenseNo")
+    @JSONField(name = "licenseNo")
+    private String licenseNo;
+
+    /**
+     * 机构代码
+     */
+    @JsonProperty(value = "comCode")
+    @JSONField(name = "comCode")
+    private String comCode;
+
+    /**
+     * 操作人员
+     */
+    @JsonProperty(value = "userCode")
+    @JSONField(name = "userCode")
+    private String userCode;
+
+    public VinQueryRequest(VinQueryRequest vinQueryReq, ChannelInfoDTO channelInfoDTO) {
+        this.frameNo = vinQueryReq.getFrameNo();
+        this.engineNo = vinQueryReq.getEngineNo();
+        this.licenseNo = vinQueryReq.getLicenseNo();
+        this.comCode = channelInfoDTO.getComCode();
+        this.userCode = channelInfoDTO.getHandlerCode();
+    }
+}

+ 373 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/CarPriceMuchResponse.java

@@ -0,0 +1,373 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 车价 响应  多条
+ * @author: shenwd
+ * @date: 2025/3/16 16:03
+ **/
+@Data
+@NoArgsConstructor
+public class CarPriceMuchResponse {
+
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        /**
+         * 车辆实体
+         */
+        @JsonProperty(value = "cars")
+        @JSONField(name = "cars")
+        private List<CarsDTO> cars;
+
+        /**
+         * uid
+         */
+        @JsonProperty(value = "inputvo")
+        @JSONField(name = "inputvo")
+        private String inputvo;
+
+        @NoArgsConstructor
+        @Data
+        public static class CarsDTO {
+            /**
+             * 起保日期
+             */
+            @JsonProperty(value = "startDateBI")
+            @JSONField(name = "startDateBI")
+            private String startDateBI;
+
+            /**
+             * 当前日期
+             */
+            @JsonProperty(value = "currentDate")
+            @JSONField(name = "currentDate")
+            private String currentDate;
+
+            /**
+             * 条款类别
+             */
+            @JsonProperty(value = "clauseTypeBI")
+            @JSONField(name = "clauseTypeBI")
+            private String clauseTypeBI;
+
+            /**
+             * 业务来源标志
+             */
+            @JsonProperty(value = "businessNatureFlag")
+            @JSONField(name = "businessNatureFlag")
+            private String businessNatureFlag;
+
+            /**
+             * 车型查询码
+             */
+            @JsonProperty(value = "searchSequenceNo")
+            @JSONField(name = "searchSequenceNo")
+            private String searchSequenceNo;
+
+            /**
+             * 行业参考实际价值
+             */
+            @JsonProperty(value = "actualValue")
+            @JSONField(name = "actualValue")
+            private String actualValue;
+
+            /**
+             * 协商实际价值
+             */
+            @JsonProperty(value = "compromisePrice")
+            @JSONField(name = "compromisePrice")
+            private String compromisePrice;
+
+            /**
+             * 商车费改 公告型号
+             */
+            @JsonProperty(value = "noticeType")
+            @JSONField(name = "noticeType")
+            private String noticeType;
+
+            /**
+             * 进口
+             */
+            @JsonProperty(value = "countryNature")
+            @JSONField(name = "countryNature")
+            private String countryNature;
+
+            /**
+             * 纯风险保费标志
+             */
+            @JsonProperty(value = "pureRiskPremiumFlag")
+            @JSONField(name = "pureRiskPremiumFlag")
+            private String pureRiskPremiumFlag;
+
+            /**
+             * 车款名称
+             */
+            @JsonProperty(value = "carName")
+            @JSONField(name = "carName")
+            private String carName;
+
+            /**
+             * 基础保费
+             */
+            @JsonProperty(value = "pureRiskPremium")
+            @JSONField(name = "pureRiskPremium")
+            private String pureRiskPremium;
+
+            /**
+             * 厂商名称
+             */
+            @JsonProperty(value = "totalVehicleWeight")
+            @JSONField(name = "totalVehicleWeight")
+            private String totalVehicleWeight;
+
+            /**
+             * 品牌
+             */
+            @JsonProperty(value = "carBrand")
+            @JSONField(name = "carBrand")
+            private String carBrand;
+
+            /**
+             * 车系名称
+             */
+            @JsonProperty(value = "derailleurType")
+            @JSONField(name = "derailleurType")
+            private String derailleurType;
+
+            /**
+             * 车型代码
+             */
+            @JsonProperty(value = "modelName")
+            @JSONField(name = "modelName")
+            private String modelName;
+
+            /**
+             * 核定载质量
+             */
+            @JsonProperty(value = "tonCount")
+            @JSONField(name = "tonCount")
+            private String tonCount;
+
+            /**
+             * 类别名称
+             */
+            @JsonProperty(value = "modelDesc")
+            @JSONField(name = "modelDesc")
+            private String modelDesc;
+
+            /**
+             * 系别名称
+             */
+            @JsonProperty(value = "riskFlag")
+            @JSONField(name = "riskFlag")
+            private String riskFlag;
+
+            /**
+             * 纯风险保费
+             */
+            @JsonProperty(value = "carSeriesName")
+            @JSONField(name = "carSeriesName")
+            private String carSeriesName;
+
+            /**
+             * 车型代码
+             */
+            @JsonProperty(value = "modelCode")
+            @JSONField(name = "modelCode")
+            private String modelCode;
+
+            /**
+             * 打印厂牌型号
+             */
+            @JsonProperty(value = "printBrandName")
+            @JSONField(name = "printBrandName")
+            private String printBrandName;
+
+            /**
+             * 出厂日期
+             */
+            @JsonProperty(value = "makeDate")
+            @JSONField(name = "makeDate")
+            private String makeDate;
+
+            /**
+             * 车辆品牌
+             */
+            @JsonProperty(value = "vehicleBrand")
+            @JSONField(name = "vehicleBrand")
+            private String vehicleBrand;
+
+            /**
+             * 车辆品牌
+             */
+            @JsonProperty(value = "licenseCategory")
+            @JSONField(name = "licenseCategory")
+            private String licenseCategory;
+
+            /**
+             * 号牌号码
+             */
+            @JsonProperty(value = "licenseNo")
+            @JSONField(name = "licenseNo")
+            private String licenseNo;
+
+            /**
+             * 号牌种类代码
+             */
+            @JsonProperty(value = "licenseKindCode")
+            @JSONField(name = "licenseKindCode")
+            private String licenseKindCode;
+
+            /**
+             * 车架号
+             */
+            @JsonProperty(value = "frameNo")
+            @JSONField(name = "frameNo")
+            private String frameNo;
+
+            /**
+             * 车架号
+             */
+            @JsonProperty(value = "carOwner")
+            @JSONField(name = "carOwner")
+            private String carOwner;
+            @JsonProperty(value = "purchasePriceSign")
+            @JSONField(name = "purchasePriceSign")
+            private String purchasePriceSign;
+            @JsonProperty(value = "fuelType")
+            @JSONField(name = "fuelType")
+            private String fuelType;
+            @JsonProperty(value = "carVhicleModel")
+            @JSONField(name = "carVhicleModel")
+            private String carVhicleModel;
+            @JsonProperty(value = "modelCodeGX")
+            @JSONField(name = "modelCodeGX")
+            private String modelCodeGX;
+            @JsonProperty(value = "oldModelCode")
+            @JSONField(name = "oldModelCode")
+            private String oldModelCode;
+            @JsonProperty(value = "bjTradeName")
+            @JSONField(name = "bjTradeName")
+            private String bjTradeName;
+            @JsonProperty(value = "bjBrand")
+            @JSONField(name = "bjBrand")
+            private String bjBrand;
+            @JsonProperty(value = "bjSeries")
+            @JSONField(name = "bjSeries")
+            private String bjSeries;
+            @JsonProperty(value = "bjCarName")
+            @JSONField(name = "bjCarName")
+            private String bjCarName;
+            @JsonProperty(value = "bjNoticeType")
+            @JSONField(name = "bjNoticeType")
+            private String bjNoticeType;
+            @JsonProperty(value = "bjCategoryName")
+            @JSONField(name = "bjCategoryName")
+            private String bjCategoryName;
+            @JsonProperty(value = "bjDeptName")
+            @JSONField(name = "bjDeptName")
+            private String bjDeptName;
+            @JsonProperty(value = "bjPureRiskPremium")
+            @JSONField(name = "bjPureRiskPremium")
+            private String bjPureRiskPremium;
+            @JsonProperty(value = "brandName")
+            @JSONField(name = "brandName")
+            private String brandName;
+            @JsonProperty(value = "seatCountLB")
+            @JSONField(name = "seatCountLB")
+            private String seatCountLB;
+            @JsonProperty(value = "exhaustScale")
+            @JSONField(name = "exhaustScale")
+            private String exhaustScale;
+            @JsonProperty(value = "exhaustScaleLB")
+            @JSONField(name = "exhaustScaleLB")
+            private String exhaustScaleLB;
+            @JsonProperty(value = "tonCountLB")
+            @JSONField(name = "tonCountLB")
+            private String tonCountLB;
+            @JsonProperty(value = "purchasePriceLB")
+            @JSONField(name = "purchasePriceLB")
+            private String purchasePriceLB;
+            @JsonProperty(value = "purchasePriceOrigin")
+            @JSONField(name = "purchasePriceOrigin")
+            private String purchasePriceOrigin;
+            @JsonProperty(value = "purchasePriceNoTaxFlag")
+            @JSONField(name = "purchasePriceNoTaxFlag")
+            private String purchasePriceNoTaxFlag;
+            @JsonProperty(value = "completeKerbMassNew")
+            @JSONField(name = "completeKerbMassNew")
+            private String completeKerbMassNew;
+            @JsonProperty(value = "aliasName")
+            @JSONField(name = "aliasName")
+            private String aliasName;
+            @JsonProperty(value = "carYear")
+            @JSONField(name = "carYear")
+            private String carYear;
+            @JsonProperty(value = "purchasePriceNotax")
+            @JSONField(name = "purchasePriceNotax")
+            private String purchasePriceNotax;
+            @JsonProperty(value = "kindredPriceNotax")
+            @JSONField(name = "kindredPriceNotax")
+            private String kindredPriceNotax;
+            @JsonProperty(value = "kindredPrice")
+            @JSONField(name = "kindredPrice")
+            private String kindredPrice;
+            @JsonProperty(value = "remark")
+            @JSONField(name = "remark")
+            private String remark;
+            @JsonProperty(value = "alarmFlag")
+            @JSONField(name = "alarmFlag")
+            private String alarmFlag;
+            @JsonProperty(value = "carStyle")
+            @JSONField(name = "carStyle")
+            private String carStyle;
+            @JsonProperty(value = "shTradeName")
+            @JSONField(name = "shTradeName")
+            private String shTradeName;
+            @JsonProperty(value = "shSeries")
+            @JSONField(name = "shSeries")
+            private String shSeries;
+            @JsonProperty(value = "shCarName")
+            @JSONField(name = "shCarName")
+            private String shCarName;
+            @JsonProperty(value = "shCategoryName")
+            @JSONField(name = "shCategoryName")
+            private String shCategoryName;
+            @JsonProperty(value = "shDeptName")
+            @JSONField(name = "shDeptName")
+            private String shDeptName;
+            @JsonProperty(value = "shPureRiskPremium")
+            @JSONField(name = "shPureRiskPremium")
+            private String shPureRiskPremium;
+            @JsonProperty(value = "completeKerbMass")
+            @JSONField(name = "completeKerbMass")
+            private String completeKerbMass;
+            @JsonProperty(value = "errorCode")
+            @JSONField(name = "errorCode")
+            private String errorCode;
+            @JsonProperty(value = "errorMessage")
+            @JSONField(name = "errorMessage")
+            private String errorMessage;
+            @JsonProperty(value = "engineNo")
+            @JSONField(name = "engineNo")
+            private String engineNo;
+        }
+    }
+}

+ 59 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/CarPriceResponse.java

@@ -0,0 +1,59 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: 车价 响应  单条
+ * @author: shenwd
+ * @date: 2025/3/14 15:36
+ **/
+@NoArgsConstructor
+@Data
+public class CarPriceResponse {
+
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty(value = "basepureriskpremium")
+        @JSONField(name = "basepureriskpremium")
+        private String basepureriskpremium;
+
+        @JsonProperty(value = "modelCode")
+        @JSONField(name = "modelCode")
+        private String modelCode;
+
+        @JsonProperty(value = "inputvo")
+        @JSONField(name = "inputvo")
+        private String inputvo;
+
+        @JsonProperty(value = "actualValue")
+        @JSONField(name = "actualValue")
+        private Double actualValue;
+
+        @JsonProperty(value = "noticeType")
+        @JSONField(name = "noticeType")
+        private String noticeType;
+
+        @JsonProperty(value = "derailleurType")
+        @JSONField(name = "derailleurType")
+        private String derailleurType;
+
+        @JsonProperty(value = "carCountryNature")
+        @JSONField(name = "carCountryNature")
+        private String carCountryNature;
+
+    }
+}

+ 23 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/IIRBT00012Response.java

@@ -0,0 +1,23 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @description: 已核投保单注销
+ * @author: shenwd
+ * @date: 2025/3/16 09:45
+ **/
+@Data
+@NoArgsConstructor
+public class IIRBT00012Response implements Serializable {
+
+    @JsonProperty("resultCode")
+    private Integer resultCode;
+
+    @JsonProperty("resultMsg")
+    private String resultMsg;
+}

+ 142 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/InsuranceSlipResponse.java

@@ -0,0 +1,142 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 投保单保存 返回数据
+ * @author: shenwd
+ * @date: 2025/3/14 11:48
+ **/
+@NoArgsConstructor
+@Data
+public class InsuranceSlipResponse {
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty(value = "itemVOList")
+        @JSONField(name = "itemVOList")
+        private List<ItemVOListDTO> itemVOList;
+        @JsonProperty(value = "prpTitemCarVo")
+        @JSONField(name = "prpTitemCarVo")
+        private PrpTitemCarVoDTO prpTitemCarVo;
+        @JsonProperty(value = "proposalNoDetailVo")
+        @JSONField(name = "proposalNoDetailVo")
+        private ProposalNoDetailVoDTO proposalNoDetailVo;
+        @JsonProperty(value = "minsuredVo")
+        @JSONField(name = "minsuredVo")
+        private MinsuredVoDTO minsuredVo;
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTitemCarVoDTO {
+            @JsonProperty(value = "licenseNo")
+            @JSONField(name = "licenseNo")
+            private String licenseNo;
+            @JsonProperty(value = "frameNo")
+            @JSONField(name = "frameNo")
+            private String frameNo;
+            @JsonProperty(value = "engineNo")
+            @JSONField(name = "engineNo")
+            private String engineNo;
+            @JsonProperty(value = "brandName")
+            @JSONField(name = "brandName")
+            private String brandName;
+            @JsonProperty(value = "enrollDate")
+            @JSONField(name = "enrollDate")
+            private String enrollDate;
+            @JsonProperty(value = "chgOwnerFlag")
+            @JSONField(name = "chgOwnerFlag")
+            private String chgOwnerFlag;
+            @JsonProperty(value = "carOwner")
+            @JSONField(name = "carOwner")
+            private String carOwner;
+            @JsonProperty(value = "carOwnerIdentifyType")
+            @JSONField(name = "carOwnerIdentifyType")
+            private String carOwnerIdentifyType;
+            @JsonProperty(value = "carOwnerIdentifyNumber")
+            @JSONField(name = "carOwnerIdentifyNumber")
+            private String carOwnerIdentifyNumber;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ProposalNoDetailVoDTO {
+            @JsonProperty(value = "proposalNoBI")
+            @JSONField(name = "proposalNoBI")
+            private String proposalNoBI;
+            @JsonProperty(value = "proposalNoCI")
+            @JSONField(name = "proposalNoCI")
+            private String proposalNoCI;
+            @JsonProperty(value = "companyName")
+            @JSONField(name = "companyName")
+            private String companyName;
+            @JsonProperty(value = "orderNo")
+            @JSONField(name = "orderNo")
+            private String orderNo;
+            @JsonProperty(value = "sumPremium")
+            @JSONField(name = "sumPremium")
+            private Double sumPremium;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class MinsuredVoDTO {
+            @JsonProperty(value = "appliName")
+            @JSONField(name = "appliName")
+            private String appliName;
+            @JsonProperty(value = "appliIdentifyType")
+            @JSONField(name = "appliIdentifyType")
+            private String appliIdentifyType;
+            @JsonProperty(value = "appliIdentifyNumber")
+            @JSONField(name = "appliIdentifyNumber")
+            private String appliIdentifyNumber;
+            @JsonProperty(value = "appliMobile")
+            @JSONField(name = "appliMobile")
+            private String appliMobile;
+            @JsonProperty(value = "insuredName")
+            @JSONField(name = "insuredName")
+            private String insuredName;
+            @JsonProperty(value = "insuredMobile")
+            @JSONField(name = "insuredMobile")
+            private String insuredMobile;
+            @JsonProperty(value = "insuredIdentifyType")
+            @JSONField(name = "insuredIdentifyType")
+            private String insuredIdentifyType;
+            @JsonProperty(value = "insuredIdentifyNumber")
+            @JSONField(name = "insuredIdentifyNumber")
+            private String insuredIdentifyNumber;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ItemVOListDTO {
+            @JsonProperty(value = "kindCode")
+            @JSONField(name = "kindCode")
+            private String kindCode;
+            @JsonProperty(value = "noTaxPremium")
+            @JSONField(name = "noTaxPremium")
+            private Double noTaxPremium;
+            @JsonProperty(value = "premium")
+            @JSONField(name = "premium")
+            private Double premium;
+            @JsonProperty(value = "taxFee")
+            @JSONField(name = "taxFee")
+            private Double taxFee;
+        }
+    }
+}

+ 69 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/NoCarElectronicPolicyResponse.java

@@ -0,0 +1,69 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 非车险电子保单 响应
+ * @author: shenwd
+ * @date: 2025/3/16 09:59
+ **/
+@Data
+@NoArgsConstructor
+public class NoCarElectronicPolicyResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 5769219865972281611L;
+    @JsonProperty("code")
+    private String code;
+
+    @JsonProperty("message")
+    private String message;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO implements Serializable{
+
+        private static final long serialVersionUID = 6460383211467264196L;
+
+        @JsonProperty("epolicyNo")
+        private String epolicyNo;
+
+        @JsonProperty("epolicyName")
+        private String epolicyName;
+
+        @JsonProperty("epolicyUrl")
+        private String epolicyUrl;
+
+        @JsonProperty("voucherUrl")
+        private Object voucherUrl;
+
+        @JsonProperty("guaranNo")
+        private Object guaranNo;
+
+        @JsonProperty("guaranName")
+        private Object guaranName;
+
+        @JsonProperty("guaranUrl")
+        private Object guaranUrl;
+
+        @JsonProperty("endorNo")
+        private Object endorNo;
+
+        @JsonProperty("endorName")
+        private Object endorName;
+
+        @JsonProperty("endorUrl")
+        private Object endorUrl;
+
+        @JsonProperty("message")
+        private Object message;
+    }
+}

+ 52 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PayResponse.java

@@ -0,0 +1,52 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 支付  返回数据
+ * @author: shenwd
+ * @date: 2025/3/16 09:27
+ **/
+@NoArgsConstructor
+@Data
+public class PayResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6016981513722120431L;
+
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty(value = "orderId")
+        @JSONField(name = "orderId")
+        private String orderId;
+        @JsonProperty(value = "payUrl")
+        @JSONField(name = "payUrl")
+        private String payUrl;
+        @JsonProperty(value = "resultCode")
+        @JSONField(name = "resultCode")
+        private String resultCode;
+        @JsonProperty(value = "signmsg")
+        @JSONField(name = "signmsg")
+        private String signmsg;
+        @JsonProperty(value = "basePicture")
+        @JSONField(name = "basePicture")
+        private String basePicture;
+    }
+}

+ 28 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PolicyResponse.java

@@ -0,0 +1,28 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: 保单  出参
+ * @author: shenwd
+ * @date: 2025/3/16 09:55
+ **/
+@Data
+@NoArgsConstructor
+public class PolicyResponse {
+
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private String data;
+}

+ 1148 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/PremiumResponse.java

@@ -0,0 +1,1148 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.guoren.api.entity.vo.GuoRenSpecialAgreementVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 保费计算  返回数据
+ * @author: shenwd
+ * @date: 2025/3/14 14:31
+ **/
+@NoArgsConstructor
+@Data
+public class PremiumResponse {
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+
+        @JsonIgnore
+        private String ciStartDate;
+        @JsonIgnore
+        private String ciEndDate;
+        @JsonIgnore
+        private String biStartDate;
+        @JsonIgnore
+        private String biEndDate;
+
+        @JsonProperty(value = "itemVOList")
+        @JSONField(name = "itemVOList")
+        private List<ItemVOListDTO> itemVOList;
+        @JsonProperty(value = "carShipTaxRespVO")
+        @JSONField(name = "carShipTaxRespVO")
+        private CarShipTaxRespVODTO carShipTaxRespVO;
+        @JsonProperty(value = "sumPremiumBI")
+        @JSONField(name = "sumPremiumBI")
+        private Double sumPremiumBI;
+        @JsonProperty(value = "sumPremiumCI")
+        @JSONField(name = "sumPremiumCI")
+        private Double sumPremiumCI;
+        @JsonProperty(value = "sumPayTax")
+        @JSONField(name = "sumPayTax")
+        private Double sumPayTax;
+        @JsonProperty(value = "biPrptenages")
+        @JSONField(name = "biPrptenages")
+        private List<BiPrptenagesDTO> biPrptenages;
+        @JsonProperty(value = "ciPrptenages")
+        @JSONField(name = "ciPrptenages")
+        private List<CiPrptenagesDTO> ciPrptenages;
+        @JsonProperty(value = "comlossCondition")
+        @JSONField(name = "comlossCondition")
+        private String comlossCondition;
+        @JsonProperty(value = "signDiscount")
+        @JSONField(name = "signDiscount")
+        private String signDiscount;
+        @JsonProperty(value = "sumTopRate")
+        @JSONField(name = "sumTopRate")
+        private String sumTopRate;
+        @JsonProperty(value = "sumLowerRate")
+        @JSONField(name = "sumLowerRate")
+        private String sumLowerRate;
+        @JsonProperty(value = "selfAdjustRate")
+        @JSONField(name = "selfAdjustRate")
+        private Double selfAdjustRate;
+        @JsonProperty(value = "selfChannelRate")
+        @JSONField(name = "selfChannelRate")
+        private Integer selfChannelRate;
+        @JsonProperty(value = "noclaimRate")
+        @JSONField(name = "noclaimRate")
+        private Integer noclaimRate;
+        @JsonProperty(value = "addonRate")
+        @JSONField(name = "addonRate")
+        private Integer addonRate;
+        @JsonProperty(value = "autoPriceOutputXOMRespVo")
+        @JSONField(name = "autoPriceOutputXOMRespVo")
+        private AutoPriceOutputXOMRespVoDTO autoPriceOutputXOMRespVo;
+        @JsonProperty(value = "biClaimTimes")
+        @JSONField(name = "biClaimTimes")
+        private Integer biClaimTimes;
+        @JsonProperty(value = "biClaimAmount")
+        @JSONField(name = "biClaimAmount")
+        private Integer biClaimAmount;
+        @JsonProperty(value = "ciClaimTimes")
+        @JSONField(name = "ciClaimTimes")
+        private Integer ciClaimTimes;
+        @JsonProperty(value = "ciClaimAmount")
+        @JSONField(name = "ciClaimAmount")
+        private Integer ciClaimAmount;
+        @JsonProperty(value = "lastYearEndDate")
+        @JSONField(name = "lastYearEndDate")
+        private Object lastYearEndDate;
+        @JsonProperty(value = "prpTChargingPostDataList")
+        @JSONField(name = "prpTChargingPostDataList")
+        private List<PrpTChargingPostData> prpTChargingPostDataList;
+        @JsonProperty(value = "ciLossCondition")
+        @JSONField(name = "ciLossCondition")
+        private Integer ciLossCondition;
+        @JsonProperty(value = "lossFeeSum")
+        @JSONField(name = "lossFeeSum")
+        private Integer lossFeeSum;
+        @JsonProperty(value = "birate")
+        @JSONField(name = "birate")
+        private BirateDTO birate;
+        @JsonProperty(value = "cicheckCode")
+        @JSONField(name = "cicheckCode")
+        private String cicheckCode;
+        @JsonProperty(value = "cidemandNo")
+        @JSONField(name = "cidemandNo")
+        private Object cidemandNo;
+        @JsonProperty(value = "ciprofit")
+        @JSONField(name = "ciprofit")
+        private Integer ciprofit;
+        @JsonProperty(value = "cirate")
+        @JSONField(name = "cirate")
+        private CirateDTO cirate;
+        @JsonProperty(value = "uuid")
+        @JSONField(name = "uuid")
+        private String uuid;
+        @JsonProperty(value = "bicheckCode")
+        @JSONField(name = "bicheckCode")
+        private String bicheckCode;
+        @JsonProperty(value = "bidemandNo")
+        @JSONField(name = "bidemandNo")
+        private Object bidemandNo;
+        @JsonProperty(value = "bireCoverMsg")
+        @JSONField(name = "bireCoverMsg")
+        private String bireCoverMsg;
+        @JsonProperty(value = "biprofit")
+        @JSONField(name = "biprofit")
+        private Integer biprofit;
+        @JsonProperty(value = "prpTenGearAllocationFeeList")
+        @JSONField(name = "prpTenGearAllocationFeeList")
+        private List<PrpTenGearAllocationFeeVo> prpTenGearAllocationFeeList;
+
+        @JsonProperty(value = "ciInsureDemandPay")
+        @JSONField(name = "ciInsureDemandPay")
+        private List<CIInsureDemandPayVo> ciInsureDemandPay;
+
+        @JsonProperty(value = "ciInsureDemand")
+        @JSONField(name = "ciInsureDemand")
+        private List<CiInsureDemandDTO> ciInsureDemandDTOS;
+
+        @NoArgsConstructor
+        @Data
+        public static class CiInsureDemandDTO{
+
+            @JsonProperty("demandNo")
+            private String demandNo;
+            @JsonProperty("errorMessage")
+            private String errorMessage;
+            @JsonProperty("errorCode")
+            private String errorCode;
+            @JsonProperty("checkCode")
+            private String checkCode;
+            @JsonProperty("ownerMessage")
+            private String ownerMessage;
+            @JsonProperty("commissionRateUpper")
+            private String commissionRateUpper;
+            @JsonProperty("companyCommissionRateUpper")
+            private String companyCommissionRateUpper;
+            @JsonProperty("claimEffectReason")
+            private String claimEffectReason;
+            @JsonProperty("newvehicleEffectReason")
+            private String newvehicleEffectReason;
+            @JsonProperty("produceReffectReason")
+            private String produceReffectReason;
+            @JsonProperty("busiLastYearEndDat")
+            private String busiLastYearEndDat;
+            @JsonProperty("transferFlag")
+            private String transferFlag;
+            @JsonProperty("highRiskFlag")
+            private String highRiskFlag;
+            @JsonProperty("effectReason")
+            private String effectReason;
+            @JsonProperty("lastyearCompanyId")
+            private String lastyearCompanyId;
+            @JsonProperty("ciInsureDemandBI")
+            private Object ciInsureDemandBI;
+            @JsonProperty("licensePlateType")
+            private String licensePlateType;
+            @JsonProperty("color")
+            private String color;
+            @JsonProperty("vehicleOwnerName")
+            private String vehicleOwnerName;
+            @JsonProperty("displacement")
+            private String displacement;
+            @JsonProperty("channelType")
+            private String channelType;
+            @JsonProperty("salePrice")
+            private String salePrice;
+            @JsonProperty("motorTypeCode")
+            private String motorTypeCode;
+            @JsonProperty("contractNo")
+            private String contractNo;
+            @JsonProperty("contractValidDate")
+            private String contractValidDate;
+            @JsonProperty("contractExpireDate")
+            private String contractExpireDate;
+            @JsonProperty("pmVehicleMessage")
+            private String pmVehicleMessage;
+            @JsonProperty("useNatureMessage")
+            private String useNatureMessage;
+            @JsonProperty("chgOwnerMessage")
+            private String chgOwnerMessage;
+            @JsonProperty("scoreCode")
+            private String scoreCode;
+            @JsonProperty("score")
+            private String score;
+            @JsonProperty("updateTime")
+            private String updateTime;
+            @JsonProperty("insureYears")
+            private String insureYears;
+            @JsonProperty("claimTimes")
+            private String claimTimes;
+            @JsonProperty("claimAdjustLevel")
+            private String claimAdjustLevel;
+            @JsonProperty("newVehicleFlag")
+            private String newVehicleFlag;
+            @JsonProperty("comCode")
+            private String comCode;
+            @JsonProperty("modelCode")
+            private String modelCode;
+            @JsonProperty("remark")
+            private String remark;
+            @JsonProperty("searchSequenceNo")
+            private String searchSequenceNo;
+            @JsonProperty("renewalFlag")
+            private String renewalFlag;
+            @JsonProperty("noClaimAdjustReason")
+            private String noClaimAdjustReason;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("proposalNo")
+            private String proposalNo;
+            @JsonProperty("licenseNo")
+            private String licenseNo;
+            @JsonProperty("engineNo")
+            private String engineNo;
+            @JsonProperty("frameNo")
+            private String frameNo;
+            @JsonProperty("startDate")
+            private String startDate;
+            @JsonProperty("endDate")
+            private String endDate;
+            @JsonProperty("policyNo")
+            private String policyNo;
+            @JsonProperty("operatorCode")
+            private String operatorCode;
+            @JsonProperty("brandName")
+            private String brandName;
+            @JsonProperty("amount")
+            private String amount;
+            @JsonProperty("carOwner")
+            private String carOwner;
+            @JsonProperty("vehicleBrand")
+            private String vehicleBrand;
+            @JsonProperty("premium")
+            private String premium;
+            @JsonProperty("licenseColorCode")
+            private String licenseColorCode;
+            @JsonProperty("carKindCode")
+            private String carKindCode;
+            @JsonProperty("useNatureCode")
+            private String useNatureCode;
+            @JsonProperty("basePremium")
+            private String basePremium;
+            @JsonProperty("licenseType")
+            private String licenseType;
+            @JsonProperty("enrollDate")
+            private String enrollDate;
+            @JsonProperty("tonCount")
+            private String tonCount;
+            @JsonProperty("completeKerbMass")
+            private String completeKerbMass;
+            @JsonProperty("seatCount")
+            private String seatCount;
+            @JsonProperty("fuelType")
+            private String fuelType;
+            @JsonProperty("exhaustScale")
+            private String exhaustScale;
+            @JsonProperty("transferDate")
+            private String transferDate;
+            @JsonProperty("lastYearEndDate")
+            private String lastYearEndDate;
+            @JsonProperty("reCoverMsg")
+            private String reCoverMsg;
+            @JsonProperty("certificateDate")
+            private String certificateDate;
+            @JsonProperty("claimCoeff")
+            private String claimCoeff;
+            @JsonProperty("peccancyCoeff")
+            private String peccancyCoeff;
+            @JsonProperty("benchmarkPremium")
+            private String benchmarkPremium;
+            @JsonProperty("driverCoeff")
+            private String driverCoeff;
+            @JsonProperty("districtCoeff")
+            private String districtCoeff;
+            @JsonProperty("manufacturerName")
+            private String manufacturerName;
+            @JsonProperty("endValidDate")
+            private String endValidDate;
+            @JsonProperty("carStatus")
+            private String carStatus;
+            @JsonProperty("validCheckDate")
+            private String validCheckDate;
+            @JsonProperty("flag")
+            private String flag;
+            @JsonProperty("ip")
+            private String ip;
+            @JsonProperty("noPeccancyReason")
+            private String noPeccancyReason;
+            @JsonProperty("lastBusinessNature")
+            private String lastBusinessNature;
+            @JsonProperty("nonclaimAdjust")
+            private String nonclaimAdjust;
+            @JsonProperty("loyaltyAdjust")
+            private String loyaltyAdjust;
+            @JsonProperty("safeAdjust")
+            private String safeAdjust;
+            @JsonProperty("lastPolicyNo")
+            private String lastPolicyNo;
+            @JsonProperty("usbKey")
+            private String usbKey;
+            @JsonProperty("noLoyaltyAdjustReason")
+            private String noLoyaltyAdjustReason;
+            @JsonProperty("kindAdjustReason")
+            private String kindAdjustReason;
+            @JsonProperty("noKindAdjustReason")
+            private String noKindAdjustReason;
+            @JsonProperty("kindAdjustValue")
+            private String kindAdjustValue;
+            @JsonProperty("peccancyEndDate")
+            private String peccancyEndDate;
+            @JsonProperty("policyCoeff")
+            private String policyCoeff;
+            @JsonProperty("brandCName")
+            private String brandCName;
+            @JsonProperty("restricFlag")
+            private String restricFlag;
+            @JsonProperty("dataSourceCode")
+            private String dataSourceCode;
+            @JsonProperty("fundRate")
+            private String fundRate;
+            @JsonProperty("fundAmount")
+            private String fundAmount;
+            @JsonProperty("districtRateReason")
+            private String districtRateReason;
+            @JsonProperty("question")
+            private String question;
+            @JsonProperty("makeDate")
+            private String makeDate;
+            @JsonProperty("queryPastDate")
+            private String queryPastDate;
+            @JsonProperty("proconfirmSequenceNo")
+            private String proconfirmSequenceNo;
+            @JsonProperty("proconfirmStartDate")
+            private String proconfirmStartDate;
+            @JsonProperty("proconfirmEndDate")
+            private String proconfirmEndDate;
+            @JsonProperty("preferentialPremium")
+            private String preferentialPremium;
+            @JsonProperty("commissionRate")
+            private String commissionRate;
+            @JsonProperty("demandTime")
+            private String demandTime;
+            @JsonProperty("preferentialFormula")
+            private String preferentialFormula;
+            @JsonProperty("driverRateReason")
+            private String driverRateReason;
+            @JsonProperty("rateFloatFlag")
+            private String rateFloatFlag;
+            @JsonProperty("peccancyAdjustReason")
+            private String peccancyAdjustReason;
+            @JsonProperty("claimAdjustReason")
+            private String claimAdjustReason;
+            @JsonProperty("ciinsureDemandRiskCodeListBI")
+            private Object ciinsureDemandRiskCodeListBI;
+            @JsonProperty("busiAdjustStart")
+            private String busiAdjustStart;
+            @JsonProperty("peccancyStartDate")
+            private String peccancyStartDate;
+            @JsonProperty("preferentialDay")
+            private String preferentialDay;
+            @JsonProperty("busiAdjustEnd")
+            private String busiAdjustEnd;
+            @JsonProperty("lastYearStartDate")
+            private String lastYearStartDate;
+            @JsonProperty("billDate")
+            private String billDate;
+            @JsonProperty("reinsureFlag")
+            private String reinsureFlag;
+            @JsonProperty("lastBillDate")
+            private String lastBillDate;
+            @JsonProperty("loyaltyAdjustReason")
+            private String loyaltyAdjustReason;
+            @JsonProperty("busiLastYearEndDate")
+            private String busiLastYearEndDate;
+            @JsonProperty("useTypeSource")
+            private String useTypeSource;
+            @JsonProperty("checkDate")
+            private String checkDate;
+            @JsonProperty("haulage")
+            private String haulage;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CIInsureDemandPayVo {
+            @JsonProperty(value = "DemandNo")
+            @JSONField(name = "DemandNo")
+            private String DemandNo;
+            @JsonProperty(value = "SerialNo")
+            @JSONField(name = "SerialNo")
+            private String SerialNo;
+            @JsonProperty(value = "payCompany")
+            @JSONField(name = "payCompany")
+            private String payCompany;
+            @JsonProperty(value = "PolicyNo")
+            @JSONField(name = "PolicyNo")
+            private String PolicyNo;
+            @JsonProperty(value = "KindCode")
+            @JSONField(name = "KindCode")
+            private String KindCode;
+            @JsonProperty(value = "PayType")
+            @JSONField(name = "PayType")
+            private String PayType;
+            @JsonProperty(value = "PersonPayType")
+            @JSONField(name = "PersonPayType")
+            private String PersonPayType;
+            @JsonProperty(value = "compensateNo")
+            @JSONField(name = "compensateNo")
+            private String compensateNo;
+            @JsonProperty(value = "lossTime")
+            @JSONField(name = "lossTime")
+            private String lossTime;
+            @JsonProperty(value = "lossFee")
+            @JSONField(name = "lossFee")
+            private String lossFee;
+            @JsonProperty(value = "Remark")
+            @JSONField(name = "Remark")
+            private String Remark;
+            @JsonProperty(value = "Flag")
+            @JSONField(name = "Flag")
+            private String Flag;
+            @JsonProperty(value = "endCaseTime")
+            @JSONField(name = "endCaseTime")
+            private String endCaseTime;
+            @JsonProperty(value = "AccidentDeathFlag")
+            @JSONField(name = "AccidentDeathFlag")
+            private String AccidentDeathFlag;
+            @JsonProperty(value = "OptionType")
+            @JSONField(name = "OptionType")
+            private String OptionType;
+            @JsonProperty(value = "totalAmount")
+            @JSONField(name = "totalAmount")
+            private String totalAmount;
+            @JsonProperty(value = "claimNotificationNo")
+            @JSONField(name = "claimNotificationNo")
+            private String claimNotificationNo;
+            @JsonProperty(value = "claimRegistrationNo")
+            @JSONField(name = "claimRegistrationNo")
+            private String claimRegistrationNo;
+            @JsonProperty(value = "caseID")
+            @JSONField(name = "caseID")
+            private String caseID;
+            @JsonProperty(value = "effectiveDate")
+            @JSONField(name = "effectiveDate")
+            private String effectiveDate;
+            @JsonProperty(value = "expireDate")
+            @JSONField(name = "expireDate")
+            private String expireDate;
+            @JsonProperty(value = "InsurerArea")
+            @JSONField(name = "InsurerArea")
+            private String InsurerArea;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTChargingPostData{}
+
+        @NoArgsConstructor
+        @Data
+        public static class PrpTenGearAllocationFeeVo{}
+
+        @NoArgsConstructor
+        @Data
+        public static class CarShipTaxRespVODTO {
+            @JsonProperty(value = "riskCode")
+            @JSONField(name = "riskCode")
+            private String riskCode;
+            @JsonProperty(value = "taxRelifFlag")
+            @JSONField(name = "taxRelifFlag")
+            private String taxRelifFlag;
+            @JsonProperty(value = "taxActual")
+            @JSONField(name = "taxActual")
+            private Integer taxActual;
+            @JsonProperty(value = "sumPayTax")
+            @JSONField(name = "sumPayTax")
+            private Integer sumPayTax;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class AutoPriceOutputXOMRespVoDTO {
+            @JsonProperty(value = "entireRecommenDiscount")
+            @JSONField(name = "entireRecommenDiscount")
+            private String entireRecommenDiscount;
+            @JsonProperty(value = "entireUWritingDiscount")
+            @JSONField(name = "entireUWritingDiscount")
+            private String entireUWritingDiscount;
+            @JsonProperty(value = "entireInitialDiscount")
+            @JSONField(name = "entireInitialDiscount")
+            private String entireInitialDiscount;
+            @JsonProperty(value = "comCostPrem")
+            @JSONField(name = "comCostPrem")
+            private String comCostPrem;
+            @JsonProperty(value = "ctpCostPrem")
+            @JSONField(name = "ctpCostPrem")
+            private String ctpCostPrem;
+            @JsonProperty(value = "billCTPELR")
+            @JSONField(name = "billCTPELR")
+            private String billCTPELR;
+            @JsonProperty(value = "billCOMELR")
+            @JSONField(name = "billCOMELR")
+            private String billCOMELR;
+            @JsonProperty(value = "billELR")
+            @JSONField(name = "billELR")
+            private String billELR;
+            @JsonProperty(value = "sunlightScore")
+            @JSONField(name = "sunlightScore")
+            private String sunlightScore;
+            @JsonProperty(value = "comSunlightScore")
+            @JSONField(name = "comSunlightScore")
+            private Object comSunlightScore;
+            @JsonProperty(value = "ctpSunlightScore")
+            @JSONField(name = "ctpSunlightScore")
+            private Object ctpSunlightScore;
+            @JsonProperty(value = "reasonCde")
+            @JSONField(name = "reasonCde")
+            private Object reasonCde;
+            @JsonProperty(value = "ruleType")
+            @JSONField(name = "ruleType")
+            private Object ruleType;
+            @JsonProperty(value = "uwDiscFloor")
+            @JSONField(name = "uwDiscFloor")
+            private Object uwDiscFloor;
+            @JsonProperty(value = "businessCode")
+            @JSONField(name = "businessCode")
+            private String businessCode;
+            @JsonProperty(value = "strComCostPrem2")
+            @JSONField(name = "strComCostPrem2")
+            private String strComCostPrem2;
+            @JsonProperty(value = "strCtpCostPrem2")
+            @JSONField(name = "strCtpCostPrem2")
+            private String strCtpCostPrem2;
+            @JsonProperty(value = "strBillCTPELR2")
+            @JSONField(name = "strBillCTPELR2")
+            private String strBillCTPELR2;
+            @JsonProperty(value = "strBillCOMELR2")
+            @JSONField(name = "strBillCOMELR2")
+            private String strBillCOMELR2;
+            @JsonProperty(value = "strBillELR2")
+            @JSONField(name = "strBillELR2")
+            private String strBillELR2;
+            @JsonProperty(value = "strUwRel")
+            @JSONField(name = "strUwRel")
+            private String strUwRel;
+            @JsonProperty(value = "strUwRelVersion")
+            @JSONField(name = "strUwRelVersion")
+            private String strUwRelVersion;
+            @JsonProperty(value = "strTargetLR")
+            @JSONField(name = "strTargetLR")
+            private String strTargetLR;
+            @JsonProperty(value = "uwELRrel2BC")
+            @JSONField(name = "uwELRrel2BC")
+            private Object uwELRrel2BC;
+            @JsonProperty(value = "strUwELRrel")
+            @JSONField(name = "strUwELRrel")
+            private String strUwELRrel;
+            @JsonProperty(value = "strUwELR")
+            @JSONField(name = "strUwELR")
+            private String strUwELR;
+            @JsonProperty(value = "recommenDiscountScore")
+            @JSONField(name = "recommenDiscountScore")
+            private String recommenDiscountScore;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class BirateDTO {
+            @JsonProperty(value = "proposalno")
+            @JSONField(name = "proposalno")
+            private String proposalno;
+            @JsonProperty(value = "riskcode")
+            @JSONField(name = "riskcode")
+            private String riskcode;
+            @JsonProperty(value = "classcode")
+            @JSONField(name = "classcode")
+            private String classcode;
+            @JsonProperty(value = "coefficient1")
+            @JSONField(name = "coefficient1")
+            private Integer coefficient1;
+            @JsonProperty(value = "coefficient2")
+            @JSONField(name = "coefficient2")
+            private Integer coefficient2;
+            @JsonProperty(value = "coefficient3")
+            @JSONField(name = "coefficient3")
+            private Integer coefficient3;
+            @JsonProperty(value = "coefficient4")
+            @JSONField(name = "coefficient4")
+            private Integer coefficient4;
+            @JsonProperty(value = "coefficient5")
+            @JSONField(name = "coefficient5")
+            private Integer coefficient5;
+            @JsonProperty(value = "coefficient6")
+            @JSONField(name = "coefficient6")
+            private Integer coefficient6;
+            @JsonProperty(value = "coefficient7")
+            @JSONField(name = "coefficient7")
+            private Integer coefficient7;
+            @JsonProperty(value = "coefficient8")
+            @JSONField(name = "coefficient8")
+            private Integer coefficient8;
+            @JsonProperty(value = "coefficient9")
+            @JSONField(name = "coefficient9")
+            private Integer coefficient9;
+            @JsonProperty(value = "coefficient10")
+            @JSONField(name = "coefficient10")
+            private Integer coefficient10;
+            @JsonProperty(value = "coefficient11")
+            @JSONField(name = "coefficient11")
+            private Integer coefficient11;
+            @JsonProperty(value = "remark")
+            @JSONField(name = "remark")
+            private String remark;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+            @JsonProperty(value = "businesscategory")
+            @JSONField(name = "businesscategory")
+            private String businesscategory;
+            @JsonProperty(value = "attribute1")
+            @JSONField(name = "attribute1")
+            private String attribute1;
+            @JsonProperty(value = "attribute2")
+            @JSONField(name = "attribute2")
+            private String attribute2;
+            @JsonProperty(value = "attribute3")
+            @JSONField(name = "attribute3")
+            private String attribute3;
+            @JsonProperty(value = "attribute4")
+            @JSONField(name = "attribute4")
+            private String attribute4;
+            @JsonProperty(value = "attribute5")
+            @JSONField(name = "attribute5")
+            private String attribute5;
+            @JsonProperty(value = "costratio")
+            @JSONField(name = "costratio")
+            private Object costratio;
+            @JsonProperty(value = "chargedecimal")
+            @JSONField(name = "chargedecimal")
+            private Object chargedecimal;
+            @JsonProperty(value = "billcomtransfeerate")
+            @JSONField(name = "billcomtransfeerate")
+            private Integer billcomtransfeerate;
+            @JsonProperty(value = "billcomallowance")
+            @JSONField(name = "billcomallowance")
+            private Integer billcomallowance;
+            @JsonProperty(value = "billcomacquisitionfeerate")
+            @JSONField(name = "billcomacquisitionfeerate")
+            private Integer billcomacquisitionfeerate;
+            @JsonProperty(value = "billcomotherfeerate")
+            @JSONField(name = "billcomotherfeerate")
+            private Integer billcomotherfeerate;
+            @JsonProperty(value = "totalcost")
+            @JSONField(name = "totalcost")
+            private Integer totalcost;
+            @JsonProperty(value = "accruedexpenses")
+            @JSONField(name = "accruedexpenses")
+            private String accruedexpenses;
+            @JsonProperty(value = "managelimit")
+            @JSONField(name = "managelimit")
+            private String managelimit;
+            @JsonProperty(value = "controllimit")
+            @JSONField(name = "controllimit")
+            private String controllimit;
+            @JsonProperty(value = "mutualback")
+            @JSONField(name = "mutualback")
+            private String mutualback;
+            @JsonProperty(value = "limitflag")
+            @JSONField(name = "limitflag")
+            private String limitflag;
+            @JsonProperty(value = "autoFeeType")
+            @JSONField(name = "autoFeeType")
+            private Object autoFeeType;
+            @JsonProperty(value = "isteamflag")
+            @JSONField(name = "isteamflag")
+            private Object isteamflag;
+            @JsonProperty(value = "tempLateID")
+            @JSONField(name = "tempLateID")
+            private String tempLateID;
+            @JsonProperty(value = "tempLateName")
+            @JSONField(name = "tempLateName")
+            private String tempLateName;
+            @JsonProperty(value = "chargenumber")
+            @JSONField(name = "chargenumber")
+            private String chargenumber;
+            @JsonProperty(value = "billcomeGroup")
+            @JSONField(name = "billcomeGroup")
+            private String billcomeGroup;
+            @JsonProperty(value = "ryblogo")
+            @JSONField(name = "ryblogo")
+            private String ryblogo;
+            @JsonProperty(value = "respAttrExt1")
+            @JSONField(name = "respAttrExt1")
+            private String respAttrExt1;
+            @JsonProperty(value = "respAttrExt2")
+            @JSONField(name = "respAttrExt2")
+            private String respAttrExt2;
+            @JsonProperty(value = "respOnlineExt1")
+            @JSONField(name = "respOnlineExt1")
+            private String respOnlineExt1;
+            @JsonProperty(value = "respOnlineExt2")
+            @JSONField(name = "respOnlineExt2")
+            private String respOnlineExt2;
+            @JsonProperty(value = "respOnlineExt3")
+            @JSONField(name = "respOnlineExt3")
+            private String respOnlineExt3;
+            @JsonProperty(value = "respOnlineExt4")
+            @JSONField(name = "respOnlineExt4")
+            private String respOnlineExt4;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CirateDTO {
+            @JsonProperty(value = "proposalno")
+            @JSONField(name = "proposalno")
+            private String proposalno;
+            @JsonProperty(value = "riskcode")
+            @JSONField(name = "riskcode")
+            private String riskcode;
+            @JsonProperty(value = "classcode")
+            @JSONField(name = "classcode")
+            private String classcode;
+            @JsonProperty(value = "coefficient1")
+            @JSONField(name = "coefficient1")
+            private Integer coefficient1;
+            @JsonProperty(value = "coefficient2")
+            @JSONField(name = "coefficient2")
+            private Integer coefficient2;
+            @JsonProperty(value = "coefficient3")
+            @JSONField(name = "coefficient3")
+            private Integer coefficient3;
+            @JsonProperty(value = "coefficient4")
+            @JSONField(name = "coefficient4")
+            private Integer coefficient4;
+            @JsonProperty(value = "coefficient5")
+            @JSONField(name = "coefficient5")
+            private Integer coefficient5;
+            @JsonProperty(value = "coefficient6")
+            @JSONField(name = "coefficient6")
+            private Integer coefficient6;
+            @JsonProperty(value = "coefficient7")
+            @JSONField(name = "coefficient7")
+            private Integer coefficient7;
+            @JsonProperty(value = "coefficient8")
+            @JSONField(name = "coefficient8")
+            private Integer coefficient8;
+            @JsonProperty(value = "coefficient9")
+            @JSONField(name = "coefficient9")
+            private Integer coefficient9;
+            @JsonProperty(value = "coefficient10")
+            @JSONField(name = "coefficient10")
+            private Integer coefficient10;
+            @JsonProperty(value = "coefficient11")
+            @JSONField(name = "coefficient11")
+            private Integer coefficient11;
+            @JsonProperty(value = "remark")
+            @JSONField(name = "remark")
+            private String remark;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+            @JsonProperty(value = "businesscategory")
+            @JSONField(name = "businesscategory")
+            private String businesscategory;
+            @JsonProperty(value = "attribute1")
+            @JSONField(name = "attribute1")
+            private String attribute1;
+            @JsonProperty(value = "attribute2")
+            @JSONField(name = "attribute2")
+            private String attribute2;
+            @JsonProperty(value = "attribute3")
+            @JSONField(name = "attribute3")
+            private String attribute3;
+            @JsonProperty(value = "attribute4")
+            @JSONField(name = "attribute4")
+            private String attribute4;
+            @JsonProperty(value = "attribute5")
+            @JSONField(name = "attribute5")
+            private String attribute5;
+            @JsonProperty(value = "costratio")
+            @JSONField(name = "costratio")
+            private Object costratio;
+            @JsonProperty(value = "chargedecimal")
+            @JSONField(name = "chargedecimal")
+            private Object chargedecimal;
+            @JsonProperty(value = "billcomtransfeerate")
+            @JSONField(name = "billcomtransfeerate")
+            private Integer billcomtransfeerate;
+            @JsonProperty(value = "billcomallowance")
+            @JSONField(name = "billcomallowance")
+            private Integer billcomallowance;
+            @JsonProperty(value = "billcomacquisitionfeerate")
+            @JSONField(name = "billcomacquisitionfeerate")
+            private Integer billcomacquisitionfeerate;
+            @JsonProperty(value = "billcomotherfeerate")
+            @JSONField(name = "billcomotherfeerate")
+            private Integer billcomotherfeerate;
+            @JsonProperty(value = "totalcost")
+            @JSONField(name = "totalcost")
+            private Integer totalcost;
+            @JsonProperty(value = "accruedexpenses")
+            @JSONField(name = "accruedexpenses")
+            private String accruedexpenses;
+            @JsonProperty(value = "managelimit")
+            @JSONField(name = "managelimit")
+            private String managelimit;
+            @JsonProperty(value = "controllimit")
+            @JSONField(name = "controllimit")
+            private String controllimit;
+            @JsonProperty(value = "mutualback")
+            @JSONField(name = "mutualback")
+            private String mutualback;
+            @JsonProperty(value = "limitflag")
+            @JSONField(name = "limitflag")
+            private String limitflag;
+            @JsonProperty(value = "autoFeeType")
+            @JSONField(name = "autoFeeType")
+            private Object autoFeeType;
+            @JsonProperty(value = "isteamflag")
+            @JSONField(name = "isteamflag")
+            private Object isteamflag;
+            @JsonProperty(value = "tempLateID")
+            @JSONField(name = "tempLateID")
+            private String tempLateID;
+            @JsonProperty(value = "tempLateName")
+            @JSONField(name = "tempLateName")
+            private String tempLateName;
+            @JsonProperty(value = "chargenumber")
+            @JSONField(name = "chargenumber")
+            private String chargenumber;
+            @JsonProperty(value = "billcomeGroup")
+            @JSONField(name = "billcomeGroup")
+            private String billcomeGroup;
+            @JsonProperty(value = "ryblogo")
+            @JSONField(name = "ryblogo")
+            private String ryblogo;
+            @JsonProperty(value = "respAttrExt1")
+            @JSONField(name = "respAttrExt1")
+            private String respAttrExt1;
+            @JsonProperty(value = "respAttrExt2")
+            @JSONField(name = "respAttrExt2")
+            private String respAttrExt2;
+            @JsonProperty(value = "respOnlineExt1")
+            @JSONField(name = "respOnlineExt1")
+            private String respOnlineExt1;
+            @JsonProperty(value = "respOnlineExt2")
+            @JSONField(name = "respOnlineExt2")
+            private String respOnlineExt2;
+            @JsonProperty(value = "respOnlineExt3")
+            @JSONField(name = "respOnlineExt3")
+            private String respOnlineExt3;
+            @JsonProperty(value = "respOnlineExt4")
+            @JSONField(name = "respOnlineExt4")
+            private String respOnlineExt4;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ItemVOListDTO {
+            @JsonProperty(value = "proposalNo")
+            @JSONField(name = "proposalNo")
+            private String proposalNo;
+            @JsonProperty(value = "riskCode")
+            @JSONField(name = "riskCode")
+            private String riskCode;
+            @JsonProperty(value = "itemKindNo")
+            @JSONField(name = "itemKindNo")
+            private Integer itemKindNo;
+            @JsonProperty(value = "familyNo")
+            @JSONField(name = "familyNo")
+            private Object familyNo;
+            @JsonProperty(value = "familyName")
+            @JSONField(name = "familyName")
+            private String familyName;
+            @JsonProperty(value = "rationType")
+            @JSONField(name = "rationType")
+            private String rationType;
+            @JsonProperty(value = "kindCode")
+            @JSONField(name = "kindCode")
+            private String kindCode;
+            @JsonProperty(value = "kindName")
+            @JSONField(name = "kindName")
+            private String kindName;
+            @JsonProperty(value = "itemNo")
+            @JSONField(name = "itemNo")
+            private Integer itemNo;
+            @JsonProperty(value = "itemCode")
+            @JSONField(name = "itemCode")
+            private String itemCode;
+            @JsonProperty(value = "itemDetailName")
+            @JSONField(name = "itemDetailName")
+            private String itemDetailName;
+            @JsonProperty(value = "modeCode")
+            @JSONField(name = "modeCode")
+            private String modeCode;
+            @JsonProperty(value = "modeName")
+            @JSONField(name = "modeName")
+            private String modeName;
+            @JsonProperty(value = "startDate")
+            @JSONField(name = "startDate")
+            private String startDate;
+            @JsonProperty(value = "startHour")
+            @JSONField(name = "startHour")
+            private Integer startHour;
+            @JsonProperty(value = "endDate")
+            @JSONField(name = "endDate")
+            private String endDate;
+            @JsonProperty(value = "endHour")
+            @JSONField(name = "endHour")
+            private Integer endHour;
+            @JsonProperty(value = "model")
+            @JSONField(name = "model")
+            private String model;
+            @JsonProperty(value = "buyDate")
+            @JSONField(name = "buyDate")
+            private Object buyDate;
+            @JsonProperty(value = "addressNo")
+            @JSONField(name = "addressNo")
+            private Object addressNo;
+            @JsonProperty(value = "calculateFlag")
+            @JSONField(name = "calculateFlag")
+            private String calculateFlag;
+            @JsonProperty(value = "currency")
+            @JSONField(name = "currency")
+            private String currency;
+            @JsonProperty(value = "unitAmount")
+            @JSONField(name = "unitAmount")
+            private Object unitAmount;
+            @JsonProperty(value = "quantity")
+            @JSONField(name = "quantity")
+            private Object quantity;
+            @JsonProperty(value = "unit")
+            @JSONField(name = "unit")
+            private String unit;
+            @JsonProperty(value = "value")
+            @JSONField(name = "value")
+            private Object value;
+            @JsonProperty(value = "amount")
+            @JSONField(name = "amount")
+            private Double amount;
+            @JsonProperty(value = "ratePeriod")
+            @JSONField(name = "ratePeriod")
+            private Integer ratePeriod;
+            @JsonProperty(value = "rate")
+            @JSONField(name = "rate")
+            private Integer rate;
+            @JsonProperty(value = "shortRateFlag")
+            @JSONField(name = "shortRateFlag")
+            private String shortRateFlag;
+            @JsonProperty(value = "shortRate")
+            @JSONField(name = "shortRate")
+            private Integer shortRate;
+            @JsonProperty(value = "basePremium")
+            @JSONField(name = "basePremium")
+            private Integer basePremium;
+            @JsonProperty(value = "benchMarkPremium")
+            @JSONField(name = "benchMarkPremium")
+            private Double benchMarkPremium;
+            @JsonProperty(value = "discount")
+            @JSONField(name = "discount")
+            private Integer discount;
+            @JsonProperty(value = "adjustRate")
+            @JSONField(name = "adjustRate")
+            private Double adjustRate;
+            @JsonProperty(value = "premium")
+            @JSONField(name = "premium")
+            private Double premium;
+            @JsonProperty(value = "deductibleRate")
+            @JSONField(name = "deductibleRate")
+            private Integer deductibleRate;
+            @JsonProperty(value = "deductible")
+            @JSONField(name = "deductible")
+            private Integer deductible;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+            @JsonProperty(value = "feeStart")
+            @JSONField(name = "feeStart")
+            private Object feeStart;
+            @JsonProperty(value = "feeEnd")
+            @JSONField(name = "feeEnd")
+            private Object feeEnd;
+            @JsonProperty(value = "standardPremuim")
+            @JSONField(name = "standardPremuim")
+            private Double standardPremuim;
+            @JsonProperty(value = "additionalCostRate")
+            @JSONField(name = "additionalCostRate")
+            private Double additionalCostRate;
+            @JsonProperty(value = "basePureRiskPremium")
+            @JSONField(name = "basePureRiskPremium")
+            private Object basePureRiskPremium;
+            @JsonProperty(value = "totalLossRate")
+            @JSONField(name = "totalLossRate")
+            private Double totalLossRate;
+            @JsonProperty(value = "channelrate")
+            @JSONField(name = "channelrate")
+            private Integer channelrate;
+            @JsonProperty(value = "noTaxPremium")
+            @JSONField(name = "noTaxPremium")
+            private Double noTaxPremium;
+            @JsonProperty(value = "taxRate")
+            @JSONField(name = "taxRate")
+            private Double taxRate;
+            @JsonProperty(value = "taxFee")
+            @JSONField(name = "taxFee")
+            private Double taxFee;
+            @JsonProperty(value = "taxFlag")
+            @JSONField(name = "taxFlag")
+            private String taxFlag;
+            @JsonProperty(value = "insurePlan")
+            @JSONField(name = "insurePlan")
+            private String insurePlan;
+            @JsonProperty(value = "itemKind_Flag5")
+            @JSONField(name = "itemKind_Flag5")
+            private Object itemkindFlag5;
+            @JsonProperty(value = "mainKindFlag")
+            @JSONField(name = "mainKindFlag")
+            private Object mainKindFlag;
+            @JsonProperty(value = "vipPremium")
+            @JSONField(name = "vipPremium")
+            private Integer vipPremium;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class BiPrptenagesDTO {
+            @JsonProperty(value = "proposalNo")
+            @JSONField(name = "proposalNo")
+            private Object proposalNo;
+            @JsonProperty(value = "riskCode")
+            @JSONField(name = "riskCode")
+            private Object riskCode;
+            @JsonProperty(value = "serialNo")
+            @JSONField(name = "serialNo")
+            private Integer serialNo;
+            @JsonProperty(value = "lineNo")
+            @JSONField(name = "lineNo")
+            private Object lineNo;
+            @JsonProperty(value = "clauseCode")
+            @JSONField(name = "clauseCode")
+            private String clauseCode;
+            @JsonProperty(value = "clauses")
+            @JSONField(name = "clauses")
+            private String clauses;
+            @JsonProperty(value = "titleFlag")
+            @JSONField(name = "titleFlag")
+            private Object titleFlag;
+            @JsonProperty(value = "clauseName")
+            @JSONField(name = "clauseName")
+            private Object clauseName;
+            @JsonProperty(value = "clausesContext")
+            @JSONField(name = "clausesContext")
+            private String clausesContext;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+
+
+            public BiPrptenagesDTO(GuoRenSpecialAgreementVo guoRenSpecialAgreementVo) {
+                this.riskCode = guoRenSpecialAgreementVo.getRiskCode();
+                this.clauseCode = guoRenSpecialAgreementVo.getClauseCode();
+                this.clauses = guoRenSpecialAgreementVo.getClauses();
+                this.clausesContext = guoRenSpecialAgreementVo.getClausesContext();
+            }
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CiPrptenagesDTO {
+            @JsonProperty(value = "proposalNo")
+            @JSONField(name = "proposalNo")
+            private Object proposalNo;
+            @JsonProperty(value = "riskCode")
+            @JSONField(name = "riskCode")
+            private Object riskCode;
+            @JsonProperty(value = "serialNo")
+            @JSONField(name = "serialNo")
+            private Integer serialNo;
+            @JsonProperty(value = "lineNo")
+            @JSONField(name = "lineNo")
+            private Object lineNo;
+            @JsonProperty(value = "clauseCode")
+            @JSONField(name = "clauseCode")
+            private String clauseCode;
+            @JsonProperty(value = "clauses")
+            @JSONField(name = "clauses")
+            private String clauses;
+            @JsonProperty(value = "titleFlag")
+            @JSONField(name = "titleFlag")
+            private Object titleFlag;
+            @JsonProperty(value = "clauseName")
+            @JSONField(name = "clauseName")
+            private Object clauseName;
+            @JsonProperty(value = "clausesContext")
+            @JSONField(name = "clausesContext")
+            private String clausesContext;
+            @JsonProperty(value = "flag")
+            @JSONField(name = "flag")
+            private String flag;
+
+            public CiPrptenagesDTO(GuoRenSpecialAgreementVo guoRenSpecialAgreementVo) {
+                this.riskCode = guoRenSpecialAgreementVo.getRiskCode();
+                this.clauseCode = guoRenSpecialAgreementVo.getClauseCode();
+                this.clauses = guoRenSpecialAgreementVo.getClauses();
+                this.clausesContext = guoRenSpecialAgreementVo.getClausesContext();
+            }
+        }
+    }
+}

+ 45 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/QueryNoCarPolicyNoResponse.java

@@ -0,0 +1,45 @@
+package com.jzg.quote.guoren.api.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;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/16 09:19
+ **/
+@NoArgsConstructor
+@Data
+public class QueryNoCarPolicyNoResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1526603075338120684L;
+
+    @JsonProperty("resultCode")
+    private Integer resultCode;
+
+    @JsonProperty("resultMsg")
+    private String resultMsg;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO  implements Serializable{
+
+        private static final long serialVersionUID = 24865685393039353L;
+
+        @JsonProperty("noCarPolicyNo")
+        private List<String> noCarPolicyNo;
+
+        @JsonProperty("noCarProposalNo")
+        private List<String> noCarProposalNo;
+
+    }
+}

+ 56 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/SignatureResponse.java

@@ -0,0 +1,56 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: shenwd
+ * @date: 2025/3/16 09:51
+ **/
+@Data
+@NoArgsConstructor
+public class SignatureResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -8325369302288266412L;
+    /**
+     * 车牌号
+     */
+    @JsonProperty("licenseNo")
+    private String licenseNo;
+    /**
+     * 二维码字符串
+     */
+    @JsonProperty("qrCode")
+    private String qrCode;
+    /**
+     * 返回状态吗
+     */
+    @JsonProperty("resultCode")
+    private String resultCode;
+    /**
+     * 投保人姓名
+     */
+    @JsonProperty("appliName")
+    private String appliName;
+    /**
+     * 返回信息
+     */
+    @JsonProperty("resultMessage")
+    private String resultMessage;
+    /**
+     * 总保费
+     */
+    @JsonProperty("sumPremium")
+    private Integer sumPremium;
+    /**
+     *
+     */
+    @JsonProperty("username")
+    private String username;
+}

+ 41 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/SubmitAuditResponse.java

@@ -0,0 +1,41 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: 提交核保 出参
+ * @author: shenwd
+ * @date: 2025/3/14 17:46
+ **/
+@Data
+@NoArgsConstructor
+public class SubmitAuditResponse {
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private List<DataDTO> data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty(value = "message")
+        @JSONField(name = "message")
+        private String message;
+        @JsonProperty(value = "underWriteFlagCI")
+        @JSONField(name = "underWriteFlagCI")
+        private String underWriteFlagCI;
+        @JsonProperty(value = "underWriteFlagBI")
+        @JSONField(name = "underWriteFlagBI")
+        private String underWriteFlagBI;
+    }
+}

+ 240 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/Response/VinQueryResponse.java

@@ -0,0 +1,240 @@
+package com.jzg.quote.guoren.api.entity.Response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.entity.vo.quote.CoreModelsVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @description: vin查询 出参
+ * @author: shenwd
+ * @date: 2025/3/14 15:38
+ **/
+@Data
+@NoArgsConstructor
+public class VinQueryResponse {
+
+    @JsonProperty(value = "resultCode")
+    @JSONField(name = "resultCode")
+    private Integer resultCode;
+
+    @JsonProperty(value = "resultMsg")
+    @JSONField(name = "resultMsg")
+    private String resultMsg;
+
+    @JsonProperty(value = "data")
+    @JSONField(name = "data")
+    private List<DataDTO> data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        /**
+         * 车型名称
+         */
+        @JsonProperty(value = "brandNameBC")
+        @JSONField(name = "brandNameBC")
+        private String brandNameBC;
+        /**
+         * 车型别名
+         */
+        @JsonProperty(value = "vehicleAlias")
+        @JSONField(name = "vehicleAlias")
+        private String vehicleAlias;
+        /**
+         * 国家类型
+         */
+        @JsonProperty(value = "importFlag")
+        @JSONField(name = "importFlag")
+        private String importFlag;
+        /**
+         * 厂家
+         */
+        @JsonProperty(value = "factory")
+        @JSONField(name = "factory")
+        private String factory;
+        /**
+         * 交强险名称
+         */
+        @JsonProperty(value = "jqxClassname")
+        @JSONField(name = "jqxClassname")
+        private String jqxClassname;
+        /**
+         * 商业险名称
+         */
+        @JsonProperty(value = "syxClassname")
+        @JSONField(name = "syxClassname")
+        private String syxClassname;
+        /**
+         * 核定座位数
+         */
+        @JsonProperty(value = "seatCountBC")
+        @JSONField(name = "seatCountBC")
+        private String seatCountBC;
+        /**
+         * 最大座位数
+         */
+        @JsonProperty(value = "seatMax")
+        @JSONField(name = "seatMax")
+        private String seatMax;
+        /**
+         * 最小座位数
+         */
+        @JsonProperty(value = "seatMin")
+        @JSONField(name = "seatMin")
+        private String seatMin;
+        /**
+         * 吨位
+         */
+        @JsonProperty(value = "tonCount")
+        @JSONField(name = "tonCount")
+        private String tonCount;
+        /**
+         * 购置价含税
+         */
+        @JsonProperty(value = "purchasePriceSZ")
+        @JSONField(name = "purchasePriceSZ")
+        private String purchasePriceSZ;
+        /**
+         * 新车购置价
+         */
+        @JsonProperty(value = "priceShow")
+        @JSONField(name = "priceShow")
+        private String priceShow;
+        /**
+         * 上市日期
+         */
+        @JsonProperty(value = "carYear")
+        @JSONField(name = "carYear")
+        private String carYear;
+        /**
+         * 排量
+         */
+        @JsonProperty(value = "exHaustScale")
+        @JSONField(name = "exHaustScale")
+        private String exHaustScale;
+        /**
+         * 车船税减免标志
+         */
+        @JsonProperty(value = "newFuelModel")
+        @JSONField(name = "newFuelModel")
+        private String newFuelModel;
+        /**
+         * 最大整备质量
+         */
+        @JsonProperty(value = "completeKerbMass")
+        @JSONField(name = "completeKerbMass")
+        private String completeKerbMass;
+        /**
+         * 最小整备质量
+         */
+        @JsonProperty(value = "completeKerbMassMin")
+        @JSONField(name = "completeKerbMassMin")
+        private String completeKerbMassMin;
+        /**
+         *
+         */
+        @JsonProperty(value = "content")
+        @JSONField(name = "content")
+        private ContentDTO content;
+        /**
+         * 厂牌型号代码
+         */
+        @JsonProperty(value = "brandCode")
+        @JSONField(name = "brandCode")
+        private String brandCode;
+        /**
+         * 功率
+         */
+        @JsonProperty(value = "power")
+        @JSONField(name = "power")
+        private String power;
+        /**
+         * 类比功率
+         */
+        @JsonProperty(value = "powerLB")
+        @JSONField(name = "powerLB")
+        private String powerLB;
+
+        @JsonProperty(value = "fuelType")
+        @JSONField(name = "fuelType")
+        private String fuelType;
+
+        @JsonProperty(value = "gearBoxtyPecode")
+        @JSONField(name = "gearBoxtyPecode")
+        private String gearBoxtyPecode;
+
+        @JsonProperty(value = "stopFlagCode")
+        @JSONField(name = "stopFlagCode")
+        private String stopFlagCode;
+
+        @JsonProperty(value = "riskTypeCode")
+        @JSONField(name = "riskTypeCode")
+        private String riskTypeCode;
+
+        @JsonProperty(value = "riskTypeName")
+        @JSONField(name = "riskTypeName")
+        private String riskTypeName;
+
+        @JsonProperty(value = "vehicleClassNewCode")
+        @JSONField(name = "vehicleClassNewCode")
+        private String vehicleClassNewCode;
+
+        @JsonProperty(value = "vehicleClassNewName")
+        @JSONField(name = "vehicleClassNewName")
+        private String vehicleClassNewName;
+
+        @JsonProperty(value = "fullweight")
+        @JSONField(name = "fullweight")
+        private String fullweight;
+
+        @JsonProperty(value = "absFlag")
+        @JSONField(name = "absFlag")
+        private String absFlag;
+
+        @JsonProperty(value = "vehicleSize")
+        @JSONField(name = "vehicleSize")
+        private String vehicleSize;
+
+        @JsonProperty(value = "transmissionttype")
+        @JSONField(name = "transmissionttype")
+        private String transmissionttype;
+
+        @JsonProperty(value = "modelCodeBC")
+        @JSONField(name = "modelCodeBC")
+        private String modelCodeBC;
+
+        @JsonProperty(value = "kindred_PRICE_TAX")
+        @JSONField(name = "kindred_PRICE_TAX")
+        private String kindredPriceTax;
+
+        @NoArgsConstructor
+        @Data
+        public static class ContentDTO {
+
+            @JsonProperty(value = "code")
+            @JSONField(name = "code")
+            private String code;
+
+            @JsonProperty(value = "message")
+            @JSONField(name = "message")
+            private String message;
+        }
+
+        public CoreModelsVo toCoreModelsVo(){
+            CoreModelsVo coreModelsVo = new CoreModelsVo();
+            coreModelsVo.setModelCode(this.modelCodeBC);
+            coreModelsVo.setModelName(this.brandNameBC);
+            coreModelsVo.setPower(this.power);
+            coreModelsVo.setCarYear(this.carYear);
+            coreModelsVo.setEnginedesc(this.exHaustScale);
+            coreModelsVo.setPurchasePrice(this.priceShow);
+            coreModelsVo.setSeatCount(this.seatMax);
+            return coreModelsVo;
+        }
+
+    }
+}

+ 167 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/ChannelInfoDTO.java

@@ -0,0 +1,167 @@
+package com.jzg.quote.guoren.api.entity.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.standard.ConfigureParameters;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: 渠道信息 获取配置的信息
+ * @author: shenwd
+ * @date: 2025/3/14 11:19
+ **/
+@NoArgsConstructor
+@Data
+public class ChannelInfoDTO implements ConfigureParameters {
+
+    @Serial
+    private static final long serialVersionUID = -2356470518483047248L;
+
+    /**
+     * 地区代码
+     */
+    @JsonProperty(value = "areaCode")
+    @JSONField(name = "areaCode")
+    private String areaCode;
+
+    /**
+     * 地区名称
+     */
+    @JsonProperty(value = "areaName")
+    @JSONField(name = "areaName")
+    private String areaName;
+    /**
+     * 归属机构代码
+     */
+    @JsonProperty(value = "comCode")
+    @JSONField(name = "comCode")
+    private String comCode;
+
+    /**
+     * 归属机构名称
+     */
+    @JsonProperty(value = "comName")
+    @JSONField(name = "comName")
+    private String comName;
+
+    @JsonProperty(value = "businessNature")
+    @JSONField(name = "businessNature")
+    private String businessNature;
+
+    /**
+     * 归属业务员代码
+     */
+    @JsonProperty(value = "handlerCode")
+    @JSONField(name = "handlerCode")
+    private String handlerCode;
+
+    /**
+     * 代理代码
+     */
+    @JsonProperty(value = "agentCode")
+    @JSONField(name = "agentCode")
+    private String agentCode;
+
+    @JsonProperty(value = "agreementNo")
+    @JSONField(name = "agreementNo")
+    private String agreementNo;
+
+    /**
+     * 决策单元代码
+     */
+    @JsonProperty(value = "unitMaintenanceCode")
+    @JSONField(name = "unitMaintenanceCode")
+    private String unitMaintenanceCode;
+
+    /**
+     * 决策单元大类代码
+     */
+    @JsonProperty(value = "unitmainTenanceType1")
+    @JSONField(name = "unitmainTenanceType1")
+    private String unitmainTenanceType1;
+
+    /**
+     * 决策单元小类代码
+     */
+    @JsonProperty(value = "unitmainTenanceType2")
+    @JSONField(name = "unitmainTenanceType2")
+    private String unitmainTenanceType2;
+
+    /**
+     * 决策单元名称
+     */
+    @JsonProperty(value = "unitMaintenanceName")
+    @JSONField(name = "unitMaintenanceName")
+    private String unitMaintenanceName;
+
+    /**
+     * 决策单元大类名称
+     */
+    @JsonProperty(value = "unitmainTenanceType1Name")
+    @JSONField(name = "unitmainTenanceType1Name")
+    private String unitmainTenanceType1Name;
+
+    /**
+     * 决策单元小类名称
+     */
+    @JsonProperty(value = "unitmainTenanceType2Name")
+    @JSONField(name = "unitmainTenanceType2Name")
+    private String unitmainTenanceType2Name;
+
+    /**
+     * 部门代码
+     */
+    @JsonProperty(value = "channelTypeOne")
+    @JSONField(name = "channelTypeOne")
+    private String channelTypeOne;
+
+    /**
+     * 部门名称
+     */
+    @JsonProperty(value = "channelTypeOneName")
+    @JSONField(name = "channelTypeOneName")
+    private String channelTypeOneName;
+
+    /**
+     * 渠道大类代码
+     */
+    @JsonProperty(value = "channelTypeTwo")
+    @JSONField(name = "channelTypeTwo")
+    private String channelTypeTwo;
+
+    /**
+     * 渠道大类名称
+     */
+    @JsonProperty(value = "channelTypeTwoName")
+    @JSONField(name = "channelTypeTwoName")
+    private String channelTypeTwoName;
+
+    @JsonProperty(value = "upDateTime")
+    @JSONField(name = "upDateTime")
+    private String upDateTime;
+
+    /**
+     * 归属业务员名称
+     */
+    @JsonProperty(value = "handler1Name")
+    @JSONField(name = "handler1Name")
+    private String handler1Name;
+
+    @JsonProperty(value = "agentName")
+    @JSONField(name = "agentName")
+    private String agentName;
+
+    @JsonProperty(value = "deGentType")
+    @JSONField(name = "deGentType")
+    private String deGentType;
+
+    @JsonProperty(value = "saleGentType")
+    @JSONField(name = "saleGentType")
+    private String saleGentType;
+
+    //归属业务员名称
+    private String handlerName;
+}

+ 34 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/DrivingInsuranceDTO.java

@@ -0,0 +1,34 @@
+package com.jzg.quote.guoren.api.entity.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 子订单中驾意险信息
+ * @author: shenwd
+ * @date: 2025/3/16 09:25
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+//@ApiModel("子订单中驾意险信息")
+public class DrivingInsuranceDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -7442660671241377405L;
+
+//    @ApiModelProperty("驾意险编号")
+    private String code;
+
+//    @ApiModelProperty("驾意险名称")
+    private String name;
+
+//    @ApiModelProperty("保单号")
+    private String policyNumber;
+
+//    @ApiModelProperty("投保单号")
+    private String applicationNumber;
+}

+ 142 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/RequestDTO.java

@@ -0,0 +1,142 @@
+package com.jzg.quote.guoren.api.entity.dto;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.guoren.api.entity.GuoRenConfigureParameters;
+import com.jzg.quote.guoren.api.properties.GuoRenApiConfigurationProperties;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/14 11:16
+ **/
+@Data
+public class RequestDTO {
+
+    @JsonProperty(value = "PACKAGE")
+    @JSONField(name = "PACKAGE")
+    private RequestPackage rPackage;
+
+    public static RequestDTO builRequestDto(Object body, String apiCode, GuoRenApiConfigurationProperties properties) {
+        RequestDTO dto = new RequestDTO();
+        RequestDTO.RequestHead rHead = new RequestDTO.RequestHead();
+        rHead.setServeCode(properties.getServeCode());
+        rHead.setChannelCode(properties.getChannelCode());
+        rHead.setInterfaceCode(apiCode);
+        rHead.setInterfaceUserCode(properties.getInterfaceUserCode());
+        rHead.setInterfacePwd(properties.getInterfacePwd());
+        rHead.setBusinessUuid("");
+        rHead.setRequestTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss:ssss"));
+        rHead.setXmlListSuffix("");
+        //测试环境填”Y”;生产环境填”N”
+        rHead.setIftest(properties.getIftest());
+        RequestDTO.RequestPackage rpackage = new RequestDTO.RequestPackage();
+        rpackage.setRHead(rHead);
+        //请求参数
+        rpackage.setRBody(body);
+        dto.setRPackage(rpackage);
+        return dto;
+
+    }
+
+    @Data
+    public static class RequestPackage {
+
+        @JsonProperty(value = "HEAD")
+        @JSONField(name = "HEAD")
+        private RequestHead rHead;
+
+        @JsonProperty(value = "BODY")
+        @JSONField(name = "BODY")
+        private Object rBody;
+
+    }
+
+    @Data
+    public static class RequestHead {
+
+        /**
+         * 客户端编码
+         * GBK,UTF-8等
+         */
+        @JsonProperty(value = "CLIENT_ENCODE")
+        @JSONField(name = "CLIENT_ENCODE")
+        private String clientEncode = "UTF-8";
+
+        /**
+         * 渠道编码
+         * 测试环境:jindouyun
+         */
+        @JsonProperty(value = "CHANNEL_CODE")
+        @JSONField(name = "CHANNEL_CODE")
+        private String channelCode;
+
+        /**
+         * 接口代码
+         * 见具体接口说明
+         */
+        @JsonProperty(value = "INTERFACE_CODE")
+        @JSONField(name = "INTERFACE_CODE")
+        private String interfaceCode;
+
+        /**
+         * 服务代码
+         * httpJson方式填“GR0002”
+         */
+        @JsonProperty(value = "SERVE_CODE")
+        @JSONField(name = "SERVE_CODE")
+        private String serveCode;
+
+        /**
+         * 业务流水号
+         * 唯一标识;此流水号在客户方必须唯一性
+         */
+        @JsonProperty(value = "BUSINESS_UUID")
+        @JSONField(name = "BUSINESS_UUID")
+        private String businessUuid;
+
+        /**
+         * 访问账号
+         * 测试环境:guoren_tp_jdy
+         */
+        @JsonProperty(value = "INTERFACE_USER_CODE")
+        @JSONField(name = "INTERFACE_USER_CODE")
+        private String interfaceUserCode;
+
+        /**
+         * 访问口令
+         * 测试环境:Q31gIrhZgQc=
+         */
+        @JsonProperty(value = "INTERFACE_PWD")
+        @JSONField(name = "INTERFACE_PWD")
+        private String interfacePwd;
+
+        /**
+         * 请求时间
+         * 格式:yyyy-MM-dd HH:mm:ss:ssss,要求:精确至毫秒
+         */
+        @JsonProperty(value = "REQUEST_TIME")
+        @JSONField(name = "REQUEST_TIME")
+        private String requestTime;
+
+        /**
+         * 报文集合元素标志
+         * 报文集合元素名称或名称后缀标识
+         */
+        @JsonProperty(value = "XML_LIST_SUFFIX")
+        @JSONField(name = "XML_LIST_SUFFIX")
+        private String xmlListSuffix;
+
+        /**
+         * 环境类型
+         * 测试环境填”Y”;生产环境填”N”
+         */
+        @JsonProperty(value = "IFTEST")
+        @JSONField(name = "IFTEST")
+        private String iftest;
+    }
+}

+ 35 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/dto/ResponseDTO.java

@@ -0,0 +1,35 @@
+package com.jzg.quote.guoren.api.entity.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description:
+ * @author: shenwd
+ * @date: 2025/3/14 11:14
+ **/
+@NoArgsConstructor
+@Data
+public class ResponseDTO<T> {
+    @JsonProperty(value = "PLATFORM_STS")
+    @JSONField(name = "PLATFORM_STS")
+    private String platformSts;
+
+    @JsonProperty(value = "PLATFORM_TYPE")
+    @JSONField(name = "PLATFORM_TYPE")
+    private String platformType;
+
+    @JsonProperty(value = "PLATFORM_CODE")
+    @JSONField(name = "PLATFORM_CODE")
+    private String platformCode;
+
+    @JsonProperty(value = "PLATFORM_MSG")
+    @JSONField(name = "PLATFORM_MSG")
+    private String platformMsg;
+
+    @JsonProperty(value = "RESPONSE_BODY")
+    @JSONField(name = "RESPONSE_BODY")
+    private T responseBody;
+}

+ 46 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/vo/GuoRenSpecialAgreementVo.java

@@ -0,0 +1,46 @@
+package com.jzg.quote.guoren.api.entity.vo;
+
+import com.jzg.quote.guoren.api.entity.Request.PremiumRequest;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/14 14:37
+ **/
+@Data
+public class GuoRenSpecialAgreementVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -8038937730893898766L;
+
+//    @ApiModelProperty("特约编码")
+    private String clauseCode;
+
+//    @ApiModelProperty("特约名")
+    private String clauses;
+
+//    @ApiModelProperty("特约内容")
+    private String clausesContext;
+
+//    @ApiModelProperty("险种编号")
+    private String riskCode;
+
+//    @ApiModelProperty("险种名称")
+    private String riskName;
+
+    public static List<PremiumRequest.PrptengageListDTO> toPrptengageListDTO(List<GuoRenSpecialAgreementVo> specialAgreementVo) {
+        List<PremiumRequest.PrptengageListDTO> prptengageListDTOS = new ArrayList<>();
+        for (int i = 0; i < specialAgreementVo.size(); i++) {
+            PremiumRequest.PrptengageListDTO prptengageListDTO = new PremiumRequest.PrptengageListDTO(specialAgreementVo.get(i), i + 1);
+            prptengageListDTOS.add(prptengageListDTO);
+        }
+
+        return prptengageListDTOS;
+    }
+}

+ 9 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/entity/vo/GuorenAccidentalDrivingVo.java

@@ -0,0 +1,9 @@
+package com.jzg.quote.guoren.api.entity.vo;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/16 17:27
+ **/
+public class GuorenAccidentalDrivingVo {
+}

+ 14 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/GuoRenApiOrderService.java

@@ -0,0 +1,14 @@
+package com.jzg.quote.guoren.api.service;
+
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/16 10:39
+ **/
+public interface GuoRenApiOrderService {
+    GuoRenApiOrder findByOrdersNo(String ordersNo);
+
+    GuoRenApiOrder save(GuoRenApiOrder guoRenApiOrder);
+}

+ 36 - 0
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/Impl/GuoRenApiOrderServiceImpl.java

@@ -0,0 +1,36 @@
+package com.jzg.quote.guoren.api.service.Impl;
+
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+import com.jzg.quote.guoren.api.repository.GuoRenApiOrderRepository;
+import com.jzg.quote.guoren.api.service.GuoRenApiOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025/3/16 10:40
+ **/
+@Service
+@RequiredArgsConstructor
+public class GuoRenApiOrderServiceImpl implements GuoRenApiOrderService {
+
+    private final GuoRenApiOrderRepository guorenApiOrderRepository;
+    /**
+     * @param ordersNo
+     * @return
+     */
+    @Override
+    public GuoRenApiOrder findByOrdersNo(String ordersNo) {
+        return guorenApiOrderRepository.findByOrdersNo(ordersNo);
+    }
+
+    /**
+     * @param guoRenApiOrder
+     * @return
+     */
+    @Override
+    public GuoRenApiOrder save(GuoRenApiOrder guoRenApiOrder) {
+        return guorenApiOrderRepository.save(guoRenApiOrder);
+    }
+}

+ 154 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quote/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -1,19 +1,51 @@
 package com.jzg.quote.guoren.api.service.Impl;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.entity.vo.aggregated.InsuranceUploadImageVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.UnderwritingVo;
 import com.jzg.quotation.commons.entity.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
+import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
+import com.jzg.quote.guoren.api.component.GuoRenRequestApiComponent;
+import com.jzg.quote.guoren.api.constant.enums.PlatformInterfaceCode;
+import com.jzg.quote.guoren.api.entity.GuoRenApiOrder;
+import com.jzg.quote.guoren.api.entity.GuoRenConfigureParameters;
+import com.jzg.quote.guoren.api.entity.Request.CarPriceMuchRequest;
+import com.jzg.quote.guoren.api.entity.Request.CarPriceRequest;
+import com.jzg.quote.guoren.api.entity.Request.VinQueryRequest;
+import com.jzg.quote.guoren.api.entity.Response.CarPriceMuchResponse;
+import com.jzg.quote.guoren.api.entity.Response.CarPriceResponse;
+import com.jzg.quote.guoren.api.entity.Response.VinQueryResponse;
+import com.jzg.quote.guoren.api.entity.dto.ChannelInfoDTO;
+import com.jzg.quote.guoren.api.service.GuoRenApiOrderService;
 import com.jzg.quote.guoren.api.service.GuoRenApiRequest;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
- * @description: todo
+ * @description:
  * @author: shenwd
  * @date: 2025/3/14 09:58
  **/
+@Service
+@RequiredArgsConstructor
 public class GuoRenApiRequestImpl implements GuoRenApiRequest {
+    private final GuoRenRequestApiComponent guoRenRequestApiComponent;
+
+    private final GuoRenApiOrderService guoRenApiOrderService;
     /**
      * 报价
      * @param quoteVo 报价实体
@@ -21,6 +53,26 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
      */
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
+        OrderBase orderBase = quoteVo.getOrder();
+        //配置信息
+        GuoRenConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(GuoRenConfigureParameters.class, orderBase.getAttributionInformationVo().getConfigInfo());
+        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        ChannelInfoDTO channelInfoDTO = gainChannelConfigInfo(orderBase);
+        //vin码查询
+        VinQueryRequest vinQueryRequest = new VinQueryRequest();
+        vinQueryRequest.setEngineNo(carInfoVo.getEngineNo());
+        vinQueryRequest.setFrameNo(carInfoVo.getVinNo());
+        vinQueryRequest.setLicenseNo(carInfoVo.getLicenseNo());
+
+        VinQueryResponse.DataDTO vinQuery = vinQuery(vinQueryRequest, channelInfoDTO);
+        AssertionUtils.isEmpty(vinQuery, "未找到匹配的车辆信息");
+
+        //车价查询
+        CarPriceResponse.DataDTO carPriceQuery = carPriceQuery(quoteVo, vinQuery, channelInfoDTO);
+        AssertionUtils.isEmpty(carPriceQuery, "车价获取失败");
+
+
+
         return null;
     }
 
@@ -73,4 +125,105 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
     public void queryOrderState(OrderBase orderBase) {
 
     }
+
+    /**
+     * 获取渠道配置信息
+     * @author: lig
+     * @date: 2023年08月25日 0025
+     */
+    private ChannelInfoDTO gainChannelConfigInfo(OrderBase orderBase) {
+        ChannelInfoDTO channelInfoDTO = ConfigureParametersConversion.conversionEntity(ChannelInfoDTO.class, orderBase.getAttributionInformationVo().getConfigInfo());
+        AssertionUtils.isEmpty(channelInfoDTO, "请先配置保险公司渠道信息");
+        return channelInfoDTO;
+    }
+
+    /**
+     * vin码查询车辆信息
+     * @return VinQueryResp.DataDTO
+     * @author: lig
+     * @date: 2023年08月18日 0018
+     */
+    public VinQueryResponse.DataDTO vinQuery(VinQueryRequest vinQueryReq, ChannelInfoDTO channelInfo) {
+        VinQueryRequest req = new VinQueryRequest(vinQueryReq, channelInfo);
+        VinQueryResponse resp = guoRenRequestApiComponent.request(req, PlatformInterfaceCode.API_IIRBT00009,
+                VinQueryResponse.class);
+        if (resp.getResultCode() == 1) {
+            throw new SystemException(resp.getResultMsg() == null ? "未找到车辆信息" : resp.getResultMsg());
+        }
+        return resp.getData().get(0);
+    }
+
+    /**
+     * 车价查询
+     */
+    public CarPriceResponse.DataDTO carPriceQuery(QuoteVo quoteVo, VinQueryResponse.DataDTO vinQ,
+                                                  ChannelInfoDTO channelInfo) {
+
+        CarPriceRequest req = CarPriceRequest.buildCarPriceParam(quoteVo, vinQ, channelInfo);
+        JSONObject request = guoRenRequestApiComponent.request(req, PlatformInterfaceCode.API_IIRBT00003);
+        Object cars = request.get("cars");
+
+        if (ObjectUtils.isEmpty(cars)) {
+
+            //多条
+            CarPriceMuchResponse respMuch = request.toJavaObject(CarPriceMuchResponse.class);
+
+            //单条
+            if (CollUtil.isEmpty(respMuch.getData().getCars())) {
+                CarPriceResponse resp = request.toJavaObject(CarPriceResponse.class);
+                if (resp.getResultCode() == 1) {
+                    throw new SystemException(resp.getResultMsg() == null ? "未获取到车价信息,请联系管理员" : resp.getResultMsg());
+                }
+                return resp.getData();
+
+            } else {
+                CarPriceMuchResponse.DataDTO.CarsDTO confirmCarMuch;
+                CarInfoVo carInfo = quoteVo.getCarInfoVo();
+//                //匹配车型
+                //车辆年款不能超过注册日期
+                List<CarPriceMuchResponse.DataDTO.CarsDTO> vehicleInfoList =
+                        respMuch.getData().getCars().stream().filter(a -> DateTimeUtil.dateIsAfter(carInfo.getRegisterDate(),
+                                a.getCarYear())).collect(Collectors.toList());
+
+                //匹配的车辆信息数据  为空
+                if (CollUtil.isEmpty(vehicleInfoList)) {
+                    confirmCarMuch = respMuch.getData().getCars().get(0);
+                } else {
+                    //匹配的车辆信息数据
+                    CarPriceMuchResponse.DataDTO.CarsDTO matchVehicleInfo =
+                            vehicleInfoList.stream().filter(a -> a.getCarYear().equals(carInfo.getPurchasePrice())).findFirst().orElse(null);
+                    if (null != matchVehicleInfo) {
+                        confirmCarMuch = matchVehicleInfo;
+                    } else {
+                        //匹配的车辆信息数据里  未匹配成功   默认选择第一条
+                        //排序  年款降序  金额升序
+                        vehicleInfoList =
+                                vehicleInfoList.stream().sorted(Comparator.comparing(CarPriceMuchResponse.DataDTO.CarsDTO::getCarYear).thenComparing((o1, o2) -> Integer.compare(StringUtils.toInt(o2.getCarYear()), StringUtils.toInt(o1.getCarYear()))).reversed()).collect(Collectors.toList());
+
+                        confirmCarMuch = vehicleInfoList.get(0);
+                    }
+                }
+                return carPriceQueryMuch(respMuch.getData().getInputvo(), confirmCarMuch
+                );
+            }
+        }
+        return null;
+    }
+
+    /**
+     * (多条)车价查询
+     */
+    public CarPriceResponse.DataDTO carPriceQueryMuch(String uuid, CarPriceMuchResponse.DataDTO.CarsDTO carsDTO) {
+        //构造请求参数
+        CarPriceMuchRequest req = new CarPriceMuchRequest();
+        req.setUuid(uuid);
+        req.setCarPriceMuchResp(carsDTO);
+        JSONObject request = guoRenRequestApiComponent.request(req, PlatformInterfaceCode.API_IIRBT00017);
+        CarPriceResponse resp = request.toJavaObject(CarPriceResponse.class);
+        if (resp.getResultCode() == 1) {
+            throw new SystemException(resp.getResultMsg() == null ? "未获取到车价信息,请联系管理员" : resp.getResultMsg());
+        }
+        return resp.getData();
+
+    }
 }