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

为所有保司增加登录检测功能

liub 4 месяцев назад
Родитель
Сommit
d0dc0216df
59 измененных файлов с 862 добавлено и 410 удалено
  1. 3 0
      commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlAgreementAttribution.java
  2. 11 8
      platform/src/main/resources/mapper/PtlAgreementAttributionMapper.xml
  3. 0 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerQuoteProcessService.java
  4. 64 67
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java
  5. 5 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java
  6. 7 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/BoHaiCrawlerQuoteProcessService.java
  7. 23 18
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerQuoteProcessServiceImpl.java
  8. 8 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java
  9. 1 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  10. 29 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java
  11. 1 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/GetCaptchaBaseService.java
  12. 7 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationBaseService.java
  13. 1 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationCrawlerBaseService.java
  14. 8 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiRequestImpl.java
  15. 9 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/DaJiaCrawlerQuoteProcessService.java
  16. 12 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java
  17. 49 32
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  18. 8 2
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java
  19. 3 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/component/GuoRenCrawlerRequestComponent.java
  20. 0 6
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerOrderService.java
  21. 19 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerQuoteProcessService.java
  22. 0 2
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerRequest.java
  23. 0 6
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerOrderServiceImpl.java
  24. 58 27
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerQuoteProcessServiceImpl.java
  25. 17 16
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerRequestImpl.java
  26. 160 135
      tenant/insurance/quotation-guoshou/src/main/java/com/jzg/quotation/guoshou/crawler/service/Impl/GuoshouCrawlerRequestImpl.java
  27. 2 4
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java
  28. 13 0
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  29. 1 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java
  30. 28 20
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  31. 8 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java
  32. 19 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java
  33. 7 0
      tenant/insurance/quotation-renbao/src/main/java/com/jzg/quotation/renbao/crawler/service/impl/RenBaoCrawlerRequestImpl.java
  34. 9 1
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/RenBaoNewCrawlerGetToken.java
  35. 12 1
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerGetTokenImpl.java
  36. 6 0
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java
  37. 8 0
      tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/ShenNengCrawlerLoginService.java
  38. 9 0
      tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/impl/ShenNengCrawlerLoginServiceImpl.java
  39. 8 0
      tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/impl/ShenNengCrawlerRequestImpl.java
  40. 26 18
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  41. 10 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java
  42. 0 1
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKQuotationBaseService.java
  43. 9 0
      tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/TaiPingYangCrawlerQuoteProcessService.java
  44. 10 1
      tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/impl/TaiPingYangCrawlerQuoteProcessServiceImpl.java
  45. 9 2
      tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/impl/TaiPingYangCrawlerRequestImpl.java
  46. 8 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerQuoteProcessService.java
  47. 22 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java
  48. 6 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java
  49. 9 0
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java
  50. 8 0
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  51. 32 22
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java
  52. 9 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/ZhongAnQuotaionApiBaseServiceImpl.java
  53. 8 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/service/impl/ZhongMeiApiRequestImpl.java
  54. 2 1
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java
  55. 17 6
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java
  56. 8 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java
  57. 8 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/ZiJinCrawlerQuoteProcessService.java
  58. 22 7
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerQuoteProcessServiceImpl.java
  59. 6 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlAgreementAttribution.java

