helixiao hace 1 año
padre
commit
1b98a0d5e1
Se han modificado 13 ficheros con 443 adiciones y 150 borrados
  1. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PlatformClient.java
  2. 41 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java
  3. 8 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  4. 2 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java
  5. 4 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java
  6. 45 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerMarkRequest.java
  7. 7 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerPaymentRequest.java
  8. 10 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerUploadImageRequest.java
  9. 45 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerUploadInitDateRequest.java
  10. 35 94
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPaymentResponse.java
  11. 7 4
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerUploadImageResponse.java
  12. 95 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerUploadInitDateResponse.java
  13. 143 47
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PlatformClient.java

@@ -95,6 +95,6 @@ public interface PlatformClient {
      */
     @GetMapping("/file/getUploadFile")
     @Operation(summary = "根据Id获取上传信息", description = "根据Id获取上传信息")
-    public SysUploadFiles getUploadFile(String id);
+    public SysUploadFiles getUploadFile(@RequestParam String id);
 
 }

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

@@ -1,7 +1,12 @@
 package com.jzg.quotation.zhongan.crawler.component;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerUploadInitDateResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.redisson.api.RBucket;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Component;
@@ -27,6 +32,15 @@ public class ZhongAnCrawlerCacheComponent {
      */
     public static final String FLOWID = "flowId:";
 
+    public static final String ORDER_NO = "orderNo:";
+
+    public static final String POLICY_ID = "policyId:";
+
+    public static final String INITDATE = "initdata:";
+
+    public static final String IDENTIFY_NUMBER = "identifyNumber:";
+
+    public static final String QUOTE_ID = "quoteId:";
 
 
     public void cacheCookie(String zaLoginCookieKey, String flowId, String userName) {
@@ -47,6 +61,33 @@ public class ZhongAnCrawlerCacheComponent {
         return (String) redissonClient.getMap(ZHONGAN_COOKIE + username).get(FLOWID);
     }
 
+    /**
+     * 缓存数据
+     *
+     * @param cacheInfo
+     */
+    public void setCache(String cacheInfo, String str) {
+        String response = JSONObject.toJSONString(cacheInfo);
+        RBucket<String> bucket = redissonClient.getBucket(str);
+        bucket.set(response, Duration.ofHours(3L));
+    }
+
+
+    public String getCache(String sign) {
+        RBucket<String> bucket1 = redissonClient.getBucket(sign);
+        return bucket1.get();
+    }
+
+    public void setCache(Object cacheInfo, String str) {
+        String response = JSONObject.toJSONString(cacheInfo);
+        RBucket<String> bucket = redissonClient.getBucket(str);
+        bucket.set(response, Duration.ofHours(3L));
+    }
+
+    public ZhongAnCrawlerUploadInitDateResponse.ValueDTO.DatasDTO getInitData(String ordersNo) {
+        RBucket<String> bucket1 = redissonClient.getBucket(ordersNo);
+        return JSON.parseObject(bucket1.get(), ZhongAnCrawlerUploadInitDateResponse.ValueDTO.DatasDTO.class);
+    }
 
 
 }

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

@@ -223,4 +223,12 @@ public class ZhongAnCrawlerRequestComponent {
     public ZhongAnCrawlerQueryDetailQueryResponse detailQuery(ZhongAnCrawlerQueryDetailQueryRequest detailQueryRequest, HttpHeaders headers) {
         return requestComponent.formData(RequestUrl.QUERY_DETAIL.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), detailQueryRequest,ZhongAnCrawlerQueryDetailQueryResponse.class, headers).getBody();
     }
+
+    public ZhongAnCrawlerUploadInitDateResponse uploadInitDate(ZhongAnCrawlerUploadInitDateRequest uploadInitDateRequest, HttpHeaders headers) {
+        return requestComponent.formData(RequestUrl.UPLOAD_INIT_DATA.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), uploadInitDateRequest,ZhongAnCrawlerUploadInitDateResponse.class, headers).getBody();
+    }
+
+    public String markCompleted(ZhongAnCrawlerMarkRequest markRequest, HttpHeaders headers) {
+        return requestComponent.formDataString(RequestUrl.LICENCE_SEITCH.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), markRequest, headers);
+    }
 }

+ 2 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java

