Explorar o código

众安通融影像上传接口

Qchen hai 1 mes
pai
achega
c843c9ffab

+ 7 - 13
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java

@@ -4,30 +4,24 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.zhongan.crawler.client.LoginResult;
-import com.jzg.quotation.zhongan.crawler.entity.request.ZhongAnCrawlerQueryInitInfoRequest;
 import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerPaymentResponse;
 import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerUploadInitDateResponse;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import okhttp3.*;
-import org.apache.hc.core5.net.URIBuilder;
-import org.apache.http.Header;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.poi.ss.formula.functions.T;
+import okhttp3.Headers;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
 import org.redisson.api.RBucket;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
-import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Component;
 
-import java.net.URI;
+
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.List;

+ 6 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java

@@ -180,6 +180,12 @@ public class ZhongAnCrawlerRequestComponent {
         return requestComponent.formDataZhongAn(RequestUrl.UPLOAD_IMAGE.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), imageRequest, ZhongAnCrawlerUploadImageResponse.class, headers,"上传影像").getBody();
     }
 
+    public ZhongAnCrawlerAccommodationUploadResponse accommodationUpload(ZhongAnCrawlerAccommodationUploadRequest accommodationUploadRequest, HttpHeaders headers) {
+        InsuranceLog.infoLog(InsuranceEnum.ZAPA.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "众安爬虫上传通融影像接口",RequestUrl.ACCOMMODATION_UPLOAD.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), JSON.toJSONString(accommodationUploadRequest));
+        return requestComponent.formDataZhongAn(RequestUrl.ACCOMMODATION_UPLOAD.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), accommodationUploadRequest, ZhongAnCrawlerAccommodationUploadResponse.class, headers,"上传通融影像").getBody();
+    }
+
     /**
      * 获取支付链接
      *

+ 1 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java

@@ -41,6 +41,7 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     UPLOAD_INIT_DATA("/open/distribution/distribute_controller/get_upload_init_data.json", "上传初始化数据"),
 
     UPLOAD_IMAGE("/open/distribution/distribute_controller/upload_user_confirm_data.json", "正常流程上传影像"),
+    ACCOMMODATION_UPLOAD("/open/bmw/n/accommodation_controller/accommodation_upload_file.json", "通融申请上传影像"),
 
     MARK_COMPLETED("/open/distribution/distribute_controller/mark_upload_completed.json", "核保"),
     /**

+ 50 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerAccommodationUploadRequest.java

@@ -0,0 +1,50 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.core.io.ByteArrayResource;
+
+/**
+ * @author quchen
+ * @date 2026/8/7 9:07
+ */
+@Data
+@NoArgsConstructor
+public class ZhongAnCrawlerAccommodationUploadRequest {
+    public ZhongAnCrawlerAccommodationUploadRequest(String imageType, InsuranceImageVo.ImageDTO imageDTO, String orderNo, ZhongAnCrawlerConfigureParameters parameters) {
+        this.imageType = imageType;
+        this.fileItem = new ByteArrayResource(imageDTO.getImageByte()) {
+            @Override
+            public String getFilename() {
+                return imageDTO.getImageName(); // 必须重写此方法
+            }
+        };;
+        this.orderNo = orderNo;
+        this.page = ZhongAnRequestConstant.TONG_RONG_QUERY_PAGE;
+        this.flag = parameters.getFlag();
+        this.i = ZhongAnRequestConstant.I_PARAM;
+        this.flowId = parameters.getFlowId();
+    }
+    @JsonProperty("imageType")
+    private String imageType;
+
+    @JsonProperty("fileItem")
+    @JSONField(serialize = false)
+    private ByteArrayResource fileItem;
+    @JsonProperty("orderNo")
+    private String orderNo;
+    @JsonProperty("page")
+    private String page;
+    @JsonProperty("flag")
+    private String flag;
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("i")
+    private String i;
+}

+ 52 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerAccommodationUploadResponse.java

