jinshihui 9 mesi fa
parent
commit
24dbb40fcb
14 ha cambiato i file con 487 aggiunte e 206 eliminazioni
  1. 1 1
      commons/src/main/java/com/jzg/commons/entity/quote/vo/image/InsuranceImageVo.java
  2. 8 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  3. 5 0
      tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml
  4. 34 17
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java
  5. 2 3
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/constant/enums/RequestUrl.java
  6. 135 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerImageUploadRequest.java
  7. 13 124
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerUnderwritingRequest.java
  8. 39 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerImageUploadResponse.java
  9. 149 45
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerUnderwritingResponse.java
  10. 1 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/repository/TaiShanCrawlerOrderRepository.java
  11. 1 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerOrderService.java
  12. 1 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerOrderServiceImpl.java
  13. 2 2
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java
  14. 96 10
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/image/InsuranceImageVo.java

@@ -63,7 +63,7 @@ public class InsuranceImageVo {
          */
          */
         private String imageName;
         private String imageName;
         /**
         /**
-         * 影像base64 影像类型
+         * 影像base64字符串
          */
          */
         private String imageBase64Str;
         private String imageBase64Str;
         /**
         /**

+ 8 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -157,6 +157,12 @@ public class RequestComponent {
         };
         };
     }
     }
 
 
+    /**
+     * 构建URL
+     * @param baseUrl
+     * @param params
+     * @return String
+     */
     public String buildUrl(String baseUrl, MultiValueMap<String, String> params) {
     public String buildUrl(String baseUrl, MultiValueMap<String, String> params) {
         StringBuilder sb = new StringBuilder(baseUrl);
         StringBuilder sb = new StringBuilder(baseUrl);
         if (!params.isEmpty()) {
         if (!params.isEmpty()) {
@@ -195,7 +201,7 @@ public class RequestComponent {
      * @param responseClass 响应返回类
      * @param responseClass 响应返回类
      * @param <Response>    响应
      * @param <Response>    响应
      * @param headers       请求头
      * @param headers       请求头
-     * @return 响应
+     * @return <Response> Response
      */
      */
     public <Response> Response get(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass, HttpHeaders headers) {
     public <Response> Response get(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass, HttpHeaders headers) {
         ResponseEntity<Response> responseEntity = baseGet(url, param, responseClass, headers);
         ResponseEntity<Response> responseEntity = baseGet(url, param, responseClass, headers);
@@ -234,6 +240,7 @@ public class RequestComponent {
      */
      */
     public <Response> ResponseEntity<Response> baseGet(String url, MultiValueMap<String, String> param, Class<Response> responseClass, HttpHeaders headers) {
     public <Response> ResponseEntity<Response> baseGet(String url, MultiValueMap<String, String> param, Class<Response> responseClass, HttpHeaders headers) {
         String requestUrl = buildUrl(url, param);
         String requestUrl = buildUrl(url, param);
+        log.info("请求url参数:{}", requestUrl);
         return webClient.get()
         return webClient.get()
                 .uri(requestUrl)
                 .uri(requestUrl)
                 .headers(setHeaders(headers))
                 .headers(setHeaders(headers))

+ 5 - 0
tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml

@@ -188,3 +188,8 @@ zijin:
 
 
 zhongAn:
 zhongAn:
   id: "975113"
   id: "975113"
+
+logging:
+  level:
+    org.springframework.data.mongodb.core.MongoTemplate: INFO
+    org.mongodb.driver.protocol.command: INFO

+ 34 - 17
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java

@@ -153,25 +153,42 @@ public class TaiShanCrawlerRequestComponent {
     /**
     /**
      * 核保
      * 核保
      *
      *
-     * @param request 核保请求
-     * @param headers 请求头
-     * @return 核保响应
+     * @param taiShanCrawlerUnderwritingRequest
+     * @param headers
+     * @return TaiShanCrawlerUnderwritingResponse
      */
      */
-    /*public TaiShanCrawlerUnderwritingResponse underwriting(TaiShanCrawlerUnderwritingRequest request, HttpHeaders headers) {
-        TaiShanCrawlerBaseRequest baseRequest = buildBaseRequest("UNDERWRITING", request);
+    public TaiShanCrawlerUnderwritingResponse underwriting(TaiShanCrawlerUnderwritingRequest taiShanCrawlerUnderwritingRequest, HttpHeaders headers) {
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+        params.add("orderNo",taiShanCrawlerUnderwritingRequest.getOrderNo());
+        log.info("核保请求参数: {}", params);
+        try {
+            TaiShanCrawlerUnderwritingResponse response = requestComponent.get(
+                    RequestUrl.UNDERWRITING.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()),
+                    params,
+                    "核保",
+                    TaiShanCrawlerUnderwritingResponse.class,
+                    headers
+            );
+            return response;
+        } catch (Exception e) {
+            log.error("核保查询失败", e);
+            throw new RuntimeException("核保查询失败: " + e.getMessage(), e);
+        }
+    }
 
 
-        ResponseEntity<TaiShanCrawlerBaseResponse> response = requestComponent.objectPost(
-                RequestUrl.UNDERWRITING.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()),
-                baseRequest,
-                TaiShanCrawlerBaseResponse.class,
-                headers
-        );
+    /**
+     * 上传影像件
+     *
+     * @param taiShanCrawlerImageUploadRequest
+     * @param headers
+     * @return TaiShanCrawlerImageUploadResponse
+     */
+    public TaiShanCrawlerImageUploadResponse uploadImage(TaiShanCrawlerImageUploadRequest taiShanCrawlerImageUploadRequest, HttpHeaders headers) throws Exception {
+        String jsonString = JSON.toJSONString(taiShanCrawlerImageUploadRequest);
+        log.info("taiShanCrawlerImageUploadRequest请求参数的值:{}", jsonString);
 
 
-        if (response.getBody().isSuccess()) {
-            return (TaiShanCrawlerUnderwritingResponse) response.getBody().getResult();
-        } else {
-            throw new SystemException("核保失败: " + response.getBody().getReturnMessage());
-        }
-    }*/
+        ResponseEntity<TaiShanCrawlerImageUploadResponse> responseEntity = requestComponent.postWithMono(RequestUrl.UPLOAD_IMAGE.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()), jsonString, TaiShanCrawlerImageUploadResponse.class, headers);
+        return responseEntity.getBody();
+    }
 
 
 }
 }

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

@@ -13,11 +13,10 @@ public enum RequestUrl {
     // 报价相关
     // 报价相关
     PRICE("/api_prod/ins/api/proposal/price", "报价"),
     PRICE("/api_prod/ins/api/proposal/price", "报价"),
     SAVE("/api_prod/ins/api/proposal/save", "保存报价"),
     SAVE("/api_prod/ins/api/proposal/save", "保存报价"),
-    UNDERWRITING("/quotation/underwriting", "核保"),
+    UNDERWRITING("/api_prod/ins/api/proposal/under_write", "核保"),
 
 
     // 影像上传
     // 影像上传
-    UPLOAD_IMAGE("/image/upload", "上传影像文件"),
-    UPLOAD_SUBMIT("/image/submit", "影像上传提交"),
+    UPLOAD_IMAGE("/api_prod/ins/api/upload", "上传影像文件"),
 
 
     // 支付相关
     // 支付相关
     PAYMENTCERTINOQUERY("/payment/certiNoQuery", "支付凭证号查询"),
     PAYMENTCERTINOQUERY("/payment/certiNoQuery", "支付凭证号查询"),

+ 135 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerImageUploadRequest.java

@@ -0,0 +1,135 @@
+package com.jzg.quotation.taishan.crawler.entity.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 泰山财险爬虫图片上传请求实体类
+ * @author:
+ * @date:
+ **/
+@Data
+public class TaiShanCrawlerImageUploadRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 商业险投保单号
+     * 商业险投保申请的唯一编号
+     */
+    @JsonProperty("biProposalNo")
+    @JSONField(ordinal = 1)
+    private String biProposalNo;
+
+    /**
+     * 交强险投保单号
+     * 交强险投保申请的唯一编号
+     */
+    @JsonProperty("ciProposalNo")
+    @JSONField(ordinal = 2)
+    private String ciProposalNo;
+
+    /**
+     * 公司代码
+     * 保险公司的标识代码
+     */
+    @JsonProperty("companyCode")
+    @JSONField(ordinal = 3)
+    private String companyCode;
+
+    /**
+     * 图片节点列表
+     * 包含不同类型的图片信息(如身份证图片等)
+     */
+    @JsonProperty("imageNodes")
+    @JSONField(ordinal = 4)
+    private List<ImageNode> imageNodes;
+
+     /**
+      * 操作人编码
+      */
+    @JsonProperty("operatorCode")
+    @JSONField(ordinal = 5)
+    private String operatorCode;
+
+    /**
+     * 操作人姓名
+     */
+     @JsonProperty("operatorName")
+    @JSONField(ordinal = 6)
+    private String operatorName;
+
+    /**
+     * 订单号
+     */
+    @JsonProperty("orderNo")
+    @JSONField(ordinal = 7)
+    private String orderNo;
+
+    /**
+     * 上传标识
+     */
+    @JsonProperty("uploadFlag")
+    @JSONField(ordinal = 8)
+    private String uploadFlag;
+
+    /**
+     * 图片节点内部类
+     * 用于描述一类图片的集合
+     */
+    @Data
+    public static class ImageNode implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 图片列表
+         * 同一类型的图片集合
+         */
+        @JsonProperty("images")
+        @JSONField(ordinal = 1)
+        private List<ImageInfo> images;
+
+        /**
+         * 图片类型
+         * 描述图片的类别(如:身份证、行驶证等)
+         */
+        @JsonProperty("type")
+        @JSONField(ordinal = 2)
+        private String type;
+    }
+
+    /**
+     * 图片信息内部类
+     * 包含图片的文件名和二进制数据
+     */
+    @Data
+    @AllArgsConstructor
+    public static class ImageInfo implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 文件名
+         * 图片文件的名称(如:身份证1.jpg)
+         */
+        @JsonProperty("fileName")
+        @JSONField(ordinal = 1)
+        private String fileName;
+
+        /**
+         * 图片字节数组
+         * 图片的二进制数据,Base64编码或字节数组
+         */
+        @JsonProperty("imageByte")
+        @JSONField(ordinal = 2)
+        private String imageByte;
+    }
+}

+ 13 - 124
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerUnderwritingRequest.java

@@ -1,139 +1,28 @@
 package com.jzg.quotation.taishan.crawler.entity.request;
 package com.jzg.quotation.taishan.crawler.entity.request;
 
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
 
 
 /**
 /**
- * @description: 泰山财险爬虫核保请求实体
+ * @description: 泰山财险爬虫核保请求实体
  * @author:
  * @author:
  * @date:
  * @date:
  **/
  **/
 @Data
 @Data
-public class TaiShanCrawlerUnderwritingRequest {
-
-    /**
-     * 报价单号
-     */
-    private String quoteNo;
+@AllArgsConstructor
+@NoArgsConstructor
+public class TaiShanCrawlerUnderwritingRequest implements Serializable {
 
 
-    /**
-     * 确认的报价信息
-     */
-    private ConfirmedQuotationInfo confirmedQuotation;
 
 
-    /**
-     * 投保人信息确认
-     */
-    private ApplicantConfirmation applicantInfo;
+    @Serial
+    private static final long serialVersionUID = -2482886874366346273L;
 
 
     /**
     /**
-     * 被保险人信息确认
+     * 订单号
      */
      */
-    private InsuredConfirmation insuredInfo;
-
-    /**
-     * 保单送达信息
-     */
-    private DeliveryInfo deliveryInfo;
-
-    @Data
-    public static class ConfirmedQuotationInfo {
-        /**
-         * 交强险保费
-         */
-        private Double compulsoryPremium;
-
-        /**
-         * 商业险保费
-         */
-        private Double commercialPremium;
-
-        /**
-         * 总保费
-         */
-        private Double totalPremium;
-
-        /**
-         * 保险起期
-         */
-        private String startDate;
-
-        /**
-         * 保险止期
-         */
-        private String endDate;
-    }
-
-    @Data
-    public static class ApplicantConfirmation {
-        /**
-         * 姓名
-         */
-        private String name;
-
-        /**
-         * 证件类型
-         */
-        private String certType;
-
-        /**
-         * 证件号码
-         */
-        private String certNo;
-
-        /**
-         * 手机号
-         */
-        private String mobile;
-
-        /**
-         * 邮箱
-         */
-        private String email;
-    }
-
-    @Data
-    public static class InsuredConfirmation {
-        /**
-         * 姓名
-         */
-        private String name;
-
-        /**
-         * 证件类型
-         */
-        private String certType;
-
-        /**
-         * 证件号码
-         */
-        private String certNo;
-
-        /**
-         * 与投保人关系
-         */
-        private String relation;
-    }
-
-    @Data
-    public static class DeliveryInfo {
-        /**
-         * 保单送达方式
-         */
-        private String deliveryMethod;
-
-        /**
-         * 送达地址
-         */
-        private String deliveryAddress;
-
-        /**
-         * 收件人
-         */
-        private String recipient;
-
-        /**
-         * 收件人电话
-         */
-        private String recipientPhone;
-    }
+    private String orderNo;
 }
 }

+ 39 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerImageUploadResponse.java

@@ -0,0 +1,39 @@
+package com.jzg.quotation.taishan.crawler.entity.response;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 泰山财险爬虫图片上传响应实体类
+ * @author:
+ * @date:
+ **/
+@Data
+public class TaiShanCrawlerImageUploadResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2599665893723161725L;
+
+    /**
+     * 状态码
+     */
+    @JsonProperty("code")
+    @JSONField(ordinal = 1)
+    private String code;
+
+    /**
+     * 状态描述
+     */
+    @JsonProperty("message")
+    @JSONField(ordinal = 2)
+    private String message;
+
+    /**
+     * 结果
+     */
+    @JsonProperty("result")
+    @JSONField(ordinal = 3)
+    private String result;
+}

+ 149 - 45
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerUnderwritingResponse.java

@@ -1,72 +1,176 @@
 package com.jzg.quotation.taishan.crawler.entity.response;
 package com.jzg.quotation.taishan.crawler.entity.response;
-
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import com.fasterxml.jackson.annotation.Nulls;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import lombok.Data;
 import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import java.io.IOException;
 
 
 /**
 /**
- * @description: 泰山财险爬虫核保响应实体
- * @author:
- * @date:
+ * @description: 泰山财险爬虫核保响应实体
+ * @author: Claude
+ * @date: 2025-11-27
  **/
  **/
+
+/**
+ * 自定义Result反序列化器,处理空字符串情况
+ */
+class ResultDeserializer extends JsonDeserializer<TaiShanCrawlerUnderwritingResponse.Result> {
+
+    @Override
+    public TaiShanCrawlerUnderwritingResponse.Result deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonMappingException {
+        JsonNode node = p.getCodec().readTree(p);
+        // 如果是空字符串或null,返回空的Result对象
+        if (node.isTextual() && (node.asText().isEmpty() || "null".equals(node.asText()))) {
+            return new TaiShanCrawlerUnderwritingResponse.Result();
+        }
+
+        // 如果是null节点,返回空的Result对象
+        if (node.isNull()) {
+            return new TaiShanCrawlerUnderwritingResponse.Result();
+        }
+
+        // 如果是对象,正常反序列化
+        if (node.isObject()) {
+            TaiShanCrawlerUnderwritingResponse.Result result = new TaiShanCrawlerUnderwritingResponse.Result();
+            JsonNode orderNo = node.get("orderNo");
+            if (orderNo != null && !orderNo.isNull()) {
+                result.setOrderNo(orderNo.asText());
+            }
+            JsonNode jqAppNo = node.get("jqAppNo");
+            if (jqAppNo != null && !jqAppNo.isNull()) {
+                result.setJqAppNo(jqAppNo.asText());
+            }
+            JsonNode syAppNo = node.get("syAppNo");
+            if (syAppNo != null && !syAppNo.isNull()) {
+                result.setSyAppNo(syAppNo.asText());
+            }
+            JsonNode udrMrk = node.get("udrMrk");
+            if (udrMrk != null && !udrMrk.isNull()) {
+                result.setUdrMrk(udrMrk.asText());
+            }
+            JsonNode retMsg = node.get("retMsg");
+            if (retMsg != null && !retMsg.isNull()) {
+                result.setRetMsg(retMsg.asText());
+            }
+            JsonNode jqUniqueNo = node.get("jqUniqueNo");
+            if (jqUniqueNo != null && !jqUniqueNo.isNull()) {
+                result.setJqUniqueNo(jqUniqueNo.asText());
+            }
+            JsonNode syUniqueNo = node.get("syUniqueNo");
+            if (syUniqueNo != null && !syUniqueNo.isNull()) {
+                result.setSyUniqueNo(syUniqueNo.asText());
+            }
+            JsonNode unCarRes = node.get("unCarRes");
+            if (unCarRes != null && !unCarRes.isNull()) {
+                result.setUnCarRes(unCarRes.asText());
+            }
+            return result;
+        }
+
+        // 其他情况返回空的Result对象
+        return new TaiShanCrawlerUnderwritingResponse.Result();
+    }
+}
 @Data
 @Data
-public class TaiShanCrawlerUnderwritingResponse {
+public class TaiShanCrawlerUnderwritingResponse implements Serializable {
 
 
-    /**
-     * 核保结果
-     */
-    private Boolean success;
+    @Serial
+    private static final long serialVersionUID = 2013086428669485968L;
 
 
     /**
     /**
-     * 保单号
+     * 响应代码
      */
      */
-    private String policyNo;
+    @JsonProperty("code")
+    @JSONField(name = "code", ordinal = 1)
+    private String code;
 
 
     /**
     /**
-     * 交强险保单号
+     * 响应消息
      */
      */
-    private String compulsoryPolicyNo;
+    @JsonProperty("message")
+    @JSONField(name = "message", ordinal = 2)
+    private String message;
 
 
     /**
     /**
-     * 商业险保单号
+     * 响应结果数据
      */
      */
-    private String commercialPolicyNo;
+    @JsonDeserialize(using = ResultDeserializer.class)
+    @JsonProperty("result")
+    @JSONField(name = "result", ordinal = 3)
+    private Result result;
 
 
     /**
     /**
-     * 核保状态
+     * 响应结果内部类
      */
      */
-    private String underwritingStatus;
+    @Data
+    public static class Result implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 1L;
 
 
-    /**
-     * 核保时间
-     */
-    private String underwritingTime;
+        /**
+         * 订单号
+         */
+        @JsonProperty("orderNo")
+        @JSONField(name = "orderNo", ordinal = 1)
+        private String orderNo;
 
 
-    /**
-     * 生效时间
-     */
-    private String effectiveTime;
+        /**
+         * 交强险投保单号
+         */
+        @JsonProperty("jqAppNo")
+        @JSONField(name = "jqAppNo", ordinal = 2)
+        private String jqAppNo;
 
 
-    /**
-     * 总保费
-     */
-    private Double totalPremium;
+        /**
+         * 商业险投保单号
+         */
+        @JsonProperty("syAppNo")
+        @JSONField(name = "syAppNo", ordinal = 3)
+        private String syAppNo;
 
 
-    /**
-     * 支付链接
-     */
-    private String paymentUrl;
+        /**
+         * 核保标记(0-需要核保处理)
+         */
+        @JsonProperty("udrMrk")
+        @JSONField(name = "udrMrk", ordinal = 4)
+        private String udrMrk;
 
 
-    /**
-     * 核保消息
-     */
-    private String message;
+        /**
+         * 核保返回信息
+         */
+        @JsonProperty("retMsg")
+        @JSONField(name = "retMsg", ordinal = 5)
+        private String retMsg;
 
 
-    /**
-     * 错误代码(如果核保失败)
-     */
-    private String errorCode;
+        /**
+         * 交强险唯一号
+         */
+        @JsonProperty("jqUniqueNo")
+        @JSONField(name = "jqUniqueNo", ordinal = 6)
+        private String jqUniqueNo;
+
+        /**
+         * 商业险唯一号
+         */
+        @JsonProperty("syUniqueNo")
+        @JSONField(name = "syUniqueNo", ordinal = 7)
+        private String syUniqueNo;
+
+        /**
+         * 未承保车辆结果
+         */
+        @JsonProperty("unCarRes")
+        @JSONField(name = "unCarRes", ordinal = 8)
+        private String unCarRes;
+    }
 
 
-    /**
-     * 错误信息(如果核保失败)
-     */
-    private String errorMessage;
 }
 }

+ 1 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/repository/TaiShanCrawlerOrderRepository.java

@@ -11,7 +11,7 @@ import org.springframework.data.mongodb.repository.MongoRepository;
 public interface TaiShanCrawlerOrderRepository extends MongoRepository<TaiShanCrawlerOrder, String> {
 public interface TaiShanCrawlerOrderRepository extends MongoRepository<TaiShanCrawlerOrder, String> {
 
 
     /**
     /**
-     *
+     * 根据订单号查询订单信息
      * @param ordersNo
      * @param ordersNo
      * @return TaiShanCrawlerOrder
      * @return TaiShanCrawlerOrder
      */
      */

+ 1 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerOrderService.java

@@ -24,5 +24,5 @@ public interface TaiShanCrawlerOrderService {
      * @param ordersNo
      * @param ordersNo
      * @return TaiShanCrawlerOrder
      * @return TaiShanCrawlerOrder
      */
      */
-    TaiShanCrawlerOrder getById(String ordersNo);
+    TaiShanCrawlerOrder getByOrdersNo(String ordersNo);
 }
 }

+ 1 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerOrderServiceImpl.java

@@ -49,7 +49,7 @@ public class TaiShanCrawlerOrderServiceImpl implements TaiShanCrawlerOrderServic
     }
     }
 
 
     @Override
     @Override
-    public TaiShanCrawlerOrder getById(String ordersNo) {
+    public TaiShanCrawlerOrder getByOrdersNo(String ordersNo) {
         return taiShanCrawlerOrderRepository.findByOrdersNo(ordersNo);
         return taiShanCrawlerOrderRepository.findByOrdersNo(ordersNo);
     }
     }
 }
 }

+ 2 - 2
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java

@@ -37,7 +37,7 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
     }
     }
 
 
     /**
     /**
-     * 获取请求头
+     * 获取请求头(只需要修改token,其他值不用修改)
      * @param username 用户名
      * @param username 用户名
      * @param password 密码
      * @param password 密码
      * @return HttpHeaders
      * @return HttpHeaders
@@ -45,7 +45,7 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
     @Override
     @Override
     public HttpHeaders getHeaders(String username, String password) {
     public HttpHeaders getHeaders(String username, String password) {
         HttpHeaders httpHeaders = new HttpHeaders();
         HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.set("Authorization", " Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI1MzAiLCJhdXRoIjoiUk9MRV9FTVBUWV9DQVJEX05PLFJPTEVfT1BFUkFUT1IiLCJwYXNzd29yZF9leHBpcmUiOi01OSwiZXhwIjoxNzY0Mjk4OTk4fQ.XFfqHp1hLMO8fCSmjiVmNjbQMXtS-yD7f9yUrJu1t9yHFgNYzzGPPRVzAPyRNX3IqR2O-HfDBal0UH4HX8sYyQ");
+        httpHeaders.set("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI1MzAiLCJhdXRoIjoiUk9MRV9FTVBUWV9DQVJEX05PLFJPTEVfT1BFUkFUT1IiLCJwYXNzd29yZF9leHBpcmUiOi04NywiZXhwIjoxNzY2NzI5MTg1fQ.80zkJmVQoc1kvjWiGMzbc5kaWY56FpVN-NAW3qCldeEGX61wPLmh_9sgyl7Oy_fFnmghC5szZrZEuN_byucCFw");
         httpHeaders.set("Login-Complete", " 11030001");
         httpHeaders.set("Login-Complete", " 11030001");
         httpHeaders.set("Source","0");
         httpHeaders.set("Source","0");
         return httpHeaders;
         return httpHeaders;

+ 96 - 10
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.taishan.crawler.component.TaiShanBuildingAttributionInformation;
 import com.jzg.quotation.taishan.crawler.component.TaiShanBuildingAttributionInformation;
@@ -17,10 +18,7 @@ import com.jzg.quotation.taishan.crawler.component.TaiShanCrawlerRequestComponen
 import com.jzg.quotation.taishan.crawler.constant.enums.ResponseCode;
 import com.jzg.quotation.taishan.crawler.constant.enums.ResponseCode;
 import com.jzg.quotation.taishan.crawler.entity.TaiShanCrawlerConfigureParameters;
 import com.jzg.quotation.taishan.crawler.entity.TaiShanCrawlerConfigureParameters;
 import com.jzg.quotation.taishan.crawler.entity.po.TaiShanCrawlerOrder;
 import com.jzg.quotation.taishan.crawler.entity.po.TaiShanCrawlerOrder;
-import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerCarRequest;
-import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerGetActualValueRequest;
-import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerQuotationRequest;
-import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerQuotationSaveRequest;
+import com.jzg.quotation.taishan.crawler.entity.request.*;
 import com.jzg.quotation.taishan.crawler.entity.response.*;
 import com.jzg.quotation.taishan.crawler.entity.response.*;
 import com.jzg.quotation.taishan.crawler.service.TaiShanCrawlerOrderService;
 import com.jzg.quotation.taishan.crawler.service.TaiShanCrawlerOrderService;
 import com.jzg.quotation.taishan.crawler.service.TaiShanCrawlerQuoteProcessService;
 import com.jzg.quotation.taishan.crawler.service.TaiShanCrawlerQuoteProcessService;
@@ -37,6 +35,7 @@ import org.springframework.util.StringUtils;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -132,7 +131,6 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
             String currentValue = taiShanCrawlerGetActualValueResponse.getResult().getActualValue();
             String currentValue = taiShanCrawlerGetActualValueResponse.getResult().getActualValue();
             log.info("车辆当前价值:{}", currentValue);
             log.info("车辆当前价值:{}", currentValue);
 
 
-
             // 报价接口
             // 报价接口
             TaiShanCrawlerQuotationRequest taiShanCrawlerQuotationRequest = buildQuotationRequest(quoteVo);
             TaiShanCrawlerQuotationRequest taiShanCrawlerQuotationRequest = buildQuotationRequest(quoteVo);
             TaiShanCrawlerQuotationResponse taiShanCrawlerQuotationResponse = taiShanCrawlerRequestComponent.quotation(taiShanCrawlerQuotationRequest, headers);
             TaiShanCrawlerQuotationResponse taiShanCrawlerQuotationResponse = taiShanCrawlerRequestComponent.quotation(taiShanCrawlerQuotationRequest, headers);
@@ -161,20 +159,108 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         }
         }
     }
     }
 
 
+    /**
+     * 核保
+     *
+     * @param underwritingVo
+     * @return UnderwritingResultsVo
+     */
     @Override
     @Override
