Parcourir la source

开发获取支付链接的接口

jinshihui il y a 11 mois
Parent
commit
04e22f5bbc

+ 97 - 69
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/component/BoHaiCrawlerRequestComponent.java

@@ -167,78 +167,97 @@ public class BoHaiCrawlerRequestComponent {
      * @return 车型列表
      */
     public BoHaiCrawlerCheckTokenResponse checkToken(BoHaiCrawlerCheckTokenRequest boHaiCrawlerCheckTokenRequest, HttpHeaders headers) {
-        return request(RequestUrl.CHECK_TOKEN, boHaiCrawlerCheckTokenRequest, BoHaiCrawlerCheckTokenResponse.class, headers);
+        return executeRequest(RequestType.UNENCRYPTED, RequestUrl.CHECK_TOKEN, boHaiCrawlerCheckTokenRequest, BoHaiCrawlerCheckTokenResponse.class, headers);
     }
 
     /**
-     * 请求(请求参数加密)
+     * 统一请求方法
      *
-     * @param crawlerRequestUrlStandard
-     * @param request
-     * @param responseClass
-     * @param headers
-     * @return BoHaiResponse
+     * @param requestType   请求类型
+     * @param urlOrStandard URL或请求标准
+     * @param request       请求对象
+     * @param responseClass 响应类型
+     * @param headers       请求头
+     * @return BoHaiResponse 响应对象
      */
-    public <BoHaiResponse> BoHaiResponse request(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
+    public <BoHaiResponse> BoHaiResponse executeRequest(RequestType requestType, Object urlOrStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
         try {
-            ResponseEntity<String> responseEntity = requestComponent.objectPost2(crawlerRequestUrlStandard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()), request, String.class, headers);
-
-            String responseString = responseEntity.getBody();
-            log.info("请求返回参数:{}", responseString);
-            AssertionUtils.isEmpty(responseString, "请求异常请重试");
-            // 参数解密
-            String decrypt = DESUtil.des_decrypt(responseString);
-            log.info("请求返回参数解密:{}", decrypt);
-            return JSON.parseObject(decrypt, responseClass);
+            switch (requestType) {
+                case ENCRYPTED:
+                    // 请求参数加密
+                    CrawlerRequestUrlStandard standard = (CrawlerRequestUrlStandard) urlOrStandard;
+                    ResponseEntity<String> encryptedResponse = requestComponent.objectPost2(
+                            standard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()),
+                            request,
+                            String.class,
+                            headers
+                    );
+
+                    String responseString = encryptedResponse.getBody();
+                    log.info("请求返回参数:{}", responseString);
+                    AssertionUtils.isEmpty(responseString, "请求异常请重试");
+                    // 参数解密
+                    String decrypt = DESUtil.des_decrypt(responseString);
+                    log.info("请求返回参数解密:{}", decrypt);
+                    return JSON.parseObject(decrypt, responseClass);
+
+                case UNENCRYPTED:
+                    // 请求参数不加密
+                    CrawlerRequestUrlStandard unencryptedStandard = (CrawlerRequestUrlStandard) urlOrStandard;
+                    ResponseEntity<BoHaiResponse> unencryptedResponse = requestComponent.objectPost(
+                            unencryptedStandard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()),
+                            request,
+                            responseClass,
+                            headers
+                    );
+
+                    AssertionUtils.isEmpty(unencryptedResponse, "请求异常请重试");
+                    BoHaiResponse body = unencryptedResponse.getBody();
+                    return JSON.parseObject(JSON.toJSONString(body), responseClass);
+
+                case FILE_UPLOAD:
+                    // 文件上传
+                    String url = (String) urlOrStandard;
+                    ResponseEntity<String> uploadResponse = requestComponent.objectPostForUpload(
+                            url,
+                            request,
+                            String.class,
+                            headers
+                    );
+                    String result = uploadResponse.getBody();
+
+                    AssertionUtils.isEmpty(result, "请求异常请重试");
+                    // 参数解密
+                    String uploadDecrypt = DESUtil.des_decrypt(result);
+                    log.info("解密的值:{}", uploadDecrypt);
+                    return (BoHaiResponse) parseImageUploadResponse(uploadDecrypt);
+                default:
+                    throw new IllegalArgumentException("不支持的请求类型: " + requestType);
+            }
         } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException(e);
         }
     }
 
-
     /**
-     * 请求(请求参数没有加密)
-     *
-     * @param crawlerRequestUrlStandard
-     * @param request
-     * @param responseClass
-     * @param headers
-     * @return BoHaiResponse
+     * 请求类型枚举
      */
-    public <BoHaiResponse> BoHaiResponse request1(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
-
-        ResponseEntity<BoHaiResponse> responseEntity = requestComponent.objectPost(crawlerRequestUrlStandard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()), request, responseClass, headers);
-
-        AssertionUtils.isEmpty(responseEntity, "请求异常请重试");
-        BoHaiResponse body = responseEntity.getBody();
-        return JSON.parseObject(JSON.toJSONString(body), responseClass);
+    public enum RequestType {
+        /**
+         * 请求参数加密
+         */
+        ENCRYPTED,
+        /**
+         * 请求参数不加密
+         */
+        UNENCRYPTED,
+        /**
+         * 文件上传
+         */
+        FILE_UPLOAD
     }
 
-    /**
-     * 请求(请求参数没有加密)
-     *
-     * @param url
-     * @param request
-     * @param responseClass
-     * @param headers
-     * @return BoHaiResponse
-     */
-    public <BoHaiResponse> BoHaiResponse requestForUpload(String url, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
-        try {
-            ResponseEntity<String> responseEntity = requestComponent.objectPostForUpload(url, request, String.class, headers);
-            String result = responseEntity.getBody();
-
-            AssertionUtils.isEmpty(result, "请求异常请重试");
-            //参数解密
-            String decrypt = DESUtil.des_decrypt(result);
-            log.info("解密的值:{}", decrypt);
-            return (BoHaiResponse) parseImageUploadResponse(decrypt);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException(e);
-        }
-    }
 
     /**
      * 解析JSON字符串为BoHaiCrawlerImageUploadResponse
@@ -263,7 +282,7 @@ public class BoHaiCrawlerRequestComponent {
                 }
             }
             response.setData(dataMap);
-            return  response;
+            return response;
         } catch (Exception e) {
             log.error("解析图片上传响应失败: {}", e.getMessage(), e);
             throw new RuntimeException("JSON解析失败", e);
@@ -332,7 +351,7 @@ public class BoHaiCrawlerRequestComponent {
      * @return BoHaiCrawlerCarResponse 车型列表
      */
     public BoHaiCrawlerCarResponse car(BoHaiCrawlerCarRequest boHaiCrawlerCarRequest, HttpHeaders headers) {
-        return request1(RequestUrl.CAR, boHaiCrawlerCarRequest, BoHaiCrawlerCarResponse.class, headers);
+        return executeRequest(RequestType.ENCRYPTED, RequestUrl.CAR, boHaiCrawlerCarRequest, BoHaiCrawlerCarResponse.class, headers);
     }
 
     /**
@@ -343,7 +362,7 @@ public class BoHaiCrawlerRequestComponent {
      * @return BoHaiCrawlerVehicleConfirmationResponse
      */
     public BoHaiCrawlerVehicleConfirmationResponse2 vehicleConfirmation(BoHaiCrawlerVehicleConfirmationReqeust1 boHaiCrawlerVehicleConfirmationReqeust1, HttpHeaders headers) {
-        return request(RequestUrl.VEHICLECONFIRMATION, boHaiCrawlerVehicleConfirmationReqeust1, BoHaiCrawlerVehicleConfirmationResponse2.class, headers);
+        return executeRequest(RequestType.ENCRYPTED, RequestUrl.VEHICLECONFIRMATION, boHaiCrawlerVehicleConfirmationReqeust1, BoHaiCrawlerVehicleConfirmationResponse2.class, headers);
     }
 
     /**
@@ -354,7 +373,7 @@ public class BoHaiCrawlerRequestComponent {
      * @return BoHaiCrawlerQuotationResponse
      */
     public BoHaiCrawlerQuotationResponse quotation(BoHaiCrawlerQuotationRequest2 boHaiCrawlerQuotationRequest2, HttpHeaders headers) {
-        return request(RequestUrl.PRICE, boHaiCrawlerQuotationRequest2, BoHaiCrawlerQuotationResponse.class, headers);
+        return executeRequest(RequestType.ENCRYPTED, RequestUrl.PRICE, boHaiCrawlerQuotationRequest2, BoHaiCrawlerQuotationResponse.class, headers);
     }
 
     /**
@@ -365,7 +384,7 @@ public class BoHaiCrawlerRequestComponent {
      * @return BoHaiCrawlerUnderwritingResponse
      */
     public BoHaiCrawlerUnderwritingResponse underwriting(BoHaiCrawlerUnderwritingRequest2 boHaiCrawlerUnderwritingRequest2, HttpHeaders headers) throws Exception {
-        return request(RequestUrl.UNDERWRITING, boHaiCrawlerUnderwritingRequest2, BoHaiCrawlerUnderwritingResponse.class, headers);
+        return executeRequest(RequestType.ENCRYPTED, RequestUrl.UNDERWRITING, boHaiCrawlerUnderwritingRequest2, BoHaiCrawlerUnderwritingResponse.class, headers);
     }
 
 
