Qchen пре 10 месеци
родитељ
комит
e54872bae9

+ 6 - 6
commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostRatioVo.java

@@ -76,22 +76,22 @@ public class PtlAgreementCostRatioVo {
         ptlAgreementCostTypeList.forEach(ptlAgreementCostType -> {
             switch (ptlAgreementCostType.getCostType()) {
                 case "交强险":
-                    this.jqCommissionRatio = ptlAgreement.getJqEntranceFeeRatio();
+                    this.jqCommissionRatio = ptlAgreement.getJqEntranceFeeRatio() != null ? ptlAgreement.getJqEntranceFeeRatio() : BigDecimal.ZERO;
                     this.jqInletRatio = ptlAgreementCostType.getInlet();
                     this.jqExportRatio = ptlAgreementCostType.getExport();
-                    this.jqFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getJqEntranceFeeRatio());
+                    this.jqFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getJqEntranceFeeRatio() != null ? ptlAgreement.getJqEntranceFeeRatio() : BigDecimal.ZERO);
                     this.jqAdditionalRatio = ptlAgreementCostType.getAddThrow();
                 case "商业险":
-                    this.syCommissionRatio = ptlAgreement.getSyEntranceFeeRatio();
+                    this.syCommissionRatio = ptlAgreement.getSyEntranceFeeRatio() != null ? ptlAgreement.getSyEntranceFeeRatio() : BigDecimal.ZERO;
                     this.syInletRatio = ptlAgreementCostType.getInlet();
                     this.syExportRatio = ptlAgreementCostType.getExport();
-                    this.syFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getSyEntranceFeeRatio());
+                    this.syFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getSyEntranceFeeRatio() != null ? ptlAgreement.getSyEntranceFeeRatio() : BigDecimal.ZERO);
                     this.syAdditionalRatio = ptlAgreementCostType.getAddThrow();
                 case "驾意险":
-                    this.jyCommissionRatio = ptlAgreement.getJyEntranceFeeRatio();
+                    this.jyCommissionRatio = ptlAgreement.getJyEntranceFeeRatio() != null ? ptlAgreement.getJyEntranceFeeRatio() : BigDecimal.ZERO;
                     this.jyInletRatio = ptlAgreementCostType.getInlet();
                     this.jyExportRatio = ptlAgreementCostType.getExport();
-                    this.jyFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getJyEntranceFeeRatio());
+                    this.jyFollowRatio = ptlAgreementCostType.getInlet().subtract(ptlAgreement.getJyEntranceFeeRatio() != null ? ptlAgreement.getJyEntranceFeeRatio() : BigDecimal.ZERO);
                     this.jyAdditionalRatio = ptlAgreementCostType.getAddThrow();
             }
         });

+ 2 - 2
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtil.java → tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtils.java

@@ -18,12 +18,12 @@ import java.util.Locale;
  *
  * @author MrBird
  */
-public class DateUtil {
+public class DateUtils {
 
     /**
      * log日志
      */
-    private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
+    private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);
 
     public static final String FULL_TIME_PATTERN = "yyyyMMddHHmmss";
 

+ 5 - 7
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerCalculationRequest.java

@@ -3,14 +3,11 @@ package com.jzg.quotation.hengbang.crawler.entity.request;
 import cn.hutool.core.collection.CollUtil;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.quotation.commons.utils.DateUtil;
+import com.jzg.quotation.commons.utils.DateUtils;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.time.Instant;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -78,16 +75,17 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         this.clauseType = "2";
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
         this.risktype = "0";
+        this.begintimeBi = DateUtils.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
         if(CollUtil.isNotEmpty(kindInfoVoList)){
             this.epersonliabilityList = getEpersonliabilityList(kindInfoVoList);
-            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
+            this.begintimeBi = DateUtils.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
             this.risktype = "2";
         }else{
 //            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.epersonliabilityList = new ArrayList<>();
         }
         if(Objects.nonNull(quoteVo.getCiRiskInfoVo())){
-            this.begintimeCi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
+            this.begintimeCi = DateUtils.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.risktype = "1";
         }
         this.plyappno = plyappno;
@@ -118,7 +116,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         return epersonliabilityDTOList;
     }
 
-//    private String outofwarrantytype;
+    private String outofwarrantytype;
     private String clauseType;
     private List<String> ecarChargingPosts;
     private List<String> carInsureDevices;

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

@@ -1,6 +1,7 @@
 package com.jzg.quotation.hengbang.crawler.service.Impl;
 
 import cn.hutool.core.collection.CollUtil;
+//import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -10,7 +11,6 @@ import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
@@ -19,6 +19,7 @@ import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.DateUtils;
 import com.jzg.quotation.hengbang.crawler.build.HbCrawlerQuoteResultVoBuild;
 import com.jzg.quotation.hengbang.crawler.component.HengBangCrawlerRequestComponent;
 import com.jzg.quotation.hengbang.crawler.constant.RequestConstant;
@@ -32,14 +33,16 @@ import com.jzg.quotation.hengbang.crawler.properties.HengBangCrawlerProperties;
 import com.jzg.quotation.hengbang.crawler.service.HbCrawlerOrderService;
 import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @description: 恒邦财险 爬虫请求
@@ -110,6 +113,11 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         HbCrawlerCalculationRequest calculationRequest = new HbCrawlerCalculationRequest(quoteVo, plyappno);
         String calculationResult = hbCrawlerRequestComponent.getCalculationResult(calculationRequest, headers);
         HbCrawlerProposalResponse proposalResponse = null;
+        // 脱保情况 重新赋值核心建议起保时间 二次报价
+        if(calculationResult.contains("脱保")){
+            calculationRequest.setOutofwarrantytype("N");
+            calculationResult = hbCrawlerRequestComponent.getCalculationResult(calculationRequest, headers);
+        }
         if(calculationResult.equals("成功")){
             // 5.2 报价第三步,获取报价数据
             proposalResponse = hbCrawlerRequestComponent.proposal(plyappno, headers);
@@ -120,6 +128,18 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         }
         return HbCrawlerQuoteResultVoBuild.build(quoteVo, proposalResponse, calculationResult);
     }
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private static final Pattern START_TIME_PATTERN = Pattern.compile("起保起期设置为:(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})[.。!;;]?");
+
+    /**
+     * 提取系统自动分配的起保时间(从提示文本中)
+     * @param calculationResult 系统提示文本
+     * @return 提取到的时间字符串(如:2025-12-02 11:46:00),未提取到返回 null
+     */
+    private String extractSystemAssignedTime(String calculationResult) {
+        Matcher matcher = START_TIME_PATTERN.matcher(calculationResult);
+        return matcher.find() ? matcher.group(1) : null;
+    }
 
     /**
      * 提交核保 子订单

+ 1 - 1
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/utils/HengBangAESUtil.java

@@ -45,7 +45,7 @@ public class HengBangAESUtil {
     }
 
     public static void main(String[] args) throws Exception {
-        String input = "+JTEWrnKYuBWvJEwfftpAIZCvBcf51wJDDgcRtasOcVFnv3KfW6hiQHQ2og8OnyORmtFcLLcHwVMX3oyp4fW37PvkGY/sYrBZTw1hoV0+c+E7dF7AZ1fZ0+a4ITB0Llzvwo6vcPLQp8fqOk4lErbh872tSw2rSQsDbwGiaPQcjkkIxoGaYHvARXd6cDYpK5Zvd9aW2mUvDgEMx2MzaOTOYDofnWfWPJhdDLgwCqU4I3sL8jOKbj9z+/yxvjyTJCmRz1dX8FUL3fM7deGYZXk5Q9ao5tTMNvKD1D/gMjpQW2dlaXXzkauiRgJayqSuVGNKJbvkQJurgphzUgi5hLC+gWeJTm/nmrDXtPH3YfCZWQMvriRG1fEMEWnYDNeiBZja4XspQkGVeR0KHoTT1YOxP1ElIGNCco9ZWrFpNRHuVwL9b6GnVY77jWvXeYmiT3gPLK8QDrmv1/aAYKBd4QWw0a4VjVvvVZb8Py5m9FDJSw=";
+        String input = "+JTEWrnKYuBWvJEwfftpAIZCvBcf51wJDDgcRtasOcVFnv3KfW6hiQHQ2og8OnyORmtFcLLcHwVMX3oyp4fW37PvkGY/sYrBZTw1hoV0+c+E7dF7AZ1fZ0+a4ITB0Llzk7xU9OUOydnH/muPx9npJNkG5cIH0J88Y1L66qx6R3ufE7KbRz29nlvBsBY593QJnXkt20w7Uae5LejI7LHJ8H7enfY72n8sseY55CP2FdjC38ibhlp3bIPBWZcNM6hkozlvq6aSy/hRgMGLgS8Mq0F4MkgACssuD0DaJYy4B1MGXaFDT22Ti6arcEbqZs2OpBHn8q5aGBto5zYOkCqRa0/KKoJEbZVSMQEHPTWhExbY8aUc5uRosrA66kKp3I9yyAlDjgld+4Ow9BMuc3Xz0n18r3R6WYUhyhCXvssHBgiRw6QrXEgUU1cJhh59Vf4xJhAjKE6OGbfwEN+hgSmLWMv8WVyCBLYatS52dZk+FnN2v9y5ulD+ARJMxNJrjiYrMkjJ5BMuGLvknV/eWcU8B0fm1mEKhfvDUUhNoNYDHGHoj8jh/35jSXbQnn6bOteOrCJEB6ygUJloE5CVGnJQuSv7RsPWTHJWi7KChiYn7k7xl9bMSNmW5+kFKfjeZbWFW2jv0lRsUsdLtq8tsenyvQ+IUDOFuwMVLZWg28nvGC/ZVkoW7AtK7ORlF5HIn/g7y4vTGe7/HmSxxRkrF5mFL306eDdIB42WffSRwhQzH/Y=";
         System.out.println(decryptStr(input));
 
     }

+ 3 - 3
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/entity/request/QuoteRequest.java

@@ -12,7 +12,7 @@ import com.jzg.commons.util.IDCardUtils;
 import com.jzg.commons.constants.quote.enums.quote.VehicleUseCode;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
-import com.jzg.quotation.commons.utils.DateUtil;
+import com.jzg.quotation.commons.utils.DateUtils;
 import com.jzg.quotation.yongcheng.api.entity.YcBuildData;
 import com.jzg.quotation.yongcheng.api.entity.dto.CarInsDateDto;
 import com.jzg.quotation.yongcheng.api.entity.response.ModelsQueryResponse;
@@ -329,7 +329,7 @@ public class QuoteRequest {
                 base.setRenewalFlagJQ("0");
                 //续保标志(商业)  0 非续保   1 续保
                 base.setRenewalFlagSY("0");
-                base.setOperateDate(DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN));
+                base.setOperateDate(DateUtils.getDateFormat(new Date(), DateUtils.FULL_TIME_SPLIT_PATTERN));
                 base.setCBsnsTyp("19002");
                 base.setInsuredName(insuredPersonInfo.getName());
                 base.setTaxFlag("1");
@@ -337,7 +337,7 @@ public class QuoteRequest {
                 base.setRenewalFlagSY("0");
                 base.setCSlsCde(ycConfigureParameters.getSalesmanNo());
                 base.setOperatorCode(ycConfigureParameters.getOperatorCode());
-                base.setTIssueTm(DateUtil.getDateFormat(new Date(), "yyyy-MM-dd"));
+                base.setTIssueTm(DateUtils.getDateFormat(new Date(), "yyyy-MM-dd"));
                 base.setCChaType(ycConfigureParameters.getCChaType());
 
 

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

@@ -10,7 +10,7 @@ import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
-import com.jzg.quotation.commons.utils.DateUtil;
+import com.jzg.quotation.commons.utils.DateUtils;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.zhongmei.api.constant.enums.ImageTypeEnum;
 import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
@@ -31,7 +31,6 @@ import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.http.*;
 import org.springframework.http.MediaType;
-import org.springframework.http.client.MultipartBodyBuilder;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
@@ -729,7 +728,7 @@ public class ZmCrawlerRequestComponent {
 
         Document submitXml = XmlUtil.readXML(xmlStr);
 
-        String currentDateTime = DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN);
+        String currentDateTime = DateUtils.getDateFormat(new Date(), DateUtils.FULL_TIME_SPLIT_PATTERN);
         NodeList childNodes = submitXml.getDocumentElement().getChildNodes();
         Node pageInfoNode = childNodes.item(1);
         Node vTreeNode = childNodes.item(2);

+ 2 - 2
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerActualValueRequest.java

@@ -1,7 +1,7 @@
 package com.jzg.quotation.zhongmei.crawler.entity.Request;
 
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
-import com.jzg.quotation.commons.utils.DateUtil;
+import com.jzg.quotation.commons.utils.DateUtils;
 import com.jzg.quotation.zhongmei.api.entity.BaseRequestHead;
 import com.jzg.quotation.zhongmei.api.entity.request.BaseRequest;
 import com.jzg.quotation.zhongmei.crawler.constant.enums.ZmCrawlerTransCode;
@@ -85,7 +85,7 @@ public class ZmCrawlerActualValueRequest extends BaseRequest {
     public ZmCrawlerActualValueRequest(CarInfoVo carInfoVo, BaseRequestHead head) {
         this.setHead(head);
         this.approvedPassengersCapacity = Integer.parseInt(carInfoVo.getSeatCount());
-        this.validDate = DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN);
+        this.validDate = DateUtils.getDateFormat(new Date(), DateUtils.FULL_TIME_SPLIT_PATTERN);
         this.purchasePrice = Integer.parseInt(carInfoVo.getPurchasePrice());
         this.motorUsageTypeCode = carInfoVo.getCarNatureCode();
         if(carInfoVo.getEnergyTypeCode().equals("0")){

+ 2 - 2
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerQuotedPriceRequest.java

@@ -5,7 +5,7 @@ import com.jzg.commons.constants.InsuranceRisk;
 import com.jzg.commons.entity.quote.vo.*;
 import com.jzg.commons.constants.quote.enums.quote.PropertyCode;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.quotation.commons.utils.DateUtil;
+import com.jzg.quotation.commons.utils.DateUtils;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.zhongmei.api.constant.TransCode;
 import com.jzg.quotation.zhongmei.api.constant.enums.ContractEnum;
@@ -91,7 +91,7 @@ public class ZmCrawlerQuotedPriceRequest extends BaseRequest {
 
         public List<ContractDTO> buildContractList(QuoteVo quoteVo) {
             List<ContractDTO> contracts = new ArrayList<>();
-            String date = DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN);
+            String date = DateUtils.getDateFormat(new Date(), DateUtils.FULL_TIME_SPLIT_PATTERN);
             ContractDTO ciContract = buildCiContract(quoteVo, date);
             ContractDTO biContract = buildBiContract(quoteVo, date);
             if(Objects.nonNull(ciContract)){