xuqiang 4 月之前
父節點
當前提交
27ab24eaa2
共有 11 個文件被更改,包括 170 次插入 和 20 次删除
  1. 52 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java
  2. 1 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DajiaCrawlerAuditResultsVoBuild.java
  3. 13 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerCacheComponent.java
  4. 30 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  5. 2 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java
  6. 3 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/po/DaJiaCrawlerOrder.java
  7. 1 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerChannelPackagesRequest.java
  8. 8 4
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerPriceRequest.java
  9. 1 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerOrderServiceImpl.java
  10. 24 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java
  11. 35 8
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

+ 52 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.OrderStatusResultVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.dajia.crawler.constant.enums.DaJiaCrawlerOrderState;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.BusinessInsuranceDTO;
@@ -148,10 +149,10 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         CompulsoryInsuranceDTO compulsoryInsurance = daJiaCrawlerSaveResponse.getCompulsoryInsurance(); // 交强险
         BusinessInsuranceDTO businessInsurance = daJiaCrawlerSaveResponse.getBusinessInsurance(); // 商业险
         if (!ObjectUtils.isEmpty(compulsoryInsurance)) {
-            scoreVo.setJqLossRation(compulsoryInsurance.getCoefficientInfo().getLossRatioCi());
+            scoreVo.setJqLossRation(StringUtils.isNotEmpty(compulsoryInsurance.getCoefficientInfo().getLossRatioCi()) ? compulsoryInsurance.getCoefficientInfo().getLossRatioCi() : null);
         }
         if (!ObjectUtils.isEmpty(businessInsurance)) {
-            scoreVo.setSyLossRation(businessInsurance.getCoefficientInfo().getLossRatioBi());
+            scoreVo.setSyLossRation(StringUtils.isNotEmpty(businessInsurance.getCoefficientInfo().getLossRatioBi()) ? businessInsurance.getCoefficientInfo().getLossRatioBi() : null);
         }
         // 总赔付率 违章评分 高速风险分
         String carIllegalScore;
@@ -165,6 +166,7 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
             carIllegalScore = daJiaCrawlerSaveResponse.getBusinessInsurance().getCoefficientInfo().getCarIllegalScore();
             highwayScore = daJiaCrawlerSaveResponse.getBusinessInsurance().getCoefficientInfo().getHighwayScore();
         }
+        CompulsoryInsuranceDTO.CoefficientInfoDTO coefficientInfo = daJiaCrawlerSaveResponse.getCompulsoryInsurance().getCoefficientInfo();
         JSONArray scoreArray = new JSONArray();
         scoreArray.add(new JSONObject()
                 .fluentPut("scoreName","交强定价评分")
@@ -182,6 +184,54 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
                 .fluentPut("scoreName","高速风险分")
                 .fluentPut("scoreKey","highwayScore")
                 .fluentPut("score",highwayScore));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","醉酒驾驶行为违法次数")
