Pārlūkot izejas kodu

中煤报价相关

shenweidong 1 gadu atpakaļ
vecāks
revīzija
92654304f0
44 mainītis faili ar 3384 papildinājumiem un 0 dzēšanām
  1. 196 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/InsuranceTypeCorrespondence.java
  2. 205 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/componet/ZmApiRequestComponent.java
  3. 18 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/TimeConstants.java
  4. 48 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/TransCode.java
  5. 43 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/CarUseTypeEnum.java
  6. 72 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/ContractEnum.java
  7. 57 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/JingyouEnergyTypes.java
  8. 22 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/MotorMainTypeEnum.java
  9. 73 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/MotorSubTypeEnum.java
  10. 33 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/BaseHead.java
  11. 28 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/BaseRequestHead.java
  12. 51 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/ZmApiConfigureParameters.java
  13. 90 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/ZmCarEntity.java
  14. 37 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/dto/ZmCarDTO.java
  15. 23 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/BaseRequest.java
  16. 48 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/CheckSMScodeRequest.java
  17. 45 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/InsurancePolicyPrintRequest.java
  18. 51 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/ModelsQueryRequest.java
  19. 32 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/OrderStatusRequest.java
  20. 555 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/QuotedPriceRequest.java
  21. 65 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/RideAccidentQueryRequest.java
  22. 75 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/SubmitRequest.java
  23. 39 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/SubmitStatusQueryRequest.java
  24. 40 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/UnderwritingWithdrawRequest.java
  25. 119 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/UploadImageRequest.java
  26. 39 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/ValidSMScodeRequest.java
  27. 21 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/BaseResponse.java
  28. 41 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/BaseResponseHead.java
  29. 52 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/CheckSMScodeResponse.java
  30. 29 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/InsurancePolicyPrintResponse.java
  31. 244 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/ModelsQueryResponse.java
  32. 63 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/OrderStatusResponse.java
  33. 191 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/QuotedPriceResponse.java
  34. 91 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/RideAccidentQueryResponse.java
  35. 73 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/SubmitResponse.java
  36. 46 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/SubmitStatusQueryResponse.java
  37. 20 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/UnderwritingWithdrawResponse.java
  38. 14 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/UploadImageResponse.java
  39. 33 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/ValidSMScodeResponse.java
  40. 52 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/BaseQuoteInfoVo.java
  41. 163 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/CustomerInfoVo.java
  42. 48 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/RiskInfoVo.java
  43. 67 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/YaQuoteInfoVo.java
  44. 32 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/properties/ZmApiProperties.java

+ 196 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/InsuranceTypeCorrespondence.java

@@ -0,0 +1,196 @@
+package com.jzg.quotation.commons.constant;
+
+import com.jzg.quotation.commons.constant.enums.quote.CarNatureCode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:45
+ **/
+public class InsuranceTypeCorrespondence {
+    private InsuranceTypeCorrespondence() {
+    }
+
+    protected static final String[] JINZHANGGUI_TYPE = {"A", "B", "D3", "D4", "MJ1", "MJ2", "MJ3", "MJ4", "BD", "L", "SY_FJ_YBW1",
+            "SY_FJ_YBW2", "SY_FJ_YBW3", "TY1", "TY2", "TY3", "TY4"};
+
+    // 中煤财险
+    protected static final String[] ZM_CONNECT_INSURANCE_TYPE = {"01", "02", "041", "044", "501", "502", "5041", "5044", "49", "21",
+            "5302", "5344", "5341", "54", "55", "56", "57"};
+
+
+    //华泰财险
+    protected static final String[] HuaTai_CONNECT_INSURANCE_TYPE = {"A", "B", "D11", "D12", "MMA", "MMB", "MMD11", "MMD12", "BD", "L",
+            "PB", "PD12", "PD11", "SR", "", "SD", ""};
+
+    // 紫金财险
+    protected static final String[] ZJ_CONNECT_INSURANCE_TYPE = {"A", "B", "D3", "D4", "FA", "FB", "FD3", "FD4", "B2", "L", "S1", "S3",
+            "S2", "T1", "T2", "T3", "T4"};
+
+    //紫金财险新能源
+    protected static final String[] ZJ_CONNECT_INSURANCE_TYPE_NEW_EMERGY = {"A3", "B3", "D5", "D6", "FA", "FB", "FD3", "FD4", "B2", "L",
+            "S1", "S3", "S2", "T5", "T6", "T7", "T8"};
+
+
+    // 永诚财险
+    protected static final String[] YONGCHENG_CONNECT_INSURANCE_TYPE = {"030006", "030018", "030101", "030102", "030213", "030214", "030215", "030216", "030019", "030108", "030208",
+            "030220", "030219", "030209", "030210", "030211", "030212"};
+
+    // 永诚财险新能源
+    protected static final String[] YONGCHENG_CONNECT_INSURANCE_TYPE_NEW_EMERGY = {"030226", "030227", "030228", "030229", "030213", "030214", "030215", "030216", "030019", "030108", "030208",
+            "030220", "030219", "030235", "030236", "030237", "030238"};
+
+    //阳光财险
+    protected static final String[] YG_CONNECT_INSURANCE_TYPE = {"20A", "20B", "20C1", "20C2", "20FD","20FE","20FF","20FG","20FA","20F7","20FH","20FR","20FQ","20FK","20FL",
+            "20FM","20FN"};
+    //阳光财险新能源
+    protected static final String[] YG_CONNECT_INSURANCE_TYPE_NEW_EMERGY = {"21A", "21B", "21C1", "21C2", "20FD", "20FE", "20FF", "20FG", "20FA",
+            "20F7", "20FH", "20FR", "20FQ", "21FK", "21FL", "21FM", "21FN"};
+    // 乘客
+    protected static final String[] PASSENGER = {"D4", "SY_FJ_YBW2"};
+
+    //司机
+    protected static final String[] DRIVER = {"D3", "SY_FJ_YBW3"};
+
+    // 绝对免赔
+    protected static final String[] ABSOLUTE_DEDUCTIBLE = {"MJ1", "MJ2", "MJ3", "MJ4"};
+
+    // 服务特约条款
+    protected static final String[] SPECIAL_CONTRACT_CLAUSE = {"TY1", "TY2", "TY3", "TY4"};
+
+    //中煤机动车险种
+    protected static final Map<String, String> ZhongMei_RISK_1379 = new HashMap<>();
+    //中煤新能源车险种
+    protected static final Map<String, String> ZhongMei_RISK_1382 = new HashMap<>();
+    //中煤产品编码
+    protected static final Map<String, String> ZhongMei_PRODUCT = new HashMap<>();
+    //中煤险种编码
+    protected static final Map<String, Map<String, String>> ZhongMei_RISK = new HashMap<>();
+
+    protected static final Map<String, String> HuaTai_RISK = new HashMap<>();
+    protected static final String HuaTai_NEW_ENERGY_RISK = "1255";
+
+    static {
+        ZhongMei_RISK_1379.put("0507", "0330");
+        ZhongMei_RISK_1379.put("0510", "0361");
+    }
+
+    static {
+        ZhongMei_RISK_1382.put("0507", "0330");
+        ZhongMei_RISK_1382.put("0510", "0365");
+    }
+
+    static {
+        ZhongMei_PRODUCT.put("0", "1379");//燃油-机动车
+        ZhongMei_PRODUCT.put("1", "1382");//纯电动-新能源
+        ZhongMei_PRODUCT.put("2", "1382");//燃料电池-新能源
+        ZhongMei_PRODUCT.put("3", "1382");//插电混合-新能源
+        ZhongMei_PRODUCT.put("4", "1379");//其他混合动力-机动车
+        ZhongMei_PRODUCT.put("9", "1379");//其他-机动车
+    }
+
+    static {
+        ZhongMei_RISK.put("0", ZhongMei_RISK_1379);//燃油-机动车
+        ZhongMei_RISK.put("1", ZhongMei_RISK_1382);//纯电动-新能源
+        ZhongMei_RISK.put("2", ZhongMei_RISK_1382);//燃料电池-新能源
+        ZhongMei_RISK.put("3", ZhongMei_RISK_1382);//插电混合-新能源
+        ZhongMei_RISK.put("4", ZhongMei_RISK_1379);//燃油-机动车
+        ZhongMei_RISK.put("9", ZhongMei_RISK_1379);//燃油-机动车
+    }
+
+    static {
+        HuaTai_RISK.put("0507", "1002");
+        HuaTai_RISK.put("0510", "1251");
+    }
+
+    //中煤使用性质转换关系
+    protected static final Map<String, String> ZM_CAR_MotorUsageTypeCode = new HashMap<>();
+
+    static {
+        ZM_CAR_MotorUsageTypeCode.put(CarNatureCode.CAR_NATURE_CODE_01.getCode(), "01");//营业
+        ZM_CAR_MotorUsageTypeCode.put(CarNatureCode.CAR_NATURE_CODE_02.getCode(), "02");//非营业
+    }
+
+    public static String[] getJinZhangGuiType() {
+        return JINZHANGGUI_TYPE;
+    }
+
+    public static String[] getZmConnectInsuranceType() {
+        return ZM_CONNECT_INSURANCE_TYPE;
+    }
+
+    public static String[] getHuaTaiConnectInsuranceType() {
+        return HuaTai_CONNECT_INSURANCE_TYPE;
+    }
+
+    public static String[] getZjConnectInsuranceType() {
+        return ZJ_CONNECT_INSURANCE_TYPE;
+    }
+
+    public static String[] getYangGuangConnectInsuranceType() {
+        return YG_CONNECT_INSURANCE_TYPE;
+    }
+
+    public static String[] getYangGuangConnectInsuranceTypeNewEnergy() {
+        return YG_CONNECT_INSURANCE_TYPE_NEW_EMERGY;
+    }
+
+    public static String[] getSpecialContractClause(){
+        return SPECIAL_CONTRACT_CLAUSE;
+    }
+
+    public static String[] getZjConnectInsuranceTypeNewEnergy() {
+        return ZJ_CONNECT_INSURANCE_TYPE_NEW_EMERGY;
+    }
+
+    public static String[] getPassenger() {
+        return PASSENGER;
+    }
+
+    public static String[] getDriver() {
+        return DRIVER;
+    }
+
+    public static String[] getAbsoluteDeductible() {
+        return ABSOLUTE_DEDUCTIBLE;
+    }
+
+    public static Map<String, String> getZhongMei_RISK_1379() {
+        return ZhongMei_RISK_1379;
+    }
+
+    public static Map<String, Map<String, String>> getZhongMei_RISK() {
+        return ZhongMei_RISK;
+    }
+
+    public static Map<String, String> getZhongMei_RISK_1382() {
+        return ZhongMei_RISK_1382;
+    }
+
+    public static Map<String, String> getZhongMei_PRODUCT() {
+        return ZhongMei_PRODUCT;
+    }
+
+    public static Map<String, String> getHuaTaiRisk() {
+        return HuaTai_RISK;
+    }
+
+    public static String getHuaTaiNewEnergyRisk() {
+        return HuaTai_NEW_ENERGY_RISK;
+    }
+
+    public static Map<String, String> getZM_CAR_MotorUsageTypeCode() {
+        return ZM_CAR_MotorUsageTypeCode;
+    }
+
+    public static String[] getYongchengConnectInsuranceType(){
+        return YONGCHENG_CONNECT_INSURANCE_TYPE;
+    }
+
+    public static String[] getYongchengConnectInsuranceTypeNewEmergy(){
+        return YONGCHENG_CONNECT_INSURANCE_TYPE_NEW_EMERGY;
+    }
+}

+ 205 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/componet/ZmApiRequestComponent.java

