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

Merge branch 'master' into dev_jzg_lipf_v20260518

lipf 4 месяцев назад
Родитель
Сommit
a4738d9218

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

@@ -205,8 +205,8 @@ public class TaiShanCrawlerQuoteRequestVoBuild {
         TaiShanCrawlerQuotationRequest.BusinessInsurance.ProductInfo productInfo = new TaiShanCrawlerQuotationRequest.BusinessInsurance.ProductInfo();
         productInfo.setAnswer("");
         productInfo.setApId("");
-        productInfo.setAboveThresholdFlag("");
-        productInfo.setRecommAdjustValue("");
+        productInfo.setAboveThresholdFlag("0");
+        productInfo.setRecommAdjustValue("0.0");
         productInfo.setDay("365");
         productInfo.setEdrPrjNo("");
         productInfo.setEffective("0");
@@ -215,17 +215,17 @@ public class TaiShanCrawlerQuoteRequestVoBuild {
         productInfo.setOrigInsurer("");
         productInfo.setOrigPlyNo("");
         productInfo.setPolicyNo("");
-        productInfo.setPremium("");
+        productInfo.setPremium("0.0");//"0.0"
         productInfo.setProposalNo("");
-        productInfo.setProposalStatus("");
+        //productInfo.setProposalStatus("");
         productInfo.setQuestion("");
         productInfo.setSyApUseFlg("1");
         productInfo.setSyExpDisCoef("");
         productInfo.setSySpecialExpectDisc("");
-        productInfo.setSyFeeDiscount("");
+        productInfo.setSyFeeDiscount("0");
         productInfo.setSyMeale("");
         productInfo.setPayPkId("");
-        productInfo.setRiskAmount("");
+        productInfo.setRiskAmount("0.0");//"0.0"
         productInfo.setTsApId("");
         productInfo.setComPoints("");
         productInfo.setRenewalClass("");
@@ -247,31 +247,32 @@ public class TaiShanCrawlerQuoteRequestVoBuild {
             itemKind.setMainRiskFlag("");
             itemKind.setDeductibleFlag(false);
             itemKind.setAmount(infoVo.getAmount());
-            itemKind.setRate("");
-            itemKind.setBefPremium(0);
-            itemKind.setPremium(0d);
-            itemKind.setDisCoef(0d);
+            itemKind.setRate("0.0");
+            itemKind.setBefPremium("0.0");//"0.0"
+            itemKind.setPremium("0.0");//"0.0"
+            itemKind.setDisCoef("0.0");//"0.0"
             itemKind.setDeductible("");  // 免额档次
             itemKind.setDuctDiscount("");
             itemKind.setIndemLmtLvl("");
             itemKind.setIndemLmt(infoVo.getAmount());
-            itemKind.setLiabDaysLmt(infoVo.getQuantity());
-            itemKind.setPerAmt(infoVo.getUnitAmount());
+            itemKind.setLiabDaysLmt("");
+            //itemKind.setPerAmt(infoVo.getUnitAmount());
+            itemKind.setPerAmt("");
             itemKind.setGlassType("");
             itemKind.setSpecialGlassFloat("");
             itemKind.setVhlDamageFloat("");
             itemKind.setCompenPerAmt("");
             itemKind.setCompenPerDay("");
             itemKind.setDeductibleRatio("");
-            itemKind.setBefAnnPrm(0);
-            itemKind.setPureRiskPremium(0d);
-            itemKind.setBasePrm(0d);
-            itemKind.setAfterPremiumYear(0d);
-            itemKind.setCalcPrm("0");
+            itemKind.setBefAnnPrm("0.0");//"0.0"
+            itemKind.setPureRiskPremium("0.0");
+            itemKind.setBasePrm("0.0");//"0.0"
+            itemKind.setAfterPremiumYear("0.0");//"0.0"
+            itemKind.setCalcPrm("0.0");//"0.0"
             itemKind.setResvNumberRoad("");
             itemKind.setResvNumberDriver("");
             itemKind.setAbsoluteDeductible("");
-            itemKind.setResvNumAutonomy("");
+            itemKind.setResvNumAutonomy("0.0");//"0.0"
             itemKind.setAmtVar("0.0");
             itemKind.setPrmVar("0.0");
             itemKind.setRowId("");
@@ -727,6 +728,7 @@ public class TaiShanCrawlerQuoteRequestVoBuild {
     }
 
     private static TaiShanCrawlerQuotationRequest.ApplicantInfo toApplicantInfo(CustomerInfoVo policyHolderInfo, String policyPersonId) {
+        //投保人信息
         TaiShanCrawlerQuotationRequest.ApplicantInfo applicantInfo = new TaiShanCrawlerQuotationRequest.ApplicantInfo();
         applicantInfo.setAddress(policyHolderInfo.getAddr());
         applicantInfo.setCity(policyHolderInfo.getCityCode());

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

@@ -1,11 +1,16 @@
 package com.jzg.quotation.taishan.crawler.build;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerQuotationSaveResponse;
+import com.jzg.quotation.taishan.crawler.entity.response.TaiShanCrawlerRiskManagementResponse;
+import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
 import java.util.Map;
@@ -17,6 +22,7 @@ import java.util.stream.Collectors;
  * @author:
  * @date:
  **/
+@Slf4j
 public class TaiShanCrawlerQuoteResultsVoBuild {
 
     /**
@@ -26,7 +32,7 @@ public class TaiShanCrawlerQuoteResultsVoBuild {
      * @param success
      * @return QuoteResultsVo
      */
-    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, TaiShanCrawlerQuotationSaveResponse saveResponse, String msg, boolean success) {
+    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, TaiShanCrawlerQuotationSaveResponse saveResponse, TaiShanCrawlerRiskManagementResponse riskResponse, String msg, boolean success) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
@@ -48,6 +54,44 @@ public class TaiShanCrawlerQuoteResultsVoBuild {
         }
         // 交强保费 车船税 商业保费
         buildPremium(quoteResultsVo, saveResponse);
+
+        // 保司评分
+        JSONArray scoreJson = new JSONArray();
+        if(saveResponse != null
+           &&saveResponse.getResult() != null
+           &&saveResponse.getResult().getProposalInfo() != null
+        ){
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName","风险评分")
+                    .fluentPut("scoreKey","riskScore")
+                    .fluentPut("riskScore", saveResponse.getResult().getProposalInfo().getRiskScore()));
+        }
+
+        if(riskResponse != null && riskResponse.getResult() != null){
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName","泰山分")
+                    .fluentPut("scoreKey","ctsScore")
+                    .fluentPut("ctsScore", riskResponse.getResult().getCtsScore()));
+
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName","续保客户价值分类")
+                    .fluentPut("scoreKey","renewalClass")
+                    .fluentPut("renewalClass", riskResponse.getResult().getRenewalClass()));
+
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName","整单预期赔付率(GQ)")
+                    .fluentPut("scoreKey","exRatio")
+                    .fluentPut("exRatio", riskResponse.getResult().getExRatio()));
+
+            scoreJson.add(new JSONObject()
+                    .fluentPut("scoreName","风险评级(G)")
+                    .fluentPut("scoreKey","pvalue")
+                    .fluentPut("pvalue", riskResponse.getResult().getPvalue()));
+        }
+
+        quoteResultsVo.getScoreVo().setScoreJson(scoreJson);
+        log.info("quoteResultsVo:{}", JSON.toJSONString(quoteResultsVo));
+
         return quoteResultsVo;
     }
 