@@ -412,12 +431,12 @@ public class BoHaiCrawlerRequestComponent {
         boHaiCrawlerImageUploadSubmitEncryptionRequest.setEncryptionData(encrypt);
         boHaiCrawlerImageUploadSubmitEncryptionRequest.setMd5(md5Value);
 
-        BoHaiCrawlerImageUploadSubmitResponse boHaiCrawlerImageUploadSubmitResponse = request(RequestUrl.UPLOAD_SUBMIT, boHaiCrawlerImageUploadSubmitEncryptionRequest, BoHaiCrawlerImageUploadSubmitResponse.class, headers);
+        BoHaiCrawlerImageUploadSubmitResponse boHaiCrawlerImageUploadSubmitResponse = executeRequest(RequestType.ENCRYPTED, RequestUrl.UPLOAD_SUBMIT, boHaiCrawlerImageUploadSubmitEncryptionRequest, BoHaiCrawlerImageUploadSubmitResponse.class, headers);
         String returnCode = boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnCode();
         if (!"0".equals(returnCode)) {
             log.error("上传影像提交失败,返回码:{},返回消息:{}", returnCode, boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnMessage());
             throw new SystemException("上传影像提交失败,返回码:" + returnCode + ",返回消息:" + boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnMessage());
-        }else{
+        } else {
             log.info("上传影像成功");
         }
         return boHaiCrawlerImageUploadSubmitResponse;
@@ -426,9 +445,9 @@ public class BoHaiCrawlerRequestComponent {
     /**
      * 构建图片上传提交请求对象
      *
-     * @param boHaiCrawlerImageUploadRequest  请求DTO
-     * @param files       文件数组
-     * @param batchNumber 批次号
+     * @param boHaiCrawlerImageUploadRequest 请求DTO
+     * @param files                          文件数组
+     * @param batchNumber                    批次号
      * @return BoHaiCrawlerImageUploadSubmitRequest
      */
     private BoHaiCrawlerImageUploadSubmitRequest buildImageUploadSubmitRequest(
@@ -533,8 +552,8 @@ public class BoHaiCrawlerRequestComponent {
                 }
             };
             requestBody.add("file[]", resource);
-            BoHaiCrawlerImageUploadResponse boHaiCrawlerImageUploadResponse = requestForUpload(fullUrl, requestBody, BoHaiCrawlerImageUploadResponse.class, headers);
-            log.info("boHaiCrawlerImageUploadResponse对象的值:{}",JSON.toJSONString(boHaiCrawlerImageUploadResponse));
+            BoHaiCrawlerImageUploadResponse boHaiCrawlerImageUploadResponse = executeRequest(RequestType.FILE_UPLOAD, fullUrl, requestBody, BoHaiCrawlerImageUploadResponse.class, headers);
+            log.info("boHaiCrawlerImageUploadResponse对象的值:{}", JSON.toJSONString(boHaiCrawlerImageUploadResponse));
             Map<String, BoHaiCrawlerImageUploadResponse.ImageInfo> data = boHaiCrawlerImageUploadResponse.getData();
             if (CollectionUtils.isEmpty(data)) {
                 log.error("上传影像失败,返回数据为空");
@@ -547,5 +566,14 @@ public class BoHaiCrawlerRequestComponent {
         }
     }
 
-
+    /**
+     * 获取支付链接
+     *
+     * @param boHaiCrawlerPaymentCertiNoQueryRequest
+     * @param headers                                请求头
+     * @return
+     */
+    public BoHaiCrawlerQrcodeResponse payment(BoHaiCrawlerPaymentCertiNoQueryRequest boHaiCrawlerPaymentCertiNoQueryRequest, HttpHeaders headers) {
+        return executeRequest(RequestType.ENCRYPTED, RequestUrl.PAYMENTCERTINOQUERY, boHaiCrawlerPaymentCertiNoQueryRequest, BoHaiCrawlerQrcodeResponse.class, headers);
+    }
 }

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

@@ -31,8 +31,10 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     //上传影像(有两个接口)
     UPLOAD_IMAGE("/motor/pspcs/Channel/uploadFile", "上传影像"),
     UPLOAD_SUBMIT("/motor/pspcs/Channel/channelTask/channelTaskMain.do", "上传影像提交"),
-    // 支付二维码
-    QRCODE("/api_vhl_prod/api/qrcode", "支付二维码"),
+    // 支付链接
+    PAYMENTCERTINOQUERY("/motor/pspcs/Channel/channelTask/channelTaskMain.do", "支付凭证号查询(交强险、商业险保单号查询)"),
+    PAYMENTNOTICENO_GENERATION("/motor/pspcs/Channel/channelTask/channelTaskMain.do", "支付通知单号生成"),
+    QRCODE("/pubsrv/ecpay/payment/order/select/orderNo", "支付二维码"),
     // 下载保单
     ELECTRON_POLICY_IO_DOWNLOAD("/api_vhl_prod/api/electronPolicyIODownload", "下载保单"),
     // 状态查询

+ 50 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/response/BoHaiCrawlerQrcodeResponse.java

@@ -0,0 +1,50 @@
+package com.jzg.quotation.bohai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 渤海财险爬虫二维码响应实体
+ */
+@Data
+@NoArgsConstructor
+public class BoHaiCrawlerQrcodeResponse {
+
+    /**
+     * 二维码图片内容(base64)
+     */
+    @JsonProperty("imageContent")
+    private String imageContent;
+
+    /**
+     * 消息内容
+     */
+    @JsonProperty("message")
+    private String message;
+
+    /**
+     * 开始时间
+     */
+    @JsonProperty("startTime")
+    private String startTime;
+
+    /**
+     * 过期时间
+     */
+    @JsonProperty("expireTime")
+    private String expireTime;
+
+
+    /**
+     * 显示消息
+     */
+    @JsonProperty("showMessage")
+    private String showMessage;
+
+    /**
+     * 显示标识
+     */
+    @JsonProperty("showFlag")
+    private String showFlag;
+}

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

@@ -10,10 +10,12 @@ import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.bohai.api.constant.enums.ResponseCode;
 import com.jzg.quotation.bohai.api.entity.BoHaiConfigureParameters;
 import com.jzg.quotation.bohai.api.entity.request.ImageUploadRequest;
+import com.jzg.quotation.bohai.api.entity.request.PaymentRequest;
 import com.jzg.quotation.bohai.api.entity.vo.PersonAreaVo;
 import com.jzg.quotation.bohai.crawler.component.BoHaiCrawlerCacheComponent;
 import com.jzg.quotation.bohai.crawler.component.BoHaiBuildingAttributionInformation;
 import com.jzg.quotation.bohai.crawler.entity.request.BoHaiCrawlerQuotationRequest;
+import com.jzg.quotation.bohai.crawler.entity.request.BoHaiCrawlerPaymentCertiNoQueryRequest;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
@@ -30,6 +32,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpHeaders;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
@@ -634,21 +638,21 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
     /**
      * 获取支付链接
      * @param paymentLinkVo
-     * @return
+     * @return PaymentLinkResultsVo
      */
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
-        /*AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         BoHaiCrawlerOrder boHaiCrawlerOrder = boHaiCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
         HttpHeaders headers = boHaiCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
-        PaymentRequest paymentRequest = new PaymentRequest(attributionInformationVo.getConfigInfo(), boHaiCrawlerOrder.getOrderNo(), boHaiCrawlerOrder.getBusUniqueId());
-        BoHaiPaymentResponse boHaiPaymentResponse = boHaiCrawlerRequestComponent.payment(paymentRequest, headers);
+        BoHaiCrawlerPaymentCertiNoQueryRequest boHaiCrawlerPaymentCertiNoQueryRequest = buildPaymentCertiNoQueryRequest(boHaiCrawlerOrder.getOrderNo());
+
+        BoHaiCrawlerQrcodeResponse boHaiPaymentResponse = boHaiCrawlerRequestComponent.payment(boHaiCrawlerPaymentCertiNoQueryRequest, headers);
 
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
-        paymentLinkResultsVo.setPaymentLink(boHaiPaymentResponse.getData().getPayUrl());
-        return paymentLinkResultsVo;*/
-        return null;
+        //boHaiCrawlerQrcodeResponse.setPaymentLink(boHaiPaymentResponse.getData().getPayUrl());
+        return paymentLinkResultsVo;
     }
 
     /**
@@ -675,7 +679,112 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         }
     }
 
+    /**
+     * 构建支付凭证查询请求对象
+     * @param orderNo 订单号
+     * @return BoHaiCrawlerPaymentCertiNoQueryRequest 支付凭证查询请求对象
+     */
+    private BoHaiCrawlerPaymentCertiNoQueryRequest buildPaymentCertiNoQueryRequest(String orderNo) {
+        BoHaiCrawlerPaymentCertiNoQueryRequest request = new BoHaiCrawlerPaymentCertiNoQueryRequest();
 
+        // 设置请求头信息
+        BoHaiCrawlerPaymentCertiNoQueryRequest.Head head = new BoHaiCrawlerPaymentCertiNoQueryRequest.Head();
+        head.setToken(TOKEN);
+        head.setTransType("Req");
+        head.setTransCode("PaymentCertiNoQuery");
+        request.setHead(head);
+
+        // 凭证类型:T=临时凭证,P=正式凭证
+        request.setCertiType("T");
+        // 登录机构
+        request.setLoginCom("14070201");
+        // 每页行数
+        request.setRows(10);
+        // 页码
+        request.setPageNo(1);
+        // 业务类型:O=订单,P=保单,Q=报价单
+        request.setBusinessType("O");
+        // 用户代码
+        request.setUserCode("114050281");
+        // 车牌号
+        request.setLicenseNo("");
+        // 车牌号比较符号
+        request.setLicenseNoSign("=");
+        // VIN码
+        request.setVinNo("");
+        // VIN码比较符号
+        request.setVinNoSign("=");
+        // 车架号
+        request.setFrameNo("");
+        // 车架号比较符号
+        request.setFrameNoSign("=");
+        // 发动机号
+        request.setEngineNo("");
+        // 发动机号比较符号
+        request.setEngineNoSign("=");
+        // 订单号
+        request.setOrderNo(orderNo);
+        // 订单号比较符号
+        request.setOrderNoFlag("=");
+        // 投保单号
+        request.setProposalNo("");
+        // 投保单号比较符号
+        request.setProposalNoFlag("=");
+        // 报价单号
+        request.setQuotationNo("");
+        // 报价单号比较符号
+        request.setQuotationNoFlag("=");
+        // 保单号
+        request.setPolicyNo("");
+        // 保单号比较符号
+        request.setPolicyNoFlag("=");
+        // 批单号
+        request.setEndorseNo("");
+        // 批单号比较符号
+        request.setEndorseNoFlag("=");
+        // 被保险人姓名
+        request.setInsuredName("");
+        // 被保险人姓名比较符号
+        request.setInsuredNameSign("=");
+        // 投保人姓名
+        request.setAppliName("");
+        // 投保人姓名比较符号
+        request.setAppliNameSign("=");
+        // 投保人身份证号
+        request.setAppliIdentifyNumber("");
+        // 投保人身份证号比较符号
+        request.setAppliIdentifyNumberFlag("=");
+        // 被保险人身份证号
+        request.setInsuredIdentifyNumber("");
+        // 被保险人身份证号比较符号
+        request.setInsuredIdentifyNumberFlag("=");
+        // 保险起期开始
+        request.setStartDateBegin("");
+        // 保险起期结束
+        request.setStartDateEnd("");
+        // 保险止期开始
+        request.setEndDateBegin("");
+        // 保险止期结束
+        request.setEndDateEnd("");
+
+        // 生成当前日期和前一个月日期
+        String currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        String previousMonthDate = LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+        // 操作日期开始(最近一个月)
+        request.setOperateDateBegin(previousMonthDate);
+        // 操作日期结束(今天)
+        request.setOperateDateEnd(currentDate);
+        // 核保日期开始
+        request.setUnderWriteDateStart(currentDate);
+        // 核保日期结束
+        request.setUnderWriteDateEnd(currentDate);
+        // 资源类型代码:001=车险,002=非车险,004=支付凭证
+        request.setResourceTypeCode("004");
+        // 是否签发用户代码
+        request.setIsIssueUserCode("");
+        return request;
+    }
 
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
@@ -1878,4 +1987,6 @@ public class BoHaiCrawlerRequestImpl implements BoHaiCrawlerRequest {
         head.setToken("114050281-1a2148bdef013e76e47ba4944a4df66b");
         return head;
     }