@@ -0,0 +1,205 @@
+package com.jzg.quote.zhongmei.api.componet;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.component.RequestComponent;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.ZmApiConfigureParameters;
+import com.jzg.quote.zhongmei.api.entity.request.*;
+import com.jzg.quote.zhongmei.api.entity.response.*;
+import com.jzg.quote.zhongmei.api.properties.ZmApiProperties;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date: 2025-02-24 10:57
+ **/
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class ZmApiRequestComponent {
+    private final ZmApiProperties zmApiProperties;
+
+    private final RedissonClient redissonClient;
+
+    private final RequestComponent requestComponent;
+
+    public <T, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
+        ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
+        return bResponseEntity.getBody();
+    }
+
+    /**
+     * 先注释,后续查看是否存在一个接口,多种参数的情况
+     * @param requestUrl
+     * @param requestBody
+     * @param responseType
+     * @param httpHeaders
+     * @return
+     * @param <T>
+     * @param <B>
+     */
+    /*public <T, B extends BaseResponse> B requestRequestUrl(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
+        return requestUrl(requestUrl.getRequestUrl(zmApiProperties.getUrl()), requestBody, responseType, httpHeaders);
+    }*/
+
+    /**
+     * @param <Q>     Request 请求体
+     * @param <S>     Response 响应体
+     * @param request 请求内容
+     * @param tClass  响应类型
+     * @param verify  结果是否需要验证
+     * @return 响应内容
+     */
+    private <Q extends BaseRequest, S extends BaseResponse> S request(Q request, Class<S> tClass, boolean verify, String domain, String urlInterface, HttpHeaders httpHeaders) {
+        String url = domain;
+        if (StringUtils.isNotEmpty(urlInterface)) {
+            url = url + urlInterface + ".do";
+        } else {
+            url = url + request.getHead().getTransCode() + ".do";
+        }
+        S response = requestUrl(url, request, tClass, httpHeaders);
+        if (verify) {
+            validationResults(response);
+        }
+        return response;
+    }
+
+    /**
+     * @param <Q> Request 请求体
+     * @param <S> Response 响应体
+     *            常规
+     */
+    private <Q extends BaseRequest, S extends BaseResponse> S routineRequest(Q request, Class<S> tClass, boolean verify, String urlInterface, HttpHeaders httpHeaders) {
+        return request(request, tClass, verify, zmApiProperties.getUrl(), urlInterface, httpHeaders);
+    }
+
+    /**
+     * @param <Q> Request 请求体
+     * @param <S> Response 响应体
+     *            影像
+     */
+    private <Q extends BaseRequest, S extends BaseResponse> void imageRequest(Q request, Class<S> tClass, boolean verify, HttpHeaders httpHeaders) {
+        request(request, tClass, verify, zmApiProperties.getUrl(), "", httpHeaders);
+    }
+
+    /**
+     * @param <Q> Request 请求体
+     * @param <S> Response 响应体
+     *            短信
+     */
+    private <Q extends BaseRequest, S extends BaseResponse> S smsRequest(Q request, Class<S> tClass, boolean verify, HttpHeaders httpHeaders) {
+        return request(request, tClass, verify, zmApiProperties.getSmsUrl(), "", httpHeaders);
+    }
+
+
+    /**
+     * 车型查询 传入必要车辆信息,返回车型列表给用户选择
+     */
+    public List<ModelsQueryResponse.SimpleStadarCarDTO> modelQuery(ModelsQueryRequest request, Class<ModelsQueryResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, "", httpHeaders).getSimpleStadarCar();
+    }
+
+    /**
+     * 报价 传入必要投保方案信息,返回投保单保费及车船税
+     */
+    public QuotedPriceResponse quotedPrice(QuotedPriceRequest request, Class<QuotedPriceResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, "", httpHeaders);
+    }
+
+    /**
+     * 提交核保 传入投保单必要信息,对投保单进行审核
+     */
+    public SubmitResponse submit(SubmitRequest request, Class<SubmitResponse> tClass, HttpHeaders httpHeaders) {
+        request.setCallbackUrl(zmApiProperties.getCallbackDomain() + zmApiProperties.getCallbackUrl());
+        request.setPageUrl(zmApiProperties.getPageUrl());
+        request.setPassMsgUrl(zmApiProperties.getCallbackDomain() + zmApiProperties.getPassMsgUrl());
+        return routineRequest(request, tClass, false, "", httpHeaders);
+    }
+
+    /**
+     * 核保撤回
+     */
+    public void underwritingWithdraw(UnderwritingWithdrawRequest request, Class<UnderwritingWithdrawResponse> tClass, HttpHeaders httpHeaders) {
+        routineRequest(request, tClass, true, "", httpHeaders);
+    }
+
+    /**
+     * 上传影像 传入订单信息,查询是否生成保单成功
+     */
+    public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass, HttpHeaders httpHeaders) {
+        imageRequest(request, tClass, true, httpHeaders);
+    }
+
+    /**
+     * 缴费查询
+     */
+    public OrderStatusResponse orderStatus(OrderStatusRequest request, Class<OrderStatusResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, "", httpHeaders);
+    }
+
+    /**
+     * 核保状态查询 传入单号查询该单核保状态
+     */
+    public SubmitStatusQueryResponse submitStatus(SubmitStatusQueryRequest request, Class<SubmitStatusQueryResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, TransCode.SUBMIT_STATUS, httpHeaders);
+    }
+
+    /**
+     * 非车可投保产品查询
+     * @param request
+     * @param tClass
+     * @return
+     */
+    public RideAccidentQueryResponse rideAccidentQuery(RideAccidentQueryRequest request, Class<RideAccidentQueryResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, TransCode.Ride_Accident_Query, httpHeaders);
+    }
+
+    /**
+     * 电子保单下载 传入单号相关信息下载电子保单
+     */
+    public InsurancePolicyPrintResponse insurancePolicyPrint(InsurancePolicyPrintRequest request, Class<InsurancePolicyPrintResponse> tClass, HttpHeaders httpHeaders) {
+        return routineRequest(request, tClass, true, "", httpHeaders);
+    }
+
+    /**
+     * 校验发短信接口 校验此单是否需要发送短信
+     */
+    public CheckSMScodeResponse checkSMScode(CheckSMScodeRequest request, Class<CheckSMScodeResponse> tClass, HttpHeaders httpHeaders) {
+        return smsRequest(request, tClass, true, httpHeaders);
+    }
+
+    /**
+     * 验证校验码正确 录入校验码校验是否正确
+     */
+    public ValidSMScodeResponse checkSMScode(ValidSMScodeRequest request, Class<ValidSMScodeResponse> tClass, HttpHeaders httpHeaders) {
+        return smsRequest(request, tClass, true, httpHeaders);
+    }
+
+
+    public <T extends BaseResponse> void validationResults(T t) {
+        if ("-1".equals(t.getHead().getReturnCode())) {
+            if(StringUtils.isNotEmpty(t.getHead().getReturnMessage())&& t.getHead().getReturnMessage().contains("商业险重复投保") && t.getHead().getReturnMessage().contains("重复投保的本公司的保单信息")){
+
+            }else{
+                throw new SystemException(t.getHead().getReturnMessage());
+            }
+
+        }
+    }
+}

+ 18 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/TimeConstants.java

@@ -0,0 +1,18 @@
+package com.jzg.quote.zhongmei.api.constant;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 18:06
+ **/
+public class TimeConstants {
+
+    private TimeConstants() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    public static final String START_TIME = "00:00:00";
+
+    public static final String END_TIME = "23:59:59";
+
+}

+ 48 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/TransCode.java

@@ -0,0 +1,48 @@
+package com.jzg.quote.zhongmei.api.constant;
+
+/**
+ * @description: 交互代码
+ * @author: shenweidong
+ * @date:2025/2/24 15:22
+ **/
+public class TransCode {
+
+    //车型查询
+    public static final String MODELS_QUERY = "ModelsQuery";
+
+    //报价
+    public static final String QUOTE_PRICE = "QuotedPrice";
+
+    //提交核保
+    public static final String SUBMIT = "Submit";
+
+    //缴费查询
+    public static final String ORDER_STATUS = "OrderStatus";
+
+    //投保单核保状态查询
+    public static final String SUBMIT_STATUS_QUERY = "SubmitStatusQuery";
+
+    // 投保单核保状态 url 参数
+    public static final String SUBMIT_STATUS = "SubmitStatus";
+
+    //电子保单下载
+    public static final String INSURANCE_POLICY_PRINT = "InsurancePolicyPrint";
+
+    //影像上传
+    public static final String UPLOAD_IMAGE = "UploadImage";
+
+    //校验是否发送短信验证码
+    public static final String CHECK_SMS_CODE = "CheckSMScode";
+
+    //校验验证码是否正确
+    public static final String VALID_SMS_CODE = "ValidSMScode";
+
+    //续保查询
+    public static final String RENEWAL_QUERY = "RenewalQuery";
+
+    // 非车可投保产品查询
+    public static final String Ride_Accident_Query = "RideAccidentQuery";
+
+    // 核保撤回
+    public static final String UNDERWRITING_CANCLE = "UnderwritingCancle";
+}

+ 43 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/CarUseTypeEnum.java

@@ -0,0 +1,43 @@
+package com.jzg.quote.zhongmei.api.constant.enums;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 18:13
+ **/
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 中煤财险 车辆用途
+ * 01	家庭自用	客车
+ * 02	非营业党政机关、事业团体	客车/货车
+ * 03	非营业企业	客车/货车
+ * 04	营业出租	货车
+ * 05	营业租赁	客车
+ * 06	营业城市公交	客车
+ * 07	营业公路客运	客车
+ * 08	非营业个人	货车
+ * 09	营业货运	货车
+ * 11	营业旅游客运	客车
+ * 12	预约出租客运	客车
+ */
+@Getter
+@AllArgsConstructor
+public enum CarUseTypeEnum {
+
+    C_01("04", "营业出租"),
+    C_02("06", "营业城市公交"),
+    C_03("07", "非营业企业"),
+    C_04("09", "营业出租"),
+    C_05("01", "家庭自用"),
+    C_06("02", "非营业党政机关、事业团体"),
+    C_07("03", "非营业企业"),
+    C_08("08", "非营业个人");
+
+    private final String code;
+
+    private final String meaning;
+
+}

+ 72 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/ContractEnum.java

@@ -0,0 +1,72 @@
+package com.jzg.quote.zhongmei.api.constant.enums;
+
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/25 09:05
+ **/
+@Getter
+public enum ContractEnum {
+    C_BZ("BZ", "机动车交通事故责任强制险"),
+    C_01("01", "机动车损失保险"),
+    C_02("02", "机动车第三者责任保险"),
+    C_041("041", "机动车车上人员责任保险(司机)"),
+    C_044("044", "机动车车上人员责任保险(乘客)"),
+    C_52("52", "附加车轮单独损失险"),
+    C_14("14", "附加新增加设备损失险"),
+    C_21("21", "附加车身划痕损失险"),
+    C_26("26", "附加修理期间费用补偿险"),
+    C_51("51", "附加发动机进水损坏除外特约条款"),
+    C_08("08", "附加车上货物责任险"),
+    C_2702("2702", "附加精神损害抚慰金责任险(三者)"),
+    C_2741("2741", "附加精神损害抚慰金责任险(司机)"),
+    C_2744("2744", "附加精神损害抚慰金责任险(乘客)"),
+    C_49("49", "附加法定节假日限额翻倍险"),
+    C_5302("5302", "附加医保外用药责任险(三者)"),
+    C_5341("5341", "附加医保外用药责任险(司机)"),
+    C_5344("5344", "附加医保外用药责任险(乘客)"),
+    C_54("54", "附加机动车增值服务特约条款(救援)"),
+    C_55("55", "附加机动车增值服务特约条款(检测)"),
+    C_56("56", "附加机动车增值服务特约条款(代驾)"),
+    C_57("57", "附加机动车增值服务特约条款(送检)"),
+    C_501("501", "附加绝对免赔率特约条款(车损)"),
+    C_502("502", "附加绝对免赔率特约条款(三者)"),
+    C_5041("5041", "附加绝对免赔率特约条款(司机)"),
+    C_5044("5044", "附加绝对免赔率特约条款(乘客)"),
+    H_BZ("BZ", "机动车交通事故责任强制保险"),
+    H_A("A", "机动车损失保险"),
+    H_B("B", "机动车第三者责任险"),
+    H_D11("D11", "机动车车上人员责任险(司机)"),
+    H_D12("D12", "机动车车上人员责任险(乘客)"),
+    H_L("L", "附加车身划痕损失险"),
+    H_X("X", "附加新增加设备损失险"),
+    H_C("C", "附加修理期间费用补偿险"),
+    H_N("N", "附加发动机进水损坏除外特约条款"),
+    H_BD("BD", "附加法定节假日限额翻倍险"),
+    H_MT("MT", "附加车轮单独损失险"),
+    H_RB("RB", "附加精神损害抚慰金责任险(三者)"),
+    H_RD11("RD11", "附加精神损害抚慰金责任险(司机)"),
+    H_RD12("RD12", "附加精神损害抚慰金责任险(乘客)"),
+    H_PB("PB", "附加医保外用药责任险(三者)"),
+    H_PD11("PD11", "附加医保外用药责任险(司机)"),
+    H_PD12("PD12", "附加医保外用药责任险(乘客)"),
+    H_SR("SR", "附加机动车道路救援服务特约条款"),
+    H_SD("SD", "附加机动车代为驾驶服务特约条款"),
+    H_MMA("MMA", "附加绝对免赔率特约条款(车损)"),
+    H_MMB("MMB", "附加绝对免赔率特约条款(三者)"),
+    H_MMD11("MMD11", "附加绝对免赔率特约条款(车上人员-驾驶员)"),
+    H_MMD12("MMD12", "附加绝对免赔率特约条款(车上人员-乘客)");
+
+    ContractEnum(String kindCode, String kindName) {
+        this.kindCode = kindCode;
+        this.kindName = kindName;
+    }
+
+    // 险别代码
+    private final String kindCode;
+    // 险别名称
+    private final String kindName;
+
+}

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