+ 23 - 7
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/entity/request/TaiShanCrawlerQuotationRequest.java

@@ -820,21 +820,21 @@ public class TaiShanCrawlerQuotationRequest implements Serializable {
              */
             @JsonProperty("befPremium")
             @JSONField(name = "befPremium", ordinal = 9)
-            private Integer befPremium;
+            private Object befPremium;
 
             /**
              * 保费
              */
             @JsonProperty("premium")
             @JSONField(name = "premium", ordinal = 10)
-            private Double premium;
+            private Object premium;
 
             /**
              * 折扣系数
              */
             @JsonProperty("disCoef")
             @JSONField(name = "disCoef", ordinal = 11)
-            private Double disCoef;
+            private Object disCoef;
 
             /**
              * 免赔额
@@ -932,28 +932,28 @@ public class TaiShanCrawlerQuotationRequest implements Serializable {
              */
             @JsonProperty("befAnnPrm")
             @JSONField(name = "befAnnPrm", ordinal = 25)
-            private Integer befAnnPrm;
+            private Object befAnnPrm;
 
             /**
              * 纯风险保费
              */
             @JsonProperty("pureRiskPremium")
             @JSONField(name = "pureRiskPremium", ordinal = 26)
-            private Double pureRiskPremium;
+            private Object pureRiskPremium;
 
             /**
              * 基础保费
              */
             @JsonProperty("basePrm")
             @JSONField(name = "basePrm", ordinal = 27)
-            private Double basePrm;
+            private Object basePrm;
 
             /**
              * 年度保费
              */
             @JsonProperty("afterPremiumYear")
             @JSONField(name = "afterPremiumYear", ordinal = 28)
-            private Double afterPremiumYear;
+            private Object afterPremiumYear;
 
             /**
              * 计算保费
@@ -1274,6 +1274,14 @@ public class TaiShanCrawlerQuotationRequest implements Serializable {
             @JsonProperty("unfixSpcFlag")
             @JSONField(name = "unfixSpcFlag", ordinal = 3)
             private String unfixSpcFlag;
+
+            /**
+             * 变量信息(可能是字符串、对象或数组)
+             * 使用 Object 类型以兼容多种数据结构
+             */
+            @JsonProperty("variable")
+            @JSONField(name = "variable", ordinal = 4)
+            private Object variable;
         }
         /**
          * 车船税内部类
@@ -3119,6 +3127,14 @@ public class TaiShanCrawlerQuotationRequest implements Serializable {
         @JSONField(name = "plateColor", ordinal = 53)
         private String plateColor;
 
+        /**
+         * 车身颜色
+         * 车身颜色(蓝、黄、绿等)
+         */
+        @JsonProperty("carColor")
+        @JSONField(name = "carColor", ordinal = 53)
+        private String carColor;
+
         /**
          * 车牌号码
          * 车辆的完整车牌号码

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

@@ -31,8 +31,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
 
+import java.io.IOException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -89,6 +92,7 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), parameters.getComCode());
         // 2.0 车型查询
         TaiShanCrawlerCarRequest taiShanCrawlerCarRequest = new TaiShanCrawlerCarRequest(quoteVo,parameters.getComCode());
+        //车型查询
         TaiShanCrawlerCarResponse taiShanCrawlerCarResponse = taiShanCrawlerRequestComponent.queryCarModels(taiShanCrawlerCarRequest, headers);
         // 2.1 获取相同的车型
         List<TaiShanCrawlerCarResponse.CarModelInfo> models = taiShanCrawlerCarResponse.getResult();
@@ -115,15 +119,18 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
 
         // 3.0 报价接口
         TaiShanCrawlerQuotationRequest taiShanCrawlerQuotationRequest = TaiShanCrawlerQuoteRequestVoBuild.toQuotationDto(quoteVo,modelsDTO,currentValue,parameters,taiShanCrawlerDeptResponse,attributionInformationVo,policyPersonId,insuredPersonId);
+        log.info("taiShanCrawlerQuotationRequest参数的值:{}", JSON.toJSONString(taiShanCrawlerQuotationRequest));
         TaiShanCrawlerQuotationResponse taiShanCrawlerQuotationResponse = taiShanCrawlerRequestComponent.quotation(taiShanCrawlerQuotationRequest, headers,CIRCULATE_NUMBER);
         log.info("taiShanCrawlerQuotationResponse参数的值:{}", JSON.toJSONString(taiShanCrawlerQuotationResponse));
         TaiShanCrawlerQuotationResponse.ResultDTO.ExceptionDTO exception = taiShanCrawlerQuotationResponse.getResult().getException();
         String errMsg = null;
         TaiShanCrawlerQuotationSaveResponse taiShanCrawlerQuotationSaveResponse = null;
+        TaiShanCrawlerRiskManagementResponse taiShanCrawlerRiskManagementResponse = null;
         boolean success = false;
         if (exception.getCode().equals("H1")){
             // 3.1 保存报价信息接口
             this.resultCoverSave(quoteVo,taiShanCrawlerQuotationRequest,taiShanCrawlerQuotationResponse);
+            log.info("taiShanCrawlerQuotationRequest:{}", JSON.toJSONString(taiShanCrawlerQuotationRequest));
             taiShanCrawlerQuotationSaveResponse = taiShanCrawlerRequestComponent.saveQuotation(taiShanCrawlerQuotationRequest, headers);
             log.info("taiShanCrawlerQuotationSaveResponse参数的值:{}", JSON.toJSONString(taiShanCrawlerQuotationSaveResponse));
             TaiShanCrawlerQuotationSaveResponse.Result.Exception saveException = taiShanCrawlerQuotationSaveResponse.getResult().getException();
@@ -132,6 +139,11 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
                 taiShanCrawlerOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
                 taiShanCrawlerOrderService.save(taiShanCrawlerQuotationSaveResponse, taiShanCrawlerOrder);
                 success = true;
+
+                //风险管控
+                String proposalNo = taiShanCrawlerQuotationSaveResponse.getResult().getCompulsoryInsurance().getProductInfo().getProposalNo();
+                TaiShanCrawlerRiskManagementRequest taiShanCrawlerRiskManagementRequest = new TaiShanCrawlerRiskManagementRequest(proposalNo);
+                taiShanCrawlerRiskManagementResponse = taiShanCrawlerRequestComponent.getRiskManagement(taiShanCrawlerRiskManagementRequest, headers);
             }else{
                 errMsg = saveException.getMsg();
             }
@@ -140,6 +152,7 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         }
         return TaiShanCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,
                 taiShanCrawlerQuotationSaveResponse,
+                taiShanCrawlerRiskManagementResponse,
                 errMsg,success);
     }
 
@@ -213,8 +226,7 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
      */
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
-
-
+        log.info("underwritingVo:{}", JSON.toJSONString(underwritingVo));
         // 1.0 获取认证信息和用户配置
         AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         TaiShanCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(TaiShanCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
@@ -230,9 +242,16 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
 
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         if ("200".equals(taiShanCrawlerUnderwritingResponse.getCode())) {
+            //核保成功
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             underwritingResultsVo.setJqApplyNo(taiShanCrawlerUnderwritingResponse.getResult().getJqAppNo());
             underwritingResultsVo.setSyApplyNo(taiShanCrawlerUnderwritingResponse.getResult().getSyAppNo());
+
+            // 获取缴费地址
+            PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+            paymentLinkVo.setOrder(underwritingVo.getOrder());
+            PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+            underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
         } else {//核保失败
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             StringBuilder sb = new StringBuilder();
@@ -258,18 +277,17 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         TaiShanCrawlerOrder taiShanCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(insuranceUploadImageVo.getOrder().getOrdersNo());
         // 上传影像文件请求参数
         TaiShanCrawlerImageUploadRequest taiShanCrawlerImageUploadRequest = new TaiShanCrawlerImageUploadRequest();
-        taiShanCrawlerImageUploadRequest.setBiProposalNo(taiShanCrawlerOrder.getBiPolicyNo());
-        taiShanCrawlerImageUploadRequest.setCiProposalNo(taiShanCrawlerOrder.getCiPolicyNo());
+        taiShanCrawlerImageUploadRequest.setBiProposalNo(taiShanCrawlerOrder.getSyApplyNo());
+        taiShanCrawlerImageUploadRequest.setCiProposalNo(taiShanCrawlerOrder.getCiApplyNo());
         taiShanCrawlerImageUploadRequest.setCompanyCode(parameters.getComCode());
 
         List<TaiShanCrawlerImageUploadRequest.ImageNode> imageNodes = new LinkedList<>();
         for (InsuranceImageVo imageVo : insuranceUploadImageVo.getImageVoList()) {
             TaiShanCrawlerImageUploadRequest.ImageNode imageNode = new TaiShanCrawlerImageUploadRequest.ImageNode();
-            imageNode.setType(imageVo.getImageType());
-
+            imageNode.setType(getImageType(imageVo.getImageCode()));
             List<TaiShanCrawlerImageUploadRequest.ImageInfo> images = new ArrayList<>();
             for (InsuranceImageVo.ImageDTO imageDTO : imageVo.getImageBase64List()) {
-                images.add(new TaiShanCrawlerImageUploadRequest.ImageInfo(imageDTO.getImageId(), imageDTO.getImageBase64Str()));
+                images.add(new TaiShanCrawlerImageUploadRequest.ImageInfo(imageDTO.getImageName(), imageDTO.getImageBase64Str()));
             }
             imageNode.setImages(images);
             imageNodes.add(imageNode);
@@ -279,11 +297,40 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         taiShanCrawlerImageUploadRequest.setOperatorName(parameters.getSaleName());
         taiShanCrawlerImageUploadRequest.setOrderNo(taiShanCrawlerOrder.getOrderNo());
         taiShanCrawlerImageUploadRequest.setUploadFlag("D");
-
         TaiShanCrawlerImageUploadResponse taiShanCrawlerImageUploadResponse = taiShanCrawlerRequestComponent.uploadImage(taiShanCrawlerImageUploadRequest, headers);
         log.info("taiShanCrawlerImageUploadResponse对象的值:{}", JSON.toJSONString(taiShanCrawlerImageUploadResponse));
     }
 
+
+    public static String getImageType(String str) {
+        String idcard = "C02|C03|C04|D02|D03|D04|SFZ_01|SFZ_02";//身份证
+        String autoBook = "C01|D01";//行车本
+        String regCert = "TAR05";//登记证书
+        String checkCarPic = "C0500|C0501|C0502|C0503|C0504|C0505|C0506|C0507|C0508|C0509|C0510";//验车照片
+        String elecAppDoc = "INSURANCE_POLICY";//电子投保单
+        String appFormFolder = "INSURANCE_POLICY";//投保单
+        String otherData = "DX_00|ZGZ_00|LD_00|YP_00|XC00|GC00|GX00|YHK_01|Y02|Y03|Y04|SQ00|LZ_01";//其他资料
+
+        if(idcard.contains(str)) {
+            return "Idcard";
+        }else if(autoBook.contains(str)){
+            return "autoBook";
+        }else if(regCert.contains(str)){
+            return "regCert";
+        }else if(checkCarPic.contains(str)){
+            return "checkCarPic";
+        }else if(elecAppDoc.contains(str)){
+            return "elecAppDoc";
+        }else if(appFormFolder.contains(str)){
+            return "appFormFolder";
+        }else if(otherData.contains(str)){
+            return "otherData";
+        }else{
+            return str;
+        }
+    }
+
+
     @Override
     public void queryClauseData(ClauseDataVo clauseDataVo) {
 
@@ -301,6 +348,7 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
         AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         TaiShanCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(TaiShanCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), parameters.getComCode());
+        log.info("headers:{}", JSON.toJSONString(headers));
         TaiShanCrawlerOrder ziJinCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(paymentLinkVo.getOrder().getOrdersNo());
 
         // 获取支付信息
@@ -333,31 +381,90 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
                 syBatchNo = payRisk.getBatchNo();
             }
         }