+
+
 }

+ 89 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/util/AESCryptoUtil.java

@@ -0,0 +1,89 @@
+package com.jzg.quotation.bohai.crawler.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+/**
+ * AES加密解密工具类
+ * 对应前端CryptoJS的AES-ECB-PKCS7加密
+ */
+public class AESCryptoUtil {
+
+    // 密钥(必须与前端一致)
+    private static final String KEY = "AD42F6697B035B7580E4FEF93BE20BAD";
+
+    // 加密算法
+    private static final String ALGORITHM = "AES";
+
+    // 加密模式和填充方式:AES/ECB/PKCS5Padding
+    // 注意:Java中使用PKCS5Padding,它与PKCS7Padding在AES中是等价的
+    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
+
+    /**
+     * 加密方法(对应前端getAES函数)
+     * @param plainText 明文
+     * @return 加密后的字符串(带Base64前缀)
+     */
+    public static String encrypt(String plainText) {
+        try {
+            // 创建密钥
+            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
+            // 创建密码器
+            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
+            // 初始化为加密模式
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+            // 加密
+            byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
+            // Base64编码并添加前缀
+            return "Base64" + Base64.getEncoder().encodeToString(encrypted);
+        } catch (Exception e) {
+            throw new RuntimeException("加密失败", e);
+        }
+    }
+
+    /**
+     * 解密方法
+     * @param encryptedText 加密的字符串(带或不带Base64前缀)
+     * @return String 解密后的明文
+     */
+    public static String decrypt(String encryptedText) {
+        try {
+            // 移除"Base64"前缀(如果存在)
+            String base64Data = encryptedText;
+            if (encryptedText.startsWith("Base64")) {
+                base64Data = encryptedText.substring(6);
+            }
+            // 创建密钥
+            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
+            // 创建密码器
+            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
+            // 初始化为解密模式
+            cipher.init(Cipher.DECRYPT_MODE, secretKey);
+            // Base64解码
+            byte[] encryptedBytes = Base64.getDecoder().decode(base64Data);
+            // 解密
+            byte[] decrypted = cipher.doFinal(encryptedBytes);
+            // 返回明文
+            return new String(decrypted, StandardCharsets.UTF_8);
+        } catch (Exception e) {
+            throw new RuntimeException("解密失败", e);
+        }
+    }
+
+    /**
+     * 测试方法
+     */
+    public static void main(String[] args) {
+        // 加密
+        /*String encrypted = encrypt("");
+        System.out.println("加密结果: " + encrypted);*/
+
+        System.out.println("\n==================== 解密测试 ====================");
+        // 解密
+        String decrypted = decrypt("Base64BFVsVdLWOtdp7kR0TaDCsA==");
+        System.out.println("解密结果:" + decrypted);
+
+    }
+}

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

