Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

jiakai 1 месяц назад
Родитель
Сommit
28ff3efe3c
11 измененных файлов с 221 добавлено и 68 удалено
  1. 5 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java
  2. 43 17
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java
  3. 2 8
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  4. 4 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteRequestVoBuild.java
  5. 4 4
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  6. 7 13
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java
  7. 6 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  8. 1 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java
  9. 50 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerAccommodationUploadRequest.java
  10. 52 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerAccommodationUploadResponse.java
  11. 47 24
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

+ 5 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java

@@ -146,7 +146,11 @@ public class HuaTaiCrawlerQuoteResultsVoBuild {
         kindInfoVo.forEach(kind -> {
             HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO coverageDTO = collect.get(kind.getKindCode());
             if (coverageDTO.getComcoveragecode().equals(kind.getKindCode())) {
-                kind.setAmount(String.valueOf(coverageDTO.getLimitamount()));//设置保额
+                kind.setAmount(StringUtils.isBlank(String.valueOf(coverageDTO.getLimitamount())) ? "0" : String.valueOf(coverageDTO.getLimitamount()));//设置保额 空字符串处理
+                // 如果是道路救援险种,保额为0
+                if (ContractEnum.H_SR.getKindCode().equals(kind.getKindCode())) {
+                    kind.setAmount("0");
+                }
                 kind.setPremium(String.valueOf(coverageDTO.getStandardpremium()));//设置保费
 //                kind.setUnitAmount(String.valueOf(coverageDTO.getUnitAmount()));//设置每座保额
                 kind.setQuantity(String.valueOf(coverageDTO.getQuantity()));//设置份数

+ 43 - 17
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java

@@ -261,13 +261,16 @@ public class RenBaoNewCrawlerRequestBuilder {
         );
 
         // 从车型查询结果中提取关键字段
-        String vehicleClassPicc = extractVehicleInfo(vehicleResult, "vehicleClassPicc");  // 车种代码(如A01-轿车)
-        String vehicleTonnage = extractVehicleInfo(vehicleResult, "vehicleTonnage");    // 核定载质量(货车用)
-        String purchasePriceT = extractVehicleInfo(vehicleResult, "priceT");            // 新车购置价(车型库标准价)
-        String fuelType = extractVehicleInfo(vehicleResult, "fuelType");                // 燃料类型(A-汽油,B-柴油等)
-        String vehicleModelCode = extractVehicleInfo(vehicleResult, "vehicleModelCode"); // 车型代码
-        String vehicleId = extractVehicleInfo(vehicleResult, "vehicleId");              // 车辆ID(人保内部编码)
-        String vehicleFgwCode = extractVehicleInfo(vehicleResult, "vehicleFgwCode");    // 工信部公告型号
+
+        String carPrice = quoteVo.getCarInfoVo().getPurchasePrice();
+
+        String vehicleClassPicc = extractVehicleInfo(vehicleResult, "vehicleClassPicc",carPrice);  // 车种代码(如A01-轿车)
+        String vehicleTonnage = extractVehicleInfo(vehicleResult, "vehicleTonnage",carPrice);    // 核定载质量(货车用)
+        String purchasePriceT = extractVehicleInfo(vehicleResult, "priceT",carPrice);            // 新车购置价(车型库标准价)
+        String fuelType = extractVehicleInfo(vehicleResult, "fuelType",carPrice);                // 燃料类型(A-汽油,B-柴油等)
+        String vehicleModelCode = extractVehicleInfo(vehicleResult, "vehicleModelCode",carPrice); // 车型代码
+        String vehicleId = extractVehicleInfo(vehicleResult, "vehicleId",carPrice);              // 车辆ID(人保内部编码)
+        String vehicleFgwCode = extractVehicleInfo(vehicleResult, "vehicleFgwCode",carPrice);    // 工信部公告型号
 
         // =====================================================================
         // 步骤3.1:计算使用性质和条款类型
@@ -2082,6 +2085,11 @@ public class RenBaoNewCrawlerRequestBuilder {
             String matchedVehicleMakerId = getStringValue(matchedVehicle, "vehicleMakerId");
             String matchedGroupName = getStringValue(matchedVehicle, "groupName");
             String matchedHighestHour = getStringValue(matchedVehicle, "highestHour");
+            String presaleCarFlag = getStringValue(matchedVehicle, "presaleCarFlag");
+
+            if(matchedVehicleId != null && !presaleCarFlag.isEmpty()){
+                prpCitemCar.put("presaleCarFlag", presaleCarFlag);
+            }
 
             if (matchedVehicleId != null && !matchedVehicleId.isEmpty()) {
                 prpCitemCar.put("vehicleId", matchedVehicleId);
@@ -3414,17 +3422,19 @@ public class RenBaoNewCrawlerRequestBuilder {
         return prpCmainChannel;
     }
 
+
     /**
      * 从车型查询结果中提取字段
      *
-     * <p>从vehicleQuery返回的Map中提取指定字段值,路径:data.carInfos.result[0].fieldName</p>
+     * <p>从vehicleQuery返回的Map中提取指定字段值,遍历result列表根据purchasePrice匹配车型,未命中取第一条</p>
      *
      * @param vehicleResult 车型查询结果
-     * @param fieldName 字段名
+     * @param fieldName     字段名
+     * @param purchasePrice 车型价格,用来匹配priceT/priceP
      * @return 字段值,如果不存在返回null
      */
     @SuppressWarnings("unchecked")
-    private String extractVehicleInfo(Map<String, Object> vehicleResult, String fieldName) {
+    private String extractVehicleInfo(Map<String, Object> vehicleResult, String fieldName, String purchasePrice) {
         if (vehicleResult == null) {
             return null;
         }
@@ -3443,16 +3453,32 @@ public class RenBaoNewCrawlerRequestBuilder {
         Map<String, Object> carInfosMap = (Map<String, Object>) carInfos;
 
         // 第三层:result(列表)
-        Object result = carInfosMap.get("result");
-        if (!(result instanceof List) || ((List<?>) result).isEmpty()) {
+        Object resultObj = carInfosMap.get("result");
+        if (!(resultObj instanceof List) || ((List<?>) resultObj).isEmpty()) {
             return null;
         }
-        Object firstItem = ((List<?>) result).get(0);
-        if (!(firstItem instanceof Map)) {
-            return null;
+        List<Map<String, Object>> resultList = (List<Map<String, Object>>) resultObj;
+
+        Map<String, Object> matchItem = null;
+        // 遍历按价格匹配 priceT
+        for (Map<String, Object> item : resultList) {
+            if (item == null) {
+                continue;
+            }
+            String priceT = item.get("priceT") != null ? item.get("priceT").toString() : null;
+
+            if (priceT != null && new BigDecimal(purchasePrice).compareTo(new BigDecimal(priceT))==0  ) {
+                matchItem = item;
+                break;
+            }
         }
-        Map<String, Object> itemMap = (Map<String, Object>) firstItem;
-        Object value = itemMap.get(fieldName);
+
+        //没有命中价格,降级取第一条
+        if (matchItem == null) {
+            matchItem = resultList.get(0);
+        }
+
+        Object value = matchItem.get(fieldName);
         return value != null ? value.toString() : null;
     }
 

+ 2 - 8
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -891,18 +891,12 @@ public class UnifyOrderManager {
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId());
         String systemCode = getSystemCode();
 
-        //先默认第一个协议
-        List<PtlAgreement> byCompanyId = agreementCacheService.getByCompanyId(insOrders.getCompanyId(), systemCode);
-        if (CollUtil.isEmpty(byCompanyId)) {
-            AssertionUtils.isFail(true, "保司未配置协议");
-        }
-
         // 获取特约列表
         CompanyClauseVo companyClauseVo = new CompanyClauseVo();
         companyClauseVo.setCompanyId(insOrders.getCompanyId());
         HttpResult<List<InsCompanyClauseVo>> clauseDataResult = platformClient.queryClauseData(companyClauseVo);
         if (clauseDataResult.getData().isEmpty()) {
-            AssertionUtils.isFail(true, "保司未配置特约");
+            return HttpResult.ok("保司未配置协议");
         }
         clauseDataVo.setJqPremium(costs.getJqPremium());
         clauseDataVo.setSyPremium(costs.getSyPremium());
@@ -920,7 +914,7 @@ public class UnifyOrderManager {
         clauseDataVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         clauseDataVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         clauseDataVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
-        clauseDataVo.getOrder().setAgreementId(byCompanyId.get(0).getId());
+        clauseDataVo.getOrder().setAgreementId(insOrders.getAgreementId());
         QuotationBaseService quoteService = companyFactory.getClauseDataService(clauseDataVo);
         quoteService.queryClauseData(clauseDataVo);
 

+ 4 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteRequestVoBuild.java

@@ -155,7 +155,10 @@ public class TaiShanCrawlerQuoteRequestVoBuild {
             }
             priceUncarDaData.put("diInsurance", diInsurance);
             Map<String, Object> priceUncarDaRes = priceUncarDa(priceUncarDaData, headers, taiShanCrawlerRequestComponent);
-            log.info("diInsurance_非车保费计算结果:{}", JSONObject.toJSONString(priceUncarDaRes));
+            log.info("diInsurance_非车保费计算结果:{}", JSONObject.toJSONString(priceUncarDaRes));//{"result":"","code":"400","message":"驾意险仅限家庭自用汽车,非营业企业客车和非营业机关客车9座以下投保"}
+            if (!"200".equals(String.valueOf(priceUncarDaRes.get("code")))) {
+                throw new SystemException("diInsurance_非车保费计算异常,错误信息:" + priceUncarDaRes.get("message"));
+            }
 
             Map<String, Object> resRoot = (Map<String, Object>) priceUncarDaRes.get("result");
             Map<String, Object> diInsurancePrice = (Map<String, Object>) resRoot.get("diInsurance");

+ 4 - 4
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java

@@ -420,13 +420,13 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
             if (response.getResult().equals("0")) {
                 //判断人工处理和核保退回
                 if(orderStatusVo.getInsOrders().getOrderStatus().equals(InsOrderStatusEnum.STAFF_PROCESS.getCode().toString())){
-                    if(response.getJqstatus().equals("9") || response.getSystatus().equals("9")){
-                        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
-                    }else if(response.getJqstatus().equals("0") || response.getSystatus().equals("0")){
+                    if(response.getJqstatus().equals("0") || response.getSystatus().equals("0")) {
                         orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
-                    }else if(response.getJqstatus().equals(3)){
+                    }else if(response.getJqstatus().equals("3") || response.getSystatus().equals("3")){
                         orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
                         orderStatusResultVo.setErrorMsg(response.getJqmessage());
+                    }else if(response.getJqstatus().equals("9") || response.getSystatus().equals("9")){
+                        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
                     }
                 }
                 if(orderStatusVo.getInsOrders().getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING.getCode().toString())){

+ 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()];