Преглед изворни кода

处理平安接口添加接口http请求文件

hxl13994548489 пре 2 година
родитељ
комит
62f288c7ca
45 измењених фајлова са 7816 додато и 498 уклоњено
  1. 12 0
      pom.xml
  2. 12 0
      src/main/java/com/ydtech/config/properties/PingAnApiConfigurationProperties.java
  3. 346 51
      src/main/java/com/ydtech/modules/order/components/pingan/PinganRequestApiComponents.java
  4. 19 5
      src/main/java/com/ydtech/modules/order/entity/api/pingan/constants/RequestUrl.java
  5. 38 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/AcceptRequest.java
  6. 525 49
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/CarConfirmRequest.java
  7. 50 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/DmvehicleInfoRequst.java
  8. 33 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/DocumentStatusListRequest.java
  9. 43 5
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/IndexRequest.java
  10. 6 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PingAnBaseRequest.java
  11. 63 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PolicyPdfRequest.java
  12. 805 54
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/QuoteRequest.java
  13. 13 3
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/RenewalConfirmRequest.java
  14. 36 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/RepealDocumentRequest.java
  15. 48 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/ScanCodeURLRequest.java
  16. 6 2
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SearchPAVehicleListRequest.java
  17. 24 9
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/ServiceContractRequest.java
  18. 534 23
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SubmitApplyRequest.java
  19. 20 6
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UnAutoProductDetailRequest.java
  20. 38 8
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UnAutoProductListRequest.java
  21. 87 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UploadFilesRequest.java
  22. 66 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/AcceptResponse.java
  23. 407 91
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/CarConfirmResponse.java
  24. 24 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/DmvehicleInfoResponse.java
  25. 212 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/DocumentStatusListResponse.java
  26. 149 40
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/IndexResponse.java
  27. 15 3
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PingAnBaseResponse.java
  28. 41 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PolicyPdfResponse.java
  29. 793 43
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/QuoteResponse.java
  30. 804 71
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/RenewalConfirmResponse.java
  31. 25 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/RepealDocumentResponse.java
  32. 48 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/ScanCodeURLResponse.java
  33. 33 7
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/ServiceContractResponse.java
  34. 1745 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/SubmitApplyResponse.java
  35. 54 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/TokenResponse.java
  36. 27 7
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UnAutoProductDetailResponse.java
  37. 83 19
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UnAutoProductListResponse.java
  38. 19 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UploadFilesResponse.java
  39. 67 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/Base64Convert.java
  40. 133 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/PDFUtil.java
  41. 286 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/RSAPINGANUtils.java
  42. 1 1
      src/main/java/com/ydtech/modules/order/service/PingAnOrderApiService.java
  43. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java
  44. 23 0
      src/main/java/com/ydtech/utils/RequestIdUtils.java
  45. 2 0
      src/main/resources/application-test.yml

+ 12 - 0
pom.xml

@@ -566,6 +566,18 @@
             <artifactId>bcprov-jdk15on</artifactId>
             <version>1.56</version>
         </dependency>
+        <!--读取pdf-->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.28</version>
+        </dependency>
+        <!--引入lang3包-->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.12.0</version> <!-- 使用最新的稳定版本 -->
+        </dependency>
     </dependencies>
 
 

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

@@ -30,4 +30,16 @@ public class PingAnApiConfigurationProperties {
     // 平安财险方公钥
     private String pingAnPublicKey;
 
+
+    /***
+     * 客户端id
+     */
+    private String clientId;
+
+    /***
+     * 客户端秘钥
+     */
+    private  String  clientSecret;
+
+
 }

+ 346 - 51
src/main/java/com/ydtech/modules/order/components/pingan/PinganRequestApiComponents.java

@@ -1,21 +1,80 @@
 package com.ydtech.modules.order.components.pingan;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ydtech.config.properties.PingAnApiConfigurationProperties;
+import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
-import com.ydtech.modules.order.entity.api.pingan.request.CarConfirmRequest;
-import com.ydtech.modules.order.entity.api.pingan.request.IndexRequest;
-import com.ydtech.modules.order.entity.api.pingan.request.SearchPAVehicleListRequest;
-import com.ydtech.modules.order.entity.api.pingan.response.CarConfirmResponse;
-import com.ydtech.modules.order.entity.api.pingan.response.IndexResponse;
-import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.api.pingan.constants.RequestUrl;
+import com.ydtech.modules.order.entity.api.pingan.request.*;
+import com.ydtech.modules.order.entity.api.pingan.response.*;
+import com.ydtech.modules.order.entity.api.pingan.utils.RSAPINGANUtils;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
+import com.ydtech.modules.order.utils.InsuranceLog;
+import com.ydtech.utils.RequestIdUtils;
 import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 14:19
+ *  @Description:  平安接口请求封装
+ *
+ *  除北京、上海、深圳以外的地区
+ * index  --》carConfirm---》quote--》submitApply--》signEleApply--》getApplyVerifyCode--》recoverApplyVerifyCode--》noticeDo
+ * 商业险通融报价(仅限调整折扣,部分报价拦截返回推荐折扣、手续费等信息时,其余报价拦截等通融暂不支持)
+ * index--》carConfirm--》quote--》quote (包含通融报价参数)--》 submitApply--》noticeDo
+ * 继续支付流程(引导跳转到平安页面完成后续流程)
+ * index--》carConfirm--》quote --》submitApply--》viewToPay
+ *
+ *
+ *  接口协议:HTTPS
+ * HTTP请求方式:POST
+ * Content-Type:application/json;charset=utf-8;Accept:application/json;charset=utf-8
+ * 接口权限校验方式:令牌
+ * 接口调用地址:见附录
+ *  接口调用举例
+ * 1、使用平安分配的client_id和client_secret,调用令牌地址获得令牌
+ * https://test-api.pingan.com.cn:20443/oauth/oauth2/access_token?client_id={client_id} &grant_type=client_credentials&client_secret={client_secret}
+ * 返回:
+ * {
+ *     "ret": "0",
+ *     "data": {
+ *         "expires_in": "1438",【令牌有效时长(分钟)】
+ *         "openid": "***",
+ *         "access_token": "3FFC24C8374D4274844BD714BF01A93D"
+ *     },
+ *     "msg": ""
+ * }
+ * 2、发起接口调用
+ * https://test-api.pingan.com.cn:20443/open/appsvr/{各接口地址}?access_token={令牌}&request_id={请求随机流水号}
+ * 返回(返回内容均在data节点中):
+ * {
+ * 	"ret":"0",
+ * 		"msg":"",
+ * 		"requestId":"{请求随机流水号}",
+ * 		"data":{
+ *
+ * 		        }
+ * }
+ *
+ *
+ */
 @Component
 @RequiredArgsConstructor
 public class PinganRequestApiComponents {
@@ -24,7 +83,43 @@ public class PinganRequestApiComponents {
 
     private final PingAnApiConfigurationProperties properties;
 
-
+    public static final Logger logger = LoggerFactory.getLogger(PinganRequestApiComponents.class);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 14:52
+     *  @Description: 通过客户端id和客户端密钥获取令牌
+     */
+    private  String  getToken(String url){
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<String> entity = new HttpEntity<>(headers);
+        RestTemplate restTemplate = new RestTemplate();
+        String clientId = properties.getClientId();
+        String clientSecret = properties.getClientSecret();
+        logger.info("客户端id=========="+clientId);
+        logger.info("客户端密钥=========="+clientSecret);
+        if((clientId!=null && !"".equals(clientId)) &&  (clientSecret==null && !"".equals(clientSecret)) ){
+            url=url+"?client_id="+clientId+"&grant_type=client_credentials&client_secret="+clientSecret;
+            ResponseEntity<JSONObject> response = restTemplate.exchange(url , HttpMethod.GET, entity, JSONObject.class);
+            JSONObject body = response.getBody();
+            TokenResponse token = JSON.toJavaObject(body, TokenResponse.class);
+            if(token!=null){
+                String expiresIn = token.getData().getExpires_in();
+                if(expiresIn!=null && Integer.parseInt(expiresIn)>0){
+                    return token.getData().getAccess_token();
+                }else{
+                    logger.error("令牌已过期");
+                    return null;
+                }
+            }else{
+                logger.error("返回值为空,请检查访问路径以及参数!!!");
+                return null;
+            }
+        }else{
+            logger.error("clientId或clientSecret值为空,请检查配置!!!");
+            return null;
+        }
+    }
     /**
      * 加密请求
      *
@@ -35,53 +130,90 @@ public class PinganRequestApiComponents {
      * @param <S>    Response 响应体
      * @return <S>
      */
-//    private <Q extends PingAnBaseRequest, S extends PingAnBaseResponse> S post(Q q, String url, Class<S> tClass, String sysSourceCode,
-//                                                                               RequestUrl requestUrl) throws Exception {
-//
-//        HttpHeaders httpHeaders = new HttpHeaders();
-//        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
-//        String busReqString = JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
-//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
-//                requestUrl.getDesc(), url, busReqString);
-//
-//        JSONObject jsonObject = (JSONObject) JSON.toJSON(q);
-//
-//        // TODO
-//        String signature = PingAnRSAUtils.sortParametersWithASCII(jsonObject);
-//        String signData = PingAnRSAUtils.sign(signature, properties.getSelfPrivateKey());
-//
-//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 加密后的参数:{} \n\t---------> " +
-//                "请求头内容signature:{}", requestUrl.getDesc(), signData, signature);
-//
-//        // 请求
-//        HttpEntity<String> httpEntity = new HttpEntity<>(signData, httpHeaders);
-//        ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
-//
-//        String body = response.getBody();
-//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 解密前的参数:{}", requestUrl.getDesc(), body);
-//
-//        // 解密响应
-//        BoHaiEncrypted encrypted = JSON.parseObject(body).toJavaObject(BoHaiEncrypted.class);
-//        String info = SignatureUtils.decryptByPrivateKey(encrypted.getBizContent(), properties.getSelfPrivateKey());
-//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 解密后的参数:{}", requestUrl.getDesc(), info);
-//        return JSON.parseObject(info).toJavaObject(tClass);
-//    }
-
-
-    /**
-     * 标的信息
-     * @param indexRequest
-     * @return
+   private <Q extends PingAnBaseRequest, S extends PingAnBaseResponse> S post(Q q, String url, Class<S> tClass, RequestUrl requestUrl) throws Exception {
+       HttpHeaders httpHeaders = new HttpHeaders();
+       //设置请求头类型
+       httpHeaders.add("Content-Type","application/json;charset=utf-8");
+       httpHeaders.add("Accept","application/json;charset=utf-8");
+       String busReqString = JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+       //打印入参参数
+       InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+               requestUrl.getCode()+"--"+requestUrl.getUrl()+"--"+requestUrl.getDesc(), url, busReqString);
+
+       JSONObject jsonObject = (JSONObject) JSON.toJSON(q);
+       //获取令牌token
+       String token = getToken(properties.getAccessUrl());
+       if(token==null){
+           logger.error("获取令牌接口失败!!!");
+           throw new IllegalArgumentException("获取令牌接口失败");
+       }
+       //拼接token和请求id
+        url=url+"/"+requestUrl.getUrl()+"?access_token="+token+"&request_id="+ RequestIdUtils.createID(requestUrl.getCode());
+        HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toJSONString(), httpHeaders);
+        ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
+        String body = response.getBody();
+        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 返回数据:{}", requestUrl.getCode()+"--"+requestUrl.getUrl()+"--"+requestUrl.getDesc(), body);
+       return JSON.parseObject(body).toJavaObject(tClass);
+   }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 16:07
+     *  @Description: 接口分装
      */
-    public IndexResponse index(IndexRequest indexRequest) {
-        return new IndexResponse();
+    public <Q extends PingAnBaseRequest, S extends PingAnBaseResponse> S verificationResponse(Q q, String url, Class<S> tClass,
+                                                                                            RequestUrl requestUrl) throws Exception {
+        S response = post(q, url, tClass, requestUrl);
+        if("001".equals(requestUrl.getCode())){
+             //处理models[]数据会使用RSA公钥进行加密,合作伙伴使用RSA私钥进行解密
+            SearchPAVehicleListResponse res=(SearchPAVehicleListResponse)response;
+            String modelsStr = JSON.toJSONString(res, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+            //解密
+             logger.info("加密前的内容"+modelsStr);
+            String modelsStrDec = RSAPINGANUtils.extracted(modelsStr, properties.getSelfPrivateKey());
+            logger.info("解密后的内容"+modelsStrDec);
+            SearchPAVehicleListResponse.ModelsDto models = JSON.parseObject(modelsStrDec).toJavaObject(SearchPAVehicleListResponse.ModelsDto.class);
+            res.setModels((List<SearchPAVehicleListResponse.ModelsDto>) models);
+        }
+        //注意002 pdf的解密文件
+        return response;
     }
 
+   /**
+   *  @version
+   *  @author: hxl
+   *  @Date: 2024/3/26 14:14
+   *  @Description:  获取标的信息接口  3.1
+   */
+   public IndexResponse index(IndexRequest indexRequest) throws Exception {
+        return verificationResponse(indexRequest, properties.getUrl(), IndexResponse.class,RequestUrl.R_31);
+    }
+
+
     /**
-     * 平安车型搜索接口
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 16:29
+     *  @Description:  续保确认  4.1
+     */
+    public RenewalConfirmResponse index(RenewalConfirmRequest renewalConfirmRequest) throws Exception {
+        //签名加密
+        Map<String, String> params = new TreeMap<>();
+        params.put("flowid", renewalConfirmRequest.getFlowid());
+        params.put("checkNo", renewalConfirmRequest.getCheckNo());
+        params.put("userId", renewalConfirmRequest.getUserId());
+        logger.info("加密前的内容"+params.toString());
+        //添加加密内容
+        String encryptContent =RSAPINGANUtils.getStringStringMap(params, properties.getSelfPrivateKey());
+        logger.info("加密后的内容"+encryptContent);
+        renewalConfirmRequest.setSignature(encryptContent);
+        //对参数进行签名
+        return verificationResponse(renewalConfirmRequest, properties.getUrl(), RenewalConfirmResponse.class,RequestUrl.R_41);
+    }
+    /**
+     * 平安车型搜索接口  001
      *
      * @param searchPAVehicleListRequest 平安车型请求参数
-     * @param carInfoVo                  晋掌柜车型
      * @return 平安车型
      */
     public SearchPAVehicleListResponse.ModelsDto searchPAVehicle(SearchPAVehicleListRequest searchPAVehicleListRequest,
@@ -90,16 +222,179 @@ public class PinganRequestApiComponents {
         List<SearchPAVehicleListResponse.ModelsDto> models = searchPAVehicleListResponse.getModels();
         return new CarModelsFilterUtils<SearchPAVehicleListResponse.ModelsDto>().to(models, carInfoVo);
     }
+    /**
+     * 平安车型请求参数   001
+     * 对userId、keyword、flowid参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     * RSA私钥找平安获取
+     * @param searchPAVehicleListRequest
+     * @return
+     */
+    public SearchPAVehicleListResponse searchPAVehicleList(SearchPAVehicleListRequest searchPAVehicleListRequest) throws Exception {
+        //签名加密
+        Map<String, String> params = new TreeMap<>();
+        params.put("userId", searchPAVehicleListRequest.getUserId());
+        params.put("keyword", searchPAVehicleListRequest.getKeyword());
+        params.put("flowid", searchPAVehicleListRequest.getFlowid());
+        logger.info("加密前的内容"+params.toString());
+        //添加加密内容
+        String encryptContent =RSAPINGANUtils.getStringStringMap(params, properties.getSelfPrivateKey());
+        logger.info("加密后的内容"+encryptContent);
+        searchPAVehicleListRequest.setSignature(encryptContent);
+
+        return verificationResponse(searchPAVehicleListRequest, properties.getUrl(), SearchPAVehicleListResponse.class,RequestUrl.R_001);
+    }
+    /**
+     * 电子保单   002
+     *
+     * @param policyPdfRequest
+     * @return
+     */
+    public PolicyPdfResponse getPolicyPdf(PolicyPdfRequest policyPdfRequest) throws Exception {
+        //签名加密
+        Map<String, String> params = new TreeMap<>();
+        params.put("userId", policyPdfRequest.getUserId());
+        params.put("documentNo", policyPdfRequest.getDocumentNo());
+        params.put("checkNo", policyPdfRequest.getCheckNo());
+        params.put("vehicle.licenseNo", policyPdfRequest.getVehicle()==null?"":policyPdfRequest.getVehicle().getLicenseNo());
+        params.put("vehicle.frameNo", policyPdfRequest.getVehicle()==null?"":policyPdfRequest.getVehicle().getFrameNo());
+        logger.info("加密前的内容"+params.toString());
+        //添加加密内容
+        String encryptContent =RSAPINGANUtils.getStringStringMap(params, properties.getSelfPrivateKey());
+        logger.info("加密后的内容"+encryptContent);
+        policyPdfRequest.setSignature(encryptContent);
+        return verificationResponse(policyPdfRequest, properties.getUrl(), PolicyPdfResponse.class,RequestUrl.R_002);
+    }
 
     /**
-     * 车辆确认接口
+     * 车辆确认接口   4.2
      *
      * @param carConfirmRequest
      * @return
      */
-    public CarConfirmResponse carConfirm(CarConfirmRequest carConfirmRequest) {
-        return new CarConfirmResponse();
+    public CarConfirmResponse carConfirm(CarConfirmRequest carConfirmRequest) throws Exception {
+        return verificationResponse(carConfirmRequest, properties.getUrl(), CarConfirmResponse.class,RequestUrl.R_42);
+    }
+
+    /**
+     * 交管车辆验证码   4.3
+     * @param dmvehicleInfoRequst
+     * @return
+     */
+    public DmvehicleInfoResponse getDmvehicleInfo(DmvehicleInfoRequst dmvehicleInfoRequst) throws Exception {
+        return verificationResponse(dmvehicleInfoRequst, properties.getUrl(), DmvehicleInfoResponse.class,RequestUrl.R_43);
+    }
+
+    /**
+     * 获取财意险险种套餐列表   4.4
+     * @param unAutoProductListRequest
+     * @return
+     */
+    public UnAutoProductListResponse getUnAutoProductList(UnAutoProductListRequest unAutoProductListRequest) throws Exception {
+        return verificationResponse(unAutoProductListRequest, properties.getUrl(), UnAutoProductListResponse.class,RequestUrl.R_44);
+    }
+
+    /**
+     * 获取财意险险种套餐责任信息   4.5
+     * @param unAutoProductDetailRequest
+     * @return
+     */
+    public UnAutoProductDetailResponse getUnAutoProductDetail(UnAutoProductDetailRequest unAutoProductDetailRequest) throws Exception {
+        return verificationResponse(unAutoProductDetailRequest, properties.getUrl(), UnAutoProductDetailResponse.class,RequestUrl.R_45);
     }
 
+    /**
+     * 保费计算   5.1
+     * @param quoteRequest
+     * @return
+     */
+    public QuoteResponse quote(QuoteRequest quoteRequest) throws Exception {
+        return verificationResponse(quoteRequest, properties.getUrl(), QuoteResponse.class,RequestUrl.R_51);
+    }
+
+    /**
+     * 服务类特约检索   5.2
+     * @param serviceContractRequest
+     * @return
+     */
+    public ServiceContractResponse queryServiceContract(ServiceContractRequest serviceContractRequest) throws Exception {
+        return verificationResponse(serviceContractRequest, properties.getUrl(), ServiceContractResponse.class,RequestUrl.R_52);
+    }
+
+    /**
+     * 补充信息并核保   6.1
+     * @param submitApplyRequest
+     * @return
+     */
+    public SubmitApplyResponse submitApply(SubmitApplyRequest submitApplyRequest) throws Exception {
+        return verificationResponse(submitApplyRequest, properties.getUrl(), SubmitApplyResponse.class,RequestUrl.R_61);
+    }
+    /**
+     * 二维码支付   78
+     * @param scanCodeURLRequest
+     * @return
+     */
+    public ScanCodeURLResponse getScanCodeURL(ScanCodeURLRequest scanCodeURLRequest) throws Exception {
+        return verificationResponse(scanCodeURLRequest, properties.getUrl(),ScanCodeURLResponse.class,RequestUrl.R_78);
+    }
+
+    /**
+     * 承保接口   82
+     * @param acceptRequest
+     * @return
+     */
+    public AcceptResponse accept(AcceptRequest acceptRequest) throws Exception {
+        return verificationResponse(acceptRequest, properties.getUrl(), AcceptResponse.class,RequestUrl.R_82);
+    }
+
+    /**
+     * 单证状态查询   91
+     *
+     * 对userId 、documentNoList、参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     *      * documentNoList值中的单证号按照字典顺序从小到大排序,用逗号分隔,例如
+     *      * documentNoList=1234,2345
+     *      * RSA秘钥找平安获取
+     * @param documentStatusListRequest
+     * @return
+     */
+    public DocumentStatusListResponse getDocumentStatusList(DocumentStatusListRequest documentStatusListRequest) throws Exception {
+        //签名加密
+        Map<String, String> params = new TreeMap<>();
+        params.put("userId", documentStatusListRequest.getUserId());
+        //documentNoList排序加逗号拼接
+        String[] documentNoList = documentStatusListRequest.getDocumentNoList();
+        TreeSet<String> treeSet = new TreeSet<>();
+        for (String  documentNo : documentNoList) {
+             treeSet.add(documentNo);
+        }
+        String documentNoListStr="";
+        for (String documentNoSort : treeSet) {
+            documentNoListStr+=",";
+        }
+        params.put("documentNoList", documentNoListStr.substring(0, documentNoListStr.length() - 1));
+        //添加加密内容
+        logger.info("加密前的内容"+params.toString());
+        //添加加密内容
+        String encryptContent =RSAPINGANUtils.getStringStringMap(params, properties.getSelfPrivateKey());
+        logger.info("加密后的内容"+encryptContent);
+        documentStatusListRequest.setSignature(encryptContent);
+        return verificationResponse(documentStatusListRequest, properties.getUrl(), DocumentStatusListResponse.class,RequestUrl.R_91);
+    }
 
+    /**
+     * 撤销单证   92
+     * @param repealDocumentRequest
+     * @return
+     */
+    public RepealDocumentResponse repealDocument(RepealDocumentRequest repealDocumentRequest) throws Exception {
+        return verificationResponse(repealDocumentRequest, properties.getUrl(), RepealDocumentResponse.class,RequestUrl.R_92);
+    }
+
+    /**
+     * 资料上传   93
+     * @param uploadFilesRequest
+     * @return
+     */
+    public UploadFilesResponse uploadFiles(UploadFilesRequest uploadFilesRequest) throws Exception {
+        return verificationResponse(uploadFilesRequest, properties.getUrl(), UploadFilesResponse.class,RequestUrl.R_93);
+    }
 }

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

@@ -7,7 +7,7 @@ import lombok.Getter;
 
 /**
  * @version
- * @description: 平安
+ * @description: 平安日志打印输出
  * @author: wenks
  * @date: 2024/3/25 14:16
  **/
@@ -22,7 +22,7 @@ public enum RequestUrl {
     R_42("42", "/property/chexian/insure/carConfirm", "车辆信息确认"),
     R_43("43", "/property/chexian/insure/getDmvehicleInfo", "交管车辆验证码"),
     R_44("44", "/property/chexian/insure/getUnAutoProductList", "获取财意险险种套餐列表"),
-    R_45("45", "/property/chexian/insure/ getUnAutoProductDetail", "获取财意险险种套餐责任信息"),
+    R_45("45", "/property/chexian/insure/getUnAutoProductDetail", "获取财意险险种套餐责任信息"),
     R_51("51", "/property/chexian/insure/quote", "保费计算"),
     R_52("52", "/property/chexian/insure/queryServiceContract", "服务类特约检索"),
     R_61("61", "/property/chexian/insure/submitApply", "补充信息并核保"),
@@ -30,12 +30,26 @@ public enum RequestUrl {
     R_82("82", "/property/chexian/insure/accept", "承保接口"),
     R_91("91", "/property/chexian/insure/getDocumentStatusList", "单证状态查询"),
     R_92("92", "/property/chexian/insure/repealDocument", "撤销单证"),
-    R_93("93", "/property/chexian/insure/uploadFiles", "资料上传");
+    R_93("93", "/property/chexian/insure/uploadFiles", "资料上传"),
 
-    private final String code;
+    //=====================支付相关接口 不确定是否在系统中支付先不对接=====================
 
-    private final String url;
+    R_63("63", "/property/chexian/insure/getApplyVerifyCode", "投保短信发送 (获取验证码)"),
+    R_64("64", "/property/chexian/insure/recoverApplyVerifyCode", "短信验证码回收及“阅读状态回收”"),
+    R_65("65", "/property/chexian/insure/signEleApply", "移动端电子投保单签署"),
+    R_72("72", "/property/chexian/insure/noticeDo", "生成支付通知单号");
 
+    /**
+     * 接口api序号
+     */
+    private final String code;
+    /**
+     * 接口路径
+     */
+    private final String url;
+    /**
+     * 描述
+     */
     private final String desc;
 
 }

+ 38 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/AcceptRequest.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 承保接口  8.2 接口入参
+ *  applyPolicyNoList []	documentNo	M	投保单号	[{"documentNo":"50410333901406169677"},{"documentNo":"50410333901406169684"}]
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AcceptRequest extends PingAnBaseRequest{
+
+    /***
+     * 投保单号集合
+     */
+    private ArrayList<ApplyPolicyNoDTO> applyPolicyNoList=new ArrayList<ApplyPolicyNoDTO>();
+    /***
+     *投保单号信息
+     *
+     */
+    @Data
+    public static class ApplyPolicyNoDTO implements Serializable {
+
+        private static final long serialVersionUID = 8797282780429139870L;
+        /***
+         *投保单号
+         * M
+         */
+        private String documentNo;
+    }
+}

+ 525 - 49
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/CarConfirmRequest.java

@@ -10,58 +10,164 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
-
+/**
+ *  @version 
+ *  @author: hxl
+ *  @Date: 2024/3/26 14:13
+ *  @Description:  车辆信息确认  入参参数  4.2
+ *
+ *  flowid 流程ID  必传 使用接口3.1出参flowid
+ *  userId    必传   合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */ 
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class CarConfirmRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = -2970494216237904379L;
-
+    /**
+     *  发起该次查验请求终端设备的物理网卡地址
+     *  M必传
+     */
     private String macAddress;
-
+    /**
+     *  请求终端设备的ip地址;
+     *  M必传
+     */
     private String ip;
-
+    /***
+     * 请求终端设备类型
+     *  可移动设备/不可移动设备。
+     *  M必传
+     */
     private String deviceType;
-
+    /**
+     * 是否是互联网业务,不传默认为N
+     * C
+     * Y/N
+     */
     private String isInternetBusiness;
 
     /**
      *  车辆信息
      */
     private VehicleDTO vehicle;
-
+    /**
+     *  车主信息
+     */
     private RegisterDTO register;
-
+    /**
+     *  被保人信息
+     */
     private InsuredDTO insured;
-
+    /**
+     *  投保人信息
+     */
     private ApplicantDTO applicant;
-
+    /**
+     *  过户信息
+     */
     private BizQuoteDTO bizQuote;
-
+    /**
+     *  交强险信息
+     */
     private ForceQuoteDTO forceQuote;
-
+    /**
+     *  车船税信息
+     */
     private TaxFormDTO taxForm;
-
+    /**
+     *  江苏交管验证码
+     * 接口
+     * getDmvehicleInfo返回
+     * C
+     * 接口index响应报文的isJiangSuShowCheckCode为true时
+     */
     private String jiangSuCheckCode;
-
+    /**
+     *  北京交管验证码
+     * 接口
+     * getDmvehicleInfo返回
+     * C
+     * 接口index响应报文的isBeiJingShowCheckCode为true时
+     */
     private String beiJingCheckCode;
-
+    /**
+     *  交管验证码
+     *  C
+     */
     private String checkCode;
-
+    /**
+     *  是否脱离平台报价(Y-是,N-否(默认))
+     *  C
+     */
     private String isCalculateWithoutCirc;
-
+    /**
+     *  以往投保商业险出险记录
+     *
+     * 01:连续三年及以上无赔款记录
+     * 02:连续两年无赔款记录
+     * 03:上年无赔款记录
+     * 09:首年投保
+     * 04:上年发生一次赔款
+     * 05:上年发生二次赔款
+     * 06:上年发生三次赔款
+     * 07:上年发生四次赔款
+     * 08:上年发生五次及以上赔款
+     * C
+     * isCalculateWithoutCirc为Y时
+     */
     private String bizClaimRecord;
-
+    /**
+     *  交强险有责事故记录
+     * 0.9:上年无事故
+     * 0.8:连续两年无事故
+     * 0.7:连续三年无事故
+     * 1.0:首年投保
+     * 1.0:上年1次及以上无死亡事故
+     * 1.1:上年2次及以上无死亡事故
+     * 1.3:上年有死亡事故
+     * C
+     * isCalculateWithoutCirc为Y时
+     */
     private String forceClaimRecord;
-
+    /**
+     *  备注字段
+     *  0
+     */
     private String remark;
-
+    /**
+     *  是否投保新能源车条款
+     * true
+     * false
+     * (不传默认false)
+     * C
+     */
     private String isNewEnergy;
-
+    /**
+     *  能源类型
+     * 北京:
+     * A:汽油,B:柴油,c:电,D:混合油,E:天然气,F:液化石油气,L:甲醇,M:乙醇,N:太阳能,O:混合动力,Y:无,Z:其它
+     *
+     * 其他地区:
+     * 0: 燃油
+     * 1: 纯电动
+     * 2: 燃料电池
+     * 3: 插电式混合动力
+     * 4: 其他混合动力
+     * C
+     */
     private String energyType;
-
+    /**
+     * 车辆驾驶类型
+     * String类型 1-人工驾驶, 2-自动化驾驶
+     * O
+     */
     private String carDriverType;
-
+    /**
+     *  发展阶段
+     *  String类型 1-道路测试, 2-示范应用, 3-示范运营
+     *  O
+     */
     private String developmentStage;
 
     public CarConfirmRequest(PingAnConfigureParameters parameters, BaseQuoteInfoVo quoteInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
@@ -80,41 +186,181 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     }
 
+    /***
+     * 车辆信息
+     */
     @Data
     public static class VehicleDTO implements Serializable {
 
         private static final long serialVersionUID = -2016238508046403647L;
+        /**
+         * 车辆初登日期
+         * m
+         */
         private String registerDate;
+        /**
+         * 车架号
+         * m
+         */
         private String frameNo;
+        /**
+         * 发动机号
+         * m
+         */
         private String engineNo;
+        /**
+         * 精友车型编码
+         * C
+         * modelCode,paModelCode和modelIndex三者必须传一个
+         */
         private String modelCode;
+        /**
+         * 加密后的精友车型编码(推荐使用)
+         * C
+         * modelCode,paModelCode和modelIndex三者必须传一个
+         */
         private String paModelCode;
+        /**
+         * 精友车型序号
+         * C
+         * modelCode,paModelCode和modelIndex三者必须传一个
+         */
         private String modelIndex;
+        /**
+         * 中保信车型唯一ID
+         * C
+         * 中保信车型返回多车型时传入,取返回参数vehicleModels [].circModels []
+         * 里的车型唯一ID
+         */
         private String vehicleStyleUniqueId;
+        /**
+         * 车型名称
+         * c
+         */
         private String autoModelName;
+        /**
+         * 座位数
+         * C
+         * 精友库无法确定该车型座位数时
+         *
+         */
         private String seats;
         /**
          * 整备质量(吨)
+         * c
+         * C
+         * 北京新车备案或者
+         * 货车必填,江西必录
          */
         private String wholeWeight;
         /**
          * 核定载质量(吨)
+         * C
+         * 北京新车备案或者
+         * 货车必填
          */
         private String tonNumber;
+        /**
+         *排气量(升)
+         *  C
+         * 北京新车备案必填,江西必录
+         */
         private String exhaustMeasure;
+        /**
+         * 功率(KW)
+         * o
+         */
         private String power;
+        /**
+         * 车辆来历凭证种类
+         * 销售发票(01),法院调解书(02),法院裁定书(03),法院判决书(04),仲裁裁决书(05),相关文书(继承、赠予、协议抵债)(06),批准文件(07),调拨证明(08),修理发票(09),车辆合格证(10),货物进口证明书(11)
+         *
+         * 10,11不适用北京地区
+         * C
+         * 北京&&未上牌&&交强险;
+         * 未上牌&&showCircModelsSwitc为true时必传
+         */
         private String vehicleCertiType;
+        /**
+         * 车辆来历凭证编号
+         * C
+         * 北京&&未上牌&&交强险;
+         * 未上牌&&showCircModelsSwitc为true时必传
+         */
         private String vehicleCertiNo;
+        /**
+         * 开具车辆来历凭证所载日期
+         * C
+         * 北京&&未上牌&&交强险;
+         * 未上牌&&showCircModelsSwitc为true时必传
+         */
         private String vehicleCertiDate;
+        /**
+         * 上海新车购置发票日期
+         * C
+         * 上海&&未上牌
+         */
         private String invoiceDate;
+        /**
+         * 车辆使用性质代码(01:营业,02:非营业)
+         * 默认02:非营业
+         * o
+         */
         private String useAttribute;
+        /**
+         * O
+         * 车辆使用性质为01:营业时,并且为客车时必传
+         * 使用性质细分(01:出租租赁,02:城市公交,03:公路客运,04:旅游客运)
+         */
         private String useAttributDetailCode;
+        /**
+         * 所属性质(01:机关,02:企业,03:私人)
+         * 默认03:私人
+         * 车辆使用性质为01:营业时,所属性质不可以选择01:机关
+         * o
+         */
         private String ownAttribute;
+        /**
+         * 已提供上年商业险保单
+         * Y-是
+         * N-否
+         * o
+         */
         private String offerLastPolicyFlag;
+        /**
+         * 已提供本地使用证明
+         * Y-是
+         * N-否
+         * o
+         */
         private String isOfferLocalUseProof;
+        /**
+         *上海行驶证车辆类型
+         * C
+         * 上海车辆类型,在出现缴税有误时传入
+         */
+        @Deprecated
         private String shanghaiVehicleType;
+        /**
+         * 上海,是否新能源车
+         * 0:否
+         * 1:是
+         * o
+         */
+        @Deprecated
         private String isNewEnergyVehicle;
+        /**
+         * 上海平台车型编码
+         * 上海切换全国后不在使用
+         * C
+         * 上海地区车型确认出险多车型时需要取了传入
+         */
+        @Deprecated
         private String vehicleCodeForShangHai;
+        /**
+         * 特殊号牌
+         * 01.枚举详见编码定义10.10
+         */
         private String specialCarLicense;
 
 //        public VehicleDTO(CarInfoVo carInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
@@ -152,103 +398,333 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     }
 
-
+    /***
+     * 车主信息
+     */
     @Data
     public static class RegisterDTO implements Serializable {
         private static final long serialVersionUID = 5813499296522149580L;
-
+        /***
+         * 车主名称
+         */
         private String name;
-
+        /***
+         * 生日
+         */
         private String birthday;
-
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
         private String gender;
-
+        /***
+         * 证件类型
+         * 所属性质为03:私人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06)  ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 所属性质为01:机关和02:企业时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体时只支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         *
+         * 证件类型续保模式录入回传给平安,则需要录入生日、性别。
+         */
         private String idType;
-
+        /***
+         * 证件号码
+         */
         private String idNo;
-
+        /***
+         * 手机或者家庭电话
+         */
         private String mobile;
-
+        /***
+         * 行驶证车主地址
+         * 河北、唐山机构、江西机构时至少录到区县级【地址长度100字符,中文最长50】
+         */
         private String address;
-
+        /**
+         * 江西地区投保必传,也可以放在submitApply补录,地区编码
+         */
         private String addressCode;
-
+        /***
+         * 行驶证发证日期,北京
+         */
         private String certificateDate;
 
     }
 
+    /***
+     * 被保人信息
+     */
     @Data
     public static class InsuredDTO implements Serializable {
 
         private static final long serialVersionUID = 3194577722449684615L;
-
+        /***
+         *个团标志[1个人,0团体]
+         * 默认1个人
+         * O
+         */
         private String personnelType;
+        /***
+         * 被保人名称
+         * M
+         */
         private String name;
+        /***
+         * 证件类型
+         * 个团标志为1-个人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0-团体时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,T团体时只支持01,03,05
+         * M
+         */
         private String idType;
+        /***
+         *   证件号码
+         *   M
+         */
         private String idNo;
+        /***
+         *  性别
+         * 男(M),女(F)
+         * C
+         * 传身份证号码时,可不传
+         */
         private String gender;
+        /***
+         *  被保人证件有效期开始日期
+         *  C
+         * 证件类型为身份证必传
+         */
         private String certificateIssueDate;
+        /***
+         *  投保人证件有效期截止日期(如果长期传9999-01-01)
+         *  C
+         * 证件类型为身份证、护照、台湾通行证、港澳通行证、港澳台居住证、外国永久居留证、外国居留证、外国临时居住证时必传
+         */
         private String certificateValidDate;
+        /***
+         * 出生日期
+         * yyyy-mm-dd
+         * C
+         * 传身份证号码时,可不传
+         */
         private String birthday;
+        /***
+         * 手机或者家庭电话
+         *  M
+         *          * 浙江、大连必传
+         *          *
+         *          * 可以放在6.1  submitApply接口补录
+         */
         private String mobile;
+        /***
+         * 组织机构类型
+         *          * 02-个体工商户
+         *          * 03-企业非法人
+         *          * 04-企业法人
+         *          * 05-机关法人
+         *          * 06-机关非法人
+         *          * 07-事业法人
+         *          * 08-事业非法人
+         *          * 09-社团法人
+         *          * 10-社团非法人
+         *          * 11-工会法人
+         *          * 12-民办非企业单位
+         *          * 13-其他
+         *          *
+         *          * C
+         *          * 个团标志为0-团体时
+         */
         private String organizationType;
+        /***
+         *  电话总机
+         *  C
+         * 个团标志为0-团体时
+         */
         private String phoneExchange;
+        /***
+         * 联系人姓名
+         * C
+         * 个团标志为0-团体时
+         */
         private String contactName;
+        /***
+         * 联系人证件类型
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0-团体时且为上海机构
+         */
         private String linkManCertificateTypeCode;
+        /***
+         * 联系人证件号码
+         * 个团标志为0-团体时且为上海机构
+         */
         private String linkManCertificateNo;
+        /***
+         *  手机持有人姓名
+         *  个团标志为0-团体时且为上海机构且联系人证件类型为身份证且不是联系人本人
+         *
+         * 个团标志为1-个人且为上海机构且被保人证件类型为身份证且不是被保人本人
+         *
+         *
+         */
         private String phoneHolderName;
+        /***
+         * 手机持有人证件类型
+         * 居民身份证(01)
+         * 同insured.phoneHolderName
+         */
         private String phoneHolderCertificateType;
+        /***
+         *手机持有人证件号码
+         * 同insured.phoneHolderName
+         */
         private String phoneHolderCertificateNo;
+        /***
+         *地址
+         * 同身份证上的地址保持一致
+         * 【地址长度100字符,中文最长50】
+         * M
+         *
+         * 浙江、大连必传
+         */
         private String address;
 
     }
-
+    /***
+     * 投保人信息
+     */
     @Data
     public static class ApplicantDTO implements Serializable {
 
         private static final long serialVersionUID = -6224889213421486612L;
-
+        /***
+         *  个团标志[1个人,0团体]
+         * 默认1个人
+         * C
+         * 上海地区必传
+         */
         private String personnelType;
-
+        /***
+         *投保人名称
+         * C
+         * 上海地区必传
+         */
         private String name;
-
+        /***
+         * 投保人证件有效期开始日期
+         * C
+         * 证件类型为身份证必传
+         */
         private String certificateIssueDate;
-
+        /***
+         *投保人证件有效期截止日期(如果长期传9999-01-01)
+         * C
+         * 证件类型为身份证、护照、台湾通行证、港澳通行证、港澳台居住证、外国永久居留证、外国居留证、外国临时居住证时必传
+         */
         private String certificateValidDate;
     }
-
+    /***
+     *  过户信息
+     */
     @Data
     public static class BizQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 8584350525465881646L;
-
+        /***
+         * 是否为过户车
+         * 是-1,否-0
+         * M
+         */
         private String specialCarFlag;
-
+        /***
+         * 过户日期
+         * yyyy-mm-dd
+         * C
+         */
         private String specialCarDate;
     }
-
+    /***
+     *
+     */
     @Data
     public static class ForceQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 5551652885963961844L;
-
+        /***
+         *燃料类型
+         * 北京:
+         * A:汽油,B:柴油,c:电,D:混合油,E:天然气,F:液化石油气,L:甲醇,M:乙醇,N:太阳能,O:混合动力,Y:无,Z:其它
+         *
+         * 其他地区:
+         * 0: 燃油
+         * 1: 纯电动
+         * 2: 燃料电池
+         * 3: 插电式混合动力
+         * 4: 其他混合动力
+         * C
+         * 交强险
+         */
         private String fuelType;
 
     }
-
+    /***
+     * 车船税信息
+     */
     @Data
     public static class TaxFormDTO implements Serializable {
 
         private static final long serialVersionUID = 467492463257226669L;
-
+        /***
+         * 1-缴税,
+         * 2-不缴税
+         * 3-已完税
+         * 4-减税
+         * 5-免税
+         * M
+         * 全国车船税是否代缴
+         */
         private String taxType;
-
+        /***
+         * 完税凭证号
+         * C
+         * 全国&&已完税
+         */
         private String taxPayNo;
-
+        /***
+         *  完税凭证填发日期
+         *  C
+         * 非北京上海&&已完税(北京切全国后完税需传)
+         */
         private String taxDocumentDate;
-
+        /***
+         *  开具完税凭证的税务机关名称
+         *  C
+         * 全国&&已完税
+         */
         private String taxPaidOrgName;
-
+        /***
+         *开具完税凭证地区代码
+         * 枚举值见10.5
+         * C
+         * 非北京上海&&已完税(北京切全国后完税需传)
+         */
         private String taxPaidAreaCode;
 
     }

+ 50 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/DmvehicleInfoRequst.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:26
+ *  @Description:   交管车辆验证码   4.3   接口入参
+ *  flowid	M	流程ID
+ * userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DmvehicleInfoRequst extends PingAnBaseRequest {
+
+    /**
+     *  车辆信息
+     */
+    private VehicleDTO vehicle;
+
+
+    /***
+     * 车辆信息
+     */
+    @Data
+    public static class VehicleDTO implements Serializable {
+
+        /**
+         * 车架号
+         * m
+         */
+        private String frameNo;
+        /**
+         * 发动机号
+         * m
+         */
+        private String engineNo;
+        /**
+         * 号牌种类
+         * C
+         * 02小型汽车,具体枚举参考编码定义10.9
+         */
+        private String licenceTypeCode;
+    }
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/DocumentStatusListRequest.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 单证状态查询  9.1 接口入参
+ *  userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ *
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DocumentStatusListRequest extends PingAnBaseRequest{
+
+    /***
+     * 投保单号集合
+     * M	单证列表
+     * 条数上限:2条	[“50821003900209786387”,” 50821003900209786387”]
+     */
+    private String[] documentNoList;
+    /***
+     * M
+     * 对userId 、documentNoList、参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     * documentNoList值中的单证号按照字典顺序从小到大排序,用逗号分隔,例如
+     * documentNoList=1234,2345
+     * RSA秘钥找平安获取
+     */
+    private String  signature;
+}

+ 43 - 5
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/IndexRequest.java

@@ -11,7 +11,18 @@ import java.io.Serializable;
 
 /**
  * @version
- * @description: 首页 请求实体
+ * @description: 标的检查 3.1  接口入参    userId 必传属性M
+ * flowid    C 条件出现  返回多标的时传入。其余情况为出参返回
+ *
+ *   0-[成功]
+ *      * 1-上年在平安有投保记录[成功]
+ *      * 2-商交均未到期,不满足提前投保天数
+ *      * 3-未查到当前城市
+ *      * 4-未开通当前渠道机构
+ *      * 5-好伙伴账号校验不通过(不存在or账号绑定的相关字段已失效)
+ *      * 6-该车牌对应多个标的,需要进行确认
+ *      * 7-北京地区兼业代理投保且为非金融业务,并未维护兼业代理从业人员信息,请到PMS维护
+ *      *  M 必然返回
  * @author: wenks
  * @date: 2024/3/21 8:57
  **/
@@ -23,21 +34,35 @@ public class IndexRequest extends PingAnBaseRequest {
 
     /**
      * 由平安提供数据字段
+     * 该场景模式需要平安额外配置,提前和平安沟通
+     * C 条件出现
      */
     private String cityCode;
 
     /**
      * 平安好伙伴外网录单账号
+     *  C 条件出现
      */
     private String inputBy;
 
     /**
      * 车商编码/合作网点编码
+     * 当好伙伴账号需要选择网点时,可登录好伙伴PC系统查看
+     *  C 条件出现
      */
     private String saleCode;
-
+    /**
+     * 车辆相关信息
+     */
     private VehicleDTO vehicle;
-
+    /**
+     * 商业险车贷投保多年标志
+     */ 
+    private BizQuoteDTO bizQuote;
+    /**
+     * 是否允许重复投保标志(true:允许重复投保 false:默认不允许重复投保)
+     * 默认false
+     */ 
     private boolean isAllowRepeat;
 
     public IndexRequest(PingAnConfigureParameters parameters, CarInfoVo carInfoVo) {
@@ -48,19 +73,27 @@ public class IndexRequest extends PingAnBaseRequest {
         this.vehicle = new VehicleDTO(carInfoVo);
         this.isAllowRepeat = false;
     }
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 11:31
+     *  @Description:  车辆相关信息
+     */
     @Data
     public static class VehicleDTO implements Serializable {
 
         private static final long serialVersionUID = 408333879699278346L;
         /**
          * 车牌号码
+         *  默认不传就是新车未上牌,平安会给每个二级机构默认一个车牌,建议合作伙伴按照各城市字母前缀传入
+         *  C 条件出现
          */
         private String licenseNo;
 
         /**
          * 车架号
          * 如果返回多标的时传targetNo的值
+         * 此处也可以不传,然后放在carConfirm接口中传递。续保场景建议车牌号、车架号均传入。
          */
         private String frameNo;
 
@@ -71,7 +104,12 @@ public class IndexRequest extends PingAnBaseRequest {
         }
 
     }
-
+   /**
+    *  @version
+    *  @author: hxl
+    *  @Date: 2024/3/26 11:35
+    *  @Description: 商业险车贷投保多年标志
+    */
     @Data
     public static class BizQuoteDTO implements Serializable {
 

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PingAnBaseRequest.java

@@ -4,6 +4,12 @@ import lombok.Data;
 
 import java.io.Serializable;
 
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 11:16
+ *  @Description: 平安接口入参基础类
+ */
 @Data
 public class PingAnBaseRequest implements Serializable {
 

+ 63 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PolicyPdfRequest.java

@@ -0,0 +1,63 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 17:08
+ *  @Description: 电子保单pdf  001  接口入参
+ *  userId	M	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ *
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PolicyPdfRequest extends PingAnBaseRequest{
+    /***
+     * M	保单号(交强险/商业险)
+     */
+    private  String documentNo;
+
+    /***
+     * M	完整的车主证件号
+     */
+    private String   checkNo;
+    /***
+     * C	是否非车保单
+     * true-是  false-否
+     * (可不传,默认false)
+     * 此字段不进行加签
+     */
+
+    private String   isUnAutoPolicy;
+    /***
+     *  M	对入参字段按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     * RSA秘钥找平安获取
+     */
+    private String  signature;
+    /**
+     *  车辆信息
+     */
+    private VehicleDTO vehicle;
+
+    /***
+     * 车辆信息
+     */
+    @Data
+    public static class VehicleDTO implements Serializable {
+        /**
+         * M	车牌号码
+         */
+        private String licenseNo;
+        /**
+         * C
+         * 优先读取车架号,其次读取车牌号	车架号
+         */
+        private String frameNo;
+
+    }
+
+}

+ 805 - 54
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/QuoteRequest.java

@@ -3,233 +3,984 @@ package com.ydtech.modules.order.entity.api.pingan.request;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:57
+ *  @Description:  保费计算   5.1  接口入参
+ *  flowid	M	流程ID
+ * userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
 @Data
-public class QuoteRequest implements Serializable {
+public class QuoteRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = 2169810871161326883L;
-
+    /***
+     * 是否投保商业险
+     * true,false
+     * M
+     */
     private boolean applyBiz;
-
+    /***
+     * 商业险信息
+     */
     private BizQuoteDTO bizQuote;
-
+    /***
+     * 是否允许商业险重复投保标志(true:允许商业险重复投保 false:默认不允许商业险重复投保)
+     * 默认false
+     * c
+     */
     private boolean isAllowBizRepeat;
-
+    /***
+     * N:中介价1
+     * Y:中介价2
+     * 1:线上价
+     * 默认:N
+     * o
+     */
     private boolean isOnlineProducts;
 
+    //==================20版-商业险报价套餐============================================
+    /***
+     *  机动车损失保险
+     * 0:不投保
+     * 1:投保
+     * c
+     */
     private String amount01;
+    /***
+     * 机动车损失保险保额
+     * c
+     */
     private String inputAmount;
+    /***
+     * 车损险绝对免赔额(元)
+     * 0:不投保
+     * 300
+     * 500
+     * 1000
+     * 2000
+     * c
+     */
     private String inputAmount01;
+    /***
+     * 机动车第三者责任保险
+     * 0:不投保
+     * 上限1000万
+     * 2000000:200万
+     * 1500000:150万
+     * 1000000:100万
+     * 500000:50万
+     * 300000:30万
+     * 200000:20万
+     * 150000:15万
+     * 100000:10万
+     *
+     * 10万起步,实际售卖套餐上限可以与业务确认。大于100万后需要每次增加50万额度。
+     * c
+     */
     private String amount02;
+    /***
+     * 机动车车上人员责任保险(司机)
+     *
+     * 0:不投保
+     * 200000:20万
+     * 100000:10万
+     * 50000: 5万
+     * 40000:4万
+     * 30000:3万
+     * 20000:2万
+     * 10000:1万
+     * c
+     */
     private String amount04;
+    /***
+     机动车车上人员责任保险(乘客)
+     *
+     * 0:不投保
+     * 200000:20万
+     * 100000:10万
+     * 50000: 5万
+     * 40000:4万
+     * 30000:3万
+     * 20000:2万
+     * 10000:1万
+     * c 单座
+     */
     private String amount05;
+    /***
+     * 附加车上货物责任险
+     *
+     * 0:不投保
+     * 200000:20万
+     * 100000:10万
+     * 50000: 5万
+     * 20000:2万
+     * 10000:1万
+     *
+     * 限营业货车。
+     * c
+     */
     private String amount06;
+    /***
+     * 附加医保外用药责任险(三者)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount07Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount07Fee不需要有值。
+     * c
+     */
     private String amount07;
+    /***
+     * 附加医保外用药责任险保额(三者)
+     * 分为如下档次:
+     * 5k 1w 2w 5w 10w 15w 20w 30w
+     * 50w 100w 150w 200w 300w 400w 600w 800w1000w
+     * c
+     */
     private String amount07Fee;
+    /***
+     * 附加医保外用药责任险(司机)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount08Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount08Fee不需要有值。
+     * c
+     */
     private String amount08;
+    /***
+     * 附加医保外用药责任险保额(司机),分为如下档次:
+     * 5k 1w 2w 5w 10w 15w 20w 30w
+     * 50w 100w 150w 200w 300w 400w 600w 800w 1000w
+     * c
+     */
     private String amount08Fee;
+    /***
+     * 附加医保外用药责任险(乘客)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount09Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount09Fee不需要有值。
+     * c
+     */
     private String amount09;
+    /***
+     * 附加医保外用药责任险保额(乘客),分为如下档次:
+     * 5k 1w 2w 5w 10w 15w 20w 30w
+     * 50w 100w 150w 200w 300w 400w 600w 800w 1000w
+     * c
+     */
     private String amount09Fee;
+    /***
+     * 附加修理期间费用补偿险
+     * 0:不投保
+     * [1~90]投保的天数
+     * c
+     */
     private String amount10;
+    /***
+     * 修理期间费用补偿险每天补偿金额
+     * c
+     */
     private String amount10Fee;
+    /***
+     * 附加新增加设备损失险
+     * 0:不投保
+     * 1:投保
+     * c
+     */
     private String amount11;
+    /***
+     * 附加车身划痕损失险
+     * 0:不投保
+     * 2000:2000
+     * 5000:5000
+     * 10000:1万
+     * 20000:2万
+     * c
+     */
     private String amount17;
+    /***
+     * 附加精神损害抚慰金责任险(三者)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount32;
+    /***
+     * 附加精神损害抚慰金责任险(司机)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount30;
+    /***
+     * 附加精神损害抚慰金责任险(乘客)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount31;
+    /***
+     * 附加车轮单独损失险
+     * 0:不投保
+     * 2000:2000
+     * 3000:3000
+     * 5000:5000
+     * 8000:8000
+     * 10000:10000
+     * 15000:15000
+     * c
+     */
     private String amount52;
+    /***
+     * 附加绝对免赔率特约险(车损)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount53;
+    /***
+     * 附加绝对免赔率特约险(三者)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount54;
+    /***
+     * 附加绝对免赔率特约险(车上人员司机)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount55;
+    /***
+     * 附加绝对免赔率特约险(车上人员乘客)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount56;
+    /***
+     * 机动车钥匙丢失或损坏费用补偿险
+     * 0:不投保
+     * 1000:1000
+     * 2000:2000
+     * 3000:3000
+     * 5000:5000
+     *
+     * 中保信暂未配置,平安暂不售卖
+     * c
+     */
     private String amount73;
+    /***
+     * 附加法定节假日限额翻倍险
+     * 0:不投保
+     * 投保金额:与三者保额一致。根据三者保额调整自动变更。
+     * c
+     */
     private String amount74;
+    /***
+     * 附加发动机进水损坏除外特约条款
+     * 0:不投保
+     * 1:投保
+     *
+     * 无需录入保额
+     * c
+     */
     private String amount75;
+    /***
+     * 道路救援服务特约条款(9座以下非营业客车可以投保)
+     * 0:不投保
+     * 2:赠送
+     * 7:2+5次
+     * 12:2+10次
+     * 17:2+15次
+     * 22:2+20次
+     *
+     * 投保时22次赠送。
+     * 后台传递2、7、12、17、22
+     * 任意主险投保则带出
+     * c
+     */
     private String amount01Sv;
+    /***
+     *车辆安全检测特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+     * 0:不投保
+     * 其余享受服务的次数
+     * 默认不勾选
+     * 任意主险投保则带出
+     * c
+     */
     private String amount02Sv;
+    /***
+     * 代为驾驶服务特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+     * 0:不投保
+     * 其余享受服务的次数
+     * 默认不勾选
+     * 任意主险投保则带出
+     * c
+     */
     private String amount03Sv;
+    /***
+     * 代为送检服务特约条款(
+     * 9座以下非营业客车才可以勾选。)
+     * 0:不投保
+     * 1:投保
+     * 界面展示1次
+     * 任意主险投保则带出
+     * c
+     */
     private String amount04Sv;
-
-    private List<Amount11DeviceListDTO> amount11DeviceList;
-
+    /***
+     * 新增加设备损失险设备信息列表
+     */
+    private List<Amount11DeviceListDTO> amount11DeviceList=new ArrayList<Amount11DeviceListDTO>();
+    /***
+     * 是否投保交强险
+     * true,false
+     *
+     * m
+     */
     private String applyForce;
-
+    /***
+     * 交强险信息
+     */
     private ForceQuoteDTO forceQuote;
-
+    /***
+     * 商业险转保业务投保查询校验码
+     * C
+     * 5.1接口商业险resultCode返回8时
+     */
     private String bizApplyCheckCode;
-
+    /***
+     * 交强险转保业务投保查询校验码
+     * C
+     * 5.1接口交强险resultCode返回9时
+     */
     private String forceApplyCheckCode;
-
+    /***
+     * 商业险家用车折扣方案序号
+     *
+     */
     private BizDecisionTreeDTO bizDecisionTree;
 
+    //================商业险通融报价
+    //     * (只有投保商业险保费计算之后,才能调用)======================================
+    /***
+     * 是否通融报价
+     * true,false
+     * M
+     */
     private String accommodationFlag;
-
+    /***
+     * 通融紧急程度
+     * 1-普通,2-紧急
+     * C
+     */
     private String accommodationUrgency;
-
+    /***
+     * 自主定价系数(车险综合改革后,仅可支持此系数调整,界面需同步调整,74、76不再返回)
+     * C
+     */
     private String ratioFactor78;
-
+    /***
+     * 通融原因
+     * C
+     */
     private String accommodationReason;
-
-    private List<DocListDTO> docList;
-
+    /***
+     * 文件集合
+     */
+    private List<DocListDTO> docList=new ArrayList<DocListDTO>();
+    /***
+     * 是否投保财意险
+     * true,false
+     * M
+     */
     private String applyUnAuto;
-
+    /***
+     * 是否投保小微险
+     * true,false
+     * M
+     */
     private String applyXiaoWei;
-
-    private List<UnAutoListInfoDTO> unAutoListInfo;
-
-    private List<UnAutoListInfoDTO> xiaoWeiListInfo;
-
+    /***
+     * 财意险列表
+     */
+    private List<UnAutoListInfoDTO> unAutoListInfo=new ArrayList<UnAutoListInfoDTO>();
+    /***
+     * 小微险列表
+     */
+    private List<UnAutoListInfoDTO> xiaoWeiListInfo=new ArrayList<UnAutoListInfoDTO>();
+    /***
+     * 非车代理人编码
+     * (投保车驾意,且需要使用网点自己的非车代理需要传入。如下协议、子协议号都需要传入。)
+     * C
+     */
     private String unAutoAgentCode;
-
+    /***
+     * 非车代理人协议
+     * C
+     */
     private String unAutoAgentAgreementNo;
-
+    /***
+     * 非车代理协议子协议号
+     * C
+     */
     private String unAutoSupplementAgreementNo;
-
+    /***
+     * 新能源汽车损失保险
+     * 0:不投保
+     * 1:投保
+     * C
+     */
     private String amount01XNY;
+    /***
+     * 新能源汽车损失保险保额
+     * C
+     */
     private String inputAmountXNY;
+    /***
+     * 车损险绝对免赔额(元)
+     *
+     * 保额档次:同机动车
+     * C
+     */
     private String inputAmount01XNY;
+    /***
+     * 新能源汽车第三者责任保险
+     *
+     * 保额档次:同机动车
+     * C
+     */
     private String amount02XNY;
+    /***
+     * 新能源汽车车上人员责任保险(司机)
+     *
+     * 保额档次:同机动车
+     * C
+     */
     private String amount03XNY;
+    /***
+     *新能源汽车车上人员责任保险(乘客)
+     *
+     * 保额档次:同机动车
+     * c 单座
+     */
     private String amount04XNY;
+    /***
+     * 附加绝对免赔率特约险(车损)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount05XNY;
+    /***
+     * 附加绝对免赔率特约险(三者)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount06XNY;
+    /***
+     * 附加绝对免赔率特约险(车上人员司机)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount07XNY;
+    /***
+     * 附加绝对免赔率特约险(车上人员乘客)
+     * 0:不投保
+     * 5%
+     * 10%
+     * 15%
+     * 20%勾选
+     *
+     * 传递后台5、10等数字即可,非小数
+     * c
+     */
     private String amount08XNY;
+    /***
+     * 附加车轮单独损失险
+     *
+     * 保额档次:同机动车
+     * c
+     */
     private String amount09XNY;
+    /***
+     * 附加新增加设备损失险
+     * 0:不投保
+     * 1:投保
+     * c
+     */
     private String amount10XNY;
+    /***
+     * 附加车身划痕损失险
+     * 保额档次:同机动车
+     * c
+     */
     private String amount11XNY;
+    /***
+     * 附加修理期间费用补偿险
+     * 0:不投保
+     * [1~90]投保的天数
+     * c
+     */
     private String amount12XNY;
+    /***
+     * 修理期间费用补偿险每天补偿金额
+     * c
+     */
     private String amount12XNYFee;
+    /***
+     * 附加车上货物责任险
+     *
+     * 保额档次:同机动车
+     * 限营业货车。
+     * c
+     */
     private String amount13XNY;
+    /***
+     * 附加精神损害抚慰金责任险(三者)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount14XNY;
+    /***
+     * 附加精神损害抚慰金责任险(三者)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount15XNY;
+    /***
+     * 附加精神损害抚慰金责任险(乘客)
+     * 0:不投保
+     * [投保金额:16位数字,最多两位小数]
+     * c
+     */
     private String amount16XNY;
+    /***
+     * 附加法定节假日限额翻倍险
+     * 0:不投保
+     * 投保金额:与三者保额一致。根据三者保额调整自动变更
+     * c
+     */
     private String amount17XNY;
+    /***
+     * 附加医保外用药责任险(三者)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount18Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount18Fee不需要有值。
+     * c
+     */
     private String amount18XNY;
+    /***
+     * 附加医保外用药责任险保额(三者)
+     * 分为如下档次:
+     * 同机动车
+     * c
+     */
     private String amount18XNYFee;
+    /***
+     * 附加医保外用药责任险(司机)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount19Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount19Fee不需要有值。
+     * c
+     */
     private String amount19XNY;
+    /***
+     * 附加医保外用药责任险保额(司机),分为如下档次:
+     * 同机动车
+     * c
+     */
     private String amount19XNYFee;
+    /***
+     * 附加医保外用药责任险(乘客)
+     * 0:不投保
+     * 1:投保,单独保额。参照amount20Fee档次
+     * 999:共享保额,与主险保额共享。保额字段amount20Fee不需要有值。
+     * c
+     */
     private String amount20XNY;
+    /***
+     * 附加医保外用药责任险保额(乘客),分为如下档次:
+     * 同机动车
+     * c
+     */
     private String amount20XNYFee;
+    /***
+     * 附加外部电网故障损失险
+     * 0:不投保
+     * 1:投保
+     * 保额默认为主险新能源汽车车损险保额
+     *
+     * 仅对纯电和插电混动两个能源类型的车可保,燃料电池不可保
+     * c
+     */
     private String amount21XNY;
+    /***
+     * 附加自用充电桩损失保险
+     * 0:不投保
+     * 1:投保
+     * c
+     */
     private String amount22XNY;
+    /***
+     * 附加自用充电桩责任保险
+     * 0:不投保
+     * 1:投保
+     * c
+     */
     private String amount23XNY;
+    /***
+     * 道路救援服务特约条款(9座以下非营业客车可以投保)
+     * 0:不投保
+     * 同机动车传值
+     * c
+     */
     private String amount01SvXNY;
+    /***
+     * 车辆安全检测特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+     * 0:不投保
+     * 同机动车传值
+     * c
+     */
     private String amount02SvXNY;
+    /***
+     * 代为驾驶服务特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+     * 0:不投保
+     * 同机动车传值
+     * c
+     */
     private String amount03SvXNY;
+    /***
+     * 代为送检服务特约条款(
+     * 9座以下非营业客车才可以勾选。)
+     * 0:不投保
+     * 1:投保
+     * 同机动车传值
+     * c
+     */
     private String amount04SvXNY;
-
-    private List<Amount10XNYDeviceListDTO> amount10XNYDeviceList;
-
-    private List<Amount22XNYChargingPostListDTO> amount22XNYChargingPostList;
-
+    /***
+     *  新增加设备损失险设备信息列表
+     *
+     */
+    private List<Amount10XNYDeviceListDTO> amount10XNYDeviceList=new ArrayList<Amount10XNYDeviceListDTO>();
+    /***
+     *  投保附加自用充电桩损失保险
+     * 【自用充电桩设备信息列表,最多3个桩】
+     */
+    private List<Amount22XNYChargingPostListDTO> amount22XNYChargingPostList=new ArrayList<Amount22XNYChargingPostListDTO>();
+
+    /***
+     *  投保附加自用充电桩损失保险
+     * 【自用充电桩设备信息列表,最多3个桩】
+     */
+    private List<Amount23XNYChargingPostListDTO> amount23XNYChargingPostList=new ArrayList<Amount23XNYChargingPostListDTO>();
+
+    /***
+     * 商业险信息
+     */
     @Data
     public static class BizQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 8602378544549217224L;
-
+        /***
+         * 商业险起保日期
+         * yyyy-mm-dd hh:mm:ss
+         * M
+         */
         private String beginDate;
-
+        /***
+         * 商业险短期单止期
+         * yyyy-mm-dd hh:m:ss
+         * C
+         */
         private String endDate;
-
+        /***
+         * 商业险车贷投保多年标志(1:车贷投保多年 0:未车贷投保多年)
+         * 默认0
+         * C
+         */
         private String loanVehicleFlag;
 
     }
-
+    /***
+     * 交强险信息
+     */
     @Data
     public static class ForceQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 8602378544549217224L;
-
+        /***
+         * 交强险保险起期
+         * yyyy-mm-dd hh:mm:ss
+         * M
+         */
         private String beginDate;
 
     }
-
+    /***
+     * 商业险家用车折扣方案序号
+     */
     @Data
     public static class BizDecisionTreeDTO implements Serializable {
 
         private static final long serialVersionUID = 8870681514978773365L;
-
+        /***
+         * 商业险家用车折扣方案序号
+         *
+         */
         private String sortNo;
 
     }
-
+    /***
+     * 文件集合
+     */
     @Data
     public static class DocListDTO implements Serializable {
 
         private static final long serialVersionUID = 6955022128518406978L;
-
+        /***
+         * 上传至iobs的文件id
+         * 建议用以下拼接,可以确保唯一
+         * {client_id}-{YYYYMMDDHHMISS}-{UUID}
+         *  c
+         */
         private String docId;
+        /***
+         *  文件大类编码
+         *  c
+         */
         private String documentClass;
+        /***
+         * 文件小类编码
+         * c
+         */
         private String documentType;
+        /***
+         * 文件名称(不包含后缀,文件大类-文件小类+该小类的第几个文件)
+         * c
+         */
         private String documentName;
+        /***
+         * 文件格式(不带”.”)
+         * c
+         */
         private String documentFormat;
+        /***
+         * 文件大小(可不传)
+         * c
+         */
         private String documentSize;
 
     }
-
+    /***
+     * 小微险列表  财意险列表
+     */
     @Data
     public static class UnAutoListInfoDTO implements Serializable {
 
         private static final long serialVersionUID = -6298513343991052214L;
-
+        /***
+         * 产品编码
+         * M
+         */
         private String productCode;
+        /***
+         * 套餐编码
+         * M
+         */
         private String packageCode;
+        /***
+         * 购买份数
+         * M
+         */
         private String sellListSize;
 
 
     }
-
+    /***
+     * 新增加设备损失险设备信息列表
+     */
     @Data
     public static class Amount10XNYDeviceListDTO implements Serializable {
 
         private static final long serialVersionUID = 6863134086698512097L;
-
+        /***
+         * 设备名称
+         */
         private String subjectName;
-
+        /***
+         * 设备保额
+         */
         private String insuredAmount;
     }
 
-
+    /***
+     * 新增加设备损失险设备信息列表
+     */
     @Data
     public static class Amount11DeviceListDTO implements Serializable {
 
         private static final long serialVersionUID = -6591231607784848595L;
-
+        /***
+         * 设备名称
+         * c
+         *
+         */
         private String subjectName;
-
+        /***
+         * 设备保额
+         * c
+         */
         private String insuredAmount;
 
     }
-
+    /***
+     * 自用充电桩设备信息列
+     */
     @Data
     public static class Amount22XNYChargingPostListDTO implements Serializable {
 
         private static final long serialVersionUID = -894470366239236223L;
-
+        /***
+         * 充电桩设备名称
+         * m
+         */
         private String subjectName;
+        /***
+         * 保额档次
+         * 2000
+         * 5000
+         * 10000
+         * 20000
+         * m
+         */
         private String insuredAmount;
+        /***
+         * 充电桩型号
+         * c
+         */
         private String chargingPostType;
+        /***
+         * 充电桩编码
+         * c
+         */
         private String chargingPostCode;
+        /***
+         * 充电桩安装地点
+         * c
+         */
         private String chargingPostAddress;
+        /***
+         * 安装地点类型
+         * 1: 地面停车场
+         * 2: 地面停车楼/地下停车场
+         * m
+         */
         private String chargingPostAddressType;
+        /***
+         * 充电桩种类
+         * 1: 地面充电桩
+         * 2: 壁挂式充电桩
+         * 9: 其他类充电桩
+         * m
+         */
         private String chargingPostKind;
 
     }
-
+    /***
+     * 自用充电桩设备信息列
+     */
     @Data
     public static class Amount23XNYChargingPostListDTO implements Serializable {
 
         private static final long serialVersionUID = 3929526327182409487L;
-
+        /***
+         * 充电桩设备名称
+         * m
+         */
         private String subjectName;
+        /***
+         * 保额档次
+         * 2000
+         * 5000
+         * 10000
+         * 20000
+         * m
+         */
         private String insuredAmount;
+        /***
+         * 充电桩型号
+         * c
+         */
         private String chargingPostType;
+        /***
+         * 充电桩编码
+         * c
+         */
         private String chargingPostCode;
+        /***
+         * 充电桩安装地点
+         * c
+         */
         private String chargingPostAddress;
+        /***
+         * 安装地点类型
+         * 1: 地面停车场
+         * 2: 地面停车楼/地下停车场
+         * m
+         */
         private String chargingPostAddressType;
+        /***
+         * 充电桩种类
+         * 1: 地面充电桩
+         * 2: 壁挂式充电桩
+         * 9: 其他类充电桩
+         * m
+         */
         private String chargingPostKind;
 
 

+ 13 - 3
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/RenewalConfirmRequest.java

@@ -4,7 +4,9 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * @description: 续保确认 请求实体
+ * @description: 续保确认 请求入参  4.1
+ * flowid   流程ID  使用接口3.1出参flowid     flowid 必须得存储
+ * userId   必传   合作伙伴操作用户ID,用来记录合作伙伴操作人身份
  * @author: wenks
  * @date: 2024/3/21 9:11
  **/
@@ -13,7 +15,15 @@ import lombok.EqualsAndHashCode;
 public class RenewalConfirmRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = -5378494631164497419L;
-
+    /***
+     * M 必须传值
+     * 车主证件后6位
+     */
     private String checkNo;
-
+    /***
+     * M 必须传值
+     * 对flowid,checkNo,userId参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     * RSA秘钥找平安获取
+     */
+    private String signature;
 }

+ 36 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/RepealDocumentRequest.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 撤销单证  9.2 接口入参
+ *  userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class RepealDocumentRequest extends PingAnBaseRequest{
+
+    /***
+     * 1-撤销投保单,2-撤销通知单,3-撤销投保预确认码,4-撤销平台交易号
+     *
+     * 上海地区(1和2二选一):1)先撤销通知单再撤销投保预确认;2)先撤销平台交易号再撤销投保预确认
+     * M
+     */
+    private String documentType;
+    /***
+     * 通知单号或者投保单号或者平台交易号
+     * M
+     */
+    private String documentNo;
+    /***
+     * 出单机构编码
+     * 撤销平台交易号时必传
+     * C
+     */
+    private String departmentCode;
+}

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

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:42
+ *  @Description: 二维码支付  7.8 接口入参
+ *  userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ScanCodeURLRequest extends PingAnBaseRequest{
+
+    /***
+     * 投保单号集合
+     */
+    private ArrayList<DocumentDTO> documentList=new ArrayList<DocumentDTO>();
+    /***
+     * 数据来源  68
+     */
+    private String dataSource;
+    /***
+     *投保单号信息
+     *
+     */
+    @Data
+    public static class DocumentDTO implements Serializable {
+
+        private static final long serialVersionUID = 8797282780429139870L;
+        /***
+         *投保单号
+         * M
+         */
+        private String documentNo;
+        /***
+         *单证类型(01投保单02保单03批改申请单04批单05赔案号06报案号07通知单号)
+         * M
+         */
+        private String documentType;
+    }
+}

+ 6 - 2
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SearchPAVehicleListRequest.java

@@ -1,10 +1,8 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 
-import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
 
 
 /**
@@ -23,6 +21,12 @@ public class SearchPAVehicleListRequest extends PingAnBaseRequest {
      */
     private String keyword;
 
+    /**
+     * 对userId、keyword、flowid参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串,然后对该字符串进行签名,得到signature
+     * RSA私钥找平安获取
+     */ 
+    private String  signature;
+
     public SearchPAVehicleListRequest(String userId, String flowid, String keyword) {
         this.setUserId(userId);
         this.setFlowid(flowid);

+ 24 - 9
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/ServiceContractRequest.java

@@ -1,20 +1,35 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 import lombok.Data;
-
-import java.io.Serializable;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 11:47
+ *  @Description:  服务类特约检索   5.2   接口入参
+ */
 @Data
-public class ServiceContractRequest implements Serializable {
+public class ServiceContractRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = -1941729373528324145L;
-
+    /***
+     *  平安好伙伴外网录单账号
+     *  c
+     */
     private String inputBy;
-
+    /***
+     * 机构编码(账号或机构编码二选一,建议传递机构编码)
+     * c
+     */
     private String departmentCode;
-
+    /***
+     * (01:营业,02:非营业)
+     * c
+     */
     private String useAttribute;
-
-    private String flowid;
+    /***
+     * 深圳地区传入流程号
+     * c
+     */
+   // private String flowid;
 
 }

+ 534 - 23
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SubmitApplyRequest.java

@@ -4,165 +4,676 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 11:55
+ *  @Description:   补充信息并核保   61  接口入参
+ *  flowid	M	流程ID
+ * userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class SubmitApplyRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = 3439644023985148752L;
-
+    /***
+     * 是否核保,如果只是查看验车、特别约定,则可以传false
+     * true,false
+     * M
+     *
+     */
     private String isApply;
+    /***
+     * 商业险保单格式
+     * (04)电子保单,
+     * (06)监制保单
+     * 北京只允许电子保单
+     * O
+     * 默认(06)监制保单
+     */
     private String bizFormatType;
+    /***
+     * 交强险保单形式
+     * (04)电子保单,
+     * (06)监制保单
+     * 北京只允许电子保单
+     * O
+     * 默认(06)监制保单
+     */
     private String forceFormatType;
+    /***
+     * 新车销售公司名称(车商默认车商名称,其他需要录入)
+     * C
+     * 广东新车
+     */
     private String saleCompanyName;
+    /***
+     * 新车销售公司所在地市代码(查看10.6编码定义枚举)
+     * C
+     * 广东新车
+     */
     private String saleCompanyAreaCode;
+    /***
+     * 是否4S店销售
+     * C
+     * 广东新车
+     */
     private String sale4SFlag;
+    /***
+     * 从业人员选项
+     * C
+     * 北京兼业代理
+     *
+     */
     private String salerSortNo;
+    /***
+     * 发起该次查验请求终端设备的物理网卡地址;
+     * M
+     * 如果再carConfirm接口已经录入,则此接口无需录入
+     */
     private String macAddress;
+    /***
+     * 请求终端设备的ip地址;
+     * M
+     * 如果再carConfirm接口已经录入,则此接口无需录入
+     */
     private String ip;
+    /***
+     * 请求终端设备类型
+     * M
+     * 如果再carConfirm接口已经录入,则此接口无需录入
+     */
     private String deviceType;
-
+    /***
+     * 车主信息
+     */
     private RegisterDTO register;
-
+    /***
+     *  被保人信息
+     */
     private InsuredDTO insured;
-
+    /***
+     * 投保人信息
+     */
     private ApplicantDTO applicant;
-
+    /***
+     * 收单信息
+     */
     private AddressDTO address;
-
-    private List<BizSpecialPromiseListDTO> bizSpecialPromiseList;
-
-    private List<BizSpecialPromiseListDTO> forceSpecialPromiseList;
-
+    /***
+     *  【不传则取会用默认特约】
+     */
+    private List<BizSpecialPromiseListDTO> bizSpecialPromiseList=new ArrayList<BizSpecialPromiseListDTO>();
+    /***
+     *  同上
+     */
+    private List<BizSpecialPromiseListDTO> forceSpecialPromiseList=new ArrayList<BizSpecialPromiseListDTO>();
+    /***
+     * 争议解决方式(1-诉讼;2-仲裁)
+     * O
+     * 1-诉讼
+     */
     private String disputedSettleMode;
+    /***
+     * 仲裁机构
+     * C
+     * 2-仲裁时录入
+     */
     private String arbitralDepartment;
+    /***
+     * 期望核单时效
+     * 1-4小时 
+     * 2-2小时 
+     * 3-1小时
+     * 4-客户立等 5-24小时
+     * 6-24小时以上
+     * 7-12小时
+     * C-如果人工核保时
+     */
     private String expectationUnderwriteLimit;
+    /***
+     * 验车类型,可以不传默认外网账号方式
+     * 01-业务员验车
+     * 05-外网账号
+     * 仅支持这两种方式,如传递其他值则默认外网账号模式
+     * C
+     * checkVehicleStatus返回1时
+     */
     private String vehicleCheckType;
+    /***
+     * 期望验车时间
+     * yyyy-MM-dd
+     * 不能大于等于保险起期
+     * C
+     * checkVehicleStatus返回1时
+     */
     private String checkVehicleDate;
+    /***
+     * 期望验车时间段(01-上午02-下午)
+     * C
+     * checkVehicleStatus返回1时
+     */
     private String checkVehicleDateZone;
+    /***
+     * 期望验车地点
+     * C
+     * checkVehicleStatus返回1时
+     */
     private String checkVehicleAddress;
+    /***
+     * 商业险转保业务投保查询校验码
+     * C
+     * 6.1接口resultCode返回12时
+     */
 
     private String bizApplyCheckCode;
+    /***
+     * 交强险转保业务投保查询校验码
+     * C
+     * 6.1接口resultCode返回13时
+     */
     private String forceApplyCheckCode;
+    /***
+     *北京身份证信息采集短信验证码
+     * C
+     * 北京&&投保人或者被保人个团标志为个人时,必传
+     */
     private String beijingIssueCode;
+    /***
+     *发票种类,01增值税普票,02增值税专票,03无需打印,05增值税电子普通发票
+     * C
+     * 默认01
+     * 投保人个团标志为个人时,不允许传02专票
+     */
     private String invoiceType;
+    /***
+     * 纳税人证件类型,01:纳税人识别号,02:统一社会信用代码
+     * C
+     * 当发票类型为专票,或者个团标志为团体并且投保人组织机构类型为“个体工商户”或“企业法人”或“非企业法人”时需录
+     */
     private String taxpayerCertificateType;
+    /***
+     * 纳税人识别号或者统一社会信用代码
+     * C
+     * 当发票类型为专票,或者个团标志为团体并且投保人组织机构类型为“个体工商户”或“企业法人”或“非企业法人”时需录
+     */
     private String taxpayerCertificateNo;
+    /***
+     * 发票纳税人地址
+     * C
+     * 投保人个团标志为团体,并且发票种类为增值税专票需录
+     */
 
     private String taxpayerAddress;
+    /***
+     *发票纳税人联系电话
+     * C
+     * 投保人个团标志为团体,并且发票种类为增值税专票需录
+     */
     private String taxpayerPhone;
+    /***
+     * 发票纳税人开户银行名称
+     * C
+     * 投保人个团标志为团体,并且发票种类为增值税专票需录
+     */
     private String taxpayerBankName;
+    /***
+     *发票纳税人开户银行帐户
+     * C
+     * 投保人个团标志为团体,并且发票种类为增值税专票需录
+     */
     private String taxpayerBankAccount;
+    /***
+     *0或者不传:正常流程,不禁止任何操作(默认)
+     * 1-禁止撤回/修改/开单/缴费/手工承保 5个操作
+     * C
+     * 默认0
+     */
     private String forbidOprIbcsFlag;
+    /***
+     *是否电子投保单(0—纸质投保单,1—电子投保单
+     * C
+     * 勾选电子投保单
+     * 北京&&投保人个团标志为个人时,必须选择电子
+     */
     private String isElectronicApplyPolicy;
+    /***
+     *双录上传平台销售人员姓名
+     * C
+     * 深圳必填
+     */
     private String doubleInputSaleName;
+    /***
+     * 双录上传平台销售人员身份证号码
+     * C
+     * 深圳必填
+     */
     private String doubleInputSaleCode;
+    /***
+     * 中介销售人员姓名(广东选填、陕西 必传)
+     * C
+     * 如果平安后台已经配置,则无需传递
+     */
     private String agencySaleName;
+    /***
+     *业务员执业资格证号/工号(广东、陕西 必传
+     * C
+     * 如果平安后台已经配置,则无需传递
+     */
     private String saleAgentProfCertNo;
+    /***
+     *中介销售人员执业资格证号码(广东 选填)
+     * C
+     * 如果平安后台已经配置,则无需传递
+     */
     private String agencySaleProfCertifNo;
+    /***
+     * 道路救援
+     * C 标的检查index或carConfirm接口返回中clauseCaseSwitch为true时,需传
+     */
     private String amount01Sv;
+    /***
+     *车辆安全检测特约条款
+     * C,同道路救援
+     */
     private String amount02Sv;
+    /***
+     *代为驾驶服务特约条款
+     * C,同道路救援
+     */
     private String amount03Sv;
+    /***
+     *代为送检服务特约条款
+     * C,同道路救援
+     */
     private String amount04Sv;
+    /***
+     * 道路救援
+     * C 标的检查index或carConfirm接口返回中clauseCaseSwitch为true时,需传
+     */
     private String amount01SvXNY;
+    /***
+     *车辆安全检测特约条款
+     * C,同道路救援
+     */
     private String amount02SvXNY;
+    /***
+     *代为驾驶服务特约条款
+     * C,同道路救援
+     */
     private String amount03SvXNY;
+    /***
+     *代为送检服务特约条款
+     * C,同道路救援
+     */
     private String amount04SvXNY;
-
+    /***
+     * 文件集合
+     */
     private List<DocListDTO> docList;
 
+    /***
+     * 车主信息
+     */
     @Data
     public static class RegisterDTO implements Serializable {
 
         private static final long serialVersionUID = -1140399358502175422L;
-
+        /***
+         * 行驶证车主手机
+         * C
+         * 上海、浙江、大连必传
+         *
+         * 如果在4.2carConfirm接口已录入,则该接口可以不录入
+         */
         private String mobile;
-
+        /***
+         * 行驶证车主地址
+         * 河北、唐山机构、江西机构时至少录到区县级
+         * 【地址长度100字符,中文最长50】
+         * C
+         * 浙江、大连、河北、唐山机构、江西机构、上海机构
+         *
+         * 如果在4.2carConfirm接口已录入,则该接口可以不录入
+         */
         private String address;
-
+        /***
+         * 江西地区投保必传,如在carConfirm接口已录入,则该接口可不录入
+         * C
+         */
         private String addressCode;
 
     }
 
+    /***
+     *  被保人信息
+     */
     @Data
     public static class InsuredDTO implements Serializable {
 
         private static final long serialVersionUID = 8838515153962598021L;
-
+        /***
+         * 手机或者家庭电话
+         * M
+         * 浙江、大连必传
+         */
         private String mobile;
+        /***
+         * 被保人证件有效期开始日期
+         * C
+         * 证件类型为身份证必传,如果再carConfirm接口已经录入,则此接口无需录入
+         */
         private String certificateIssueDate;
+        /***
+         * 投保人证件有效期截止日期(如果长期传9999-01-01)
+         * C
+         * 证件类型为身份证、护照、台湾通行证、港澳通行证、港澳台居住证、外国永久居留证、外国居留证、外国临时居住证时必传, 如果再carConfirm接口已经录入,则此接口无需录入
+         */
         private String certificateValidDate;
+        /***
+         * 地址
+         * 同身份证上的地址保持一致
+         * 【地址长度100字符,中文最长50】
+         * M
+         *
+         * 浙江、大连必传
+         */
         private String address;
 
     }
 
+    /***
+     * 投保人信息
+     */
     @Data
     public static class ApplicantDTO implements Serializable {
 
         private static final long serialVersionUID = -7332185087236863504L;
-
+        /***
+         * 个团标志[1个人,0团体]
+         * 默认1个人
+         * o
+         */
         private String personnelType;
+        /***
+         * 投保人名称
+         * m
+         */
         private String name;
+        /***
+         * 证件类型
+         * 个团标志为1个人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0团体时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体标志仅支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         * M
+         */
         private String idType;
+        /***
+         * 证件号码
+         * M
+         *
+         */
         private String idNo;
+        /***
+         * 投保人证件有效期开始日期
+         * C
+         * 证件类型为身份证必传, 如果再carConfirm接口已经录入,则此接口无需录入
+         */
         private String certificateIssueDate;
+        /***
+         * 投保人证件有效期截止日期(如果长期传9999-01-01)
+         * C
+         * 证件类型为身份证、护照、台湾通行证、港澳通行证、港澳台居住证、外国永久居留证、外国居留证、外国临时居住证时必传, 如果再carConfirm接口已经录入,则此接口无需录入
+         */
         private String certificateValidDate;
+        /***
+         * 出生日期
+         * C
+         * 传身份证号码时,可不传
+         */
         private String birthday;
+        /***
+         * 性别
+         * C
+         * 传身份证号码时,可不传
+         */
         private String gender;
+        /***
+         * 手机或者家庭电话
+         * M
+         *
+         * 浙江、大连必传
+         *
+         * 江苏、苏州、无锡,并且投保人个团标志为个人时
+         */
         private String mobile;
+        /***
+         * 电子邮箱
+         * O
+         * 选择电子保单时、选择增值税电子普通发票时必填
+         */
         private String email;
+        /***
+         * 组织机构类型
+         * 02-个体工商户
+         * 03-企业非法人
+         * 04-企业法人
+         * 05-机关法人
+         * 06-机关非法人
+         * 07-事业法人
+         * 08-事业非法人
+         * 09-社团法人
+         * 10-社团非法人
+         * 11-工会法人
+         * 12-民办非企业单位
+         * 13-其他
+         * C
+         * 个团标志为0-团体时
+         */
         private String organizationType;
+        /***
+         * 电话总机
+         * C
+         * 个团标志为0-团体时
+         */
         private String phoneExchange;
+        /***
+         * 联系人姓名
+         * C
+         * 个团标志为0-团体时
+         * 最少2个汉字或4个英文字符,不超过150个字符
+         */
         private String contactName;
+        /***
+         * 地址
+         * 同身份证上的地址保持一致
+         * 河北、唐山机构时至少录到区县级
+         * 【地址长度100字符,中文最长50】
+         * M
+         *
+         * 浙江、大连必传
+         */
         private String address;
+        /***
+         * 联系人证件类型
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         * C
+         * 个团标志为0-团体时且为深圳、上海机构
+         */
         private String linkManCertificateTypeCode;
+        /***
+         * 联系人证件号码
+         * C
+         * 个团标志为0-团体时且为深圳、上海机构
+         */
         private String linkManCertificateNo;
+        /***
+         * 手机持有人姓名
+         * 个团标志为0-团体时且为上海机构且联系人证件类型为身份证且不是联系人本人
+         *
+         * 个团标志为1-个人且为上海机构且投保人证件类型为身份证且不是投保人本人
+         */
         private String phoneHolderName;
+        /***
+         * 手机持有人证件类型
+         * 居民身份证(01)
+         * 同applicant.phoneHolderName
+         */
         private String phoneHolderCertificateType;
+        /***
+         * 手机持有人证件号码
+         * 同applicant.phoneHolderName
+         */
         private String phoneHolderCertificateNo;
     }
-
+    /***
+     * 收单信息
+     */
     @Data
     public static class AddressDTO implements Serializable {
 
         private static final long serialVersionUID = -6942992745332676824L;
-
+        /***
+         * 保单领取方式
+         * 配送0,门店自取1
+         * (0-配送只会在后台记录配送信息,不会做系统自动配送)
+         * m
+         */
         private String receiveMode;
+        /***
+         * 收件详细地址
+         * C
+         * 配送时必填
+         */
         private String address;
+        /***
+         * 收件人姓名
+         * C
+         * 配送时必填
+         */
         private String name;
+        /***
+         * 收件人联系电话
+         * C
+         * 配送时必填
+         */
         private String mobile;
+        /***
+         * 区县编码
+         * C
+         * 配送时必填
+         */
         private String townCityCode;
+        /***
+         * 乡镇编码
+         *  O
+         */
         private String townCode;
 
     }
-
+    /***
+     * 【不传则取会用默认特约】
+     */
     @Data
     public static class BizSpecialPromiseListDTO implements Serializable {
 
         private static final long serialVersionUID = 3052472157066379795L;
-
+        /***
+         * 特约排序序号
+         * o
+         */
         private String sortIndex;
+        /***
+         * 特约编码
+         * o
+         */
         private String promiseCode;
+        /***
+         * 特约描述
+         * o
+         */
         private String promiseDesc;
+        /***
+         * Y为可改特约,N为固定特约,X为可选特约,B为底部特约
+         * o
+         */
         private String promiseType;
 
     }
-
+    /***
+     *
+     */
     @Data
     public static class DocListDTO implements Serializable {
 
         private static final long serialVersionUID = -3042944648863765719L;
-
+        /***
+         * 上传至iobs的文件id
+         * 建议用以下拼接,可以确保唯一
+         * {client_id}-{YYYYMMDDHHMISS}-{UUID}
+         * c
+         */
         private String docId;
+        /***
+         * 文件大类编码
+         * c
+         */
         private String documentClass;
+        /***
+         * 文件小类编码
+         * c
+         */
         private String documentType;
+        /***
+         * 文件名称(不包含后缀,文件大类-文件小类+该小类的第几个文件)
+         * c
+         */
         private String documentName;
+        /***
+         * 文件格式(不带”.”)
+         * c
+         */
         private String documentFormat;
+        /***
+         * 文件大小(可不传)
+         * c
+         */
         private String documentSize;
+        /***
+         * 如果类型为双录证明中的团体业务授权委托书必传,授权书的起始期,必须早于今日或等于今日
+         * c
+         */
         private String certificateBeginDate;
+        /***
+         * 如果类型为双录证明中的团体业务授权委托书必传,授权书的止期,整个授权期不能超过一年
+         * c
+         */
         private String certificateEndDate;
+        /***
+         * 车辆驾驶类型
+         * String类型 1-人工驾驶, 2-自动化驾驶
+         * o
+         */
         private String carDriverType;
+        /***
+         * 发展阶段
+         * String类型 1-道路测试, 2-示范应用, 3-示范运营
+         * o
+         */
         private String developmentStage;
     }
 

+ 20 - 6
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UnAutoProductDetailRequest.java

@@ -2,19 +2,33 @@ package com.ydtech.modules.order.entity.api.pingan.request;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:51
+ *  @Description:  获取财意险险种套餐责任信息   4.5  接口入参
+ *   userId	M
+ *  必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ */
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class UnAutoProductDetailRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = 9069583090917257234L;
-
-    private String userId;
-
+    /***
+     * 产品编码
+     * M
+     */
     private String productCode;
-
+    /***
+     * 套餐编码
+     * M
+     */
     private String packageCode;
-
+    /***
+     * 版本号
+     * M
+     */
     private String version;
 
 }

+ 38 - 8
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UnAutoProductListRequest.java

@@ -5,7 +5,10 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * @description: 获取财意险险种套餐列表 请求参数
+ * @description: 获取财意险险种套餐列表 接口入参
+ *  userId	M
+ * 必传	合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+ *
  * @author: wenks
  * @date: 2024/3/21 10:04
  **/
@@ -14,19 +17,46 @@ import lombok.EqualsAndHashCode;
 public class UnAutoProductListRequest extends PingAnBaseRequest {
 
     private static final long serialVersionUID = -8799389547040438941L;
-
+    /***
+     * 车辆使用性质代码01-营业,
+     * 02-非营业
+     * M
+     */
     private String useAttribute;
-
+    /***
+     * 所属性质(01:机关,02:企业,03:私人)
+     * 默认03:私人
+     * 车辆使用性质为01:营业时,所属性质不可以选择01:机关
+     * m
+     */
     private String ownAttribute;
-
+    /***
+     * 座位数
+     * M
+     */
     private String seats;
-
+    /***
+     * 平安好伙伴外网录单账号
+     * C
+     * 适用于ToB场景
+     */
     private String inputBy;
-
+    /***
+     * 由平安提供数据字段
+     * C
+     * 适用于ToC场景
+     */
     private String cityCode;
-
+    /***
+     * 车商编码,传递后将减少查询结果
+     * C
+     */
     private String saleCode;
-
+    /***
+     * 核定载质量(吨)
+     * C
+     * 货车必填
+     */
     private String tonNumber;
 
 }

+ 87 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/UploadFilesRequest.java

@@ -0,0 +1,87 @@
+package com.ydtech.modules.order.entity.api.pingan.request;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 资料上传  9.3 接口入参
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class UploadFilesRequest extends PingAnBaseRequest{
+
+
+    /***
+     * 文件集合
+     */
+    private List<DocListDTO> docList=new ArrayList<DocListDTO>();
+
+
+    /***
+     *  文件信息
+     */
+    @Data
+    public static class DocListDTO implements Serializable {
+
+        private static final long serialVersionUID = -3042944648863765719L;
+        /***
+         * 上传至iobs的文件id
+         * 建议用以下拼接,可以确保唯一
+         * {client_id}-{YYYYMMDDHHMISS}-{UUID}
+         * m
+         */
+        private String docId;
+        /***
+         * 文件大类编码
+         * m
+         */
+        private String documentClass;
+        /***
+         * 文件小类编码
+         * m
+         */
+        private String documentType;
+        /***
+         * 文件名称(不包含后缀,文件大类-文件小类+该小类的第几个文件)
+         * m
+         */
+        private String documentName;
+        /***
+         * 文件格式(不带”.”)
+         * m
+         */
+        private String documentFormat;
+        /***
+         * 文件大小(可不传)
+         * c
+         */
+        private String documentSize;
+        /***
+         * 投保单号
+         * m
+         */
+        private String applyPolicyNo;
+        /***
+         * 关联投保保单号
+         * c
+         */
+        private String relationApplyPolicyNo;
+        /***
+         * 用户ID
+         * c
+         */
+        private String userId;
+        /***
+         * 数据来源 openApi
+         *  m
+         */
+        private String dataSource;
+    }
+}

+ 66 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/AcceptResponse.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 承保接口 8.2 接口出参
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AcceptResponse extends PingAnBaseResponse {
+
+
+    /***
+     * 投保单号集合
+     */
+    private ArrayList<DocumentDTO> documentList;
+
+    /***
+     *投保单详细信息
+     *
+     */
+    @Data
+    public static class DocumentDTO implements Serializable {
+
+        private static final long serialVersionUID = 8797282780429139870L;
+        /***
+         *
+         * 投保单号
+         * m
+         */
+        private String applyPolicyNo;
+        /***
+         * 保单号
+         * c
+         *
+         */
+        private String policyNo;
+        /***
+         * 投保单状态
+         * BE-待审批,B1-待审核,BH-待验车,B2-待缴费,B3-待承保,B5-已承保,B6-AI审核,B4-待修改,B9-拒保,B0-承保失败,99-已失效,BZ-系统异常,BT-已退费
+         * m
+         *
+         */
+        private String status;
+        /***
+         *
+         * 承保时间
+         * yyyy-MM-dd HH:mm:ss
+         * c
+         */
+        private String acceptInsuranceTime;
+        /***
+         * 承保失败提醒信息
+         * m
+         *
+         */
+        private String errorMessage;
+    }
+}

+ 407 - 91
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/CarConfirmResponse.java

@@ -1,242 +1,558 @@
 package com.ydtech.modules.order.entity.api.pingan.response;
 
-import com.ydtech.modules.order.entity.api.pingan.request.PingAnBaseRequest;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 import java.util.List;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 8:52
+ *  @Description:  车辆确认出参   4.2
+ *
+ *  resultCode
+ *  0-[成功]
+ * 1-找不到此车型,请再次确认车型
+ * 2-平台返回多个车型,需要确认车型
+ * 3-您的车辆属于新款车型,暂无法投保
+ * 4-江苏交管车辆验证码错误
+ * 5-连接江苏交管平台异常
+ * 6-三种异常中的一种a)该车平台返回为过户车;b)未传送车辆过户标志,查询的车主名称与上张保单不一致c)传送了车辆过户标志,查询的车主名称与上张保单一致
+ * 7-北京新车备案异常
+ * 9-广东交管平台校验失败
+ * 10-车辆信息确认接口失败
+ * 11-
+ *
+ *
+ */
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class CarConfirmResponse extends PingAnBaseRequest {
+public class CarConfirmResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = 4647773777095564417L;
 
-    private String flowid;
 
+    /***
+     *  组织机构代码证、营业执照校验不通过提示
+     * 过户车、车主信息与上年不一致但是不阻断流程的提示信息
+     * 有内容则展示,可以忽略继续后续流程。过户不阻断可能影响退保操作
+     * C
+     */
+    private String validMessage;
+    /***
+     *增值服务费折服联动开关  true/false
+     * M
+     */
     private String clauseCaseSwitch;
-
+    /***
+     *0,2新保,续保
+     * M
+     */
     private String bizRenewalType;
-
+    /***
+     *
+     *   0,2新保,1续保
+     *   M
+     *
+     */
     private String forceRenewalType;
-
+    /***
+     *
+     * true,false商业险是否已开通电子保单
+     *  M
+     */
     private String isBizElectronicPolicy;
-
+    /***
+     * true,false交强险是否已开通电子保单
+     * M
+     */
     private String isForceElectronicPolicy;
-
+    /***
+     *
+     *  商业险信息
+     */
     private BizQuoteDTO bizQuote;
-
+    /***
+     * 交强险信息
+     *
+     */
     private ForceQuoteDTO forceQuote;
-
+    /***
+     *
+     *当前机构是否支持配送
+     * true,false
+     * C
+     */
     private String hasDelivery;
-
+    /***
+     * (showCircModelsSwitch为false时返回)
+     *  精友相关车辆信息
+     */
     private List<ModelsDTO> models;
-
+    /***
+     *   车型车价信息
+     *
+     */
     private List<VehicleModelsDTO> vehicleModels;
-
+    /***
+     *
+     *  车辆信息
+     */
     private VehicleDTO vehicle;
-
+    /***
+     *
+     *  车主信息
+     */
     private RegisterDTO register;
-
+    /***
+     *
+     *  车险限制信息
+     */
     private BizQuoteConfigDTO bizQuoteConfig;
-
+    /***
+     *商业险信息
+     *
+     */
     @Data
     public static class BizQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 8797282780429139870L;
-
+        /***
+         *商业险默认起保日期
+         * yyyy-mm-dd hh:mm:ss
+         * M
+         */
         private String beginDate;
-
+        /***
+         *是否为过户车
+         * 是-1,否-0
+         *  C
+         */
         private String specialCarFlag;
-
+        /***
+         *过户日期
+         * yyyy-mm-dd
+         * c
+         */
         private String specialCarDate;
 
     }
 
+    /***
+     * 交强险信息
+     */
     @Data
     public static class ForceQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 5751320076031186697L;
-
+        /***
+         * 交强险默认起保日期
+         * yyyy-mm-dd hh:mm:ss
+         * M
+         */
         private String beginDate;
 
     }
 
+    /***
+     * 精友相关车辆信息
+     */
     @Data
     public static class ModelsDTO implements Serializable {
 
         private static final long serialVersionUID = 239459498159328042L;
-
+        /***
+         * C	精友车型编码
+         */
         private String modelCode;
-
+        /***
+         * C	加密后的精友车型编码
+         */
         private String paModelCode;
-
+        /***
+         * C
+         * modelCode或者modelIndex或者paModelCode	精友车型序号
+         */
         private String modelIndex;
-
+        /***
+         * C	车系名称
+         */
         private String brandName;
-
+        /***
+         * C	车型名称
+         */
         private String modelName;
-
+        /***
+         * C	车型详情
+         */
         private String description;
-
+        /***
+         * C	核定载客
+         */
         private String seats;
-
+        /***
+         * C	年款
+         */
         private String marketDate;
-
+        /***
+         * C	新车购置价
+         */
         private String price;
-
+        /***
+         * C	上海平台车型编码
+         */
         private String vehicleCodeForShangHai;
 
     }
-
+    /***
+     *  车型车价信息
+     */
     @Data
     public static class VehicleModelsDTO implements Serializable {
 
         private static final long serialVersionUID = -5372460031717400566L;
-
+        /***
+         *  精友车型车价信息
+         * (showCircModelsSwitch为true时返回)
+         */
         private List<JyModelsDTO> jyModels;
-
+        /***
+         * vehicleModels [].circModels []
+         * 中保信车型车价信息
+         * (showCircModelsSwitch为true时返回
+         */
         private List<CircModelsDTO> circModels;
-
+        /***
+         *  精友车型车价信息
+         *
+         */
         @Data
         public static class JyModelsDTO implements Serializable {
 
             private static final long serialVersionUID = -2492814034788945102L;
-
+            /***
+             *  精友车型编码
+             *  c
+             */
             private String modelCode;
-
+            /***
+             * 加密后的精友车型编码
+             * c
+             */
             private String paModelCode;
-
+            /***
+             * 精友车型序号
+             * C
+             * modelCode或者modelIndex或者paModelCode
+             */
             private String modelIndex;
-
+            /***
+             *车系名称
+             * c
+             */
             private String brandName;
-
+            /***
+             * 车型名称
+             * c
+             */
             private String modelName;
-
+            /***
+             * 车型详情
+             * c
+             */
             private String description;
-
+            /***
+             *核定载客
+             * c
+             */
             private String seats;
-
+            /***
+             * 年款
+             * c
+             */
             private String marketDate;
-
+            /***
+             * 新车购置价
+             * c
+             */
             private String price;
-
+            /***
+             * 上海平台车型编码
+             * c
+             */
             private String vehicleCodeForShangHai;
 
         }
-
+        /***
+         * 中保信车型车价信息
+         */
         @Data
         public static class CircModelsDTO implements Serializable {
 
             private static final long serialVersionUID = 2613256512680229752L;
-
+            /***
+             *车型唯一ID
+             * c
+             */
             private String vehicleStyleUniqueId;
-
+            /***
+             *  车系名称
+             *  c
+             */
             private String brandName;
-
+            /***
+             * 车型名称
+             * c
+             */
             private String modelName;
-
+            /***
+             *核定载客
+             * c
+             */
             private String seats;
-
+            /***
+             *年款
+             * c
+             */
             private String marketDate;
-
+            /***
+             *新车购置价
+             * c
+             */
             private String price;
 
         }
 
     }
-
+    /***
+     * 车辆信息
+     */
     @Data
     public static class VehicleDTO implements Serializable {
 
         private static final long serialVersionUID = 4858741948573409545L;
-
+        /***
+         *车牌
+         * M
+         */
         private String licenseNo;
-
+        /***
+         * 车架号
+         * m
+         */
         private String frameNo;
-
+        /***
+         * 发动机号
+         * m
+         */
         private String engineNo;
-
+        /***
+         * 初登日期
+         * m
+         */
         private String registerDate;
-
+        /***
+         * 车型编码
+         * c
+         *
+         */
         private String modelCode;
-
+        /***
+         *车辆所属品牌名
+         * m
+         */
         private String brandName;
-
+        /***
+         * 车型名
+         * m
+         */
         private String modelName;
-
+        /***
+         * 车型描述
+         * m
+         */
         private String description;
-
+        /***
+         * 座位数
+         * m
+         */
         private String seats;
-
+        /***
+         * 新车购置价
+         * m
+         */
         private String price;
-
+        /***
+         * 核载质量(吨)
+         * c
+         */
         private String tonNumber;
-
+        /***
+         * 整备质量(吨)
+         * c
+         */
         private String wholeWeight;
-
+        /***
+         * 排气量
+         * c
+         */
         private String exhaustMeasure;
-
+        /***
+         * 号牌种类
+         * c
+         */
         private String licenceTypeCode;
-
+        /***
+         * 车辆使用性质代码
+         * o
+         */
         private String useAttribute;
-
+        /***
+         * 使用性质细分
+         * o
+         */
         private String useAttributDetailCode;
-
+        /***
+         * 所属性质
+         * o
+         */
         private String ownAttribute;
-
+        /***
+         * 团车编码
+         * o
+         */
         private String groupBusinessCode;
-
+        /***
+         * 车型产地
+         * 0:国产,1:合资,2:进口
+         * M
+         */
         private String importFlag;
-
+        /***
+         *能源类型
+         * 北京:
+         * A:汽油,B:柴油,c:电,D:混合油,E:天然气,F:液化石油气,L:甲醇,M:乙醇,N:太阳能,O:混合动力,Y:无,Z:其它
+         *
+         * 其他地区:
+         * 0: 燃油
+         * 1: 纯电动
+         * 2: 燃料电池
+         * 3: 插电式混合动力
+         * 4: 其他混合动力
+         * c
+         */
         private String energyType;
 
     }
-
+    /***
+     *  车主信息
+     */
     @Data
     public static class RegisterDTO implements Serializable {
 
         private static final long serialVersionUID = 7598763365636214128L;
-
+        /***
+         *个团标志[1个人,0团体]
+         * 默认1个人
+         * O
+         */
         private String personnelType;
-
+        /***
+         * 车主名称
+         */
         private String name;
-
+        /***
+         * 证件类型
+         * 所属性质为03:私人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06)  ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 所属性质为01:机关和02:企业时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体时只支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         *
+         * 证件类型续保模式录入回传给平安,则需要录入生日、性别。
+         */
         private String idType;
-
+        /***
+         * 证件号码
+         */
         private String idNo;
-
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
         private String gender;
-
+        /***
+         * 生日
+         */
         private String birthday;
 
 
     }
-
+    /***
+     *  车险限制信息
+     */
     @Data
     public static class BizQuoteConfigDTO implements Serializable {
 
         private static final long serialVersionUID = 7598763365636214128L;
-
+        /***
+         * 车辆损失险默认保额
+         * M
+         */
         private String amount01Default;
-
+        /***
+         * 车损险保险浮动下限
+         * M
+         */
         private String amount01Min;
-
+        /***
+         * 车损险保险浮动上限
+         * M
+         */
         private String amount01Max;
-
+        /***
+         * 全车盗抢险默认保额(车险综合改革后不再返回)
+         * M
+         */
         private String amount03Default;
-
+        /***
+         * 全车盗抢险保额浮动下限(车险综合改革后不再返回)
+         * M
+         */
         private String amount03Min;
-
+        /***
+         * 全车盗抢险保额浮动上限(车险综合改革后不再返回)
+         * M
+         */
         private String amount03Max;
-
+        /***
+         * 自燃损失险默认保额(车险综合改革后不再返回)
+         * M
+         */
         private String amount18Default;
-
+        /***
+         * 自燃损失险保额浮动下限(车险综合改革后不再返回)
+         * m
+         */
         private String amount18Min;
-
+        /***
+         * 自燃损失险保额浮动上限(车险综合改革后不再返回)
+         * m
+         */
         private String amount18Max;
-
+        /***
+         * 乘客座位数(不包括司机)
+         * m
+         */
         private String passengerSeats;
 
 

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/DmvehicleInfoResponse.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:26
+ *  @Description:   交管车辆验证码   4.3   接口出参
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DmvehicleInfoResponse extends PingAnBaseResponse {
+
+    /**
+     *  交管验证码
+     *
+     * {checkCode}替换为接口返回内容
+     * <img src="data:image/png;base64,{checkCode}"/>
+     * M
+     */
+    private String checkCode;
+}

+ 212 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/DocumentStatusListResponse.java

@@ -0,0 +1,212 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 单证状态查询  9.1 接口出参
+ *  resultMessage	O	后台接口执行信息
+ * resultCode	M	0-成功
+ * 1-验签失败
+ * 2-接口调用超过上限
+ * 3-合作伙伴标识不存在
+ * 4-单证列表过长
+ * 5-系统异常
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DocumentStatusListResponse extends PingAnBaseResponse {
+
+    /***
+     * 投保单集合
+     */
+    private ArrayList<DocumentDTO> documentList;
+    /***
+     *投保单信息
+     *
+     */
+    @Data
+    public static class DocumentDTO implements Serializable {
+
+        /***
+         *投保单号
+         * M
+         */
+        private String applyNo;
+        /***
+         *保单号
+         * c
+         */
+        private String policyNo;
+        /***
+         *支付通知单号
+         * c
+         */
+        private String noticeNo;
+        /***
+         *上海平台交易号
+         * c
+         */
+        private String circPaymentNo;
+        /***
+         *投保单状态
+         * BE-待审批,B1-待审核,B11-待补传,BH-待验车,BH1-待质检,B2-待缴费,B3-待承保,B5-已承保,B6-AI审核,BS –待风控,B4-待修改,B9-拒保,B0-承保失败,99-已失效,BZ-系统异常,BT-已退费
+         * M
+         */
+        private String status;
+        /***
+         *费率版本(车险综合改革后返回)
+         * 14-14费率
+         * 20-20费率
+         * M
+         */
+        private String rateClassFlag;
+        /***
+         *是否是新能源车条款  false
+         * M
+         */
+        private String isNewEnergy;
+        /***
+         *险种:C01-商业险;C51-交强险
+         * 新能源:C02-商业险;C52-交强险
+         * M
+         */
+        private String planCode;
+        /***
+         *保费
+         * M
+         */
+        private String premium;
+        /***
+         *车船税保费
+         * M
+         */
+        private String taxPremium;
+        /***
+         *保险起期
+         * yyyy-MM-dd HH:mm:ss
+         * M
+         */
+        private String insuranceBeginDate;
+        /***
+         *保险止期
+         * yyyy-MM-dd HH:mm:ss
+         * M
+         */
+        private String insuranceEndDate;
+        /***
+         *承保时间
+         * yyyy-MM-dd HH:mm:ss
+         * c
+         */
+        private String acceptInsuranceDate;
+        /***
+         * 单证最后更新日期
+         * yyyy-MM-dd HH:mm:ss
+         * m
+         */
+        private String updatedDate;
+        /***
+         * 承保失败原因
+         * status=B0才会返回
+         * c
+         */
+        private String acceptInfo;
+        /***
+         * 手续费比例
+         * c
+         */
+        private String agentFeeRate;
+        /***
+         * 经纪费比例
+         * c
+         */
+        private String brokerFeeRate;
+        /***
+         * 电子投保单签名结果
+         * 0—通过
+         * 1—不通过
+         * c
+         */
+        private String elecSigndResult;
+        /***
+         * 团体是否需要签署电子投保单标识
+         * true,false
+         * c
+         */
+        private String groupElecSigndFlag;
+        /***
+         * 是否已实名认证(“1” 已认证,“0”或空-未认证)
+         * c
+         */
+        private String isIdentification;
+        /***
+         * 是否已投保实名特批 (“1”-是,“0”或空-否)
+         * c
+         */
+        private String isAuthenticationSpecialEndor;
+        /***
+         *  财意险列表
+         */
+        private List<UnAutoListInfoDTO> unAutoListInfo;
+        /***
+         * 小微险列表
+         */
+        private List<UnAutoListInfoDTO> xiaoWeiListInfo;
+
+
+        /***
+         * 产品信息
+         */
+        @Data
+        public static class UnAutoListInfoDTO implements Serializable {
+
+            /***
+             *  财意险类型
+             * 02财产险
+             * 03意外险
+             * 10 小微险
+             *
+             *
+             * 小微险类型
+             * 02财产险
+             * 03意外险
+             * 10 小微险
+             */
+            private String productType;
+            /***
+             * 产品编码
+             * c
+             */
+            private String productCode;
+            /***
+             * 每份保费
+             * c
+             */
+            private String insuredAmount;
+            /***
+             * 最大可购买份数
+             * c
+             */
+            private String sellListSize;
+            /***
+             * 保单号
+             * c
+             */
+            private String policyNo;
+            /***
+             * 投保单号
+             * c
+             */
+            private String applyNo;
+
+        }
+    }
+}

+ 149 - 40
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/IndexResponse.java

@@ -10,10 +10,11 @@ import java.io.Serializable;
 import java.util.List;
 
 /**
- * @description: 首页 响应实体
- * @author: wenks
- * @date: 2024/3/21 8:57
- **/
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 11:42
+ *  @Description:  标的检查 3.1  接口出参
+ */
 @AllArgsConstructor
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -23,97 +24,205 @@ public class IndexResponse extends PingAnBaseResponse {
     private static final long serialVersionUID = 6550972601202599801L;
 
     /**
-     * M	平安出单机构编码
+     * M 必然返回	平安出单机构编码  如 :20821
      */
     private String departmentCode;
 
     /**
-     * M	平安三级机构编码
+     * M 必然返回	平安三级机构编码  如:20821
      */
     private String level3DepartmentCode;
 
     /**
-     * M	平安二级机构编码
+     * M 必然返回	平安二级机构编码  如:208
      */
     private String level2DepartmentCode;
 
     /**
-     * M
+     * M 必然返回
      * 当前机构是否开通保单即时生效
-     * 北京交强险不支持即时起保
+     * 北京交强险不支持即时起保    false
      */
     private boolean isRealTimeEffect;
 
     /**
-     * M
-     * 当前机构商业险平台限定的可提前投保天数
+     * M 必然返回
+     * 当前机构 商业险 平台限定的可提前投保天数  90
      */
     private String bizAdvanceDays;
-
+    /**
+     * M 必然返回
+     * 当前机构 交强险 平台限定的可提前投保天数  90
+     */
     private String forceAdvanceDays;
-
+    /**
+     * M 必然返回
+     * 江苏是否获取验证码
+     */
     private boolean isJiangSuShowCheckCode;
-
+    /**
+     * M 必然返回
+     * 北京是否获取验证码
+     */
     private boolean isBeiJingShowCheckCode;
-
+    /**
+     * M 必然返回
+     * 是否获取校验验证码
+     */
     private boolean isShowCheckCode;
-
+    /**
+     * M 必然返回
+     * 是否为北京机构
+     */
     private boolean isBeiJing;
-
+    /**
+     * M 必然返回
+     * 是否云南机构
+     */
     private boolean isYunNan;
-
+    /**
+     * M 必然返回
+     * 是否为深圳机构
+     */
     private boolean isShengZhen;
-
+    /**
+     * M 必然返回
+     * 是否为天津机构
+     */
     private boolean isTianJin;
-
+    /**
+     * M 必然返回
+     * 是否为厦门机构
+     */
     private boolean isXiamen;
-
+    /**
+     * M 必然返回
+     * 是否为上海机构
+     */
     private boolean isShangHai;
-
+    /**
+     * C 条件出现
+     * 车商编码/合作网点编码对应的名称
+     * (广东地区返回,可以作为默认新车销售公司名称录入,支持修改)
+     */
     private String saleCodeName;
-
+    /**
+     * C 条件出现
+     * 城市编码(广东地区返回,可以作为默认新车销售公司所在地市代码,支持选择修改)
+     */
     private String cityCode;
-
+    /**
+     * M 必然返回
+     * 增值服务核保传入开关,打开时保费计算无需传入,保费计算返回增值服务信息,核保传入
+     */
     private String clauseCaseSwitch;
-
+    /**
+     * M 必然返回
+     * 中保信平台车型信息返回开关,机构维度
+     */
     private boolean showCircModelsSwitch;
-
+    /**
+     * C 条件出现
+     * 业务来源(北京地区兼业代理监管新增返回)
+     * 1-直接业务
+     * 2-代理业务
+     * 经纪业务
+     */
     private String businessSourceCode;
-
+    /**
+     * C 条件出现
+     * 业务来源细分(北京地区兼业代理监管新增返回)
+     * 1-个人代理
+     * 2-兼业代理
+     * 3-专业代理
+     * 4-传统经纪
+     * D-直接业务
+     */
     private String businessSourceDetailCode;
-
+    /**
+     * C 条件出现
+     * 代理人编码
+     */
     private String agentCode;
-
+    /**
+     * C 条件出现
+     * 从业人员清单
+     */
     private List<SalerInfoListDTO>  salerInfoList;
-
+    /**
+     * C 条件出现
+     * 多标的时返回信息
+     */
     private List<TargetInfoListDTO> targetInfoList;
-
+     /**
+      *  @version
+      *  @author: hxl
+      *  @Date: 2024/3/26 14:05
+      *  @Description: 从业人员清单
+      */
     @Data
     public static class SalerInfoListDTO implements Serializable {
 
         private static final long serialVersionUID = -4778254640088390619L;
-
+        /***
+         * C 条件出现
+         * 代理机构从业人员姓名
+         * 脱敏
+         * 张*文
+         */
         private String name;
-
+        /***
+         * C 条件出现
+         * 从业人员资格证编码
+         * 95441*******8797
+         * 前五位,后四位明文
+         */
         private String licenseNo;
-
+        /***
+         * C 条件出现
+         * 从业人员联系信息
+         * 18611*******
+         * 前五位明文
+         */
         private String telephone;
-
+        /***
+         * C 条件出现
+         * 选项
+         * 1
+         * 选择选项,则核保阶段不需要录入姓名,证件编号,联系方式。从1开始【多个选项,序号为1、2、3……】
+         */
         private String salerSortNo;
 
     }
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 14:05
+     *  @Description: 多标的时返回信息
+     */
     @Data
     public static class TargetInfoListDTO implements Serializable {
 
         private static final long serialVersionUID = -7266500416787597318L;
-
+        /***
+         * C 条件出现
+         * 序号
+         */
         private String targetNo;
-
+        /***
+         * C 条件出现
+         * 车架号(脱敏)
+         */
         private String dvehicleFrameNo;
-
+        /***
+         * C 条件出现
+         * 车型名称
+         */
         private String autoModelName;
-
+        /***
+         * C 条件出现
+         * 初登日期
+         */
         private String firstRegisterDate;
 
 

+ 15 - 3
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PingAnBaseResponse.java

@@ -3,18 +3,30 @@ package com.ydtech.modules.order.entity.api.pingan.response;
 import lombok.Data;
 
 import java.io.Serializable;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 11:44
+ *  @Description:   平安接口出参基础类
+ */
 @Data
 public class PingAnBaseResponse implements Serializable {
 
     private static final long serialVersionUID = -4960017696151958700L;
-
+    /**
+     *  后台接口执行信息
+     *  O  可选出现
+     */ 
     private String resultMessage;
-
+    /**
+     *  后台接口执行编码
+     *  M  必然返回
+     */ 
     private String resultCode;
 
     /**
      * 流程ID
+     * M 必然返回
      */
     private String flowid;
 

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

@@ -0,0 +1,41 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 17:08
+ *  @Description: 电子保单pdf  001  接口出参
+ * resultMessage	O	后台接口执行信息
+ * resultCode	M	0-成功
+ * 1-验签失败
+ * 3-合作伙伴标识不存在
+ * 5-系统异常
+ * 6-此机构无权限查询
+ * 7-此渠道无权限查询
+ * 8-userId为空
+ * 9请核实证件号和保单号是否正确
+ * 10-暂仅支持交强险查询
+ * 11当前标的调用次数过于频繁,请稍候重试
+ * 13非当前合作方所出保单
+ *
+ *
+ *pdf解密参考
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PolicyPdfResponse extends PingAnBaseResponse {
+    /***
+     * C
+     * 	交强险标识
+     */
+    private  String flagPdf;
+
+    /***
+     *policyPdf	C
+     * 	电子保单pdf
+     */
+    private String   policyPdf;
+}

Разлика између датотеке није приказан због своје велике величине
+ 793 - 43
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/QuoteResponse.java


+ 804 - 71
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/RenewalConfirmResponse.java

@@ -9,7 +9,12 @@ import java.util.List;
 
 
 /**
- * @description: 续保确认 响应请求
+ * @description: 续保确认 4.1 出参参数
+ * resultCode 返回值
+ * 0-[成功]
+ * 1-车主证件校验不通过
+ * 2-不支持的投保范围(例如:上年非9座及9座以下客车)
+ * 3-系统异常
  * @author: wenks
  * @date: 2024/3/21 9:28
  **/
@@ -18,58 +23,146 @@ import java.util.List;
 public class RenewalConfirmResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = -8873429389539363291L;
-
-    private String flowid;
-
+    /***
+     * 费率版本(车险综合改革后新增)
+     * c 条件
+     */
     private String productVersion;
-
+    /***
+     * 是否是新能源车条款
+     * c 条件
+     */
     private String isNewEnergy;
-
+    /***
+     * 车辆信息
+     */
     private VehicleDTO vehicle;
-
+    /***
+     *  过户信息
+     */
     private BizQuoteDTO bizQuote;
-
+    /***
+     * 燃料类型
+     */
     private ForceQuoteDTO forceQuote;
-
+    /***
+     * 被投保人信息
+     */
     private InsuredDTO insured;
-
+    /***
+     * 车主信息
+     */
+    private RegisterDTO register;
+    /***
+     * 投保人信息
+     */
+    private ApplicantDTO applicant;
+    /***
+     * 商业报价信息
+     */
+    private RenewalDTO renewal;
+
+    /***
+     *  新能源汽车)上年投保附加自用充电桩损失保险或附加自用充电桩责任保险时返回
+     */
     private List<ChargingPostListDTO> chargingPostList;
-
+    /***
+     * 收单信息
+     */
     private AddressDTO address;
-
+    /**
+     *  车辆信息
+     */
     @Data
     public static class VehicleDTO implements Serializable {
 
         private static final long serialVersionUID = -2693316695687367619L;
-
+        /***
+         * 车牌
+         * M
+         */
         private String licenseNo;
-
+        /***
+         * 车架号(脱敏)
+         * M
+         */
         private String frameNo;
-
+        /***
+         * 发动机号(脱敏)
+         * M
+         */
         private String engineNo;
-
+        /***
+         * 初登日期
+         * M
+         */
         private String registerDate;
-
+        /***
+         * 车辆所属品牌名
+         * M
+         */
         private String brandName;
-
+        /***
+         * 车型名
+         * M
+         */
         private String modelName;
-
+        /***
+         * 座位数
+         * M
+         */
         private String seats;
-
+        /***
+         * 新车购置价
+         * M
+         */
         private String price;
-
+        /***
+         * 整备质量
+         * c
+         */
         private String wholeWeight;
-
+        /***
+         * 排气量
+         * c
+         */
         private String exhaustMeasure;
-
+        /***
+         * 核定载质量
+         * c
+         */
         private String tonNumber;
-
+        /***
+         * 号牌种类
+         * c
+         */
         private String licenceTypeCode;
-
+        /***
+         * 车辆使用性质代码(01:营业,02:非营业)
+         * 默认02:非营业
+         * c
+         */
         private String useAttribute;
-
+        /***
+         * 所属性质(01:机关,02:企业,03:私人)
+         * 默认03:私人
+         * 车辆使用性质为01:营业时,所属性质不可以选择01:机关
+         * c
+         */
         private String ownAttribute;
-
+        /***
+         * 能源类型
+         * 北京:
+         * A:汽油,B:柴油,c:电,D:混合油,E:天然气,F:液化石油气,L:甲醇,M:乙醇,N:太阳能,O:混合动力,Y:无,Z:其它
+         *
+         * 其他地区:
+         * 0: 燃油
+         * 1: 纯电动
+         * 2: 燃料电池
+         * 3: 插电式混合动力
+         * 4: 其他混合动力
+         * c
+         */
         private String energyType;
 
     }
@@ -78,9 +171,15 @@ public class RenewalConfirmResponse extends PingAnBaseResponse {
     public static class BizQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = 550815378655396224L;
-
+        /***
+         * 是否为过户车
+         * C
+         */
         private String specialCarFlag;
-
+        /***
+         * 过户日期
+         * C
+         */
         private String specialCarDate;
 
 
@@ -90,189 +189,823 @@ public class RenewalConfirmResponse extends PingAnBaseResponse {
     public static class ForceQuoteDTO implements Serializable {
 
         private static final long serialVersionUID = -7590812943328629609L;
-
+        /***
+         * 燃料类型
+         * 北京:
+         *      * A:汽油,B:柴油,c:电,D:混合油,E:天然气,F:液化石油气,L:甲醇,M:乙醇,N:太阳能,O:混合动力,Y:无,Z:其它
+         *      *
+         *      * 其他地区:
+         *      * 0: 燃油
+         *      * 1: 纯电动
+         *      * 2: 燃料电池
+         *      * 3: 插电式混合动力
+         *      * 4: 其他混合动力
+         */
         private String fuelType;
     }
 
+    /***
+     * 被投保人信息
+     */
     @Data
     public static class InsuredDTO implements Serializable {
 
         private static final long serialVersionUID = 7454556088842207818L;
-
+        /***
+         * 个团标志[1个人,0团体]
+         * 默认1个人
+         */
         private String personnelType;
-
+        /***
+         * 投保人名称
+         */
         private String name;
-
+        /***
+         * 证件类型
+         * 个团标志为1个人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0团体时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体标志仅支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         */
         private String idType;
-
+        /***
+         * 证件号码
+         */
         private String idNo;
-
+        /***
+         * 性别
+         */
         private String gender;
-
+        /***
+         * 出生日期
+         */
         private String birthday;
-
+        /***
+         * 手机或者家庭电话
+         */
         private String mobile;
-
+        /***
+         * 组织机构类型
+         * 02-个体工商户
+         * 03-企业非法人
+         * 04-企业法人
+         * 05-机关法人
+         * 06-机关非法人
+         * 07-事业法人
+         * 08-事业非法人
+         * 09-社团法人
+         * 10-社团非法人
+         * 11-工会法人
+         * 12-民办非企业单位
+         * 13-其他
+         */
         private String organizationType;
-
+        /***
+         * 电话总机
+         */
         private String phoneExchange;
-
+        /***
+         * 联系人姓名
+         */
         private String contactName;
-
+        /***
+         * 地址
+         * 同身份证上的地址保持一致
+         * 河北、唐山机构时至少录到区县级
+         * 【地址长度100字符,中文最长50】
+         */
         private String address;
 
     }
 
+    /***
+     * 车主信息
+     */
     @Data
     public static class RegisterDTO implements Serializable {
 
         private static final long serialVersionUID = 5158351053368351213L;
-
+        /***
+         *个团标志[1个人,0团体]
+         * 默认1个人
+         */
         private String personnelType;
-
+        /***
+         * 车主名称
+         */
         private String name;
-
+        /***
+         * 证件类型
+         * 所属性质为03:私人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06)  ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 所属性质为01:机关和02:企业时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体时只支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         *
+         * 证件类型续保模式录入回传给平安,则需要录入生日、性别。
+         */
         private String idType;
-
+        /***
+         * 证件号码
+         */
         private String idNo;
-
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
         private String gender;
-
+        /***
+         * 生日
+         */
         private String birthday;
-
+        /***
+         * 行驶证车主地址
+         * 河北、唐山机构、江西机构时至少录到区县级【地址长度100字符,中文最长50】
+         */
         private String address;
     }
 
+    /***
+     * 投保人信息
+     */
     @Data
     public static class ApplicantDTO implements Serializable {
 
         private static final long serialVersionUID = -7551366445468303439L;
-
+        /***
+         * 个团标志[1个人,0团体]
+         * 默认1个人
+         */
         private String personnelType;
-
+        /***
+         * 投保人名称
+         */
         private String name;
-
+        /***
+         * 证件类型
+         * 个团标志为1-个人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0-团体时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,T团体时只支持01,03,05
+         */
         private String idType;
-
+        /***
+         * 证件号码
+         */
         private String idNo;
-
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
         private String gender;
-
+        /***
+         * 生日
+         */
         private String birthday;
-
+        /***
+         * 手机或者家庭电话
+         */
         private String mobile;
-
+        /***
+         * 电子邮箱
+         */
         private String email;
-
+        /***
+         * 组织机构类型
+         * 02-个体工商户
+         * 03-企业非法人
+         * 04-企业法人
+         * 05-机关法人
+         * 06-机关非法人
+         * 07-事业法人
+         * 08-事业非法人
+         * 09-社团法人
+         * 10-社团非法人
+         * 11-工会法人
+         * 12-民办非企业单位
+         * 13-其他
+         */
         private String organizationType;
-
+        /***
+         *  电话总机
+         */
         private String phoneExchange;
-
+        /***
+         * 联系人姓名
+         */
         private String contactName;
-
+        /***
+         *  地址
+         * 同身份证上的地址保持一致
+         * 河北、唐山机构时至少录到区县级
+         * 【地址长度100字符,中文最长50】
+         */
         private String address;
     }
 
+    /***
+     * 保单信息
+     */
     @Data
     public static class RenewalDTO implements Serializable {
         private static final long serialVersionUID = -5775490730217696270L;
+        /***
+         * 保费总计
+         */
         private String premiumTotal;
+        /***
+         *机动车损失保险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount01;
+        /***
+         * 机动车第三者责任保险
+         * 0:不投保
+         * 上限1000万
+         * 2000000:200万
+         * 1500000:150万
+         * 1000000:100万
+         * 500000:50万
+         * 300000:30万
+         * 200000:20万
+         * 150000:15万
+         * 100000:10万
+         *
+         * 10万起步,实际售卖套餐上限可以与业务确认。大于100万后需要每次增加50万额度。
+         */
         private String amount02;
+        /***
+         * 机动车车上人员责任保险(司机)
+         *
+         * 0:不投保
+         * 200000:20万
+         * 100000:10万
+         * 50000: 5万
+         * 40000:4万
+         * 30000:3万
+         * 20000:2万
+         * 10000:1万
+         */
         private String amount04;
+        /***
+         * 机动车车上人员责任保险(乘客)
+         *
+         * 0:不投保
+         * 200000:20万
+         * 100000:10万
+         * 50000: 5万
+         * 40000:4万
+         * 30000:3万
+         * 20000:2万
+         * 10000:1万
+         */
         private String amount05;
+        /***
+         * 附加车上货物责任险
+         *
+         * 0:不投保
+         * 200000:20万
+         * 100000:10万
+         * 50000: 5万
+         * 20000:2万
+         * 10000:1万
+         *
+         * 限营业货车
+         */
         private String amount06;
+        /***
+         * 附加医保外用药责任险(三者)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount07Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount07Fee不需要有值。
+         */
         private String amount07;
+        /***
+         * 附加医保外用药责任险保额(三者)
+         * 分为如下档次:
+         * 5k 1w 2w 5w 10w 15w 20w 30w
+         * 50w 100w 150w 200w 300w 400w 600w 800w 1000w
+         */
         private String amount07Fee;
+        /***
+         * 附加医保外用药责任险(司机)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount08Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount08Fee不需要有值。
+         */
         private String amount08;
+        /***
+         * 附加医保外用药责任险保额(司机),分为如下档次:
+         * 5k 1w  2w  5w 10w 15w 20w 30w
+         * 50w 100w 150w 200w 300w 400w 600w 800w 1000w
+         */
         private String amount08Fee;
+        /***
+         * 附加医保外用药责任险(乘客)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount09Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount09Fee不需要有值。
+         */
         private String amount09;
+        /***
+         * 附加医保外用药责任险保额(乘客),分为如下档次:
+         * 5k 1w 2w 5w 10w 15w 20w 30w
+         * 50w 100w 150w 200w 300w 400w 600w 800w 1000w
+         */
         private String amount09Fee;
+        /***
+         * 附加修理期间费用补偿险
+         * 0:不投保
+         * [1~90]投保的天数
+         */
         private String amount10;
+        /***
+         * 修理期间费用补偿险每天补偿金额
+         */
         private String amount10Fee;
+        /***
+         * 附加新增加设备损失险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount11;
+        /***
+         * 附加车身划痕损失险
+         * 0:不投保
+         * 2000:2000
+         * 5000:5000
+         * 10000:1万
+         * 20000:2万
+         */
         private String amount17;
+        /***
+         * 附加精神损害抚慰金责任险(三者)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount32;
+        /***
+         *附加精神损害抚慰金责任险(司机)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount30;
+        /***
+         * 附加精神损害抚慰金责任险(乘客)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount31;
+        /***
+         * 附加车轮单独损失险
+         * 0:不投保
+         * 2000:2000
+         * 3000:3000
+         * 5000:5000
+         * 8000:8000
+         * 10000:10000
+         * 15000:15000
+         */
         private String amount52;
+        /***
+         * 附加绝对免赔率特约险(车损)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount53;
+        /***
+         * 附加绝对免赔率特约险(三者)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount54;
+        /***
+         * 附加绝对免赔率特约险(车上人员司机)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount55;
+        /***
+         * 附加绝对免赔率特约险(车上人员乘客)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount56;
+        /***
+         * 机动车钥匙丢失或损坏费用补偿险
+         * 0:不投保
+         * 1000:1000
+         * 2000:2000
+         * 3000:3000
+         * 5000:5000
+         *
+         * 中保信暂未配置,平安暂不售卖
+         */
         private String amount73;
+        /***
+         * 附加法定节假日限额翻倍险
+         * 0:不投保
+         * 投保金额:与三者保额一致。根据三者保额调整自动变更。
+         */
         private String amount74;
+        /***
+         * 附加发动机进水损坏除外特约条款
+         * 0:不投保
+         * 1:投保
+         *
+         * 无需录入保额
+         */
         private String amount75;
+        /***
+         * 道路救援服务特约条款(9座以下非营业客车可以投保)
+         * 0:不投保
+         * 2:赠送
+         * 7:2+5次
+         * 12:2+10次
+         * 17:2+15次
+         * 22:2+20次
+         *
+         * 投保时22次赠送。
+         * 后台传递2、7、12、17、22
+         * 任意主险投保则带出
+         */
         private String amount01Sv;
+        /***
+         * 车辆安全检测特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+         * 0:不投保
+         * 其余享受服务的次数
+         * 默认不勾选
+         * 任意主险投保则带出
+         */
         private String amount02Sv;
+        /***
+         * 代为驾驶服务特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+         * 0:不投保
+         * 其余享受服务的次数
+         * 默认不勾选
+         * 任意主险投保则带出
+         */
         private String amount03Sv;
+        /***
+         * 代为送检服务特约条款(
+         * 9座以下非营业客车才可以勾选。)
+         * 0:不投保
+         * 1:投保
+         * 界面展示1次
+         * 任意主险投保则带出
+         */
         private String amount04Sv;
+        /***
+         *新能源汽车损失保险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount01XNY;
+        /**
+         * 新能源汽车损失保险保额
+         * 车损险绝对免赔额(元)
+         *
+         * 保额档次:同机动车
+         */ 
         private String inputAmountXNY;
+        /***
+         *车损险绝对免赔额(元)
+         *
+         * 保额档次:同机动车
+         */
         private String inputAmount01XNY;
+        /***
+         *新能源汽车第三者责任保险
+         *
+         * 保额档次:同机动车
+         */
         private String amount02XNY;
+        /***
+         *新能源汽车车上人员责任保险(司机)
+         *
+         * 保额档次:同机动车
+         */
         private String amount03XNY;
+        /***
+         * 新能源汽车车上人员责任保险(乘客)
+         *
+         * 保额档次:同机动车
+         */
         private String amount04XNY;
+        /***
+         *附加绝对免赔率特约险(车损)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount05XNY;
+        /***
+         * 附加绝对免赔率特约险(三者)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount06XNY;
+        /***
+         * 附加绝对免赔率特约险(车上人员司机)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount07XNY;
+        /***
+         * 附加绝对免赔率特约险(车上人员乘客)
+         * 0:不投保
+         * 5%
+         * 10%
+         * 15%
+         * 20%勾选
+         *
+         * 传递后台5、10等数字即可,非小数
+         */
         private String amount08XNY;
+        /***
+         *附加车轮单独损失险
+         *
+         * 保额档次:同机动车
+         */
         private String amount09XNY;
+        /***
+         * 附加新增加设备损失险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount10XNY;
+        /***
+         *附加车身划痕损失险
+         * 保额档次:同机动车
+         */
         private String amount11XNY;
+        /***
+         * 附加修理期间费用补偿险
+         * 0:不投保
+         * [1~90]投保的天数
+         */
         private String amount12XNY;
+        /***
+         * 修理期间费用补偿险每天补偿金额
+         */
         private String amount12XNYFee;
+        /***
+         * 附加车上货物责任险
+         *
+         * 保额档次:同机动车
+         * 限营业货车。
+         */
         private String amount13XNY;
+        /***
+         * 附加精神损害抚慰金责任险(三者)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount14XNY;
+        /***
+         * 附加精神损害抚慰金责任险(司机)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount15XNY;
+        /***
+         * 附加精神损害抚慰金责任险(乘客)
+         * 0:不投保
+         * [投保金额:16位数字,最多两位小数]
+         */
         private String amount16XNY;
+        /***
+         * 附加法定节假日限额翻倍险
+         * 0:不投保
+         * 投保金额:与三者保额一致。根据三者保额调整自动变更。
+         */
         private String amount17XNY;
+        /***
+         * 附加医保外用药责任险(三者)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount18Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount18Fee不需要有值。
+         */
         private String amount18XNY;
+        /***
+         * 附加医保外用药责任险保额(三者)
+         * 分为如下档次:
+         * 同机动车
+         */
         private String amount18XNYFee;
+        /***
+         * 附加医保外用药责任险(司机)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount19Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount19Fee不需要有值。
+         */
         private String amount19XNY;
+        /***
+         * 附加医保外用药责任险保额(司机),分为如下档次:
+         * 同机动车
+         */
         private String amount19XNYFee;
+        /***
+         *附加医保外用药责任险(乘客)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount20Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount20Fee不需要有值。
+         */
         private String amount20XNY;
+        /***
+         *附加医保外用药责任险保额(乘客),分为如下档次:
+         * 同机动车
+         */
         private String amount20XNYFee;
+        /***
+         * 附加外部电网故障损失险
+         * 0:不投保
+         * 1:投保
+         * 保额默认为主险新能源汽车车损险保额
+         *
+         * 仅对纯电和插电混动两个能源类型的车可保,燃料电池不可保
+         */
         private String amount21XNY;
+        /***
+         *附加自用充电桩损失保险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount22XNY;
+        /***
+         *附加自用充电桩责任保险
+         * 0:不投保
+         * 1:投保
+         */
         private String amount23XNY;
+        /***
+         *道路救援服务特约条款(9座以下非营业客车可以投保)
+         * 0:不投保
+         * 同机动车传值
+         */
         private String amount01SvXNY;
+        /***
+         * 车辆安全检测特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+         * 0:不投保
+         * 同机动车传值
+         */
         private String amount02SvXNY;
+        /***
+         * 代为驾驶服务特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+         * 0:不投保
+         * 同机动车传值
+         */
         private String amount03SvXNY;
+        /***
+         *代为送检服务特约条款(
+         * 9座以下非营业客车才可以勾选。)
+         * 0:不投保
+         * 1:投保
+         * 同机动车传值
+         */
         private String amount04SvXNY;
-        private String amount10XNYDeviceList;
+        /***
+         *设备信息
+         */
+        private List<SubjectDTO> amount10XNYDeviceList;
 
     }
 
+    /***
+     * 设备信息
+     */
     @Data
-    public static class ChargingPostListDTO implements Serializable {
+    public static class SubjectDTO implements Serializable {
 
         private static final long serialVersionUID = 374839579312563821L;
-
+        /***
+         * 设备名称
+         */
         private String subjectName;
+        /***
+         *  设备保额
+         */
+        private String insuredAmount;
 
-        private String chargingPostType;
 
-        private String chargingPostCode;
+    }
+    /***
+     *  新能源汽车)上年投保附加自用充电桩损失保险或附加自用充电桩责任保险时返回
+     */
+    @Data
+    public static class ChargingPostListDTO implements Serializable {
 
+        private static final long serialVersionUID = 374839579312563821L;
+        /***
+         * 充电桩设备名称
+         */
+        private String subjectName;
+        /***
+         * 充电桩型号
+         */
+        private String chargingPostType;
+        /***
+         * 充电桩编码
+         */
+        private String chargingPostCode;
+        /***
+         * 充电桩安装地点
+         */
         private String chargingPostAddress;
-
+        /***
+         * 安装地点类型
+         * 1: 地面停车场
+         * 2: 地面停车楼/地下停车场
+         */
         private String chargingPostAddressType;
-
+        /***
+         * 充电桩种类
+         * 1: 地面充电桩
+         * 2: 壁挂式充电桩
+         * 9: 其他类充电桩
+         */
         private String chargingPostKind;
 
 
     }
-
+    /***
+     * 收单信息
+     */
     @Data
     public static class AddressDTO implements Serializable {
 
         private static final long serialVersionUID = 374839579312563821L;
-
+        /***
+         *  配送途径
+         * 自动配送0,门店自取1,2-业务员送单
+         */
         private String receiveMode;
-
+        /***
+         *  收件人姓名
+         */
         private String name;
-
+        /***
+         *  收件人联系电话
+         */
         private String mobile;
 
     }

+ 25 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/RepealDocumentResponse.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 撤销单证  9.2 接口出参
+ *  resultMessage	O	后台接口执行信息
+ * resultCode	M	后台接口执行编码
+ * 0-[成功]
+ * 1-异常
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class RepealDocumentResponse extends PingAnBaseResponse {
+
+
+    /***
+     * 单证状态
+     */
+    private String status;
+}

+ 48 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/ScanCodeURLResponse.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:42
+ *  @Description: 二维码支付  7.8  接口出参
+ *  	resultMessage	O	后台接口执行信息
+ * 	resultCode	M	后台接口执行编码
+ * 'Y'成功;'N'失败
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ScanCodeURLResponse extends PingAnBaseResponse {
+
+    /***
+     * 单证集合
+     */
+    private ArrayList<ScanCodeURLDTO> scanCodeURLList=new ArrayList<ScanCodeURLDTO>();
+    /***
+     *单证信息
+     *
+     */
+    @Data
+    public static class ScanCodeURLDTO implements Serializable {
+
+        /***
+         *单证号
+         * M
+         */
+        private String documentNo;
+        /***
+         *单证类型(01投保单02保单03批改申请单04批单05赔案号06报案号07通知单号)
+         * M
+         */
+        private String documentType;
+        /**
+         * 二维码连接字符串
+         */ 
+        private  String scanCodeURL;
+    }
+}

+ 33 - 7
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/ServiceContractResponse.java

@@ -5,28 +5,54 @@ import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 11:49
+ *  @Description:  服务类特约检索   5.2   接口出参
+ *
+ *  resultMessage	O	后台接口执行信息
+ * resultCode	M	0-[成功]
+ * 1-失败
+ */
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class ServiceContractResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = 7934610842795471920L;
-
+    /***
+     * 返回数据
+     */
     private DAtaDTO data;
 
     @Data
     public static class DAtaDTO implements Serializable {
 
         private static final long serialVersionUID = -6329314932281319677L;
-
+        /***
+         * 增值服务特约条款类型
+         * c
+         */
         private String vasSpecialClause;
-
+        /***
+         * 页面是否显示
+         * c
+         */
         private String isShown;
-
+        /***
+         * 是否默认勾选
+         * c
+         */
         private String isChecked;
-
+        /***
+         * 默认显示次数
+         * c
+         */
         private String defaultDisplayNum;
-
+        /***
+         * 页面可选次数
+         * c
+         */
         private String optionNum;
 
     }

+ 1745 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/SubmitApplyResponse.java

@@ -1,15 +1,1760 @@
 package com.ydtech.modules.order.entity.api.pingan.response;
 
 
+import com.ydtech.modules.order.entity.api.pingan.request.QuoteRequest;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 12:55
+ *  @Description: 补充信息并核保   61  接口出参
+ *  resultMessage	O	后台接口执行信息
+ * resultCode	M	0-[成功]
+ * 1-意健险投保人年龄大于18岁校验
+ * 2-意健险被保人年龄范围校验
+ * 3-您填写的车主姓名与行驶证上不一致,请修改
+ * 4-投保查询失败
+ * 5-车辆需要验车
+ * 6-核保失败
+ * 7-商业险通过;交强险不通过
+ * 8-商业险不通过,交强险通过
+ * 9-北京身份信息采集,用户输入的身份采集验证码申请核保时校验失败
+ * 11-事中验车(录入验车字段)
+ * 12-商业险需要录入转保验证码
+ * 13-交强险需要录入转保验证码
+ * 14-商业、交强均需要录入转保验证码
+ * 15- 事中上传资料
+ * 16-客户真实性校验失败
+ * flowid	ME	流程ID
+ *
+ */
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class SubmitApplyResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = -506696668160218786L;
+    /***
+     * 组织机构代码证、营业执照校验不通过提示
+     * 有内容则展示,可以忽略继续后续流程
+     * c
+     */
+    private String validMessage;
+    /***
+     * 是否投保商业险
+     * m
+     */
+    private String isApplyBiz;
+    /***
+     * 是否投保交强险
+     * m
+     */
+    private String isApplyForce;
+    /***
+     *  机构信息
+     */
+    private DepartmentDTO department;
 
 
+    /***
+     *机构信息
+     *
+     */
+    @Data
+    public static class DepartmentDTO implements Serializable {
+
+        private static final long serialVersionUID = 8797282780429139870L;
+        /***
+         *
+         * M	出单机构编码
+         * m
+         */
+        private String departmentCode;
+        /***
+         * M	出单机构中文
+         *
+         */
+        private String departmentName;
+        /***
+         *M	二级机构
+         *
+         */
+        private String level2DepartmentCode;
+        /***
+         *
+         M	平安三级机构编码
+         */
+        private String level3DepartmentCode;
+        /***
+         * 省编码
+         */
+        private String provinceCode;
+        /***
+         * 省名称
+         * */
+        private String provinceName;
+        /***
+         * 市编码
+        */
+        private String cityCode;
+        /***
+         * 市名称
+         */
+        private String cityName;
+    }
+    /***
+     * 地址信息
+     */
+    private AddressDTO address;
+
+    /***
+     *地址信息
+     *
+     */
+    @Data
+    public static class AddressDTO implements Serializable {
+
+        /***
+         * ME  1
+         */
+        private String receiveMode;
+        /***
+         * CE
+         *  省编码
+         */
+        private String provinceCode;
+        /***
+         * CE 省名称
+         */
+        private String provinceName;
+        /***
+         *
+         CE  市级编码
+         */
+        private String cityCode;
+        /***
+         * O 市名称
+         */
+        private String cityName;
+        /***
+         * CE
+         * */
+        private String townCityCode;
+        /***
+         * O
+         */
+        private String townCityName;
+        /***
+         * O
+         */
+        private String townCode;
+        /***
+         * O
+         */
+        private String townName;
+        /***
+         * CE
+         */
+        private String name;
+        /***
+         * CE
+         */
+        private String mobile;
+        /***
+         * CE
+         */
+        private String address;
+    }
+
+    /***
+     * 录单信息
+     */
+    private AccountInfoDTO accountInfo;
+
+    /***
+     *录单信息
+     *
+     */
+    @Data
+    public static class AccountInfoDTO implements Serializable {
+
+        /***
+         * ME	录单人
+         */
+        private String inputBy;
+        /***
+         * ME	录单人名称
+         */
+        private String inputName;
+        /***
+         * ME	车商|合作网点编码
+         */
+        private String dealerCode;
+        /***
+         *
+         ME	车商|合作网点名称
+         */
+        private String dealerName;
+        /***
+         * ME	代理人编码
+         */
+        private String agentCode;
+        /***
+         * ME	代理人名称
+         * */
+        private String agentName;
+    }
+
+    /**
+     *  车辆信息
+     */
+    private VehicleDTO vehicle;
+
+    /***
+     * 车辆信息
+     */
+    @Data
+    public static class VehicleDTO implements Serializable {
+
+        private static final long serialVersionUID = -2016238508046403647L;
+        /**
+         * M	车牌
+         */
+        private String licenseNo;
+        /**
+         * 车架号
+         * m
+         */
+        private String frameNo;
+        /**
+         * 发动机号
+         * m
+         */
+        private String engineNo;
+        /**
+         * 车辆初登日期
+         * m
+         */
+        private String registerDate;
+
+        /**
+         * 精友车型编码
+         * C
+         * modelCode,paModelCode和modelIndex三者必须传一个
+         */
+        private String modelCode;
+        /**
+         M	车辆所属品牌名
+         */
+        private String brandName;
+        /**
+         * M	车型名
+         */
+        private String modelName;
+        /**
+         * M	车型描述
+         */
+        private String description;
+        /**
+         * 座位数
+         * M
+         */
+        private String seats;
+        /**
+         M	新车购置价
+         */
+        private String price;
+        /**
+         * 核定载质量(吨)
+         * C
+         * 北京新车备案或者
+         * 货车必填
+         */
+        private String tonNumber;
+        /**
+         C	整备质量(吨)
+         */
+        private String wholeWeight;
+        /**
+         C	排气量
+         */
+        private String exhaustMeasure;
+        /**
+         O	车辆使用性质代码
+         */
+        private String useAttribute;
+        /**
+         O
+         使用性质细分
+         */
+        private String useAttributDetailCode;
+        /**
+         O	所属性质
+         */
+        private String ownAttribute;
+        /**
+         M	车型产地
+         0:国产,1:合资,2:进口
+         */
+        private String importFlag;
+    }
+    /**
+     * 商业险车贷投保多年标志
+     */
+    private BizQuoteDTO bizQuote;
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 11:35
+     *  @Description: 商业险车贷投保多年标志
+     */
+    @Data
+    public static class BizQuoteDTO implements Serializable {
+
+        private static final long serialVersionUID = -4583474052247976539L;
+
+        /**
+         * 商业险车贷投保多年标志(1:车贷投保多年 0:未车贷投保多年)
+         * 默认0
+         */
+        private String loanVehicleFlag;
+        /***
+         * C	过户日期
+         */
+        private String specialCarDate;
+
+    }
+    /**
+     * 被保人信息
+     */
+    private InsuredDTO insured;
+
+    /***
+     * 被保人信息
+     */
+    @Data
+    public static class InsuredDTO implements Serializable {
+
+        private static final long serialVersionUID = 3194577722449684615L;
+        /***
+         *个团标志[1个人,0团体]
+         * 默认1个人
+         * O
+         */
+        private String personnelType;
+        /***
+         * 被保人名称
+         * M
+         */
+        private String name;
+        /***
+         * 证件类型
+         * 个团标志为1-个人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06) ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 个团标志为0-团体时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,T团体时只支持01,03,05
+         * M
+         */
+        private String idType;
+        /***
+         *   证件号码
+         *   M
+         */
+        private String idNo;
+        /***
+         *  性别
+         * 男(M),女(F)
+         * C
+         * 传身份证号码时,可不传
+         */
+        private String gender;
+        /***
+         * 出生日期
+         * yyyy-mm-dd
+         * C
+         * 传身份证号码时,可不传
+         */
+        private String birthday;
+        /***
+         * 手机或者家庭电话
+         *  M
+         *          * 浙江、大连必传
+         *          *
+         *          * 可以放在6.1  submitApply接口补录
+         */
+        private String mobile;
+        /***
+         * 组织机构类型
+         *          * 02-个体工商户
+         *          * 03-企业非法人
+         *          * 04-企业法人
+         *          * 05-机关法人
+         *          * 06-机关非法人
+         *          * 07-事业法人
+         *          * 08-事业非法人
+         *          * 09-社团法人
+         *          * 10-社团非法人
+         *          * 11-工会法人
+         *          * 12-民办非企业单位
+         *          * 13-其他
+         *          *
+         *          * C
+         *          * 个团标志为0-团体时
+         */
+        private String organizationType;
+        /***
+         *  电话总机
+         *  C
+         * 个团标志为0-团体时
+         */
+        private String phoneExchange;
+        /***
+         * 联系人姓名
+         * C
+         * 个团标志为0-团体时
+         */
+        private String contactName;
+
+    }
+    /**
+     *  车主信息
+     */
+    private RegisterDTO register;
+
+    /***
+     * 车主信息
+     */
+    @Data
+    public static class RegisterDTO implements Serializable {
+        private static final long serialVersionUID = 5813499296522149580L;
+        /***
+         *个团标志[1个人,0团体]
+         * 默认1个人
+         * O
+         */
+        private String personnelType;
+        /***
+         * 车主名称
+         */
+        private String name;
+        /***
+         * 证件类型
+         * 所属性质为03:私人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06)  ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 所属性质为01:机关和02:企业时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体时只支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         *
+         * 证件类型续保模式录入回传给平安,则需要录入生日、性别。
+         */
+        private String idType;
+        /***
+         * 证件号码
+         */
+        private String idNo;
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
+        private String gender;
+        /***
+         * 生日
+         */
+        private String birthday;
+    }
+    /**
+     *  投保人信息
+     */
+    private ApplicantDTO applicant;
+
+    /***
+     * 投保人信息
+     */
+    @Data
+    public static class ApplicantDTO implements Serializable {
+
+        private static final long serialVersionUID = -6224889213421486612L;
+        /***
+         *  个团标志[1个人,0团体]
+         * 默认1个人
+         * C
+         * 上海地区必传
+         */
+        private String personnelType;
+        /***
+         *投保人名称
+         * C
+         * 上海地区必传
+         */
+        private String name;
+        /***
+         * 证件类型
+         * 所属性质为03:私人时
+         * 居民身份证(01),护照(02),军人身份证(03), 港澳居民来往内地通行证(06)  ,外国人永久居留证(08), 港澳台居民居住证(09),台湾居民通行证(10),武警身份证(13)
+         *
+         * 所属性质为01:机关和02:企业时
+         * 01:组织机构代码证,
+         * 02:税务登记证,03:其他(仅特批时使用),
+         * 04:营业执照
+         * 05:统一社会信用代码
+         *
+         * 北京地区只支持01, 03 , 05
+         * 上海切换全国后,团体时只支持01,03,05
+         *
+         * 传组织机构代码证、营业执照时,会从国家代码中心检查
+         *
+         * 证件类型续保模式录入回传给平安,则需要录入生日、性别。
+         */
+        private String idType;
+        /***
+         * 证件号码
+         */
+        private String idNo;
+        /***
+         * 性别
+         * 男(M),女(F)
+         */
+        private String gender;
+        /***
+         * 生日
+         */
+        private String birthday;
+        /***
+         * 手机或者家庭电话
+         */
+        private String mobile;
+        /***
+         * 邮箱
+         */
+        private String email;
+        /***
+         * 组织机构类型
+         *          * 02-个体工商户
+         *          * 03-企业非法人
+         *          * 04-企业法人
+         *          * 05-机关法人
+         *          * 06-机关非法人
+         *          * 07-事业法人
+         *          * 08-事业非法人
+         *          * 09-社团法人
+         *          * 10-社团非法人
+         *          * 11-工会法人
+         *          * 12-民办非企业单位
+         *          * 13-其他
+         *          *
+         *          * C
+         *          * 个团标志为0-团体时
+         */
+        private String organizationType;
+        /***
+         *  电话总机
+         *  C
+         * 个团标志为0-团体时
+         */
+        private String phoneExchange;
+        /***
+         * 联系人姓名
+         * C
+         * 个团标志为0-团体时
+         */
+        private String contactName;
+    }
+    /***
+     * 总保费
+     */
+    private PremiumTotalDTO premiumTotal;
+
+    /***
+     * 投保人信息
+     */
+    @Data
+    public static class PremiumTotalDTO implements Serializable {
+
+        private static final long serialVersionUID = -6224889213421486612L;
+        /***
+         * M	总保费
+         */
+        private String real;
+    }
+    /***
+     *
+     *  车险限制信息
+     */
+    private BizQuoteConfigDTO bizQuoteConfig;
+
+    /***
+     *  报价配置
+     */
+    @Data
+    public static class BizQuoteConfigDTO implements Serializable {
+
+        private static final long serialVersionUID = -4715504504767375582L;
+        /***
+         *  机动车损失保险
+         * 0:不投保
+         * 1:投保
+         */
+        private String amount01;
+        /***
+         * 机动车第三者责任保险
+         * 0:不投保
+         * 上限1000万
+         * 2000000:200万
+         * 1500000:150万
+         * 1000000:100万
+         * 500000:50万
+         * 300000:30万
+         * 200000:20万
+         * 150000:15万
+         * 100000:10万
+         *
+         * 10万起步,实际售卖套餐上限可以与业务确认。大于100万后需要每次增加50万额度。
+         * c
+         */
+        private String amount02;
+        /***
+         *
+         */
+        private String amount03;
+        /***
+         * 机动车车上人员责任保险(司机)
+         *
+         * 0:不投保
+         * 200000:20万
+         * 100000:10万
+         * 50000: 5万
+         * 40000:4万
+         * 30000:3万
+         * 20000:2万
+         * 10000:1万
+         * c
+         */
+        private String amount04;
+        /***
+         机动车车上人员责任保险(乘客)
+         *
+         * 0:不投保
+         * 200000:20万
+         * 100000:10万
+         * 50000: 5万
+         * 40000:4万
+         * 30000:3万
+         * 20000:2万
+         * 10000:1万
+         * c 单座
+         */
+        private String amount05;
+        /***
+         * 附加医保外用药责任险(司机)
+         * 0:不投保
+         * 1:投保,单独保额。参照amount08Fee档次
+         * 999:共享保额,与主险保额共享。保额字段amount08Fee不需要有值。
+         * c
+         */
+        private String amount08;
+        /***
+         * 附加车身划痕损失险
+         * 0:不投保
+         * 2000:2000
+         * 5000:5000
+         * 10000:1万
+         * 20000:2万
+         * c
+         */
+        private String amount17;
+        /***
+         *
+         */
+        private String amount18;
+        /***
+         *
+         */
+        private String amount27;
+        /***
+         *
+         */
+        private String amount28;
+        /***
+         *
+         */
+        private String amount41;
+        /***
+         *
+         */
+        private String amount48;
+        /***
+         *
+         */
+        private String amount49;
+        /***
+         *
+         */
+        private String amount57;
+        /***
+         *
+         */
+        private String amount63;
+        /***
+         * 附加发动机进水损坏除外特约条款
+         * 0:不投保
+         * 1:投保
+         *
+         * 无需录入保额
+         */
+        private String amount75;
+        /***
+         *
+         */
+        private String amount77;
+        /***
+         *
+         */
+        private String amount79;
+        /***
+         *
+         */
+        private String amount80;
+        /***
+         * 机动车损失保险保额
+         * c
+         */
+        private String inputAmount;
+        /***
+         *
+         */
+        private String inputAmount03;
+        /***
+         *
+         */
+        private String inputAmount18;
+        /***
+         *
+         */
+        private String bizQuoteDeviceList;
+
+        /***
+         * C	商业险保险起期
+         */
+        private String beginDate;
+        /***
+         *  e	C	商业险保险止期
+         */
+        private String endDate;
+    }
+
+    /***
+     *   商业险保费计算信息
+     */
+    private BizQuoteResultDTO bizQuoteResult;
+    /***
+     *  商业险的保费计算信息
+     */
+    @Data
+    public static class BizQuoteResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 3036863448541204517L;
+        /***
+         *  保费总计
+         *  c
+         */
+        private String premiumTotal;
+        /***
+         *  基准保费
+         *  c
+         */
+        private String standardPremium;
+        /***
+         * 机动车损失保险保费
+         * c
+         */
+        private String premium01;
+        /***
+         * 机动车第三者责任保险保费
+         * c
+         */
+        private String premium02;
+        /***
+         *
+         * c
+         */
+        private String premium03;
+        /***
+         * 机动车车上人员责任保险(司机)保费
+         * c
+         */
+        private String premium04;
+        /***
+         * 机动车车上人员责任保险(乘客)保费
+         * c
+         */
+        private String premium05;
+        /***
+         * 附加医保外用药责任险保费(司机)
+         * c
+         */
+        private String premium08;
+        /***
+         * 附加修理期间费用补偿险保费
+         * c
+         */
+        private String premium10;
+        /***
+         * 附加新增加设备损失险保费
+         * c
+         */
+        private String premium11;
+        /***
+         *
+         *
+         */
+        private String premium12;
+        /***
+         * 附加车身划痕损失险保费
+         * c
+         */
+        private String premium17;
+        /***
+         *
+         */
+        private String premium18;
+        /***
+         *
+         */
+        private String premium27;
+        /***
+         *
+         */
+        private String premium28;
+        /***
+         * 附加精神损害抚慰金责任险(三者)保费
+         * c
+         */
+        private String premium32;
+        /***
+         * 附加精神损害抚慰金责任险(司机)保费
+         * c
+         */
+        private String premium30;
+        /***
+         *
+         */
+        private String premium41;
+        /***
+         *
+         */
+        private String premium48;
+        /***
+         *
+         */
+        private String premium49;
+        /***
+         *
+         */
+        private String premium57;
+        /***
+         *
+         */
+        private String premium63;
+        /***
+         *
+         */
+        private String premium75;
+        /***
+         *
+         */
+        private String premium77;
+        /***
+         *
+         */
+        private String premium79;
+        /***
+         *
+         */
+        private String premium80;
+        /***
+         *
+         */
+        private String premium82;
+        /***
+         *
+         */
+        private String premium83;
+        /***
+         *
+         */
+        private String premium84;
+        /***
+         *
+         */
+        private String premium85;
+        /***
+         * 商业险评分
+         * c
+         */
+        private String centile;
+        /***
+         * 连续承保年数(车险综合改革后新增)
+         * c
+         */
+        private String insureYears;
+        /***
+         * 连续承保期间出险次数(车险综合改革后新增)
+         * c
+         */
+        private String claimTimes;
+        /***
+         * 无赔优系数级别(车险综合改革后新增)
+         * c
+         */
+        private String claimAdjustLevel;
+        /***
+         * 风险因子列表
+         */
+        private List<RateListDTO> rateList;
+
+        /***
+         *  风险因子列表
+         */
+        @Data
+        public static class RateListDTO implements Serializable {
+
+
+            private static final long serialVersionUID = 1694242014669228903L;
+            /***
+             * 风险因子编码
+             * F15:车损险绝对免赔额系数
+             * F30:无赔款优待系数(NCD)
+             * F34:交通违法系数
+             * F78:自主定价系数(车险综合改革后,返回的可调整系数仅剩余此系数。自主核保、渠道系数不再返回)
+             * F999汇总系数
+             * c
+             */
+            private String factorCode;
+            /***
+             * 风险因子名称
+             * c
+             */
+            private String factorName;
+            /***
+             * 风险因子系数
+             * c
+             */
+            private String ratio;
+
+        }
+    }
+    /***
+     *  交强险保费计算信息
+     */
+    private ForceQuoteResultDTO forceQuoteResult;
+
+    /***
+     *  交强险保费计算信息
+     */
+    @Data
+    public static class ForceQuoteResultDTO implements Serializable {
+
+        private static final long serialVersionUID = 5506352292832228963L;
+        /***
+         *  交+车船税总计
+         */
+        private String totalPremium;
+        /***
+         *  交强险保费
+         */
+        private String forcePremium;
+        /***
+         *  车船税税费
+         */
+        private String taxPremium;
+        /***
+         * 交强险出险次数
+         */
+        private String claimNumber;
+        /***
+         * 交强险投保查询码
+         */
+        private String queryRequestCode;
+        /***
+         * C	交强险保险起期
+         */
+        private String beginDate;
+        /***
+         C	交强险保险止期
+         */
+        private String endDate;
+        /***
+         *  车船税信息
+         */
+        private TaxDTO tax;
+
+        /***
+         *  车船税信息
+         */
+        @Data
+        public static class TaxDTO implements Serializable {
+
+            private static final long serialVersionUID = -5612140777786229174L;
+            /***
+             * 当前机构未开通车船税(0),
+             * 当前机构开通车船税(1),
+             * 本年度已完税(3),
+             * 已到地税部门申报但未付款[北京](4), 不在征收范围(6),
+             * 新能源车船税减税(7),
+             * 新能源车船税免税(8),
+             * 地税平台处理异常,我司无法代征车船税,请您自行到税局缴纳(10)
+             */
+            private String sortNo;
+            /***
+             *  车船税今年应缴
+             */
+            private String curYearTax;
+            /***
+             * 车船税去年应缴
+             */
+            private String lastYearPay;
+            /***
+             * 车船税滞纳金
+             */
+            private String delayPayMoney;
+
+            /***
+             * 车船税提示文案
+             */
+            private String promptText;
+        }
+
+        /***
+         * 风险因子列表
+         */
+        private List<RateListDTO> rateList =new ArrayList<>();
+        /***
+         *  风险因子列表
+         */
+        @Data
+        public static class RateListDTO implements Serializable {
+
+
+            private static final long serialVersionUID = 1694242014669228903L;
+            /***
+             * 风险因子编码
+             * F15:车损险绝对免赔额系数
+             * F30:无赔款优待系数(NCD)
+             * F34:交通违法系数
+             * F78:自主定价系数(车险综合改革后,返回的可调整系数仅剩余此系数。自主核保、渠道系数不再返回)
+             * F999汇总系数
+             * c
+             */
+            private String factorCode;
+            /***
+             * 风险因子名称
+             * c
+             */
+            private String factorName;
+            /***
+             * 风险因子系数
+             * c
+             */
+            private String ratio;
+
+        }
+    }
+    /***
+     *  【不传则取会用默认特约】
+     */
+    private List<BizSpecialPromiseListDTO> bizSpecialPromiseList=new ArrayList<BizSpecialPromiseListDTO>();
+    /***
+     *  同上
+     */
+    private List<BizSpecialPromiseListDTO> forceSpecialPromiseList=new ArrayList<BizSpecialPromiseListDTO>();
+    /***
+     * 【不传则取会用默认特约】
+     */
+    @Data
+    public static class BizSpecialPromiseListDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * 特约排序序号
+         * o
+         */
+        private String sortIndex;
+        /***
+         * 特约编码
+         * o
+         */
+        private String promiseCode;
+        /***
+         * 特约描述
+         * o
+         */
+        private String promiseDesc;
+        /***
+         * Y为可改特约,N为固定特约,X为可选特约,B为底部特约
+         * o
+         */
+        private String promiseType;
+
+    }
+    /***
+     * M	验车状态
+     * 3在给您上门收款或配送保单时,我们需要对您的车辆进行拍照查验。
+     * 1您的车需要验车
+     * 0您的车辆不需要验车
+     */
+    private String checkVehicleStatus;
+    /***
+     * O	事中验车原因
+     * checkVehicleStatus为1时返回
+     */
+    private String checkVehicleReason;
+    /***
+     * C	商业险投保单号
+     */
+    private String bizApplyNo;
+    /***
+     * C	车驾意投保单号
+     */
+    private String accidentApplyNo;
+    /***
+     * C	交强险投保单号
+     */
+    private String forceApplyNo;
+    /***
+     * C	C	商业险核保状态
+     * BE-待审批,B1-待审核,BH-待验车,B2-待缴费,B3-待承保,B5-已承保,B6-AI审核,B4-待修改,B9-拒保,B0-承保失败,99-已失效,BZ-系统异常,BT-已退费
+     */
+    private String bizAuditStatus;
+    /***
+     * C	交强险核保状态
+     * 同上
+     */
+    private String forceAuditStatus;
+    /***
+     * C	商业险核保失败原因
+     */
+    private String bizAuditMessage;
+    /***
+     * C	交强险核保失败原因
+     */
+    private String forceAuditMessage;
+    /***
+     * C	商业险转保业务投保查询校验码
+     * {bizApplyCheckCode}替换为接口返回内容
+     * <img src="data:image/png;base64,{bizApplyCheckCode}"/>
+     */
+    private String bizApplyCheckCode;
+    /***
+     * C	交强险转保业务投保查询校验码
+     * {forceApplyCheckCode}替换为接口返回内容
+     * <img src="data:image/png;base64,{forceApplyCheckCode}"/>
+     */
+    private String forceApplyCheckCode;
+    /***
+     * C	商业险手续费比例
+     */
+    private String bizAgentFeeRate;
+    /***
+     * C	交强险手续费比例
+     */
+    private String forceAgentFeeRate;
+    /***
+     *C	商业险经纪费比例
+     */
+    private String bizBrokerFeeRate;
+    /***
+     * C	交强险经纪费比例
+     */
+    private String forceBrokerFeeRate;
+    /***
+     * C	风险信息
+     */
+    private PayCapalimityDTO payCapalimity;
+
+    /***
+     * 风险信息
+     */
+    @Data
+    public static class PayCapalimityDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * M	偿付能力充足率	44%
+         */
+        private String solvencyRatio;
+        /***
+         * M	风险综合评级结果	A类
+         */
+        private String riskComprehensiveRating;
+        /***
+         * M	综合偿付能力时间	2016年二季度
+         */
+        private String solvencyDate;
+
+    }
+    /***
+     * 财意险保费节点
+     */
+    private AhsUpcActualPremiumDTO ahsUpcActualPremium;
+
+    /***
+     * 风险信息
+     */
+    @Data
+    public static class AhsUpcActualPremiumDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * C	财意险总保费
+         */
+        private String ahsUpcTotalPremium;
+        /***
+         * C	意外险保费
+         */
+        private String ahsPremium;
+        /***
+         * C	财产险保费
+         */
+        private String upcPremium;
+
+    }
+    /***
+     * 小微险保费节点
+     */
+    private XwActualPremiumDTO xwActualPremium;
+
+    /***
+     * 小微险保费节点
+     */
+    @Data
+    public static class XwActualPremiumDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * C	小微险保费
+         */
+        private String xwPremium;
+    }
+    /***
+     * 意外险产品集合
+     */
+    private List<AccidentApplyPolicyNoDTO> accidentApplyPolicyNoList=new ArrayList<AccidentApplyPolicyNoDTO>();
+
+    /***
+     * 财产险产品集合
+     */
+    private List<AccidentApplyPolicyNoDTO> propertyApplyPolicyNoList=new ArrayList<AccidentApplyPolicyNoDTO>();
+
+    /***
+     * 小微险产品集合
+     */
+    private List<AccidentApplyPolicyNoDTO> xiaoWeiApplyPolicyNoList=new ArrayList<AccidentApplyPolicyNoDTO>();
+    /***
+     * 产品信息
+     */
+    @Data
+    public static class AccidentApplyPolicyNoDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * C	意外险\财产险产品编码
+         */
+        private String productCode;
+        /***
+         * C	意外险\财产险投保单号
+         */
+        private String policyAppNumber;
+    }
+    /***
+     * 商业险文件集合
+     *
+     */
+    private  List<BizMissFileDTO>   bizMissFilelist=new ArrayList<BizMissFileDTO>();
+
+    /***
+     * 交强险文件集合
+     *
+     */
+    private  List<BizMissFileDTO>   forceMissFilelist=new ArrayList<BizMissFileDTO>();
+    /***
+     * 产品信息
+     */
+    @Data
+    public static class BizMissFileDTO implements Serializable {
+
+        private static final long serialVersionUID = 3052472157066379795L;
+        /***
+         * C	文件大类编号
+         */
+        private String documentClass;
+        /***
+         * C	文件大类名称
+         */
+        private String documentClassName;
+        /***
+         * C	是否以上之一均可【1-是,0-否】
+         * 1表示当前大类,只需要上传其中一种小类
+         */
+        private String isAnyOne;
+
+        /***
+         * 文件集合
+         */
+        private List<DocTypeDTO> docTypeList=new ArrayList<DocTypeDTO>();
+
+        @Data
+        public static class DocTypeDTO implements Serializable {
+
+            private static final long serialVersionUID = 3052472157066379795L;
+            /***
+             * C	文件小类编号
+             */
+            private String documentType;
+            /***
+             * C	文件小类名称
+             */
+            private String documentTypeName;
+            /***
+             * C	是否需要事中审核【1-需要,0-不需要】
+             */
+            private String isNeedDuringAudit;
+        }
+
+        /***
+         * 报价配置信息
+         */
+        private BizQuoteConfigDTO bizQuoteConfig;
+
+        /***
+         *  报价配置
+         */
+        @Data
+        public static class BizQuoteConfigDTO implements Serializable {
+
+            private static final long serialVersionUID = -4715504504767375582L;
+            /***
+             * 新能源汽车损失保险
+             * 0:不投保
+             * 1:投保
+             * C
+             */
+            private String amount01XNY;
+            /***
+             * 新能源汽车损失保险保额
+             * C
+             */
+            private String inputAmountXNY;
+            /***
+             * 车损险绝对免赔额(元)
+             *
+             * 保额档次:同机动车
+             * C
+             */
+            private String inputAmount01XNY;
+            /***
+             * 新能源汽车第三者责任保险
+             *
+             * 保额档次:同机动车
+             * C
+             */
+            private String amount02XNY;
+            /***
+             * 新能源汽车车上人员责任保险(司机)
+             *
+             * 保额档次:同机动车
+             * C
+             */
+            private String amount03XNY;
+            /***
+             *新能源汽车车上人员责任保险(乘客)
+             *
+             * 保额档次:同机动车
+             * c 单座
+             */
+            private String amount04XNY;
+            /***
+             * 附加绝对免赔率特约险(车损)
+             * 0:不投保
+             * 5%
+             * 10%
+             * 15%
+             * 20%勾选
+             *
+             * 传递后台5、10等数字即可,非小数
+             * c
+             */
+            private String amount05XNY;
+            /***
+             * 附加绝对免赔率特约险(三者)
+             * 0:不投保
+             * 5%
+             * 10%
+             * 15%
+             * 20%勾选
+             *
+             * 传递后台5、10等数字即可,非小数
+             * c
+             */
+            private String amount06XNY;
+            /***
+             * 附加绝对免赔率特约险(车上人员司机)
+             * 0:不投保
+             * 5%
+             * 10%
+             * 15%
+             * 20%勾选
+             *
+             * 传递后台5、10等数字即可,非小数
+             * c
+             */
+            private String amount07XNY;
+            /***
+             * 附加绝对免赔率特约险(车上人员乘客)
+             * 0:不投保
+             * 5%
+             * 10%
+             * 15%
+             * 20%勾选
+             *
+             * 传递后台5、10等数字即可,非小数
+             * c
+             */
+            private String amount08XNY;
+            /***
+             * 附加车轮单独损失险
+             *
+             * 保额档次:同机动车
+             * c
+             */
+            private String amount09XNY;
+            /***
+             * 附加新增加设备损失险
+             * 0:不投保
+             * 1:投保
+             * c
+             */
+            private String amount10XNY;
+            /***
+             * 附加车身划痕损失险
+             * 保额档次:同机动车
+             * c
+             */
+            private String amount11XNY;
+            /***
+             * 附加修理期间费用补偿险
+             * 0:不投保
+             * [1~90]投保的天数
+             * c
+             */
+            private String amount12XNY;
+            /***
+             * 修理期间费用补偿险每天补偿金额
+             * c
+             */
+            private String amount12XNYFee;
+            /***
+             * 附加车上货物责任险
+             *
+             * 保额档次:同机动车
+             * 限营业货车。
+             * c
+             */
+            private String amount13XNY;
+            /***
+             * 附加精神损害抚慰金责任险(三者)
+             * 0:不投保
+             * [投保金额:16位数字,最多两位小数]
+             * c
+             */
+            private String amount14XNY;
+            /***
+             * 附加精神损害抚慰金责任险(三者)
+             * 0:不投保
+             * [投保金额:16位数字,最多两位小数]
+             * c
+             */
+            private String amount15XNY;
+            /***
+             * 附加精神损害抚慰金责任险(乘客)
+             * 0:不投保
+             * [投保金额:16位数字,最多两位小数]
+             * c
+             */
+            private String amount16XNY;
+            /***
+             * 附加法定节假日限额翻倍险
+             * 0:不投保
+             * 投保金额:与三者保额一致。根据三者保额调整自动变更
+             * c
+             */
+            private String amount17XNY;
+            /***
+             * 附加医保外用药责任险(三者)
+             * 0:不投保
+             * 1:投保,单独保额。参照amount18Fee档次
+             * 999:共享保额,与主险保额共享。保额字段amount18Fee不需要有值。
+             * c
+             */
+            private String amount18XNY;
+            /***
+             * 附加医保外用药责任险保额(三者)
+             * 分为如下档次:
+             * 同机动车
+             * c
+             */
+            private String amount18XNYFee;
+            /***
+             * 附加医保外用药责任险(司机)
+             * 0:不投保
+             * 1:投保,单独保额。参照amount19Fee档次
+             * 999:共享保额,与主险保额共享。保额字段amount19Fee不需要有值。
+             * c
+             */
+            private String amount19XNY;
+            /***
+             * 附加医保外用药责任险保额(司机),分为如下档次:
+             * 同机动车
+             * c
+             */
+            private String amount19XNYFee;
+            /***
+             * 附加医保外用药责任险(乘客)
+             * 0:不投保
+             * 1:投保,单独保额。参照amount20Fee档次
+             * 999:共享保额,与主险保额共享。保额字段amount20Fee不需要有值。
+             * c
+             */
+            private String amount20XNY;
+            /***
+             * 附加医保外用药责任险保额(乘客),分为如下档次:
+             * 同机动车
+             * c
+             */
+            private String amount20XNYFee;
+            /***
+             * 附加外部电网故障损失险
+             * 0:不投保
+             * 1:投保
+             * 保额默认为主险新能源汽车车损险保额
+             *
+             * 仅对纯电和插电混动两个能源类型的车可保,燃料电池不可保
+             * c
+             */
+            private String amount21XNY;
+            /***
+             * 附加自用充电桩损失保险
+             * 0:不投保
+             * 1:投保
+             * c
+             */
+            private String amount22XNY;
+            /***
+             * 附加自用充电桩责任保险
+             * 0:不投保
+             * 1:投保
+             * c
+             */
+            private String amount23XNY;
+            /***
+             * 道路救援服务特约条款(9座以下非营业客车可以投保)
+             * 0:不投保
+             * 同机动车传值
+             * c
+             */
+            private String amount01SvXNY;
+            /***
+             * 车辆安全检测特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+             * 0:不投保
+             * 同机动车传值
+             * c
+             */
+            private String amount02SvXNY;
+            /***
+             * 代为驾驶服务特约条款(9座以下非营业客车,界面可以勾选,默认带出一次)
+             * 0:不投保
+             * 同机动车传值
+             * c
+             */
+            private String amount03SvXNY;
+            /***
+             * 代为送检服务特约条款(
+             * 9座以下非营业客车才可以勾选。)
+             * 0:不投保
+             * 1:投保
+             * 同机动车传值
+             * c
+             */
+            private String amount04SvXNY;
+            /***
+             *  新增加设备损失险设备信息列表
+             *
+             */
+            private List<QuoteRequest.Amount10XNYDeviceListDTO> amount10XNYDeviceList;
+            /***
+             *  投保附加自用充电桩损失保险
+             * 【自用充电桩设备信息列表,最多3个桩】
+             */
+            private List<QuoteRequest.Amount22XNYChargingPostListDTO> amount22XNYChargingPostList;
+
+            /***
+             *  投保附加自用充电桩损失保险
+             * 【自用充电桩设备信息列表,最多3个桩】
+             */
+            private List<QuoteRequest.Amount23XNYChargingPostListDTO> amount23XNYChargingPostList;
+
+        }
+        /***
+         *   商业险保费计算信息
+         */
+        private BizQuoteResultDTO bizQuoteResult;
+
+        /***
+         *  商业险的保费计算信息
+         */
+        @Data
+        public static class BizQuoteResultDTO implements Serializable {
+
+            private static final long serialVersionUID = 3036863448541204517L;
+            /***
+             *  保费总计
+             *  c
+             */
+            private String premiumTotal;
+            /***
+             *  基准保费
+             *  c
+             */
+            private String standardPremium;
+
+            /***
+             *
+             */
+            private String premium01XNY;
+            /***
+             *
+             */
+            private String premium02XNY;
+            /***
+             *
+             */
+            private String premium03XNY;
+            /***
+             *
+             */
+            private String premium04XNY;
+            /***
+             *
+             */
+            private String premium05XNY;
+            /***
+             *
+             */
+            private String premium06XNY;
+            /***
+             *
+             */
+            private String premium07XNY;
+            /***
+             *
+             */
+            private String premium08XNY;
+            /***
+             *
+             */
+            private String premium09XNY;
+            /***
+             *
+             */
+            private String premium10XNY;
+            /***
+             *
+             */
+            private String premium11XNY;
+            /***
+             *
+             */
+            private String premium12XNY;
+            /***
+             *
+             */
+            private String premium13XNY;
+            /***
+             *
+             */
+            private String premium14XNY;
+            /***
+             *
+             */
+            private String premium15XNY;
+            /***
+             *
+             */
+            private String premium16XNY;
+            /***
+             *
+             */
+            private String premium17XNY;
+            /***
+             *
+             */
+            private String premium18XNY;
+            /***
+             *
+             */
+            private String premium19XNY;
+            /***
+             *
+             */
+            private String premium20XNY;
+            /***
+             *
+             */
+            private String premium21XNY;
+            /***
+             *
+             */
+            private String premium22XNY;
+            /***
+             *
+             */
+            private String premium23XNY;
+            /***
+             *
+             */
+            private String premium01SvXNY;
+            /***
+             *
+             */
+            private String premium02SvXNY;
+            /***
+             *
+             */
+            private String premium03SvXNY;
+            /***
+             *
+             */
+            private String premium04SvXNY;
+        }
+
+    }
 }

+ 54 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/TokenResponse.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 15:19
+ *  @Description:  通过客户端id(clientId)和客户端密钥(clientSecret)获取令牌的出参封装
+ */
+@Data
+public class TokenResponse implements Serializable {
+     /***
+      * 未知
+      */
+     private String ret;
+    /***
+     * 返回信息
+     */
+    private String msg;
+
+    /***
+     * 令牌对象
+     */
+    private TokenDTO  data;
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/3/26 15:30
+     *  @Description: token的具体参数
+     */
+    @Data
+    public static class TokenDTO implements Serializable {
+
+        /***
+         * 过期时间
+         */
+        private String expires_in;
+        /***
+         * openid
+         */
+        private String openid;
+        /***
+         * 令牌
+         */
+        private String access_token;
+
+    }
+
+}

+ 27 - 7
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UnAutoProductDetailResponse.java

@@ -2,21 +2,41 @@ package com.ydtech.modules.order.entity.api.pingan.response;
 
 import lombok.Data;
 
-import java.io.Serializable;
 import java.util.List;
-
+/**
+ *  @version 
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:53
+ *  @Description: 获取财意险险种套餐责任信息   4.5  接口出参
+ *
+ *  resultMessage	O	后台接口执行信息
+ * resultCode	M	后台接口执行编码
+ * 0-[成功]
+ * 1-异常
+ */ 
 @Data
-public class UnAutoProductDetailResponse implements Serializable {
+public class UnAutoProductDetailResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = 5920848005412486015L;
-
+    /***
+     * 险种责任信息列表
+     */
     private List<UnAutoProductDetailsDTO> unAutoProductDetailsDTOList;
-
+    /***
+     * 险种责任信息列表
+     */
     @Data
     public static class UnAutoProductDetailsDTO {
-
+        /***
+         * 责任名称
+         * M
+         *
+         */
         private String insuranceCoverage;
-
+        /***
+         * 单份保额
+         * M
+         */
         private String unitInsuredAmount;
 
     }

+ 83 - 19
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UnAutoProductListResponse.java

@@ -4,51 +4,115 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.List;
-
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 9:41
+ *  @Description:   获取财意险险种套餐列表 接口出参
+ *  resultCode	M	后台接口执行编码
+ *  0-[成功]
+ *  1-异常
+ * resultMessage	O	后台接口执行信息
+ *
+ */
 @Data
-public class UnAutoProductListResponse implements Serializable {
+public class UnAutoProductListResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = -5511855293401586119L;
 
-
+    /***
+     *  财意险列表
+     */
     private List<UnAutoListInfoDTO> unAutoListInfo;
-
+    /***
+     * 小微险列表
+     */
     private List<UnAutoListInfoDTO> xiaoWeiListInfo;
-
+    /***
+     *
+     */
     @Data
     public static class UnAutoListInfoDTO implements Serializable {
 
         private static final long serialVersionUID = 9082610442188831877L;
-
+        /***
+         * 财意险名称
+         */
         private String displayName;
-
+        /***
+         *  财意险类型
+         * 02财产险
+         * 03意外险
+         * 10 小微险
+         *
+         *
+         * 小微险类型
+         * 02财产险
+         * 03意外险
+         * 10 小微险
+         */
         private String productType;
-
+        /***
+         * 产品信息
+         */
         private List<ShowPackageInfoListDTO> showPackageInfoList;
 
-
+        /***
+         * 产品信息
+         */
         @Data
         public static class ShowPackageInfoListDTO implements Serializable {
             private static final long serialVersionUID = -8503955203323398303L;
-
+            /***
+             * 产品编码
+             * m
+             */
             private String productCode;
-
+            /***
+             * 折扣
+             * m
+             */
             private String discount;
-
+            /***
+             * 每份保费
+             * m
+             */
             private String insuredAmount;
-
+            /***
+             * 保费说明
+             * 每份保费或每份保费*座位数
+             * m
+             */
             private String insuredAmountTips;
-
+            /***
+             * 最小投保年龄
+             * m
+             */
             private String leastAcceptInsureAge;
-
+            /***
+             * 最大投保年龄
+             * m
+             */
             private String topAcceptInsureAge;
-
+            /***
+             * 套餐编码
+             * m
+             */
             private String packageCode;
-
+            /***
+             * 套餐名称
+             * m
+             */
             private String packageName;
-
+            /***
+             * 版本号
+             * m
+             */
             private String version;
-
+            /***
+             * 最大可购买份数
+             * m
+             */
             private String sellListSize;
         }
 

+ 19 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/UploadFilesResponse.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.entity.api.pingan.response;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 13:44
+ *  @Description: 资料上传  9.3 接口出参
+ *  resultCode	M	后台接口执行编码
+ * 0-[成功]
+ * 1-异常
+ * resultMessage	C	返回信息
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class UploadFilesResponse extends PingAnBaseResponse {
+}

+ 67 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/Base64Convert.java

@@ -0,0 +1,67 @@
+package com.ydtech.modules.order.entity.api.pingan.utils;
+
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.*;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/27 17:22
+ *  @Description:  base64字符串处理工具类
+ */
+public class Base64Convert {
+    /**
+     * 流转换为字符串
+     *
+     * @param in
+     * @return
+     * @throws IOException
+     */
+    public static String ioToBase64(InputStream in) throws IOException {
+        String strBase64 = null;
+        try {
+            // in.available()返回文件的字节长度
+            byte[] bytes = new byte[in.available()];
+            // 将文件中的内容读入到数组中
+            in.read(bytes);
+            strBase64 = new BASE64Encoder().encode(bytes);      //将字节流数组转换为字符串
+        } finally {
+            if (in != null) {
+                in.close();
+            }
+        }
+
+        return strBase64;
+    }
+
+    /**
+     * 流转换为字符串
+     *
+     * @param bytes
+     * @return
+     * @throws IOException
+     */
+    public static String byteToBase64(byte[] bytes)  {
+        String strBase64 = null;
+            // in.available()返回文件的字节长度
+            strBase64 = new BASE64Encoder().encode(bytes);      //将字节流数组转换为字符串
+        return strBase64;
+    }
+
+
+   
+
+    /**
+     * 将base64 转为字节
+     *
+     * @param strBase64
+     * @return
+     * @throws IOException
+     */
+    public static byte[] base64ToByte(String strBase64) throws IOException {
+        // 解码,然后将字节转换为文件
+        byte[] bytes = new BASE64Decoder().decodeBuffer(strBase64);   //将字符串转换为byte数组
+        return bytes;
+    }
+}

Разлика између датотеке није приказан због своје велике величине
+ 133 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/PDFUtil.java


+ 286 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/RSAPINGANUtils.java

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

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/PingAnOrderApiService.java

@@ -18,7 +18,7 @@ public interface PingAnOrderApiService {
      * @param quoteVo
      * @return
      */
-    HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo);
+    HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo) throws Exception;
 
     /**
      * 提交影像

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -37,7 +37,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
 
 
     @Override
-    public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo) {
+    public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo) throws Exception {
         // 协议id获取配置实体
         String agreementId = quoteVo.getAgreementId();
         // 账号信息

+ 23 - 0
src/main/java/com/ydtech/utils/RequestIdUtils.java

@@ -0,0 +1,23 @@
+package com.ydtech.utils;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/3/26 15:51
+ *  @Description:  生成不可重复的请求id   api序号+时间戳+随机数
+ */
+public class RequestIdUtils {
+
+    private static byte[] lock = new byte[0];
+
+    // 位数,默认是8位
+    private final static long w = 100000000;
+
+    public static String createID(String apiCode) {
+        long r = 0;
+        synchronized (lock) {
+            r = (long) ((Math.random() + 1) * w);
+        }
+
+        return apiCode+System.currentTimeMillis() + String.valueOf(r).substring(1);
+    }
+}

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

@@ -381,6 +381,8 @@ pingan:
     selfPublicKey:
     selfPrivateKey:
     pingAnPublicKey:
+    clientId:
+    clientSecret:
 
 xxl:
   job:

Неке датотеке нису приказане због велике количине промена