@@ -331,8 +331,21 @@ public class DaJiaCrawlerRequestComponent {
         return JSON.parseObject(s, DaJiaCrawlerUploadResponse.class);
     }
 
+
+
+    /**
+     * 提交核保
+     *
+     * @param request 核保请求
+     * @param headers 请求头
+     * @return 核保响应
+     */
+    public DaJiaCrawlerGenerateResponse generate(DaJiaCrawlerSaveResponse request, HttpHeaders headers) {
+        return request(RequestUrl.GENERATE, request, DaJiaCrawlerGenerateResponse.class, headers);
+    }
+
     /**
-     * 支付
+     * 获取支付链接
      *
      * @param orderNo      订单号
      * @param operatorCode
@@ -347,17 +360,6 @@ public class DaJiaCrawlerRequestComponent {
         return DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
     }
 
-    /**
-     * 提交核保
-     *
-     * @param request 核保请求
-     * @param headers 请求头
-     * @return 核保响应
-     */
-    public DaJiaCrawlerGenerateResponse generate(DaJiaCrawlerSaveResponse request, HttpHeaders headers) {
-        return request(RequestUrl.GENERATE, request, DaJiaCrawlerGenerateResponse.class, headers);
-    }
-
     /**
      * 订单查询状态
      *

+ 24 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/response/DaJiaCrawlerQrcodeResponse.java

@@ -4,28 +4,52 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+/**
+ * 大家爬虫二维码响应实体
+ */
 @NoArgsConstructor
 @Data
 public class DaJiaCrawlerQrcodeResponse {
 
+    /**
+     * 二维码图片内容(base64)
+     */
     @JsonProperty("imageContent")
     private String imageContent;
 
+    /**
+     * 二维码URL
+     */
     @JsonProperty("url")
     private String url;
 
+    /**
+     * 消息内容
+     */
     @JsonProperty("message")
     private String message;
 
+    /**
+     * 过期时间
+     */
     @JsonProperty("expireTime")
     private String expireTime;
 
+    /**
+     * 开始时间
+     */
     @JsonProperty("startTime")
     private String startTime;
 
+    /**
+     * 显示消息
+     */
     @JsonProperty("showMessage")
     private String showMessage;
 
+    /**
+     * 显示标识
+     */
     @JsonProperty("showFlag")
     private String showFlag;
 }

+ 5 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/DESEncryption.java

@@ -104,4 +104,9 @@ public final class DESEncryption {
         return encrypt(jsonString);
     }
 
+    public static void main(String[] args) {
+        String decrypt = decrypt("KxB8ggUMNnz+GCN1D5Z6pgRVbFXS1jrXae5EdE2gwrA=");
+        System.out.println(decrypt);
+    }
+
 }