@@ -91,6 +91,9 @@ public class PtlAgreementAttribution extends BaseModel {
     @TableField(exist = false)
     private String deptName;
 
+    @TableField(exist = false)
+    private String companyCode;
+
     public PtlAgreementAttribution(PtlAgreementAttributionSaveVo ptlAgreementAttributionSaveVo,PtlInsAttributionTemplate ptlInsAttributionTemplate,String esmInsCompanyName) {
         this.id = IdGenerate.nextId();
         this.userDept = ptlAgreementAttributionSaveVo.getUserDept();

+ 11 - 8
platform/src/main/resources/mapper/PtlAgreementAttributionMapper.xml

@@ -23,6 +23,7 @@
         paa.create_time,
         paa.update_time,
         eic.name_simple as insCompanyName,
+        eic.company_code as companyCode,
         pau.url as url,
         sd.name as deptName
         from
@@ -55,16 +56,18 @@
 
     <select id="getAgreementAttribution" resultMap="BaseResultMap">
         select
-            *,
-            pau.url as url,
-            sd.name as deptName
+        *,
+        pau.url as url,
+        sd.name as deptName,
+        eic.company_code as companyCode
         from
-            ptl_agreement_attribution paa
-                left join ptl_agreement_url pau on paa.login_url = pau.id
-                left join sys_dept sd on paa.user_dept = sd.id
+        ptl_agreement_attribution paa
+        left join ptl_agreement_url pau on paa.login_url = pau.id
+        left join sys_dept sd on paa.user_dept = sd.id
+        left join esm_ins_company eic on paa.ins_company_id = eic.id
         where
-            1=1
-          and paa.is_delete = '0'
+        1=1
+        and paa.is_delete = '0'
         <if test="id != null and id != ''">
             and paa.id = #{id}
         </if>

+ 0 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerQuoteProcessService.java

@@ -9,8 +9,6 @@ public interface AnShengCrawlerQuoteProcessService {
     /**
      * 获取请求头信息
      *
-     * @param username 用户名
-     * @param password 密码
      * @return 请求头
      */
     HttpHeaders getHttpHeaders(AttributionInformationVo attributionInformationVo);

+ 64 - 67
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -5,6 +5,7 @@ import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 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.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.ansheng.crawler.build.AnShengCrawlerApplyApplicationRequestBuild;
 import com.jzg.quotation.ansheng.crawler.build.AnShengCrawlerQuoteResultsVoBuild;
@@ -20,7 +21,9 @@ import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerQuoteProcessServi
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerRequest;
 import com.jzg.quotation.ansheng.crawler.utils.CheckVehicleCodeSecretGenerateUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
+import com.jzg.quotation.commons.component.DistributedLockComponent;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
@@ -49,6 +52,8 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     private final AnShengCrawlerCacheComponent anShengCrawlerCacheComponent;
 
+    private final DistributedLockComponent distributedLockComponent;
+
     private final AnShengCrawlerQuoteProcessService anShengCrawlerQuoteProcessService;
 
     @Override
@@ -56,16 +61,29 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         anShengCrawlerLoginService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String authorization = anShengCrawlerCacheComponent.getAuthorization(detectLoginRequest.getUsername());
+        if (!StringUtils.hasText(authorization)) {
+            try {
+                authorization = distributedLockComponent.blockingExecute(AnShengCrawlerCacheComponent.ACCOUNT_LOCKOUT + detectLoginRequest.getUsername(), () -> anShengCrawlerLoginService.login(username, password));
+            } catch (Exception e) {
+                throw new SystemException("登录失败");
+            }
+        }
+        return StringUtils.hasText(authorization);
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         // 订单号
         final String ordersNo = quoteVo.getOrder().getOrdersNo();
         // 请求头信息
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(quoteVo.getOrder()
-                .getAttributionInformationVo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(quoteVo.getOrder().getAttributionInformationVo());
         // 归属信息
-        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(quoteVo.getOrder()
-                .getAgreementId(), httpHeaders);
+        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(quoteVo.getOrder().getAgreementId(), httpHeaders);
 
         DepartmentPlanCode departmentPlanCode = DepartmentPlanCode.PLAN_109;
         // 新能源
@@ -85,7 +103,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerSearchVehicleByVinResponse.DataDTO dataDTO = CarModelsFilterUtils.to(dataDTOS, quoteVo.getCarInfoVo());
         // 报价
         AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
-        log.info("安盛报价参数:{}",JSONObject.toJSONString(crawlerCalculatePremiumApply));
+        log.info("安盛报价参数:{}", JSONObject.toJSONString(crawlerCalculatePremiumApply));
         AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
         // 处理重复投保
         if (calculatePremiumApply.getMessage().contains("重复投保")) {
@@ -93,22 +111,22 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
             String endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
             crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceBeginTime(startTime);
             crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceEndTime(endTime);
-            log.info("安盛报价重复投保参数:{}",JSONObject.toJSONString(crawlerCalculatePremiumApply));
+            log.info("安盛报价重复投保参数:{}", JSONObject.toJSONString(crawlerCalculatePremiumApply));
             calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
         }
         if (calculatePremiumApply.getCode() == 200) {
             // 缓存报价信息
             //  处理报价返回起止时间
-            calculatePremiumApply.getData().getContracts().forEach(v ->{
-                crawlerCalculatePremiumApply.getContracts().forEach(va ->{
+            calculatePremiumApply.getData().getContracts().forEach(v -> {
+                crawlerCalculatePremiumApply.getContracts().forEach(va -> {
                     AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyBaseDTO policyBase = va.getPolicyBase();
-                    if (StringUtils.equals(v.getPlanCode(),policyBase.getPlanCode())){
+                    if (StringUtils.equals(v.getPlanCode(), policyBase.getPlanCode())) {
                         policyBase.setInsuranceBeginTime(v.getInsuranceBeginTime());
                         policyBase.setInsuranceEndTime(v.getInsuranceEndTime());
                     }
                 });
             });
-            log.info("安盛报价返回数据:{}",JSONObject.toJSONString(calculatePremiumApply));
+            log.info("安盛报价返回数据:{}", JSONObject.toJSONString(calculatePremiumApply));
             AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = AnShengCrawlerApplyApplicationRequestBuild.build(crawlerCalculatePremiumApply, calculatePremiumApply, userDetailResponse, compulsoryVersionNo);
             // 缓存数据
             anShengCrawlerCacheComponent.cacheQuoteRequest(ordersNo, autoSpecialPromiseRequest);
@@ -123,6 +141,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     /**
      * 提取系统自动分配的起保时间
+     *
      * @param returnMessage 核心提示
      * @return 提取到的时间字符串,未提取到返回 null
      */
@@ -142,35 +161,27 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         // 获取报价信息
         AnShengCrawlerApplyApplicationRequest applicationRequest = anShengCrawlerCacheComponent.getQuoteResponse(ordersNo);
         // 获取图片上传信息
-        List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyAttachmentsDTO> imagesInfo = anShengCrawlerCacheComponent.getImagesInfo(underwritingVo.getOrder()
-                .getOrdersNo());
+        List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyAttachmentsDTO> imagesInfo = anShengCrawlerCacheComponent.getImagesInfo(underwritingVo.getOrder().getOrdersNo());
         // 请求头
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(underwritingVo.getOrder()
-                .getAttributionInformationVo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(underwritingVo.getOrder().getAttributionInformationVo());
         // 获取特别约定
         AnShengCrawlerAutoSpecialPromiseResponse autoSpecialPromiseResponse = anShengCrawlerRequestComponent.autoSpecialPromise(applicationRequest, httpHeaders);
         // 核保规则
         AnShengCrawlerRuleCheckForSimpleResponse anShengCrawlerApplyApplicationResponse = anShengCrawlerRequestComponent.principiumRuleCheckForSimple(applicationRequest, httpHeaders);
-        Map<String, AnShengCrawlerAutoSpecialPromiseResponse.DataDTO> stringDataDTOMap = autoSpecialPromiseResponse.getData()
-                .stream()
-                .collect(Collectors.toMap(AnShengCrawlerAutoSpecialPromiseResponse.DataDTO::getPlanCode, x -> x));
-        Map<String, AnShengCrawlerRuleCheckForSimpleResponse.DataDTO> ruleCheckForSimpleData = anShengCrawlerApplyApplicationResponse.getData()
-                .stream()
-                .collect(Collectors.toMap(AnShengCrawlerRuleCheckForSimpleResponse.DataDTO::getPlanCode, x -> x));
+        Map<String, AnShengCrawlerAutoSpecialPromiseResponse.DataDTO> stringDataDTOMap = autoSpecialPromiseResponse.getData().stream().collect(Collectors.toMap(AnShengCrawlerAutoSpecialPromiseResponse.DataDTO::getPlanCode, x -> x));
+        Map<String, AnShengCrawlerRuleCheckForSimpleResponse.DataDTO> ruleCheckForSimpleData = anShengCrawlerApplyApplicationResponse.getData().stream().collect(Collectors.toMap(AnShengCrawlerRuleCheckForSimpleResponse.DataDTO::getPlanCode, x -> x));
         // 核保加入上传的影像、特别约定信息
         applicationRequest.getContracts().forEach(contract -> {
             // 特别约定
-            AnShengCrawlerAutoSpecialPromiseResponse.DataDTO promiseData = stringDataDTOMap.get(contract.getPolicyBase()
-                    .getPlanCode());
+            AnShengCrawlerAutoSpecialPromiseResponse.DataDTO promiseData = stringDataDTOMap.get(contract.getPolicyBase().getPlanCode());
             // 核保规则
-            AnShengCrawlerRuleCheckForSimpleResponse.DataDTO simpleData = ruleCheckForSimpleData.get(contract.getPolicyBase()
-                    .getPlanCode());
+            AnShengCrawlerRuleCheckForSimpleResponse.DataDTO simpleData = ruleCheckForSimpleData.get(contract.getPolicyBase().getPlanCode());
             contract.getPolicyBase().setAlterableSpecialPromise(promiseData.getAlterableSpecialPromise());
             contract.setPolicyAttachments(new ArrayList<>());
             contract.getPolicyBase().setFirstTrialTaskNo(simpleData.getFirstTrialTaskNo());
             contract.getTargetList().get(0).setVehicleTax(applicationRequest.getContracts().get(0).getTargetList().get(0).getVehicleTax());
         });
-        log.info("安盛核保参数:{}",JSONObject.toJSONString(applicationRequest));
+        log.info("安盛核保参数:{}", JSONObject.toJSONString(applicationRequest));
         // 核保
         AnShengCrawlerApplyApplicationResponse applyApplicationResponse = anShengCrawlerRequestComponent.applyApplication(applicationRequest, httpHeaders);
         // 投保订单号保存
@@ -194,31 +205,28 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     /**
      * 保存投保单号
-     * @param ordersNo 订单号
+     *
+     * @param ordersNo                 订单号
      * @param applyApplicationResponse 核保信息
      */
     private void saveThePolicyNumber(String ordersNo, AnShengCrawlerApplyApplicationResponse applyApplicationResponse) {
         log.info("安盛核保返回参数:{}", JSONObject.toJSONString(applyApplicationResponse));
         AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(ordersNo);
         List<AnShengCrawlerOrder.NiInfo> niInfoList = new ArrayList<>();
-        Optional.ofNullable(applyApplicationResponse.getData())
-                .orElse(new ArrayList<>())
-                .forEach(dataDTO -> {
-                    // 交强险
-                    if (DepartmentPlanCode.PLAN_105.getCode().equals(dataDTO.getPlanCode())) {
-                        anShengCrawlerOrder.setCiPolicyNo(dataDTO.getApplyPolicyNo());
-                        // 商业险
-                    } else if (DepartmentPlanCode.PLAN_109.getCode()
-                            .equals(dataDTO.getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
-                            .equals(dataDTO.getPlanCode())) {
-                        anShengCrawlerOrder.setBiPolicyNo(dataDTO.getApplyPolicyNo());
-                    }else {
-                        String jy = com.jzg.commons.util.StringUtils.isEmpty(dataDTO.getProductCode()) ? "" : dataDTO.getProductCode();
-                        AnShengCrawlerOrder.NiInfo niInfo = new AnShengCrawlerOrder.NiInfo();
-                        niInfo.setNiPolicyNo(jy);
-                        niInfoList.add(niInfo);
-                    }
-                });
+        Optional.ofNullable(applyApplicationResponse.getData()).orElse(new ArrayList<>()).forEach(dataDTO -> {
+            // 交强险
+            if (DepartmentPlanCode.PLAN_105.getCode().equals(dataDTO.getPlanCode())) {
+                anShengCrawlerOrder.setCiPolicyNo(dataDTO.getApplyPolicyNo());
+                // 商业险
+            } else if (DepartmentPlanCode.PLAN_109.getCode().equals(dataDTO.getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode().equals(dataDTO.getPlanCode())) {
+                anShengCrawlerOrder.setBiPolicyNo(dataDTO.getApplyPolicyNo());
+            } else {
+                String jy = com.jzg.commons.util.StringUtils.isEmpty(dataDTO.getProductCode()) ? "" : dataDTO.getProductCode();
+                AnShengCrawlerOrder.NiInfo niInfo = new AnShengCrawlerOrder.NiInfo();
+                niInfo.setNiPolicyNo(jy);
+                niInfoList.add(niInfo);
+            }
+        });
         anShengCrawlerOrder.setNiInfos(niInfoList);
         anShengCrawlerOrderService.saveAnShengCrawlerOrder(anShengCrawlerOrder);
     }
@@ -227,25 +235,21 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         // 请求头
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(paymentLinkVo.getOrder()
-                .getAttributionInformationVo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(paymentLinkVo.getOrder().getAttributionInformationVo());
         // 归属信息
-        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(paymentLinkVo.getOrder()
-                .getAgreementId(), httpHeaders);
-        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(paymentLinkVo.getOrder()
-                .getOrdersNo());
+        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(paymentLinkVo.getOrder().getAgreementId(), httpHeaders);
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
         // 获取支付链接
         AnShengCrawlerPaymentRequest anShengCrawlerPaymentRequest = new AnShengCrawlerPaymentRequest(anShengCrawlerOrder, userDetailResponse.getDepartmentCode(), anShengCrawlerOrder.getTotalPremium());
         String paymentUrl = anShengCrawlerRequestComponent.payment(anShengCrawlerPaymentRequest, httpHeaders);
-        log.info("获取安盛支付二维码地址长度:{}",StringUtils.isNotEmpty(paymentUrl) ? paymentUrl.length() : "无法获取支付链接");
+        log.info("获取安盛支付二维码地址长度:{}", StringUtils.isNotEmpty(paymentUrl) ? paymentUrl.length() : "无法获取支付链接");
         return new PaymentLinkResultsVo(true, paymentUrl, "");
     }
 
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
         // 请求头信息
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(insuranceUploadImageVo.getOrder()
-                .getAttributionInformationVo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(insuranceUploadImageVo.getOrder().getAttributionInformationVo());
 
         // 单个上传影像
         List<AnShengCrawlerFileUploadResponse.DataDTO> dataDTOS = new ArrayList<>();
@@ -263,8 +267,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
         // 缓存影像信息
         List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyAttachmentsDTO> policyAttachmentsDTOList = AnShengCrawlerFileUploadResponse.toPolicyAttachmentsDTOList(dataDTOS);
-        anShengCrawlerCacheComponent.cacheImagesInfo(insuranceUploadImageVo.getOrder()
-                .getOrdersNo(), policyAttachmentsDTOList);
+        anShengCrawlerCacheComponent.cacheImagesInfo(insuranceUploadImageVo.getOrder().getOrdersNo(), policyAttachmentsDTOList);
     }
 
     @Override
@@ -276,10 +279,8 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
         DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
 
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(downloadPolicyVo.getOrder()
-                .getAttributionInformationVo());
-        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(downloadPolicyVo.getOrder()
-                .getOrdersNo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(downloadPolicyVo.getOrder().getAttributionInformationVo());
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(downloadPolicyVo.getOrder().getOrdersNo());
 
         // 交强保单和标志
         Optional.ofNullable(anShengCrawlerOrder.getCiPolicyNo()).ifPresent(policyNo -> {
@@ -307,19 +308,15 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {
         // 获取订单信息
-        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(orderStatusVo.getOrder()
-                .getOrdersNo());
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(orderStatusVo.getOrder().getOrdersNo());
         // 获取请求头
-        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(orderStatusVo.getOrder()
-                .getAttributionInformationVo());
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(orderStatusVo.getOrder().getAttributionInformationVo());
         // 归属信息
-        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(orderStatusVo.getOrder()
-                .getAgreementId(), httpHeaders);
+        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(orderStatusVo.getOrder().getAgreementId(), httpHeaders);
         // 查询订单状态
         AnShengCrawlerComprehensiveQueryInsurenetRequest crawlerComprehensiveQueryInsurenet = new AnShengCrawlerComprehensiveQueryInsurenetRequest(userDetailResponse.getAgentCode(), userDetailResponse.getDepartmentCode(), anShengCrawlerOrder.getOrderNo(), anShengCrawlerOrder.getRecordingTime());
         AnShengCrawlerComprehensiveQueryInsurenetResponse queryDocumentsInformationResponse = anShengCrawlerRequestComponent.comprehensiveQueryInsurenet(crawlerComprehensiveQueryInsurenet, httpHeaders);
-        List<AnShengCrawlerComprehensiveQueryInsurenetResponse.DataDTO.ListDTO> list = queryDocumentsInformationResponse.getData()
-                .getList();
+        List<AnShengCrawlerComprehensiveQueryInsurenetResponse.DataDTO.ListDTO> list = queryDocumentsInformationResponse.getData().getList();
 
         return null;
     }

+ 5 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/service/impl/BoHaiApiRequestImpl.java

@@ -25,6 +25,7 @@ import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateUtil;
 import lombok.RequiredArgsConstructor;
@@ -56,6 +57,10 @@ public class BoHaiApiRequestImpl implements BoHaiApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return true;
+    }
 
     /**
      * 重复报价

+ 7 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/BoHaiCrawlerQuoteProcessService.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.bohai.crawler.service;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import org.springframework.http.HttpHeaders;
 
 /**
@@ -25,4 +26,10 @@ public interface BoHaiCrawlerQuoteProcessService {
      */
     HttpHeaders getHeaders(String username, String password);
 
+    /**
+     * 检测登录
+     * @param detectLoginRequest
+     * @return
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
 }

+ 23 - 18
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerQuoteProcessServiceImpl.java

@@ -10,6 +10,7 @@ import com.jzg.quotation.bohai.crawler.entity.response.BoHaiCrawlerCheckTokenRes
 import com.jzg.quotation.bohai.crawler.service.BoHaiCrawlerQuoteProcessService;
 import com.jzg.quotation.bohai.crawler.util.DESEncryption;
 import com.jzg.quotation.bohai.crawler.util.PythonExecutor;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RBucket;
@@ -65,6 +66,16 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
     // 登陆次数
     public static final int LOGINS_NUMBER = 3;
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        // 从Redis获取sessionId
+        String sessionId = getOrRefreshSessionId();
+        if (!StringUtils.hasLength(sessionId)) {
+            sessionId = getSessionId();
+        }
+        return StringUtils.hasLength(sessionId);
+    }
+
     /**
      * 登录
      * @param username 用户名
@@ -126,6 +137,10 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
 
         // 从Redis获取sessionId
         String sessionId = getOrRefreshSessionId();
+
+        if (StringUtils.hasLength(sessionId)) {
+            sessionId = getSessionId();
+        }
         httpHeaders.set("sessionId", sessionId);
         return httpHeaders;
     }
@@ -153,7 +168,7 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
      *
      * @return sessionId字符串
      */
-    private String getOrRefreshSessionId() {
+    public String getOrRefreshSessionId() {
         // 从Redis获取sessionId
         RBucket<String> bucket = redissonClient.getBucket(BOHAI_SESSION_ID_KEY);
         String sessionId = bucket.get();
@@ -164,23 +179,6 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
             return sessionId;
         }
 
-        // Redis中不存在,调用Python脚本获取sessionId
-        log.info("Redis缓存中sessionId不存在,开始调用Python脚本获取");
-        sessionId = PythonExecutor.executeAndGetSessionId(
-                PYTHON_SCRIPT_PATH,
-                PYTHON_EXECUTABLE_PATH,
-                PYTHON_EXECUTION_TIMEOUT
-        );
-
-        // 校验获取结果
-        if (!StringUtils.hasLength(sessionId)) {
-            log.error("调用Python脚本获取sessionId失败");
-            throw new SystemException("获取sessionId失败");
-        }
-
-        // 将sessionId存入Redis并设置过期时间
-        bucket.set(sessionId, Duration.ofSeconds(SESSION_ID_EXPIRE_SECONDS));
-        log.info("sessionId已存入Redis缓存,过期时间: {}秒", SESSION_ID_EXPIRE_SECONDS);
         return sessionId;
     }
 
@@ -192,16 +190,23 @@ public class BoHaiCrawlerQuoteProcessServiceImpl implements BoHaiCrawlerQuotePro
      * @return sessionId字符串
      */
     private String getSessionId() {
+        RBucket<String> bucket = redissonClient.getBucket(BOHAI_SESSION_ID_KEY);
+
         String sessionId = PythonExecutor.executeAndGetSessionId(
                 PYTHON_SCRIPT_PATH,
                 PYTHON_EXECUTABLE_PATH,
                 PYTHON_EXECUTION_TIMEOUT
         );
+
         // 校验获取结果
         if (!StringUtils.hasLength(sessionId)) {
             log.error("调用Python脚本获取sessionId失败");
             throw new SystemException("获取sessionId失败");
         }
+
+        // 将sessionId存入Redis并设置过期时间
+        bucket.set(sessionId, Duration.ofSeconds(SESSION_ID_EXPIRE_SECONDS));
+        log.info("sessionId已存入Redis缓存,过期时间: {}秒", SESSION_ID_EXPIRE_SECONDS);
         return sessionId;
     }
 }

+ 8 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java

@@ -29,6 +29,7 @@ import com.jzg.quotation.bohai.crawler.util.OrderNoGenerator;
 import com.jzg.quotation.bohai.crawler.util.PythonExecutor;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.bohai.crawler.build.BoHaiCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.bohai.crawler.component.BoHaiCrawlerRequestComponent;
@@ -76,6 +77,8 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
 
     private final BoHaiCrawlerQuoteProcessService boHaiCrawlerQuoteProcessService;
 
+    private final BoHaiCrawlerQuoteProcessServiceImpl oHaiCrawlerQuoteProcessServiceImpl;
+
     /**
      * 说明:E:\project\memorize_backend\venv\Scripts\python.exe   这是我本地的python解释器路径,这个需要修改为你本地的路径
      */
@@ -93,6 +96,11 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         boHaiCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return boHaiCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+    }
+    
     /**
      * 报价
      *

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

@@ -403,6 +403,7 @@ public class RequestComponent {
             try {
                 // 使用FastJSON手动解析JSON
                 result = JSON.parseObject(filteredResponse, responseClass);
+                log.info("JSON解析成功,解析后的响应内容: {}", result);
             } catch (Exception e) {
                 log.error("JSON解析失败,过滤后的响应内容: {}", filteredResponse, e);
                 throw new WebClientResponseException(

+ 29 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java

@@ -0,0 +1,29 @@
+package com.jzg.quotation.commons.entity;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class DetectLoginRequest {
+
+    /**
+     * 请求类型  1 api 2 python
+     */
+    private  String apiType;
+
+    /**
+     * 承保机构编码
+     */
+    private String companyCode;
+
+    /**
+     * 账号
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String password;
+}

+ 1 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/GetCaptchaBaseService.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.commons.service;
 
 
+import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 

+ 7 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationBaseService.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.commons.service;
 
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 
 /**
  * 报价基类
@@ -50,5 +51,10 @@ public interface QuotationBaseService {
      */
     OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception;
 
-
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest 检测登录信息
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
 }

+ 1 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationCrawlerBaseService.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.commons.service;
 
 
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 
 
 /**

+ 8 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiRequestImpl.java

@@ -19,6 +19,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.dajia.api.build.DaJiaAPIQuoteResultsVoBuild;
@@ -68,6 +69,13 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
         log.info("大家保险车险API报价:quoteVo=[{}]", JSONUtil.toJsonStr(quoteVo));

+ 9 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/DaJiaCrawlerQuoteProcessService.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.dajia.crawler.service;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import org.springframework.http.HttpHeaders;
 
 /**
@@ -18,6 +19,14 @@ public interface DaJiaCrawlerQuoteProcessService {
      */
     String login(String username, String password);
 
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest 检测登录请求
+     * @return 检测结果
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
+
     /**
      * 获取请求头信息
      *

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

@@ -1,6 +1,7 @@
 package com.jzg.quotation.dajia.crawler.service.impl;
 
 import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerCacheComponent;
 import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerRequestComponent;
 import com.jzg.quotation.dajia.crawler.entity.request.DaJiaCrawlerCheckTokenRequest;
@@ -31,6 +32,17 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
     // 登陆次数
     public static final int LOGINS_NUMBER = 3;
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String authorization = daJiaCrawlerCacheComponent.getAuthorization(username);
+        if (!StringUtils.hasText(authorization) || isTokenInvalid(username)) {
+            authorization = login(username, password);
+        }
+        return StringUtils.hasText(authorization);
+    }
+
     /**
      * 登录
      * @param username 用户名

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

@@ -10,6 +10,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 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.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
@@ -43,7 +44,7 @@ import java.util.stream.Collectors;
 
 /**
  * 大家财险爬虫报价服务实现类
- * 
+ *
  * <p>通过模拟浏览器操作的方式实现大家财险的完整报价流程,包括:</p>
  * <ul>
  *   <li>用户登录认证</li>
@@ -54,7 +55,7 @@ import java.util.stream.Collectors;
  *   <li>保单下载</li>
  *   <li>订单状态查询</li>
  * </ul>
- * 
+ *
  * @author wenks
  * @since 2025/2/12
  */
@@ -63,26 +64,36 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
-    /** 大家财险爬虫请求组件,负责与保险公司API的交互 */
+    /**
+     * 大家财险爬虫请求组件,负责与保险公司API的交互
+     */
     private final DaJiaCrawlerRequestComponent daJiaCrawlerRequestComponent;
 
-    /** 归属信息构建组件,用于构建机构、套餐、渠道等归属信息 */
+    /**
+     * 归属信息构建组件,用于构建机构、套餐、渠道等归属信息
+     */
     private final BuildingAttributionInformation buildingAttributionInformation;
 
-    /** 大家财险缓存组件,负责认证信息和订单数据的缓存管理 */
+    /**
+     * 大家财险缓存组件,负责认证信息和订单数据的缓存管理
+     */
     private final DaJiaCrawlerCacheComponent daJiaCrawlerCacheComponent;
 
-    /** 大家财险订单服务,负责订单数据的持久化操作 */
+    /**
+     * 大家财险订单服务,负责订单数据的持久化操作
+     */
     private final DaJiaCrawlerOrderService daJiaCrawlerOrderService;
 
-    /** 大家财险爬虫报价流程服务,负责登录认证和请求头管理 */
+    /**
+     * 大家财险爬虫报价流程服务,负责登录认证和请求头管理
+     */
     private final DaJiaCrawlerQuoteProcessService daJiaCrawlerQuoteProcessService;
 
     private final RedissonClient redissonClient;
 
     /**
      * 用户登录认证
-     * 
+     *
      * @param loginBase 登录基础信息,包含用户名和密码
      */
     @Override
@@ -90,9 +101,16 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         daJiaCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return daJiaCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+
+    }
+
+
     /**
      * 车险报价核心流程
-     * 
+     *
      * <p>完整的报价流程包括以下步骤:</p>
      * <ol>
      *   <li>获取认证信息和配置参数</li>
@@ -104,7 +122,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
      *   <li>缓存订单数据</li>
      *   <li>持久化订单信息</li>
      * </ol>
-     * 
+     *
      * @param quoteVo 报价请求参数,包含车辆信息、投保人信息等
      * @return QuoteResultsVo 报价结果,包含保费明细、订单号等信息
      */
@@ -135,7 +153,8 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         String message = crawlerPriceResponse.getIncreasedValueMsg();
         if (message.contains("重复投保")) {
             String startTime = extractDuplicateEndTime(message);
-            String endTime = TimeProcessing.minusOneSecondAfterYear(startTime);;
+            String endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
+            ;
             CompulsoryInsuranceDTO compulsoryInsuranceDTO = daJiaCrawlerPriceRequest.getCompulsoryInsurance();
             BusinessInsuranceDTO businessInsuranceDTO = daJiaCrawlerPriceRequest.getBusinessInsurance();
             compulsoryInsuranceDTO.getProductInfo().setStartDate(startTime);
@@ -146,13 +165,13 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         }
         String lastPolicyNo = crawlerPriceResponse.getCompulsoryInsurance().getProductInfo().getLastPolicyNo();
 
-        daJiaCrawlerRequestComponent.policyQuery(lastPolicyNo,headers,userCode);
+        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));
+        log.info("daJiaCrawlerSaveResponse:{}", JSONObject.toJSONString(daJiaCrawlerSaveResponse));
         // 3.2 初始化订单数据
         DaJiaCrawlerInitDataRequest daJiaCrawlerInitDataRequest = new DaJiaCrawlerInitDataRequest(daJiaCrawlerSaveResponse.getCompulsoryInsurance(), daJiaCrawlerSaveResponse.getBusinessInsurance());
         daJiaCrawlerRequestComponent.initData(daJiaCrawlerInitDataRequest, headers);
@@ -167,12 +186,12 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     }
 
 
-
     // 截取重复投保终保日期
     private static final Pattern DUPLICATE_END_TIME_PATTERN = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
 
     /**
      * 提取系统自动分配的起保时间
+     *
      * @param returnMessage 核心提示
      * @return 提取到的时间字符串,未提取到返回 null
      */
@@ -186,13 +205,11 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     }
 
 
-
-
     /**
      * 订单核保处理
-     * 
+     *
      * <p>将已报价的订单提交给保险公司进行核保审核</p>
-     * 
+     *
      * @param underwritingVo 核保请求参数,包含订单号等信息
      * @return UnderwritingResultsVo 核保结果
      */
@@ -206,9 +223,9 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(daJiaCrawlerOrder.getOrdersNo());
         // 提交核保申请
         DaJiaCrawlerGenerateResponse response = daJiaCrawlerRequestComponent.generate(daJiaCrawlerSaveResponse, headers);
-        log.info("大家核保数据返回:{}",JSONObject.toJSONString(response));
+        log.info("大家核保数据返回:{}", JSONObject.toJSONString(response));
         UnderwritingResultsVo underwritingResultsVo = DajiaCrawlerAuditResultsVoBuild.buildUnderwritingResultsVo(daJiaCrawlerOrder.getOrdersNo(), response);
-        if (response.getStatus().equals("4")){
+        if (response.getStatus().equals("4")) {
             PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
             paymentLinkVo.setOrder(underwritingVo.getOrder());
             PaymentLinkResultsVo paymentLink = getPaymentLink(paymentLinkVo);
@@ -219,9 +236,9 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     /**
      * 获取支付链接
-     * 
+     *
      * <p>为已核保通过的订单生成支付二维码链接</p>
-     * 
+     *
      * @param paymentLinkVo 支付链接请求参数
      * @return PaymentLinkResultsVo 支付链接结果,包含二维码URL
      */
@@ -234,13 +251,13 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         // 生成支付二维码
         DaJiaCrawlerQrcodeResponse daJiaCrawlerQrcodeResponse = daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(), userCode, headers);
-        log.info("获取支付链接返回数据:{}",JSONObject.toJSONString(daJiaCrawlerQrcodeResponse));
+        log.info("获取支付链接返回数据:{}", JSONObject.toJSONString(daJiaCrawlerQrcodeResponse));
         return new PaymentLinkResultsVo(true, daJiaCrawlerQrcodeResponse.getImageContent(), "");
     }
 
     /**
      * 上传保险影像资料
-     * 
+     *
      * <p>上传车险相关的影像资料,如行驶证、驾驶证等。流程包括:</p>
      * <ol>
      *   <li>获取上传文件标志和URL</li>
@@ -248,7 +265,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
      *   <li>批量上传文件到对象存储</li>
      *   <li>统一提交文件信息到保险系统</li>
      * </ol>
-     * 
+     *
      * @param insuranceUploadImageVo 影像上传请求参数,包含图片列表和分类信息
      */
     @Override
@@ -261,14 +278,14 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
                 .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));
+        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())){
+            if (com.jzg.commons.util.StringUtils.equals("FAIL", daJiaCrawlerUploadSignsResponse.getCode())) {
                 throw new SystemException("获取上传影像异常:" + daJiaCrawlerUploadSignsResponse.getMessage());
             }
             // 2. 构建文件名到上传信息的映射
@@ -303,14 +320,14 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     /**
      * 下载电子保单
-     * 
+     *
      * <p>根据订单信息下载对应的电子保单文件,支持:</p>
      * <ul>
      *   <li>交强险保单</li>
      *   <li>商业险保单</li>
      *   <li>非车险保单</li>
      * </ul>
-     * 
+     *
      * @param downloadPolicyVo 保单下载请求参数
      * @return DownloadPolicyResultVo 保单下载结果,包含各类保单的下载链接
      */
@@ -326,7 +343,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerDownloadRequest daJiaCrawlerDownloadRequest = new DaJiaCrawlerDownloadRequest(daJiaCrawlerOrder, userCode);
         DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         DaJiaCrawlerDownloadResponse response;
-        
+
         // 下载交强险保单
         if (StringUtils.hasLength(daJiaCrawlerOrder.getCiPolicyNo())) {
             daJiaCrawlerDownloadRequest.setPlyNo(daJiaCrawlerOrder.getCiPolicyNo());
@@ -352,9 +369,9 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     /**
      * 查询订单状态
-     * 
+     *
      * <p>查询订单在保险公司系统中的最新状态,包括核保状态、支付状态等</p>
-     * 
+     *
      * @param orderStatusVo 订单状态查询请求参数
      * @return OrderStatusResultVo 订单状态结果,包含订单当前状态信息
      */

+ 8 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -26,6 +26,7 @@ import com.jzg.quotation.commons.component.InsImagesUploadCacheComponent;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.commons.utils.HttpUtil;
@@ -79,8 +80,6 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
 
     private final GuoRenApiConfigurationProperties properties;
 
-    private final StringRedisTemplate redisTemplate;
-
     private final InsImagesUploadCacheComponent insImagesUploadCacheComponent;
 
     private final PlatformClient platformClient;
@@ -93,6 +92,13 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     /**
      * 报价
      *

+ 3 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/component/GuoRenCrawlerRequestComponent.java

@@ -132,7 +132,9 @@ public class GuoRenCrawlerRequestComponent {
     public IdentifyCodeDataResponse identifyCode(String username) {
         GuoRenCrawlerIdentifyCodeRequest identifyCodeRequest = new GuoRenCrawlerIdentifyCodeRequest(username);
         IdentifyCodeDataResponse request = request(RequestUrl.IDENTIFY_CODE, identifyCodeRequest, IdentifyCodeDataResponse.class, new HttpHeaders());
-//        JSONObject.parseObject(request, IdentifyCodeDataResponse.class);
+        if (request.getResultCode() != 0) {
+            throw new SystemException(request.getResultMsg());
+        }
         return request;
     }
 

+ 0 - 6
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerOrderService.java

@@ -24,10 +24,4 @@ public interface GuoRenCrawlerOrderService {
      */
     GuoRenCrawlerOrder getById(String id);
 
-    /**
-     * 国任财险登录
-     *
-     * @param loginBase 登录信息
-     */
-     void guoRenlogin(LoginBase loginBase);
 }

+ 19 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerQuoteProcessService.java

@@ -2,6 +2,9 @@ package com.jzg.quotation.guoren.crawler.service;
 
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.guoren.crawler.entity.dto.PrpTMainDTO;
 import com.jzg.quotation.guoren.crawler.entity.request.GuoRenCrawlerCalculationPremiumRequest;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerCalculationPremiumData;
@@ -9,6 +12,13 @@ import org.springframework.http.HttpHeaders;
 
 public interface GuoRenCrawlerQuoteProcessService {
 
+    /**
+     * 获取验证码
+     *
+     * @param sendCaptchaRequest 获取验证码请求
+     * @return 验证码响应
+     */
+    GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest);
     /**
      * 登录
      *
@@ -16,6 +26,14 @@ public interface GuoRenCrawlerQuoteProcessService {
      */
     void login(LoginBase loginBase);
 
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest 检测登录请求
+     * @return 检测结果
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
+
     /**
      * 获取请求头信息
      *
@@ -35,7 +53,7 @@ public interface GuoRenCrawlerQuoteProcessService {
      * 投保验证码处理
      *
      * @param crawlerCalculationPremiumRequest 保费计算请求
-     * @param calculationPremium 保费计算响应
+     * @param calculationPremium               保费计算响应
      */
     GuoRenCrawlerCalculationPremiumData insuranceVerificationCodeProcessing(GuoRenCrawlerCalculationPremiumRequest crawlerCalculationPremiumRequest, GuoRenCrawlerCalculationPremiumData calculationPremium, HttpHeaders headers);
 }

+ 0 - 2
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/GuoRenCrawlerRequest.java

@@ -5,6 +5,4 @@ import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 
 public interface GuoRenCrawlerRequest extends QuotationCrawlerBaseService, GetCaptchaBaseService {
 
-
-
 }

+ 0 - 6
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerOrderServiceImpl.java

@@ -34,10 +34,4 @@ public class GuoRenCrawlerOrderServiceImpl implements GuoRenCrawlerOrderService
         return guoRenCrawlerOrderRepository.getById(id);
     }
 
-    @Override
-    public void guoRenlogin(LoginBase loginBase) {
-        guoRenCrawlerQuoteProcessService.login(loginBase);
-    }
-
-
 }

+ 58 - 27
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerQuoteProcessServiceImpl.java

@@ -1,6 +1,6 @@
 package com.jzg.quotation.guoren.crawler.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.core.lang.Pair;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
@@ -11,9 +11,13 @@ import com.jzg.commons.exception.TokenExpireException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.client.PlatformClient;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
+import com.jzg.quotation.guoren.api.entity.Response.IdentifyCodeDataResponse;
 import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerCacheComponent;
 import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerRequestComponent;
 import com.jzg.quotation.guoren.crawler.constant.BusinessSources;
@@ -24,6 +28,7 @@ import com.jzg.quotation.guoren.crawler.entity.request.GuoRenCrawlerInitSelectRe
 import com.jzg.quotation.guoren.crawler.entity.response.*;
 import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerQuoteProcessService;
 import lombok.RequiredArgsConstructor;
+import org.apache.http.util.TextUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
@@ -51,13 +56,56 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
 
     private static final String CODE_TYPE_PRPDUNIT_MAIN = "PrpdunitMain";
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        String username = sendCaptchaRequest.getUsername();
+        if (TextUtils.isEmpty(username)) {
+            username = getUsernameFromAgreement(sendCaptchaRequest.getAgreementId());
+        }
+        IdentifyCodeDataResponse guoRenCrawlerIdentifyCodeData = guoRenCrawlerRequestComponent.identifyCode(username);
+        GetCaptchaResponse getCaptchaResponse = new GetCaptchaResponse();
+        getCaptchaResponse.setIdentifyId(guoRenCrawlerIdentifyCodeData.getData().getIdentifyId());
+        return getCaptchaResponse;
+    }
+
     @Override
     public void login(LoginBase loginBase) {
-        HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(loginBase.getAgreementId());
+        String username = loginBase.getUsername();
+        String password = loginBase.getPassword();
+        if (TextUtils.isEmpty(username) && TextUtils.isEmpty(password)) {
+            Pair<String, String> usernameAndPassword = getUsernameAndPasswordFromAgreement(loginBase.getAgreementId());
+            username = usernameAndPassword.getKey();
+            password = usernameAndPassword.getValue();
+        }
+        GuoRenCrawlerTokenData token = guoRenCrawlerRequestComponent.getToken(username, password, loginBase.getCaptchaId(), loginBase.getCaptcha());
+        guoRenCrawlerCacheComponent.cacheToken(username, token.getToken());
+    }
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String token = guoRenCrawlerCacheComponent.getToken(username);
+        return StringUtils.hasText(token);
+    }
+
+    /**
+     * 从协议属性中获取用户名
+     */
+    private String getUsernameFromAgreement(String agreementId) {
+        HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(agreementId);
+        AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");
+        PtlAgreementAttribution ptlAgreementAttribution = agreementAttribution.getData();
+        return ptlAgreementAttribution.getUsername();
+    }
+
+    /**
+     * 从协议属性中获取用户名和密码
+     */
+    private Pair<String, String> getUsernameAndPasswordFromAgreement(String agreementId) {
+        HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(agreementId);
         AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");
         PtlAgreementAttribution ptlAgreementAttribution = agreementAttribution.getData();
-        GuoRenCrawlerTokenData token = guoRenCrawlerRequestComponent.getToken(ptlAgreementAttribution.getUsername(), ptlAgreementAttribution.getPassword(), loginBase.getCaptchaId(), loginBase.getCaptcha());
-        guoRenCrawlerCacheComponent.cacheToken(ptlAgreementAttribution.getUsername(), token.getToken());
+        return Pair.of(ptlAgreementAttribution.getUsername(), ptlAgreementAttribution.getPassword());
     }
 
     @Override