-    public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
-        return null;
+    public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
+        try {
+            AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
+            HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+            // 获取订单信息
+            TaiShanCrawlerOrder taiShanCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(underwritingVo.getOrder().getOrdersNo());
+
+            // 核保
+            TaiShanCrawlerUnderwritingRequest taiShanCrawlerUnderwritingRequest = new TaiShanCrawlerUnderwritingRequest(taiShanCrawlerOrder.getOrderNo());
+            TaiShanCrawlerUnderwritingResponse taiShanCrawlerUnderwritingResponse = taiShanCrawlerRequestComponent.underwriting(taiShanCrawlerUnderwritingRequest, headers);
+            log.info("taiShanCrawlerUnderwritingResponse参数的值:{}", JSON.toJSONString(taiShanCrawlerUnderwritingResponse));
+
+            UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+            //核保成功
+            if ("200".equals(taiShanCrawlerUnderwritingResponse.getCode())) {
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+                underwritingResultsVo.setJqApplyNo(taiShanCrawlerUnderwritingResponse.getResult().getJqAppNo());
+                underwritingResultsVo.setSyApplyNo(taiShanCrawlerUnderwritingResponse.getResult().getSyAppNo());
+            } else {//核保失败
+                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                StringBuilder sb = new StringBuilder();
+                if (null != taiShanCrawlerUnderwritingResponse.getMessage()) {
+                    sb.append(String.format("错误信息:%s", taiShanCrawlerUnderwritingResponse.getMessage()));
+                }
+                underwritingResultsVo.setUnderwritingResult(sb.toString());
+            }
+            return underwritingResultsVo;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 上传影像件
+     * @param insuranceUploadImageVo
+     */
+    @Override
+    public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        try {
+            //获取归属信息
+            AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder().getAttributionInformationVo();
+            HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+            TaiShanCrawlerOrder taiShanCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(insuranceUploadImageVo.getOrder().getOrdersNo());
+
+            // 上传影像文件请求参数
+            TaiShanCrawlerImageUploadRequest taiShanCrawlerImageUploadRequest = new TaiShanCrawlerImageUploadRequest();
+            taiShanCrawlerImageUploadRequest.setBiProposalNo(taiShanCrawlerOrder.getBiPolicyNo());
+            taiShanCrawlerImageUploadRequest.setCiProposalNo(taiShanCrawlerOrder.getCiPolicyNo());
+            taiShanCrawlerImageUploadRequest.setCompanyCode("11");
+
+            List<TaiShanCrawlerImageUploadRequest.ImageNode> imageNodes = new LinkedList<>();
+            for (InsuranceImageVo imageVo : insuranceUploadImageVo.getImageVoList()) {
+                TaiShanCrawlerImageUploadRequest.ImageNode imageNode = new TaiShanCrawlerImageUploadRequest.ImageNode();
+                imageNode.setType(imageVo.getImageType());
+
+                List<TaiShanCrawlerImageUploadRequest.ImageInfo> images = new ArrayList<>();
+                for (InsuranceImageVo.ImageDTO imageDTO : imageVo.getImageBase64List()) {
+                    images.add(new TaiShanCrawlerImageUploadRequest.ImageInfo(imageDTO.getImageId(), imageDTO.getImageBase64Str()));
+                }
+                imageNode.setImages(images);
+                imageNodes.add(imageNode);
+            }
+            taiShanCrawlerImageUploadRequest.setImageNodes(imageNodes);
+
+            taiShanCrawlerImageUploadRequest.setOperatorCode("582530");
+            taiShanCrawlerImageUploadRequest.setOperatorName("罗辑");
+            taiShanCrawlerImageUploadRequest.setOrderNo(taiShanCrawlerOrder.getOrderNo());
+            taiShanCrawlerImageUploadRequest.setUploadFlag("D");
+
+            TaiShanCrawlerImageUploadResponse taiShanCrawlerImageUploadResponse = taiShanCrawlerRequestComponent.uploadImage(taiShanCrawlerImageUploadRequest, headers);
+            log.info("taiShanCrawlerImageUploadResponse对象的值:{}", JSON.toJSONString(taiShanCrawlerImageUploadResponse));
+            if ("200".equals(taiShanCrawlerImageUploadResponse.getCode())) {
+                log.info("影像上传成功");
+            } else {
+                log.error("影像上传失败,错误码:{},错误信息:{}", taiShanCrawlerImageUploadResponse.getCode(), taiShanCrawlerImageUploadResponse.getMessage());
+                throw new RuntimeException("影像上传失败,错误码:" + taiShanCrawlerImageUploadResponse.getCode() + ",错误信息:" + taiShanCrawlerImageUploadResponse.getMessage());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
     }
     }
 
 
+    /**
+     * 获取支付链接
+     * @param paymentLinkVo
+     * @return PaymentLinkResultsVo
+     */
     @Override
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws Exception {
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws Exception {
         return null;
         return null;
     }
     }
 
 
-    @Override
-    public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
 
 
-    }
 
 
     @Override
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {