Przeglądaj źródła

泰山验证码登录

wangguoqiang 3 miesięcy temu
rodzic
commit
1327796295
34 zmienionych plików z 463 dodań i 50 usunięć
  1. 8 1
      commons/src/main/java/com/jzg/commons/entity/quote/vo/base/LoginBase.java
  2. 7 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java
  3. 7 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/service/impl/BoHaiCrawlerRequestImpl.java
  4. 7 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java
  5. 9 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/GetCaptchaRequest.java
  6. 3 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/service/QuotationCrawlerBaseService.java
  7. 7 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  8. 7 0
      tenant/insurance/quotation-guoshou/src/main/java/com/jzg/quotation/guoshou/crawler/service/Impl/GuoshouCrawlerRequestImpl.java
  9. 7 0
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  10. 7 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  11. 7 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java
  12. 7 0
      tenant/insurance/quotation-renbao/src/main/java/com/jzg/quotation/renbao/crawler/service/impl/RenBaoCrawlerRequestImpl.java
  13. 7 0
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java
  14. 7 0
      tenant/insurance/quotation-shenneng/src/main/java/com/jzg/quotation/shenneng/crawler/service/impl/ShenNengCrawlerRequestImpl.java
  15. 10 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  16. 34 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java
  17. 7 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
  18. 7 0
      tenant/insurance/quotation-taipingyang/src/main/java/com/jzg/quotation/taipingyang/crawler/service/impl/TaiPingYangCrawlerRequestImpl.java
  19. 1 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java
  20. 2 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/constant/enums/RequestUrl.java
  21. 4 2
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerLoginRequest.java
  22. 6 6
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerSmsCodeRequest.java
  23. 3 2
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerVerifyRequest.java
  24. 30 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanExternalSendCodeRequest.java
  25. 2 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerSmsCodeResponse.java
  26. 43 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanExternalSendCodeResponse.java
  27. 20 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/properties/ExteriorCaptchaProperties.java
  28. 9 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerQuoteProcessService.java
  29. 2 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerRequest.java
  30. 157 34
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java
  31. 8 1
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java
  32. 7 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java
  33. 7 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java
  34. 7 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java

+ 8 - 1
commons/src/main/java/com/jzg/commons/entity/quote/vo/base/LoginBase.java

@@ -13,7 +13,14 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 @Data
 public class LoginBase {
-
+    /**
+     * 请求类型  1 api 2 python
+     */
+    private  String apiType;
+    /**
+     * 承保机构编码
+     */
+    private String companyCode;
     /**
      * 用户名
      */

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

@@ -24,6 +24,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
@@ -58,6 +60,11 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         anShengCrawlerLoginService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -29,6 +29,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.bohai.crawler.build.BoHaiCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.bohai.crawler.component.BoHaiCrawlerRequestComponent;
@@ -99,6 +101,11 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         boHaiCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
   public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return boHaiCrawlerQuoteProcessService.detectLogin(detectLoginRequest);

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

@@ -26,6 +26,8 @@ import com.jzg.quotation.chengtai.crawler.utils.ZipImageExample;
 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.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;
@@ -59,6 +61,11 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
         }
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
 

+ 9 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/GetCaptchaRequest.java

@@ -19,6 +19,15 @@ public class GetCaptchaRequest implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 327592537421379864L;
+
+    /**
+     * 请求类型  1 api 2 python
+     */
+    private  String apiType;
+    /**
+     * 承保机构编码
+     */
+    private String companyCode;
     /**
      * 用户名
      */

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

@@ -3,6 +3,8 @@ package com.jzg.quotation.commons.service;
 
 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;
 
 
 /**
@@ -19,4 +21,5 @@ public interface QuotationCrawlerBaseService extends QuotationBaseService {
      */
     void login(LoginBase loginBase);
 
+    GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest);
 }

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

@@ -11,6 +11,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
@@ -101,6 +103,11 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         daJiaCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return daJiaCrawlerQuoteProcessService.detectLogin(detectLoginRequest);

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

@@ -16,6 +16,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.guoshou.crawler.component.GsCrawlerLoginComponent;
 import com.jzg.quotation.guoshou.crawler.component.GsCrawlerRequestComponent;
@@ -71,6 +73,11 @@ public class GuoshouCrawlerRequestImpl implements GuoshouCrawlerRequest {
 
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -25,6 +25,8 @@ 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.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
@@ -83,6 +85,11 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         hbCrawlerRequestComponent.authenticate(loginBase.getUsername(), loginBase.getPassword(), RequestConstant.REQUEST_NUMBER);
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -13,6 +13,8 @@ import com.jzg.commons.entity.quote.vo.identify.ReinsuranceCaptchaVo;
 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
@@ -63,6 +65,11 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         huaNongCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword(), null, true);
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -17,6 +17,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.HtEncryptDecryptUtils;
@@ -122,6 +124,11 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
 
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
   public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -8,6 +8,8 @@ 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.commons.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 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;
@@ -38,6 +40,11 @@ public class RenBaoCrawlerRequestImpl implements RenBaoCrawlerRequest {
 
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
   public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -10,6 +10,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerCacheComponent;
 import com.jzg.quotation.renbaonew.crawler.component.RenBaoNewCrawlerRequestComponent;
@@ -66,6 +68,11 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         getTokenService.getToken(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return getTokenService.detectLogin(detectLoginRequest);

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

@@ -6,6 +6,8 @@ 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.commons.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.shenneng.crawler.service.ShenNengCrawlerLoginService;
 import com.jzg.quotation.shenneng.crawler.service.ShenNengCrawlerRequest;
 import lombok.RequiredArgsConstructor;
@@ -22,6 +24,11 @@ public class ShenNengCrawlerRequestImpl implements ShenNengCrawlerRequest {
         shenNengCrawlerLoginService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return shenNengCrawlerLoginService.detectLogin(detectLoginRequest);

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

@@ -40,6 +40,7 @@ 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.QuotationBaseService;
+import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerRequest;
 import com.jzg.quotation.summary.aop.AuditVerification;
@@ -1001,14 +1002,21 @@ public class UnifyOrderManager {
     @PostMapping("guoRenlogin")
     @Operation(summary = "国任登录")
     public HttpResult guoRenlogin(@RequestBody LoginBase loginBase) {
-        guoRenCrawlerRequest.login(loginBase);
+//        guoRenCrawlerRequest.login(loginBase);
+//        return HttpResult.ok();
+
+        QuotationCrawlerBaseService loginService = companyFactory.getLoginService(loginBase);
+
+        loginService.login(loginBase);
         return HttpResult.ok();
     }
 
     @PostMapping("getGuoRenCaptcha")
     @Operation(summary = "国任登录验证码")
     public HttpResult getGuoRenCaptcha(@RequestBody GetCaptchaRequest sendCaptchaRequest) {
-        return HttpResult.ok(guoRenCrawlerRequest.getCaptcha(sendCaptchaRequest));
+        QuotationCrawlerBaseService captchaService = companyFactory.getCaptchaService(sendCaptchaRequest);
+        //return HttpResult.ok(guoRenCrawlerRequest.getCaptcha(sendCaptchaRequest));
+        return HttpResult.ok(captchaService.getCaptcha(sendCaptchaRequest));
     }
 
     @PostMapping("/detectLogin")

+ 34 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java

@@ -10,12 +10,14 @@ import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 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.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.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.service.QuotationApiBaseService;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
@@ -115,6 +117,38 @@ public class CompanyFactory {
         return service;
     }
 
+
+    public QuotationCrawlerBaseService getCaptchaService(GetCaptchaRequest sendCaptchaRequest) {
+        // 获取service
+        QuotationCrawlerBaseService service = getQuotationBaseInfo(Integer.parseInt(sendCaptchaRequest.getApiType()), sendCaptchaRequest.getCompanyCode());
+
+        return service;
+    }
+
+    public QuotationCrawlerBaseService getLoginService(LoginBase loginBase) {
+        // 获取service
+        QuotationCrawlerBaseService service = getQuotationBaseInfo(Integer.parseInt(loginBase.getApiType()), loginBase.getCompanyCode());
+
+        return service;
+    }
+
+
+    private QuotationCrawlerBaseService getQuotationBaseInfo(int apiType, String insuranceCode) {
+        log.info("quotationCrawlerBaseServiceMap参数的值:{}", com.alibaba.fastjson.JSON.toJSONString(quotationCrawlerBaseServiceMap));
+
+        String s = extractEnglishChars(insuranceCode);
+        QuotationCrawlerBaseService quotationApiBaseService = null;
+        String s1 = s + apiType;
+        if (ApiType.API_2.getCode() == apiType) {
+            quotationApiBaseService = quotationCrawlerBaseServiceMap.get(s1);
+        }
+        if (!ObjectUtils.isEmpty(quotationApiBaseService)) {
+            return quotationApiBaseService;
+        }
+        log.error("报价类型出错,请联系管理员:apiType=[{}],insuranceCode=[{}]", apiType, insuranceCode);
+        throw new SystemException("报价类型出错,请联系管理员处理。");
+    }
+
     /**
      * 获取保司实体
      *

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

@@ -16,6 +16,8 @@ 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.taikang.crawler.ConvertUtil;
 import com.jzg.quotation.taikang.crawler.cache.RedisCacheUtil;
 import com.jzg.quotation.taikang.crawler.client.AESDecryptor;
@@ -112,6 +114,11 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
 
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public QuoteResultsVo quote(QuoteVo commonQuoteVo) {
         CarInfoVo commonCarInfoVo = commonQuoteVo.getCarInfoVo();

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

@@ -7,6 +7,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.taipingyang.crawler.component.TaiPingYangCrawlerRequestComponent;
 import com.jzg.quotation.taipingyang.crawler.entity.request.TaiPingYangCrawlerCarInfoRequest;
@@ -34,6 +36,11 @@ public class TaiPingYangCrawlerRequestImpl implements TaiPingYangCrawlerRequest
 
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return taiPingYangCrawlerQuoteProcessService.detectLogin(detectLoginRequest);

+ 1 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java

@@ -157,7 +157,7 @@ public class TaiShanCrawlerRequestComponent {
      * @return
      */
     public TaiShanCrawlerLoginResponse login(TaiShanCrawlerLoginRequest request, HttpHeaders headers) {
-        TaiShanCrawlerLoginResponse response = post(RequestUrl.CONFIRM, request, TaiShanCrawlerLoginResponse.class, headers);
+        TaiShanCrawlerLoginResponse response = post(RequestUrl.AUTHENTICATE, request, TaiShanCrawlerLoginResponse.class, headers);
         return response;
     }
 

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

@@ -10,6 +10,8 @@ public enum RequestUrl {
     HUAKUAI("/api_prod/auth/api/base/base_anji/get", "获取滑块验证码"),
     CHECK("/api_prod/auth/api/base/base_anji/check", "滑块校验"),
 
+    // 登录认证
+    AUTHENTICATE("/api_prod/auth/api/authenticate", "登录认证"),
 
     // 车辆相关
     CAR("/api_prod/ins/api/search/vehicle", "车型查询"),

+ 4 - 2
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerLoginRequest.java

@@ -37,9 +37,11 @@ public class TaiShanCrawlerLoginRequest implements Serializable {
         StringBuffer aesSb = new StringBuffer();
         aesSb.append(token + "---");
         aesSb.append(aesRes);
-        String captchaVerification = TaiShanCrawlerUtils.aesEncrypt(aesSb.toString(), secretKey);
+        //String captchaVerification = TaiShanCrawlerUtils.aesEncrypt(aesSb.toString(), secretKey);
+        String captchaVerification = "";
         this.username = loginBase.getUsername();
-        this.password = TaiShanCrawlerUtils.desEncrypt(loginBase.getPassword(),"chdAdmin");
+        //this.password = TaiShanCrawlerUtils.desEncrypt(loginBase.getPassword(),"chdAdmin");
+        this.password = loginBase.getPassword();
         this.rememberMe = true;
         this.smsCode = loginBase.getCaptcha();
         this.code = captchaVerification;

+ 6 - 6
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerSmsCodeRequest.java

@@ -1,6 +1,5 @@
 package com.jzg.quotation.taishan.crawler.entity.request;
 
-import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerVerifyResponse;
 import com.jzg.quotation.taishan.crawler.util.TaiShanCrawlerUtils;
@@ -30,11 +29,12 @@ public class TaiShanCrawlerSmsCodeRequest implements Serializable {
     public TaiShanCrawlerSmsCodeRequest(TaiShanCrawlerVerifyResponse verifyResponse, List<Integer> integers, List<Integer> sizeList, String password, String username){
         int x = integers.get(0);
         int width = sizeList.get(0);
-        int t = 310 * x / width;
-        JSONObject pointJson = new JSONObject();
-        pointJson.put("x", x);
-        pointJson.put("y", 5);
-        String encryptedPointJson = TaiShanCrawlerUtils.aesEncrypt(pointJson.toJSONString(), verifyResponse.getRepData().getSecretKey());
+        // 参考Python实现:t = 310 * t / setSize_imgWidth (浮点除法)
+        double t = 310.0 * x / width;
+        // 参考Python实现:point_json = '{"x":'+str(t)+',"y":5}'
+        // 手动拼接字符串,确保与Python格式完全一致,避免JSONObject序列化差异
+        String pointJsonStr = "{\"x\":" + t + ",\"y\":5}";
+        String encryptedPointJson = TaiShanCrawlerUtils.aesEncrypt(pointJsonStr, verifyResponse.getRepData().getSecretKey());
         String crtm = TaiShanCrawlerUtils.desEncrypt(password,"chdAdmin");
         this.captchaVO = new CaptchaVODTO(encryptedPointJson, verifyResponse.getRepData().getToken());
         this.userId = username;

+ 3 - 2
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerVerifyRequest.java

@@ -19,11 +19,12 @@ public class TaiShanCrawlerVerifyRequest implements Serializable {
     @JsonProperty("clientUid")
     private String clientUid;
     @JsonProperty("ts")
-    private double ts;
+    private long ts;
 
     public TaiShanCrawlerVerifyRequest(String clientUid) {
         this.captchaType = "blockPuzzle";
         this.clientUid = clientUid;
-        this.ts = System.currentTimeMillis() / 1000.0;
+        // 参考Python实现:int(time.time() * 1000) 毫秒级整数时间戳
+        this.ts = System.currentTimeMillis();
     }
 }

+ 30 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanExternalSendCodeRequest.java

@@ -0,0 +1,30 @@
+package com.jzg.quotation.taishan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 外部发送验证码请求
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class TaiShanExternalSendCodeRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @JsonProperty("check")
+    private String check;
+
+    @JsonProperty("username")
+    private String username;
+
+    @JsonProperty("pwd")
+    private String pwd;
+}

+ 2 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanCrawlerSmsCodeResponse.java

@@ -14,6 +14,8 @@ public class TaiShanCrawlerSmsCodeResponse implements Serializable, TaiShanCrawl
     @Serial
     private static final long serialVersionUID = 0157577267035300221620L;
 
+    @JsonProperty("code")
+    private String code;
 
     @JsonProperty("repCode")
     private String repCode;

+ 43 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/response/TaiShanExternalSendCodeResponse.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.taishan.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 外部发送验证码响应
+ */
+@NoArgsConstructor
+@Data
+public class TaiShanExternalSendCodeResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    @JsonProperty("message")
+    private String message;
+
+    @JsonProperty("code")
+    private Integer code;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty("token")
+        private String token;
+
+        @JsonProperty("secretKey")
+        private String secretKey;
+
+        @JsonProperty("pointJson")
+        private String pointJson;
+    }
+}

+ 20 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/properties/ExteriorCaptchaProperties.java

@@ -0,0 +1,20 @@
+package com.jzg.quotation.taishan.crawler.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 外部验证码接口配置属性
+ * 从 Nacos 配置中读取
+ */
+@Component
+@ConfigurationProperties(prefix = "exterior.api.sendcode")
+@Data
+public class ExteriorCaptchaProperties {
+
+    /**
+     * 验证码服务
+     */
+    private String url;
+}

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

@@ -2,6 +2,8 @@ package com.jzg.quotation.taishan.crawler.service;
 
 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 org.springframework.http.HttpHeaders;
 
 /**
@@ -10,6 +12,13 @@ import org.springframework.http.HttpHeaders;
  * @date: 2025年9月17日16:28:40
  **/
 public interface TaiShanCrawlerQuoteProcessService {
+    /**
+     * 获取验证码
+     *
+     * @param sendCaptchaRequest 获取验证码请求
+     * @return 验证码响应
+     */
+    GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest);
 
     /**
      * 登录

+ 2 - 1
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/TaiShanCrawlerRequest.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.taishan.crawler.service;
 
+import com.jzg.quotation.commons.service.GetCaptchaBaseService;
 import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 
 /**
@@ -7,6 +8,6 @@ import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
  * @author:
  * @date:
  **/
-public interface TaiShanCrawlerRequest extends QuotationCrawlerBaseService {
+public interface TaiShanCrawlerRequest extends QuotationCrawlerBaseService, GetCaptchaBaseService {
 
 }

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

@@ -4,21 +4,30 @@ import com.alibaba.fastjson.JSON;
 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.commons.util.StringUtils;
 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.taishan.crawler.component.TaiShanCrawlerCacheComponent;
 import com.jzg.quotation.taishan.crawler.component.TaiShanCrawlerRequestComponent;
+import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerLoginRequest;
 import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerSmsCodeRequest;
 import com.jzg.quotation.taishan.crawler.entity.request.TaiShanCrawlerVerifyRequest;
+import com.jzg.quotation.taishan.crawler.entity.request.TaiShanExternalSendCodeRequest;
 import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerLoginResponse;
 import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerSmsCodeResponse;
 import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerVerifyResponse;
+import com.jzg.quotation.taishan.crawler.entity.response.TaiShanExternalSendCodeResponse;
+import com.jzg.quotation.taishan.crawler.properties.ExteriorCaptchaProperties;
 import com.jzg.quotation.taishan.crawler.service.TaiShanCrawlerQuoteProcessService;
 import com.jzg.quotation.taishan.crawler.util.TaiShanCrawlerUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.util.TextUtils;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 import java.nio.charset.StandardCharsets;
@@ -45,31 +54,117 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
 
     private final ExteriorUtilsRequest exteriorUtilsRequest;
 
+    private final RequestComponent requestComponent;
+
+    private final ExteriorCaptchaProperties exteriorCaptchaProperties;
+
     // 登陆次数
     public static final int LOGINS_NUMBER = 3;
 
+//    @Override
+//    public void sendCode(String username, String password) {
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        getVerifyHeader(httpHeaders);
+//        // 获取滑块验证码
+//        Map<String, String> map = uuid();
+//        TaiShanCrawlerVerifyRequest verifyRequest = new TaiShanCrawlerVerifyRequest(map.get("slider"));
+//        log.info("verifyRequest参数的值:{}", JSON.toJSONString(verifyRequest));
+//
+//        TaiShanCrawlerVerifyResponse verifyResponse = taiShanCrawlerRequestComponent.crawlerVerify(verifyRequest, httpHeaders);
+//        log.info("verifyResponse参数的值:{}", JSON.toJSONString(verifyResponse));
+//        // 滑块验证码识别
+//        TaiShanCrawlerVerifyResponse.RepDataDTO repData = verifyResponse.getRepData();
+//        List<Integer> integers = exteriorUtilsRequest.sliderCaptchaIdentify(ExpenseRequestUrl.SLIDER_IDENTIFY, new SliderCaptchaVo(repData.getOriginalImageBase64(), repData.getJigsawImageBase64()));
+//        // 获取图片的宽高
+//        List<Integer> sizeList = TaiShanCrawlerUtils.getImageSizeFromBase64(repData.getOriginalImageBase64());
+//        // 获取验证码
+//        TaiShanCrawlerSmsCodeRequest smsCodeRequest = new TaiShanCrawlerSmsCodeRequest(verifyResponse, integers, sizeList, password, username);
+//        log.info("smsCodeRequest参数的值:{}", JSON.toJSONString(smsCodeRequest));
+//        TaiShanCrawlerSmsCodeResponse smsCodeResponse = taiShanCrawlerRequestComponent.crawlerCheck(smsCodeRequest, httpHeaders);
+//        log.info("smsCodeResponse参数的值:{}", JSON.toJSONString(smsCodeResponse));
+//
+//        // 缓存登录信息
+//        Map<String, Object> tokenMap = new HashMap<>();
+//        tokenMap.put("token", smsCodeResponse.getRepData().getToken());
+//        tokenMap.put("secretKey", verifyResponse.getRepData().getSecretKey());
+//        tokenMap.put("pointJson", smsCodeResponse.getRepData().getPointJson());
+//        log.info("TaiShan-tokenMap参数的值:{}", JSON.toJSONString(tokenMap));
+//        taiShanCrawlerCacheComponent.cacheToken(username, tokenMap);
+//    }
+
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        log.info("开始获取泰山账号验证码");
+
+        GetCaptchaResponse getCaptchaResponse = new GetCaptchaResponse();
+        if(sendCaptchaRequest != null){
+            String username = sendCaptchaRequest.getUsername();
+            String password = sendCaptchaRequest.getPassword();
+
+            if(StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)){
+                // 调用外部发送验证码接口(URL从Nacos配置读取)
+                TaiShanExternalSendCodeRequest externalRequest = new TaiShanExternalSendCodeRequest("", username, password);
+                log.info("externalSendCodeRequest参数的值:{}", JSON.toJSONString(externalRequest));
+
+                String sendCodeUrl = exteriorCaptchaProperties.getUrl();
+                log.info("外部发送验证码接口URL:{}", sendCodeUrl);
+
+                // 使用代码中已有的 requestComponent.post 方法
+                HttpHeaders externalHeaders = new HttpHeaders();
+                ResponseEntity<String> externalResponseEntity = requestComponent.post(sendCodeUrl, JSON.toJSONString(externalRequest), String.class, externalHeaders);
+                String externalResponseBody = externalResponseEntity.getBody();
+                log.info("外部发送验证码接口响应内容:{}", externalResponseBody);
+                TaiShanExternalSendCodeResponse externalResponse = JSON.parseObject(externalResponseBody, TaiShanExternalSendCodeResponse.class);
+                log.info("externalSendCodeResponse参数的值:{}", JSON.toJSONString(externalResponse));
+
+                // 从外部响应中获取数据并缓存
+                TaiShanExternalSendCodeResponse.DataDTO externalData = externalResponse.getData();
+                Map<String, Object> tokenMap = new HashMap<>();
+                tokenMap.put("token", externalData.getToken());
+                tokenMap.put("secretKey", externalData.getSecretKey());
+                tokenMap.put("pointJson", externalData.getPointJson());
+                log.info("TaiShan-tokenMap参数的值(从外部接口获取):{}", JSON.toJSONString(tokenMap));
+                taiShanCrawlerCacheComponent.cacheToken(username, tokenMap);
+
+                getCaptchaResponse.setIdentifyId(externalData.getToken());
+            }
+        }
+
+        return getCaptchaResponse;
+    }
+
+
+
     @Override
     public void sendCode(String username, String password) {
-        HttpHeaders httpHeaders = new HttpHeaders();
-        getVerifyHeader(httpHeaders);
-        // 获取滑块验证码
-        Map<String, String> map = uuid();
-        TaiShanCrawlerVerifyRequest verifyRequest = new TaiShanCrawlerVerifyRequest(map.get("slider"));
-        TaiShanCrawlerVerifyResponse verifyResponse = taiShanCrawlerRequestComponent.crawlerVerify(verifyRequest, httpHeaders);
-        // 滑块验证码识别
-        TaiShanCrawlerVerifyResponse.RepDataDTO repData = verifyResponse.getRepData();
-        List<Integer> integers = exteriorUtilsRequest.sliderCaptchaIdentify(ExpenseRequestUrl.SLIDER_IDENTIFY, new SliderCaptchaVo(repData.getOriginalImageBase64(), repData.getJigsawImageBase64()));
-        // 获取图片的宽高
-        List<Integer> sizeList = TaiShanCrawlerUtils.getImageSizeFromBase64(repData.getOriginalImageBase64());
-        // 获取验证码
-        TaiShanCrawlerSmsCodeRequest smsCodeRequest = new TaiShanCrawlerSmsCodeRequest(verifyResponse, integers, sizeList, password, username);
-        TaiShanCrawlerSmsCodeResponse smsCodeResponse = taiShanCrawlerRequestComponent.crawlerCheck(smsCodeRequest, httpHeaders);
-
-        // 缓存登录信息
+        // 调用外部发送验证码接口(URL从Nacos配置读取)
+        TaiShanExternalSendCodeRequest externalRequest = new TaiShanExternalSendCodeRequest("", username, password);
+        log.info("externalSendCodeRequest参数的值:{}", JSON.toJSONString(externalRequest));
+
+        String sendCodeUrl = exteriorCaptchaProperties.getUrl();
+        log.info("外部发送验证码接口URL:{}", sendCodeUrl);
+        
+        // 使用代码中已有的 requestComponent.post 方法
+        HttpHeaders externalHeaders = new HttpHeaders();
+        ResponseEntity<String> externalResponseEntity = requestComponent.post(sendCodeUrl, JSON.toJSONString(externalRequest), String.class, externalHeaders);
+        String externalResponseBody = externalResponseEntity.getBody();
+        log.info("外部发送验证码接口响应内容:{}", externalResponseBody);
+        TaiShanExternalSendCodeResponse externalResponse = JSON.parseObject(externalResponseBody, TaiShanExternalSendCodeResponse.class);
+        log.info("externalSendCodeResponse参数的值:{}", JSON.toJSONString(externalResponse));
+
+//        if (externalResponse == null || externalResponse.getCode() != 200) {
+//            String message = externalResponse != null ? externalResponse.getMessage() : "未知错误";
+//            log.warn("外部发送验证码接口调用失败,错误信息:{}", message);
+//            throw new RuntimeException("外部发送验证码失败:" + message);
+//        }
+
+        // 从外部响应中获取数据并缓存
+        TaiShanExternalSendCodeResponse.DataDTO externalData = externalResponse.getData();
         Map<String, Object> tokenMap = new HashMap<>();
-        tokenMap.put("token", smsCodeResponse.getRepData().getToken());
-        tokenMap.put("secretKey", verifyResponse.getRepData().getSecretKey());
-        tokenMap.put("pointJson", smsCodeResponse.getRepData().getPointJson());
+        tokenMap.put("token", externalData.getToken());
+        tokenMap.put("secretKey", externalData.getSecretKey());
+        tokenMap.put("pointJson", externalData.getPointJson());
+        log.info("TaiShan-tokenMap参数的值(从外部接口获取):{}", JSON.toJSONString(tokenMap));
         taiShanCrawlerCacheComponent.cacheToken(username, tokenMap);
     }
 
@@ -79,40 +174,66 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
      */
     @Override
     public void login(LoginBase loginBase) {
+        log.info("泰山-login");
         HttpHeaders httpHeaders = new HttpHeaders();
         getVerifyHeader(httpHeaders);
 
         Map<String, Object> tokenMap = taiShanCrawlerCacheComponent.getToken(loginBase.getUsername());
+        log.info("泰山-tokenMap参数的值:{}", JSON.toJSONString(tokenMap));
+
         TaiShanCrawlerLoginRequest loginRequest = new TaiShanCrawlerLoginRequest(loginBase,tokenMap);
+        log.info("TaiShan-loginRequest参数的值:{}", JSON.toJSONString(loginRequest));
         TaiShanCrawlerLoginResponse loginResponse = taiShanCrawlerRequestComponent.login(loginRequest, httpHeaders);
         log.info("TaiShan-loginResponse参数的值:{}", JSON.toJSONString(loginResponse));
         if(loginResponse.getCode().equals("200")){
             String authorization = loginResponse.getResult().getIdToken();
+            log.info("TaiShan-Username参数的值:{}", JSON.toJSONString(loginBase.getUsername()));
+            log.info("TaiShan-authorization参数的值:{}", JSON.toJSONString(authorization));
             taiShanCrawlerCacheComponent.cacheAuthorization(loginBase.getUsername(), authorization);
         }
     }
 
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        log.info("泰山-detectLogin");
         String username = detectLoginRequest.getUsername();
-        String password = detectLoginRequest.getPassword();
-        LoginBase loginBase = new LoginBase();
-        loginBase.setUsername(username);
-        loginBase.setPassword(password);
-
-        HttpHeaders httpHeaders = new HttpHeaders();
-        getVerifyHeader(httpHeaders);
-
+        String token = null;
         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);
+        if(tokenMap !=null && !tokenMap.isEmpty()){
+            token = (String) tokenMap.get("token");
         }
-        return true;
+        return StringUtils.hasText(token);
+
+
+//        log.info("TaiShan-detectLoginRequest参数的值:{}", JSON.toJSONString(detectLoginRequest));
+//        String username = detectLoginRequest.getUsername();
+//        String password = detectLoginRequest.getPassword();
+//        LoginBase loginBase = new LoginBase();
+//        loginBase.setUsername(username);
+//        loginBase.setPassword(password);
+//        log.info("TaiShan-loginBase参数的值:{}", JSON.toJSONString(loginBase));
+//
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        getVerifyHeader(httpHeaders);
+//
+//        sendCode(username, password);
+//
+//        Map<String, Object> tokenMap = taiShanCrawlerCacheComponent.getToken(username);
+//        log.info("TaiShan-tokenMap参数的值:{}", JSON.toJSONString(tokenMap));
+
+
+//        TaiShanCrawlerLoginRequest loginRequest = new TaiShanCrawlerLoginRequest(loginBase,tokenMap);
+//        TaiShanCrawlerLoginResponse loginResponse = taiShanCrawlerRequestComponent.login(loginRequest, httpHeaders);
+//        log.info("TaiShan-loginResponse参数的值:{}", JSON.toJSONString(loginResponse));
+//        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");
@@ -174,7 +295,9 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
      */
     @Override
     public HttpHeaders getHeaders(String username, String comCode) {
-        String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI0MjEiLCJhdXRoIjoiUk9MRV9CVVNJTkVTUyIsInBhc3N3b3JkX2V4cGlyZSI6MTUsImV4cCI6MTc4MTY4NzIzMn0.ldWz9TMY4AJ75VE0Bk1mkzAXPC9jJNMIWL82n0kGHrBwASgGvBxO3fe7orHbCIowt0athoRn1zA9m5ZNnO7olg";
+        //String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI0MjEiLCJhdXRoIjoiUk9MRV9CVVNJTkVTUyIsInBhc3N3b3JkX2V4cGlyZSI6MTUsImV4cCI6MTc4MTY4NzIzMn0.ldWz9TMY4AJ75VE0Bk1mkzAXPC9jJNMIWL82n0kGHrBwASgGvBxO3fe7orHbCIowt0athoRn1zA9m5ZNnO7olg";
+
+        String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI0MjEiLCJhdXRoIjoiUk9MRV9CVVNJTkVTUyIsInBhc3N3b3JkX2V4cGlyZSI6MTIsImV4cCI6MTc4MTk0MDMyMX0.rsR8yMmSsB5iOstJSToswargqTCFB5He37UydrlK_lKFsHVqtBL-EOAgls4YL4nKWvRtbSxxY6HZRczHFG0iRw";
         HttpHeaders httpHeaders = new HttpHeaders();
         
         httpHeaders.set("Accept", "application/json, text/plain, */*");

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

@@ -12,6 +12,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteRequestVoBuild;
 import com.jzg.quotation.taishan.crawler.build.TaiShanCrawlerQuoteResultsVoBuild;
@@ -61,7 +63,10 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
 
     public static final int CIRCULATE_NUMBER = 3;
 
-
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return taiShanCrawlerQuoteProcessService.getCaptcha(sendCaptchaRequest);
+    }
     /**
      * 登录
      *
@@ -558,4 +563,6 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         }
         return downloadPolicyResultVo;
     }
+
+
 }

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

@@ -22,6 +22,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.zhongan.crawler.build.ZhongAnCrawlerQuoteResultsVoBuild;
@@ -645,4 +647,9 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     public void login(LoginBase loginBase) {
 
     }
+
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
 }

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

@@ -13,6 +13,8 @@ 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.entity.GetCaptchaRequest;
+import com.jzg.quotation.commons.entity.GetCaptchaResponse;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.zhongmei.api.constant.TransCode;
@@ -66,6 +68,11 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
         zmCrawlerRequestComponent.authenticate(loginBase.getUsername(), loginBase.getPassword(), ZmCrawlerRequestComponent.REQUEST_NUMBER);
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         String username = detectLoginRequest.getUsername();

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

@@ -16,6 +16,8 @@ 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.zijin.api.constant.enums.MotorVehicleInsuranceEnum;
 import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
@@ -85,6 +87,11 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         ziJinCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
+    @Override
+    public GetCaptchaResponse getCaptcha(GetCaptchaRequest sendCaptchaRequest) {
+        return null;
+    }
+
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
         return ziJinCrawlerQuoteProcessService.detectLogin(detectLoginRequest);