@@ -84,11 +132,7 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
         guoRenCrawlerInitSelectRequest.setReserve1(loginComInfo.getComCode());
         guoRenCrawlerInitSelectRequest.setCodeCName(loginComInfo.getComName());
         GuoRenCrawlerInitSelectResponse initSelectResponse = guoRenCrawlerRequestComponent.initSelect(guoRenCrawlerInitSelectRequest, headers);
-        GuoRenCrawlerInitSelectResponse.CodeDataDTO comCodeData = initSelectResponse.getCodeData()
-                .stream()
-                .filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getComName().equals(codeDataDTO.getCodeCode()))
-                .findFirst()
-                .orElseThrow(() -> new SystemException("归属机构查询失败"));
+        GuoRenCrawlerInitSelectResponse.CodeDataDTO comCodeData = initSelectResponse.getCodeData().stream().filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getComName().equals(codeDataDTO.getCodeCode())).findFirst().orElseThrow(() -> new SystemException("归属机构查询失败"));
 
         // 业务来源
         String businessSources = BusinessSources.BUSINESS_SOURCES_MAP.get(guoRenCrawlerConfigureParameters.getBusinessNature());
@@ -102,11 +146,7 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
         guoRenCrawlerInitSelectRequest.setComCode(loginComInfo.getComCode());
         guoRenCrawlerInitSelectRequest.setFieldext(loginComInfo.getComCode());
         initSelectResponse = guoRenCrawlerRequestComponent.initSelect(guoRenCrawlerInitSelectRequest, headers);
-        GuoRenCrawlerInitSelectResponse.CodeDataDTO agentCodeData = initSelectResponse.getCodeData()
-                .stream()
-                .filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getAgentCode().equals(codeDataDTO.getCodeCode()))
-                .findFirst()
-                .orElseThrow(() -> new SystemException("代理/经纪/渠道查询失败"));
+        GuoRenCrawlerInitSelectResponse.CodeDataDTO agentCodeData = initSelectResponse.getCodeData().stream().filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getAgentCode().equals(codeDataDTO.getCodeCode())).findFirst().orElseThrow(() -> new SystemException("代理/经纪/渠道查询失败"));
         // 合同协议号查询
         GuoRenCrawlerGetAgentAgreementResponse.PrpDagreeDetailDtoListDTO agentAgreement = guoRenCrawlerRequestComponent.getAgentAgreement(agentCodeData.getCodeCode(), loginComInfo.getComCode(), agentCodeData.getAgreementNo(), headers);
         // 归属业务员
@@ -116,11 +156,7 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
         guoRenCrawlerInitSelectRequest.setCodeCName("");
         guoRenCrawlerInitSelectRequest.setFieldext(agentAgreement.getAgreementNo() + "," + loginComInfo.getComCode());
         initSelectResponse = guoRenCrawlerRequestComponent.initSelect(guoRenCrawlerInitSelectRequest, headers);
-        GuoRenCrawlerInitSelectResponse.CodeDataDTO handlerCodeData = initSelectResponse.getCodeData()
-                .stream()
-                .filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getHandlerName().equals(codeDataDTO.getCodeName()))
-                .findFirst()
-                .orElseThrow(() -> new SystemException("归属业务员查询失败"));
+        GuoRenCrawlerInitSelectResponse.CodeDataDTO handlerCodeData = initSelectResponse.getCodeData().stream().filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getHandlerName().equals(codeDataDTO.getCodeName())).findFirst().orElseThrow(() -> new SystemException("归属业务员查询失败"));
         // 决策单元
         guoRenCrawlerInitSelectRequest.setCodeCName(loginComInfo.getComName());
         guoRenCrawlerInitSelectRequest.setComCode(loginComInfo.getComCode());
@@ -138,14 +174,9 @@ public class GuoRenCrawlerQuoteProcessServiceImpl implements GuoRenCrawlerQuoteP
         guoRenCrawlerInitSelectRequest.setUserCode(agentAgreement.getHandlerCode());
 
         initSelectResponse = guoRenCrawlerRequestComponent.initSelect(guoRenCrawlerInitSelectRequest, headers);
-        GuoRenCrawlerInitSelectResponse.CodeDataDTO unitMaintenanceCodeData = initSelectResponse.getCodeData()
-                .stream()
-                .filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getUnitMaintenanceCode().equals(codeDataDTO.getCodeCode()))
-                .findFirst()
-                .orElseThrow(() -> new SystemException("归属业务员查询失败"));
-
-        return new PrpTMainDTO(comCodeData, agentCodeData, agentAgreement, handlerCodeData,
-                unitMaintenanceCodeData, businessSources, attributionInformationVo.getUsername());
+        GuoRenCrawlerInitSelectResponse.CodeDataDTO unitMaintenanceCodeData = initSelectResponse.getCodeData().stream().filter(codeDataDTO -> guoRenCrawlerConfigureParameters.getUnitMaintenanceCode().equals(codeDataDTO.getCodeCode())).findFirst().orElseThrow(() -> new SystemException("归属业务员查询失败"));
+
+        return new PrpTMainDTO(comCodeData, agentCodeData, agentAgreement, handlerCodeData, unitMaintenanceCodeData, businessSources, attributionInformationVo.getUsername());
     }
 
 

+ 17 - 16
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/service/impl/GuoRenCrawlerRequestImpl.java

@@ -12,12 +12,14 @@ import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.guoren.api.entity.Response.IdentifyCodeDataResponse;
 import com.jzg.quotation.guoren.crawler.build.GuoRenCrawlerQuoteResultsVoBuild;
+import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerCacheComponent;
 import com.jzg.quotation.guoren.crawler.component.GuoRenCrawlerRequestComponent;
 import com.jzg.quotation.guoren.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.guoren.crawler.entity.GuoRenCrawlerConfigureParameters;
@@ -31,6 +33,7 @@ import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerOrderService;
 import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerQuoteProcessService;
 import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerRequest;
 import lombok.RequiredArgsConstructor;
+import org.apache.http.util.TextUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -43,25 +46,28 @@ import java.util.regex.Pattern;
 @RequiredArgsConstructor
 public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
 
-    private final GuoRenCrawlerRequestComponent guoRenCrawlerRequestComponent;
-
     private final GuoRenCrawlerQuoteProcessService guoRenCrawlerQuoteProcessService;
 
-    private final GuoRenCrawlerOrderService guoRenCrawlerOrderService;
+    private final GuoRenCrawlerRequestComponent guoRenCrawlerRequestComponent;
 
-    private final PlatformClient platformClient;
+    private final GuoRenCrawlerOrderService guoRenCrawlerOrderService;
 
     @Override
     public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
-        HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(sendCaptchaRequest.getAgreementId());
-        AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");
-        PtlAgreementAttribution ptlAgreementAttribution = agreementAttribution.getData();
-        IdentifyCodeDataResponse guoRenCrawlerIdentifyCodeData = guoRenCrawlerRequestComponent.identifyCode(ptlAgreementAttribution.getUsername());
-        GetCaptchaResponse getCaptchaResponse = new GetCaptchaResponse();
-        getCaptchaResponse.setIdentifyId(guoRenCrawlerIdentifyCodeData.getData().getIdentifyId());
-        return getCaptchaResponse;
+        return guoRenCrawlerQuoteProcessService.getCaptcha(sendCaptchaRequest);
+    }
+
+    @Override
+    public void login(LoginBase loginBase) {
+        guoRenCrawlerQuoteProcessService.login(loginBase);
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return guoRenCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+    }
+
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         HttpHeaders headers = guoRenCrawlerQuoteProcessService.getHeaders(quoteVo.getOrder().getAttributionInformationVo().getUsername());
@@ -248,9 +254,4 @@ public class GuoRenCrawlerRequestImpl implements GuoRenCrawlerRequest {
         return new OrderCommon(attributionInformationVo.getUsername(), guoRenCrawlerConfigureParameters.getComName(), businessNo, guoRenCrawlerOrder.getCiPolicyNo(), guoRenCrawlerOrder.getBiPolicyNo(), headers);
     }
 
-
-    @Override
-    public void login(LoginBase loginBase) {
-        guoRenCrawlerQuoteProcessService.login(loginBase);
-    }
 }

+ 160 - 135
tenant/insurance/quotation-guoshou/src/main/java/com/jzg/quotation/guoshou/crawler/service/Impl/GuoshouCrawlerRequestImpl.java

@@ -15,6 +15,7 @@ import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.guoshou.crawler.component.GsCrawlerLoginComponent;
 import com.jzg.quotation.guoshou.crawler.component.GsCrawlerRequestComponent;
@@ -63,13 +64,32 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     private final StringRedisTemplate redisTemplate;
     private final RsaUtils rsaUtils;
     private final OrgClient orgClient;
-    private  CloseableHttpClient httpClient;
+    private CloseableHttpClient httpClient;
 
     @Override
     public void login(LoginBase loginBase) {
 
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + username);
+        String token = JSONObject.parseObject(redisValue).getString("token");
+        String userID = JSONObject.parseObject(redisValue).getString("userID");
+        if (!StringUtils.hasText(token) || !StringUtils.hasText(userID)) {
+            AttributionInformationVo attributionInformationVo = new AttributionInformationVo();
+            Map<String, String> configInfo = new HashMap<>();
+            configInfo.put("username", username);
+            configInfo.put("password", password);
+            attributionInformationVo.setConfigInfo(configInfo);
+            return getLoginInfo(attributionInformationVo) != null;
+        }
+        return true;
+    }
+
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         OrderBase order = quoteVo.getOrder();
@@ -77,7 +97,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         // 查询loginInfo
         UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         String token = JSONObject.parseObject(redisValue).getString("token");
         String userID = JSONObject.parseObject(redisValue).getString("userID");
         JSONObject bindInfo = getBindInfo(redisValue, loginInfo);
@@ -87,17 +107,17 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         }
         log.info("绑定信息查询成功,userAgentName:{}", bindInfo.getString("userAgentName"));
         //  调用订单号接口
-        InsuranceApplicationEntity insuranceApplicationEntity = new InsuranceApplicationEntity(redisValue,bindInfo,loginInfo,rsaUtils.encrypt(carInfoVo.getLicenseNo()),
-                rsaUtils.encrypt(JSONObject.parseObject(redisValue).getString("userID")),carInfoVo.getEnergyTypeCode());
-        String orderNo = gsCrawlerRequestComponent.queryOrderNo(insuranceApplicationEntity,redisValue);
-        log.info("获取订单号成功,orderId:{}",orderNo);
+        InsuranceApplicationEntity insuranceApplicationEntity = new InsuranceApplicationEntity(redisValue, bindInfo, loginInfo, rsaUtils.encrypt(carInfoVo.getLicenseNo()),
+                rsaUtils.encrypt(JSONObject.parseObject(redisValue).getString("userID")), carInfoVo.getEnergyTypeCode());
+        String orderNo = gsCrawlerRequestComponent.queryOrderNo(insuranceApplicationEntity, redisValue);
+        log.info("获取订单号成功,orderId:{}", orderNo);
         // 获取保险信息
-        InsuranceInformationRequest informationRequest = new InsuranceInformationRequest(rsaUtils.encrypt(bindInfo.getString("userAgentCode")),orderNo,"");
-        CarInsuranceQueryResponse.CarInsuranceData insuranceInformation = gsCrawlerRequestComponent.getInsuranceInformation(informationRequest,token);
-        GsCrawlerCarQueryRequest carQueryRequest = new GsCrawlerCarQueryRequest(carInfoVo,insuranceInformation,rsaUtils.encrypt(carInfoVo.getVinNo()), orderNo);
+        InsuranceInformationRequest informationRequest = new InsuranceInformationRequest(rsaUtils.encrypt(bindInfo.getString("userAgentCode")), orderNo, "");
+        CarInsuranceQueryResponse.CarInsuranceData insuranceInformation = gsCrawlerRequestComponent.getInsuranceInformation(informationRequest, token);
+        GsCrawlerCarQueryRequest carQueryRequest = new GsCrawlerCarQueryRequest(carInfoVo, insuranceInformation, rsaUtils.encrypt(carInfoVo.getVinNo()), orderNo);
 
         //查询车型
-        List<GsCrawlerCarQueryResponse.VehicleModelDetail> vehicleModelDetails = gsCrawlerRequestComponent.carQuery(carQueryRequest,token);
+        List<GsCrawlerCarQueryResponse.VehicleModelDetail> vehicleModelDetails = gsCrawlerRequestComponent.carQuery(carQueryRequest, token);
         GsCrawlerCarQueryResponse.VehicleModelDetail vehicleModelDetail = CarModelsFilterUtils.to(vehicleModelDetails, carInfoVo);
         if (vehicleModelDetail == null) {
             log.error("未匹配到车辆信息,vin:{}, seatCount:{}", carInfoVo.getVinNo());
@@ -105,31 +125,31 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         }
         JSONObject jsonObject = gsCrawlerRequestComponent.salesFCBelongInfo(token, orderNo, bindInfo);
         String businessNatureCode = jsonObject.getString("businessNatureCode");
-        log.info("车辆信息查询成功,standardName:{}, seat:{}", vehicleModelDetail.getStandardName(),vehicleModelDetail.getSeat());
+        log.info("车辆信息查询成功,standardName:{}, seat:{}", vehicleModelDetail.getStandardName(), vehicleModelDetail.getSeat());
         //  封装submit参数
-        SubmitInsuranceInformationRequest submitInsuranceInformationRequest = new SubmitInsuranceInformationRequest(orderNo,quoteVo,vehicleModelDetail,loginInfo,bindInfo,insuranceInformation,userID,orgClient,businessNatureCode);
+        SubmitInsuranceInformationRequest submitInsuranceInformationRequest = new SubmitInsuranceInformationRequest(orderNo, quoteVo, vehicleModelDetail, loginInfo, bindInfo, insuranceInformation, userID, orgClient, businessNatureCode);
         SubmitResponse submitResponse = gsCrawlerRequestComponent.submitInsuranceInformationRequest(submitInsuranceInformationRequest, token);
