Bläddra i källkod

大家保险接入

785834757 2 år sedan
förälder
incheckning
ca714e3c8c
48 ändrade filer med 3176 tillägg och 89 borttagningar
  1. 1 1
      src/main/java/com/ydtech/config/properties/DaJiaApiConfigurationProperties.java
  2. 2 0
      src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java
  3. 180 0
      src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java
  4. 12 1
      src/main/java/com/ydtech/modules/order/controller/DaJiaOrderController.java
  5. 1 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  6. 10 3
      src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaBaseRequest.java
  7. 2 2
      src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaBaseResponse.java
  8. 45 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaConfigureParameters.java
  9. 22 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CChannelSrc.java
  10. 41 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CCvrgNo.java
  11. 31 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CFuelType.java
  12. 44 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CIndemLmtLvl.java
  13. 18 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CInspectRec.java
  14. 17 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CInspectionCde.java
  15. 22 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CPayTaxType.java
  16. 21 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CProdNo.java
  17. 14 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CResvSex.java
  18. 18 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CResvTxt.java
  19. 33 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CUsageCde.java
  20. 24 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CUsageCdeJq.java
  21. 35 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CVhlTyp.java
  22. 17 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CvrgCIndemLmtLvl.java
  23. 17 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/NDeductionRate.java
  24. 21 3
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1007Request.java
  25. 323 23
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1008Request.java
  26. 666 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1009Request.java
  27. 111 12
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1010Request.java
  28. 53 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1011Request.java
  29. 48 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1012Request.java
  30. 44 2
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1013Request.java
  31. 49 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1014Request.java
  32. 22 3
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1016Request.java
  33. 51 19
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR2009Request.java
  34. 48 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR2010Request.java
  35. 49 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/request/VHLINS2005Request.java
  36. 4 4
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1007Response.java
  37. 3 3
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1008Response.java
  38. 297 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1009Response.java
  39. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1010Response.java
  40. 41 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1011Response.java
  41. 44 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1012Response.java
  42. 20 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1014Response.java
  43. 4 4
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1016Response.java
  44. 3 3
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR2009Response.java
  45. 125 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR2010Response.java
  46. 62 0
      src/main/java/com/ydtech/modules/order/entity/api/dajia/response/VHLINS2005Response.java
  47. 16 0
      src/main/java/com/ydtech/modules/order/service/DaJiaOrderService.java
  48. 444 5
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

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

@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
 public class DaJiaApiConfigurationProperties {
 
     // 请求地址
-    private String baseUrl;
+    private String url;
 
 
 }

+ 2 - 0
src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java

@@ -26,6 +26,8 @@ public enum InsOrderStatusEnum implements IBaseEnum {
 
     //人工核保退回状态,直至再次提交核保,状态修改为待核保
     TO_BACK("4", "核保退回", 6, 0),
+    //撤回二维码
+//    BACK_QR_CODE("5", "撤销二维码", 7, 0),
     ;
 
 

+ 180 - 0
src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java

@@ -0,0 +1,180 @@
+package com.ydtech.modules.order.components.dajia;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.ydtech.config.properties.DaJiaApiConfigurationProperties;
+import com.ydtech.constants.InsuranceEnum;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.entity.api.dajia.AESEncrypt;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import com.ydtech.modules.order.entity.api.dajia.constants.TradeCode;
+import com.ydtech.modules.order.entity.api.dajia.request.*;
+import com.ydtech.modules.order.entity.api.dajia.response.*;
+import com.ydtech.modules.order.utils.InsuranceLog;
+import okhttp3.OkHttpClient;
+import okhttp3.RequestBody;
+import org.springframework.beans.factory.annotation.Value;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.client.RestTemplate;
+
+import static com.ydtech.modules.order.entity.api.dajia.constants.TradeCode.*;
+
+
+/**
+ * @description: 大家财险
+ * @author: wenks
+ * @date: 2023/10/26 11:26
+ **/
+
+@Slf4j
+@Component
+public class DaJiaRequestApiComponents {
+
+    private final RestTemplate restTemplate;
+
+    private final DaJiaApiConfigurationProperties apiComponents;
+
+    @Value("${dajia.api.encryptKey}")
+    private String encryptKey;
+
+    public DaJiaRequestApiComponents(RestTemplate restTemplate, DaJiaApiConfigurationProperties apiComponents) {
+        this.restTemplate = restTemplate;
+        this.apiComponents = apiComponents;
+    }
+
+    /**
+     * @param q      请求参数
+     * @param tClass 响应类型
+     * @param <Q>    Request 请求体
+     * @param <S>    Response 响应体
+     * @return <S>
+     */
+    private <Q, S> S post(Q q, TradeCode tradeCode, Class<S> tClass) throws Exception {
+
+        String url = apiComponents.getUrl() + tradeCode.getCode() + "/inf.dd";
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.TEXT_PLAIN);
+        httpHeaders.set("User-Agent","");
+
+        InsuranceLog.infoLog(InsuranceEnum.DJPC.getPinyin(), "\n\t---------> URl: {} \n---------> 保险公司:{} {}\n---------> 请求参数:{}", url, InsuranceEnum.DJPC.getName(), tradeCode.getDesc(), JSONObject.toJSONString(q));
+        String encrypt = AESEncrypt.encrypt(JSONObject.toJSONString(q), encryptKey);
+        HttpEntity<String> httpEntity = new HttpEntity<>(encrypt, httpHeaders);
+        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST,  httpEntity, String.class);
+        String body = response.getBody();
+        InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> 响应参数:{}", body);
+        //统一处理错误
+        JSONObject resultObj = JSONObject.parseObject(body);
+        String code = resultObj.getString("code");
+        if(!code.equals("2000")) {
+            throw new SystemException(resultObj.getString("msg"));
+        }
+
+        S s = JSONObject.parseObject(resultObj.getJSONObject("body").toJSONString(),tClass);
+        if (ObjectUtils.isEmpty(s)) {
+            throw new SystemException("请求失败");
+        }
+
+        return s;
+    }
+
+    /**
+     * 业务订单号接口
+     *
+     * @param odr1007Request 车型查询 入参实体
+     * @return 出参实体
+     */
+    public ODR1007Response queryBusinessOrders(ODR1007Request odr1007Request) throws Exception {
+        return post(odr1007Request, DJ_TQBD_100007, ODR1007Response.class);
+    }
+
+    /**
+     * 车型查询
+     *
+     * @param odr2009Request 车型查询 入参实体
+     * @return 出参实体
+     */
+    public ODR2009Response queryVehicleTypes(ODR2009Request odr2009Request) throws Exception {
+        return post(odr2009Request, DJ_TQBD_200009, ODR2009Response.class);
+    }
+
+    /**
+     * 车辆与客户信息确认
+     *
+     * @param odr1008Request 入参实体
+     * @return 出参实体
+     */
+    public ODR1008Response carOrCustomInfoConfirm(ODR1008Request odr1008Request) throws Exception {
+        return post(odr1008Request, DJ_TQBD_100008, ODR1008Response.class);
+    }
+
+    //车辆价值计算
+    public ODR1016Response carValueCalculation(ODR1016Request odr1016Request) throws Exception {
+        return post(odr1016Request, DJ_TQBD_100016, ODR1016Response.class);
+    }
+
+    /**
+     * 保费计算
+     *
+     * @param odr1009Request 报价 入参实体
+     * @return 出参实体
+     */
+    public ODR1009Response newPremiumXnyCalculation(ODR1009Request odr1009Request) throws Exception {
+        return post(odr1009Request, DJ_TQBD_100009, ODR1009Response.class);
+    }
+
+    /**
+     * 核保
+     *
+     * @param odr1010Request 核保 入参实体
+     * @return 出参实体
+     */
+    public ODR1010Response underwriting(ODR1010Request odr1010Request) throws Exception {
+        return post(odr1010Request, DJ_TQBD_100010, ODR1010Response.class);
+    }
+
+    /**
+     * 提交影像信息
+     * @param odr1013Request
+     * @return
+     * @throws Exception
+     */
+    public ODR1013Response uploadImage(ODR1013Request odr1013Request) throws Exception {
+        return post(odr1013Request, DJ_TQBD_100013, ODR1013Response.class);
+    }
+
+    /**
+     * 支付链接
+     *
+     * @param odr1011Request 入参实体
+     * @return 出参实体
+     */
+    public ODR1011Response getPayNo(ODR1011Request odr1011Request) throws Exception {
+        return post(odr1011Request, DJ_TQBD_100011, ODR1011Response.class);
+    }
+
+    /**
+     * 查询订单状态
+     * @param odr2010Request
+     * @return
+     * @throws Exception
+     */
+    public ODR2010Response verifyPayment(ODR2010Request odr2010Request) throws Exception {
+        return post(odr2010Request, DJ_TQBD_200010, ODR2010Response.class);
+    }
+
+    /**
+     * 获取保单下载地址
+     * @param vhlins2005Request
+     * @return
+     * @throws Exception
+     */
+    public VHLINS2005Response obtainWarranty(VHLINS2005Request vhlins2005Request) throws Exception {
+        return post(vhlins2005Request, DJ_TQBD_200000, VHLINS2005Response.class);
+    }
+
+}

+ 12 - 1
src/main/java/com/ydtech/modules/order/controller/DaJiaOrderController.java

@@ -27,7 +27,6 @@ public class DaJiaOrderController {
 
     private final InsOrdersComponents insOrdersComponents;
 
-
     @QuoteVerification("报价授权")
     @PostMapping("/quote")
     @ApiOperation("报价")
@@ -48,4 +47,16 @@ public class DaJiaOrderController {
         return this.daJiaOrderService.audit(companyId);
     }
 
+
+    @PostMapping(value = "/verifyPayment")
+    @ApiOperation(value = "缴费状态查询")
+    public HttpResult<Object> verifyPayment(@RequestSingleParam(value = "companyId") String companyId) {
+        return this.daJiaOrderService.verifyPayment(companyId);
+    }
+
+    @PostMapping(value = "/obtainWarranty")
+    @ApiOperation(value = "获取保单")
+    public HttpResult<Object> obtainWarranty(@RequestSingleParam(value = "companyId") String companyId) {
+        return this.daJiaOrderService.obtainWarranty(companyId);
+    }
 }