@@ -0,0 +1,57 @@
+package com.jzg.quote.zhongmei.api.constant.enums;
+
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.constant.enums.quote.EnergyTypeCode;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Optional;
+
+/**
+ * @description: 精友能源种类
+ * @author: shenwd
+ * @date:2025/2/25 11:17
+ **/
+@Getter
+@AllArgsConstructor
+public enum JingyouEnergyTypes {
+    D1("D1", "汽油", EnergyTypeCode.ENERGY_TYPE_CODE_0.getCode()),
+    D2("D2", "柴油", EnergyTypeCode.ENERGY_TYPE_CODE_0.getCode()),
+    D3("D3", "天然气(NG/CNG/LNG)", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D4("D4", "液化石油气(LPG)", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D5("D5", "混合动力", EnergyTypeCode.ENERGY_TYPE_CODE_4.getCode()),
+    D6("D6", "电动", EnergyTypeCode.ENERGY_TYPE_CODE_1.getCode()),
+    D7("D7", "两用燃料", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D8("D8", "燃料电池", EnergyTypeCode.ENERGY_TYPE_CODE_2.getCode()),
+    D9("D9", "甲醇", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D10("D10", "乙醇", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D11("D11", "其它", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D12("D12", "插电式混合动力", EnergyTypeCode.ENERGY_TYPE_CODE_3.getCode()),
+    D13("D13", "混合油", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D14("D14", "太阳能", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode()),
+    D15("D15", "无", EnergyTypeCode.ENERGY_TYPE_CODE_9.getCode());
+
+    private final String code;
+
+    private final String desc;
+
+    private final String energyType;
+
+
+    /**
+     * 通过精友编码获取车型编码
+     * @param code
+     * @return
+     */
+    public static String getEnergyTypeByCode(String code) {
+        if(StringUtils.isEmpty(code)){
+            return EnergyTypeCode.ENERGY_TYPE_CODE_0.getCode();
+        }
+
+        JingyouEnergyTypes jingyouEnergyTypes = valueOf(code);
+        return Optional
+                .of(jingyouEnergyTypes)
+                .map(JingyouEnergyTypes::getEnergyType)
+                .orElse(EnergyTypeCode.ENERGY_TYPE_CODE_0.getCode());
+    }
+}

+ 22 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/MotorMainTypeEnum.java

@@ -0,0 +1,22 @@
+package com.jzg.quote.zhongmei.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 18:09
+ **/
+@Getter
+@AllArgsConstructor
+public enum MotorMainTypeEnum {
+
+    MM_A0("100", "客车"),
+    MM_A1("200","货车");
+
+    private final String code;
+
+    private final String meaning;
+
+}

+ 73 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/constant/enums/MotorSubTypeEnum.java

@@ -0,0 +1,73 @@
+package com.jzg.quote.zhongmei.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 18:11
+ **/
+@Getter
+@AllArgsConstructor
+public enum MotorSubTypeEnum {
+
+    H11("208", "重型普通货车"),
+    H12("204", "重型厢式货车"),
+    H13("208", "重型封闭货车"),
+    H14("206", "重型罐式货车"),
+    H15("201", "重型平板货车"),
+    H16("208", "重型集装厢车"),
+    H17("208", "重型自卸货车"),
+    H18("208", "重型特殊结构货车"),
+    H21("208", "中型普通货车"),
+    H22("204", "中型厢式货车"),
+    H23("208", "中型封闭货车"),
+    H24("206", "中型罐式货车"),
+    H25("201", "中型平板货车"),
+    H26("208", "中型集装厢车"),
+    H27("203", "中型自卸货车"),
+    H28("208", "中型特殊结构货车"),
+    H31("208", "轻型普通货车"),
+    H32("204", "轻型厢式货车"),
+    H33("208", "轻型封闭货车"),
+    H34("206", "轻型罐式货车"),
+    H35("201", "轻型平板货车"),
+    H37("203", "轻型自卸货车"),
+    H38("208", "轻型特殊结构货车"),
+    H41("208", "微型普通货车"),
+    H42("204", "微型厢式货车"),
+    H43("208", "微型封闭货车"),
+    H44("206", "微型罐式货车"),
+    H45("203", "微型自卸货车"),
+    H46("208", "微型特殊结构货车"),
+    H51("208", "低速普通货车"),
+    H52("204", "低速厢式货车"),
+    H53("206", "罐式低速货车"),
+    H54("203", "低速自卸货车"),
+    J11("208", "轮式装载机械"),
+    J12("208", "轮式挖掘机械"),
+    J13("208", "轮式平地机械"),
+
+    K11("105", "大型普通客车"),
+    K12("105", "大型双层客车"),
+    K13("105", "大型卧铺客车"),
+    K14("105", "大型铰接客车"),
+    K15("103", "大型越野客车"),
+    K21("104", "中型普通客车"),
+    K22("104", "中型双层客车"),
+    K23("104", "中型卧铺客车"),
+    K24("104", "中型铰接客车"),
+    K25("103", "中型越野客车"),
+    K31("102", "小型普通客车"),
+    K32("103", "小型越野客车"),
+    K33("101", "轿车"),
+    K41("102", "微型普通客车"),
+    K42("103", "微型越野客车"),
+    K43("101", "微型轿车");
+
+    private final String code;
+
+    private final String meaning;
+
+}

+ 33 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/BaseHead.java

@@ -0,0 +1,33 @@
+package com.jzg.quote.zhongmei.api.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 11:27
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BaseHead implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7707577499599391398L;
+    /**
+     * 交互代码,用来指定该报文所要交互的接口
+     */
+    private String transCode;
+    /**
+     * 交互类型,用来指定该报文是入参(Req)
+     */
+    private String transType = "Req";
+    /**
+     * 信息来源,用来指定该报文的来源
+     */
+    private String token;
+}

+ 28 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/BaseRequestHead.java

@@ -0,0 +1,28 @@
+package com.jzg.quote.zhongmei.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 11:24
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class BaseRequestHead extends BaseHead {
+    /**
+     * 该用户的唯一标识符,默认值为:
+     */
+    private String source;
+
+    public BaseRequestHead(String token, String source) {
+        super.setToken(token);
+        this.source = source;
+    }
+
+    public BaseRequestHead(ZmApiConfigureParameters zmApiConfigureParameters) {
+        super.setToken(zmApiConfigureParameters.getToken());
+        this.source = zmApiConfigureParameters.getSource();
+    }
+}

+ 51 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/ZmApiConfigureParameters.java

@@ -0,0 +1,51 @@
+package com.jzg.quote.zhongmei.api.entity;
+
+import com.jzg.quotation.commons.standard.ConfigureParameters;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author:shenweidong
+ * @date:2025-02-24 10:25
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ZmApiConfigureParameters implements ConfigureParameters {
+    @Serial
+    private static final long serialVersionUID = 8056507449538475208L;
+
+    /**
+     * 用户的唯一标识符
+     */
+    private String token;
+
+    /**
+     * 信息来源,用来指定该报文的来源
+     */
+    private String source;
+
+    /**
+     * 省
+     */
+    private String province;
+
+    /**
+     * 市
+     */
+    private String city;
+
+    /**
+     * 县
+     */
+    private String district;
+
+    /**
+     * 统计   2023-08-29 lig 添加
+     */
+    private String accountUser;
+}

+ 90 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/ZmCarEntity.java

@@ -0,0 +1,90 @@
+package com.jzg.quote.zhongmei.api.entity;
+
+import com.jzg.quote.zhongmei.api.constant.enums.JingyouEnergyTypes;
+import com.jzg.quote.zhongmei.api.entity.dto.ZmCarDTO;
+import lombok.Data;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/25 11:05
+ **/
+@Data
+public class ZmCarEntity {
+
+    private String analogyPrice;
+    private String analogyPriceTax;
+    private String approvedLoad;
+    private String approvedPassengersCapacity;
+    private String brand;
+    private String brandCode;
+    private String carAlias;
+    private String carKind;
+    private String carType;
+    private String carYear;
+    private String createDate;
+    private String displacement;
+    private String energyTypes;
+    private String factory;
+    private String fuelType;
+    private String fuelTypeCode;
+    private String grossMass;
+    private String isrelief;
+    private String jqxClassId;
+    private String jqxClassName;
+    private String localModelCode;
+    private String modelName;
+    private String motorType;
+    private String newVehicleClass;
+    private String newVehicleClassCode;
+    private String originalPurchasePrice;
+    private String power;
+    private String purchasePrice;
+    private String purchasePriceTax;
+    private String qualityMax;
+    private String qualityMin;
+    private String remark;
+    private String searchCodeAlias;
+    private String series;
+    private String seriesCode;
+    private String shortHandCode;
+    private String status;
+    private String syxClassName;
+    private String syxClassid;
+    private String taxReliefFlag;
+    private String tractionMass;
+    private String transmissionType;
+    private String unladenMass;
+    private String updateDate;
+    private String vehicleSeatMax;
+    private String vehicleSeatMin;
+
+    public static List<ZmCarDTO> toCarModelDTOs(List<ZmCarEntity> data) {
+        return data.stream().map(ZmCarEntity::toCarModelDTO).collect(Collectors.toList());
+    }
+
+    public static ZmCarDTO toCarModelDTO(ZmCarEntity zmCarEntity) {
+        ZmCarDTO carModelDTO = new ZmCarDTO();
+        carModelDTO.setModelCode(zmCarEntity.getLocalModelCode());
+        carModelDTO.setModelName(zmCarEntity.getModelName());
+        carModelDTO.setBrandCN(zmCarEntity.getBrand());
+        carModelDTO.setSeries(zmCarEntity.getSeries());
+        carModelDTO.setRatedPassengerCapacity(zmCarEntity.getApprovedPassengersCapacity());
+        carModelDTO.setDisplacement(zmCarEntity.getDisplacement());
+        carModelDTO.setMarketYear(zmCarEntity.getCarYear());
+        carModelDTO.setReplacementValue(zmCarEntity.getOriginalPurchasePrice());
+        carModelDTO.setRemark(zmCarEntity.getRemark());
+        carModelDTO.setFuelType(zmCarEntity.getFuelType());
+
+        String energyTypeByCode = JingyouEnergyTypes.getEnergyTypeByCode(zmCarEntity.getFuelTypeCode());
+        carModelDTO.setFuelTypeCode(energyTypeByCode);
+        carModelDTO.setEnergyTypes(energyTypeByCode);
+        carModelDTO.setPowerScale(zmCarEntity.getPower());
+        carModelDTO.setVehicleSeatMax(zmCarEntity.getVehicleSeatMax());
+        carModelDTO.setVehicleSeatMin(zmCarEntity.getVehicleSeatMin());
+        return carModelDTO;
+    }
+}

+ 37 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/dto/ZmCarDTO.java

@@ -0,0 +1,37 @@
+package com.jzg.quote.zhongmei.api.entity.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/25 11:08
+ **/
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ZmCarDTO {
+
+    private String modelCode;//车型编码 autoModelCode
+    private String modelName;//车型库名称 比亚迪QCJ7153A5轿车
+    private String brandCN;//品牌名称 brandName
+    private String series;//车系名称
+    private String importFlag;//车型种类
+    private String ratedPassengerCapacity;//核定载客人数
+    private String displacement;//排量
+    private String marketYear;//上市年份
+    private String replacementValue;//默认购置价
+    private String vehicleDescription;//车型描述
+    private String refCode1;//参考代码1
+    private String refCode2;//参考代码2
+    private String gearboxType;//变速箱类型
+    private String remark;//
+    private String fuelType;//能源种类
+    private String fuelTypeCode;//能源类别
+    private String energyTypes; // 能源种类
+    private String wholeWeight;//
+    private String powerScale;//
+    //    private VehicleJingyou vehicleJingyo;
+    private String vehicleSeatMax; // 最大座位数
+    private String vehicleSeatMin; // 最小座位数
+}

+ 23 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/BaseRequest.java

@@ -0,0 +1,23 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 11:22
+ **/
+@Data
+public abstract class BaseRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -925897542071253713L;
+
+    @JsonProperty(value = "head")
+    private BaseRequestHead head;
+}

+ 48 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/CheckSMScodeRequest.java

@@ -0,0 +1,48 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:12
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class CheckSMScodeRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = 3227478291449222553L;
+    @JsonProperty("itemsList")
+    private List<ItemsListDTO> itemsList;
+    /**
+     * 1:校验是否需要发送验证码
+     * 2:发送验证码
+     */
+    @JsonProperty("operationCode")
+    private String operationCode;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.CHECK_SMS_CODE);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ItemsListDTO {
+        @JsonProperty("contractNo")
+        private String contractNo;
+        @JsonProperty("businessType")
+        private String businessType;
+    }
+}

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

@@ -0,0 +1,45 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: 电子保单下载
+ * @author: shenwd
+ * @date:2025/2/24 17:08
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class InsurancePolicyPrintRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -5981502952732639737L;
+    @JsonProperty("policyNo")
+    private String policyNo;
+
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+    @JsonProperty("businessType")
+    private String businessType = "P";
+
+    @JsonProperty("endorSeqNo")
+    private String endorSeqNo = "000";
+
+    @JsonProperty("documentType")
+    private String documentType;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.INSURANCE_POLICY_PRINT);
+    }
+
+}

+ 51 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/ModelsQueryRequest.java

@@ -0,0 +1,51 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 15:15
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ModelsQueryRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -5428291279350853639L;
+    /**
+     * 每页行数
+     */
+    private Integer rows = 50;
+
+    /**
+     * 每页行数
+     */
+    private Integer pageNo = 1;
+
+    /**
+     * 每页行数
+     */
+    private String modelName;
+
+    /**
+     * 每页行数
+     */
+    private String brand;
+
+    /**
+     * 每页行数
+     */
+    private String modelCode;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.MODELS_QUERY);
+    }
+}

+ 32 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/OrderStatusRequest.java

@@ -0,0 +1,32 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:51
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class OrderStatusRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -2185560915276529834L;
+    @JsonProperty("businessNo")
+    private String businessNo;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.ORDER_STATUS);
+    }
+}

+ 555 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/QuotedPriceRequest.java

@@ -0,0 +1,555 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import cn.hutool.core.util.ArrayUtil;
+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.InsuranceTypeCorrespondence;
+import com.jzg.quote.zhongmei.api.constant.enums.ContractEnum;
+import com.jzg.quotation.commons.entity.vo.quote.AccidentalDrivingVo;
+import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.KindInfoVo;
+import com.jzg.quote.zhongmei.api.constant.enums.CarUseTypeEnum;
+import com.jzg.quote.zhongmei.api.constant.enums.MotorMainTypeEnum;
+import com.jzg.quote.zhongmei.api.constant.TimeConstants;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.constant.enums.MotorSubTypeEnum;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import com.jzg.quote.zhongmei.api.entity.ZmApiConfigureParameters;
+import com.jzg.quote.zhongmei.api.entity.response.ModelsQueryResponse;
+import com.jzg.quote.zhongmei.api.entity.vo.BaseQuoteInfoVo;
+import com.jzg.quote.zhongmei.api.entity.vo.CustomerInfoVo;
+import com.jzg.quote.zhongmei.api.entity.vo.RiskInfoVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 15:28
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class QuotedPriceRequest extends BaseRequest {
+    @Serial
+    private static final long serialVersionUID = -3077461186461876856L;
+
+    @JsonProperty("businessData")
+    private BusinessDataDTO businessData;
+
+    public QuotedPriceRequest(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO,
+                              AccidentalDrivingVo accidentalDrivingVo, ZmApiConfigureParameters zmConfigureParameters) {
+        //调整非车出单流程是后台写死的非车产品,后续可删除
+        /*accidentalDrivingVo.setQuantity(1);
+        accidentalDrivingVo.setRideRiskCode("52");*/
+        this.businessData = new BusinessDataDTO(baseQuoteInfoVo, simpleStadarCarDTO, accidentalDrivingVo, zmConfigureParameters);
+    }
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.QUOTE_PRICE);
+    }
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class BusinessDataDTO implements Serializable {
+
+        private static final long serialVersionUID = 6724538360514954885L;
+
+        // 保单归属地
+        @JsonProperty("policyLocation")
+        private PolicyLocationDTO policyLocation;
+
+        // 车辆信息
+        @JsonProperty("insuredObject")
+        private InsuredObjectDTO insuredObject;
+
+        // 保险信息
+        @JsonProperty("contract")
+        private List<ContractDTO> contract;
+
+        // 客户信息
+        @JsonProperty("customer")
+        private List<CustomerDTO> customer;
+
+        // 驾意险
+        @JsonProperty("accident")
+        private List<AccidentDTO> accident;
+
+        //产品代码
+        @JsonProperty("productPlan")
+        private String productPlan;
+
+        public BusinessDataDTO(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO,
+                               AccidentalDrivingVo accidentalDrivingVo, ZmApiConfigureParameters zmConfigureParameters) {
+            CarInfoVo carInfo = baseQuoteInfoVo.getCarInfo();
+            List<RiskInfoVo> riskList = baseQuoteInfoVo.getRiskList();
+            List<KindInfoVo> kindList = baseQuoteInfoVo.getKindList();
+            CustomerInfoVo ownerInfo = baseQuoteInfoVo.getOwnerInfo();
+            CustomerInfoVo policyHolderInfo = baseQuoteInfoVo.getPolicyHolderInfo();
+            CustomerInfoVo insuredPersonInfo = baseQuoteInfoVo.getInsuredPersonInfo();
+            int i = Integer.parseInt(carInfo.getSeatCount());
+            //产品编码
+            this.productPlan = InsuranceTypeCorrespondence.getZhongMei_PRODUCT().get(simpleStadarCarDTO.getEnergyTypes());
+            // 保单归属地
+            this.policyLocation = new PolicyLocationDTO(zmConfigureParameters);
+            // 车辆信息
+            this.insuredObject = new InsuredObjectDTO(carInfo, simpleStadarCarDTO);
+            // 保险信息
+            this.contract = new ContractDTO().getContract(riskList, kindList, i - 1, carInfo.getEnergyTypeCode());
+            // 客户信息
+            this.customer = new CustomerDTO().getCustomers(ownerInfo, policyHolderInfo, insuredPersonInfo);
+            // 驾意险
+            if (accidentalDrivingVo != null) {
+                this.accident = Collections.singletonList(new AccidentDTO(accidentalDrivingVo.getRideRiskCode(),
+                        accidentalDrivingVo.getQuantity(),"",""));
+            }
+
+        }
+
+
+        @AllArgsConstructor
+        @NoArgsConstructor
+        @Data
+        public static class AccidentDTO implements Serializable {
+            private static final long serialVersionUID = -8335832893055836433L;
+            // 方案代码
+            @JsonProperty("rideRiskCode")
+            private String rideRiskCode;
+            // 投保份数
+            @JsonProperty("quantity")
+            private int quantity;
+            // 标的房屋结构 家财险必传房屋结构
+            //百万医疗险必传是否有社保(0-无社保 1-有社保)
+            @JsonProperty("attribute3")
+            private String attribute3;
+            // 标的详细地址 家财险和组合险必传
+            @JsonProperty("attribute4")
+            private String attribute4;
+
+
+        }
+
+
+        @AllArgsConstructor
+        @NoArgsConstructor
+        @Data
+        public static class PolicyLocationDTO implements Serializable {
+            private static final long serialVersionUID = -4868884351793208747L;
+            @JsonProperty("province")
+            private String province;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("district")
+            private String district;
+            //2023-08-29 lig 添加   解决统计字段无法传入问题
+            @JsonProperty("accountUser")
+            private String accountUser;
+
+            public PolicyLocationDTO(ZmApiConfigureParameters zmConfigureParameters) {
+                this.province = zmConfigureParameters.getProvince();
+                this.city = zmConfigureParameters.getCity();
+                this.district = zmConfigureParameters.getDistrict();
+                this.accountUser = zmConfigureParameters.getAccountUser();
+            }
+
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class InsuredObjectDTO implements Serializable {
+
+            private static final long serialVersionUID = -7398031787228945507L;
+            @JsonProperty("policyCar")
+            private PolicyCarDTO policyCar;
+
+            @JsonProperty("simpleStadarCar")
+            private ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCar;
+
+            public InsuredObjectDTO(CarInfoVo carInfo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO) {
+                this.policyCar = new PolicyCarDTO(carInfo);
+                this.simpleStadarCar = simpleStadarCarDTO;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class PolicyCarDTO implements Serializable {
+                private static final long serialVersionUID = -6802193456312684016L;
+                // 发动机号
+                @JsonProperty("engine")
+                private String engine;
+                // 新车标志
+                @JsonProperty("newCarSign")
+                private Boolean newCarSign;
+                // 车牌号
+                @JsonProperty("plateNo")
+                private String plateNo;
+                // VIN/车架号
+                @JsonProperty("VIN")
+                private String vin;
+                /**
+                 * 过户标志
+                 * 0 未过户
+                 * 01 过户
+                 */
+                @JsonProperty("chgOwnerFlag")
+                private String chgOwnerFlag;
+                // 行驶证注册登记日期(初登日期)
+                @JsonProperty("registerDate")
+                private String registerDate;
+                // 转移登记日期(过户日期)
+                @JsonProperty("transferDate")
+                private String transferDate;
+                // 外地车标志
+                @JsonProperty("ecdemicVehicleFlag")
+                private Boolean ecdemicVehicleFlag;
+                // 发证日期(行驶证)
+                @JsonProperty("issueDate")
+                private String issueDate;
+                /**
+                 * 号牌底色
+                 * 01	蓝
+                 * 02	黄
+                 * 03	黑
+                 * 04	白
+                 * 05	绿
+                 * 06	白蓝
+                 */
+                @JsonProperty("plateColorCode")
+                private String plateColorCode;
+                /**
+                 * 验车状态
+                 * 2	其他免验车
+                 * 3	已验车
+                 * 4	补验车
+                 */
+                @JsonProperty("carCheckStatus")
+                private String carCheckStatus;
+                /**
+                 * 车辆用途
+                 * 01	家庭自用
+                 * 02	非营业党政机关,事业团体
+                 * 03	非营业企业
+                 */
+                @JsonProperty("carUseType")
+                private String carUseType;
+                /**
+                 * 使用性质
+                 * 01	营业
+                 * 02	非营业
+                 */
+                @JsonProperty("motorUsageTypeCode")
+                private String motorUsageTypeCode;
+
+                /**
+                 * 车辆大类
+                 */
+                @JsonProperty("motorMainType")
+                private String motorMainType;
+
+                /**
+                 * 车辆细类
+                 */
+                @JsonProperty("motorSubType")
+                private String motorSubType;
+
+
+                public PolicyCarDTO(CarInfoVo carInfoVo) {
+                    this.engine = carInfoVo.getEngineNo();
+                    if (StringUtils.isEmpty(carInfoVo.getLicenseNo())) {
+                        this.newCarSign = true;
+                    } else {
+                        this.newCarSign = false;
+                    }
+                    this.plateNo = carInfoVo.getLicenseNo();
+                    this.vin = carInfoVo.getVinNo();
+                    if (carInfoVo.isTransfer()) {
+                        this.chgOwnerFlag = "01";
+                        this.transferDate = carInfoVo.getTransferDate() + " " + TimeConstants.START_TIME;
+                    } else {
+                        this.chgOwnerFlag = "0";
+                    }
+                    this.ecdemicVehicleFlag = false;
+                    this.registerDate = carInfoVo.getRegisterDate() + " " + TimeConstants.START_TIME;
+                    this.issueDate = carInfoVo.getIssueDate() + " " + TimeConstants.START_TIME;
+                    this.plateColorCode = "01";
+                    this.carCheckStatus = null;
+
+                    MotorMainTypeEnum motorMainTypeEnum = MotorMainTypeEnum.valueOf("MM_" + carInfoVo.getCarKindCode());
+                    AssertionUtils.isEmpty(motorMainTypeEnum, "车辆种类输入错误");
+                    this.motorMainType =  motorMainTypeEnum.getCode();
+
+                    MotorSubTypeEnum motorSubTypeEnum = MotorSubTypeEnum.valueOf(carInfoVo.getCarTypeCode());
+                    AssertionUtils.isEmpty(motorMainTypeEnum, "车辆类型输入错误");
+                    this.motorSubType = motorSubTypeEnum.getCode();
+
+                    CarUseTypeEnum carUseTypeEnum = CarUseTypeEnum.valueOf("C_" + carInfoVo.getVehicleUseCode());
+                    AssertionUtils.isEmpty(carUseTypeEnum, "车辆用途输入错误");
+                    this.carUseType = carUseTypeEnum.getCode();
+
+                    this.motorUsageTypeCode = InsuranceTypeCorrespondence.getZM_CAR_MotorUsageTypeCode().get(carInfoVo.getCarNatureCode());
+
+
+                }
+            }
+
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ContractDTO implements Serializable {
+
+        private static final long serialVersionUID = -4583284662908149711L;
+        @JsonProperty("contractMain")
+        private ContractMainDTO contractMain;
+
+        @JsonProperty("coverage")
+        private List<CoverageDTO> coverage;
+
+        public List<ContractDTO> getContract(List<RiskInfoVo> riskInfoVos, List<KindInfoVo> kindInfoVos, Integer quantity,
+                                             String energyTypes) {
+            List<ContractDTO> contractDTOS = new ArrayList<>();
+            for (RiskInfoVo riskInfoVo : riskInfoVos) {
+                ContractDTO contractDTO = new ContractDTO();
+                contractDTO.contractMain = new ContractMainDTO(riskInfoVo, energyTypes);
+                if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) {
+                    contractDTO.coverage = Collections.singletonList(new CoverageDTO().fetchTraffic());
+                }
+
+                if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) {
+                    contractDTO.coverage = new CoverageDTO().getBusiness(kindInfoVos, quantity);
+                }
+                contractDTOS.add(contractDTO);
+            }
+            return contractDTOS;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ContractMainDTO implements Serializable {
+            private static final long serialVersionUID = 1931505160644020807L;
+            // 失效日期(终保日期)
+            @JsonProperty("expiryDate")
+            private String expiryDate;
+            /**
+             * 险种代码
+             * 0330	机动车交通事故责任强制保险
+             * 0361	机动车商业保险
+             */
+            @JsonProperty("riskCode")
+            private String riskCode;
+            // 生效日期(起保日期)
+            @JsonProperty("validDate")
+            private String validDate;
+            // 即时生效标志 1:是 0:否
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+
+            public ContractMainDTO(RiskInfoVo riskInfoVo, String energyTypes) {
+                this.riskCode = InsuranceTypeCorrespondence.getZhongMei_RISK().get(energyTypes).get(riskInfoVo.getRiskCode());
+                String startDate = riskInfoVo.getStartDate();
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                LocalDate localDate = LocalDate.parse(startDate, formatter);
+                LocalDate nextYears = localDate.plusYears(1);
+                if (startDate.contains(TimeConstants.START_TIME)) {
+                    LocalDate expiry = nextYears.minusDays(1);
+                    this.validDate = riskInfoVo.getStartDate();
+                    this.expiryDate = expiry + " " + TimeConstants.END_TIME;
+                    this.reinsuranceFlag = "0";
+                } else {
+                    // 及时
+                    LocalDateTime localDateTime = LocalDateTime.parse(startDate, formatter);
+                    LocalDateTime expiryDateTime = localDateTime.plusYears(1);
+                    this.validDate = startDate;
+                    this.expiryDate = expiryDateTime.format(formatter);
+                    this.reinsuranceFlag = "1";
+                }
+
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageDTO implements Serializable {
+            private static final long serialVersionUID = -7935060830529629416L;
+
+            // 单位限额
+            @JsonProperty("unitAmount")
+            private Integer unitAmount;
+            //  数量
+            @JsonProperty("quantity")
+            private Integer quantity;
+            // 保额
+            @JsonProperty("amount")
+            private Integer amount;
+            // 险别代码
+            @JsonProperty("kindCode")
+            private String kindCode;
+            // 险别名称
+            @JsonProperty("kindName")
+            private String kindName;
+            // 绝对免赔率
+            @JsonProperty("deductibleRate")
+            private String deductibleRate;
+            // 绝对免赔额
+            @JsonProperty("deductible")
+            private String deductible;
+
+            /**
+             * 商业险
+             *
+             * @param kindInfoVos 商业险
+             * @param quantity    乘客数
+             * @return
+             */
+            public List<CoverageDTO> getBusiness(List<KindInfoVo> kindInfoVos, int quantity) {
+                List<CoverageDTO> list = new ArrayList<>();
+                for (KindInfoVo kindInfoVo : kindInfoVos) {
+                    CoverageDTO coverageDTO = new CoverageDTO();
+                    String code = kindInfoVo.getKindCode();
+                    //后续根据调整映射修改
+                    int i = ArrayUtil.indexOf(InsuranceTypeCorrespondence.getJinZhangGuiType(), code);
+                    String s = InsuranceTypeCorrespondence.getZmConnectInsuranceType()[i];
+                    ContractEnum contractEnum = Enum.valueOf(ContractEnum.class, "C_" + s);
+                    coverageDTO.kindName = contractEnum.getKindName();
+                    coverageDTO.kindCode = contractEnum.getKindCode();
+                    coverageDTO.amount = Integer.parseInt(kindInfoVo.getAmount());
+                    coverageDTO.unitAmount = Integer.parseInt(kindInfoVo.getUnitAmount());
+                    // 车损
+                    if ("A".equals(code)) {//中煤特殊处理
+                        //车损险保额,第三方若有实际价值判断逻辑,可按照第三方规则送保额,中煤会校验保额是否在新车购置价浮动范围期间内;
+                        //若第三方无实际价值判断逻辑,可保额直接送0,中煤会按照中煤实际价值逻辑自动覆盖;
+                        coverageDTO.amount = 0;
+                    }
+                    // 司机
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getDriver(), code) >= 0) {
+                        coverageDTO.quantity = 1;
+                        coverageDTO.unitAmount = Integer.parseInt(kindInfoVo.getAmount());
+                    }
+                    // 乘客
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getPassenger(), code) >= 0) {
+                        coverageDTO.quantity = quantity;
+                        coverageDTO.amount = Integer.parseInt(kindInfoVo.getUnitAmount()) * quantity;
+                    }
+                    // 绝对免赔
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getAbsoluteDeductible(), code) >= 0) {
+                        coverageDTO.deductible = "-" + kindInfoVo.getDeductibleRate();
+                    }
+                    // 增值服务
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getSpecialContractClause(), code) >= 0) {
+                        coverageDTO.quantity = Integer.parseInt(kindInfoVo.getServiceTimes());
+                    }
+                    list.add(coverageDTO);
+
+                }
+                return list;
+            }
+
+            /**
+             * 交强险
+             *
+             * @return
+             */
+            public CoverageDTO fetchTraffic() {
+                this.amount = 200000;
+                this.kindName = ContractEnum.C_BZ.getKindName();
+                this.kindCode = ContractEnum.C_BZ.getKindCode();
+                return this;
+            }
+
+        }
+
+
+    }
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class CustomerDTO implements Serializable {
+        private static final long serialVersionUID = -2139900793333349385L;
+        // 名称
+        @JsonProperty("name")
+        private String name;
+        /**
+         * 证件类型
+         * 01 身份证
+         * 3 组织机构代码
+         * 4 统一社会信用代码
+         */
+        @JsonProperty("identifyType")
+        private String identifyType;
+        // 证件号码
+        @JsonProperty("identifyNumber")
+        private String identifyNumber;
+        // 地址
+        @JsonProperty("addr")
+        private String addr;
+        // 移动电话
+        @JsonProperty("mobile")
+        private String mobile;
+        // 电子保单接收邮箱
+        @JsonProperty("emailPolicy")
+        private String emailPolicy;
+        // 客户类型 1-个人,2-法人
+        @JsonProperty("type")
+        private String type;
+        // 客户角色
+        @JsonProperty("role")
+        private String role;
+        /**
+         * 发票种类
+         * 026	电子发票
+         * 007	普通发票
+         * 004	专用发票
+         */
+        @JsonProperty("invocieType")
+        private String invocieType;
+        // 投保人是否从事以下行业:银行、证券、期货、保险、律师、会计师、房地产、拍卖
+        @JsonProperty("jobRisk")
+        private String jobRisk;
+        // 证件有效起期
+        @JsonProperty("identifyValidDate")
+        private String identifyValidDate;
+        // identifyValidEndDate
+        @JsonProperty("identifyValidEndDate")
+        private String identifyValidEndDate;
+
+        public CustomerDTO(CustomerInfoVo customerInfoVo, String role) {
+            this.name = customerInfoVo.getName();
+            this.identifyType = "01";
+            this.identifyNumber = customerInfoVo.getIdentifyNumber();
+            this.addr = customerInfoVo.getAddr();
+            this.mobile = customerInfoVo.getMobile();
+            this.emailPolicy = customerInfoVo.getEmail();
+            this.type = "1";
+            this.role = role;
+            this.invocieType = "026";
+            this.jobRisk = "1";
+            this.identifyValidDate = customerInfoVo.getIdentifyValidDate() + " " + TimeConstants.START_TIME;
+            this.identifyValidEndDate = customerInfoVo.getIdentifyValidEndDate() + " " + TimeConstants.END_TIME;
+        }
+
+        public List<CustomerDTO> getCustomers(CustomerInfoVo ownerInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo) {
+            return Arrays.asList(new CustomerDTO(ownerInfo, "3"), new CustomerDTO(policyHolderInfo, "1"),
+                    new CustomerDTO(insuredPersonInfo, "2"));
+        }
+
+    }
+}

+ 65 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/RideAccidentQueryRequest.java

@@ -0,0 +1,65 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import com.jzg.quote.zhongmei.api.entity.ZmApiConfigureParameters;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:04
+ **/
+@NoArgsConstructor
+@Data
+public class RideAccidentQueryRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1421889147855816596L;
+    //车辆大类
+    @JsonProperty("motorMainType")
+    private String motorMainType;
+    //车辆用途
+    @JsonProperty("carUseType")
+    private String carUseType;
+    //使用性质
+    @JsonProperty("motorUsageTypeCode")
+    private String motorUsageTypeCode;
+    //保单归属地省
+    @JsonProperty("province")
+    private String province;
+    //核定载客
+    @JsonProperty("seats")
+    private int seats;
+    //被保人证件类型
+    @JsonProperty("insuredIdentifyType")
+    private String insuredIdentifyType;
+    //被保人证件号
+    @JsonProperty("identifyNumber")
+    private String identifyNumber;
+    //是否有社保
+    @JsonProperty("isSocial")
+    private String isSocial;
+
+    public RideAccidentQueryRequest(ZmApiConfigureParameters zmApiConfigureParameters) {
+        this.motorMainType = "100";//客车
+        this.carUseType = "01";//家庭自用
+        this.motorUsageTypeCode = "02";//非营业
+        this.province = zmApiConfigureParameters.getProvince();
+    }
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.Ride_Accident_Query);
+    }
+
+    @Override
+    public BaseRequestHead getHead() {
+        super.getHead().setTransCode(TransCode.Ride_Accident_Query);
+        return super.getHead();
+    }
+}

+ 75 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/SubmitRequest.java

@@ -0,0 +1,75 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: 核保请求参数
+ * @author: shenwd
+ * @date:2025/2/24 16:38
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class SubmitRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = 8581860294000751053L;
+
+    @JsonProperty("businessNo")
+    private String businessNo;
+    @JsonProperty("VIN")
+    private String vin;
+    @JsonProperty("checkCode")
+    private String checkCode;
+    @JsonProperty("deliveryInfo")
+    private DeliveryInfoDTO deliveryInfo;
+    @JsonProperty("pageUrl")
+    private String pageUrl;
+    @JsonProperty("callbackUrl")
+    private String callbackUrl;
+    @JsonProperty("passMsgUrl")
+    private String passMsgUrl;
+    @JsonProperty
+    private String busSrePcMAC = "12-E1-AD-45-A2-65";
+    @JsonProperty
+    private String busSrePcIP = "47.92.254.66";
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.SUBMIT);
+    }
+
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class DeliveryInfoDTO {
+        // 姓名
+        @JsonProperty("name")
+        private String name;
+        // 电话
+        @JsonProperty("mobile")
+        private String mobile;
+        // 省
+        @JsonProperty("province")
+        private String province;
+        //  市
+        @JsonProperty("city")
+        private String city;
+        // 区/县
+        @JsonProperty("district")
+        private String district;
+        // 详细地址
+        @JsonProperty("detail")
+        private String detail;
+    }
+}

+ 39 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/SubmitStatusQueryRequest.java

@@ -0,0 +1,39 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:59
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class SubmitStatusQueryRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = 8739811918423219977L;
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.SUBMIT_STATUS_QUERY);
+    }
+
+    @Override
+    public BaseRequestHead getHead() {
+        super.getHead().setTransCode(TransCode.SUBMIT_STATUS_QUERY);
+        return super.getHead();
+    }
+
+}

+ 40 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/UnderwritingWithdrawRequest.java

@@ -0,0 +1,40 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:42
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+public class UnderwritingWithdrawRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = 267797466400421633L;
+    /**
+     * 主投保单号
+     */
+    @JsonProperty("contractMainNo")
+    private String contractMainNo;
+
+
+    public UnderwritingWithdrawRequest(String contractMainNo) {
+        this.contractMainNo = contractMainNo;
+    }
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.UNDERWRITING_CANCLE);
+    }
+}

+ 119 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/UploadImageRequest.java

@@ -0,0 +1,119 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:45
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class UploadImageRequest extends BaseRequest {
+
+
+    private static final long serialVersionUID = 1469709481861289454L;
+
+    @JsonProperty("contractNo")
+    private String contractNo;
+
+    @JsonProperty("nodeBeanlist")
+    private List<NodeBeanlistDTO> nodeBeanlist;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.UPLOAD_IMAGE);
+    }
+
+    /*public UploadImageRequest(List<InsTaskImagesBase64> insTaskImages, String contractNo) {
+        this.contractNo = contractNo;
+        List<NodeBeanlistDTO> nodeBeanlist = new ArrayList<>();
+        String[] strings = {"UW_0301", "UW_0302", "UW_0305"};
+        for (String string : strings) {
+            ImageTypeEnum imageTypeEnum = Enum.valueOf(ImageTypeEnum.class, string);
+            List<InsTaskImagesBase64> collect = insTaskImages.stream().filter(insTaskImage -> ArrayUtil.indexOf(imageTypeEnum.getImagesType(), insTaskImage.getImageType()) >= 0).collect(Collectors.toList());
+            if (!collect.isEmpty()) {
+                NodeBeanlistDTO nodeBeanlistDTO = new NodeBeanlistDTO(collect, string);
+                nodeBeanlist.add(nodeBeanlistDTO);
+            }
+        }
+        this.nodeBeanlist = nodeBeanlist;
+
+    }*/
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class NodeBeanlistDTO {
+
+        @JsonProperty("id")
+        private String id;
+
+        @JsonProperty("imageBeanList")
+        private List<ImageBeanListDTO> imageBeanList;
+
+        /*public NodeBeanlistDTO(List<InsTaskImagesBase64> insTaskImages, String id) {
+            this.id = id;
+            List<ImageBeanListDTO> imageBeanListDTOS = new ArrayList<>();
+            for (int i = 0; i < insTaskImages.size(); i++) {
+                ImageBeanListDTO imageBeanListDTO = new ImageBeanListDTO();
+                InsTaskImagesBase64 insTaskImagesBase64 = insTaskImages.get(i);
+
+                String fileName = insTaskImagesBase64.getFileName();
+                String suffix = fileName.substring(fileName.lastIndexOf("."));
+                switch (insTaskImagesBase64.getImageType()) {
+                    case "C01":
+                        fileName = "车辆影像" + i + suffix;
+                        break;
+                    case "C02":
+                        fileName = "车主身份证" + i + suffix;
+                        break;
+                    case "C03":
+                        fileName = "投保人身份证" + i + suffix;
+                        break;
+                    case "C04":
+                        fileName = "被保人身份证" + i + suffix;
+                        break;
+                    case "C05":
+                        fileName = "验车照" + i + suffix;
+                        break;
+                }
+
+                imageBeanListDTO.setFileName(fileName);
+                imageBeanListDTO.setImage(insTaskImagesBase64.getBase64String());
+                imageBeanListDTOS.add(imageBeanListDTO);
+            }
+
+            this.imageBeanList = imageBeanListDTOS;
+        }*/
+
+        @NoArgsConstructor
+        @Data
+        public static class ImageBeanListDTO {
+
+            // 文件名称
+            @JsonProperty("fileName")
+            private String fileName;
+
+            // 图片base64格式编码
+            @JsonProperty("image")
+            private String image;
+
+            @JsonProperty("remark")
+            private String remark;
+        }
+    }
+}

+ 39 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/request/ValidSMScodeRequest.java

@@ -0,0 +1,39 @@
+package com.jzg.quote.zhongmei.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.constant.TransCode;
+import com.jzg.quote.zhongmei.api.entity.BaseRequestHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:20
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ValidSMScodeRequest extends BaseRequest {
+
+    @Serial
+    private static final long serialVersionUID = -4492594788089727608L;
+    @JsonProperty("businessType")
+    private String businessType;
+    @JsonProperty("contractNo")
+    private String contractNo;
+    @JsonProperty("SMScode")
+    private String sMScode;
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+    @Override
+    public void setHead(BaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(TransCode.VALID_SMS_CODE);
+    }
+
+}

+ 21 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/BaseResponse.java

@@ -0,0 +1,21 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 11:34
+ **/
+@Data
+public abstract class BaseResponse implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4254778599430134162L;
+
+    @JsonProperty(value = "head")
+    private BaseResponseHead head;
+}

+ 41 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/BaseResponseHead.java

@@ -0,0 +1,41 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quote.zhongmei.api.entity.BaseHead;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 11:35
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class BaseResponseHead extends BaseHead {
+
+    @Serial
+    private static final long serialVersionUID = 3325730655750610525L;
+    /**
+     * 错误编码
+     */
+    private String errorCode;
+
+    /**
+     * 日志编码
+     */
+    @JsonProperty(value = "logid")
+    private String logId;
+
+    /**
+     * 响应代码(-1:失败/0:成功/1:警告)
+     */
+    private String returnCode;
+
+    /**
+     * 响应信息(成功/失败原因)
+     */
+    private String returnMessage;
+}

+ 52 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/CheckSMScodeResponse.java

@@ -0,0 +1,52 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:11
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class CheckSMScodeResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -2701636073074285254L;
+    @JsonProperty("isNeedSMSVCode")
+    private String isNeedSMSVCode;
+
+    @JsonProperty("itemsList")
+    private List<ItemsListDTO> itemsList;
+
+    @JsonProperty("remark")
+    private String remark;
+
+    @NoArgsConstructor
+    @Data
+    public static class ItemsListDTO {
+        @JsonProperty("contractNo")
+        private String contractNo;
+        @JsonProperty("businessType")
+        private String businessType;
+        @JsonProperty("mobilePhoneNo")
+        private String mobilePhoneNo;
+        @JsonProperty("insuredName")
+        private String insuredName;
+        @JsonProperty("beinsuredName")
+        private String beinsuredName;
+        @JsonProperty("licenseNo")
+        private String licenseNo;
+        @JsonProperty("frameNo")
+        private String frameNo;
+        @JsonProperty("smsCode")
+        private String smsCode;
+    }
+}

+ 29 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/InsurancePolicyPrintResponse.java

@@ -0,0 +1,29 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:06
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class InsurancePolicyPrintResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = 4370219849517321256L;
+    @JsonProperty("downloadUrl")
+    private List<String> downloadUrl;
+
+    @JsonProperty("statusCode")
+    private String statusCode;
+
+}

+ 244 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/ModelsQueryResponse.java