@@ -0,0 +1,52 @@
+package com.jzg.quotation.zhongan.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author quchen
+ * @date 2026/8/7 10:35
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ZhongAnCrawlerAccommodationUploadResponse extends ZhongAnCrawlerBaseResponse {
+    @JsonProperty("value")
+    private ValueDTO value;
+    @JsonProperty("additionalInfo")
+    private AdditionalInfoDTO additionalInfo;
+
+    @Data
+    public static class ValueDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 8428987717523097930L;
+        @JsonProperty("datas")
+        private DataDTO datas;
+
+        @Data
+        public static class DataDTO implements Serializable {
+            @Serial
+            private static final long serialVersionUID = -6591203866369844410L;
+            @JsonProperty("attachment")
+            private String attachment;
+            @JsonProperty("encFileImageName")
+            private String encFileImageName;
+            @JsonProperty("fileName")
+            private String fileName;
+            @JsonProperty("verifyBodySuccess")
+            private Boolean verifyBodySuccess;
+            @JsonProperty("verifyTrueSuccess")
+            private Boolean verifyTrueSuccess;
+        }
+    }
+
+    @Data
+    public static class AdditionalInfoDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -8951754307417647863L;
+    }
+}

+ 47 - 24
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

@@ -421,33 +421,48 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
             parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(parameters.getUsername()));
         }
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
+        ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(), parameters);
+        ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest, headers);
+        boolean queryAccommodation = queryAccommodationResponse.getSuccess();
         for (InsuranceImageVo insuranceImageVo : insuranceUploadImageVo.getImageVoList()) {
-            //C01行驶证正面,C02车主身份证正面,D01行驶证反面
-            if (insuranceImageVo.getImageCode().equals("C01")) {
-                String imageType = "6";
-                InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
-
-            } else if (insuranceImageVo.getImageCode().equals("C02")) {
-                String imageType = "4";
-                InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
-
-            } else if (insuranceImageVo.getImageCode().equals("D01")) {
-                String imageType = "7";
-                InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
-
-            } else if (insuranceImageVo.getImageCode().equals("D02")) {
-                String imageType = "5";
-                InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
-            } else {
-                String imageType = "99";
-                List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
-                for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
+            //C01行驶证正面,C02车主身份证正面,D01行驶证反面 D02 车主身份证反面
+            switch (insuranceImageVo.getImageCode()) {
+                case "C01" -> {
+                    String imageType = "6";
+                    InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
+                    extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                }
+                case "C02" -> {
+                    String imageType = "4";
+                    InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
                     extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
                 }
+                case "D01" -> {
+                    String imageType = "7";
+                    InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
+                    if (!queryAccommodation) {
+                        extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    } else {
+                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    }
+                }
+                case "D02" -> {
+                    String imageType = "5";
+                    InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
+                    if (!queryAccommodation) {
+                        extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    } else {
+                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    }
+
+                }
+                default -> {
+                    String imageType = "99";
+                    List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
+                    for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
+                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    }
+                }
             }
 
         }
@@ -479,6 +494,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         }
     }
 
+    private void accommodationUpload (ZhongAnCrawlerConfigureParameters parameters, HttpHeaders headers, ZhongAnCrawlerOrder zhongAnCrawlerOrder, String imageType, InsuranceImageVo.ImageDTO imageDTO) {
+        ZhongAnCrawlerAccommodationUploadRequest accommodationUploadRequest = new ZhongAnCrawlerAccommodationUploadRequest(imageType, imageDTO, zhongAnCrawlerOrder.getOrderNo(), parameters);
+        ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = zhongAnCrawlerRequestComponent.accommodationUpload(accommodationUploadRequest, headers);
+        if (accommodationUploadResponse.getSuccess()) {
+            log.info("影像" + imageType + ":上传成功");
+        }
+    }
+
     public byte[] convert(String filePath) throws IOException {
         File file = new File(filePath);
         byte[] binaryData = new byte[(int) file.length()];