+ 1 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -52,6 +52,7 @@ public class InsAreaCompany implements Serializable {
     private Integer apiType;
     /**
      * 订单状态
+     * @see com.ydtech.constants.enums.dict.InsOrderStatusEnum
      */
     @TableField(value = "orderstatus")
     private String orderstatus;

+ 10 - 3
src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaBaseRequest.java

@@ -1,12 +1,13 @@
 package com.ydtech.modules.order.entity.api.dajia;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.utils.idgen.IdGenerate;
 import lombok.Data;
-import lombok.NoArgsConstructor;
+import cn.hutool.core.date.DateUtil;
 
 import java.io.Serializable;
+import java.util.Date;
 
-@NoArgsConstructor
 @Data
 public class DaJiaBaseRequest implements Serializable {
 
@@ -27,5 +28,11 @@ public class DaJiaBaseRequest implements Serializable {
     @JsonProperty("transTime")
     private String transTime;
 
-
+    public DaJiaBaseRequest(String channelCode,String interCode){
+        this.channelCode = channelCode;
+        this.interCode = interCode;
+        this.moduleCode = "test";
+        this.serialNo = "test" + IdGenerate.nextId();
+        this.transTime = DateUtil.formatDateTime(new Date());
+    }
 }

+ 2 - 2
src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaBaseResponse.java

@@ -12,8 +12,8 @@ public class DaJiaBaseResponse implements Serializable {
 
     private static final long serialVersionUID = -8058364300759565052L;
 
-    @JsonProperty("code")
-    private String code;
+    @JsonProperty("status")
+    private String status;
 
     @JsonProperty("message")
     private String message;

+ 45 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/DaJiaConfigureParameters.java

@@ -0,0 +1,45 @@
+package com.ydtech.modules.order.entity.api.dajia;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.entity.config.ConfigureParameters;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class DaJiaConfigureParameters implements ConfigureParameters {
+
+    @JsonProperty("IssuingRegion")
+    private String issuingRegion;
+    @JsonProperty("LoginInstitution")
+    private String loginInstitution;
+    @JsonProperty("OperatorCode")
+    private String operatorCode;
+    @JsonProperty("OperatorName")
+    private String operatorName;
+    @JsonProperty("BusinessSource")
+    private String businessSource;
+    @JsonProperty("AgentCode")
+    private String agentCode;
+    @JsonProperty("IssuingInstitution")
+    private String issuingInstitution;
+    @JsonProperty("SalespersonCode")
+    private String salespersonCode;
+    @JsonProperty("SalespersonIDNumber")
+    private String salespersonIDNumber;
+    @JsonProperty("SalespersonName")
+    private String salespersonName;
+    @JsonProperty("BusinessUnit")
+    private String businessUnit;
+    @JsonProperty("BusinessUnitName")
+    private String businessUnitName;
+    @JsonProperty("LoginPersonnelIDNumber")
+    private String loginPersonnelIDNumber;
+    @JsonProperty("RecommendedBy")
+    private String recommendedBy;
+    @JsonProperty("Channel")
+    private String channel;
+    @JsonProperty("RecommendedSubChannels")
+    private String recommendedSubChannels;
+}

+ 22 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CChannelSrc.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CChannelSrc {
+    CHANNEL0(10,"车商渠道"),
+    CHANNEL1(11,"协同渠道"),
+    CHANNEL2(12,"专代渠道"),
+    CHANNEL3(13,"综合渠道"),
+    CHANNEL4(14,"重客渠道"),
+    CHANNEL5(15,"新渠道"),
+    CHANNEL6(16,"网销渠道"),
+    CHANNEL7(17,"农网渠道");
+
+
+    private final Integer code;
+    private final String desc;
+
+}

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

@@ -0,0 +1,41 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CCvrgNo {
+    NO030001("030001","D3","车上人员责任险驾驶人座位"),
+    NO030006("030006","A","车辆损失保险"),
+    NO030009("030009","D4","车上人员责任险乘客座位"),
+    NO030061("030061","","全车盗抢保险"),
+    NO030015("030015","","附加精神损害抚慰金责任险(第三者责任保险)"),
+    NO030018("030018","B","第三者责任保险"),
+    NO030021("030021","","附加新增加设备损失险"),
+    NO030032("030032","","附加车上货物责任险"),
+    NO030042("030042","","附加修理期间费用补偿险"),
+    NO032601("032601","L","附加车身划痕损失险"),
+    NO032612("032612","","附加起重、装卸、挖掘车辆损失扩展条款"),
+    NO032613("032613","","附加特种车辆固定设备、仪器损坏扩展条款"),
+    NO033614("033614","DB","附加法定节假日限额翻倍险"),
+    NO035601("035601","FA","附加绝对免赔率特约条款(车辆损失保险)"),
+    NO035602("035602","MJ2","附加绝对免赔率特约条款(第三者责任保险)"),
+    NO035603("035603","MJ3","附加绝对免赔率特约条款(机动车车上人员责任保险(司机))"),
+    NO035604("035604","MJ4","附加绝对免赔率特约条款(机动车车上人员责任保险(乘客))"),
+    NO035605("035605","","附加绝对免赔率特约条款(特种车全车盗抢保险)"),
+    NO035606("035606","","附加车轮单独损失险"),
+    NO035607("035607","","附加发动机进水损坏除外特约条款"),
+    NO035608("035608","","附加医保外医疗费用责任险(第三者责任保险)"),
+    NO035609("035609","","道路救援服务特约条款"),
+    NO035610("035610","","车辆安全检测特约条款"),
+    NO035611("035611","","代为驾驶服务特约条款"),
+    NO035612("035612","","代为送检服务特约条款"),
+    NO035613("035613","SY_FJ_YBW3","附加医保外医疗费用责任险(车上人员责任保险(司机))"),
+    NO035614("035614","SY_FJ_YBW2","附加医保外医疗费用责任险(车上人员责任保险(乘客))"),
+    NO035615("035615","","附加精神损害抚慰金责任险(车上人员责任保险(司机))"),
+    NO035616("035616","","附加精神损害抚慰金责任险(车上人员责任保险(乘客))");
+    private final String code;
+    private final String insurCode;
+    private final String desc;
+}

+ 31 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CFuelType.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CFuelType {
+    FUELA("A","","汽油"),
+    FUELB("B","","柴油"),
+    FUELC("C","","电"),
+    FUELD("D","","混合油"),
+    FUELE("E","","天然气"),
+    FUELF("F","","液化石油气"),
+    FUELL("L","","甲醇"),
+    FUELM("M","","乙醇"),
+    FUELN("N","","太阳能"),
+    FUELO("O","","混合动力"),
+    FUELY("Y","","无"),
+    FUELZ("Z","","其它"),
+    FUEL0("0","0","燃油"),
+    FUEL1("1","1","纯电动"),
+    FUEL2("2","2","燃料电池"),
+    FUEL3("3","3","插电式混合动力"),
+    FUEL4("4","4","其他混合动力");
+
+    private final String code;
+    private final String sysCode;
+    private final String desc;
+
+}

+ 44 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CIndemLmtLvl.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * 第三者责任险 限额档次
+ */
+@AllArgsConstructor
+@Getter
+public enum CIndemLmtLvl  {
+//    L15("306006015","100万元以上",1000000.00),
+    L01("306006001",10000.00),
+    L02("306006002",20000.00),
+    L03("306006003",40000.00),
+    L04("306006004",50000.00),
+    L05("306006005",100000.00),
+    L06("306006006",200000.00),
+    L07("306006007",300000.00),
+    L08("306006008",400000.00),
+    L09("306006009",500000.00),
+    L10("306006010",150000.00),
+    L11("306006011",700000.00),
+    L12("306006012",800000.00),
+    L13("306006013",900000.00),
+    L14("306006014",1000000.00),
+    L16("306006016",1500000.00),
+    L17("306006017",2000000.00),
+    L18("306006018",3000000.00),
+    L19("306006019",5000000.00),
+    L20("306006020",2500000.00),
+    L21("306006021",3500000.00),
+    L22("306006022",4000000.00),
+    L23("306006023",4500000.00),
+    L24("306006024",6000000.00),
+    L25("306006025",8000000.00),
+    L26("306006026",10000000.00);
+
+    private final String code;
+
+    private final Double amount;
+
+}

+ 18 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CInspectRec.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+
+@AllArgsConstructor
+@Getter
+public enum CInspectRec {
+    INSREC1(382001,"全车完好无损,证车相符,年审合格"),
+    INSREC2(382002,"其他");
+
+
+    private final Integer code;
+    private final String desc;
+
+}

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CInspectionCde.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CInspectionCde {
+    INS2(305005002,"已验"),
+    INS3(305005003,"免验"),
+    INS6(305005006,"送单验车"),
+    INS5(305005005,"应验未验");
+
+    private final Integer code;
+    private final String desc;
+
+}

+ 22 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CPayTaxType.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CPayTaxType {
+    T5001("3T5001","暂不缴税"),
+    T5002("3T5002","缴税"),
+    T5003("3T5003","减税"),
+    T5004("3T5004","免税"),
+    T5005("3T5005","完税"),
+    T5006("3T5006","不征"),
+    T5007("3T5007","未代收"),
+    T5008("3T5008","补税");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 21 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CProdNo.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 机动车险别代码
+ **/
+@AllArgsConstructor
+@Getter
+public enum CProdNo {
+    JQ("0320","交强险"),
+    SY("0356","商业险"),
+    MTJQ("0316","摩托车交强险"),
+    MTSY("0355","摩托车商业险");
+
+    private final String code;
+
+    private final String desc;
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CResvSex.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CResvSex {
+    MAN("3A05001","男"),
+    WOMAN("3A05002","女");
+
+    public final String code;
+    public final String desc;
+}

+ 18 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CResvTxt.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CResvTxt {
+RESC1(383001,"单责任险"),
+RESC2(383002,"新车新车新车"),
+RESC3(383003,"按期续保,未增加损失类险别"),
+RESC4(383004,"机关车辆,企业车队"),
+RESC5(383005,"符合免验规定");
+
+
+    public final Integer code;
+    public final String desc;
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CUsageCde.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CUsageCde {
+    U01(374001,"家庭自用客车"),
+    U02(374002,"非营业企业客车"),
+    U03(374003,"非营业机关客车"),
+    U04(374004,"非营业个人货车"),
+    U05(374005,"非营业企业货车"),
+    U06(374006,"非营业机关货车"),
+    U07(374007,"营业个人.出租.租赁"),
+    U08(374008,"营业个人.城市公交"),
+    U09(374009,"营业个人.公路客运"),
+    U10(374010,"营业个人.货车"),
+    U11(374011,"营业企业.出租.租赁"),
+    U12(374012,"营业企业.城市公交"),
+    U13(374013,"营业企业.公路客运"),
+    U14(374014,"营业企业.货车"),
+    U16(374016,"营业特种车"),
+    U17(374017,"非营业特种车"),
+    U18(374018,"营业特种车挂车"),
+    U19(374019,"非营业特种车挂车"),
+    U20(374020,"营业挂车"),
+    U21(374021,"非营业挂车");
+
+    public final Integer code;
+    public final String desc;
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CUsageCdeJq.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CUsageCdeJq {
+
+    UJQ364003001(364003001,"营业客车(出租、租赁)"),
+    UJQ364001001(364001001,"家庭自用汽车"),
+    UJQ364002001(364002001,"非营业客车(机关、事业团体)"),
+    UJQ364003002(364003002,"营业客车(城市公交)"),
+    UJQ364002002(364002002,"非营业客车(企业)"),
+    UJQ364003003(364003003,"营业客车(公路客运)"),
+    UJQ364004001(364004001,"货车(非营业货车)"),
+    UJQ364004002(364004002,"货车(营业货车)"),
+    UJQ364005001(364005001,"特种车");
+
+
+    public final Integer code;
+    public final String desc;
+
+}

+ 35 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CVhlTyp.java

@@ -0,0 +1,35 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CVhlTyp {
+
+    T01(365001,"6座以下"),
+    T02(365002,"6-10座"),
+    T03(365003,"10-20座"),
+    T04(365004,"20-36座"),
+    T05(365005,"36座以上"),
+    T06(365006,"2吨以下"),
+    T07(365007,"2-5吨"),
+    T08(365008,"5-10吨"),
+    T09(365009,"10吨以上"),
+    T10(365010,"特种车型一"),
+    T11(365011,"特种车型二"),
+    T12(365012,"特种车型三"),
+    T13(365013,"特种车型四"),
+    T14(365014,"挂车(2吨以下)"),
+    T15(365015,"挂车(2-5吨)"),
+    T16(365016,"挂车(5-10吨)"),
+    T17(365017,"挂车(10吨以上)"),
+    T20(365020,"特种车型二挂车"),
+    T21(365021,"特种车型三挂车"),
+    T19(365019,"特种车型一挂车"),
+    T22(365022,"特种车型四挂车");
+
+    private Integer code;
+    private String desc;
+
+}

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/CvrgCIndemLmtLvl.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum CvrgCIndemLmtLvl {
+    N1("N03001001",2000),
+    N2("N03001002",5000),
+    N3("N03001003",10000),
+    N4("N03001004",20000);
+
+    private final String code;
+
+    private final Integer amount;
+}

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/constants/NDeductionRate.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.order.entity.api.dajia.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+// 绝对免赔率
+@AllArgsConstructor
+@Getter
+public enum NDeductionRate {
+    N5("-5",0.05),
+    N10("-10",0.1),
+    N15("-15",0.15),
+    N20("-20",0.2);
+
+    private final String code;
+    private final Double rate;
+}

+ 21 - 3
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1007Request.java

@@ -2,6 +2,9 @@ package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import com.ydtech.modules.order.entity.api.dajia.constants.TradeCode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -15,15 +18,14 @@ import java.util.List;
  * @author: wenks
  * @date: 2023/11/14 16:28
  **/
-@EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
 @Data
+@EqualsAndHashCode(callSuper = true)
 public class ODR1007Request extends DaJiaBaseRequest {
 
     private static final long serialVersionUID = -2891022722388399132L;
 
     @JsonProperty("body")
-    private List<BodyDTO> body;
+    private BodyDTO body;
 
     @NoArgsConstructor
     @Data
@@ -63,4 +65,20 @@ public class ODR1007Request extends DaJiaBaseRequest {
 
         }
     }
+
+    public ODR1007Request(){
+        super("TQBD", ServiceCode.ODR1007.getCode());
+    }
+
+    public ODR1007Request(DaJiaConfigureParameters daJiaConfigureParameters){
+        super("TQBD", ServiceCode.ODR1007.getCode());
+        BodyDTO bodyDTO = new BodyDTO();
+        BodyDTO.BusinessInfoDTO businessInfoDTO = new BodyDTO.BusinessInfoDTO();
+        businessInfoDTO.setBusiOpdpt(daJiaConfigureParameters.getLoginInstitution());
+        businessInfoDTO.setBusiOprCde(daJiaConfigureParameters.getOperatorCode());
+        bodyDTO.setVhlType(365001);
+        bodyDTO.setBusinessInfo(businessInfoDTO);
+        this.body = bodyDTO;
+
+    }
 }

+ 323 - 23
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1008Request.java

@@ -2,11 +2,18 @@ package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.*;
+import com.ydtech.modules.order.entity.api.dajia.response.ODR2009Response;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Objects;
+
+import static com.ydtech.modules.order.entity.api.dajia.constants.CInspectRec.INSREC1;
 
 
 /**
@@ -16,7 +23,7 @@ import java.io.Serializable;
  * @date: 2023/11/14 16:51
  **/
 @EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
+//@NoArgsConstructor
 @Data
 public class ODR1008Request extends DaJiaBaseRequest {
 
@@ -54,7 +61,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("applicantCBusiness")
             private Integer applicantCBusiness;
             @JsonProperty("applicantCCertfCde")
-            private Long applicantCCertfCde;
+            private String applicantCCertfCde;
             @JsonProperty("applicantCCertfCls")
             private String applicantCCertfCls;
             @JsonProperty("applicantCCountry")
@@ -91,6 +98,8 @@ public class ODR1008Request extends DaJiaBaseRequest {
             private Integer applicantCounty;
             @JsonProperty("applicantEmPower")
             private Integer applicantEmPower;
+            @JsonProperty("applicantSuffixAddr")
+            private String applicantSuffixAddr;
             @JsonProperty("applicantEmail")
             private String applicantEmail;
             @JsonProperty("applicantEthnicity")
@@ -100,7 +109,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("applicantIssueOrg")
             private String applicantIssueOrg;
             @JsonProperty("applicantMobile")
-            private Long applicantMobile;
+            private String applicantMobile;
             @JsonProperty("applicantNme")
             private String applicantNme;
             @JsonProperty("applicantNote")
@@ -128,7 +137,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("applicantWorkDpt")
             private Integer applicantWorkDpt;
             @JsonProperty("applicantZipCde")
-            private Integer applicantZipCde;
+            private String applicantZipCde;
         }
 
         @NoArgsConstructor
@@ -140,7 +149,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("busiBrkrCde")
             private String busiBrkrCde;
             @JsonProperty("busiBsnsTyp")
-            private Integer busiBsnsTyp;
+            private String busiBsnsTyp;
             @JsonProperty("busiChaSalesId")
             private Integer busiChaSalesId;
             @JsonProperty("busiChannelSrc")
@@ -152,7 +161,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("busiDataFlag")
             private String busiDataFlag;
             @JsonProperty("busiDataSrc")
-            private Integer busiDataSrc;
+            private String busiDataSrc;
             @JsonProperty("busiDptCde")
             private String busiDptCde;
             @JsonProperty("busiGarageCode")
@@ -164,7 +173,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("busiGrantDptNme")
             private String busiGrantDptNme;
             @JsonProperty("busiId")
-            private Long busiId;
+            private String busiId;
             @JsonProperty("busiOpdpt")
             private String busiOpdpt;
             @JsonProperty("busiOprCde")
@@ -180,7 +189,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("busiServiceCode")
             private String busiServiceCode;
             @JsonProperty("busiSlsCde")
-            private Integer busiSlsCde;
+            private String busiSlsCde;
             @JsonProperty("busiSlsId")
             private Long busiSlsId;
             @JsonProperty("busiSlsNme")
@@ -209,6 +218,8 @@ public class ODR1008Request extends DaJiaBaseRequest {
             private Integer insuredCountry;
             @JsonProperty("insuredCounty")
             private Integer insuredCounty;
+            @JsonProperty("insuredSuffixAddr")
+            private String insuredSuffixAddr;
             @JsonProperty("insuredCusRiskLvl")
             private Integer insuredCusRiskLvl;
             @JsonProperty("insuredEmail")
@@ -220,7 +231,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("insuredIssueOrg")
             private String insuredIssueOrg;
             @JsonProperty("insuredMobile")
-            private Long insuredMobile;
+            private String insuredMobile;
             @JsonProperty("insuredNation")
             private Integer insuredNation;
             @JsonProperty("insuredNme")
@@ -252,7 +263,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("insuredWorkDpt")
             private Integer insuredWorkDpt;
             @JsonProperty("insuredZipCde")
-            private Integer insuredZipCde;
+            private String insuredZipCde;
         }
 
         @NoArgsConstructor
@@ -270,13 +281,13 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("vehicleEcdemicMrk")
             private Integer vehicleEcdemicMrk;
             @JsonProperty("vehicleEngNo")
-            private Integer vehicleEngNo;
+            private String vehicleEngNo;
             @JsonProperty("vehicleFrmNo")
             private String vehicleFrmNo;
             @JsonProperty("vehicleFstRegYmBar")
             private String vehicleFstRegYmBar;
             @JsonProperty("vehicleFuelType")
-            private Integer vehicleFuelType;
+            private String vehicleFuelType;
             @JsonProperty("vehicleIs4SShop")
             private Integer vehicleIs4SShop;
             @JsonProperty("vehicleIsQuery")
@@ -290,21 +301,21 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("vehicleModelNme")
             private String vehicleModelNme;
             @JsonProperty("vehicleNConsultPurchaseValue")
-            private Integer vehicleNConsultPurchaseValue;
+            private Double vehicleNConsultPurchaseValue;
             @JsonProperty("vehicleNCurbWt")
             private Integer vehicleNCurbWt;
             @JsonProperty("vehicleNDisplacement")
-            private Integer vehicleNDisplacement;
+            private String vehicleNDisplacement;
             @JsonProperty("vehicleNNewPurchaseValue")
-            private Integer vehicleNNewPurchaseValue;
+            private String vehicleNNewPurchaseValue;
             @JsonProperty("vehicleNPower")
             private Double vehicleNPower;
             @JsonProperty("vehicleNPureRange")
             private Integer vehicleNPureRange;
             @JsonProperty("vehicleNSeatNum")
-            private Integer vehicleNSeatNum;
+            private String vehicleNSeatNum;
             @JsonProperty("vehicleNTonage")
-            private Integer vehicleNTonage;
+            private Double vehicleNTonage;
             @JsonProperty("vehicleNewMrk")
             private Integer vehicleNewMrk;
             @JsonProperty("vehicleNewPlate")
@@ -332,13 +343,24 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("vehicleTraUsageCde")
             private Integer vehicleTraUsageCde;
             @JsonProperty("vehicleUsageCde")
-            private Integer vehicleUsageCde;
+            private String vehicleUsageCde;
             @JsonProperty("vehicleVhlCertNo")
             private Long vehicleVhlCertNo;
             @JsonProperty("vehicleVhlCertType")
             private String vehicleVhlCertType;
             @JsonProperty("vehicleVhlTyp")
-            private Integer vehicleVhlTyp;
+            private String vehicleVhlTyp;
+            @JsonProperty("vehicleInspectionCde")
+            private String vehicleInspectionCde;
+            @JsonProperty("vehicleInspectTm")
+            private String vehicleInspectTm;
+            @JsonProperty("vehicleInspectorNme")
+            private String vehicleInspectorNme;
+            @JsonProperty("vehicleInspectRec")
+            private String vehicleInspectRec;
+            @JsonProperty("vehicleResvTxt1")
+            private String vehicleResvTxt1;
+
         }
 
         @NoArgsConstructor
@@ -346,19 +368,19 @@ public class ODR1008Request extends DaJiaBaseRequest {
         public static class VehicleOwnerInfoDTO implements Serializable{
             private static final long serialVersionUID = 3725955472263478330L;
             @JsonProperty("vehicleOwnerCCertfCde")
-            private Long vehicleOwnerCCertfCde;
+            private String vehicleOwnerCCertfCde;
             @JsonProperty("vehicleOwnerCCertfCls")
             private String vehicleOwnerCCertfCls;
             @JsonProperty("vehicleOwnerCClntAddr")
             private String vehicleOwnerCClntAddr;
             @JsonProperty("vehicleOwnerCContactTel")
-            private Long vehicleOwnerCContactTel;
+            private String vehicleOwnerCContactTel;
             @JsonProperty("vehicleOwnerCCountry")
             private Integer vehicleOwnerCCountry;
             @JsonProperty("vehicleOwnerCEmail")
             private String vehicleOwnerCEmail;
             @JsonProperty("vehicleOwnerCMobile")
-            private Long vehicleOwnerCMobile;
+            private String vehicleOwnerCMobile;
             @JsonProperty("vehicleOwnerCNation")
             private Integer vehicleOwnerCNation;
             @JsonProperty("vehicleOwnerCOwnerCls")
@@ -370,11 +392,289 @@ public class ODR1008Request extends DaJiaBaseRequest {
             @JsonProperty("vehicleOwnerCWorkdptKind")
             private Integer vehicleOwnerCWorkdptKind;
             @JsonProperty("vehicleOwnerCZipCde")
-            private Integer vehicleOwnerCZipCde;
+            private String vehicleOwnerCZipCde;
             @JsonProperty("vehicleOwnerTBirthday")
             private String vehicleOwnerTBirthday;
             @JsonProperty("vehicleOwnerTExpiredDate")
             private String vehicleOwnerTExpiredDate;
         }
     }
+
+    public ODR1008Request(String orderNo,String busiId, BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters,ODR2009Response odr2009Response){
+        super("TQBD", ServiceCode.ODR1008.getCode());
+        if(Objects.isNull(body))
+        {
+            this.body = new BodyDTO();
+        }
+        this.body.setOrderNo(orderNo);
+        //设置车主信息
+        setVehicleOwnerInfo(quoteInfoVo);
+        //设置投保人信息
+        setApplicantInfo(quoteInfoVo);
+        //设置被保人信息
+        setInsuredInfo(quoteInfoVo);
+        //设置车辆信息
+        setVehicleInfo(quoteInfoVo,odr2009Response);
+        //设置业务归属信息
+        setBusinessInfo(daJiaConfigureParameters,busiId);
+    }
+
+    //根据身份证获取生日
+    public String getBirthdateFromIDCardNumber(String idCardNumber) {
+        int year = Integer.parseInt(idCardNumber.substring(6, 10));
+        int month = Integer.parseInt(idCardNumber.substring(10, 12));
+        int day = Integer.parseInt(idCardNumber.substring(12, 14));
+        return year + "-" + month + "-" + day;
+    }
+
+    //根据身份证获取性别
+    public String getSexFromIdCardNumber(String idCardNumber) {
+        String genderBit = idCardNumber.substring(16, 17);
+        int genderBitNumber = Integer.parseInt(genderBit);
+        boolean isOdd = genderBitNumber % 2 != 0;
+        if (isOdd) {
+            return CResvSex.MAN.getCode();
+        } else {
+            return CResvSex.WOMAN.getCode();
+        }
+    }
+
+    //设置车主信息
+    public void setVehicleOwnerInfo(BaseQuoteInfoVo quoteInfoVo){
+        BodyDTO.VehicleOwnerInfoDTO vehicleOwnerInfoDTO = new BodyDTO.VehicleOwnerInfoDTO();
+        //设置证件号码
+        vehicleOwnerInfoDTO.setVehicleOwnerCCertfCde(quoteInfoVo.getOwnerInfo().getIdentifyNumber());
+        //设置证件类型
+        vehicleOwnerInfoDTO.setVehicleOwnerCCertfCls("01");
+        //通讯地址
+        vehicleOwnerInfoDTO.setVehicleOwnerCClntAddr(quoteInfoVo.getOwnerInfo().getAddr());
+        //手机号
+        vehicleOwnerInfoDTO.setVehicleOwnerCContactTel(quoteInfoVo.getOwnerInfo().getMobile());
+        //邮箱号
+        vehicleOwnerInfoDTO.setVehicleOwnerCEmail(quoteInfoVo.getOwnerInfo().getEmail());
+        //手机号
+        vehicleOwnerInfoDTO.setVehicleOwnerCMobile(quoteInfoVo.getOwnerInfo().getMobile());
+        //车主姓名
+        vehicleOwnerInfoDTO.setVehicleOwnerCOwnerNme(quoteInfoVo.getOwnerInfo().getName());
+        //车主类型
+        vehicleOwnerInfoDTO.setVehicleOwnerCOwnerCls(1);
+        //邮编
+        vehicleOwnerInfoDTO.setVehicleOwnerCZipCde("030024");
+        //车主出生日期
+        vehicleOwnerInfoDTO.setVehicleOwnerTBirthday(getBirthdateFromIDCardNumber(quoteInfoVo.getOwnerInfo().getIdentifyNumber()));
+        //车主性别
+        vehicleOwnerInfoDTO.setVehicleOwnerCSex(getSexFromIdCardNumber(quoteInfoVo.getOwnerInfo().getIdentifyNumber()));
+        //身份证号获取出生日期
+        vehicleOwnerInfoDTO.setVehicleOwnerTBirthday(getBirthdateFromIDCardNumber(quoteInfoVo.getOwnerInfo().getIdentifyNumber()));
+//        //证件有效日期
+//        vehicleOwnerInfoDTO.setVehicleOwnerTEffectiveDate(quoteInfoVo.getOwnerInfo().getIdentifyValidDate());
+        //证件失效日期
+        vehicleOwnerInfoDTO.setVehicleOwnerTExpiredDate(quoteInfoVo.getOwnerInfo().getIdentifyValidEndDate());
+        //国家
+        vehicleOwnerInfoDTO.setVehicleOwnerCNation(1);
+        //国籍
+        vehicleOwnerInfoDTO.setVehicleOwnerCCountry(1);
+        //单位性质 默认为9 其他
+        vehicleOwnerInfoDTO.setVehicleOwnerCWorkdptKind(9);
+        this.body.setVehicleOwnerInfo(vehicleOwnerInfoDTO);
+    }
+
+    //设置投保人信息
+    public void setApplicantInfo(BaseQuoteInfoVo quoteInfoVo){
+        BodyDTO.ApplicantInfoDTO applicantInfoDTO = new BodyDTO.ApplicantInfoDTO();
+        //设置证件号码
+        applicantInfoDTO.setApplicantCCertfCde(quoteInfoVo.getPolicyHolderInfo().getIdentifyNumber());
+        //设置证件类型
+        applicantInfoDTO.setApplicantCCertfCls("01");
+        //客户类型
+        applicantInfoDTO.setApplicantClntMrk(1);
+        //通讯地址
+        applicantInfoDTO.setApplicantClntAddr(quoteInfoVo.getPolicyHolderInfo().getAddr());
+        //手机号
+        applicantInfoDTO.setApplicantMobile(quoteInfoVo.getPolicyHolderInfo().getMobile());
+        //邮箱号
+        applicantInfoDTO.setApplicantEmail(quoteInfoVo.getPolicyHolderInfo().getEmail());
+        //投保人姓名
+        applicantInfoDTO.setApplicantNme(quoteInfoVo.getPolicyHolderInfo().getName());
+        //投保人出生日期
+        applicantInfoDTO.setApplicantTBirthday(getBirthdateFromIDCardNumber(quoteInfoVo.getPolicyHolderInfo().getIdentifyNumber()));
+        //邮编
+//        vehicleOwnerInfoDTO.setVehicleOwnerCZipCde(quoteInfoVo.getOwnerInfo().get)
+        //投保人性别
+        applicantInfoDTO.setApplicantSex(getSexFromIdCardNumber(quoteInfoVo.getPolicyHolderInfo().getIdentifyNumber()));
+        //证件生效日期
+        applicantInfoDTO.setApplicantTEffectiveDate(quoteInfoVo.getPolicyHolderInfo().getIdentifyValidDate());
+        //证件失效日期
+        applicantInfoDTO.setApplicantTExpiredDate(quoteInfoVo.getOwnerInfo().getIdentifyValidEndDate());
+        //证件上地址
+        applicantInfoDTO.setApplicantHomeAddr(quoteInfoVo.getPolicyHolderInfo().getAddr());
+        //国籍
+//        applicantInfoDTO.set(1);
+        //省市县
+        applicantInfoDTO.setApplicantProvince(140000);
+        applicantInfoDTO.setApplicantCity(140100);
+        applicantInfoDTO.setApplicantCounty(140109);
+        applicantInfoDTO.setApplicantSuffixAddr("前锋街道");
+        applicantInfoDTO.setApplicantZipCde("030024");
+        this.body.setApplicantInfo(applicantInfoDTO);
+    }
+
+    //设置被保人信息
+    public void setInsuredInfo(BaseQuoteInfoVo quoteInfoVo){
+        BodyDTO.InsuredInfoDTO insuredInfoDTO = new BodyDTO.InsuredInfoDTO();
+        //设置证件号码
+        insuredInfoDTO.setInsuredCertfCde(quoteInfoVo.getInsuredPersonInfo().getIdentifyNumber());
+        //设置证件类型
+        insuredInfoDTO.setInsuredCertfCls("01");
+        //客户类型
+        insuredInfoDTO.setInsuredClntMrk(1);
+        //通讯地址
+        insuredInfoDTO.setInsuredClntAddr(quoteInfoVo.getInsuredPersonInfo().getAddr());
+        //证件上地址
+        insuredInfoDTO.setInsuredHomeAddr(quoteInfoVo.getInsuredPersonInfo().getAddr());
+        //居住地址
+        insuredInfoDTO.setInsuredResidAddr(quoteInfoVo.getInsuredPersonInfo().getAddr());
+        //手机号
+        insuredInfoDTO.setInsuredMobile(quoteInfoVo.getInsuredPersonInfo().getMobile());
+        //邮箱号
+        insuredInfoDTO.setInsuredEmail(quoteInfoVo.getInsuredPersonInfo().getEmail());
+        //被保人姓名
+        insuredInfoDTO.setInsuredNme(quoteInfoVo.getInsuredPersonInfo().getName());
+        //被保人出生日期
+        insuredInfoDTO.setInsuredTBirthday(getBirthdateFromIDCardNumber(quoteInfoVo.getInsuredPersonInfo().getIdentifyNumber()));
+        //被保人性别
+        insuredInfoDTO.setInsuredSex(getSexFromIdCardNumber(quoteInfoVo.getInsuredPersonInfo().getIdentifyNumber()));
+        //身份证生效日期
+        insuredInfoDTO.setInsuredTEffectiveDate(quoteInfoVo.getInsuredPersonInfo().getIdentifyValidDate());
+        //身份证失效日期
+        insuredInfoDTO.setInsuredTExpiredDate(quoteInfoVo.getInsuredPersonInfo().getIdentifyValidEndDate());
+        //省市县
+        insuredInfoDTO.setInsuredProvince(140000);
+        insuredInfoDTO.setInsuredCity(140100);
+        insuredInfoDTO.setInsuredCounty(140109);
+        insuredInfoDTO.setInsuredSuffixAddr("千峰街道");
+        //邮编
+        insuredInfoDTO.setInsuredZipCde("030024");
+        this.body.setInsuredInfo(insuredInfoDTO);
+    }
+
+    //设置车辆信息
+    public void setVehicleInfo(BaseQuoteInfoVo quoteInfoVo,ODR2009Response odr2009Response){
+        BodyDTO.VehicleInfoDTO vehicleInfoDTO = new BodyDTO.VehicleInfoDTO();
+        //设置发动机号
+        vehicleInfoDTO.setVehicleEngNo(quoteInfoVo.getCarInfo().getEngineNo());
+        //设置车架号
+        vehicleInfoDTO.setVehicleFrmNo(quoteInfoVo.getCarInfo().getFrameNo());
+        //是否是过户车
+        vehicleInfoDTO.setVehicleChgOwnerFlag(0);
+        //初登日期
+        vehicleInfoDTO.setVehicleFstRegYmBar(quoteInfoVo.getCarInfo().getRegisterDate());
+        //能源类型
+        vehicleInfoDTO.setVehicleFuelType(quoteInfoVo.getCarInfo().getEnergyType());
+        //行驶证车辆类型
+        vehicleInfoDTO.setVehicleRegVhlTyp(quoteInfoVo.getCarInfo().getCartype());
+        //交强险特殊车标志
+
+        //使用性质
+        if(quoteInfoVo.getCarInfo().getCarnature().equals("01")) {
+            vehicleInfoDTO.setVehicleUsageCde(CUsageCde.U07.getCode().toString());
+            vehicleInfoDTO.setVehicleTraUsageCde(CUsageCde.U07.getCode());
+        }else{
+            vehicleInfoDTO.setVehicleUsageCde(CUsageCde.U01.getCode().toString());
+            vehicleInfoDTO.setVehicleTraUsageCde(CUsageCde.U01.getCode());
+        }
+
+        //特殊风险标识
+
+        //是否上牌
+        if(quoteInfoVo.getCarInfo().isNoLicenseFlag()) {
+            //是否是新车
+            vehicleInfoDTO.setVehicleNewPlate(0);
+            vehicleInfoDTO.setVehicleNewMrk(0);
+            //车牌号
+            vehicleInfoDTO.setVehiclePlateNo(quoteInfoVo.getCarInfo().getLicenseNo());
+            //车牌种类
+            vehicleInfoDTO.setVehiclePlateTyp("02");
+        }else{
+            //是否是新车
+            vehicleInfoDTO.setVehicleNewPlate(1);
+            vehicleInfoDTO.setVehicleNewMrk(1);
+        }
+
+        boolean consistentPrice = false;
+        ODR2009Response.ResultDTO resultDTO = new ODR2009Response.ResultDTO();
+        for(ODR2009Response.ResultDTO item : odr2009Response.getResult()){
+            if(item.getVehiclePriceTax().equals(quoteInfoVo.getCarInfo().getPurchasePrice())){
+                consistentPrice = true;
+                resultDTO = item;
+                break;
+            }
+        }
+        if(!consistentPrice){
+            resultDTO = odr2009Response.getResult().get(0);
+        }
+        //厂牌车型码
+        vehicleInfoDTO.setVehicleModelCde(resultDTO.getVehicleId());
+        //新车购置价
+        vehicleInfoDTO.setVehicleNNewPurchaseValue(resultDTO.getVehiclePriceTax());
+        //车型名称
+        vehicleInfoDTO.setVehicleModelNme(resultDTO.getVehicleName());
+        //排气量
+        vehicleInfoDTO.setVehicleNDisplacement(resultDTO.getVehicleExhaust());
+        //功率
+        vehicleInfoDTO.setVehicleNPower(Double.parseDouble(resultDTO.getPower()));
+        //座位数
+        vehicleInfoDTO.setVehicleNSeatNum(resultDTO.getVehicleSeat());
+        //车辆种类
+        if(Integer.parseInt(resultDTO.getVehicleSeat()) < 6){
+            vehicleInfoDTO.setVehicleVhlTyp(CVhlTyp.T01.getCode().toString());
+        }else{
+            vehicleInfoDTO.setVehicleVhlTyp(CVhlTyp.T02.getCode().toString());
+        }
+        //车辆品牌
+        vehicleInfoDTO.setVehicleBrandId(resultDTO.getBrandId());
+        //整备质量
+        vehicleInfoDTO.setVehicleNCurbWt(0);
+        vehicleInfoDTO.setVehicleNTonage(0.0);
+
+        //验车情况
+        vehicleInfoDTO.setVehicleInspectionCde(CInspectionCde.INS3.getCode().toString());
+        //免验原因
+        vehicleInfoDTO.setVehicleResvTxt1(CResvTxt.RESC1.getCode().toString());
+        this.body.setVehicleInfo(vehicleInfoDTO);
+    }
+
+    //设置业务归属信息
+    public void setBusinessInfo(DaJiaConfigureParameters daJiaConfigureParameters,String busiId){
+        BodyDTO.BusinessInfoDTO businessInfoDTO = new BodyDTO.BusinessInfoDTO();
+        //设置id
+        businessInfoDTO.setBusiId(busiId);
+        //设置登录机构
+        businessInfoDTO.setBusiOpdpt(daJiaConfigureParameters.getLoginInstitution());
+        //设置出单口
+        businessInfoDTO.setBusiDptCde(daJiaConfigureParameters.getIssuingInstitution());
+        //设置代理人编码
+        businessInfoDTO.setBusiBrkrCde(daJiaConfigureParameters.getAgentCode());
+        //设置操作员代码
+        businessInfoDTO.setBusiOprCde(daJiaConfigureParameters.getOperatorCode());
+        //设置操作员姓名
+        businessInfoDTO.setBusiOprNme(daJiaConfigureParameters.getOperatorName());
+        //设置业务来源
+        businessInfoDTO.setBusiBsnsTyp(daJiaConfigureParameters.getBusinessSource());
+        //设置业务员代码
+        businessInfoDTO.setBusiSlsCde(daJiaConfigureParameters.getSalespersonCode());
+        //设置推荐人代码
+        businessInfoDTO.setBusiRecommendCde(daJiaConfigureParameters.getOperatorCode());
+        //设置推荐人渠道
+        businessInfoDTO.setBusiRecSubChannel(daJiaConfigureParameters.getRecommendedSubChannels());
+        //设置渠道
+        businessInfoDTO.setBusiChannelSrc("10");
+        //设置一级来源
+        businessInfoDTO.setBusiDataSrc("G");
+        //设置二级来源
+        businessInfoDTO.setBusiDataFlag("TQDL");
+
+        this.body.setBusinessInfo(businessInfoDTO);
+    }
+
 }

+ 666 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1009Request.java

@@ -0,0 +1,666 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.constants.enums.InsurKind;
+import com.ydtech.constants.enums.InsuranceRisk;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.QuoteInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.*;
+import com.ydtech.modules.order.entity.api.dajia.response.ODR1009Response;
+import com.ydtech.modules.order.entity.api.dajia.response.ODR1016Response;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.utils.DateTimeUtil;
+import com.ydtech.utils.DateTimeUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+import static com.ydtech.modules.order.entity.api.dajia.constants.CInspectRec.INSREC1;
+import static com.ydtech.modules.order.entity.api.dajia.constants.CPayTaxType.T5002;
+
+
+/**
+ * @version
+ * @description: ODR1008 保费计算 请求参数
+ * @author: wenks
+ * @date: 2023/11/14 16:51
+ **/
+//@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class ODR1009Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -3271826016394642480L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public ODR1009Request(String orderNo, List<KindInfoVo> kindInfoVos, List<RiskInfoVo> riskInfoVos, BaseQuoteInfoVo quoteInfoVo, ODR1016Response odr1016Response) {
+        super("TQBD", ServiceCode.ODR1009.getCode());
+        if(Objects.isNull(body)){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(orderNo);
+        //车险交商联合出单类型
+        if(riskInfoVos.size() > 1){
+            //交商联合
+            body.setMotorJointType("3");
+        }else if(riskInfoVos.size() == 1) {
+            if (riskInfoVos.get(0).getRiskCode().equals(InsuranceRisk.BUSINESS_CODE)) {
+                //单商业
+                body.setMotorJointType("2");
+            } else {
+                // 单交强
+                body.setMotorJointType("1");
+            }
+        }
+        //设置基本信息
+        setBasePartReq(riskInfoVos,quoteInfoVo,odr1016Response);
+        //设置车船税
+        setVehicleTaxation(riskInfoVos);
+        //设置商业险信息
+        setCoverageList(kindInfoVos,quoteInfoVo,odr1016Response);
+        //设置验车情况
+        setInspectionInfo();
+        //设置特殊属性
+        setSpecialInfo(riskInfoVos);
+//        this.body.setVehicleInfo(new BodyDTO.vehicleInfoDTO());
+//        this.body.setNvhPolicyList(new BodyDTO.nvhPolicyListDTO());
+
+    }
+
+    //基本信息
+    public void setBasePartReq(List<RiskInfoVo> riskInfoVos, BaseQuoteInfoVo quoteInfoVo, ODR1016Response odr1016Response){
+        BodyDTO.basePartReqDTO basePartReqDTO = new BodyDTO.basePartReqDTO();
+        riskInfoVos.forEach(risk->{
+            if("0507".equals(risk.getRiskCode())) {
+                //交强险保险起期
+                basePartReqDTO.setJqEffectiveDate(risk.getStartDate());
+                //交强险保险止期
+                basePartReqDTO.setJqExpireDate(risk.getEndDate());
+                //交强险即时生效
+                basePartReqDTO.setJqImmeffMrk("0");
+                //交强险产品编码
+                basePartReqDTO.setJqProdNo(CProdNo.JQ.getCode());
+            }
+            if("0510".equals(risk.getRiskCode())){
+                //商业险保险起期
+                basePartReqDTO.setSyEffectiveDate(risk.getStartDate());
+                //商业险保险止期
+                basePartReqDTO.setSyExpireDate(risk.getEndDate());
+                //商业险及时生效
+                basePartReqDTO.setSyImmeffMrk("0");
+                //商业险产品编码
+                basePartReqDTO.setSyProdNo(CProdNo.SY.getCode());
+                //商业折扣是否下浮标志
+                basePartReqDTO.setFixedDropDiscount("0");
+            }
+        });
+
+
+        //期望折扣
+        basePartReqDTO.setSyExpectedFloatingRate("1.5");
+        //收费方式
+        basePartReqDTO.setFinType("10");//默认是10  二维码收款
+        //协商实际价值
+        basePartReqDTO.setConsultPurchaseValue(odr1016Response.getResult().getActualValue());
+        this.body.setBasePartReq(basePartReqDTO);
+    }
+
+    //交强险 车船税信息
+    public void setVehicleTaxation(List<RiskInfoVo> riskInfoVos){
+        BodyDTO.vehicleTaxationDTO vehicleTaxationDTO = new BodyDTO.vehicleTaxationDTO();
+        //缴税方式
+        vehicleTaxationDTO.setTaxPaytaxTyp(T5002.getCode());
+
+        riskInfoVos.forEach(risk->{
+            if("0507".equals(risk.getRiskCode())) {
+                //交强险保险起期
+                vehicleTaxationDTO.setTaxEffBgnTm(risk.getStartDate());
+                //交强险保险止期
+                vehicleTaxationDTO.setTaxEffEndTm(risk.getEndDate());
+            }
+        });
+        this.body.setVehicleTaxation(vehicleTaxationDTO);
+    }
+
+    //设置 特殊属性
+    public void setSpecialInfo(List<RiskInfoVo> riskInfoVos){
+        BodyDTO.specialInfoDTO specialInfoDTO = new BodyDTO.specialInfoDTO();
+        //车险交商联合出单类型
+        if(riskInfoVos.size() > 1){
+            //交商联合
+            specialInfoDTO.setVehicleUsageCde(CUsageCde.U03.getCode().toString());
+        }else if(riskInfoVos.size() == 1) {
+            if (riskInfoVos.get(0).getRiskCode().equals(InsuranceRisk.BUSINESS_CODE)) {
+                //单商业
+                specialInfoDTO.setVehicleUsageCde(CUsageCde.U03.getCode().toString());
+            } else {
+                // 单交强
+                specialInfoDTO.setVehicleUsageCde(CUsageCdeJq.UJQ364002001.getCode().toString());
+            }
+        }
+//        specialInfoDTO.setBusiServiceCode("1958202300001A");
+        this.body.specialInfo = specialInfoDTO;
+    }
+    private CIndemLmtLvl getCPayTaxType(KindInfoVo kindInfoVo){
+        CIndemLmtLvl[] values = CIndemLmtLvl.values();
+        for(CIndemLmtLvl item : values){
+            if(item.getAmount().equals(kindInfoVo.getAmount())){
+                return item;
+            }
+        }
+        return null;
+    }
+
+    private NDeductionRate getNDeductionRate(Double rate){
+        NDeductionRate[] values = NDeductionRate.values();
+        for(NDeductionRate item : values){
+            if(Objects.equals(item.getRate(), rate)){
+                return item;
+            }
+        }
+        return null;
+    }
+
+    private CvrgCIndemLmtLvl getCvrgCIndemLmtLvl(KindInfoVo kindInfoVo){
+        CvrgCIndemLmtLvl[] values = CvrgCIndemLmtLvl.values();
+        for(CvrgCIndemLmtLvl item : values){
+            if(item.getAmount() == (int)(kindInfoVo.getAmount())){
+                return item;
+            }
+        }
+        return null;
+    }
+
+    //商业险别信息(列表)
+    public void setCoverageList(List<KindInfoVo> kindInfoVos,BaseQuoteInfoVo quoteInfoVo,ODR1016Response odr1016Response){
+        ArrayList<BodyDTO.coverageListDTO> coverageListDTOS = new ArrayList<>();
+        Integer seatCount = Integer.parseInt(quoteInfoVo.getCarInfo().getSeatCount());
+
+        kindInfoVos.forEach(kindInfoVo->{
+            //车损险
+            if(kindInfoVo.getKindCode().equals(CCvrgNo.NO030006.getInsurCode())){
+                //保额
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO030006.getCode());
+                coverageListDTO.setLossNAmt(odr1016Response.getResult().getActualValue());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035601.getInsurCode())){
+                //绝对免赔率
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035601.getCode());
+                coverageListDTO.setLossNDeductionRate(String.valueOf(Double.parseDouble(kindInfoVo.getDeductibleRate()) / 100));
+                coverageListDTOS.add(coverageListDTO);
+            } else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO030018.getInsurCode())) {
+                //第三者责任险
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO030018.getCode());
+                //限额档次
+                coverageListDTO.setThreeCIndemLmtLvl(getCPayTaxType(kindInfoVo).getCode());
+                //档次对应限额
+                coverageListDTO.setThreeNIndemLmt(kindInfoVo.getAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035602.getInsurCode())){
+                //三者绝对免赔率
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035602.getCode());
+                NDeductionRate nDeductionRate = getNDeductionRate(Double.parseDouble(kindInfoVo.getDeductibleRate()) / 100);
+                coverageListDTO.setThreeNDeductionRate(nDeductionRate.getCode());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO032601.getInsurCode())) {
+                //车身划痕险
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO032601.getCode());
+                coverageListDTO.setCarSscratchCIndemLmtLvl(getCvrgCIndemLmtLvl(kindInfoVo).getCode());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035603.getInsurCode())) {
+                //绝对免赔率特约险(司机)
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035603.getCode());
+                NDeductionRate nDeductionRate = getNDeductionRate(Double.parseDouble(kindInfoVo.getDeductibleRate()) / 100);
+                coverageListDTO.setDriverNDeductionRate(nDeductionRate.getCode());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035604.getInsurCode())) {
+                //绝对免赔率特约险(乘客)
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035604.getCode());
+                NDeductionRate nDeductionRate = getNDeductionRate(Double.parseDouble(kindInfoVo.getDeductibleRate()) / 100);
+                coverageListDTO.setPassengerNDeductionRate(nDeductionRate.getCode());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO030001.getInsurCode())) {
+                //车上人员责任保险(司机)
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO030001.getCode());
+                coverageListDTO.setDriverNLiabDaysLmt("1");
+                coverageListDTO.setDriverNPerAmt(kindInfoVo.getAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO033614.getInsurCode())) {
+                //"法定节假日限额翻倍险
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO033614.getCode());
+                coverageListDTO.setThreeQuotaAmt(kindInfoVo.getAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO030009.getInsurCode())) {
+                //车上人员责任保险(乘客)
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO030009.getCode());
+                coverageListDTO.setPassengerNLiabDaysLmt(seatCount- 1 + "");
+                coverageListDTO.setPassengerNPerAmt(kindInfoVo.getUnitAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035613.getInsurCode())){
+                //附加医保外用药责任险(机动车车上人员责任保险(司机))
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035613.getCode());
+                coverageListDTO.setDriverNLiabDaysLmt("1");
+                coverageListDTO.setDriverMedicalAmt(kindInfoVo.getAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }else if(kindInfoVo.getKindCode().equals(CCvrgNo.NO035614.getInsurCode())){
+                //附加医保外用药责任险(机动车车上人员责任保险(乘客))
+                BodyDTO.coverageListDTO coverageListDTO = new BodyDTO.coverageListDTO();
+                coverageListDTO.setCvrgNo(CCvrgNo.NO035614.getCode());
+                coverageListDTO.setPassengerNLiabDaysLmt(seatCount - 1 + "");
+                coverageListDTO.setPassengerMoralDamageAmt(kindInfoVo.getUnitAmount());
+                coverageListDTOS.add(coverageListDTO);
+            }
+        });
+        this.body.setCoverageList(coverageListDTOS);
+    }
+
+    //验车情况
+    public void setInspectionInfo(){
+        if(Objects.isNull(body.inspectionInfo))
+        {
+            body.inspectionInfo = new BodyDTO.inspectionInfoDTO();
+        }
+//        //验车情况
+//        body.inspectionInfo.setVehicleInspectionCde(CInspectionCde.INS3.getCode().toString());
+//        //免验原因
+//        body.inspectionInfo.setVehicleResvTxt1(CResvTxt.RESC3.getCode().toString());
+//        //验车时间
+//        body.inspectionInfo.setVehicleInspectTm(new DateTime().toDateStr());
+//        //验车人
+//        body.inspectionInfo.setVehicleInspectorNme("张英");
+//        //验车结果
+//        body.inspectionInfo.setVehicleInspectRec(INSREC1.getCode().toString());
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = 7312734581391918243L;
+        //业务订单号
+        @JsonProperty("orderNo")
+        private String orderNo;
+        //车险交商联合出单类型
+        @JsonProperty("motorJointType")
+        private String motorJointType;
+        //基本信息
+        @JsonProperty("basePartReq")
+        private basePartReqDTO basePartReq;
+        //【商业险必传】商业险别信息(列表)
+        @JsonProperty("coverageList")
+        private List<coverageListDTO> coverageList;
+
+        //【交强险必传】车船税信息
+        @JsonProperty("vehicleTaxation")
+        private vehicleTaxationDTO vehicleTaxation;
+
+        //商业平台车型信息
+        @JsonProperty("vehicleInfo")
+        private vehicleInfoDTO vehicleInfo;
+
+        //商业平台车型信息
+        @JsonProperty("nvhPolicyList")
+        private nvhPolicyListDTO nvhPolicyList;
+
+        //验车情况
+        @JsonProperty("inspectionInfo")
+        private inspectionInfoDTO inspectionInfo;
+
+        //特殊字段信息
+        @JsonProperty("specialInfo")
+        private specialInfoDTO specialInfo;
+
+
+
+        //基本信息
+        @Data
+        public static class basePartReqDTO implements Serializable{
+            //交强险保险起期
+            @JsonProperty("jqEffectiveDate")
+            private String jqEffectiveDate;
+            //交强险保险止期
+            @JsonProperty("jqExpireDate")
+            private String jqExpireDate;
+            //交强险即时生效
+            @JsonProperty("jqImmeffMrk")
+            private String jqImmeffMrk;
+            //商业险保险起期
+            @JsonProperty("syEffectiveDate")
+            private String syEffectiveDate;
+            //商业险保险止期
+            @JsonProperty("syExpireDate")
+            private String syExpireDate;
+            //商业险即时生效
+            @JsonProperty("syImmeffMrk")
+            private String syImmeffMrk;
+            //商业险期望折扣
+            @JsonProperty("syExpectedFloatingRate")
+            private String syExpectedFloatingRate;
+            //商业折扣是否下浮标志
+            @JsonProperty("fixedDropDiscount")
+            private String fixedDropDiscount;
+            //交强险产品编码
+            @JsonProperty("jqProdNo")
+            private String jqProdNo;
+            //商业险产品编码
+            @JsonProperty("syProdNo")
+            private String syProdNo;
+            //收费方式
+            @JsonProperty("finType")
+            private String finType;
+            //协商实际价值
+            @JsonProperty("consultPurchaseValue")
+            private Double consultPurchaseValue;
+            //告知
+            @JsonProperty("remark")
+            private String remark;
+
+
+        }
+
+        //【商业险必传】商业险别信息(列表)
+        @Data
+        public static class coverageListDTO implements Serializable{
+            private static final long serialVersionUID = 1L;
+            //险别
+            @JsonProperty("cvrgNo")
+            private String cvrgNo;
+            //【车损险】保额
+            @JsonProperty("lossNAmt")
+            private Double lossNAmt;
+            //【车辆损失险】免赔额
+            @JsonProperty("lossNoPayAmt")
+            private String lossNoPayAmt;
+            //【车损险】绝对免赔率
+            @JsonProperty("lossNDeductionRate")
+            private String lossNDeductionRate;
+            //【车辆损失险】免赔优惠
+            @JsonProperty("lossDeductible")
+            private String lossDeductible;
+            //【第三者责任险】限额档次
+            @JsonProperty("threeCIndemLmtLvl")
+            private String threeCIndemLmtLvl;
+            //【第三者责任险】绝对免赔率
+            @JsonProperty("threeNDeductionRate")
+            private String threeNDeductionRate;
+            //【第三者责任险】档次对应限额
+            @JsonProperty("threeNIndemLmt")
+            private Double threeNIndemLmt;
+            //【附加车身划痕损失险】限额档次
+            @JsonProperty("carSscratchCIndemLmtLvl")
+            private String carSscratchCIndemLmtLvl;
+            //【车上责任险】司机绝对免赔率
+            @JsonProperty("driverNDeductionRate")
+            private String driverNDeductionRate;
+            //【车上责任险】乘客绝对免赔率
+            @JsonProperty("passengerNDeductionRate")
+            private String passengerNDeductionRate;
+            //【车上责任险】司机座位数
+            @JsonProperty("driverNLiabDaysLmt")
+            private String driverNLiabDaysLmt;
+            //【车上责任险】乘客座位数
+            @JsonProperty("passengerNLiabDaysLmt")
+            private String passengerNLiabDaysLmt;
+            //【车上责任险】乘客每人保额
+            @JsonProperty("passengerNPerAmt")
+            private Double passengerNPerAmt;
+            //【盗抢险】特种车绝对免赔率
+            @JsonProperty("therfNDeductionRate")
+            private String therfNDeductionRate;
+            //【盗抢险】保额
+            @JsonProperty("therfNNAmt")
+            private String therfNNAmt;
+            //【附加新增加设备损失险】保额
+            @JsonProperty("deviceNAmt")
+            private String deviceNAmt;
+            //【附加修理期间费用补偿险 】天数
+            @JsonProperty("repairDays")
+            private String repairDays;
+            //【附加修理期间费用补偿险 】保额
+            @JsonProperty("repairNAmt")
+            private String repairNAmt;
+            //【医疗责任】乘客每人保额
+            @JsonProperty("medicalLiabilityNPerAmt")
+            private String medicalLiabilityNPerAmt;
+            //【增值服务】车辆安全检测服务次数
+            @JsonProperty("vehicleSafetyInspectionServices")
+            private String vehicleSafetyInspectionServices;
+            //【增值服务】代为送检服务次数
+            @JsonProperty("inspectionServiceTimes")
+            private String inspectionServiceTimes;
+            //【增值服务】代为驾驶服务次数
+            @JsonProperty("drivingServiceTimes")
+            private String drivingServiceTimes;
+            //【增值服务】道路救援服务次数
+            @JsonProperty("roadRescueServices")
+            private String roadRescueServices;
+            //【车上责任险】司机每人保额
+            @JsonProperty("driverNPerAmt")
+            private Double driverNPerAmt;
+            //【车上责任保险(乘客)】附加精神损害抚慰金责任险
+            @JsonProperty("passengerMoralDamageAmt")
+            private Double passengerMoralDamageAmt;
+            //【车上人员责任保险(司机)】附加医保外医疗费用责任险
+            @JsonProperty("driverMedicalAmt")
+            private Double driverMedicalAmt;
+            //【车上人员责任保险(司机)】附加精神损害抚慰金责任险
+            @JsonProperty("driverMoralDamageAmt")
+            private String driverMoralDamageAmt;
+            //【第三者责任保险】附加精神损害抚慰金责任险
+            @JsonProperty("threeMoralDamageAmt")
+            private String threeMoralDamageAmt;
+            //【第三者责任保险】附加医保外医疗费用责任险
+            @JsonProperty("threeMedicalAmt")
+            private Double threeMedicalAmt;
+            //附加法定节假日限额翻倍险
+            @JsonProperty("threeQuotaAmt")
+            private Double threeQuotaAmt;
+            //附加车轮单独损失险
+            @JsonProperty("wheelAmt")
+            private String wheelAmt;
+            //附加外部电网故障损失险
+            @JsonProperty("gridFaultLossAmt")
+            private String gridFaultLossAmt;
+            //附加车上货物责任险
+            @JsonProperty("goodsLiabilityAmt")
+            private String goodsLiabilityAmt;
+
+
+        }
+
+        //【交强险必传】车船税信息
+        @Data
+        public static class vehicleTaxationDTO implements  Serializable{
+            private static final long serialVersionUID = 1L;
+
+            //缴税方式
+            @JsonProperty("taxPaytaxTyp")
+            private String taxPaytaxTyp;
+
+            //车船税有效起期
+            @JsonProperty("taxEffBgnTm")
+            private String taxEffBgnTm;
+
+            //车船税有效止期
+            @JsonProperty("taxEffEndTm")
+            private String taxEffEndTm;
+
+            //减免税原因(平台)
+            @JsonProperty("taxTaxfreeVhltyp")
+            private String taxTaxfreeVhltyp;
+
+            //减免税方案(平台)
+            @JsonProperty("taxFreeRedTaxWay")
+            private String taxFreeRedTaxWay;
+
+            //减免比例(平台)
+            @JsonProperty("taxFreeRedTaxPro")
+            private String taxFreeRedTaxPro;
+
+            //减税金额(平台)
+            @JsonProperty("taxAbateAmt")
+            private String taxAbateAmt;
+
+            //减免税凭证号(平台)
+            @JsonProperty("taxFreeCertNo")
+            private String taxFreeCertNo;
+
+            //减税税务机关代码(平台)
+            @JsonProperty("taxFreeRedTaxOrgCde")
+            private String taxFreeRedTaxOrgCde;
+
+            //免税税务机关名称(平台)
+            @JsonProperty("taxFreeTaxOrg")
+            private String taxFreeTaxOrg;
+
+            //完税税务机关代码(平台)
+            @JsonProperty("taxComTaxOrgCde")
+            private String taxComTaxOrgCde;
+
+            //完税税务机关名称(平台)
+            @JsonProperty("taxComTaxOrg")
+            private String taxComTaxOrg;
+
+            //完税凭证号(平台)
+            @JsonProperty("taxPaymentRecptNo")
+            private String taxPaymentRecptNo;
+
+            //完税凭证填发日期(平台)
+            @JsonProperty("taxDocumentDate")
+            private String taxDocumentDate;
+
+            //开具完税凭证地区代码(平台)
+            @JsonProperty("taxPaidAreaCode")
+            private String taxPaidAreaCode;
+
+            //外地开具税务机关(北京)
+            @JsonProperty("taxDeptNonlocal")
+            private String taxDeptNonlocal;
+
+            //缴税车辆类型
+            @JsonProperty("taxdptVhltyp")
+            private String taxdptVhltyp;
+
+            //纳税人识别号
+            @JsonProperty("taxTaxpayerId")
+            private String taxTaxpayerId;
+
+        }
+
+        //商业平台车型信息
+        @Data
+        public static class vehicleInfoDTO implements  Serializable{
+            @JsonProperty("vehlcleCode")
+            private String vehlcleCode;
+
+            @JsonProperty("vehlcleModeCode")
+            private String vehlcleModeCode;
+
+            @JsonProperty("vehicleStyleUniqueId")
+            private String vehicleStyleUniqueId;
+
+            @JsonProperty("vehicleIndustryModelCode")
+            private String vehicleIndustryModelCode;
+
+
+        }
+
+        @Data
+        public static class nvhPolicyListDTO implements  Serializable{
+            @JsonProperty("nvhlProdCode")
+            private String nvhlProdCode;
+            @JsonProperty("nvhlSchemeCode")
+            private String nvhlSchemeCode;
+            @JsonProperty("nvhlEffectiveDate")
+            private String nvhlEffectiveDate;
+            @JsonProperty("nvhlExpireDate")
+            private String nvhlExpireDate;
+            @JsonProperty("noVhlSum")
+            private String noVhlSum;
+            @JsonProperty("nvhlPrm")
+            private String nvhlPrm;
+            @JsonProperty("nvhlSumPrm")
+            private String nvhlSumPrm;
+            @JsonProperty("nvGoodsCode")
+            private String nvGoodsCode;
+            @JsonProperty("nvDutyRiskCode")
+            private String nvDutyRiskCode;
+            @JsonProperty("nv_prm")
+            private String nv_prm;
+            @JsonProperty("nv_amt")
+            private String nv_amt;
+
+        }
+
+        @Data
+        public static class inspectionInfoDTO implements  Serializable{
+
+            //验车情况
+            @JsonProperty("vehicleInspectionCde")
+            private String vehicleInspectionCde;
+
+            //验车时间
+            @JsonProperty("vehicleInspectTm")
+            private String vehicleInspectTm;
+
+            //验车人
+            @JsonProperty("vehicleInspectorNme")
+            private String vehicleInspectorNme;
+
+            //验车结果
+            @JsonProperty("vehicleInspectRec")
+            private String vehicleInspectRec;
+
+            //免验原因
+            @JsonProperty("vehicleResvTxt1")
+            private String vehicleResvTxt1;
+
+            //损伤部位
+            @JsonProperty("damagedSite")
+            private String damagedSite;
+
+        }
+
+        @Data
+        public static class specialInfoDTO implements  Serializable{
+
+            //使用性质
+            @JsonProperty("vehicleUsageCde")
+            private String vehicleUsageCde;
+
+            //业务识别号
+            @JsonProperty("busiServiceCode")
+            private String busiServiceCode;
+
+            //员工车
+            @JsonProperty("staffCar")
+            private String staffCar;
+
+        }
+    }
+
+
+}