+
+        // 判断险种类型并生成支付链接(参考 Python 逻辑)
         String payUrl = "";
-        if (jqBatchNo.equals("") && syBatchNo.equals("")) {
-            // 获取交易单号
-            TaiShanCrawlerPaymentCardRequest cardRequest = new TaiShanCrawlerPaymentCardRequest(ziJinCrawlerOrder.getOrderNo(), jqAppNo, jquniqueNo, syAppNo ,syUniqueNo);
-            TaiShanCrawlerPaymentCardResponse taiShanCrawlerPaymentCardResponse = taiShanCrawlerRequestComponent.getPaymentCard(cardRequest, headers);
-            jqBatchNo = taiShanCrawlerPaymentCardResponse.getResult().getBatchNo();
-            syBatchNo = taiShanCrawlerPaymentCardResponse.getResult().getBatchNo();
-        }
-        if(jqBatchNo.equals("")){
-            TaiShanCrawlerPaymentUrlRequest urlRequest = new TaiShanCrawlerPaymentUrlRequest(syBatchNo, jqAppNo, syAppNo);
-            payUrl = "http://www.taishanpic.com.cn/phonepay/payRealNameCheck.jsp" + toQueryString(urlRequest);
-        }else{
-            TaiShanCrawlerPaymentUrlRequest urlRequest = new TaiShanCrawlerPaymentUrlRequest(jqBatchNo, jqAppNo, syAppNo);
-            payUrl = "http://www.taishanpic.com.cn/phonepay/payRealNameCheck.jsp" + toQueryString(urlRequest);
+        if (StringUtils.hasText(jqAppNo) && StringUtils.hasText(jquniqueNo)
+                && StringUtils.hasText(syAppNo) && StringUtils.hasText(syUniqueNo)) {
+            log.info("交商(交强险+商业险)");
+            // 交商(交强险+商业险)
+            if (StringUtils.hasText(jqBatchNo) && StringUtils.hasText(syBatchNo)) {
+                log.info("已经生成交易单号");
+                // 已经生成交易单号
+                payUrl = buildPayUrl(jqBatchNo, jqAppNo, syAppNo);
+            } else {
+                log.info("未生成交易单号,先获取 batchNo");
+                // 未生成交易单号,先获取 batchNo
+                TaiShanCrawlerPaymentCardRequest cardRequest = new TaiShanCrawlerPaymentCardRequest(
+                        ziJinCrawlerOrder.getOrderNo(), jqAppNo, jquniqueNo, syAppNo, syUniqueNo);
+
+                TaiShanCrawlerPaymentCardResponse cardResponse = taiShanCrawlerRequestComponent.getPaymentCard(cardRequest, headers);
+                String batchNo = cardResponse.getResult().getBatchNo();
+                jqBatchNo = batchNo;
+                syBatchNo = batchNo;
+                payUrl = buildPayUrl(batchNo, jqAppNo, syAppNo);
+            }
+        } else if (StringUtils.hasText(jqAppNo) && StringUtils.hasText(jquniqueNo)) {
+            log.info("单交(仅交强险)");
+            // 单交(仅交强险)
+            if (StringUtils.hasText(jqBatchNo)) {
+                log.info("已经生成交易单号");
+                // 已经生成交易单号
+                payUrl = buildPayUrl(jqBatchNo, jqAppNo, "");
+            } else {
+                log.info("未生成交易单号");
+                // 未生成交易单号
+                TaiShanCrawlerPaymentCardRequest cardRequest = new TaiShanCrawlerPaymentCardRequest(
+                        ziJinCrawlerOrder.getOrderNo(), jqAppNo, jquniqueNo, "", "");
+
+                TaiShanCrawlerPaymentCardResponse cardResponse = taiShanCrawlerRequestComponent.getPaymentCard(cardRequest, headers);
+                jqBatchNo = cardResponse.getResult().getBatchNo();
+                payUrl = buildPayUrl(jqBatchNo, jqAppNo, "");
+            }
+        } else if (StringUtils.hasText(syAppNo) && StringUtils.hasText(syUniqueNo)) {
+            log.info("单商(仅商业险)");
+            // 单商(仅商业险)
+            if (StringUtils.hasText(syBatchNo)) {
+                log.info("已经生成交易单号");
+                // 已经生成交易单号
+                payUrl = buildPayUrl(syBatchNo, "", syAppNo);
+            } else {
+                log.info("未生成交易单号");
+                // 未生成交易单号
+                TaiShanCrawlerPaymentCardRequest cardRequest = new TaiShanCrawlerPaymentCardRequest(
+                        ziJinCrawlerOrder.getOrderNo(), "", "", syAppNo, syUniqueNo);
+
+                TaiShanCrawlerPaymentCardResponse cardResponse = taiShanCrawlerRequestComponent.getPaymentCard(cardRequest, headers);
+                syBatchNo = cardResponse.getResult().getBatchNo();
+                payUrl = buildPayUrl(syBatchNo, "", syAppNo);
+            }
         }
-        if(com.jzg.commons.util.StringUtils.isNotBlank(payUrl)){
+        log.info("payUrl:{}", payUrl);
+        if(StringUtils.hasText(payUrl)){
             paymentLinkResultsVo.setPayLinkStatus(true);
             paymentLinkResultsVo.setPaymentLink(payUrl);
         }else{
             paymentLinkResultsVo.setPayLinkStatus(false);
             paymentLinkResultsVo.setErrorMsg("未获取到支付链接");
         }
+        log.info("paymentLinkResultsVo:{}", JSON.toJSONString(paymentLinkResultsVo));
+
         return paymentLinkResultsVo;
     }
 
+    /**
+     * 构建支付URL
+     *
+     * @param batchNo 交易单号
+     * @param jqAppNo 交强险投保单号
+     * @param syAppNo 商业险投保单号
+     * @return 支付URL
+     */
+    private String buildPayUrl(String batchNo, String jqAppNo, String syAppNo) {
+        TaiShanCrawlerPaymentUrlRequest urlRequest = new TaiShanCrawlerPaymentUrlRequest(batchNo, jqAppNo, syAppNo);
+        return "http://www.taishanpic.com.cn/phonepay/payRealNameCheck.jsp" + toQueryString(urlRequest);
+    }
+
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
     public static String toQueryString(Object obj) {