-        if ("500".equals(submitResponse.getStatus())){
-            throw new RuntimeException("提交保险信息失败"+ submitResponse.getMsg());
-        }else if ("301".equals(submitResponse.getStatus())){
+        if ("500".equals(submitResponse.getStatus())) {
+            throw new RuntimeException("提交保险信息失败" + submitResponse.getMsg());
+        } else if ("301".equals(submitResponse.getStatus())) {
             SubmitInsuranceInformationRequest.CustomerVo customerVo = submitInsuranceInformationRequest.getCustomerVo();
             customerVo.setSamePerson("1");
             customerVo.setSysStatus("1");
             submitInsuranceInformationRequest.setCustomerVo(customerVo);
             submitResponse = gsCrawlerRequestComponent.submitInsuranceInformationRequest(submitInsuranceInformationRequest, token);
-            if ("500".equals(submitResponse.getStatus())){
-                throw new RuntimeException("提交保险信息失败"+ submitResponse.getMsg());
-            }else if("200".equals(submitResponse.getStatus())){
+            if ("500".equals(submitResponse.getStatus())) {
+                throw new RuntimeException("提交保险信息失败" + submitResponse.getMsg());
+            } else if ("200".equals(submitResponse.getStatus())) {
                 log.info("提交保险信息成功{}");
             }
-        } else if ("200".equals(submitResponse.getStatus())){
+        } else if ("200".equals(submitResponse.getStatus())) {
             log.info("提交保险信息成功");
-        }else {
-            throw new RuntimeException("提交保险信息失败"+ submitResponse.getMsg());
+        } else {
+            throw new RuntimeException("提交保险信息失败" + submitResponse.getMsg());
         }
         // 加密转换查询
         //String encrypt_userCode = gsCrawlerRequestComponent.getEncryptionConvert(userID, token);
-        return calculation(orderNo,redisValue,quoteVo,insuranceInformation,loginInfo, vehicleModelDetail,bindInfo, businessNatureCode);
+        return calculation(orderNo, redisValue, quoteVo, insuranceInformation, loginInfo, vehicleModelDetail, bindInfo, businessNatureCode);
     }
 
     @Override
@@ -138,11 +158,11 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         String ordersNo = underwritingVo.getOrder().getOrdersNo();
         JSONObject quoteInfo = JSONObject.parseObject(redisTemplate.opsForValue().get(GsConstants.GS_REDIS_QUOTE_KEY + ordersNo));
         UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         JSONObject res = gsCrawlerRequestComponent.doCompleteTask(new OrderEntity(quoteInfo), redisValue);
         log.info("核保结果:{}", res);
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
-        if (!"核保通过".equals(res.getString("msg"))){
+        if (!"核保通过".equals(res.getString("msg"))) {
             Map<String, Object> errorMsg = getErrorMsg(res);
             if (errorMsg != null && errorMsg.size() > 0) {
                 log.error("核保失败,errorMsg:{}", errorMsg);
@@ -154,15 +174,14 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             underwritingResultsVo.setUnderwritingResult(res.getString("msg"));
             underwritingResultsVo.setPaymentLink(getPayUrl(quoteInfo, redisValue));
-        }else {
+        } else {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
         }
         return underwritingResultsVo;
     }
 
 
-
-    public Map<String, Object> getErrorMsg(JSONObject res){
+    public Map<String, Object> getErrorMsg(JSONObject res) {
         if (!"核保通过".equals(res.getString("msg"))) {
             if ("201".equals(res.getString("status"))) {
                 List<Map<String, String>> errList = new ArrayList<>();
@@ -199,33 +218,32 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     }
 
 
-
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws Exception {
         AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         String ordersNo = paymentLinkVo.getOrder().getOrdersNo();
         JSONObject quoteInfo = JSONObject.parseObject(redisTemplate.opsForValue().get(GsConstants.GS_REDIS_QUOTE_KEY + ordersNo));
         getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
         paymentLinkResultsVo.setPaymentLink(getPayUrl(quoteInfo, redisValue));
         return paymentLinkResultsVo;
     }
 
 
-    public String getPayUrl(JSONObject quoteInfo, String redisValue){
+    public String getPayUrl(JSONObject quoteInfo, String redisValue) {
         // 核保通过   获取订单详情
         Map<String, Object> detailData = new HashMap<>();
         detailData.put("orderNo", quoteInfo.getString("orderId"));
-        detailData.put("structureId",JSONObject.parseObject(redisValue).getString("structureId"));
+        detailData.put("structureId", JSONObject.parseObject(redisValue).getString("structureId"));
         detailData.put("userCode", JSONObject.parseObject(redisValue).getString("username"));
         detailData.put("userLoginType", "1");
         detailData.put("sellCode", null);
         detailData.put("systemSource", "gstc");
-        JSONObject doMesOrderDetailRes = gsCrawlerRequestComponent.doMesOrderDetail(redisValue,quoteInfo);
+        JSONObject doMesOrderDetailRes = gsCrawlerRequestComponent.doMesOrderDetail(redisValue, quoteInfo);
         // 提取支付链接
         String payUrl = JSONObject.parseObject(doMesOrderDetailRes.getString("data")).getString("payUrl");
-        JSONObject tokenResponse = gsCrawlerRequestComponent.getTokenUrl(getTokenData(payUrl),redisValue);
+        JSONObject tokenResponse = gsCrawlerRequestComponent.getTokenUrl(getTokenData(payUrl), redisValue);
         ResponseDTO shareInfo = gsCrawlerRequestComponent.getShareInfo(tokenResponse, redisValue);
         return QrCodeReader.parseQrCodeUrl(shareInfo.getData().getUrl());
     }
@@ -239,21 +257,21 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         JSONObject quote = JSONObject.parseObject(value);
         // 查询loginInfo
         UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         // 获取归属信息
         JSONObject bindInfo = getBindInfo(redisValue, loginInfo);
         // 1. 自动生成订单
         GenerateDataRequest generateDataRequest = new GenerateDataRequest(quote);
-        gsCrawlerRequestComponent.doAutoGenerate(generateDataRequest,redisValue);
+        gsCrawlerRequestComponent.doAutoGenerate(generateDataRequest, redisValue);
         // 2. 获取订单详情
-        JSONObject doMesOrderDetail = gsCrawlerRequestComponent.doMesOrderDetail(redisValue,quote );
+        JSONObject doMesOrderDetail = gsCrawlerRequestComponent.doMesOrderDetail(redisValue, quote);
         // 3. 获取上传状态
-        gsCrawlerRequestComponent.getUploadSuccess(redisValue,quote);
+        gsCrawlerRequestComponent.getUploadSuccess(redisValue, quote);
         // 4. 查询日志
         JSONObject logData = new JSONObject();
-        logData.put("orderNo",quote.getString("orderId"));
-        logData.put("tranNo",quote.getString("tranNo"));
-        logData.put("structureId",quote.getString("structureId"));
+        logData.put("orderNo", quote.getString("orderId"));
+        logData.put("tranNo", quote.getString("tranNo"));
+        logData.put("structureId", quote.getString("structureId"));
         logData.put("userCode", quote.getString("userCode"));
         logData.put("oriSysOperator", "EM2_user");
         logData.put("oriSysOperatorKey", "RU0yZW0y");
@@ -283,20 +301,20 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             if (StringUtils.isNotEmpty(JYX_Policy) && JYX_Policy.length() != 22) {
                 JYX_Policy = "";
             }
-            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":JQ_Policy:"  , JQ_Policy,GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
-            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":SY_Policy:"  , SY_Policy,GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
-            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":JYX_Policy:"  , JYX_Policy,GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
+            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":JQ_Policy:", JQ_Policy, GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
+            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":SY_Policy:", SY_Policy, GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
+            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo() + ":JYX_Policy:", JYX_Policy, GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
             // 再次获取订单详情
-            gsCrawlerRequestComponent.doMesOrderDetail(redisValue,quote);
+            gsCrawlerRequestComponent.doMesOrderDetail(redisValue, quote);
         } else {
-            log.info("查询QueryLog日志{}",queryLogResponse.getMsg());
-            throw new RuntimeException("获取报价日志失败{}:"+ queryLogResponse.getMsg());
+            log.info("查询QueryLog日志{}", queryLogResponse.getMsg());
+            throw new RuntimeException("获取报价日志失败{}:" + queryLogResponse.getMsg());
         }
 
         JSONObject upload = upload(insuranceUploadImageVo.getImageVoList(), JQ_Policy, SY_Policy, JYX_Policy, loginInfo, bindInfo, quote, redisValue);
-        if (!"200".equals(upload.getString("code"))){
-            throw new RuntimeException("上传失败"+ upload.getString("message"));
-        }else {
+        if (!"200".equals(upload.getString("code"))) {
+            throw new RuntimeException("上传失败" + upload.getString("message"));
+        } else {
             log.info("上传成功{}", upload.toJSONString());
         }
     }
@@ -312,15 +330,15 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         OrderBase orderBase = downloadPolicyVo.getOrder();
         JSONObject quote = JSONObject.parseObject(redisTemplate.opsForValue().get(GsConstants.GS_REDIS_QUOTE_KEY + orderBase.getOrdersNo()));
         UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         // 1. 获取订单列表
-        DoMesOrdersRequest doMesOrdersRequest = new DoMesOrdersRequest(loginInfo.getAesCode(),"");
+        DoMesOrdersRequest doMesOrdersRequest = new DoMesOrdersRequest(loginInfo.getAesCode(), "");
         JSONObject mesOrders = gsCrawlerRequestComponent.doMesOrders(doMesOrdersRequest, redisValue);
         JSONObject order = JSONObject.parseObject(JSONObject.toJSONString(mesOrders.getJSONObject("data").getJSONArray("data").get(0)));
         quote.put("orderId", order.getString("orderNo"));
         //  获取订单详情
         JSONObject jsonObject = gsCrawlerRequestComponent.doMesOrderDetail(redisValue, quote);
-        JSONObject tokenResponse = gsCrawlerRequestComponent.getTokenUrl(getTokenData(JSONObject.toJSONString(jsonObject)),redisValue);
+        JSONObject tokenResponse = gsCrawlerRequestComponent.getTokenUrl(getTokenData(JSONObject.toJSONString(jsonObject)), redisValue);
         String id = tokenResponse.getJSONObject("data").getString("id");
         JSONObject orderDetail = gsCrawlerRequestComponent.getOrderDetail(id, redisValue);
         JSONArray dzbdList = orderDetail.getJSONObject("data").getJSONArray("list");
@@ -352,7 +370,8 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     /**
      * 下载PDF文件
-     * @param pdfUrl PDF URL
+     *
+     * @param pdfUrl   PDF URL
      * @param savePath 保存路径
      * @throws IOException 异常
      */
@@ -377,6 +396,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     /**
      * 从PDF中获取支付时间
+     *
      * @param pdfFilePath PDF文件路径
      * @return 支付时间
      * @throws IOException 异常
@@ -400,9 +420,9 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception {
         AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
         UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
-        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ attributionInformationVo.getConfigInfo().get("username"));
+        String redisValue = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + attributionInformationVo.getConfigInfo().get("username"));
         // 1. 获取订单列表
-        DoMesOrdersRequest doMesOrdersRequest = new DoMesOrdersRequest(loginInfo.getAesCode(),rsaUtils.encrypt(orderStatusVo.getCarInfo().getLicenseNo()));
+        DoMesOrdersRequest doMesOrdersRequest = new DoMesOrdersRequest(loginInfo.getAesCode(), rsaUtils.encrypt(orderStatusVo.getCarInfo().getLicenseNo()));
         JSONObject mesOrders = gsCrawlerRequestComponent.doMesOrders(doMesOrdersRequest, redisValue);
         String JQ_Policy = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_QUOTE_KEY + orderStatusVo.getOrder().getOrdersNo() + "JQ_Policy");
         String SY_Policy = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_QUOTE_KEY + orderStatusVo.getOrder().getOrdersNo() + "SY_Policy");
@@ -420,8 +440,8 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         if (stateResponse.contains(JQ_Policy) || stateResponse.contains(SY_Policy) || stateResponse.contains(JYX_Policy)) {
             JSONObject order = JSONObject.parseObject(JSONObject.toJSONString(mesOrders.getJSONObject("data").getJSONArray("data").get(0)));
             JSONObject orderVo = new JSONObject();
-            orderVo.put("structureId",loginInfo.getProvincialCom());
-            orderVo.put("userCode",loginInfo.getUserCode());
+            orderVo.put("structureId", loginInfo.getProvincialCom());
+            orderVo.put("userCode", loginInfo.getUserCode());
             orderVo.put("orderId", order.getString("orderNo"));
             //  获取订单详情
             JSONObject jsonObject = gsCrawlerRequestComponent.doMesOrderDetail(redisValue, orderVo);
@@ -465,13 +485,13 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         return resultVo;
     }
 
-    public String getRedisKey(AttributionInformationVo attributionInformationVo){
+    public String getRedisKey(AttributionInformationVo attributionInformationVo) {
         String username = attributionInformationVo.getConfigInfo().get("username");
-        String value = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ username);
-        if (StringUtils.isEmpty(value)){
+        String value = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + username);
+        if (StringUtils.isEmpty(value)) {
             gsCrawlerLoginComponent.login(attributionInformationVo);
-            value = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY+ username);
-            if (StringUtils.isEmpty(value)){
+            value = redisTemplate.opsForValue().get(GsConstants.GS_REDIS_LOGIN_KEY + username);
+            if (StringUtils.isEmpty(value)) {
                 getRedisKey(attributionInformationVo);
             }
         }
@@ -483,12 +503,12 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         String username = attributionInformationVo.getConfigInfo().get("username");
         String redisValue = getRedisKey(attributionInformationVo);
         UserInfoResponse loginInfo = gsCrawlerRequestComponent.getLoginInfo(redisValue);
-        if (loginInfo == null || !"200".equals(loginInfo.getStatus())){
+        if (loginInfo == null || !"200".equals(loginInfo.getStatus())) {
             log.warn("登录信息接口响应异常,重新获取用户信息,username:{}", loginInfo.getMsg());
             redisTemplate.delete(GsConstants.GS_REDIS_LOGIN_KEY + username);
             redisValue = getRedisKey(attributionInformationVo);
             loginInfo = gsCrawlerRequestComponent.getLoginInfo(redisValue);
-            if (loginInfo == null || !"200".equals(loginInfo.getStatus())){
+            if (loginInfo == null || !"200".equals(loginInfo.getStatus())) {
                 getLoginInfo(attributionInformationVo);
             }
         }
@@ -496,16 +516,15 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     }
 
 
-
     @Override
     public void qutoationCrawler(InsuranceUploadImageVo insuranceUploadImageVo) {
 
     }
 
 
-    public JSONObject getBindInfo(String redisValue,UserInfoResponse.UserData loginInfo) {
+    public JSONObject getBindInfo(String redisValue, UserInfoResponse.UserData loginInfo) {
         // 获取绑定信息
-        List<JSONObject> bindInfoData = gsCrawlerRequestComponent.getBindInfo(redisValue,loginInfo.getUserCode());
+        List<JSONObject> bindInfoData = gsCrawlerRequestComponent.getBindInfo(redisValue, loginInfo.getUserCode());
         if (CollectionUtil.isEmpty(bindInfoData)) {
             log.error("绑定信息为空,username:{}");
             throw new RuntimeException("未查询到归属信息");
@@ -529,8 +548,8 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         return bindInfo;
     }
 
-    public QuoteResultsVo calculation(String orderNo,String redisValue,QuoteVo quoteVo,CarInsuranceQueryResponse.CarInsuranceData insuranceInformation,UserInfoResponse.UserData loginInfo,
-            GsCrawlerCarQueryResponse.VehicleModelDetail vehicleModelDetail,JSONObject bindInfo,String businessNatureCode) {
+    public QuoteResultsVo calculation(String orderNo, String redisValue, QuoteVo quoteVo, CarInsuranceQueryResponse.CarInsuranceData insuranceInformation, UserInfoResponse.UserData loginInfo,
+                                      GsCrawlerCarQueryResponse.VehicleModelDetail vehicleModelDetail, JSONObject bindInfo, String businessNatureCode) {
         try {
             String token = JSONObject.parseObject(redisValue).getString("token");
             String userID = JSONObject.parseObject(redisValue).getString("userID");
@@ -539,7 +558,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();
             RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
             //  获取车辆信息
-            JSONObject carInfo = gsCrawlerRequestComponent.getCarConfirm(orderNo,token);
+            JSONObject carInfo = gsCrawlerRequestComponent.getCarConfirm(orderNo, token);
 
 
             // 3. 解析车辆确认信息
@@ -551,7 +570,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             carInfo.put("tranNo", insuranceInformation.getMesOrderVo().getTransactionNo());
             carInfo.put("oriSysOperatorKey", "RU0yZW0y");
             carInfo.put("oriSysOperator", "EM2_user");
-            carInfo.put("frameNo",carInfoVo.getVinNo());
+            carInfo.put("frameNo", carInfoVo.getVinNo());
             carInfo.put("localpurchaseprice", localpurchaseprice);
             carInfo.put("licenseColorCode", ("0".equals(carInfoVo.getEnergyTypeCode()) || "4".equals(carInfoVo.getEnergyTypeCode())) ? "01" : "06");
             carInfo.put("vehicleQuality", vehicleQuality);
@@ -563,23 +582,23 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             carInfo.put("enginePower", enginePower);
             carInfo.put("energyTypesName", vehicleModelDetail.getModelEnergyTypeName());
             carInfo.put("vehicleTonnage", vehicleModelDetail.getVehicleTonnage());
-            gsCrawlerRequestComponent.updateCarInfo(carInfo,token);
+            gsCrawlerRequestComponent.updateCarInfo(carInfo, token);
 
             PlatCarInfoRequest platCarInfoRequest = new PlatCarInfoRequest(loginInfo, orderNo, userID);
-            gsCrawlerRequestComponent.getPlatCarInfo(platCarInfoRequest,token);
+            gsCrawlerRequestComponent.getPlatCarInfo(platCarInfoRequest, token);
 
-            InsuranceInformationRequest informationRequest = new InsuranceInformationRequest(rsaUtils.encrypt(userID),orderNo,"");
-            CarInsuranceQueryResponse.CarInsuranceData insuranceData = gsCrawlerRequestComponent.getInsuranceInformation(informationRequest,token);
+            InsuranceInformationRequest informationRequest = new InsuranceInformationRequest(rsaUtils.encrypt(userID), orderNo, "");
+            CarInsuranceQueryResponse.CarInsuranceData insuranceData = gsCrawlerRequestComponent.getInsuranceInformation(informationRequest, token);
 
             JSONObject desensitizationJson = JSONObject.parseObject(insuranceData.getDesensitizationJson());
-            desensitizationJson.put("taxPayerAddress",desensitizationJson.getString("address"));
-            desensitizationJson.put("taxPayerAddressChange","0");
-            desensitizationJson.put("taxPayerIdentifyNumber",desensitizationJson.getString("carOwnerCardNo"));
-            desensitizationJson.put("taxPayerIdentifyNumberChange","0");
+            desensitizationJson.put("taxPayerAddress", desensitizationJson.getString("address"));
+            desensitizationJson.put("taxPayerAddressChange", "0");
+            desensitizationJson.put("taxPayerIdentifyNumber", desensitizationJson.getString("carOwnerCardNo"));
+            desensitizationJson.put("taxPayerIdentifyNumberChange", "0");
 
-            log.info("获取保险信息成功{}",JSONObject.toJSONString(insuranceData));
+            log.info("获取保险信息成功{}", JSONObject.toJSONString(insuranceData));
 
-            CalculationInitializationRequest initializationRequest = new CalculationInitializationRequest(businessNatureCode,orderNo,userID,loginInfo);
+            CalculationInitializationRequest initializationRequest = new CalculationInitializationRequest(businessNatureCode, orderNo, userID, loginInfo);
             InsuranceInitResponse.InsuranceInitData insuranceInitData = gsCrawlerRequestComponent.calculationInitialization(initializationRequest, token);
             InsuranceInitResponse.OrderVo orderVo = insuranceInitData.getOrderVo();
 
@@ -614,27 +633,27 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             List<InsuranceInitResponse.ClauseInfo> clauseInfoList = insuranceInitData.getClauseInfoList();
             // TODO 配置险种参数
             configClauseInfo(clauseInfoList, quoteVo);
-            DoCalculateRequest doCalculateRequest = new DoCalculateRequest(desensitizationJson,orderVo,clauseInfoList,syShow,loginInfo,bindInfo);
+            DoCalculateRequest doCalculateRequest = new DoCalculateRequest(desensitizationJson, orderVo, clauseInfoList, syShow, loginInfo, bindInfo);
             PremiumCalculateResponse premiumCalculateResponse = gsCrawlerRequestComponent.doCalculate(doCalculateRequest, token);
             return repeat(premiumCalculateResponse, orderNo, redisValue, quoteVo, insuranceInformation, loginInfo,
-                     vehicleModelDetail, bindInfo, businessNatureCode, token, syShow);
+                    vehicleModelDetail, bindInfo, businessNatureCode, token, syShow);
 
 
-        }catch (Exception e){
-            log.error("报价失败{}",e);
+        } catch (Exception e) {
+            log.error("报价失败{}", e);
             throw new RuntimeException("报价失败");
         }
     }
 
 
-
     /**
      * 重复报价处理(处理重复投保问题)
+     *
      * @param premiumCalculateResponse 报价响应
      * @return 最终报价结果
      */
-    public QuoteResultsVo repeat(PremiumCalculateResponse premiumCalculateResponse,String orderNo,String redisValue,QuoteVo quoteVo,CarInsuranceQueryResponse.CarInsuranceData insuranceInformation,UserInfoResponse.UserData loginInfo,
-                       GsCrawlerCarQueryResponse.VehicleModelDetail vehicleModelDetail,JSONObject bindInfo,String businessNatureCode,String token,String syShow) {
+    public QuoteResultsVo repeat(PremiumCalculateResponse premiumCalculateResponse, String orderNo, String redisValue, QuoteVo quoteVo, CarInsuranceQueryResponse.CarInsuranceData insuranceInformation, UserInfoResponse.UserData loginInfo,
+                                 GsCrawlerCarQueryResponse.VehicleModelDetail vehicleModelDetail, JSONObject bindInfo, String businessNatureCode, String token, String syShow) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         // 2. 处理商业险重复投保
         String jqRepeatinfo = "";
@@ -665,38 +684,38 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
                 info = syRepeatinfo + ";";
             }
             String errorMsg = info + premiumCalculateResponse.getMsg();
-            log.error("报价失败,errorMsg:{}",errorMsg);
+            log.error("报价失败,errorMsg:{}", errorMsg);
             quoteResultsVo.setErrorMessage(errorMsg);
             quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
-        }else if ("200".equals(premiumCalculateResponse.getStatus())){
+        } else if ("200".equals(premiumCalculateResponse.getStatus())) {
             FeeCalculateResponse.DataDTO dataDTO = gsCrawlerRequestComponent.creatOrder(token, CreatOrderRequest.creatOrderRequest(premiumCalculateResponse.getData(), syShow, redisValue, loginInfo));
             Object businessCalcFeeVo = dataDTO.getBusinessCalcFeeVo();
             String sy_discountRate = "";
             String discountRate = "";
-            if (businessCalcFeeVo != null){
+            if (businessCalcFeeVo != null) {
                 sy_discountRate = JSONObject.parseObject(JSONObject.toJSONString(businessCalcFeeVo)).getString("'discountRate'");
                 discountRate = JSONObject.parseObject(JSONObject.toJSONString(businessCalcFeeVo)).getString("artifSelfPricesRat");
             }
             FeeCalculateResponse.CrossCalcFeeVoDTO crossCalcFeeVo = dataDTO.getCrossCalcFeeVo();
             String jq_discountRate = "";
-            if (crossCalcFeeVo != null){
+            if (crossCalcFeeVo != null) {
                 jq_discountRate = String.valueOf(crossCalcFeeVo.getRunPoundageRatio());
             }
             // 4. 存储结果到Redis
             HashMap<String, String> saveRedis = new HashMap<>();
             saveRedis.put("username", loginInfo.getUserCode());
             saveRedis.put("businessOffice", loginInfo.getUserDepartment());
-            saveRedis.put("structureId",loginInfo.getProvincialCom());
-            saveRedis.put("userCode",JSONObject.parseObject(redisValue).getString("userID"));
+            saveRedis.put("structureId", loginInfo.getProvincialCom());
+            saveRedis.put("userCode", JSONObject.parseObject(redisValue).getString("userID"));
             saveRedis.put("token", JSONObject.parseObject(redisValue).getString("token"));
-            saveRedis.put("license",quoteVo.getCarInfoVo().getLicenseNo());
-            saveRedis.put("zhanghao_info",loginInfo.getProvincialCom());
-            saveRedis.put("gs_info",JSONObject.toJSONString(bindInfo));
+            saveRedis.put("license", quoteVo.getCarInfoVo().getLicenseNo());
+            saveRedis.put("zhanghao_info", loginInfo.getProvincialCom());
+            saveRedis.put("gs_info", JSONObject.toJSONString(bindInfo));
             saveRedis.put("carinfo", JSON.toJSONString(vehicleModelDetail));
-            saveRedis.put("sy_discountRate",sy_discountRate);
-            saveRedis.put("syShow",syShow);
-            saveRedis.put("discountRate",discountRate);
-            saveRedis.put("jq_discountRate",jq_discountRate);
+            saveRedis.put("sy_discountRate", sy_discountRate);
+            saveRedis.put("syShow", syShow);
+            saveRedis.put("discountRate", discountRate);
+            saveRedis.put("jq_discountRate", jq_discountRate);
             String tranNo = "";
             String orderId = "";
             if ("200".equals(premiumCalculateResponse.getStatus())) {
@@ -705,12 +724,12 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
                 orderId = resOrderVo.getOrderNo();
             }
             saveRedis.put("orderId", orderId);
-            saveRedis.put("tranNo",tranNo);
-            saveRedis.put("bj_res",JSONObject.toJSONString(premiumCalculateResponse));
+            saveRedis.put("tranNo", tranNo);
+            saveRedis.put("bj_res", JSONObject.toJSONString(premiumCalculateResponse));
             saveRedis.put("bjresdata", JSON.toJSONString(premiumCalculateResponse.getData()));
-            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + quoteVo.getOrder().getOrdersNo(), JSONObject.toJSONString(saveRedis),GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
-            return processCalcSuccessResult(premiumCalculateResponse,quoteVo,token);
-        }else {
+            redisTemplate.opsForValue().set(GsConstants.GS_REDIS_QUOTE_KEY + quoteVo.getOrder().getOrdersNo(), JSONObject.toJSONString(saveRedis), GsConstants.REDIS_EXPIRE_SECONDS, TimeUnit.SECONDS);
+            return processCalcSuccessResult(premiumCalculateResponse, quoteVo, token);
+        } else {
             quoteResultsVo.setErrorMessage("报价失败");
             quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
         }
@@ -719,29 +738,32 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     /**
      * 处理报价成功结果
+     *
      * @param premiumCalculateResponse 报价响应
      * @return 格式化后的报价结果
      */
-    private QuoteResultsVo processCalcSuccessResult(PremiumCalculateResponse premiumCalculateResponse,QuoteVo quoteVo,String token) {
+    private QuoteResultsVo processCalcSuccessResult(PremiumCalculateResponse premiumCalculateResponse, QuoteVo quoteVo, String token) {
         // 1. 解析报价数据
         PremiumCalculateResponse.DataDTO data = premiumCalculateResponse.getData();
         PremiumCalculateResponse.OrderVoDTO orderVo = data.getOrderVo();
         List<PremiumCalculateResponse.ClauseInfoListDTO> clauseInfoList = data.getClauseInfoList();
-        JSONObject jsonObject = parseClausePrice(JSON.parseObject(JSONObject.toJSONString(clauseInfoList), new TypeReference<>() {}));
+        JSONObject jsonObject = parseClausePrice(JSON.parseObject(JSONObject.toJSONString(clauseInfoList), new TypeReference<>() {
+        }));
         // 6. 解析出险次数
-        Map<String, String> accidentResult = getAccidentRecord(orderVo.getOrderNo(),token);
-        return GuoShouCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(premiumCalculateResponse,accidentResult,quoteVo);
+        Map<String, String> accidentResult = getAccidentRecord(orderVo.getOrderNo(), token);
+        return GuoShouCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(premiumCalculateResponse, accidentResult, quoteVo);
     }
 
 
     /**
      * 获取出险次数
+     *
      * @return 出险次数Map(交强险、商业险)
      */
-    private Map<String, String> getAccidentRecord(String orderId,String token) {
+    private Map<String, String> getAccidentRecord(String orderId, String token) {
         Map<String, String> result = new HashMap<>();
         try {
-            JSONObject accidentResponse = gsCrawlerRequestComponent.doAccidentRecord(orderId,token);
+            JSONObject accidentResponse = gsCrawlerRequestComponent.doAccidentRecord(orderId, token);
             String res = JSONObject.toJSONString(accidentResponse);
             String jqAccident = FirstMatchUtils.getFirstMatch("claimTimesJQ\":\"(.*?)\"", res, 1);
             String syAccident = FirstMatchUtils.getFirstMatch("claimTimes\":\"(.*?)\"", res, 1);
@@ -759,6 +781,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     /**
      * 解析险种价格
+     *
      * @param clauseInfoList 险种列表
      */
     private JSONObject parseClausePrice(List<Map<String, Object>> clauseInfoList) {
@@ -826,12 +849,12 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     }
 
 
-
     /**
      * 配置险种参数(设置险种生效状态和保额)
+     *
      * @param clauseInfoList 险种列表
      */
-    private void configClauseInfo(List<InsuranceInitResponse.ClauseInfo> clauseInfoList,QuoteVo quoteVo) {
+    private void configClauseInfo(List<InsuranceInitResponse.ClauseInfo> clauseInfoList, QuoteVo quoteVo) {
         List<KindInfoVo> kindInfoVo = quoteVo.getKindInfoVo();
         String chesunChooseFlag = "off";
         String huahenChooseFlag = "off";
@@ -844,20 +867,20 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         String sanzheAmount = "";
         String ybw_sanzhe_amount = "";
         for (KindInfoVo infoVo : kindInfoVo) {
-            if ("机动车损失保险".equals(infoVo.getKindName())){
+            if ("机动车损失保险".equals(infoVo.getKindName())) {
                 chesunChooseFlag = "on";
             } else if ("车身划痕损失险".equals(infoVo.getKindName())) {
                 huahenChooseFlag = "on";
                 huahenAmount = infoVo.getAmount();
-            }else if ("附加绝对免赔率特约险(机动车损失保险)".equals(infoVo.getKindName())){
+            } else if ("附加绝对免赔率特约险(机动车损失保险)".equals(infoVo.getKindName())) {
                 fujiachesunChooseFlag = "on";
                 fujiachesunAmount = infoVo.getAmount();
             } else if ("机动车第三者责任保险".equals(infoVo.getKindName())) {
                 sanzheChooseFlag = "on";
                 sanzheAmount = infoVo.getAmount();
-            } else if ("机动车第三者责任保险法定节假日限额翻倍险".equals(infoVo.getKindName())){
+            } else if ("机动车第三者责任保险法定节假日限额翻倍险".equals(infoVo.getKindName())) {
                 fujia_jiejiari_chooseFlag = "on";
-            } else if ("附加医保外用药责任险(机动车第三者责任保险)".equals(infoVo.getKindName())){
+            } else if ("附加医保外用药责任险(机动车第三者责任保险)".equals(infoVo.getKindName())) {
                 ybw_sanzhe_chooseFlag = "on";
                 ybw_sanzhe_amount = infoVo.getAmount();
             }
@@ -866,7 +889,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             String clauseName = clause.getClauseName();
             // 过滤特约服务条款
             if ("特约服务条款".equals(clauseName)) {
-                configSpecialClause(clause,quoteVo);
+                configSpecialClause(clause, quoteVo);
                 continue;
             }
             // 机动车损失险/新能源汽车损失险
@@ -908,7 +931,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
                                 info.setOriCurAmount(sanzheAmount);
                             }
                         } else if (subClauseName.contains("附加医保外医疗费用责任险(机动车第三者责任保险)") || subClauseName.contains("附加医保外医疗费用责任险(新能源汽车第三者责任保险)")) {
-                                info.setEffect( "on".equals(ybw_sanzhe_chooseFlag) ? "Y" : "N");
+                            info.setEffect("on".equals(ybw_sanzhe_chooseFlag) ? "Y" : "N");
                             if ("on".equals(ybw_sanzhe_chooseFlag)) {
                                 info.setOriCurAmount(ybw_sanzhe_amount);
                             }
@@ -926,9 +949,10 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     /**
      * 配置特约服务条款(道路救援、代驾、检测)
+     *
      * @param clauseInfo 特约服务条款
      */
-    private void configSpecialClause(InsuranceInitResponse.ClauseInfo clauseInfo,QuoteVo quoteVo) {
+    private void configSpecialClause(InsuranceInitResponse.ClauseInfo clauseInfo, QuoteVo quoteVo) {
         List<KindInfoVo> kindInfoVo = quoteVo.getKindInfoVo();
         String daolujy_chooseFlag = "off";
         String daijia_chooseFlag = "off";
@@ -953,17 +977,17 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         for (InsuranceInitResponse.ClauseInfo info : clauseInfo.getClauseInfoVoList()) {
             String subClauseName = info.getClauseName();
             if ("on".equals(daolujy_chooseFlag)) {
-                if ((subClauseName.contains("附加机动车道路救援服务特约条款")) || (subClauseName.contains("附加新能源汽车道路救援服务特约条款"))){
+                if ((subClauseName.contains("附加机动车道路救援服务特约条款")) || (subClauseName.contains("附加新能源汽车道路救援服务特约条款"))) {
                     info.setEffect("Y");
                     info.setCompensationDays(daolujy_times);
                 }
             } else if ("on".equals(daijia_chooseFlag)) {
-                if ((subClauseName.contains("附加机动车车辆安全检测特约条款")) || (subClauseName.contains("附加新能源汽车车辆安全检测特约条款"))){
+                if ((subClauseName.contains("附加机动车车辆安全检测特约条款")) || (subClauseName.contains("附加新能源汽车车辆安全检测特约条款"))) {
                     info.setEffect("Y");
                     info.setCompensationDays(daijia_times);
                 }
             } else if ("on".equals(jiance_chooseFlag)) {
-                if ((subClauseName.contains("附加机动车代为驾驶服务特约条款")) || (subClauseName.contains("附加新能源汽车代为驾驶服务特约条款"))){
+                if ((subClauseName.contains("附加机动车代为驾驶服务特约条款")) || (subClauseName.contains("附加新能源汽车代为驾驶服务特约条款"))) {
                     info.setEffect("Y");
                     info.setCompensationDays(jiance_times);
                 }
@@ -977,7 +1001,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     /**
      * 图片上传
      */
-    public JSONObject upload(List<InsuranceImageVo> imageVoList,String JQ_Policy,String SY_Policy,String JYX_Policy,UserInfoResponse.UserData loginInfo,JSONObject bindInfo,JSONObject quoteInfo,String redisValue) {
+    public JSONObject upload(List<InsuranceImageVo> imageVoList, String JQ_Policy, String SY_Policy, String JYX_Policy, UserInfoResponse.UserData loginInfo, JSONObject bindInfo, JSONObject quoteInfo, String redisValue) {
         String ryMessage = null; // 人员照片错误
         String rybMessage = null; // 人员照片背面错误
         String clMessage = null; // 行驶证照片错误
@@ -986,7 +1010,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             String imageType = insuranceImageVo.getImageCode();
             InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
             // 构建图片请求参数
-            ImageUploadRequest uploadRequest = new ImageUploadRequest(imageDTO, quoteInfo, loginInfo,JQ_Policy,SY_Policy,imageType);
+            ImageUploadRequest uploadRequest = new ImageUploadRequest(imageDTO, quoteInfo, loginInfo, JQ_Policy, SY_Policy, imageType);
             CheckImageResponse checkImage = gsCrawlerRequestComponent.doCheckImage(redisValue, uploadRequest);
             if (!"200".equals(checkImage.getStatus()) && !"201".equals(checkImage.getStatus())) {
                 log.error("图片上传失败:{}", checkImage.getMsg());
@@ -1011,8 +1035,8 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
                 }
                 continue;
             }
-            UploadImagesRequest imageBusinessRequest = new UploadImagesRequest(loginInfo,JQ_Policy,SY_Policy,imageType,checkImage.getData(),quoteInfo,imageDTO.getImageBase64Str());
-            gsCrawlerRequestComponent.uploadImages(imageBusinessRequest,redisValue);
+            UploadImagesRequest imageBusinessRequest = new UploadImagesRequest(loginInfo, JQ_Policy, SY_Policy, imageType, checkImage.getData(), quoteInfo, imageDTO.getImageBase64Str());
+            gsCrawlerRequestComponent.uploadImages(imageBusinessRequest, redisValue);
         }
 
         // 构建返回结果
@@ -1021,9 +1045,12 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
             result.put("code", 400);
             StringBuilder msg = new StringBuilder();
             if (ryMessage != null) msg.append("人员照片------------------------").append(ryMessage);
-            if (clMessage != null) msg.append("------------------------行驶证照片------------------------").append(clMessage);
-            if (rybMessage != null) msg.append("------------------------人员照片背面------------------------").append(rybMessage);
-            if (clbMessage != null) msg.append("------------------------行驶证照片背面------------------------").append(clbMessage);
+            if (clMessage != null)
+                msg.append("------------------------行驶证照片------------------------").append(clMessage);
+            if (rybMessage != null)
+                msg.append("------------------------人员照片背面------------------------").append(rybMessage);
+            if (clbMessage != null)
+                msg.append("------------------------行驶证照片背面------------------------").append(clbMessage);
             result.put("message", msg.toString());
         } else {
             result.put("code", 200);
@@ -1043,7 +1070,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     }
 
 
-    public Map<String, Object> getTokenData(String string){
+    public Map<String, Object> getTokenData(String string) {
         Pattern pattern = Pattern.compile("no=(.*?)&");
         Matcher matcher = pattern.matcher(string);
         List<String> noList = new ArrayList<>();
@@ -1056,7 +1083,7 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
         return tokenData;
     }
 
-    public void revocation(String orderNo){
+    public void revocation(String orderNo) {
 //        String userName = "";
 //        // 查询loginInfo
 //        UserInfoResponse.UserData loginInfo = getLoginInfo(attributionInformationVo);
@@ -1076,6 +1103,4 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
     }
 
 
-
-
 }

+ 2 - 4
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java

@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.exception.SystemException;
-import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
@@ -28,6 +27,7 @@ import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.reactive.function.client.WebClientResponseException;
 
@@ -56,8 +56,6 @@ public class HengBangCrawlerRequestComponent {
 
     private final RequestComponent requestComponent;
 
-    private final RestTemplate restTemplate;
-
     /**
      * 验证码
      *
@@ -184,7 +182,7 @@ public class HengBangCrawlerRequestComponent {
      */
     public HttpHeaders getHeaders(String username, String password) {
         String authorization = getAuthorization(username);
-        if (!org.springframework.util.StringUtils.hasLength(authorization)) {
+        if (!StringUtils.hasLength(authorization)) {
             authorization = authenticate(username, password, RequestConstant.REQUEST_NUMBER);
         }
         HttpHeaders headers = new HttpHeaders();

+ 13 - 0
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java

@@ -24,6 +24,7 @@ import com.jzg.commons.util.MinioUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
@@ -43,6 +44,7 @@ import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.compress.utils.IOUtils;
 import org.springframework.http.HttpHeaders;
+import org.springframework.util.StringUtils;
 
 
 import java.io.IOException;
@@ -83,6 +85,17 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         hbCrawlerRequestComponent.authenticate(loginBase.getUsername(), loginBase.getPassword(), RequestConstant.REQUEST_NUMBER);
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String authorization = hbCrawlerRequestComponent.getAuthorization(username);
+        if (!StringUtils.hasLength(authorization)) {
+            authorization = hbCrawlerRequestComponent.authenticate(username, password, RequestConstant.REQUEST_NUMBER);
+        }
+        return StringUtils.hasLength(authorization);
+    }
+
     /**
      * 报价
      *

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

@@ -5,6 +5,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.DistributedLockComponent;
 import com.jzg.quotation.commons.component.RedissonComponent;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerCacheComponent;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerRequestComponent;

+ 28 - 20
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java

@@ -11,6 +11,7 @@ import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
@@ -54,7 +55,15 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
     @Override
     public void login(LoginBase loginBase) {
-        huaNongCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword(), null,true);
+        huaNongCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword(), null, true);
+    }
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String token = huaNongCrawlerGetToken.getToken(username, password);
+        return StringUtils.hasText(token);
     }
 
     @Override
@@ -106,7 +115,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         QuoteResultsVo quoteResultsVo = HuaNongCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder()
                 .getOrdersNo(), quoteVo, huaNongCrawlerQuotedPriceResponse, saveResponse);
         // 7 将订单信息保存到mongodb(后续需要使用)
-        huaNongCrawlerOrderService.saveOrder(quoteResultsVo.getOrdersNo(), quoteResultsVo.getCiPolicyNumber(), quoteResultsVo.getBiPolicyNumber(),quoteResultsVo.getJyPolicyNumber());
+        huaNongCrawlerOrderService.saveOrder(quoteResultsVo.getOrdersNo(), quoteResultsVo.getCiPolicyNumber(), quoteResultsVo.getBiPolicyNumber(), quoteResultsVo.getJyPolicyNumber());
         return quoteResultsVo;
     }
 
@@ -114,8 +123,8 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
      * 处理重复投保逻辑
      * 检测到重复投保时调整日期后重试,重试后仍重复投保则抛出异常
      *
-     * @param request 报价请求
-     * @param response 报价响应
+     * @param request     报价请求
+     * @param response    报价响应
      * @param httpHeaders 请求头
      * @return 处理后的报价响应
      */
@@ -306,9 +315,8 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     }
 
 
-
     // 处理重复投保
-    private HuaNongCrawlerQuotedPriceResponse repeatQuote(HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest,HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract,HttpHeaders httpHeaders) {
+    private HuaNongCrawlerQuotedPriceResponse repeatQuote(HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO contract, HttpHeaders httpHeaders) {
         String riskCode = contract.getContractMain().getRiskCode();
         if ("0510".equals(riskCode)) {
             String lastExpireDate = contract.getPlatFormMessage().getLastPolicyExpireDate();
@@ -322,7 +330,8 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
                         });
             }
         } else if ("0507".equals(riskCode)) {
-            String lastExpireDate = ensureDateTimeFormat(contract.getPlatFormMessage().getCiReinsureEndDate());;
+            String lastExpireDate = ensureDateTimeFormat(contract.getPlatFormMessage().getCiReinsureEndDate());
+            ;
             if (lastExpireDate != null && !lastExpireDate.trim().isEmpty()) {
                 huaNongCrawlerQuotedPriceRequest.getBusinessData().getContract().stream()
                         .filter(dto -> "0507".equals(dto.getContractMain().getRiskCode()))
@@ -336,7 +345,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         return huaNongCrawlerRequestComponent.quotedPrice(huaNongCrawlerQuotedPriceRequest, httpHeaders);
     }
 
-    public  String ensureDateTimeFormat(String dateStr) {
+    public String ensureDateTimeFormat(String dateStr) {
         if (dateStr == null || dateStr.trim().isEmpty()) {
             return "";
         }
@@ -408,7 +417,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
             String payUrl = huaNongCrawlerRequestComponent.getPayUrl(ciPolicyNumber, biPolicyNumber, username);
             log.info("支付链接获取完成: {}", payUrl);
             // 返回转人工结果
-            return convertToUnderwritingResultsVo(manualSubmit,payUrl);
+            return convertToUnderwritingResultsVo(manualSubmit, payUrl);
         }
 
         // 正常核保:获取支付链接
@@ -423,7 +432,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         log.info("支付链接获取完成: {}", payUrl);
 
         // 正常核保结果
-        return convertToUnderwritingResultsVo(submit,payUrl);
+        return convertToUnderwritingResultsVo(submit, payUrl);
 
     }
 
@@ -473,11 +482,11 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     /**
      * 将华农核保响应转换为系统核保结果
      *
-     * @param submit   华农核保响应
+     * @param submit 华农核保响应
      * @param payUrl 系统订单号
      * @return 系统核保结果
      */
-    private UnderwritingResultsVo convertToUnderwritingResultsVo(HuaNongCrawlerSubmitResponse submit,String payUrl) {
+    private UnderwritingResultsVo convertToUnderwritingResultsVo(HuaNongCrawlerSubmitResponse submit, String payUrl) {
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
 
         if (submit == null || submit.getAppliResult() == null || submit.getAppliResult().isEmpty()) {
@@ -485,7 +494,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         }
         String status = submit.getAppliResult().get(0).getStatus();
         // 核保返回状态8 是 成功,9 是人工核保
-        if("8".equals(status) || "9".equals(status)){
+        if ("8".equals(status) || "9".equals(status)) {
             // 遍历所有险种结果(交强、商业等)
             StringBuilder underwritingResultBuilder = new StringBuilder();
             for (HuaNongCrawlerSubmitResponse.AppliResultDTO appliResult : submit.getAppliResult()) {
@@ -522,7 +531,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
             underwritingResultsVo.setPaymentLink(payUrl);
 
             return underwritingResultsVo;
-        }else{
+        } else {
             throw new SystemException(submit.getAppliResult().get(0).getNotion().get(0).getUWNotion());
         }
 
@@ -530,7 +539,6 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     }
 
 
-
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         HuaNongCrawlerOrder huaNongCrawlerOrder = huaNongCrawlerOrderService.getById(paymentLinkVo.getOrder()
@@ -564,8 +572,9 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
                 .getAttributionInformationVo();
         LoginInfoBO loginInfoDto = getLoginInfoDto(attributionInformationVo);
         huaNongCrawlerQuoteProcessService.uploadImageToUnclassified(loginInfoDto, insuranceUploadImageVo.getOrder()
-                .getAgreementId(), contractNo, policyNumbers,insuranceUploadImageVo.getImageVoList());
+                .getAgreementId(), contractNo, policyNumbers, insuranceUploadImageVo.getImageVoList());
     }
+
     private String buildContractNo(String biPolicyNumber, String ciPolicyNumber) {
         boolean hasBi = biPolicyNumber != null && !biPolicyNumber.isEmpty();
         boolean hasCi = ciPolicyNumber != null && !ciPolicyNumber.isEmpty();
@@ -665,7 +674,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         HuaNongCrawlerFindBusinessesRequestRequest huaNongCrawlerFindBusinessesRequest
                 = new HuaNongCrawlerFindBusinessesRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), policyNo, order.getRecordingTime());
         HuaNongCrawlerFindBusinessesResponse businesses = huaNongCrawlerRequestComponent.findBusinesses(huaNongCrawlerFindBusinessesRequest, httpHeaders);
-        OrderStatusResultVo vo  =  new OrderStatusResultVo();
+        OrderStatusResultVo vo = new OrderStatusResultVo();
         vo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
         vo.setJqPolicyno(order.getCiPolicyNumber());
         vo.setJyPolicyno(order.getNiInfos().get(0).getNiPolicyNumber());
@@ -682,7 +691,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         HuaNongCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HuaNongCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         //todo  验证码问题,临时使用token
         //cacheLoginInfo(attributionInformationVo);
-        RMap<String, Object> authorization = huaNongCrawlerGetToken.getAuthorization(attributionInformationVo.getUsername(), attributionInformationVo.getPassword(),parameters.getDeviceid());
+        RMap<String, Object> authorization = huaNongCrawlerGetToken.getAuthorization(attributionInformationVo.getUsername(), attributionInformationVo.getPassword(), parameters.getDeviceid());
         String token = (String) authorization.get(HuaNongCrawlerCacheComponent.TOKEN);
         String userCode = (String) authorization.get(HuaNongCrawlerCacheComponent.USER_CODE);
         String userName = (String) authorization.get(HuaNongCrawlerCacheComponent.USER_NAME);
@@ -693,7 +702,7 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
     public void cacheLoginInfo(AttributionInformationVo attributionInformationVo) {
         Map<String, Object> collect = new HashMap<>();
-        String redisKey = "hunong:crawler:authorization:"+attributionInformationVo.getUsername();
+        String redisKey = "hunong:crawler:authorization:" + attributionInformationVo.getUsername();
         RMap<String, Object> rMap = redissonClient.getMap(redisKey);
         collect.put("TOKEN", attributionInformationVo.getConfigInfo().get("token"));
         collect.put("USER_CODE", attributionInformationVo.getUsername());
@@ -704,5 +713,4 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     }
 
 
-
 }

+ 8 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java

@@ -17,6 +17,7 @@ import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
@@ -74,6 +75,13 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     /**
      * 报价
      *

+ 19 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java

@@ -6,21 +6,26 @@ 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.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 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;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.huatai.crawler.build.HuaTaiCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.huatai.crawler.component.HtCrawlerRequestComponent;
+import com.jzg.quotation.huatai.crawler.component.HuaTaiCrawlerCacheComponent;
 import com.jzg.quotation.huatai.crawler.constant.HtRequestConstant;
+import com.jzg.quotation.huatai.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.huatai.crawler.entity.HtCrawlerConfigureParameters;
 import com.jzg.quotation.huatai.crawler.entity.Request.*;
 import com.jzg.quotation.huatai.crawler.entity.Response.*;
 import com.jzg.quotation.huatai.crawler.entity.dto.LoginDTO;
 import com.jzg.quotation.huatai.crawler.entity.po.HtCrawlerOrder;
+import com.jzg.quotation.huatai.crawler.properties.HuaTaiCrawlerProperties;
 import com.jzg.quotation.huatai.crawler.service.HtCrawlerOrderService;
 import com.jzg.quotation.huatai.crawler.service.HuaTaiCrawlerRequest;
 import com.jzg.quotation.huatai.crawler.util.HuaTaiCryptUtil;
@@ -45,8 +50,11 @@ import java.util.Base64;
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_HTIC)
 @RequiredArgsConstructor
 public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
+
     private final HtCrawlerRequestComponent htCrawlerRequestComponent;
 
+    private final HuaTaiCrawlerProperties huaTaiCrawlerProperties;
+
     private final HtCrawlerOrderService htCrawlerOrderService;
 
     @Value("${huatai.api.username}")
@@ -68,6 +76,17 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
 
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String cookie = htCrawlerRequestComponent.getCookie();
+        if (!StringUtils.hasText(cookie)) {
+            cookie = htCrawlerRequestComponent.getHaTaiCookie(RequestUrl.NE_COOKIE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()));
+        }
+        return StringUtils.hasText(cookie);
+    }
+
     /**
      * @param loginDTO
      */

+ 7 - 0
tenant/insurance/quotation-renbao/src/main/java/com/jzg/quotation/renbao/crawler/service/impl/RenBaoCrawlerRequestImpl.java

@@ -7,6 +7,7 @@ import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.renbao.crawler.component.RenBaoCrawlerRequestComponent;
 import com.jzg.quotation.renbao.crawler.constant.enums.ClauseTypeEnum;
 import com.jzg.quotation.renbao.crawler.entity.dto.PrpCinsuredsDTO;
@@ -37,7 +38,13 @@ public class RenBaoCrawlerRequestImpl implements RenBaoCrawlerRequest {
 
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
 
+    }
 
 
     @Override

+ 9 - 1
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/RenBaoNewCrawlerGetToken.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.renbaonew.crawler.service;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.renbaonew.crawler.entity.RenBaoNewCrawlerConfigureParameters;
 import org.redisson.api.RMap;
 
@@ -16,7 +17,14 @@ public interface RenBaoNewCrawlerGetToken {
      * @param username 用户     * @param password 密码
      * @return 令牌字符     */
     String getToken(String username, String password);
-    
+
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest 检测登录请求
+     * @return 登录结果
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
     /**
      * 获取授权信息
      * 

+ 12 - 1
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerGetTokenImpl.java

@@ -4,6 +4,8 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.jwt.JWT;
 import cn.hutool.jwt.JWTUtil;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerCacheComponent;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerRequestComponent;
 import com.jzg.quotation.renbaonew.crawler.entity.RenBaoNewCrawlerConfigureParameters;
@@ -44,7 +46,16 @@ public class RenBaoNewCrawlerGetTokenImpl implements RenBaoNewCrawlerGetToken {
         }
         return token;
     }
-    
+
+
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        RMap<String, Object> authorization = getAuthorization(username, password, null);
+        String token = (String) authorization.get(RenBaoNewCrawlerCacheComponent.TOKEN);
+        return StringUtils.hasText(token);
+    }
+
     /**
      * 获取授权信息
      *

+ 6 - 0
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 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.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerCacheComponent;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerRequestComponent;
@@ -65,6 +66,11 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         getTokenService.getToken(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return getTokenService.detectLogin(detectLoginRequest);
+    }
+
     /**
      * 报价方法
      *

+ 8 - 0
tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/ShenNengCrawlerLoginService.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.shenneng.crawler.service;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import org.springframework.http.HttpHeaders;
 
 public interface ShenNengCrawlerLoginService {
@@ -11,4 +12,11 @@ public interface ShenNengCrawlerLoginService {
      * @param password 密码
      */
     String login(String userName, String password);
+
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest 检测登录信息
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
 }

+ 9 - 0
tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/impl/ShenNengCrawlerLoginServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.shenneng.crawler.service.impl;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.shenneng.crawler.compoent.ShenNengCrawlerRequestComponent;
 import com.jzg.quotation.shenneng.crawler.service.ShenNengCrawlerLoginService;
 import lombok.RequiredArgsConstructor;
@@ -25,4 +26,12 @@ public class ShenNengCrawlerLoginServiceImpl implements ShenNengCrawlerLoginServ
         }
         return null;
     }
+
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
 }

+ 8 - 0
tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/impl/ShenNengCrawlerRequestImpl.java

@@ -5,6 +5,7 @@ import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.shenneng.crawler.service.ShenNengCrawlerLoginService;
 import com.jzg.quotation.shenneng.crawler.service.ShenNengCrawlerRequest;
 import lombok.RequiredArgsConstructor;
@@ -15,11 +16,18 @@ public class ShenNengCrawlerRequestImpl implements ShenNengCrawlerRequest {
 
 
     private final ShenNengCrawlerLoginService shenNengCrawlerLoginService;
+
     @Override
     public void login(LoginBase loginBase) {
         shenNengCrawlerLoginService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return shenNengCrawlerLoginService.detectLogin(detectLoginRequest);
+    }
+
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         return null;

+ 26 - 18
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -37,11 +37,13 @@ import com.jzg.commons.exception.TokenExpireException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PlatformClient;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.service.GetCaptchaBaseService;
 import com.jzg.quotation.commons.service.QuotationBaseService;
+import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
-import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerOrderService;
+import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerRequest;
 import com.jzg.quotation.summary.aop.AuditVerification;
 import com.jzg.quotation.summary.aop.OrderOperationLog;
 import com.jzg.quotation.summary.aop.QuoteVerification;
@@ -142,13 +144,11 @@ public class UnifyOrderManager {
     InsFeeOrdersService insFeeOrdersService;
 
     @Autowired
-    GuoRenCrawlerOrderService guoRenCrawlerOrderService;
-
-    @Autowired
-    GetCaptchaBaseService captchaBaseService;
+    private GuoRenCrawlerRequest guoRenCrawlerRequest;
 
     @Autowired
     private ZhongMeiCrawlerRequest zhongMeiCrawlerRequest;
+
     @Autowired
     private InsOrderRightsInfoService insOrderRightsInfoService;
 
@@ -251,7 +251,7 @@ public class UnifyOrderManager {
         }
         PtlAgreement ptlAgreement = byCompanyId.getData().stream().filter(x -> x.getId().equals(quoteVo.getOrder().getAgreementId())).findFirst().orElse(null);
         if (Objects.isNull(ptlAgreement)) {
-            log.info("协议不存在。quoteVo.getOrder().getAgreementId()=[{}]",quoteVo.getOrder().getAgreementId());
+            log.info("协议不存在。quoteVo.getOrder().getAgreementId()=[{}]", quoteVo.getOrder().getAgreementId());
             throw new SystemException("协议不存在");
         }
         quoteVo.getOrder().setAgreementId(ptlAgreement.getId());
@@ -399,7 +399,7 @@ public class UnifyOrderManager {
      * 记录规则完成
      */
     private void completeRule(String tenantId, String userId, String userPhone, String activityId,
-                              String tableId, String qutNum, String qutLotteryNum, String qutLotteryMax,Integer status, Integer activityType) {
+                              String tableId, String qutNum, String qutLotteryNum, String qutLotteryMax, Integer status, Integer activityType) {
         SysUserActivityCompleteInRule exist = null;
         // 先查询是否已存在记录(防重入)
         if (9 != activityType) {
@@ -436,7 +436,7 @@ public class UnifyOrderManager {
         insOrdersService.insertActivityCompleteInRule(record);
 
         log.info("报价规则完成,tenantId={}, userId={}, activityId={}, qutNum={}, qutLotteryNum={}, qutLotteryMax={}",
-                tenantId, userId, activityId, qutNum, qutLotteryNum,  qutLotteryMax);
+                tenantId, userId, activityId, qutNum, qutLotteryNum, qutLotteryMax);
     }
 
 
@@ -469,7 +469,7 @@ public class UnifyOrderManager {
         InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
         InsOrdersTax insOrdersTax = insOrdersTaxService.getById(insOrders.getId());
-        List<InsOrdersKind> insOrdersKindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo,insOrders.getId()));
+        List<InsOrdersKind> insOrdersKindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo, insOrders.getId()));
         InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getByOrderId(insOrders.getId());
         // 核保之前判断是否是待核保  或 核保失败
         StateResult stateResult;
@@ -543,7 +543,7 @@ public class UnifyOrderManager {
                     insOrderRightsInfoService.saveInsOrderRightsInfo(underwritingVo.getInsOrderRightsInfoDto(), underwritingVo.getOrder().getOrdersNo());
                 }
             }
-            asyncGetPayLink.paymentLink(quoteService,underwritingVo.getOrder(),esmInsCompanyHttpResult.getData().getCompanyCode());
+            asyncGetPayLink.paymentLink(quoteService, underwritingVo.getOrder(), esmInsCompanyHttpResult.getData().getCompanyCode());
             return HttpResult.ok("核保成功");
         } else {
             if (underwritingResultsVo.getUnderwritingStatus().equals(InsOrderStatusEnum.AUDIT_FAIL)) {
@@ -728,7 +728,7 @@ public class UnifyOrderManager {
         insOrdersQrcodeService.saveQrCode(insOrders);
         //////////////////////////////////////////新增营销抽奖活动////////////////////////////////////////////////
         // 承保(客户)、出单(业务员)
-        if(orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED) {
+        if (orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED) {
             // 远程调用活动列表
             // 匹配规则
             // 规则一:累计出单()次,可得()次抽奖机会
@@ -758,7 +758,7 @@ public class UnifyOrderManager {
                                 if (new BigDecimal(totalFee).compareTo(underwritingRuleVO.getUwMinPremium()) >= 0 && new BigDecimal(totalFee).compareTo(underwritingRuleVO.getUwMaxPremium()) <= 0) {
                                     // 存本地记录 等绑定后更新本地记录的同步状态字段即可
                                     completeRule(null, null, userPhone, activity.getId(),
-                                            table.getId(), underwritingRuleVO.getUwMinPremium()+"-"+underwritingRuleVO.getUwMaxPremium() , underwritingRuleVO.getUwLotteryNum(),null ,YesNoEnum.NO.getCode(), 9);
+                                            table.getId(), underwritingRuleVO.getUwMinPremium() + "-" + underwritingRuleVO.getUwMaxPremium(), underwritingRuleVO.getUwLotteryNum(), null, YesNoEnum.NO.getCode(), 9);
                                     log.info("客户承保,满足条件插入记录,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
                                 }
                             }
@@ -790,12 +790,12 @@ public class UnifyOrderManager {
                                     if (count >= Integer.parseInt(orderRule.getOrdNum())) {
                                         // 存本地记录 等绑定后更新本地记录的同步状态字段即可
                                         completeRule(baseController.getUserSystemCode(), insOrders.getRealQuoteUserId(), null, activity.getId(),
-                                                table.getId(), orderRule.getOrdNum() , String.valueOf(orderRule.getOrdLotteryNum()),null ,YesNoEnum.NO.getCode(), 8);
+                                                table.getId(), orderRule.getOrdNum(), String.valueOf(orderRule.getOrdLotteryNum()), null, YesNoEnum.NO.getCode(), 8);
 
                                         log.info("业务员出单,满足条件插入记录,userId:{},clientId:{},tenantId:{}", insOrders.getRealQuoteUserId(), CLIENT_ID, baseController.getUserSystemCode());
                                     }
                                 }
-                            }else {
+                            } else {
                                 Map<String, List<UnifiedUserClientVO>> userClientGroupMap = unifiedUserClientVOHttpResult.getData().getUserClients()
                                         .stream()
                                         .collect(Collectors.groupingBy(UnifiedUserClientVO::getClientId));
@@ -843,7 +843,7 @@ public class UnifyOrderManager {
     )
     @Operation(summary = "获取保单")
     @PostMapping("/downloadPolicy")
-    public HttpResult downloadPolicy(@RequestBody DownloadPolicyVo downloadPolicyVo) throws IOException {
+    public HttpResult downloadPolicy(@RequestBody DownloadPolicyVo downloadPolicyVo) {
         //获取保司实体
         InsOrders insOrders = insOrdersService.getById(downloadPolicyVo.getOrder().getOrdersNo());
         InsOrdersCarInfo carInfo = insOrdersCarInfoService.getByOrderId(insOrders.getId());
@@ -907,7 +907,7 @@ public class UnifyOrderManager {
         return HttpResult.ok(insOrdersPdfUrl);
     }
 
-    @PostMapping("login")
+    @PostMapping("test")
     @Operation(summary = "登录")
     public HttpResult login(@RequestBody LoginBase loginBase) {
         zhongMeiCrawlerRequest.login(loginBase);
@@ -917,14 +917,21 @@ public class UnifyOrderManager {
     @PostMapping("guoRenlogin")
     @Operation(summary = "国任登录")
     public HttpResult guoRenlogin(@RequestBody LoginBase loginBase) {
-        guoRenCrawlerOrderService.guoRenlogin(loginBase);
+        guoRenCrawlerRequest.login(loginBase);
         return HttpResult.ok();
     }
 
     @PostMapping("getGuoRenCaptcha")
     @Operation(summary = "国任登录验证码")
     public HttpResult getGuoRenCaptcha(@RequestBody GetCaptchaRequest sendCaptchaRequest) {
-        return HttpResult.ok(captchaBaseService.getCaptcha(sendCaptchaRequest));
+        return HttpResult.ok(guoRenCrawlerRequest.getCaptcha(sendCaptchaRequest));
+    }
+
+    @PostMapping("/detectLogin")
+    @Operation(summary = "保司账号检测是否登录")
+    public HttpResult detectLogin(@RequestBody DetectLoginRequest detectLoginRequest) {
+        QuotationBaseService detectLoginService = companyFactory.getDetectLoginService(detectLoginRequest);
+        return HttpResult.ok(detectLoginService.detectLogin(detectLoginRequest) ? "检测成功,已重新登录" : "登录失效,请输入验证码重新登录", detectLoginService.detectLogin(detectLoginRequest));
     }
 
     /**
@@ -971,6 +978,7 @@ public class UnifyOrderManager {
 
     /**
      * 格式化保费字符串:非空判断 + 保留两位小数
+     *
      * @param premium 原始保费字符串
      * @return 格式化后两位小数的字符串
      */

+ 10 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java

@@ -15,6 +15,7 @@ import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.commons.constants.quote.enums.base.ApiType;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.QuotationApiBaseService;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
@@ -106,6 +107,13 @@ public class CompanyFactory {
         throw new SystemException("报价类型出错,请联系管理员处理。");
     }
 
+    public QuotationBaseService getDetectLoginService(DetectLoginRequest detectLoginRequest) {
+        // 获取service
+        QuotationBaseService service = getQuotationBase(Integer.parseInt(detectLoginRequest.getApiType()), detectLoginRequest.getCompanyCode());
+
+        return service;
+    }
+
     /**
      * 获取保司实体
      *
@@ -131,7 +139,7 @@ public class CompanyFactory {
     public QuotationBaseService getUnderwritingService(InsOrders insOrders, String companyCode, BaseController baseController, UnderwritingVo underwritingVo) {
         //设置归属信息
         HttpResult<PtlAgreementAttribution> agreementAttribution = platformClient.getAgreementAttribution(insOrders.getAgreementId());
-        log.info("agreementId = [{}], agreementAttribution对象的值:[{}]",insOrders.getAgreementId(), JSON.toJSONString(agreementAttribution.getData()));
+        log.info("agreementId = [{}], agreementAttribution对象的值:[{}]", insOrders.getAgreementId(), JSON.toJSONString(agreementAttribution.getData()));
         AssertionUtils.isFail(agreementAttribution.getCode() == 500, "获取协议属性失败");
 
         //JSONArray fields = agreementAttribution.getData().getFields();
@@ -207,7 +215,7 @@ public class CompanyFactory {
         insuranceUploadImageVo.setCarInfo(insOrdersVo.getCarInfoVo());
         QuotationBaseService service = getQuotationBase(insuranceUploadImageVo.getOrder()
                 .getApiType(), insuranceUploadImageVo.getOrder().getInsuranceCompanyCode());
-        ImageParamHandlerDecorator imageParamHandlerDecorator = new ImageParamHandlerDecorator(service, minioClient, bucketName, insTaskImagesService,quoteImageRuleMappingService);
+        ImageParamHandlerDecorator imageParamHandlerDecorator = new ImageParamHandlerDecorator(service, minioClient, bucketName, insTaskImagesService, quoteImageRuleMappingService);
         service = ImageProxyFactory.createProxy(service,
                 imageParamHandlerDecorator);
         return service;

+ 0 - 1
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKQuotationBaseService.java

@@ -1,6 +1,5 @@
 package com.jzg.quotation.taikang.crawler.service;
 
-import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 
 public interface TKQuotationBaseService extends QuotationCrawlerBaseService {

+ 9 - 0
tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/TaiPingYangCrawlerQuoteProcessService.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.taipingyang.crawler.service;
 
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.quotation.commons.entity.CookiesRequest;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.taipingyang.crawler.entity.request.TaiPingYangCrawlerGuiShuRequest;
 import com.jzg.quotation.taipingyang.crawler.entity.response.TaiPingYangCrawlerGuiShuResponse;
 import org.springframework.http.HttpHeaders;
@@ -15,6 +16,14 @@ public interface TaiPingYangCrawlerQuoteProcessService {
      */
     HttpHeaders getHttpHeaders(AttributionInformationVo attributionInformationVo);
 
+    /**
+     * 检测登录
+     *
+     * @param detectLoginRequest
+     * @return
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
+
     /**
      * 获取归属信息
      *

+ 10 - 1
tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/impl/TaiPingYangCrawlerQuoteProcessServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.quotation.taipingyang.crawler.service.impl;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.quotation.commons.component.RedissonComponent;
 import com.jzg.quotation.commons.entity.CookiesRequest;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.taipingyang.crawler.component.TaiPingYangCrawlerCacheComponent;
 import com.jzg.quotation.taipingyang.crawler.component.TaiPingYangCrawlerRequestComponent;
 import com.jzg.quotation.taipingyang.crawler.entity.request.TaiPingYangCrawlerGuiShuRequest;
@@ -34,10 +35,18 @@ public class TaiPingYangCrawlerQuoteProcessServiceImpl implements TaiPingYangCra
         return httpHeaders;
     }
 
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return taiPingYangCrawlerCacheComponent.getAuthorization(username) != null;
+    }
+
     @Override
     public TaiPingYangCrawlerGuiShuResponse.ResultDTO getGuiShu(String agreementId, TaiPingYangCrawlerGuiShuRequest guiShuRequest, HttpHeaders headers, CookiesRequest cookiesRequest) {
         return redissonComponent.cacheJson(taiPingYangCrawlerCacheComponent.AGENT_DEFINE + agreementId, () -> {
-            TaiPingYangCrawlerGuiShuResponse guiShuResponse = taiPingYangCrawlerRequestComponent.getGuiShu(guiShuRequest , headers,cookiesRequest);
+            TaiPingYangCrawlerGuiShuResponse guiShuResponse = taiPingYangCrawlerRequestComponent.getGuiShu(guiShuRequest, headers, cookiesRequest);
             return guiShuResponse.getResult();
         }, TaiPingYangCrawlerGuiShuResponse.ResultDTO.class, Duration.ofHours(taiPingYangCrawlerCacheComponent.AGENT_DEFINE_TIME));
     }

+ 9 - 2
tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/impl/TaiPingYangCrawlerRequestImpl.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.CookiesRequest;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.taipingyang.crawler.component.TaiPingYangCrawlerRequestComponent;
 import com.jzg.quotation.taipingyang.crawler.entity.request.TaiPingYangCrawlerCarInfoRequest;
@@ -17,6 +18,7 @@ import com.jzg.quotation.taipingyang.crawler.service.TaiPingYangCrawlerQuoteProc
 import com.jzg.quotation.taipingyang.crawler.service.TaiPingYangCrawlerRequest;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
+
 import java.util.List;
 
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_CPIC)
@@ -32,6 +34,11 @@ public class TaiPingYangCrawlerRequestImpl implements TaiPingYangCrawlerRequest
 
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return taiPingYangCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         // 订单号
@@ -47,11 +54,11 @@ public class TaiPingYangCrawlerRequestImpl implements TaiPingYangCrawlerRequest
         // 归属信息
         TaiPingYangCrawlerGuiShuRequest guiShuRequest = new TaiPingYangCrawlerGuiShuRequest();
         TaiPingYangCrawlerGuiShuResponse.ResultDTO guiShuResult = taiPingYangCrawlerQuoteProcessService.getGuiShu(quoteVo.getOrder()
-                .getAgreementId(),guiShuRequest, httpHeaders,cookiesRequest);
+                .getAgreementId(), guiShuRequest, httpHeaders, cookiesRequest);
 
         // 车架号查询
         TaiPingYangCrawlerCarInfoRequest carInfoRequest = new TaiPingYangCrawlerCarInfoRequest(quoteVo.getCarInfoVo());
-        TaiPingYangCrawlerCarInfoResponse carInfoResponse = taiPingYangCrawlerRequestComponent.getCarInfo(carInfoRequest, httpHeaders,cookiesRequest);
+        TaiPingYangCrawlerCarInfoResponse carInfoResponse = taiPingYangCrawlerRequestComponent.getCarInfo(carInfoRequest, httpHeaders, cookiesRequest);
         List<TaiPingYangCrawlerCarInfoResponse.ResultDTO.ModelsDTO> models = carInfoResponse.getResult().getModels();
         TaiPingYangCrawlerCarInfoResponse.ResultDTO.ModelsDTO modelsDTO = CarModelsFilterUtils.to(models, quoteVo.getCarInfoVo());
 

+ 8 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerQuoteProcessService.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.taishan.crawler.service;
 
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import org.springframework.http.HttpHeaders;
 
 /**
@@ -20,6 +21,13 @@ public interface TaiShanCrawlerQuoteProcessService {
 
     void login(LoginBase loginBase);
 
+    /**
+     * 检测登录
+     * @param detectLoginRequest 检测登录请求
+     * @return boolean
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
+
     /**
      * 获取请求头
      * @param username 用户名

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

@@ -3,6 +3,7 @@ package com.jzg.quotation.taishan.crawler.service.impl;
 import com.jzg.commons.constants.quote.enums.base.ExpenseRequestUrl;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.identify.SliderCaptchaVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.taishan.crawler.component.TaiShanCrawlerCacheComponent;
 import com.jzg.quotation.taishan.crawler.component.TaiShanCrawlerRequestComponent;
@@ -87,6 +88,27 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
         }
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        LoginBase loginBase = new LoginBase();
+        loginBase.setUsername(username);
+        loginBase.setPassword(password);
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+        getVerifyHeader(httpHeaders);
+
+        Map<String, Object> tokenMap = taiShanCrawlerCacheComponent.getToken(username);
+        TaiShanCrawlerLoginRequest loginRequest = new TaiShanCrawlerLoginRequest(loginBase,tokenMap);
+        TaiShanCrawlerLoginResponse loginResponse = taiShanCrawlerRequestComponent.login(loginRequest, httpHeaders);
+        if(loginResponse.getCode().equals("200")){
+            String authorization = loginResponse.getResult().getIdToken();
+            taiShanCrawlerCacheComponent.cacheAuthorization(loginBase.getUsername(), authorization);
+        }
+        return true;
+    }
+
     private void getVerifyHeader(HttpHeaders httpHeaders) {
         httpHeaders.set(HttpHeaders.ACCEPT, "application/json, text/plain, */*");
         httpHeaders.set(HttpHeaders.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.9");

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

@@ -11,6 +11,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 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.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteRequestVoBuild;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteResultsVoBuild;
@@ -68,6 +69,11 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         taiShanCrawlerQuoteProcessService.login(loginBase);
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return taiShanCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+    }
+
     /**
      * 报价
      *

+ 9 - 0
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java

@@ -16,6 +16,7 @@ import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.yangguang.api.build.YangGuangApiQuoteResultsVoBuild;
@@ -61,6 +62,14 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
         HttpResult<PtlAgreementUrl> ptlAgreementUrl = platformClient.getAgreementUrlByCompanyId(companyId);
         return ptlAgreementUrl.getData().getUrl();
     }
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
         log.info("阳光财险通过api获取报价信息。报价参数:quoteVo=[{}]", JSONUtil.toJsonStr(quoteVo));

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

@@ -19,6 +19,7 @@ import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.entity.quote.vo.image.RecognitionRequest;
 import com.jzg.commons.entity.quote.vo.image.RecognitionResponse;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.impl.VerificationCodeIdentification;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
@@ -74,6 +75,13 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     /**
      * 车型获取
      * @param ycConfigureParameters

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

@@ -20,6 +20,7 @@ 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;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.zhongan.crawler.build.ZhongAnCrawlerQuoteResultsVoBuild;
@@ -97,7 +98,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         }
 
         // 缓存没有 执行登录
-        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache(zhongAnId,productId);
+        LoginResult result = zhongAnCrawlerCacheComponent.loginCookieCache(zhongAnId, productId);
 
         // 登录成功 存缓存
         if (result.getCode() == 200) {
@@ -107,6 +108,15 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         return result;
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+
+    }
+
+
     /**
      * 报价
      *
@@ -116,10 +126,10 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         // 检查登录
-        login(zhongAnId,productId);
+        login(zhongAnId, productId);
         zhongAnCrawlerCacheComponent.setCache(quoteVo.getOwnersInfo().getIdentifyNumber(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.IDENTIFY_NUMBER);
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
-        zhongAnCrawlerCacheComponent.setCache(carInfoVo.getLicenseNo(),quoteVo.getOrder().getOrdersNo()+ZhongAnCrawlerCacheComponent.LICENSE);
+        zhongAnCrawlerCacheComponent.setCache(carInfoVo.getLicenseNo(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.LICENSE);
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
@@ -245,7 +255,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
             zhongAnCrawlerOrder.setSyApplyNo(uploadInitDateResponse.getValue().getDatas().getBizApplyNo());
         }
         zhongAnCrawlerOrderService.save(zhongAnCrawlerOrder);
-        return ZhongAnCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, quoteResponse.getValue().getDatas(),uploadInitDateResponse);
+        return ZhongAnCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo, quoteResponse.getValue().getDatas(), uploadInitDateResponse);
     }
 
     /**
@@ -340,7 +350,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         // 检查登录
-        login(zhongAnId,productId);
+        login(zhongAnId, productId);
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
         OrderBase orderBase = paymentLinkVo.getOrder();
         //获取配置信息
@@ -370,7 +380,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
         // 检查登录
-        login(zhongAnId,productId);
+        login(zhongAnId, productId);
         OrderBase orderBase = insuranceUploadImageVo.getOrder();
         AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
         //获取配置信息
@@ -428,14 +438,14 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
             if (uploadImageResponse1 != null) {
                 if (uploadImageResponse1.getErrorMsg() != null && !uploadImageResponse1.getErrorMsg().isEmpty()) {
                     throw new SystemException(uploadImageResponse1.getErrorMsg());
-                } else if (uploadImageResponse1.getSuccess()){
+                } else if (uploadImageResponse1.getSuccess()) {
                     log.info("上传影像成功");
                 }
             }
         }
     }
 
-    public  byte[] convert(String filePath) throws IOException {
+    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)) {
@@ -452,7 +462,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
         // 检查登录
-        login(zhongAnId,productId);
+        login(zhongAnId, productId);
         OrderBase orderBase = downloadPolicyVo.getOrder();
         //获取配置信息
         HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
@@ -506,7 +516,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        login(zhongAnId,productId);
+        login(zhongAnId, productId);
         HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
         String flowId = parameters.getFlowId();
         if (StringUtils.isEmpty(flowId)) {
@@ -516,8 +526,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         // 车牌号
         String licenseNo = orderStatusVo.getCarInfo().getLicenseNo();
         // 先查询是否存在待支付列表里
-        ZhongAnCrawlerPolicyListRequest policyListRequest = new ZhongAnCrawlerPolicyListRequest(licenseNo,parameters,"2");
-        ZhongAnCrawlerPolicyListResponse response = zhongAnCrawlerRequestComponent.policyList(policyListRequest,headers);
+        ZhongAnCrawlerPolicyListRequest policyListRequest = new ZhongAnCrawlerPolicyListRequest(licenseNo, parameters, "2");
+        ZhongAnCrawlerPolicyListResponse response = zhongAnCrawlerRequestComponent.policyList(policyListRequest, headers);
         OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
         if (!response.getSuccess()) {
             throw new SystemException(response.getErrorMsg());
@@ -549,8 +559,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                             if ("3".equals(policy.getGreenQuoteStatus())) {
                                 orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
                                 // 查看退回原因
-                                ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(),parameters);
-                                ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest,headers);
+                                ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(), parameters);
+                                ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest, headers);
                                 if (queryAccommodationResponse.getSuccess()) {
                                     ZhongAnCrawlerQueryAccommodationResponse.ValueDTO.DatasDTO.AccommodationDTO accommodationDTO = queryAccommodationResponse.getValue().getDatas().getAccommodation();
                                     if (accommodationDTO.getErrorCode() != null) {
@@ -562,8 +572,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                             //
                             if ("0".equals(policy.getGreenQuoteStatus())) {
                                 // 查看退回原因
-                                ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(),parameters);
-                                ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest,headers);
+                                ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(), parameters);
+                                ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest, headers);
                                 Long id = queryAccommodationResponse.getValue().getDatas().getAccommodation().getId();
                                 String identityNo = orderStatusVo.getInsOrdersCarUserInfoList().stream()
                                         .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType() == 2)
@@ -571,11 +581,11 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                                         .map(InsOrdersCarUserInfo::getIdentifyNumber)
                                         .orElse(null);
                                 // 提交通融
-                                ZhongAnCrawlerApplyAccommodationRequest applyAccommodationRequest = new ZhongAnCrawlerApplyAccommodationRequest(id,zhongAnCrawlerOrder.getQuoteId(),identityNo,zhongAnCrawlerOrder.getOrderNo(),parameters);
-                                ZhongAnCrawlerApplyAccommodationResponse applyAccommodationResponse = zhongAnCrawlerRequestComponent.applyAccommodation(applyAccommodationRequest,headers);
+                                ZhongAnCrawlerApplyAccommodationRequest applyAccommodationRequest = new ZhongAnCrawlerApplyAccommodationRequest(id, zhongAnCrawlerOrder.getQuoteId(), identityNo, zhongAnCrawlerOrder.getOrderNo(), parameters);
+                                ZhongAnCrawlerApplyAccommodationResponse applyAccommodationResponse = zhongAnCrawlerRequestComponent.applyAccommodation(applyAccommodationRequest, headers);
                                 if (applyAccommodationResponse.getSuccess()) {
-                                 orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
-                                 orderStatusResultVo.setOrderStatusStr("提交通融成功");
+                                    orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
+                                    orderStatusResultVo.setOrderStatusStr("提交通融成功");
                                 }
                             }
                         }
@@ -584,8 +594,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
             }
             // 如果待支付查不到订单 再去已支付列表查 有没有订单
             if (policyLists.size() == 0) {
-                ZhongAnCrawlerPolicyListRequest policyListPayRequest = new ZhongAnCrawlerPolicyListRequest(licenseNo,parameters,"1");
-                ZhongAnCrawlerPolicyListResponse policyListPayResponse = zhongAnCrawlerRequestComponent.policyList(policyListPayRequest,headers);
+                ZhongAnCrawlerPolicyListRequest policyListPayRequest = new ZhongAnCrawlerPolicyListRequest(licenseNo, parameters, "1");
+                ZhongAnCrawlerPolicyListResponse policyListPayResponse = zhongAnCrawlerRequestComponent.policyList(policyListPayRequest, headers);
                 if (policyListPayResponse.getSuccess()) {
                     List<ZhongAnCrawlerPolicyListResponse.ValueDTO.DatasDTO.policyListsDto> policyPayLists = response.getValue().getDatas().getPolicyLists();
                     if (policyPayLists.size() == 0) {

+ 9 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/ZhongAnQuotaionApiBaseServiceImpl.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.QuotationApiBaseService;
 import com.jzg.quotation.zhongan.crawler.model.entity.*;
 import com.jzg.quotation.zhongan.crawler.model.param.ZhongAnCacheCarInfoParam;
@@ -23,6 +24,14 @@ public class ZhongAnQuotaionApiBaseServiceImpl implements QuotationApiBaseServic
     @Resource
     private ZhongAnAPIService zhongAnAPIService;
 
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
 

+ 8 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/api/service/impl/ZhongMeiApiRequestImpl.java

@@ -16,6 +16,7 @@ import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
@@ -55,6 +56,13 @@ public class ZhongMeiApiRequestImpl implements ZhongMeiApiRequest {
         return ptlAgreementUrl.getData().getUrl();
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         OrderBase order = quoteVo.getOrder();

+ 2 - 1
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java

@@ -41,6 +41,7 @@ import org.springframework.http.client.MultipartBodyBuilder;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
@@ -215,7 +216,7 @@ public class ZmCrawlerRequestComponent {
      */
     public String getAuthorization(AttributionInformationVo attributionInformationVo) {
         String authorization = (String) redissonClient.getMap(CacheConstant.ZHONGMEI_AUTHORIZATION + attributionInformationVo.getUsername()).get(AUTHORIZATION);
-        if (!org.springframework.util.StringUtils.hasLength(authorization)) {
+        if (!StringUtils.hasLength(authorization)) {
             authorization = authenticate(attributionInformationVo.getUsername(),
                     attributionInformationVo.getPassword(),
                     ZmCrawlerRequestComponent.REQUEST_NUMBER);

+ 17 - 6
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java

@@ -1,6 +1,5 @@
 package com.jzg.quotation.zhongmei.crawler.service.Impl;
 
-import cn.hutool.crypto.digest.MD5;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
@@ -10,10 +9,10 @@ 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.base.OrderBase;
-import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
-import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
+import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.zhongmei.api.constant.TransCode;
@@ -21,7 +20,6 @@ import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
 import com.jzg.quotation.zhongmei.crawler.build.ZmCrawlerQuoteResultVoBuild;
 import com.jzg.quotation.zhongmei.crawler.build.ZmCrawlerSubmitResultVoBuild;
 import com.jzg.quotation.zhongmei.crawler.component.ZmCrawlerRequestComponent;
-import com.jzg.quotation.zhongmei.crawler.constant.ZmCrawlerImageConstant;
 import com.jzg.quotation.zhongmei.crawler.entity.Request.*;
 import com.jzg.quotation.zhongmei.crawler.entity.Response.*;
 import com.jzg.quotation.zhongmei.crawler.entity.ZmCrawlerConfigureParameters;
@@ -31,15 +29,15 @@ import com.jzg.quotation.zhongmei.crawler.service.ZhongMeiCrawlerQuoteProcessSer
 import com.jzg.quotation.zhongmei.crawler.service.ZhongMeiCrawlerRequest;
 import com.jzg.quotation.zhongmei.crawler.service.ZmCrawlerOrderService;
 import lombok.RequiredArgsConstructor;
+import org.redisson.api.RedissonClient;
+import org.springframework.util.StringUtils;
 
 import java.text.ParseException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 
 /**
  * @description: 中煤财险 爬虫报价
@@ -56,6 +54,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
 
     private final ZhongMeiCrawlerQuoteProcessService zhongMeiCrawlerQuoteProcessService;
 
+    private final RedissonClient redissonClient;
 
 
     /**
@@ -67,6 +66,18 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
         zmCrawlerRequestComponent.authenticate(loginBase.getUsername(), loginBase.getPassword(), ZmCrawlerRequestComponent.REQUEST_NUMBER);
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String authorization = (String) redissonClient.getMap(CacheConstant.ZHONGMEI_AUTHORIZATION + username).get(ZmCrawlerRequestComponent.AUTHORIZATION);
+        if (!StringUtils.hasLength(authorization)) {
+            authorization = zmCrawlerRequestComponent.authenticate(username,password, ZmCrawlerRequestComponent.REQUEST_NUMBER);
+        }
+        return StringUtils.hasLength(authorization);
+
+    }
+
     /**
      * 报价
      * @param quoteVo 报价实体

+ 8 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java

@@ -21,6 +21,7 @@ import com.jzg.commons.util.MinioUtils;
 import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.zijin.api.build.ZiJinAPIQuoteResultsVoBuild;
@@ -76,6 +77,13 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
     // 投保验证码重试次数
     private static final int RETRY_NUMBER = 3;
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        return true;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         logger.info("紫金quote请求参数:{}", JSON.toJSONString(quoteVo));

+ 8 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/ZiJinCrawlerQuoteProcessService.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zijin.crawler.service;
 
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import org.springframework.http.HttpHeaders;
 
 /**
@@ -17,6 +18,13 @@ public interface ZiJinCrawlerQuoteProcessService {
      */
     String login(String username, String password);
 
+    /**
+     * 检测登录
+     * @param detectLoginRequest 检测登录请求
+     * @return boolean
+     */
+    boolean detectLogin(DetectLoginRequest detectLoginRequest);
+
     /**
      * 获取请求头
      * @param username 用户名

+ 22 - 7
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerQuoteProcessServiceImpl.java

@@ -2,6 +2,8 @@ package com.jzg.quotation.zijin.crawler.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.zijin.crawler.component.ZiJinCrawlerCacheComponent;
 import com.jzg.quotation.zijin.crawler.component.ZiJinCrawlerRequestComponent;
 import com.jzg.quotation.zijin.crawler.entity.ZiJinCrawlerTokenInfo;
@@ -16,7 +18,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 import java.io.IOException;
 import java.util.Optional;
@@ -40,6 +41,7 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
 
     /**
      * 登录
+     *
      * @param username 用户名
      * @param password 密码
      * @return String 返回token信息
@@ -80,10 +82,10 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
             ziJinCrawlerCheckCaptchaRequest.setCaptchaVal(ziJinCrawlerCaptchaResponse.getCaptchaContent());
             String commonToken = ziJinCrawlerCommonLoginResponse.getData().getToken();
 
-            ZiJinCrawlerCheckCaptchaResponse ziJinCrawlerCheckCaptchaResponse = ziJinCrawlerRequestComponent.checkCaptchaAndGetToken(ziJinCrawlerCheckCaptchaRequest,commonToken);
+            ZiJinCrawlerCheckCaptchaResponse ziJinCrawlerCheckCaptchaResponse = ziJinCrawlerRequestComponent.checkCaptchaAndGetToken(ziJinCrawlerCheckCaptchaRequest, commonToken);
             log.info("校验验证码并且获取token响应:{}", JSON.toJSONString(ziJinCrawlerCheckCaptchaResponse));
             //成功
-            if("0000".equals(ziJinCrawlerCheckCaptchaResponse.getRtnCode())){
+            if ("0000".equals(ziJinCrawlerCheckCaptchaResponse.getRtnCode())) {
                 //获取token
                 String token = ziJinCrawlerCheckCaptchaResponse.getData().getToken();
                 //4、校验token
@@ -91,20 +93,20 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
                 ziJinCrawlerCheckTokenRequest.setExpirationType("H5");
                 ziJinCrawlerCheckTokenRequest.setToken(token);
 
-                ZiJinCrawlerCheckTokenResponse ziJinCrawlerCheckTokenResponse = ziJinCrawlerRequestComponent.checkToken(ziJinCrawlerCheckTokenRequest,token);
+                ZiJinCrawlerCheckTokenResponse ziJinCrawlerCheckTokenResponse = ziJinCrawlerRequestComponent.checkToken(ziJinCrawlerCheckTokenRequest, token);
                 log.info("校验token响应:{}", JSON.toJSONString(ziJinCrawlerCheckTokenResponse));
-                if(ziJinCrawlerCheckTokenResponse.isValid()){
+                if (ziJinCrawlerCheckTokenResponse.isValid()) {
                     String userName = ziJinCrawlerCheckTokenResponse.getUserName();
                     String tokenInfo = ziJinCrawlerCheckTokenResponse.getTokenInfo();
                     ZiJinCrawlerTokenInfo ziJinCrawlerTokenInfo1 = JSON.parseObject(tokenInfo, ZiJinCrawlerTokenInfo.class);
                     String userCode = ziJinCrawlerTokenInfo1.getUserCode();
                     //缓存用户信息
                     return ziJinCrawlerCacheComponent.cacheAuthorization(token, userCode, userName);
-                }else{
+                } else {
                     log.error("校验token失败,响应:{}", JSON.toJSONString(ziJinCrawlerCheckTokenResponse));
                     return ziJinCrawlerCheckTokenResponse.getMsg();
                 }
-            }else{
+            } else {
                 log.error("校验验证码并获取token失败,响应:{}", JSON.toJSONString(ziJinCrawlerCheckCaptchaResponse));
                 throw new SystemException("校验验证码并获取token失败");
             }
@@ -116,6 +118,7 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
 
     /**
      * 获取请求头
+     *
      * @param username
      * @param password
      * @return HttpHeaders
@@ -135,4 +138,16 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
         headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
         return headers;
     }
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        String username = detectLoginRequest.getUsername();
+        String password = detectLoginRequest.getPassword();
+        String authorization = ziJinCrawlerCacheComponent.getAuthorization(username);
+        if (!StringUtils.hasText(authorization)) {
+            login(username, password);
+            authorization = ziJinCrawlerCacheComponent.getAuthorization(username);
+        }
+        return StringUtils.hasText(authorization);
+    }
 }

+ 6 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java

@@ -11,6 +11,7 @@ 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.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.zijin.crawler.enums.ResponseCode;
 import com.jzg.quotation.zijin.crawler.build.ZiJinCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.zijin.crawler.component.ZiJinBuildingAttributionInformation;
@@ -74,6 +75,11 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         ziJinCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+  public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return ziJinCrawlerQuoteProcessService.detectLogin(detectLoginRequest);
+    }
+
     /**
      * 报价
      *