+ 111 - 12
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1010Request.java

@@ -1,13 +1,22 @@
 package com.ydtech.modules.order.entity.api.dajia.request;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.CChannelSrc;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import com.ydtech.modules.order.entity.api.dajia.response.ODR1009Response;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -16,7 +25,7 @@ import java.util.List;
  * @date: 2023/11/14 17:53
  **/
 @EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
+//@NoArgsConstructorctor
 @Data
 public class ODR1010Request extends DaJiaBaseRequest {
 
@@ -25,6 +34,22 @@ public class ODR1010Request extends DaJiaBaseRequest {
     @JsonProperty("body")
     private BodyDTO body;
 
+    public ODR1010Request(String orderNo, String busiId, DaJiaConfigureParameters daJiaConfigureParameters, ODR1009Response.ResultDTO odr1009Response, InsOrders insOrders) {
+        super("TQBD", ServiceCode.ODR1010.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setOrderNo( orderNo );
+        //业务信息
+        setBusinessInfo(busiId,daJiaConfigureParameters);
+        //交强特约信息
+        setJqSpecialEngageList(odr1009Response.getJqSpecialEngageList());
+        //商业特约信息
+        setSySpecialEngageList(odr1009Response.getSySpecialEngageList());
+        //校验信息
+        setCheckInfo(insOrders);
+    }
+
     @NoArgsConstructor
     @Data
     public static class BodyDTO implements Serializable {
@@ -43,16 +68,14 @@ public class ODR1010Request extends DaJiaBaseRequest {
         @JsonProperty("orderNo")
         private String orderNo;
         @JsonProperty("sySpecialEngageList")
-        private List<SySpecialEngageListDTO> sySpecialEngageList;
+        private List<ODR1009Response.ResultDTO.SySpecialEngageListDTO> sySpecialEngageList;
         @JsonProperty("undrOpn")
         private String undrOpn;
 
         @NoArgsConstructor
         @Data
         public static class BusinessInfoDTO implements Serializable {
-
             private static final long serialVersionUID = -8856499478348312937L;
-
             @JsonProperty("busiAgentNme")
             private String busiAgentNme;
             @JsonProperty("busiBrkrCde")
@@ -70,7 +93,7 @@ public class ODR1010Request extends DaJiaBaseRequest {
             @JsonProperty("busiDataFlag")
             private String busiDataFlag;
             @JsonProperty("busiDataSrc")
-            private Integer busiDataSrc;
+            private String busiDataSrc;
             @JsonProperty("busiDptCde")
             private String busiDptCde;
             @JsonProperty("busiGarageCode")
@@ -82,7 +105,7 @@ public class ODR1010Request extends DaJiaBaseRequest {
             @JsonProperty("busiGrantDptNme")
             private String busiGrantDptNme;
             @JsonProperty("busiId")
-            private Long busiId;
+            private String busiId;
             @JsonProperty("busiOpdpt")
             private String busiOpdpt;
             @JsonProperty("busiOprCde")
@@ -98,7 +121,7 @@ public class ODR1010Request extends DaJiaBaseRequest {
             @JsonProperty("busiServiceCode")
             private String busiServiceCode;
             @JsonProperty("busiSlsCde")
-            private Integer busiSlsCde;
+            private String busiSlsCde;
             @JsonProperty("busiSlsId")
             private Long busiSlsId;
             @JsonProperty("busiSlsNme")
@@ -111,15 +134,15 @@ public class ODR1010Request extends DaJiaBaseRequest {
 
             private static final long serialVersionUID = -6205288448953625502L;
             @JsonProperty("applicantCCertfCde")
-            private Long applicantCCertfCde;
+            private String applicantCCertfCde;
             @JsonProperty("applicantMobile")
-            private Long applicantMobile;
+            private String applicantMobile;
             @JsonProperty("applicantNme")
             private String applicantNme;
             @JsonProperty("insuredCertfCde")
-            private Long insuredCertfCde;
+            private String insuredCertfCde;
             @JsonProperty("insuredMobile")
-            private Long insuredMobile;
+            private String insuredMobile;
             @JsonProperty("insuredNme")
             private String insuredNme;
             @JsonProperty("vehicleFrmNo")
@@ -142,7 +165,6 @@ public class ODR1010Request extends DaJiaBaseRequest {
         @NoArgsConstructor
         @Data
         public static class SySpecialEngageListDTO implements Serializable {
-
             private static final long serialVersionUID = 6989142913059247016L;
             @JsonProperty("specialClausesCode")
             private String specialClausesCode;
@@ -150,4 +172,81 @@ public class ODR1010Request extends DaJiaBaseRequest {
             private String specialClausesContent;
         }
     }
+
+    //业务信息
+    public void setBusinessInfo(String busiId,DaJiaConfigureParameters daJiaConfigureParameters){
+        if(Objects.isNull(body.businessInfo)){
+            body.businessInfo = new BodyDTO.BusinessInfoDTO();
+        }
+        //业务ID
+        body.businessInfo.setBusiId(busiId);
+        //登录机构
+        body.businessInfo.setBusiOpdpt(daJiaConfigureParameters.getLoginInstitution());
+        //出单口
+        body.businessInfo.setBusiDptCde(daJiaConfigureParameters.getIssuingInstitution());
+        //代理人编码
+        body.businessInfo.setBusiBrkrCde(daJiaConfigureParameters.getAgentCode());
+        //操作员代码
+        body.businessInfo.setBusiOprCde(daJiaConfigureParameters.getOperatorCode());
+        //操作员姓名
+        body.businessInfo.setBusiOprNme(daJiaConfigureParameters.getOperatorName());
+        //业务来源
+        body.businessInfo.setBusiBsnsTyp(19002);
+        //业务员代码
+        body.businessInfo.setBusiSlsCde(daJiaConfigureParameters.getSalespersonCode());
+        //推荐人代码
+        body.businessInfo.setBusiRecommendCde(daJiaConfigureParameters.getOperatorCode());
+        //推荐子渠道
+        body.businessInfo.setBusiRecSubChannel(daJiaConfigureParameters.getRecommendedSubChannels());
+        //渠道
+        body.businessInfo.setBusiChannelSrc(CChannelSrc.CHANNEL0.getCode().toString());
+        //设置一级来源
+        body.businessInfo.setBusiDataSrc("G");
+        //设置二级来源
+        body.businessInfo.setBusiDataFlag("TQDL");
+    }
+
+    //交强特约信息
+    public void setJqSpecialEngageList(List<BodyDTO.JqSpecialEngageListDTO> jqSpecialEngageList){
+        if(Objects.isNull(body.jqSpecialEngageList)){
+            body.jqSpecialEngageList = new ArrayList<BodyDTO.JqSpecialEngageListDTO>();
+        }
+        body.jqSpecialEngageList = jqSpecialEngageList;
+    }
+
+    //商业特约信息
+    public void setSySpecialEngageList(List<ODR1009Response.ResultDTO.SySpecialEngageListDTO> sySpecialEngageList){
+        if(Objects.isNull(body.sySpecialEngageList)){
+            body.sySpecialEngageList = new ArrayList<ODR1009Response.ResultDTO.SySpecialEngageListDTO>();
+        }
+        body.sySpecialEngageList = sySpecialEngageList;
+    }
+
+    //校验信息
+    public void setCheckInfo(InsOrders insOrders){
+        if(Objects.isNull(body.checkInfo)){
+            body.checkInfo = new BodyDTO.CheckInfoDTO();
+        }
+        //车牌号
+        if(insOrders.getCarinfo().getBoolean("noLicenseFlag")){
+            body.checkInfo.setVehiclePlateNo(insOrders.getLicenseno());
+        }
+
+        //车架号
+        body.checkInfo.setVehicleFrmNo(insOrders.getFrameno());
+        //投保人名称
+        body.checkInfo.setApplicantNme(insOrders.getApplyinfo().getString("name"));
+        //投保人证件号码
+        body.checkInfo.setApplicantCCertfCde(insOrders.getApplyinfo().getString("identifyNumber"));
+        //投保人手机号
+        body.checkInfo.setApplicantMobile(insOrders.getApplyinfo().getString("mobile"));
+        //被保人名称
+        body.checkInfo.setInsuredNme(insOrders.getInsureinfo().getString("name"));
+        //被保人证件号码
+        body.checkInfo.setInsuredCertfCde(insOrders.getInsureinfo().getString("identifyNumber"));
+        //被保人手机号
+        body.checkInfo.setInsuredMobile(insOrders.getInsureinfo().getString("mobile"));
+
+    }
+
 }

+ 53 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1011Request.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @version 
+ * @description: 大家财险 非个人申请支付接口 请求参数
+ * @author: wenks 
+ * @date: 2023/11/14 17:43
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class ODR1011Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -7892713641287949312L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public ODR1011Request(String orderNo, DaJiaConfigureParameters daJiaConfigureParameters) {
+        super("TQBD", ServiceCode.ODR1014.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(orderNo);
+        body.setOperCde(daJiaConfigureParameters.getOperatorCode());
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = -4592159874022566051L;
+
+        @JsonProperty("operCde")
+        private String operCde;
+
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+    }
+}

+ 48 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1012Request.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @version 
+ * @description: 大家财险 非个人申请支付接口 请求参数
+ * @author: wenks 
+ * @date: 2023/11/14 17:43
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class ODR1012Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -7892713641287949312L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public ODR1012Request(String orderNo) {
+        super("TQBD", ServiceCode.ODR1014.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(orderNo);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = -4592159874022566051L;
+
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+    }
+}

+ 44 - 2
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1013Request.java

@@ -1,14 +1,20 @@
 package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
-
+import java.util.Objects;
 
 
 /**
@@ -19,7 +25,7 @@ import java.util.List;
  **/
 
 @EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
+//@NoArgsConstructor
 @Data
 public class ODR1013Request extends DaJiaBaseRequest {
 
@@ -28,6 +34,42 @@ public class ODR1013Request extends DaJiaBaseRequest {
     @JsonProperty("body")
     private BodyDTO body;
 
+    public ODR1013Request(InsAreaCompany insAreaCompany, DaJiaConfigureParameters daJiaConfigureParameters, List<InsTaskImagesBase64> insUploadImagesDtos) {
+        super("TQBD", ServiceCode.ODR1013.getCode());
+        if(Objects.isNull(body)){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(insAreaCompany.getInsOrderNo());
+        body.setJqProposalNo(insAreaCompany.getJqapplyno());
+        body.setSyProposalNo(insAreaCompany.getSyapplyno());
+        //业务类型  车险 默认80
+        body.setAppType("80");
+        //资料类型  车险 默认 8001
+        body.setDataId(8001);
+        //操作机构
+        body.setOrgNum(daJiaConfigureParameters.getLoginInstitution());
+        //操作员编码
+        body.setOprId(daJiaConfigureParameters.getOperatorCode());
+        //上传类型  1文件流 2ftp
+        body.setUpType(1);
+
+        //设置图片信息
+        setImageList(insUploadImagesDtos);
+
+    }
+
+    public void setImageList(List<InsTaskImagesBase64> insTaskImagesBase64s){
+        this.body.imageList = new ArrayList<BodyDTO.ImageListDTO>();
+
+        insTaskImagesBase64s.forEach(item->{
+            BodyDTO.ImageListDTO imageListDTO = new BodyDTO.ImageListDTO();
+            imageListDTO.setBase64Img(item.getBase64String());
+            imageListDTO.setFiledSuffix("jpg");
+            imageListDTO.setImgName(item.getFileName());
+            this.body.imageList.add(imageListDTO);
+        });
+    }
+
     @NoArgsConstructor
     @Data
     public static class BodyDTO implements Serializable {

+ 49 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1014Request.java

@@ -0,0 +1,49 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * @version 
+ * @description: 大家财险 业务订单撤回接口 请求参数
+ * @author: wenks 
+ * @date: 2023/11/14 17:43
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class ODR1014Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -7892713641287949312L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public ODR1014Request(String orderNo) {
+        super("TQBD", ServiceCode.ODR1014.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(orderNo);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = -4592159874022566051L;
+
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+    }
+}

+ 22 - 3
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1016Request.java

@@ -2,27 +2,46 @@ package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 @EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
+//@NoArgsConstructor
 @Data
 public class ODR1016Request extends DaJiaBaseRequest {
     private static final long serialVersionUID = 8872610170969597008L;
 
     @JsonProperty("body")
-    private BodyDTO body;
+    private bodyDTO body;
+
+    /**
+     *
+     * @param orderNo 业务订单号
+     * @param effectiveDate 起保日期
+     */
+    public ODR1016Request(String orderNo,String effectiveDate) {
+        super("TQBD", ServiceCode.ODR1016.getCode());
+        if(Objects.isNull(body)){
+            body = new bodyDTO();
+        }
+        body.setOrderNo(orderNo);
+        body.setEffectiveDate(effectiveDate);
+    }
 
     @NoArgsConstructor
     @Data
-    public static class BodyDTO implements Serializable {
+    public static class bodyDTO implements Serializable {
         private static final long serialVersionUID = -5907748356987039351L;
+        //起保日期
         @JsonProperty("effectiveDate")
         private String effectiveDate;
+
+        //业务订单号
         @JsonProperty("orderNo")
         private String orderNo;
     }

+ 51 - 19
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR2009Request.java

@@ -1,12 +1,18 @@
 package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.ins.model.vo.QuoteInfoVo;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -15,31 +21,57 @@ import java.util.List;
  * @date: 2023/11/14 16:28
  **/
 @EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
+//@NoArgsConstructor
 @Data
 public class ODR2009Request extends DaJiaBaseRequest{
 
-    private static final long serialVersionUID = 243809151769159227L;
-
-    @JsonProperty("cdptCde")
-    private String cdptCde;
-
-    @JsonProperty("engineNo")
-    private String engineNo;
 
-    @JsonProperty("licensePlateNo")
-    private String licensePlateNo;
-
-    @JsonProperty("orderNo")
-    private String orderNo;
+    private static final long serialVersionUID = 243809151769159227L;
 
-    @JsonProperty("vehicleIdList")
-    private List<String> vehicleIdList;
+    @JsonProperty("body")
+    private BodyDTO body;
 
-    @JsonProperty("vehicleName")
-    private String vehicleName;
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+        //出单口
+        @JsonProperty("cdptCde")
+        private String cdptCde;
+        //发动机号
+        @JsonProperty("engineNo")
+        private String engineNo;
+        //号牌号码
+        @JsonProperty("licensePlateNo")
+        private String licensePlateNo;
+        //业务订单号
+        @JsonProperty("orderNo")
+        private String orderNo;
+        //车型编码列表
+        @JsonProperty("vehicleIdList")
+        private List<String> vehicleIdList;
+        //车型名称
+        @JsonProperty("vehicleName")
+        private String vehicleName;
+        //车辆识别代号(车架号/VIN码)
+        @JsonProperty("vin")
+        private String vin;
+    }
 
-    @JsonProperty("vin")
-    private String vin;
+    public ODR2009Request(String orderNo, BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters) {
+        super("TQBD", ServiceCode.ODR2009.getCode());
+        if(Objects.isNull(this.body)){
+            this.body = new BodyDTO();
+        }
+        //订单号
+        this.body.orderNo = orderNo;
+        //车型名称
+        this.body.vin = quoteInfoVo.getCarInfo().getVinNo();
+        //发动机号码
+        this.body.engineNo = quoteInfoVo.getCarInfo().getEngineNo();
+        //号牌号码
+        this.body.licensePlateNo = quoteInfoVo.getCarInfo().getLicenseNo();
+        //出单口
+        this.body.cdptCde = daJiaConfigureParameters.getIssuingInstitution();
 
+    }
 }

+ 48 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR2010Request.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @version 
+ * @description: 大家财险 查询订单状态轨迹 请求参数
+ * @author: wenks 
+ * @date: 2023/11/14 17:43
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class ODR2010Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -7892713641287949312L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public ODR2010Request(String orderNo) {
+        super("TQBD", ServiceCode.ODR1014.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setOrderNo(orderNo);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = -4592159874022566051L;
+
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+    }
+}

+ 49 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/VHLINS2005Request.java

@@ -0,0 +1,49 @@
+package com.ydtech.modules.order.entity.api.dajia.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
+import com.ydtech.modules.order.entity.api.dajia.constants.ServiceCode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @version 
+ * @description: 大家财险 获取保单 请求参数
+ * @author: wenks 
+ * @date: 2023/11/14 17:43
+ **/
+
+@EqualsAndHashCode(callSuper = true)
+//@NoArgsConstructor
+@Data
+public class VHLINS2005Request extends DaJiaBaseRequest {
+
+    private static final long serialVersionUID = -7892713641287949312L;
+
+    @JsonProperty("body")
+    private BodyDTO body;
+
+    public VHLINS2005Request(String[] plyNos) {
+        super("TQBD", ServiceCode.VHL_INS2005.getCode());
+        if(body == null){
+            body = new BodyDTO();
+        }
+        body.setPlyNo(plyNos);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class BodyDTO implements Serializable {
+
+        private static final long serialVersionUID = -4592159874022566051L;
+
+        //保单号
+        @JsonProperty("plyNo")
+        private String[] plyNo;
+
+    }
+}

+ 4 - 4
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1007Response.java

@@ -20,14 +20,14 @@ import java.util.List;
 @Data
 public class ODR1007Response extends DaJiaBaseResponse {
 
-    private static final long serialVersionUID = 8642733096959304037L;
+    private static final long serialVersionUID = -8058364300759565052L;
+    @JsonProperty("result")
+    private ResultDTO result;
 
-    @JsonProperty("body")
-    private List<BodyDTO> body;
 
     @NoArgsConstructor
     @Data
-    public static class BodyDTO implements Serializable {
+    public static class ResultDTO implements Serializable {
 
         private static final long serialVersionUID = 7893426766810061120L;
 

+ 3 - 3
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1008Response.java

@@ -13,12 +13,12 @@ public class ODR1008Response extends DaJiaBaseResponse {
 
     private static final long serialVersionUID = -1833711374434760893L;
 
-    @JsonProperty("body")
-    private BodyDTO body;
+    @JsonProperty("result")
+    private ResultDTO result;
 
     @NoArgsConstructor
     @Data
-    public static class BodyDTO {
+    public static class ResultDTO {
         @JsonProperty("orderStatus")
         private Object orderStatus;
         @JsonProperty("orderMessage")

+ 297 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1009Response.java

@@ -0,0 +1,297 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import com.ydtech.modules.order.entity.api.dajia.request.ODR1010Request;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ODR1009Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = -1833711374434760893L;
+
+
+    @JsonProperty("result")
+    private ResultDTO result;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResultDTO {
+        @JsonProperty("jqAppStatus")
+        private Object jqAppStatus;
+        @JsonProperty("jqAppStatusMessage")
+        private Object jqAppStatusMessage;
+        @JsonProperty("syAppStatus")
+        private Object syAppStatus;
+        @JsonProperty("syAppStatusMessage")
+        private Object syAppStatusMessage;
+        @JsonProperty("basePart")
+        private BasePartDTO basePart;
+        @JsonProperty("riskRatio")
+        private RiskRatioDTO riskRatio;
+        @JsonProperty("vehicleTaxation")
+        private VehicleTaxationDTO vehicleTaxation;
+        @JsonProperty("coverageList")
+        private List<CoverageListDTO> coverageList;
+        @JsonProperty("carModelList")
+        private Object carModelList;
+        @JsonProperty("jqSpecialEngageList")
+        private List<ODR1010Request.BodyDTO.JqSpecialEngageListDTO> jqSpecialEngageList;
+        @JsonProperty("sySpecialEngageList")
+        private List<SySpecialEngageListDTO> sySpecialEngageList;
+        @JsonProperty("jqSpecialEngageAllList")
+        private Object jqSpecialEngageAllList;
+        @JsonProperty("sySpecialEngageAllList")
+        private Object sySpecialEngageAllList;
+        @JsonProperty("nvhPolicyList")
+        private Object nvhPolicyList;
+
+        @NoArgsConstructor
+        @Data
+        public static class BasePartDTO {
+            @JsonProperty("totalPremium")
+            private Double totalPremium;
+            @JsonProperty("totalPremiumExclud")
+            private Double totalPremiumExclud;
+            @JsonProperty("totalPremiumVat")
+            private Double totalPremiumVat;
+            @JsonProperty("insurancePremium")
+            private Double insurancePremium;
+            @JsonProperty("jqProposalNo")
+            private String jqProposalNo;
+            @JsonProperty("jqEffectiveDate")
+            private Object jqEffectiveDate;
+            @JsonProperty("jqExpireDate")
+            private Object jqExpireDate;
+            @JsonProperty("jqPremium")
+            private Object jqPremium;
+            @JsonProperty("jqPremiumExclud")
+            private Object jqPremiumExclud;
+            @JsonProperty("jqPremiumVat")
+            private Object jqPremiumVat;
+            @JsonProperty("jqTaxPremium")
+            private Object jqTaxPremium;
+            @JsonProperty("syProposalNo")
+            private String syProposalNo;
+            @JsonProperty("syEffectiveDate")
+            private String syEffectiveDate;
+            @JsonProperty("syExpireDate")
+            private String syExpireDate;
+            @JsonProperty("syPremium")
+            private Double syPremium;
+            @JsonProperty("syPremiumExclud")
+            private Double syPremiumExclud;
+            @JsonProperty("syPremiumVat")
+            private Double syPremiumVat;
+            @JsonProperty("syShortRate")
+            private Integer syShortRate;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class RiskRatioDTO {
+            @JsonProperty("jqResvNum2")
+            private Object jqResvNum2;
+            @JsonProperty("syResvNum2")
+            private Integer syResvNum2;
+            @JsonProperty("expDisc")
+            private Object expDisc;
+            @JsonProperty("billCTPELR")
+            private Double billCTPELR;
+            @JsonProperty("billCOMELR")
+            private Double billCOMELR;
+            @JsonProperty("billELR")
+            private Double billELR;
+            @JsonProperty("jqPubScores")
+            private Object jqPubScores;
+            @JsonProperty("syPubScores")
+            private String syPubScores;
+            @JsonProperty("cagoClmRec")
+            private Object cagoClmRec;
+            @JsonProperty("cclaimAdjustLevel")
+            private String cclaimAdjustLevel;
+            @JsonProperty("cclaimTimes")
+            private String cclaimTimes;
+            @JsonProperty("cinsureYears")
+            private String cinsureYears;
+            @JsonProperty("cnoClaimRes")
+            private String cnoClaimRes;
+            @JsonProperty("nresvNum1")
+            private Object nresvNum1;
+            @JsonProperty("nresvNum8")
+            private Integer nresvNum8;
+            @JsonProperty("cresvTxt1")
+            private Object cresvTxt1;
+            @JsonProperty("cresvTxt2")
+            private Object cresvTxt2;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class CoverageListDTO {
+            @JsonProperty("cvrgNo")
+            private String cvrgNo;
+            @JsonProperty("amt")
+            private Integer amt;
+            @JsonProperty("discountValue")
+            private Double discountValue;
+            @JsonProperty("basicPremium")
+            private Double basicPremium;
+            @JsonProperty("premium")
+            private Double premium;
+            @JsonProperty("premiumExclud")
+            private Double premiumExclud;
+            @JsonProperty("premiumVat")
+            private Double premiumVat;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class SySpecialEngageListDTO {
+            @JsonProperty("specialClausesCode")
+            private String specialClausesCode;
+            @JsonProperty("specialClausesContent")
+            private String specialClausesContent;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class VehicleTaxationDTO {
+
+            //缴税方式(平台)
+            @JsonProperty("taxPaytaxTyp")
+            public String taxPaytaxTyp;
+
+            //车船税有效起期(平台)
+            @JsonProperty("taxEffBgnTm")
+            public String taxEffBgnTm;
+
+            //车船税有效止期(平台)
+            @JsonProperty("taxEffEndTm")
+            public String taxEffEndTm;
+
+            //减免税原因(平台)
+            @JsonProperty("taxTaxfreeVhltyp")
+            public String taxTaxfreeVhltyp;
+
+            //减免税方案(平台)
+            @JsonProperty("taxFreeRedTaxWay")
+            public String taxFreeRedTaxWay;
+
+            //纳税人识别号
+            @JsonProperty("taxTaxpayerId")
+            public String taxTaxpayerId;
+
+            //减免比例(平台)
+            @JsonProperty("taxFreeRedTaxPro")
+            public String taxFreeRedTaxPro;
+
+            //减税金额(平台)
+            @JsonProperty("taxAbateAmt")
+            public String taxAbateAmt;
+
+            //减免税凭证号(平台)
+            @JsonProperty("taxFreeCertNo")
+            public String taxFreeCertNo;
+
+            //减税税务机关代码(平台)
+            @JsonProperty("taxFreeRedTaxOrgCde")
+            public String taxFreeRedTaxOrgCde;
+
+            //免税税务机关名称(平台)
+            @JsonProperty("taxFreeTaxOrg")
+            public String taxFreeTaxOrg;
+
+            //完税税务机关代码(平台)
+            @JsonProperty("taxComTaxOrgCde")
+            public String taxComTaxOrgCde;
+
+            //完税税务机关名称(平台)
+            @JsonProperty("taxComTaxOrg")
+            public String taxComTaxOrg;
+
+            //完税凭证号(平台)
+            @JsonProperty("taxPaymentRecptNo")
+            public String taxPaymentRecptNo;
+
+            //完税凭证填发日期(平台)
+            @JsonProperty("taxDocumentDate")
+            public String taxDocumentDate;
+
+            //开具完税凭证地区代码(平台)
+            @JsonProperty("taxPaidAreaCode")
+            public String taxPaidAreaCode;
+
+            //外地开具税务机关(北京)
+            @JsonProperty("taxDeptNonlocal")
+            public String taxDeptNonlocal;
+
+            //当前期单位编码(平台)
+            @JsonProperty("taxUnitTypeCode")
+            public String taxUnitTypeCode;
+
+            //单位计税金额(平台)
+            @JsonProperty("taxUnitRate")
+            public String taxUnitRate;
+
+            //税费标准/年/单位(平台)
+            @JsonProperty("taxAnnUnitTaxAmt")
+            public String taxAnnUnitTaxAmt;
+
+            //当期应纳税额(平台)
+            @JsonProperty("taxDue")
+            public String taxDue;
+
+            //当期逾期日期(平台)
+            @JsonProperty("taxExceedDate")
+            public String taxExceedDate;
+
+            //当期逾期天数(平台)
+            @JsonProperty("taxExceedDaysCount")
+            public String taxExceedDaysCount;
+
+            //算税标志(平台)
+            @JsonProperty("taxCalcTaxFlag")
+            public String taxCalcTaxFlag;
+
+            //申报日期(平台)
+            @JsonProperty("taxDeclareDate")
+            public String taxDeclareDate;
+
+            //申报状态(平台)
+            @JsonProperty("taxDeclareStatus")
+            public String taxDeclareStatus;
+
+            //滞纳金(平台)
+            @JsonProperty("taxOverdueAmt")
+            public String taxOverdueAmt;
+
+            //合计金额(平台)
+            @JsonProperty("taxTotalAmount")
+            public String taxTotalAmount;
+
+            //车船税合计金额标识代码(平台)
+            @JsonProperty("taxAmountFlag")
+            public String taxAmountFlag;
+
+            //当年应缴(平台)
+            @JsonProperty("taxableAmt")
+            public String taxableAmt;
+
+            //往年补缴(平台)
+            @JsonProperty("taxLastYear")
+            public String taxLastYear;
+
+            //税款合计(平台)
+            @JsonProperty("taxAggTax")
+            public String taxAggTax;
+
+        }
+    }
+}

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1010Response.java

@@ -21,7 +21,7 @@ public class ODR1010Response extends DaJiaBaseResponse {
     private static final long serialVersionUID = -2378055721655271544L;
 
     @JsonProperty("body")
-    private BodyDTO body;
+    private BodyDTO result;
 
     @NoArgsConstructor
     @Data

+ 41 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1011Response.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @description: 大家财险 影像上传接口 响应参数
+ * @author: wenks
+ * @date: 2023/11/14 17:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ODR1011Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = 272886779414029674L;
+
+    @JsonProperty("result")
+    private ResultDTO result;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 2420666839215689701L;
+
+        //二维码图片信息
+        @JsonProperty("signInfoImage")
+        private String signInfoImage;
+        //url地址
+        @JsonProperty("signInfoUrl")
+        private String signInfoUrl;
+
+    }
+
+}

+ 44 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1012Response.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @description: 大家财险 影像上传接口 响应参数
+ * @author: wenks
+ * @date: 2023/11/14 17:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ODR1012Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = 272886779414029674L;
+
+    @JsonProperty("result")
+    private ODR1016Response.ResultDTO result;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 2420666839215689701L;
+
+        //二维码图片信息
+        @JsonProperty("signInfoImage")
+        private String signInfoImage;
+        //url地址
+        @JsonProperty("signInfoUrl")
+        private String signInfoUrl;
+        //支付订单号
+        @JsonProperty("payBusinessNo")
+        private String payBusinessNo;
+
+    }
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1014Response.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: 大家财险 业务订单撤回接口 响应参数
+ * @author: wenks
+ * @date: 2023/11/14 17:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ODR1014Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = 272886779414029674L;
+
+}

+ 4 - 4
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR1016Response.java

@@ -15,19 +15,19 @@ public class ODR1016Response extends DaJiaBaseResponse {
 
     private static final long serialVersionUID = 7133434751414472183L;
 
-    @JsonProperty("body")
-    private BodyDTO body;
+    @JsonProperty("result")
+    private ResultDTO result;
 
     @NoArgsConstructor
     @Data
-    public static class BodyDTO implements Serializable {
+    public static class ResultDTO implements Serializable {
 
         private static final long serialVersionUID = 2420666839215689701L;
 
         @JsonProperty("sumDepreciationRate")
         private Double sumDepreciationRate;
         @JsonProperty("actualValue")
-        private Integer actualValue;
+        private Double actualValue;
         @JsonProperty("fairMarketValueUp")
         private Integer fairMarketValueUp;
         @JsonProperty("fairMarketValueDown")

+ 3 - 3
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR2009Response.java

@@ -22,12 +22,12 @@ public class ODR2009Response extends DaJiaBaseResponse {
 
     private static final long serialVersionUID = -5345963590207304369L;
 
-    @JsonProperty("body")
-    private List<BodyDTO> body;
+    @JsonProperty("result")
+    private List<ResultDTO> result;
 
     @NoArgsConstructor
     @Data
-    public static class BodyDTO implements Serializable {
+    public static class ResultDTO implements Serializable {
 
         private static final long serialVersionUID = -8892193629620452567L;
 

+ 125 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/ODR2010Response.java

@@ -0,0 +1,125 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 大家财险 影像上传接口 响应参数
+ * @author: wenks
+ * @date: 2023/11/14 17:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class ODR2010Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = 272886779414029674L;
+
+    @JsonProperty("result")
+    private List<ResultDTO> result;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 2420666839215689701L;
+
+
+        //轨迹ID
+        @JsonProperty("notifyId")
+        private String notifyId;
+
+        //操作时间(投保单状态最新时间)
+        @JsonProperty("oprTime")
+        private String oprTime;
+
+        //通知事件类型
+        @JsonProperty("notifyType")
+        private String notifyType;
+
+        //系统来源
+        @JsonProperty("sysRes")
+        private String sysRes;
+
+        //申请单类型
+        @JsonProperty("appType")
+        private String appType;
+
+        //投保单号
+        @JsonProperty("appNo")
+        private String appNo;
+
+        //投保单状态
+        @JsonProperty("appStatus")
+        private String appStatus;
+
+        //保单号
+        @JsonProperty("plyNo")
+        private String plyNo;
+
+        //产品代码
+        @JsonProperty("prodNo")
+        private String prodNo;
+
+        //产品名称
+        @JsonProperty("prodName")
+        private String prodName;
+
+        //产品保额
+        @JsonProperty("amt")
+        private String amt;
+
+        //产品保费
+        @JsonProperty("prm")
+        private String prm;
+
+        //产品投保日期
+        @JsonProperty("appTm")
+        private String appTm;
+
+        //产品签单日期
+        @JsonProperty("issueTm")
+        private String issueTm;
+
+        //产品保险起期
+        @JsonProperty("effectiveDate")
+        private String effectiveDate;
+
+        //产品保险止期
+        @JsonProperty("expireDate")
+        private String expireDate;
+
+        //操作人代码
+        @JsonProperty("oprCde")
+        private String oprCde;
+
+        //操作人名称
+        @JsonProperty("oprCdeName")
+        private String oprCdeName;
+
+        //操作机构代码
+        @JsonProperty("oprDpt")
+        private String oprDpt;
+
+        //操作机构名称
+        @JsonProperty("oprDptName")
+        private String oprDptName;
+
+        //操作动作
+        @JsonProperty("oper")
+        private String oper;
+
+        //操作详细说明
+        @JsonProperty("oprDetail")
+        private String oprDetail;
+
+
+    }
+
+}

+ 62 - 0
src/main/java/com/ydtech/modules/order/entity/api/dajia/response/VHLINS2005Response.java

@@ -0,0 +1,62 @@
+package com.ydtech.modules.order.entity.api.dajia.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 大家财险 影像上传接口 响应参数
+ * @author: wenks
+ * @date: 2023/11/14 17:50
+ **/
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class VHLINS2005Response extends DaJiaBaseResponse {
+
+    private static final long serialVersionUID = 272886779414029674L;
+
+    @JsonProperty("result")
+    private List<ResultDTO> result;
+
+    @NoArgsConstructor
+    @Data
+    public static class ResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 2420666839215689701L;
+
+
+        //状态(成功/失败)
+        @JsonProperty("code")
+        private String code;
+
+        //错误信息
+        @JsonProperty("message")
+        private String message;
+
+        //保单号
+        @JsonProperty("plyNo")
+        private String plyNo;
+
+        //电子保单url
+        @JsonProperty("returnUrl")
+        private String returnUrl;
+
+        //电子标志url
+        @JsonProperty("returnBzUrl")
+        private String returnBzUrl;
+
+        //失效时间
+        @JsonProperty("expirationTme")
+        private String expirationTme;
+
+
+
+    }
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/order/service/DaJiaOrderService.java

@@ -1,7 +1,23 @@
 package com.ydtech.modules.order.service;
 
 
+import com.ydtech.core.page.HttpResult;
+
 public interface DaJiaOrderService extends BaseOrderService<Object>{
 
+    /**
+     * 缴费状态查询
+     * @param companyId
+     * @return
+     */
+    HttpResult<Object> verifyPayment(String companyId);
+
+
+    /**
+     * 获取保单
+     * @param companyId
+     * @return
+     */
+    HttpResult<Object> obtainWarranty(String companyId);
 
 }

+ 444 - 5
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -1,29 +1,468 @@
 package com.ydtech.modules.order.service.impl;
 
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.ydtech.constants.enums.InsuranceRisk;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.fee.service.FeeRuleSchemeService;
+import com.ydtech.modules.ins.model.vo.*;
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.components.dajia.DaJiaRequestApiComponents;
+import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
+import com.ydtech.modules.order.entity.api.dajia.constants.CCvrgNo;
+import com.ydtech.modules.order.entity.api.dajia.constants.CProdNo;
+import com.ydtech.modules.order.entity.api.dajia.constants.Message;
+import com.ydtech.modules.order.entity.api.dajia.request.*;
+import com.ydtech.modules.order.entity.api.dajia.response.*;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.service.DaJiaOrderService;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.order.service.InsTaskImagesService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.utils.CalculateUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
 
 @Service
 public class DaJiaOrderServiceImpl implements DaJiaOrderService {
+    @Autowired
+    private DaJiaRequestApiComponents daJiaRequestApiComponents;
+
+    @Autowired
+    private ConfigureParametersComponents configureParametersComponents;
+
+    @Autowired
+    private PtlAgreementAttributionService ptlAgreementAttributionService;
+
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
+
+    @Autowired
+    private InsOrdersService insOrdersService;
+
+    @Autowired
+    private FeeRuleSchemeService feeRuleSchemeService;
+
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private InsTaskImagesService insTaskImagesService;
+
+    //region 报价
+    /**
+     * 获取OrderNo
+     * @param daJiaConfigureParameters
+     * @return
+     */
+    private  String getOrderNo(DaJiaConfigureParameters daJiaConfigureParameters) throws Exception {
+        ODR1007Request odr1007Request = new ODR1007Request(daJiaConfigureParameters);
+        ODR1007Response odr1007Response = daJiaRequestApiComponents.queryBusinessOrders(odr1007Request);
+        if(odr1007Response.getStatus().equals(Message.M0000.getCode())){
+            //接口返回 订单号
+            String orderNo = odr1007Response.getResult().getOrderNo();
+            return orderNo;
+        }else{
+            throw new Exception("获取业务订单号接口失败");
+        }
+    }
+
+    /**
+     * 车辆与客户信息确认
+     * @param orderNo
+     * @param quoteInfoVo
+     * @param daJiaConfigureParameters
+     * @return
+     * @throws Exception
+     */
+    private ODR1008Response ConfirmationVehicleCustomerInformation(String orderNo, String busiId,BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters,ODR2009Response odr2009Request) throws Exception {
+        ODR1008Request odr1008Request = new ODR1008Request(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Request);
+        ODR1008Response odr1008Response = daJiaRequestApiComponents.carOrCustomInfoConfirm(odr1008Request);
+        if(odr1008Response.getStatus().equals(Message.M0000.getCode())){
+            //车辆与客户信息确认返回
+            return odr1008Response;
+        }else{
+            throw new Exception("车辆与客户信息确认接口失败");
+        }
+    }
 
+    /**
+     * 报价
+     * @param quoteInfoVo 报价实体
+     * @param t
+     * @return
+     */
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<Object> t) {
+        try {
+            //获取公司配置信息
+            DaJiaConfigureParameters daJiaConfigureParameters = new DaJiaConfigureParameters();
+            configureParametersComponents.toEntity(daJiaConfigureParameters,t.getAgreementId());
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(t.getAgreementId());
+            // 1.获取业务订单号接口
+            String orderNo = getOrderNo(daJiaConfigureParameters);
+            //生成业务id  1008 1010 接口使用
+            String busiId = IdGenerate.nextId();
+
+            // 2.车型查询
+            ODR2009Request odr2009Request = new ODR2009Request(orderNo,quoteInfoVo,daJiaConfigureParameters);
+            ODR2009Response odr2009Response = daJiaRequestApiComponents.queryVehicleTypes(odr2009Request);
+
+            // 3.车辆与客户信息确认
+            ODR1008Response odr1008Response = ConfirmationVehicleCustomerInformation(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Response);
+            if(!odr1008Response.getStatus().equals(Message.M0000.getCode())){
+                throw new Exception("车辆与客户信息确认接口失败");
+            }
+            //查询车辆商业起保日期
+            InsOrders insOrders = insOrdersService.getById(quoteInfoVo.getOrderNo());
+            String bxStartDate = Objects.isNull(insOrders.getSystartdate()) ?
+                    insOrders.getJqstartdate() : insOrders.getSystartdate();
+            //4.车辆实际价值计算接口
+            ODR1016Request odr1016Request = new ODR1016Request(orderNo,bxStartDate);
+            ODR1016Response odr1016Response = daJiaRequestApiComponents.carValueCalculation(odr1016Request);
+            if(!odr1016Response.getStatus().equals(Message.M0000.getCode())){
+                throw new Exception("车辆实际价值计算接口失败");
+            }
+
+            //5.保费计算接口
+            List<KindInfoVo> kindList = quoteInfoVo.getKindList();
+            List<RiskInfoVo> riskList = quoteInfoVo.getRiskList();
+            ODR1009Request odr1009Request = new ODR1009Request(orderNo, kindList, riskList,quoteInfoVo,odr1016Response);
+            ODR1009Response odr1009Response = daJiaRequestApiComponents.newPremiumXnyCalculation(odr1009Request);
+            if(odr1009Response.getStatus().equals(Message.M0000.getCode())){
+                //保费计算接口返回
+                QuoteRespVo quoteRespVo = getQuoteRespVo(odr1009Response, quoteInfoVo);
+                //添加调用费用匹配功能
+//                feeRuleSchemeService.dealFeeOrderInfo(quoteInfoVo, quoteRespVo, t.getAgreementId(),
+//                        odr1009Request.getBody().getOrderNo());
+                HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(odr1009Response, quoteRespVo, ptlAgreementAttribution, orderNo, quoteInfoVo.getOrderNo(),busiId);
+                return quoteRespVoHttpResult;
+            }else{
+                throw new Exception("报价失败");
+            }
+        }catch(Exception e){
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+
+    public HttpResult<QuoteRespVo> responseOrder(ODR1009Response odr1009Response,
+                                                 QuoteRespVo quoteRespVo,
+                                                 PtlAgreementAttribution ptlAgreementAttribution, String orderId,
+                                                 String orderNo,String busiId) {
+        // 保存订单信息
+        InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
+        // 协议id
+        //子订单id
+        String companyId = IdGenerate.nextId();
+        insAreaCompany.setId(companyId);
+        insAreaCompany.setOrderno(orderNo);
+        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(odr1009Response.getResult()));
+        jsonObject.put("busiId",busiId);
+        insAreaCompany.setReptxt(jsonObject);
+        insAreaCompany.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode());
+        insAreaCompany.setInsOrderNo(orderId);
+        //交强投保单号
+        if(!Objects.isNull(odr1009Response.getResult().getBasePart().getJqProposalNo()))
+        {
+            insAreaCompany.setJqapplyno(odr1009Response.getResult().getBasePart().getJqProposalNo().toString());
+        }
+        //商业投保单号
+        if(!Objects.isNull(odr1009Response.getResult().getBasePart().getSyProposalNo()))
+        {
+            insAreaCompany.setSyapplyno(odr1009Response.getResult().getBasePart().getSyProposalNo().toString());
+        }
+        insAreaCompanyService.insertCompanyAndOrders(insAreaCompany);
+        quoteRespVo.setCompanyId(companyId);
+        quoteRespVo.setOrderno(orderNo);
+        // 车船税
+        ODR1009Response.ResultDTO.VehicleTaxationDTO carShipTax = odr1009Response.getResult().getVehicleTaxation();
+        TaxArrears taxArrears = new TaxArrears("往年欠税", Double.parseDouble(carShipTax.getTaxableAmt()),
+                Double.parseDouble(carShipTax.getTaxOverdueAmt()));
+        List<TaxArrears> taxArrearsList = Collections.singletonList(taxArrears);
+        insAreaCompany.setTaxArrears(JSON.parseArray(JSON.toJSONString(taxArrearsList)));
+
+        return HttpResult.ok("报价成功", quoteRespVo);
+    }
+
+    /**
+     * 获取CCvrgNo Code
+     * @param code
+     * @return
+     */
+    public CCvrgNo getCCvrgNoByCode(String code){
+        CCvrgNo[] values = CCvrgNo.values();
+        for (CCvrgNo value : values) {
+            if(value.getCode().equals(code)){
+                return value;
+            }
+        }
         return null;
     }
 
+    public QuoteRespVo getQuoteRespVo(ODR1009Response odr1009Response,
+                                      BaseQuoteInfoVo yaQuoteInfoVo) {
+        double jqPremium = 0;
+        double syPremium = 0;
+        double sumPayTax = 0;
+        double jyPremium = 0;
+
+        QuoteRespVo quoteRespVo = new QuoteRespVo();
+
+        // 交强
+        if(odr1009Response.getResult().getBasePart().getJqEffectiveDate() != null) {
+            quoteRespVo.setStartDateJq(String.valueOf(odr1009Response.getResult().getBasePart().getJqEffectiveDate()));
+            quoteRespVo.setEndDateJq(String.valueOf(odr1009Response.getResult().getBasePart().getJqExpireDate()));
+        }
+
+        // 商业
+        if(odr1009Response.getResult().getBasePart().getSyEffectiveDate() != null){
+            quoteRespVo.setStartDateSy(odr1009Response.getResult().getBasePart().getSyEffectiveDate());
+            quoteRespVo.setEndDateSy(odr1009Response.getResult().getBasePart().getSyExpireDate());
+        }
+
+
+        List<QuoteKindRespVo> kindList = new ArrayList<>();
+        //  报价险种放入保费
+        List<QuoteRiskRespVo> riskList = new ArrayList<QuoteRiskRespVo>();
+        // risk列表
+        if(odr1009Response.getResult().getBasePart().getJqProposalNo() != null){
+            QuoteRiskRespVo jqRisk = new QuoteRiskRespVo();
+            jqRisk.setRiskCode(InsuranceRisk.TRAFFIC.getCode());
+            jqRisk.setRiskName(InsuranceRisk.TRAFFIC.getDesc());
+            if(!Objects.isNull(odr1009Response.getResult().getBasePart().getJqPremium())) {
+                jqRisk.setPremium(Double.parseDouble(odr1009Response.getResult().getBasePart().getJqPremium().toString()));
+                jqRisk.setStartDate(odr1009Response.getResult().getBasePart().getJqEffectiveDate().toString());
+                jqRisk.setEndDate(odr1009Response.getResult().getBasePart().getJqExpireDate().toString());
+            }
+            riskList.add(jqRisk);
+        }
+        if(odr1009Response.getResult().getBasePart().getSyProposalNo() != null){
+            QuoteRiskRespVo syRisk = new QuoteRiskRespVo();
+            syRisk.setRiskCode(InsuranceRisk.BUSINESS.getCode());
+            syRisk.setRiskName(InsuranceRisk.BUSINESS.getDesc());
+            if(!Objects.isNull(odr1009Response.getResult().getBasePart().getSyPremium())) {
+                syRisk.setPremium(Double.parseDouble(odr1009Response.getResult().getBasePart().getSyPremium().toString()));
+                syRisk.setStartDate(odr1009Response.getResult().getBasePart().getSyEffectiveDate().toString());
+                syRisk.setEndDate(odr1009Response.getResult().getBasePart().getSyExpireDate().toString());
+            }
+
+            riskList.add(syRisk);
+        }
+
+        QuoteKindRespVo kind;
+
+        // 商业险险种
+        List<ODR1009Response.ResultDTO.CoverageListDTO> coverageList = odr1009Response.getResult().getCoverageList();
+        for (ODR1009Response.ResultDTO.CoverageListDTO dto : coverageList) {
+            kind = new QuoteKindRespVo();
+            CCvrgNo cCvrgNoByCode = getCCvrgNoByCode(dto.getCvrgNo());
+            kind.setKindCode(cCvrgNoByCode.getInsurCode());
+            kind.setKindName(cCvrgNoByCode.getDesc());
+            // amt里 包含座位的价格是总和  需要根据座位数 算出保费单价
+            if(cCvrgNoByCode.getInsurCode().equals("D4") || cCvrgNoByCode.getInsurCode().equals("SY_FJ_YBW2")){
+                Integer seatCount = Integer.parseInt(yaQuoteInfoVo.getCarInfo().getSeatCount());
+                kind.setAmount(dto.getAmt() / (seatCount - 1));
+            }else{
+                kind.setAmount(dto.getAmt());
+            }
+            kind.setCoveragePremium(dto.getPremium());
+            kind.setDeductibleRate(dto.getDiscountValue());
+            kindList.add(kind);
+        }
+
+        // 驾意险
+//        List<CalculatePremiumResponse.CarPolicySubInfoListDTO> carPolicySubInfoList =
+//                calculatePremiumResponse.getCarPolicySubInfoList();
+//
+//        if (carPolicySubInfoList != null && !carPolicySubInfoList.isEmpty()) {
+//            List<AccidentResponseVo> accidentResponseVos =
+//                    CalculatePremiumResponse.CarPolicySubInfoListDTO.toAccidentResponseVoList(carPolicySubInfoList,
+//                            accidentalDrivingVo);
+//            quoteRespVo.setAccident(accidentResponseVos);
+//            // 驾意险价格
+//            BigDecimal bigDecimal = CalculatePremiumResponse.CarPolicySubInfoListDTO.sumPremium(carPolicySubInfoList);
+//            jyPremium = bigDecimal.doubleValue();
+//        }
+
+        quoteRespVo.setRiskList(riskList);
+        quoteRespVo.setKindList(kindList);
+        if(!Objects.isNull(odr1009Response.getResult().getBasePart().getJqPremium()))
+        {
+            jqPremium = Double.parseDouble(odr1009Response.getResult().getBasePart().getJqPremium().toString());
+        }
+        if(!Objects.isNull(odr1009Response.getResult().getBasePart().getSyPremium())){
+            syPremium = Double.parseDouble(odr1009Response.getResult().getBasePart().getSyPremium().toString());
+        }
+        if(!Objects.isNull(odr1009Response.getResult().getVehicleTaxation().getTaxTotalAmount())){
+            sumPayTax = Double.parseDouble(odr1009Response.getResult().getVehicleTaxation().getTaxTotalAmount());
+        }
+        quoteRespVo.setJqPremium(jqPremium);
+        quoteRespVo.setSyPremium(syPremium);
+        quoteRespVo.setTaxAmount(sumPayTax);
+        quoteRespVo.setJyPremium(jyPremium);
+        quoteRespVo.setCiSumPermium(CalculateUtils.add(jqPremium, sumPayTax));//交强险和车船税合计
+        quoteRespVo.setSumPermium(CalculateUtils.add(jqPremium,syPremium,sumPayTax,jyPremium));//总保费
+        quoteRespVo.setTotalAdjustRate(0);
+        quoteRespVo.setOrderno(yaQuoteInfoVo.getOrderNo()); //订单号
+        return quoteRespVo;
+    }
+    //endregion
+
+    /**
+     * 核保
+     * @param companyId 子订单号
+     * @return
+     */
     @Override
-    public HttpResult<Object> audit(String companyId) {
-        return null;
+    public HttpResult<Object> audit(String companyId){
+        try {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+            InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+            //获取公司配置信息
+            DaJiaConfigureParameters daJiaConfigureParameters = new DaJiaConfigureParameters();
+            configureParametersComponents.toEntity(daJiaConfigureParameters, insAreaCompany.getAgreementId());
+            //先进行影像提交
+            submitImage(companyId);
+
+            //1009返回数据
+            ODR1009Response.ResultDTO resultDTO = JSONObject.parseObject(
+                    JSON.toJSONString(insAreaCompany.getReptxt()),
+                    ODR1009Response.ResultDTO.class);
+
+            //核保构造request
+            ODR1010Request odr1010Request = new ODR1010Request(
+                    insAreaCompany.getInsOrderNo(),
+                    insAreaCompany.getReptxt().getString("busiId"),
+                    daJiaConfigureParameters,
+                    resultDTO,
+                    insOrders);
+            ODR1010Response odr1010Response = daJiaRequestApiComponents.underwriting(odr1010Request);
+            if (odr1010Response.getStatus().equals(Message.M0000.getCode())) {
+                //核保成功  获取支付二维码
+                ODR1011Request odr1011Request = new ODR1011Request(insAreaCompany.getInsOrderNo(),daJiaConfigureParameters);
+                ODR1011Response payNo = daJiaRequestApiComponents.getPayNo(odr1011Request);
+                if(payNo.getStatus().equals(Message.M0000.getCode())){
+                    //获取支付二维码成功  保存支付二维码
+                    insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
+                    insAreaCompany.setPaymentLink(payNo.getResult().getSignInfoUrl());
+                    insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                    return HttpResult.ok("核保成功");
+                }
+            }
+//            return HttpResult.error("核保失败");
+            throw new RuntimeException("核保失败");
+        }catch(Exception e){
+            throw new RuntimeException(e.getMessage());
+        }
     }
 
+    /**
+     * 上传影像
+     * @param companyId
+     * @return
+     */
     @Override
-    public HttpResult<Object> submitImage(String subOrderNo) {
-        return null;
+    public HttpResult<Object> submitImage(String companyId) {
+        try {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+            List<InsTaskImagesBase64> byOrderNo = insTaskImagesService.findByOrderNo(insAreaCompany.getOrderno());
+            //获取公司配置信息
+            DaJiaConfigureParameters daJiaConfigureParameters = new DaJiaConfigureParameters();
+            configureParametersComponents.toEntity(daJiaConfigureParameters, insAreaCompany.getAgreementId());
+            //构造上传图片request
+            ODR1013Request odr1013Request = new ODR1013Request(insAreaCompany, daJiaConfigureParameters, byOrderNo);
+            ODR1013Response odr1013Response = daJiaRequestApiComponents.uploadImage(odr1013Request);
+            if(odr1013Response.getStatus().equals(Message.M0001.getCode())){
+                //上传成功
+                return HttpResult.ok("上传影像成功");
+            }
+            throw new RuntimeException("上传影像失败");
+        }catch (Exception e){
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    /**
+     * 查询订单状态
+     * @param companyId
+     * @return
+     */
+    @Override
+    public HttpResult<Object> verifyPayment(String companyId) {
+        try {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+            ODR2010Request odr2010Request = new ODR2010Request(insAreaCompany.getInsOrderNo());
+            ODR2010Response odr2010Response = daJiaRequestApiComponents.verifyPayment(odr2010Request);
+            if(odr2010Response.getStatus().equals(Message.M0000.getCode())){
+                List<ODR2010Response.ResultDTO> result = odr2010Response.getResult();
+                List<ODR2010Response.ResultDTO> collect = result.stream().filter(x -> x.getNotifyType().equals("2009")).collect(Collectors.toList());
+                if(collect.size() > 0) {
+                    //更新订单状态
+                    insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
+                    for(int i=0,length=collect.size();i<length;i++){
+                        //交强或商业 的 保单号
+                        if(collect.get(i).getProdNo().equals(CProdNo.JQ.getCode())){
+                            insAreaCompany.setJqpolicyno(collect.get(i).getPlyNo());
+                        }else if(collect.get(i).getProdNo().equals(CProdNo.SY.getCode())){
+                            insAreaCompany.setSypolicyno(collect.get(i).getPlyNo());
+                        }
+                    }
+                    insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                }
+                return HttpResult.ok("查询订单状态成功");
+            }
+            throw new RuntimeException("查询订单状态错误");
+        }catch (Exception e){
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    /**
+     * 获取保单
+     * @param companyId
+     * @return
+     */
+    @Override
+    public HttpResult<Object> obtainWarranty(String companyId) {
+        try {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+            ArrayList<String> warrantys = new ArrayList<String>();
+            if (insAreaCompany.getJqpolicyno() != null) {
+                warrantys.add(insAreaCompany.getJqpolicyno());
+            }
+            if (insAreaCompany.getSypolicyno() != null) {
+                warrantys.add(insAreaCompany.getSypolicyno());
+            }
+            String[] warrantysArray = warrantys.toArray(new String[0]);
+            VHLINS2005Request vhlins2005Request = new VHLINS2005Request(warrantysArray);
+            VHLINS2005Response vhlins2005Response = daJiaRequestApiComponents.obtainWarranty(vhlins2005Request);
+            if(vhlins2005Response.getStatus().equals(Message.M0000.getCode())){
+                //获取保单成功
+                return HttpResult.ok("获取保单成功",vhlins2005Response.getResult());
+            }
+            throw new RuntimeException("获取保单失败");
+        }catch (Exception e){
+            throw new RuntimeException(e.getMessage());
+        }
     }