+                .fluentPut("scoreKey","drunkTotalCoef")
+                .fluentPut("score",coefficientInfo.getDrunkTotalCoef()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","理赔调整系数")
+                .fluentPut("scoreKey","claimAdjustValue")
+                .fluentPut("score",coefficientInfo.getClaimAdjustValue()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","交强险手续费")
+                .fluentPut("scoreKey","handFeeCi")
+                .fluentPut("score",coefficientInfo.getHandFeeCi()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","商业险手续费")
+                .fluentPut("scoreKey","handFeeBi")
+                .fluentPut("score",coefficientInfo.getHandFeeBi()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","续保次数")
+                .fluentPut("scoreKey","renewalFrequency")
+                .fluentPut("score",coefficientInfo.getRenewalFrequency()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","违法调整系数")
+                .fluentPut("scoreKey","carIllegalScore")
+                .fluentPut("score",coefficientInfo.getCarIllegalScore()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","商业险连续承保年数")
+                .fluentPut("scoreKey","insureYears")
+                .fluentPut("score",coefficientInfo.getInsureYears()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","商业险建议折扣")
+                .fluentPut("scoreKey","suggestedDiscount")
+                .fluentPut("score",coefficientInfo.getSuggestedDiscount()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","无赔款优待系数")
+                .fluentPut("scoreKey","totalCoefNum")
+                .fluentPut("score",coefficientInfo.getTotalCoefNum()));
+        scoreVo.setScoreJson(scoreArray);
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName","无赔优系数级别")
+                .fluentPut("scoreKey","claimAdjustLvl")
+                .fluentPut("score",coefficientInfo.getClaimAdjustLvl()));
         scoreVo.setScoreJson(scoreArray);
         return scoreVo;
     }

+ 1 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DajiaCrawlerAuditResultsVoBuild.java

@@ -42,7 +42,7 @@ public final class DajiaCrawlerAuditResultsVoBuild {
             if (null != daJiaCrawlerGenerateResponse.getJqGenerate().getErrorMessage()) {
                 sb.append(String.format("交强险提示信息:%s", daJiaCrawlerGenerateResponse.getJqGenerate().getErrorMessage()));
             }
-            if (null != daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()) {
+            if (!Objects.isNull(daJiaCrawlerGenerateResponse.getSyGenerate()) && null != daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()) {
                 sb.append(String.format("商业险提示信息:%s", daJiaCrawlerGenerateResponse.getSyGenerate().getErrorMessage()));
             }
             underwritingResultsVo.setUnderwritingResult(sb.toString());

+ 13 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerCacheComponent.java

@@ -43,6 +43,8 @@ public class DaJiaCrawlerCacheComponent {
 
     public static final String USER_CODE = "USER_CODE";
 
+    public static final String TOKEN_ID = "TOKEN_ID";
+
     /**
      * 缓存授权信息
      *
@@ -56,6 +58,7 @@ public class DaJiaCrawlerCacheComponent {
         String authorization = BEARER + token;
         authorizationMap.put(AUTHORIZATION, authorization);
         authorizationMap.put(USER_CODE, userCode);
+        authorizationMap.put(TOKEN_ID, token);
         RMap<Object, Object> map = redissonClient.getMap(DAJIA_AUTHORIZATION + userName);
         map.putAll(authorizationMap);
         map.expire(Duration.ofHours(DAJIA_AUTHORIZATION_TIME));
@@ -104,4 +107,14 @@ public class DaJiaCrawlerCacheComponent {
         return (String) redissonClient.getMap(DAJIA_AUTHORIZATION + username).get(AUTHORIZATION);
     }
 
+    /**
+     * 获取授权信息
+     *
+     * @param username 用户名
+     * @return 授权token
+     */
+    public String getTokenId(String username) {
+        return (String) redissonClient.getMap(DAJIA_AUTHORIZATION + username).get(TOKEN_ID);
+    }
+
 }

+ 30 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java

@@ -4,6 +4,7 @@ package com.jzg.quotation.dajia.crawler.component;
 import com.alibaba.fastjson2.JSON;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
@@ -24,9 +25,7 @@ import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 @Slf4j
@@ -279,7 +278,20 @@ public class DaJiaCrawlerRequestComponent {
      */
     public void initData(DaJiaCrawlerInitDataRequest request, HttpHeaders headers) {
         String url = daJiaCrawlerProperties.getBaseUrl() + RequestUrl.INIT_DATA.uri();
-        requestComponent.objectPost(url, request, String.class, headers);
+        requestComponent.post(url, request, String.class, headers);
+    }
+
+    /**
+     * 初始化数据
+     *
+     * @param request 初始化数据
+     * @param headers 请求头
+     * @return 初始化数据响应
+     */
+    public String  initImgData(DaJiaCrawlerInitDataRequest request, HttpHeaders headers) {
+        String url = daJiaCrawlerProperties.getBaseUrl() + RequestUrl.INIT_DATA.uri();
+        ResponseEntity<String> stringResponseEntity = requestComponent.daJiaImgPost(url, request, String.class, headers);
+        return stringResponseEntity.getHeaders().getFirst("X-Imp-Token");
     }
 
     /**
@@ -356,6 +368,11 @@ public class DaJiaCrawlerRequestComponent {
         String url = RequestUrl.QRCODE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()) + "/" + orderNo + "/1";
         MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
         map.add("operatorCode", operatorCode);
+        try {
+            Thread.sleep(5000);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
         return DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
     }
@@ -388,4 +405,14 @@ public class DaJiaCrawlerRequestComponent {
         return  DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerDownloadResponse.class);
     }
 
+    public void policyQuery(String lastPolicyNo, HttpHeaders headers,String userCode) {
+        if (StringUtils.isEmpty(lastPolicyNo)){
+            return;
+        }
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("operatorCode",userCode);
+        String body = requestComponent.get(RequestUrl.POLICY_QUERY.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()) + lastPolicyNo, map, "", String.class, headers);
+        String string1 = DESEncryption.decryptStrToObject(body, String.class);
+        log.info("返回数据:{}",string1);
+    }
 }

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

@@ -38,6 +38,8 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     ELECTRON_POLICY_IO_DOWNLOAD("/api_vhl_prod/api/electronPolicyIODownload", "下载保单"),
     // 状态查询
     ORDER_LIST_REVISED("/api_vhl_prod/api/orderListRevised", "订单状态查询"),
+    // 政策查询
+    POLICY_QUERY("/api_vhl_prod/api/policyquery/","政策查询"),
     ;
 
     private final String uri;

+ 3 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/po/DaJiaCrawlerOrder.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.dajia.crawler.entity.po;
 
+import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerSaveResponse;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -64,4 +65,6 @@ public class DaJiaCrawlerOrder {
      */
     private String createTime;
 
+    private DaJiaCrawlerSaveResponse saveResponse;
+
 }

+ 1 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerChannelPackagesRequest.java

@@ -43,7 +43,7 @@ public class DaJiaCrawlerChannelPackagesRequest {
     public DaJiaCrawlerChannelPackagesRequest(DaJiaCrawlerConfigureParameters parameters, String operatorCode) {
         this.loginCompany = parameters.getLoginCompany();
         this.companyCode = parameters.getCDptCde();
-        this.combineProductCode = parameters.getCombineProductCode();
+        this.combineProductCode = "1469";
         this.operatorCode = operatorCode;
     }
 }

+ 8 - 4
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerPriceRequest.java

@@ -137,13 +137,17 @@ public class DaJiaCrawlerPriceRequest implements Serializable {
         // 商业险
         if (!ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo())) {
             this.businessInsurance = new BusinessInsuranceDTO(quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo());
-            proposalInfo.setMark("3");
         }else {
             this.businessInsurance = new BusinessInsuranceDTO();
         }
-
-        if (!ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo()) && !ObjectUtils.isEmpty(quoteVo.getCiRiskInfoVo())) {
+        boolean hasBiRisk = !ObjectUtils.isEmpty(quoteVo.getBiRiskInfoVo());
+        boolean hasCiRisk = !ObjectUtils.isEmpty(quoteVo.getCiRiskInfoVo());
+        if (hasBiRisk && hasCiRisk) {
             proposalInfo.setMark("1");
+        } else if (hasCiRisk) {
+            proposalInfo.setMark("2");
+        } else if (hasBiRisk) {
+            proposalInfo.setMark("3");
         }
         this.checkCarInformationDTO = new CheckCarInfomationDTO();
         String vehicleExhaust = car.getVehicleExhaust();
@@ -157,7 +161,7 @@ public class DaJiaCrawlerPriceRequest implements Serializable {
         }
         String startTime;
         String endTime;
-        if (!compulsoryInsurance.getProductInfo().getStartDate().equals("")) {
+        if (!ObjectUtils.isEmpty(quoteVo.getCiRiskInfoVo())) {
             startTime = compulsoryInsurance.getProductInfo().getStartDate();
             endTime = compulsoryInsurance.getProductInfo().getEndDate();
         } else {

+ 1 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerOrderServiceImpl.java

@@ -22,6 +22,7 @@ public class DaJiaCrawlerOrderServiceImpl implements DaJiaCrawlerOrderService {
     @Override
     public void saveOrderInfo(QuoteVo quoteVo, DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse,  String businessNo) {
         DaJiaCrawlerOrder daJiaCrawlerOrder = new DaJiaCrawlerOrder();
+        daJiaCrawlerOrder.setSaveResponse(daJiaCrawlerSaveResponse);
         daJiaCrawlerOrder.setId(quoteVo.getOrder().getOrdersNo());
         daJiaCrawlerOrder.setOrdersNo(daJiaCrawlerSaveResponse.getProposalInfo().getOrderNo());
         // 交强投保单号

+ 24 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java

@@ -10,6 +10,7 @@ import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCheckTokenRes
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
 import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
@@ -17,6 +18,8 @@ import org.springframework.util.StringUtils;
 
 import java.util.Optional;
 
+
+@Slf4j
 @Service
 @RequiredArgsConstructor
 public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuoteProcessService {
@@ -62,7 +65,7 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
     @Override
     public HttpHeaders getHeaders(String username, String password) {
         String authorization = daJiaCrawlerCacheComponent.getAuthorization(username);
-        if (!StringUtils.hasLength(authorization)) {
+        if (!StringUtils.hasText(authorization) || isTokenInvalid(username)) {
             authorization = login(username, password);
         }
         HttpHeaders headers = new HttpHeaders();
@@ -74,6 +77,26 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
         return headers;
     }
 
+    private boolean isTokenInvalid(String username) {
+        String userCode = daJiaCrawlerCacheComponent.getUserCode(username);
+        String tokenId = daJiaCrawlerCacheComponent.getTokenId(username);
+
+        try {
+            checkToken(userCode, tokenId);
+            return false;
+        } catch (Exception e) {
+            String errorMsg = e.getMessage();
+            // 401 代表 token 过期/未授权 → 标记为无效
+            if (errorMsg != null && errorMsg.contains("401 Unauthorized from")) {
+                log.warn("token 过期,自动重新登录: {}", errorMsg);
+                return true;
+            }
+            // 其他异常直接抛出
+            log.error("登录校验异常: {}", e.getMessage(), e);
+            throw new SystemException("登录异常");
+        }
+    }
+
     /**
      * 校验token
      * @param userCode

+ 35 - 8
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -1,13 +1,13 @@
 package com.jzg.quotation.dajia.crawler.service.impl;
 
 
-import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
-import com.jzg.commons.util.MinioUtils;
+import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
@@ -18,7 +18,6 @@ import com.jzg.quotation.dajia.crawler.build.DajiaCrawlerAuditResultsVoBuild;
 import com.jzg.quotation.dajia.crawler.component.BuildingAttributionInformation;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerCacheComponent;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerRequestComponent;
-import com.jzg.quotation.dajia.crawler.constant.enums.DaJiaCrawlerOrderState;
 import com.jzg.quotation.dajia.crawler.entity.DaJiaCrawlerConfigureParameters;
 import com.jzg.quotation.dajia.crawler.entity.po.DaJiaCrawlerOrder;
 import com.jzg.quotation.dajia.crawler.entity.request.*;
@@ -31,6 +30,8 @@ import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerRequest;
 import com.jzg.quotation.dajia.crawler.utils.ImagesEncrypt;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.redisson.api.RedissonClient;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
 
@@ -57,6 +58,7 @@ import java.util.stream.Collectors;
  * @author wenks
  * @since 2025/2/12
  */
+@Log4j2
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_DJPC)
 @RequiredArgsConstructor
 public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
@@ -76,6 +78,8 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     /** 大家财险爬虫报价流程服务,负责登录认证和请求头管理 */
     private final DaJiaCrawlerQuoteProcessService daJiaCrawlerQuoteProcessService;
 
+    private final RedissonClient redissonClient;
+
     /**
      * 用户登录认证
      * 
@@ -110,12 +114,10 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
-
         // 1.1 解析配置参数
         DaJiaCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(DaJiaCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         // 1.2 构建归属信息(机构、套餐、渠道信息)
         ProposalInfoDTO proposalInfoDTO = buildingAttributionInformation.build(parameters, userCode, headers);
-
         // 2.0 车型查询
         DaJiaCrawlerCarRequest daJiaCrawlerCarRequest = new DaJiaCrawlerCarRequest(quoteVo.getCarInfoVo(), parameters.getLoginCompany(), parameters.getCDptCde(), userCode);
         DaJiaCrawlerCarResponse daJiaCrawlerCarResponse = daJiaCrawlerRequestComponent.car(daJiaCrawlerCarRequest, headers);
@@ -142,9 +144,15 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
             businessInsuranceDTO.getProductInfo().setEndDate(endTime);
             crawlerPriceResponse = daJiaCrawlerRequestComponent.price(daJiaCrawlerPriceRequest, headers);
         }
+        String lastPolicyNo = crawlerPriceResponse.getCompulsoryInsurance().getProductInfo().getLastPolicyNo();
+
+        daJiaCrawlerRequestComponent.policyQuery(lastPolicyNo,headers,userCode);
+
+        log.info("报价返回参数:{}", JSONObject.toJSONString(crawlerPriceResponse));
         // 3.1 保存订单到保险公司系统
         DaJiaCrawlerSaveRequest daJiaCrawlerSaveRequest = new DaJiaCrawlerSaveRequest(crawlerPriceResponse, userCode, quoteVo);
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerRequestComponent.save(daJiaCrawlerSaveRequest, headers);
+        log.info("daJiaCrawlerSaveResponse:{}",JSONObject.toJSONString(daJiaCrawlerSaveResponse));
         // 3.2 初始化订单数据
         DaJiaCrawlerInitDataRequest daJiaCrawlerInitDataRequest = new DaJiaCrawlerInitDataRequest(daJiaCrawlerSaveResponse.getCompulsoryInsurance(), daJiaCrawlerSaveResponse.getBusinessInsurance());
         daJiaCrawlerRequestComponent.initData(daJiaCrawlerInitDataRequest, headers);
@@ -158,6 +166,8 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         return DaJiaCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder().getOrdersNo(), quoteVo, daJiaCrawlerSaveResponse);
     }
 
+
+
     // 截取重复投保终保日期
     private static final Pattern DUPLICATE_END_TIME_PATTERN = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
 
@@ -176,6 +186,8 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     }
 
 
+
+
     /**
      * 订单核保处理
      * 
@@ -194,7 +206,15 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(daJiaCrawlerOrder.getOrdersNo());
         // 提交核保申请
         DaJiaCrawlerGenerateResponse response = daJiaCrawlerRequestComponent.generate(daJiaCrawlerSaveResponse, headers);
-        return DajiaCrawlerAuditResultsVoBuild.buildUnderwritingResultsVo(daJiaCrawlerOrder.getOrdersNo(), response);
+        log.info("大家核保数据返回:{}",JSONObject.toJSONString(response));
+        UnderwritingResultsVo underwritingResultsVo = DajiaCrawlerAuditResultsVoBuild.buildUnderwritingResultsVo(daJiaCrawlerOrder.getOrdersNo(), response);
+        if (response.getStatus().equals("4")){
+            PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+            paymentLinkVo.setOrder(underwritingVo.getOrder());
+            PaymentLinkResultsVo paymentLink = getPaymentLink(paymentLinkVo);
+            underwritingResultsVo.setPaymentLink(paymentLink.getPaymentLink());
+        }
+        return underwritingResultsVo;
     }
 
     /**
@@ -207,13 +227,15 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
      */
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
+
         AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         // 生成支付二维码
         DaJiaCrawlerQrcodeResponse daJiaCrawlerQrcodeResponse = daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(), userCode, headers);
-        return new PaymentLinkResultsVo(true, daJiaCrawlerQrcodeResponse.getUrl(), "");
+        log.info("获取支付链接返回数据:{}",JSONObject.toJSONString(daJiaCrawlerQrcodeResponse));
+        return new PaymentLinkResultsVo(true, daJiaCrawlerQrcodeResponse.getImageContent(), "");
     }
 
     /**
@@ -238,12 +260,17 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(insuranceUploadImageVo.getOrder()
                 .getOrdersNo());
         List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
-        
+        DaJiaCrawlerInitDataRequest daJiaCrawlerInitDataRequest = new DaJiaCrawlerInitDataRequest(daJiaCrawlerOrder.getSaveResponse().getCompulsoryInsurance(), daJiaCrawlerOrder.getSaveResponse().getBusinessInsurance());
+        headers.set("X-Imp-Token",daJiaCrawlerRequestComponent.initImgData(daJiaCrawlerInitDataRequest, headers));
+
         // 按影像类型分组处理
         imageVoList.forEach(imageVo -> {
             // 1. 获取上传文件标志和预签名URL
             DaJiaCrawlerUploadSignsRequest daJiaCrawlerUploadSignsRequest = new DaJiaCrawlerUploadSignsRequest(daJiaCrawlerOrder.getBusinessNo(), imageVo.getInsuranceImageCode(), imageVo.getImageBase64List());
             DaJiaCrawlerUploadSignsResponse daJiaCrawlerUploadSignsResponse = daJiaCrawlerRequestComponent.uploadSigns(daJiaCrawlerUploadSignsRequest, headers);
+            if (com.jzg.commons.util.StringUtils.equals("FAIL",daJiaCrawlerUploadSignsResponse.getCode())){
+                throw new SystemException("获取上传影像异常:" + daJiaCrawlerUploadSignsResponse.getMessage());
+            }
             // 2. 构建文件名到上传信息的映射
             Map<String, DaJiaCrawlerUploadSignsResponse.DataDTO> dataDTOMap = daJiaCrawlerUploadSignsResponse.getData()
                     .stream()