@@ -0,0 +1,244 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.filter.CarModelsFilter;
+import com.jzg.quote.zhongmei.api.constant.enums.JingyouEnergyTypes;
+import com.jzg.quote.zhongmei.api.entity.ZmCarEntity;
+import com.jzg.quote.zhongmei.api.entity.dto.ZmCarDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 14:54
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ModelsQueryResponse extends BaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -164868676951702010L;
+
+    @JsonProperty("pageNo")
+    private Integer pageNo;
+
+    @JsonProperty("simpleStadarCar")
+    private List<SimpleStadarCarDTO> simpleStadarCar;
+
+    @JsonProperty("totalRow")
+    private Integer totalRow;
+
+    @NoArgsConstructor
+    @Data
+    public static class SimpleStadarCarDTO implements Serializable, CarModelsFilter {
+
+        private static final long serialVersionUID = 6983519785684153330L;
+
+        /**
+         * 核定载质量
+         */
+        @JsonProperty("approvedLoad")
+        private double approvedLoad;
+        /**
+         * 核定载客
+         */
+        @JsonProperty("approvedPassengersCapacity")
+        private int approvedPassengersCapacity;
+
+        /**
+         * 品牌名称
+         */
+        @JsonProperty("brand")
+        private String brand;
+
+        /**
+         * 品牌编码
+         */
+        @JsonProperty("brandCode")
+        private String brandCode;
+
+        /**
+         * 排量(ml)
+         */
+        @JsonProperty("displacement")
+        private double displacement;
+
+        /**
+         * 能源种类
+         */
+        @JsonProperty("energyTypes")
+        private String energyTypes;
+
+        /**
+         * 总质量
+         */
+        @JsonProperty("grossMass")
+        private double grossMass;
+
+        /**
+         * 出厂日期
+         */
+        @JsonProperty("lfDate")
+        private String lfDate;
+
+        /**
+         * 本地车型代
+         */
+        @JsonProperty("localModelCode")
+        private String localModelCode;
+
+        /**
+         * 原始新车购置价
+         */
+        @JsonProperty("originalPurchasePrice")
+        private Integer originalPurchasePrice;
+
+        /**
+         * 功率(kw)
+         */
+        @JsonProperty("power")
+        private double power;
+
+        /**
+         * 价格浮动区间止
+         */
+        @JsonProperty("priceEnd")
+        private double priceEnd;
+
+        /**
+         * 价格浮动区间起
+         */
+        @JsonProperty("priceStart")
+        private double priceStart;
+
+        /**
+         * 新车购置价
+         */
+        @JsonProperty("purchasePrice")
+        private String purchasePrice;
+
+        /**
+         * 车系名称
+         */
+        @JsonProperty("series")
+        private String series;
+
+        /**
+         * 车系编码
+         */
+        @JsonProperty("seriesCode")
+        private String seriesCode;
+
+        /**
+         * 准牵引总质量
+         */
+        @JsonProperty("tractionMass")
+        private double tractionMass;
+
+        /**
+         * 变速箱
+         */
+        @JsonProperty("transmissionType")
+        private String transmissionType;
+
+        /**
+         * 整备质量
+         */
+        @JsonProperty("unladenMass")
+        private double unladenMass;
+
+        /**
+         * 车辆描述
+         */
+        @JsonProperty("vehicleDescription")
+        private String vehicleDescription;
+
+        /**
+         * 品牌名称
+         */
+        @JsonProperty("modelName")
+        private String modelName;
+
+        @JsonProperty("fuelTypeCode")
+        private String fuelTypeCode;
+
+
+        /*未引入CoreModelsVo,先注释
+        public CoreModelsVo toCoreModelsVo() {
+            CoreModelsVo coreModelsVo = new CoreModelsVo();
+            coreModelsVo.setModelCode(this.localModelCode);
+            coreModelsVo.setModelName(this.modelName);
+            coreModelsVo.setCarYear(this.lfDate);
+            coreModelsVo.setPower(String.valueOf(this.power));
+            coreModelsVo.setEnginedesc(String.valueOf(this.displacement));
+            coreModelsVo.setPurchasePrice(this.purchasePrice);
+            coreModelsVo.setSeatCount(String.valueOf(this.approvedPassengersCapacity));
+            return coreModelsVo;
+        }*/
+
+        public ZmCarDTO toCarModelDTO() {
+            ZmCarDTO carModelDTO = new ZmCarDTO();
+            carModelDTO.setModelCode(this.localModelCode);
+            carModelDTO.setModelName(this.modelName);
+            carModelDTO.setBrandCN(this.brand);
+            carModelDTO.setSeries(this.series);
+            carModelDTO.setRatedPassengerCapacity(String.valueOf(this.approvedPassengersCapacity));
+            carModelDTO.setDisplacement(String.valueOf(this.displacement));
+            carModelDTO.setMarketYear(this.lfDate);
+            carModelDTO.setReplacementValue(this.purchasePrice);
+            carModelDTO.setRemark(this.vehicleDescription);
+            carModelDTO.setFuelType(this.energyTypes);
+            String energyTypeByCode = JingyouEnergyTypes.getEnergyTypeByCode(this.getFuelTypeCode());
+            carModelDTO.setFuelTypeCode(energyTypeByCode);
+            carModelDTO.setEnergyTypes(energyTypeByCode);
+            carModelDTO.setPowerScale(String.valueOf(this.power));
+            return carModelDTO;
+        }
+
+
+        public SimpleStadarCarDTO(ZmCarEntity zmCarEntity) {
+            this.approvedLoad = Double.parseDouble(zmCarEntity.getApprovedLoad());
+            this.approvedPassengersCapacity = Integer.parseInt(zmCarEntity.getApprovedPassengersCapacity());
+            this.brand = zmCarEntity.getBrand();
+            this.modelName = zmCarEntity.getModelName();
+            this.brandCode = zmCarEntity.getBrandCode();
+            this.displacement =
+                    BigDecimal.valueOf(Double.parseDouble(zmCarEntity.getDisplacement())).multiply(BigDecimal.valueOf(0.001)).doubleValue();
+            this.energyTypes = zmCarEntity.getEnergyTypes();
+            this.grossMass = Double.parseDouble(zmCarEntity.getGrossMass());
+            this.lfDate = zmCarEntity.getCarYear();
+            this.localModelCode = zmCarEntity.getLocalModelCode();
+            this.originalPurchasePrice = Integer.valueOf(zmCarEntity.getOriginalPurchasePrice());
+            this.power = Double.parseDouble(zmCarEntity.getPower());
+            this.priceEnd = 0;
+            this.priceStart = 0;
+            this.purchasePrice = zmCarEntity.getPurchasePrice();
+            this.series = zmCarEntity.getSeries();
+            this.seriesCode = zmCarEntity.getSeriesCode();
+            this.tractionMass = Double.parseDouble(zmCarEntity.getTractionMass());
+            this.transmissionType = zmCarEntity.getTransmissionType();
+            this.unladenMass = Double.parseDouble(zmCarEntity.getUnladenMass());
+            this.vehicleDescription = zmCarEntity.getRemark();
+            this.fuelTypeCode = zmCarEntity.getFuelTypeCode();
+        }
+
+        @Override
+        public String getCarYear() {
+            return lfDate;
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return purchasePrice;
+        }
+
+    }
+}

+ 63 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/OrderStatusResponse.java

@@ -0,0 +1,63 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class OrderStatusResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = 8831194766660682699L;
+    @JsonProperty("accidentPolicyNos")
+    private List<AccidentPolicyNo> accidentPolicyNos;
+
+    @JsonProperty("businessType")
+    private String businessType;
+
+    @JsonProperty("confirmDate")
+    private String confirmDate;
+
+    @JsonProperty("contractNo")
+    private String contractNo;
+
+    @JsonProperty("status")
+    private String status;
+
+    @JsonProperty("subContractNoJ")
+    private String subContractNoJ;
+
+    @JsonProperty("subContractNoS")
+    private String subContractNoS;
+
+    @JsonProperty("payDate")
+    private String payDate;
+
+
+    @NoArgsConstructor
+    @Data
+    public static class AccidentPolicyNo {
+        /**
+         * 方案代码
+         */
+        @JsonProperty("rideRiskCode")
+        private String rideRiskCode;
+        /**
+         * 意外险单号
+         */
+        @JsonProperty("ridePolicyNo")
+        private String ridePolicyNo;
+
+    }
+}

+ 191 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/QuotedPriceResponse.java

@@ -0,0 +1,191 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenweidong
+ * @date:2025/2/24 15:25
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class QuotedPriceResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -187936162347635630L;
+
+    @JsonProperty("bizPremium")
+    private BizPremiumDTO bizPremium;
+    @JsonProperty("businessNo")
+    private String businessNo;
+    @JsonProperty("forcePrimium")
+    private ForcePrimiumDTO forcePrimium;
+    @JsonProperty("forcePlatformMsg")
+    private PlatformMessage forcePlatformMsg;
+    @JsonProperty("bizPlatformMsg")
+    private PlatformMessage bizPlatformMsg;
+    @JsonProperty("accidentPremium")
+    private List<AccidentPrimium> accidentPremium;
+    @JsonProperty("insuranceScheme")
+    private InsuranceSchemeDTO insuranceScheme;
+    @JsonProperty("platMain")
+    private PlatMainDTO platMain;
+    @JsonProperty("taxinfo")
+    private TaxinfoDTO taxinfo;
+    @JsonProperty("vin")
+    private String vin;
+
+
+    @NoArgsConstructor
+    @Data
+    public static class BizPremiumDTO {
+        @JsonProperty("accidentBeanlist")
+        private List<?> accidentBeanlist;
+        @JsonProperty("adjust")
+        private List<AdjustDTO> adjust;
+        @JsonProperty("coverageList")
+        private List<CoverageListDTO> coverageList;
+        @JsonProperty("isRenewal")
+        private Boolean isRenewal;
+        @JsonProperty("sumPremium")
+        private double sumPremium;
+
+        @NoArgsConstructor
+        @Data
+        public static class AdjustDTO {
+            @JsonProperty("adjustCode")
+            private String adjustCode;
+            @JsonProperty("adjustName")
+            private String adjustName;
+            @JsonProperty("adjustRate")
+            private Integer adjustRate;
+            @JsonProperty("maxRate")
+            private Integer maxRate;
+            @JsonProperty("minRate")
+            private Double minRate;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageListDTO {
+            @JsonProperty("amount")
+            private Integer amount;
+            @JsonProperty("kindCode")
+            private String kindCode;
+            @JsonProperty("kindName")
+            private String kindName;
+            @JsonProperty("premium")
+            private Double premium;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class ForcePrimiumDTO {
+        @JsonProperty("accidentBeanlist")
+        private List<?> accidentBeanlist;
+        @JsonProperty("adjust")
+        private List<AdjustDTO> adjust;
+        @JsonProperty("amount")
+        private double amount;
+        @JsonProperty("isRenewal")
+        private Boolean isRenewal;
+        @JsonProperty("kindCode")
+        private String kindCode;
+        @JsonProperty("kindName")
+        private String kindName;
+        @JsonProperty("premium")
+        private double premium;
+
+        @NoArgsConstructor
+        @Data
+        public static class AdjustDTO {
+            @JsonProperty("adjustRate")
+            private double adjustRate;
+            @JsonProperty("maxRate")
+            private double maxRate;
+            @JsonProperty("minRate")
+            private double minRate;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class InsuranceSchemeDTO {
+        @JsonProperty("schemeFlag")
+        private String schemeFlag;
+        @JsonProperty("schemeMessage")
+        private String schemeMessage;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class PlatMainDTO {
+        @JsonProperty("zmScore")
+        private String zmScore;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class TaxinfoDTO {
+        @JsonProperty("delayPayTax")
+        private double delayPayTax;
+        @JsonProperty("payTax")
+        private double payTax;
+        @JsonProperty("prePayTax")
+        private double prePayTax;
+        @JsonProperty("sumPayTax")
+        private double sumPayTax;
+    }
+    @NoArgsConstructor
+    @Data
+    public static class PlatformMessage {
+        @JsonProperty("question")
+        private String question;
+        @JsonProperty("answer")
+        private String answer;
+        @JsonProperty("demandNo")
+        private String demandNo;
+    }
+    @NoArgsConstructor
+    @Data
+    public static class AccidentPrimium {
+        /**
+         * 方案代码
+         */
+        @JsonProperty("rideRiskCode")
+        private String rideRiskCode;
+        /**
+         *方案名称
+         */
+        @JsonProperty("rideRiskName")
+        private String rideRiskName;
+        /**
+         *  总费用
+         */
+        @JsonProperty("sumPremium")
+        private double sumPremium;
+        /**
+         *  单位保费
+         */
+        @JsonProperty("unitPremium")
+        private double unitPremium;
+        /**
+         * 总保额
+         */
+        @JsonProperty("insuranceAmount")
+        private double insuranceAmount;
+        /**
+         * 份数
+         */
+        @JsonProperty("quantity")
+        private double quantity;
+    }
+}

+ 91 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/RideAccidentQueryResponse.java

@@ -0,0 +1,91 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 非车可投保产品
+ * @author: shenwd
+ * @date:2025/2/24 17:02
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+//@ApiModel("非车可投保产品")
+public class RideAccidentQueryResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = 8320593711722960010L;
+    @JsonProperty("rideAccident")
+//    @ApiModelProperty("非车可投保产品信息")
+    private List<RideAccidentDTO> rideAccident;
+
+
+    @NoArgsConstructor
+    @Data
+    public static class RideAccidentDTO implements Serializable {
+
+        private static final long serialVersionUID = -7482346783799487403L;
+
+        @JsonProperty("accAmountView")
+//        @ApiModelProperty("产品保险责任信息展示")
+        private List<AccAmountViewDTO> accAmountView;
+
+        @JsonProperty("divideType")
+//        @ApiModelProperty("险种分类 YW--意外险/ZH--组合险、JC--家财险、YL--医疗、GY--个意、CR--传染")
+        private String divideType;
+
+        @JsonProperty("engage")
+//        @ApiModelProperty("特别约定")
+        private List<String> engage;
+
+        @JsonProperty("insuranceHabit")
+//        @ApiModelProperty("投保习惯")
+        private String insuranceHabit;
+
+        @JsonProperty("maxQuantity")
+//        @ApiModelProperty("最大投保份数")
+        private String maxQuantity;
+
+        @JsonProperty("rideRiskCode")
+//        @ApiModelProperty("方案代码")
+        private String rideRiskCode;
+
+        @JsonProperty("rideRiskName")
+//        @ApiModelProperty("方案名称")
+        private String rideRiskName;
+
+        @JsonProperty("unitAmount")
+//        @ApiModelProperty("单位保额")
+        private String unitAmount;
+
+        @JsonProperty("unitPremium")
+//        @ApiModelProperty("单位保费")
+        private String unitPremium;
+
+        @NoArgsConstructor
+        @Data
+        public static class AccAmountViewDTO implements Serializable {
+
+            private static final long serialVersionUID = -74104212491097854L;
+
+            @JsonProperty("amountName")
+//            @ApiModelProperty("保险责任对应保额")
+            private String amountName;
+
+            @JsonProperty("insurName")
+//            @ApiModelProperty("保险责任名称")
+            private String insurName;
+
+            @JsonProperty("unitFlag")
+//            @ApiModelProperty("单位标志")
+            private String unitFlag;
+        }
+    }
+}

+ 73 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/SubmitResponse.java

@@ -0,0 +1,73 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+/**
+ * @description: 核保响应参数
+ * @author: shenwd
+ * @date:2025/2/24 16:36
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class SubmitResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -7524050736831820741L;
+
+    // 意外险投保单号
+    @JsonProperty("accidentNos")
+    private List<AccidentNo> accidentNos;
+    // 商业险投保单号
+    @JsonProperty("bizProposalNo")
+    private String bizProposalNo;
+    // 交强险投保单号
+    @JsonProperty("forceProposalNo")
+    private String forceProposalNo;
+    // 支付时间
+    @JsonProperty("payEndDate")
+    private String payEndDate;
+    // 支付链接
+    @JsonProperty("payUrl")
+    private String payUrl;
+    // 主单号
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+    // 提交审核状态
+    @JsonProperty("submitStatus")
+    private String submitStatus;
+
+    // 审核提示信息
+    @JsonProperty("submitNotion")
+    private String submitNotion;
+
+    @NoArgsConstructor
+    @Data
+    public static class AccidentNo {
+        /**
+         * 方案代码
+         */
+        @JsonProperty("rideRiskCode")
+        private String rideRiskCode;
+        /**
+         * 意外险单号
+         */
+        @JsonProperty("rideProposalNo")
+        private String rideProposalNo;
+
+        /**
+         * 意外险单号 错误保单号
+         * add  by  hxl  2024-10-18
+         */
+        @JsonProperty("ridePolicyNo")
+        private String ridePolicyNo;
+
+    }
+}

+ 46 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/SubmitStatusQueryResponse.java

@@ -0,0 +1,46 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:56
+ **/
+@NoArgsConstructor
+@Data
+public class SubmitStatusQueryResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -7718309125154995334L;
+    /**
+     * 核保状态
+     * 初始状态/核保通过/核保不通过/自动核保/拒保/复核通过/承保确认/复核不通过/待复核/待核保
+     */
+    @JsonProperty("underWriteInd")
+    private String underWriteInd;
+
+    /**·
+     * 主投保单号
+     */
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+    /**
+     * 支付地址
+     * 当核保状态为通过时返回该字段
+     */
+    @JsonProperty("payUrl")
+    private String payUrl;
+
+    /**
+     * 下发原因
+     * 当核保不通过时,返回下发修改原因
+     */
+    @JsonProperty("issuedReason")
+    private String issuedReason;
+}

+ 20 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/UnderwritingWithdrawResponse.java

@@ -0,0 +1,20 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:44
+ **/
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@Data
+public class UnderwritingWithdrawResponse extends BaseResponse {
+    @Serial
+    private static final long serialVersionUID = 2421439013548848339L;
+}

+ 14 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/UploadImageResponse.java

@@ -0,0 +1,14 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:49
+ **/
+public class UploadImageResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -1507486086730167637L;
+}

+ 33 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/response/ValidSMScodeResponse.java

@@ -0,0 +1,33 @@
+package com.jzg.quote.zhongmei.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 17:19
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ValidSMScodeResponse extends BaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -6745572962881521610L;
+    @JsonProperty("contractNo")
+    private String contractNo;
+    @JsonProperty("successCode")
+    private String successCode;
+    @JsonProperty("successMessage")
+    private String successMessage;
+    @JsonProperty("remark1")
+    private String remark1;
+    @JsonProperty("businessType")
+    private String businessType;
+
+}