@@ -25,6 +25,8 @@ public class ZhongAnRequestConstant {
      */
     public static final String QUOTE_PAGE = "/insureProgram";
 
+    public static final String INIT_DATA = "/uploadFiles";
+
     /**
      * 订单相关page参数
      */

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

@@ -38,7 +38,11 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     CONFIRM_ORDER("/open/bmw/policy_controller/confirm_order.json", "确认订单"),
     JYX_UNDERWRITING("/open/jyx/jyx_insure_controller/jyx_underwriting.json", "非车险提交核保"),
 
+    UPLOAD_INIT_DATA("/open/distribution/distribute_controller/get_upload_init_data.json", "上传初始化数据"),
+
     UPLOAD_IMAGE("/open/distribution/distribute_controller/upload_user_confirm_data.json", "正常流程上传影像"),
+
+    MARK_COMPLETED("/open/distribution/distribute_controller/mark_upload_completed.json", "核保"),
     /**
      * 通融申请的影像上传还需补充
      */

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

@@ -0,0 +1,45 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerConfirmOrderResponse;
+import lombok.Data;
+
+import java.io.Serial;
+
+@Data
+public class ZhongAnCrawlerMarkRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("page")
+    private String page;
+
+    @JsonProperty("flag")
+    private String flag;
+
+    @JsonProperty("i")
+    private String i;
+
+    @JsonProperty("orderNo")
+    private String orderNo;
+
+    @JsonProperty("location")
+    private String location;
+
+    public ZhongAnCrawlerMarkRequest(ZhongAnCrawlerConfigureParameters parameters,String ordersNo) {
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.INIT_DATA);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        this.orderNo = ordersNo;
+        this.location = "";
+
+    }
+
+}

+ 7 - 2
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerPaymentRequest.java

@@ -1,5 +1,8 @@
 package com.jzg.quotation.zhongan.crawler.entity.request;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
 import lombok.Data;
 
 import java.io.Serial;
@@ -16,10 +19,12 @@ public class ZhongAnCrawlerPaymentRequest implements Serializable {
     @Serial
     private static final long serialVersionUID = -2686784809685360418L;
 
-    public ZhongAnCrawlerPaymentRequest(String policyId) {
+    public ZhongAnCrawlerPaymentRequest(String policyId, String checkCode) {
         this.policyId = policyId;
+        this.checkCode = checkCode;
     }
-
+    @JsonProperty("policyId")
     private String policyId;
+    @JsonProperty("checkCode")
     private String checkCode;//可为空
 }

+ 10 - 2
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerUploadImageRequest.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zhongan.crawler.entity.request;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
 import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
 import lombok.Data;
@@ -18,7 +19,7 @@ public class ZhongAnCrawlerUploadImageRequest implements Serializable {
     @Serial
     private static final long serialVersionUID = 6616361166719063753L;
 
-    public ZhongAnCrawlerUploadImageRequest(String imageType, File fileItem, String orderNo, String policyId, ZhongAnCrawlerConfigureParameters parameters) {
+    public ZhongAnCrawlerUploadImageRequest(String imageType, byte[] fileItem, String orderNo, String policyId, ZhongAnCrawlerConfigureParameters parameters) {
         this.imageType = imageType;
         this.fileItem = fileItem;
         this.orderNo = orderNo;
@@ -36,12 +37,19 @@ public class ZhongAnCrawlerUploadImageRequest implements Serializable {
      * 行驶证副本			    7
      * 其他                  99
      */
+    @JsonProperty("imageType")
     private String imageType;
 
-    private File fileItem;
+    @JsonProperty("fileItem")
+    private byte[] fileItem;
+    @JsonProperty("orderNo")
     private String orderNo;
+    @JsonProperty("policyId")
     private String policyId;
+    @JsonProperty("page")
     private String page;
+    @JsonProperty("flag")
     private String flag;
+    @JsonProperty("flowId")
     private String flowId;
 }

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

@@ -0,0 +1,45 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerConfirmOrderResponse;
+import lombok.Data;
+
+import java.io.Serial;
+
+@Data
+public class ZhongAnCrawlerUploadInitDateRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("page")
+    private String page;
+
+    @JsonProperty("flag")
+    private String flag;
+
+    @JsonProperty("i")
+    private String i;
+
+    @JsonProperty("policyId")
+    private String policyId;
+
+    @JsonProperty("checkCode")
+    private String checkCode;
+
+    public ZhongAnCrawlerUploadInitDateRequest(ZhongAnCrawlerConfirmOrderResponse.ValueDTO.DataDTO dataDTO, ZhongAnCrawlerConfigureParameters parameters) {
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.INIT_DATA);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        this.policyId = dataDTO.getPolicyId();
+        this.checkCode = "";
+
+    }
+
+}

+ 35 - 94
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPaymentResponse.java

@@ -1,137 +1,78 @@
 package com.jzg.quotation.zhongan.crawler.entity.response;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serial;
-import java.io.Serializable;
-import java.util.List;
 
 /**
  * @description: 众安保险 获取支付链接 返回参数
  * @author: shenwd
  * @date: 2025/5/15 11:30
  **/
+@NoArgsConstructor
 @Data
 public class ZhongAnCrawlerPaymentResponse extends ZhongAnCrawlerBaseResponse{
     @Serial
     private static final long serialVersionUID = -605747703921866090L;
 
-    private String ruleMsgTips;
 
+    @JsonProperty("value")
     private ValueDTO value;
-
+    @JsonProperty("additionalInfo")
     private AdditionalInfoDTO additionalInfo;
 
+    @NoArgsConstructor
     @Data
-    public static class ValueDTO implements Serializable {
-        @Serial
-        private static final long serialVersionUID = 7631482513604543586L;
-        private DataDTO datas;
+    public static class ValueDTO {
+        @JsonProperty("datas")
+        private DatasDTO datas;
 
+        @NoArgsConstructor
         @Data
-        public static class DataDTO implements Serializable {
-            @Serial
-            private static final long serialVersionUID = -1305720504073237441L;
-            /**
-             * 支付链接
-             */
-            private String shareShortUrl;
-
-            private String isShowSmsButton;
-
-            private String redictUrl;
-
+        public static class DatasDTO {
+            @JsonProperty("bizCoinsType")
+            private String bizCoinsType;
+            @JsonProperty("coinsType")
             private String coinsType;
-
+            @JsonProperty("initInfo")
             private InitInfoDTO initInfo;
-
+            @JsonProperty("isChangeFee")
             private String isChangeFee;
+            @JsonProperty("isShowSmsButton")
+            private String isShowSmsButton;
+            @JsonProperty("redictUrl")
+            private String redictUrl;
+            @JsonProperty("shareShortUrl")
+            private String shareShortUrl;
 
+            @NoArgsConstructor
             @Data
-            public static class InitInfoDTO implements Serializable {
-                @Serial
-                private static final long serialVersionUID = 3749340540417195000L;
-                private String vehicleName;
-
-                private String businessDiscount;
-
-                private String miniProgramPaySwitch;
-
-                private String splitPayFlag;
-
-                private String modelEnergyType;
-
-                private String taxPremium;
-
-                private String showVAT;
-
-                private String ownerName;
-
-                private String compelDiscount;
-
-                private String insurePlaceCode;
-
-                private String applicantPersonnelType;
-
-                private String productType;
-
-                private String applySignStageFlag;
-
-                private String electricApplyPolicyFlag;
-
-                private String orderNo;
-
-                private String agentUserCode;
-
-                private String isEnableQrCode;
-
-                private String premuim;
-
-                private String applicantName;
-
-                private List<JyxPolicyDTO> jyxPolicyList;
-
-                private String enterprisePayFlag;
-
-                private String compelPremium;
-
-                private String quoteId;
-
-                private String payExpireDate;
-
-                private String insurePlaceName;
-
-                private String personnelType;
-
-                private String ownerPhoneNo;
-
-                private String bizPremium;
-
-                private String isNeedRealName;
-
+            public static class InitInfoDTO {
+                @NoArgsConstructor
                 @Data
-                public static class JyxPolicyDTO implements Serializable {
-                    @Serial
-                    private static final long serialVersionUID = 202583596174143067L;
+                public static class JyxPolicyListDTO {
+                    @JsonProperty("coverage")
                     private String coverage;
-
+                    @JsonProperty("premium")
                     private String premium;
-
+                    @JsonProperty("insuredFlag")
                     private String insuredFlag;
-
+                    @JsonProperty("combination")
                     private String combination;
-
+                    @JsonProperty("isCombinePay")
                     private String isCombinePay;
-
+                    @JsonProperty("productMode")
                     private String productMode;
                 }
             }
         }
     }
 
+    @NoArgsConstructor
     @Data
-    public static class AdditionalInfoDTO implements Serializable {
-        @Serial
-        private static final long serialVersionUID = -2976499652780707864L;
+    public static class AdditionalInfoDTO {
     }
 }

+ 7 - 4
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerUploadImageResponse.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zhongan.crawler.entity.response;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 import java.io.Serial;
@@ -11,26 +12,28 @@ import java.io.Serializable;
  * @date: 2025/5/14 11:20
  **/
 @Data
-public class ZhongAnCrawlerUploadImageResponse implements Serializable {
+public class ZhongAnCrawlerUploadImageResponse extends ZhongAnCrawlerBaseResponse{
     @Serial
     private static final long serialVersionUID = -8752369054975444468L;
-
+    @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("uploadedFilePath")
             private String uploadedFilePath;
-
+            @JsonProperty("encFileImageName")
             private String encFileImageName;
         }
     }

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

@@ -0,0 +1,95 @@
+package com.jzg.quotation.zhongan.crawler.entity.response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ZhongAnCrawlerUploadInitDateResponse extends ZhongAnCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("value")
+    private ValueDTO value;
+    @JsonProperty("additionalInfo")
+    private AdditionalInfoDTO additionalInfo;
+
+    @NoArgsConstructor
+    @Data
+    public static class ValueDTO {
+        @JsonProperty("datas")
+        private DatasDTO datas;
+
+        @NoArgsConstructor
+        @Data
+        public static class DatasDTO {
+
+            @JsonProperty("transferFlag")
+            private String transferFlag;
+            @JsonProperty("orderNo")
+            private String orderNo;
+            @JsonProperty("vehicleFrameNo")
+            private String vehicleFrameNo;
+            @JsonProperty("imageData")
+            private List<ImageDataDTO> imageData;
+            @JsonProperty("campaignId")
+            private Integer campaignId;
+            @JsonProperty("agentUserCode")
+            private String agentUserCode;
+            @JsonProperty("compelRuleEffectiveTimes")
+            private String compelRuleEffectiveTimes;
+            @JsonProperty("compelEffectiveDate")
+            private String compelEffectiveDate;
+            @JsonProperty("applicantName")
+            private String applicantName;
+            @JsonProperty("quoteId")
+            private String quoteId;
+            @JsonProperty("compelCoinsType")
+            private String compelCoinsType;
+            @JsonProperty("vehicleLicencePlateNo")
+            private String vehicleLicencePlateNo;
+            @JsonProperty("checkCode")
+            private String checkCode;
+            @JsonProperty("bizEffectiveDate")
+            private String bizEffectiveDate;
+            @JsonProperty("bizExpiryDate")
+            private String bizExpiryDate;
+            @JsonProperty("bizApplyNo")
+            private String bizApplyNo;
+            @JsonProperty("manualAuditStatus")
+            private String manualAuditStatus;
+            @JsonProperty("compelExpiryDate")
+            private String compelExpiryDate;
+            @JsonProperty("compelApplyNo")
+            private String compelApplyNo;
+            @JsonProperty("businessRuleEffectiveTimes")
+            private String businessRuleEffectiveTimes;
+            @JsonProperty("insurePlaceCode")
+            private String insurePlaceCode;
+
+            @NoArgsConstructor
+            @Data
+            public static class ImageDataDTO {
+                @JsonProperty("imageType")
+                private Integer imageType;
+                @JsonProperty("imageTypeName")
+                private String imageTypeName;
+                @JsonProperty("imageUrl")
+                private String imageUrl;
+                @JsonProperty("encFileImageName")
+                private String encFileImageName;
+            }
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AdditionalInfoDTO {
+    }
+}

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

@@ -2,13 +2,17 @@ package com.jzg.quotation.zhongan.crawler.service.Impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
+import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
@@ -31,10 +35,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.Base64;
@@ -60,8 +61,11 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Value("${zhongAn.id}")
     private String zhongAnId;
 
+    private final PlatformClient platformClient;
+
     /**
      * 登录
+     *
      * @param loginBase 登录信息
      */
     @Override
@@ -79,6 +83,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         //登录众安
         loginCookieCache(zhongAnId);
+        zhongAnCrawlerCacheComponent.setCache(quoteVo.getOwnersInfo().getIdentifyNumber(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.IDENTIFY_NUMBER);
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         //获取配置信息
@@ -89,14 +94,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
             parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
         }
         //校验key,缓存
-        ZhongAnCrawlerCacheInputRequest cacheInputRequest = new ZhongAnCrawlerCacheInputRequest(quoteVo,parameters);
-        String cacheInput = zhongAnCrawlerRequestComponent.CacheInput(cacheInputRequest,headers);
+        ZhongAnCrawlerCacheInputRequest cacheInputRequest = new ZhongAnCrawlerCacheInputRequest(quoteVo, parameters);
+        String cacheInput = zhongAnCrawlerRequestComponent.CacheInput(cacheInputRequest, headers);
 
         ZhongAnCrawlerInitDataRequest initDataRequest = new ZhongAnCrawlerInitDataRequest(parameters);
-        String initDataInfo = zhongAnCrawlerRequestComponent.initDataInfo(initDataRequest,headers);
+        String initDataInfo = zhongAnCrawlerRequestComponent.initDataInfo(initDataRequest, headers);
         //车架查询
-        ZhongAnCrawlerCarVinRequest carVinRequest = new ZhongAnCrawlerCarVinRequest(quoteVo,parameters);
-        String carVinQuery = zhongAnCrawlerRequestComponent.carVinQuery(carVinRequest,headers);
+        ZhongAnCrawlerCarVinRequest carVinRequest = new ZhongAnCrawlerCarVinRequest(quoteVo, parameters);
+        String carVinQuery = zhongAnCrawlerRequestComponent.carVinQuery(carVinRequest, headers);
 
 
         //车型查询
@@ -105,19 +110,19 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO vehicleDTO = CarModelsFilterUtils.to(vehicleDTOList, carInfoVo);
 
         ZhongAnCrawlerQuerySpecialRequest querySpecialRequest = new ZhongAnCrawlerQuerySpecialRequest(quoteVo, parameters);
-        String querySpecial = zhongAnCrawlerRequestComponent.querySpecial(querySpecialRequest,headers);
+        String querySpecial = zhongAnCrawlerRequestComponent.querySpecial(querySpecialRequest, headers);
 
         ZhongAnCrawlerLicenseSwitchRequest licenseSwitchRequest = new ZhongAnCrawlerLicenseSwitchRequest(quoteVo, parameters);
-        String licenseSwitch = zhongAnCrawlerRequestComponent.licenseSwitch(licenseSwitchRequest,headers);
+        String licenseSwitch = zhongAnCrawlerRequestComponent.licenseSwitch(licenseSwitchRequest, headers);
 
 
-        ZhongAnCrawlerCacheCarQueryRequest cacheCarQueryRequest = new ZhongAnCrawlerCacheCarQueryRequest(quoteVo,vehicleDTO,parameters);
+        ZhongAnCrawlerCacheCarQueryRequest cacheCarQueryRequest = new ZhongAnCrawlerCacheCarQueryRequest(quoteVo, vehicleDTO, parameters);
 //        String cacheCarQueryResponse = zhongAnCrawlerRequestComponent.cacheCarInfo(cacheCarQueryRequest,headers);
-        ZhongAnCrawlerCacheCarQueryResponse cacheCarQueryResponse = zhongAnCrawlerRequestComponent.cacheCarInfo(cacheCarQueryRequest,headers);
+        ZhongAnCrawlerCacheCarQueryResponse cacheCarQueryResponse = zhongAnCrawlerRequestComponent.cacheCarInfo(cacheCarQueryRequest, headers);
         if (cacheCarQueryResponse != null && StringUtils.isNotEmpty(cacheCarQueryResponse.getErrorMsg())) {
             if (cacheCarQueryResponse.getErrorCode().equals("A12512")) {
                 ZhongAnCrawlerQueryDetailQueryRequest detailQueryRequest = new ZhongAnCrawlerQueryDetailQueryRequest(cacheCarQueryResponse, parameters);
-                ZhongAnCrawlerQueryDetailQueryResponse queryDetailQueryResponse = zhongAnCrawlerRequestComponent.detailQuery(detailQueryRequest,headers);
+                ZhongAnCrawlerQueryDetailQueryResponse queryDetailQueryResponse = zhongAnCrawlerRequestComponent.detailQuery(detailQueryRequest, headers);
 
                 ZhongAnCrawlerQueryDetailQueryResponse.ValueDTO.DatasDTO.VehicleDetailInfoDTO vehicleDetailInfo = queryDetailQueryResponse.getValue().getDatas().getVehicleDetailInfo();
                 ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO vehicleDTO1 = BeanUtil.copyProperties(vehicleDetailInfo, ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO.class);
@@ -128,7 +133,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                     throw new SystemException(cacheCarQueryResponse1.getErrorMsg());
                 }
 
-            }else {
+            } else {
 
                 throw new SystemException(cacheCarQueryResponse.getErrorMsg());
             }
@@ -139,7 +144,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
 //        ZhongAnCrawlerQuoteBaseResponse zhongAnCrawlerQuoteBaseResponse = JsonUtil.readObjcet(str, ZhongAnCrawlerQuoteBaseResponse.class);
 
         //报价
-        ZhongAnCrawlerQuoteRequest quoteRequest = new ZhongAnCrawlerQuoteRequest(quoteVo, parameters,quoteBaseResponse);
+        ZhongAnCrawlerQuoteRequest quoteRequest = new ZhongAnCrawlerQuoteRequest(quoteVo, parameters, quoteBaseResponse);
         ZhongAnCrawlerQuoteResponse quoteResponse = zhongAnCrawlerRequestComponent.quote(quoteRequest, headers);
         if (quoteResponse != null && StringUtils.isNotEmpty(quoteResponse.getErrorMsg())) {
             throw new SystemException(quoteResponse.getErrorMsg());
@@ -152,16 +157,24 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         //获取订单信息,需要获取quoteId
         ZhongAnCrawlerGetOrderRequest getOrderRequest = new ZhongAnCrawlerGetOrderRequest(parameters);
         ZhongAnCrawlerGetOrderResponse getOrderResponse = zhongAnCrawlerRequestComponent.getOrder(getOrderRequest, headers);
+        zhongAnCrawlerCacheComponent.setCache(getOrderResponse.getValue().getDatas().getQuoteId(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.QUOTE_ID);
 
         //确认订单
         ZhongAnCrawlerConfirmOrderRequest confirmOrderRequest = new ZhongAnCrawlerConfirmOrderRequest(parameters, quoteVo);
         ZhongAnCrawlerConfirmOrderResponse confirmOrderResponse = zhongAnCrawlerRequestComponent.confirmOrder(confirmOrderRequest, headers);
+        ZhongAnCrawlerConfirmOrderResponse.ValueDTO.DataDTO dataDTO = confirmOrderResponse.getValue().getDatas();
+        zhongAnCrawlerCacheComponent.setCache(dataDTO.getOrderNo(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.ORDER_NO);
+        zhongAnCrawlerCacheComponent.setCache(dataDTO.getPolicyId(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.POLICY_ID);
 
         //非车险提交核保
         ZhongAnCrawlerJyxUnderwritingRequest jyxUnderwritingRequest = new ZhongAnCrawlerJyxUnderwritingRequest(parameters, getOrderResponse.getValue().getDatas().getQuoteId());
         ZhongAnCrawlerJyxUnderwritingResponse jyxUnderwritingResponse = zhongAnCrawlerRequestComponent.jyxUnderwriting(jyxUnderwritingRequest, headers);
 
-        ZhongAnCrawlerConfirmOrderResponse.ValueDTO.DataDTO dataDTO = confirmOrderResponse.getValue().getDatas();
+        ZhongAnCrawlerUploadInitDateRequest zhongAnCrawlerUploadInitDateRequest = new ZhongAnCrawlerUploadInitDateRequest(dataDTO, parameters);
+        ZhongAnCrawlerUploadInitDateResponse uploadInitDateResponse = zhongAnCrawlerRequestComponent.uploadInitDate(zhongAnCrawlerUploadInitDateRequest, headers);
+        zhongAnCrawlerCacheComponent.setCache(uploadInitDateResponse.getValue().getDatas(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.INITDATE);
+
+
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = new ZhongAnCrawlerOrder();
         zhongAnCrawlerOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         zhongAnCrawlerOrder.setOrderNo(dataDTO.getOrderNo());
@@ -169,6 +182,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         zhongAnCrawlerOrderService.save(zhongAnCrawlerOrder);
         return ZhongAnCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, quoteResponse.getValue().getDatas());
     }
+
     //登录
     private void loginCookieCache(String zhongAnId) {
         try {
@@ -185,8 +199,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
 
 
             Map<String, String> headers = new HashMap<>();
-            headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36");
-            headers.put("Accept","application/json, text/plain, */*");
+            headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36");
+            headers.put("Accept", "application/json, text/plain, */*");
 
             // 发送第一个请求,不跟随重定向
             String url = "https://www.cyouzai.com/busi-integration/channel/baoBiaoH5Redirect";
@@ -215,15 +229,15 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                 // 提取flowId
                 String flowId = HttpUtil.extractFlowId(thirdLocation);
                 //缓存数据
-                zhongAnCrawlerCacheComponent.cacheCookie(zaLoginCookieKey,flowId,zhongAnId);
+                zhongAnCrawlerCacheComponent.cacheCookie(zaLoginCookieKey, flowId, zhongAnId);
 
-                System.out.println("key=="+zaLoginCookieKey+"------flowId="+flowId);
+                System.out.println("key==" + zaLoginCookieKey + "------flowId=" + flowId);
 
             } else {
                 throw new SystemException("未获取到-----zaLoginCookieKey");
             }
 
-        }catch (Exception e) {
+        } catch (Exception e) {
             throw new SystemException("message", "请求发生错误: " + e.getMessage());
         }
 
@@ -236,7 +250,34 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
-        return null;
+        loginCookieCache(zhongAnId);
+        AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
+        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        String flowId = parameters.getFlowId();
+        if (StringUtils.isEmpty(flowId)) {
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+        }
+        String ordersNo = zhongAnCrawlerCacheComponent.getCache(underwritingVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.ORDER_NO);
+        ZhongAnCrawlerMarkRequest markRequest = new ZhongAnCrawlerMarkRequest(parameters, ordersNo);
+        String markCompleted = zhongAnCrawlerRequestComponent.markCompleted(markRequest, headers);
+
+        ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
+
+        ZhongAnCrawlerUploadInitDateResponse.ValueDTO.DatasDTO initData = zhongAnCrawlerCacheComponent.getInitData(underwritingVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.INITDATE);
+        ZhongAnCrawlerPaymentRequest paymentRequest = new ZhongAnCrawlerPaymentRequest(zhongAnCrawlerOrder.getPolicyId(), initData.getCheckCode());
+        ZhongAnCrawlerPaymentResponse payment = zhongAnCrawlerRequestComponent.payment(paymentRequest, headers);
+
+        UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        underwritingResultsVo.setPaymentLink(payment.getValue().getDatas().getShareShortUrl());
+        //核保结果
+        underwritingResultsVo.setUnderwritingResult("核保成功");
+//        //核保状态
+        underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+//        //保司订单号
+        underwritingResultsVo.setCompanyOrderNo(ordersNo);
+
+        return underwritingResultsVo;
     }
 
     /**
@@ -246,15 +287,16 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
+        loginCookieCache(zhongAnId);
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
         OrderBase orderBase = paymentLinkVo.getOrder();
-        AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         //获取配置信息
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername());
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
 
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
 
-        ZhongAnCrawlerPaymentRequest paymentRequest = new ZhongAnCrawlerPaymentRequest(zhongAnCrawlerOrder.getPolicyId());
+        ZhongAnCrawlerUploadInitDateResponse.ValueDTO.DatasDTO initData = zhongAnCrawlerCacheComponent.getInitData(orderBase.getOrdersNo() + ZhongAnCrawlerCacheComponent.INITDATE);
+        ZhongAnCrawlerPaymentRequest paymentRequest = new ZhongAnCrawlerPaymentRequest(zhongAnCrawlerOrder.getPolicyId(), initData.getCheckCode());
         ZhongAnCrawlerPaymentResponse payment = zhongAnCrawlerRequestComponent.payment(paymentRequest, headers);
         paymentLinkResultsVo.setPaymentLink(payment.getValue().getDatas().getShareShortUrl());
 
@@ -269,42 +311,94 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      * 行驶证副本			    7
      * 其他                 99
      * 还有通融申请流程的影像上传待处理
+     *
      * @param insuranceUploadImageVo
      */
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        loginCookieCache(zhongAnId);
         OrderBase orderBase = insuranceUploadImageVo.getOrder();
         AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername());
-
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        String flowId = parameters.getFlowId();
+        if (StringUtils.isEmpty(flowId)) {
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+        }
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
         for (InsuranceImageVo insuranceImageVo : insuranceUploadImageVo.getImageVoList()) {
-            for (InsuranceImageVo.ImageDTO imageDTO: insuranceImageVo.getImageBase64List()) {
-                //根据参数,确定影像类型;暂时默认99
+            //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";
-                String imageBase64Str = imageDTO.getImageBase64Str();
-                byte[] imageBytes = Base64.getDecoder().decode(imageBase64Str);
-                //需要设置一个临时图片路径
-                FileOutputStream fileOutputStream = null;
-                String filePath = "图片临时路径";
-                try {
-                    fileOutputStream = new FileOutputStream(filePath);
-                    fileOutputStream.write(imageBytes);
-                    fileOutputStream.close();
-                } catch (FileNotFoundException e) {
-                    throw new RuntimeException(e);
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
+                List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
+                for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
+                    extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
                 }
-                File file = new File(filePath);
-                ZhongAnCrawlerUploadImageRequest uploadImageRequest = new ZhongAnCrawlerUploadImageRequest(imageType, file, zhongAnCrawlerOrder.getOrderNo(), zhongAnCrawlerOrder.getPolicyId(), parameters);
-                ZhongAnCrawlerUploadImageResponse uploadImageResponse = zhongAnCrawlerRequestComponent.uploadImage(uploadImageRequest, headers);
             }
+
         }
     }
 
+
+    private void extracted(ZhongAnCrawlerConfigureParameters parameters, HttpHeaders headers, ZhongAnCrawlerOrder zhongAnCrawlerOrder, String imageType, InsuranceImageVo.ImageDTO imageDTO) {
+        String imageBase64Str = imageDTO.getImageBase64Str();
+        byte[] imageBytes = Base64.getDecoder().decode(imageBase64Str);
+        String imageId = imageDTO.getImageId();
+        SysUploadFiles sysUploadFiles = platformClient.getUploadFile(imageId);
+//        String url = MinioUtils.getPresignedObjectUrl("jzg", sysUploadFiles.getFileName());
+        String url = "http://192.168.0.250:9000/jzg/fc69904cb8b3647fd80f2994bee6939f_82ab9c52b729ab1747ece717662cab08.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=v7Zb8XhyLcYNcSHlxvyK%2F20250910%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250910T103229Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=e7febb0154d1f4f6f499570ad0f77ddb019e176735b52932e07881923dcd397d ";
+        //需要设置一个临时图片路径
+//        FileOutputStream fileOutputStream = null;
+//        String filePath = url;
+//        try {
+//            fileOutputStream = new FileOutputStream(filePath);
+//            fileOutputStream.write(imageBytes);
+//            fileOutputStream.close();
+//        }  catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//        File file = new File(url);
+
+        byte[] convert = new byte[0];
+        try {
+            convert = convert(url);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+        ZhongAnCrawlerUploadImageRequest uploadImageRequest = new ZhongAnCrawlerUploadImageRequest(imageType, convert, zhongAnCrawlerOrder.getOrderNo(), zhongAnCrawlerOrder.getPolicyId(), parameters);
+        ZhongAnCrawlerUploadImageResponse uploadImageResponse = zhongAnCrawlerRequestComponent.uploadImage(uploadImageRequest, headers);
+    }
+
+    public  byte[] convert(String filePath) throws IOException {
+        File file = new File(filePath);
+        byte[] binaryData = new byte[(int) file.length()];
+        try (FileInputStream fis = new FileInputStream(file)) {
+            fis.read(binaryData); // 读取全部字节到数组
+        }
+        return binaryData;
+    }
+
     /**
      * 下载保单
      *
@@ -312,10 +406,11 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
+        loginCookieCache(zhongAnId);
         OrderBase orderBase = downloadPolicyVo.getOrder();
         AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         //获取配置信息
-        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername());
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
 
         ZhongAnCrawlerOrder zhongAnCrawlerOrder = zhongAnCrawlerOrderService.findByOrdersNo(orderBase.getOrdersNo());
         String orderNo = zhongAnCrawlerOrder.getOrderNo();
@@ -363,6 +458,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
      */
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws JsonProcessingException {
+        loginCookieCache(zhongAnId);
         return null;
     }
 }