+ 52 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/BaseQuoteInfoVo.java

@@ -0,0 +1,52 @@
+package com.jzg.quote.zhongmei.api.entity.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:05
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class BaseQuoteInfoVo extends YaQuoteInfoVo {
+
+    @Serial
+    private static final long serialVersionUID = 1594621769620114321L;
+
+//    @ApiModelProperty("订单号")
+    private String orderNo;
+
+//    @ApiModelProperty("车船税信息")
+    //private VehicleAndVesselTax vehicleAndVesselTax;暂时注释
+
+//    @ApiModelProperty("代客录单用-实际业务归属人")
+    private String userId;
+
+//    @ApiModelProperty("是否外部订单 1 外部订单录入 ")
+    private Integer isExternal;
+
+//    @ApiModelProperty("产品id")
+    private String productId;
+
+//    @ApiModelProperty("订单来源")
+    private String orderSource;
+
+
+//    @ApiModelProperty("保险公司id")
+    private String orderCompanyId;
+
+    public BaseQuoteInfoVo() {
+    }
+
+    /*未引入InsOrders,先注释
+    public BaseQuoteInfoVo(InsOrders insOrders) {
+        super(insOrders);
+        this.userId = insOrders.getUserid();
+        this.orderNo = insOrders.getOrderno();
+        //this.vehicleAndVesselTax = insOrders.getVehicleAndVesselTax().toJavaObject(VehicleAndVesselTax.class);
+    }*/
+}

+ 163 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/CustomerInfoVo.java

@@ -0,0 +1,163 @@
+package com.jzg.quote.zhongmei.api.entity.vo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.util.ObjectUtils;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 15:49
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomerInfoVo {
+
+    /**
+     * 姓名
+     */
+    @NotNull(message = "车主、投保人、被保人姓名不能为空")
+    private String name;
+
+    /**
+     * 身份证号
+     */
+    private String identifyNumber;
+
+    /**
+     * 组织机构代码
+     */
+    private String organizationCode;
+
+    /**
+     * 身份证类型
+     */
+    private String identifyType;
+
+    /**
+     * 地址
+     */
+    @NotNull(message = "车主、投保人、被保人地址不能为空")
+    private String addr;
+
+    /**
+     * 年龄
+     */
+    private String age;
+
+    /**
+     * 性别
+     */
+    private String gender;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 手机号
+     */
+    @NotNull(message = "车主、投保人、被保人手机号不能为空")
+    private String mobile;
+
+    /**
+     * 固定电话
+     */
+    private String tel;
+
+    /**
+     * 有效时间开始
+     */
+    //@CheckDateTime(format = "yyyy-MM-dd", message = "请检查身份证的开始有效时间")
+    @NotBlank(message = "请检车有效时间开始是否填写")
+    private String identifyValidDate;
+
+    /**
+     * 有效时间结束
+     */
+    //@CheckDateTime(format = "yyyy-MM-dd", message = "请检查身份证的结束有效时间")
+    @NotBlank(message = "请检车有效时间结束是否填写")
+    private String identifyValidEndDate;
+
+    /**
+     * 同车主
+     */
+    private boolean owner;
+
+    /**
+     * 同投保人
+     */
+    private boolean insuranceHolder;
+
+    /**
+     * 省
+     */
+    private String province;
+
+    /**
+     * 市
+     */
+    private String city;
+
+    /**
+     * 县
+     */
+    private String county;
+
+    /**
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String property;
+
+    /**
+     * 注册资本金
+     */
+    private String registeredCapital;
+
+    /**
+     * 经营范围
+     */
+    private String scope;
+
+    /**
+     * 联系人
+     */
+    private String legalPerson;
+
+
+    public boolean contrastInfo(CustomerInfoVo customerInfoVo) {
+        if (!ObjectUtils.nullSafeEquals(this.name, customerInfoVo.getName())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.identifyNumber, customerInfoVo.getIdentifyNumber())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.identifyType, customerInfoVo.getIdentifyType())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.addr, customerInfoVo.getAddr())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.age, customerInfoVo.getAge())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.gender, customerInfoVo.getGender())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.mobile, customerInfoVo.getMobile())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.identifyValidDate, customerInfoVo.getIdentifyValidDate())) {
+            return false;
+        }
+        if (!ObjectUtils.nullSafeEquals(this.identifyValidEndDate, customerInfoVo.getIdentifyValidEndDate())) {
+            return false;
+        }
+        return true;
+    }
+}

+ 48 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/RiskInfoVo.java

@@ -0,0 +1,48 @@
+package com.jzg.quote.zhongmei.api.entity.vo;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 16:03
+ **/
+@Data
+public class RiskInfoVo {
+
+    private double amount;
+    private double premium;
+    private String riskCode;
+
+    @NotBlank(message = "起保日期不能为空")
+    //@CheckDateTime(message = "起保日期的正确格式为yyyy-MM-dd HH:mm:ss")
+    private String startDate;
+
+    @NotBlank(message = "终保日期不能为空")
+    //@CheckDateTime(message = "起保日期的正确格式为yyyy-MM-dd HH:mm:ss")
+    private String endDate;
+
+    //注释添加 是否即使起保 1:是即使  空为否   lig 2023-10-07
+    private String instantFlag;
+
+    //@ApiModelProperty("到期天数")
+    private String expirationDay;
+
+    public void expirationTime() {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime dateTime = LocalDateTime.parse(startDate, formatter);
+        LocalDateTime now = LocalDateTime.now();
+        int i = now.compareTo(dateTime);
+        if (i < 0) {
+            long days = Duration.between(now, dateTime).toDays();
+            this.expirationDay = String.valueOf(days);
+        }else {
+            this.expirationDay = null;
+        }
+    }
+}

+ 67 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/entity/vo/YaQuoteInfoVo.java

@@ -0,0 +1,67 @@
+package com.jzg.quote.zhongmei.api.entity.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.jzg.quotation.commons.entity.vo.quote.CarInfoVo;
+import com.jzg.quotation.commons.entity.vo.quote.KindInfoVo;
+import jakarta.validation.Valid;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @description: todo
+ * @author: shenwd
+ * @date:2025/2/24 15:38
+ **/
+@Data
+public class YaQuoteInfoVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6254822522470719983L;
+    @Valid
+    private CarInfoVo carInfo;
+
+    //车主  lig 2023-02-15
+    @Valid
+    private CustomerInfoVo ownerInfo;
+
+    //投保人信息  lig 2023-04-13
+    @Valid
+    private CustomerInfoVo policyHolderInfo;
+
+    //被保人信息  lig 2023-04-13
+    @Valid
+    private CustomerInfoVo insuredPersonInfo;
+
+    @Valid
+    private List<RiskInfoVo> riskList;
+
+    @Valid
+    private List<KindInfoVo> kindList;
+
+    private String quoteno;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startDate;
+
+    private String userid;
+
+    public YaQuoteInfoVo() {
+    }
+
+    /*未引入InsOrders,先注释
+    public YaQuoteInfoVo(InsOrders insOrders) {
+        this.ownerInfo = JSON.toJavaObject(insOrders.getOwnerinfo(), CustomerInfoVo.class);
+        this.policyHolderInfo = JSON.toJavaObject(insOrders.getApplyinfo(), CustomerInfoVo.class);
+        this.insuredPersonInfo = JSON.toJavaObject(insOrders.getInsureinfo(), CustomerInfoVo.class);
+        this.carInfo = JSON.toJavaObject(insOrders.getCarinfo(), CarInfoVo.class);
+        this.riskList = JSON.parseArray(JSON.toJSONString(insOrders.getRisk()), RiskInfoVo.class);
+        this.kindList = JSON.parseArray(JSON.toJSONString(insOrders.getKing()), KindInfoVo.class);
+        this.quoteno = insOrders.getQuoteno();
+        //this.userid = insOrders.getUserid();
+    }*/
+
+}

+ 32 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quote/zhongmei/api/properties/ZmApiProperties.java

@@ -0,0 +1,32 @@
+package com.jzg.quote.zhongmei.api.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description: todo
+ * @author:shenweidong
+ * @date:2025/2/24 11:04
+ **/
+@Data
+@Component
+@ConfigurationProperties(prefix = "zhongmei.api")
+public class ZmApiProperties {
+
+    private String url;
+
+    private String imageUrl;
+
+    private String smsUrl;
+    // 支付完成页面跳转地址
+    private String pageUrl;
+    // 回调前缀
+    private String callbackDomain;
+    // 承保回调地址
+    private String callbackUrl;
+    // 审核回调地址
+    private String passMsgUrl;
+    // 会话密钥
+    private String sessionKey;
+}