Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

Qchen 4 miesięcy temu
rodzic
commit
11da02cdbb

+ 31 - 8
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateTimeUtil.java

@@ -1,13 +1,11 @@
 package com.jzg.quotation.commons.utils;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import org.apache.commons.lang3.StringUtils;
 
 import java.text.ParseException;
-import java.time.DayOfWeek;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAccessor;
@@ -470,10 +468,6 @@ public class DateTimeUtil {
 //        System.err.println("注册日期:"+lRegisterDate);
 //        System.err.println("上市日期:"+lVehicleYearDate);
         return lVehicleYearDate.isBefore(lRegisterDate);
-
-
-
-
     }
 
     /**
@@ -494,6 +488,35 @@ public class DateTimeUtil {
         return false;
     }
 
+    /**
+     * 将日期字符串解析为LocalDateTime对象
+     * 支持多种日期格式:
+     * - ISO格式:yyyy-MM-ddTHH:mm:ss+08:00(含时区)
+     * - 完整格式:yyyy-MM-dd HH:mm:ss
+     * - 简短格式:yyyy-MM-dd(自动补充时间为00:00:00)
+     *
+     * @param dateStr 日期字符串,可以为null或空字符串
+     * @return 解析后的LocalDateTime对象,如果输入为空则返回null
+     */
+    public static LocalDateTime parseDate(String dateStr) {
+        if (StrUtil.isEmpty(dateStr)) {
+            return null;
+        }
+
+        // 如果包含T或时区信息,使用ISO格式解析
+        if (dateStr.contains("T") || dateStr.contains("+") || dateStr.contains("Z")) {
+            return ZonedDateTime.parse(dateStr, DateTimeFormatter.ISO_OFFSET_DATE_TIME).toLocalDateTime();
+        }
+
+        // 处理仅包含日期的字符串(长度为10),补充默认时间
+        if (dateStr.length() == 10) {
+            return LocalDateTime.parse(dateStr + " 00:00:00", DateTimeFormatter.ofPattern(DATETIME_PATTERN));
+        }
+
+        // 使用标准格式解析
+        return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(DATETIME_PATTERN));
+    }
+
 
 
     public static void main(String[] args) throws ParseException {

+ 42 - 40
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/build/HbCrawlerQuoteResultVoBuild.java

@@ -9,8 +9,11 @@ import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerProposalResponse;
+import org.apache.http.util.TextUtils;
 
+import java.time.LocalDateTime;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
@@ -70,26 +73,54 @@ public final class HbCrawlerQuoteResultVoBuild {
     public static RiskInfoVo buildCiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo ciRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.ForceCarInsureRiskDTO forceCarInsureRisk = proposalResponse.getForceCarInsureRisk();
-        if (Objects.nonNull(forceCarInsureRisk)) {
-            ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
-            ciRiskInfoVo.setStartDate(parseDate(forceCarInsureRisk.getBegintime()));
-            ciRiskInfoVo.setEndDate(parseDate(forceCarInsureRisk.getEndtime()));
-        }
-        return ciRiskInfoVo;
-
+        return getRiskInfoVo(ciRiskInfoVo, Objects.nonNull(forceCarInsureRisk), false, forceCarInsureRisk, proposalResponse.getBusiCarInsureRisk());
     }
 
     public static RiskInfoVo buildBiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo biRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk = proposalResponse.getBusiCarInsureRisk();
-        if (Objects.nonNull(busiCarInsureRisk)) {
-            biRiskInfoVo.setRiskCode(busiCarInsureRisk.getRiskcode());
-            biRiskInfoVo.setStartDate(parseDate(busiCarInsureRisk.getBegintime()));
-            biRiskInfoVo.setEndDate(parseDate(busiCarInsureRisk.getEndtime()));
+        return getRiskInfoVo(biRiskInfoVo, false, Objects.nonNull(busiCarInsureRisk), proposalResponse.getForceCarInsureRisk(), busiCarInsureRisk);
+    }
+
+
+    /**
+     * 设置风险信息的基础属性
+     *
+     * @param biRiskInfoVo       风险信息对象
+     * @param isCiInfo           是否有交强险
+     * @param isBiInfo           是否有商业险
+     * @param forceCarInsureRisk 交强险风险DTO对象
+     * @param busiCarInsureRisk  商业险风险DTO对象
+     * @return 设置后的风险信息对象
+     */
+    private static RiskInfoVo getRiskInfoVo(RiskInfoVo biRiskInfoVo, boolean isCiInfo, boolean isBiInfo, HbCrawlerProposalResponse.ForceCarInsureRiskDTO forceCarInsureRisk, HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk) {
+        String riskcode = "";
+        String begintime = "";
+        String endtime = "";
+
+        if (isCiInfo) {
+            riskcode = forceCarInsureRisk.getRiskcode();
+            begintime = forceCarInsureRisk.getBegintime();
+            endtime = forceCarInsureRisk.getEndtime();
+        } else if (isBiInfo) {
+            riskcode = busiCarInsureRisk.getRiskcode();
+            begintime = busiCarInsureRisk.getBegintime();
+            endtime = busiCarInsureRisk.getEndtime();
+        }
+
+        if (TextUtils.isEmpty(riskcode) || TextUtils.isEmpty(begintime) || TextUtils.isEmpty(endtime)) {
+            return null;
         }
+
+        biRiskInfoVo.setRiskCode(riskcode);
+        LocalDateTime startDate = DateTimeUtil.parseDate(begintime);
+        biRiskInfoVo.setStartDate(DateTimeUtil.format(startDate, DateTimeUtil.DATETIME_PATTERN));
+        LocalDateTime endDate = DateTimeUtil.parseDate(endtime);
+        biRiskInfoVo.setEndDate(DateTimeUtil.format(endDate, DateTimeUtil.DATETIME_PATTERN));
         return biRiskInfoVo;
     }
 
+
     public static List<KindInfoVo> buildKindInfoList(HbCrawlerProposalResponse proposalResponse, QuoteVo quoteVo) {
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
         if (CollUtil.isNotEmpty(kindInfoVoList)) {
@@ -126,33 +157,4 @@ public final class HbCrawlerQuoteResultVoBuild {
         quoteResultsVo.getCosts().setNiPremium(proposalResponse.getAccidentTotalPremium());
     }
 
-    /**
-     * 将日期字符串标准化为 yyyy-MM-dd HH:mm:ss 格式
-     * 支持多种日期格式:
-     * - ISO格式:yyyy-MM-ddTHH:mm:ss+08:00(含时区)
-     * - 完整格式:yyyy-MM-dd HH:mm:ss
-     * - 简短格式:yyyy-MM-dd(自动补充时间为00:00:00)
-     *
-     * @param dateStr 日期字符串,可以为null或空字符串
-     * @return 标准化后的日期字符串,如果输入为空则返回null
-     */
-    private static String parseDate(String dateStr) {
-        if (StrUtil.isEmpty(dateStr)) {
-            return null;
-        }
-
-        // 处理仅包含日期的字符串(长度为10),补充默认时间
-        if (dateStr.length() == 10) {
-            return dateStr + " 00:00:00";
-        }
-
-        // 如果包含T或时区信息,使用ISO格式解析后转换
-        if (dateStr.contains("T") || dateStr.contains("+") || dateStr.contains("Z")) {
-            ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateStr, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
-            return zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        }
-
-        // 已满足 yyyy-MM-dd HH:mm:ss 格式,直接返回
-        return dateStr;
-    }
 }

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

@@ -1,9 +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.convert.Convert;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -22,13 +20,14 @@ 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.commons.exception.SystemException;
-import com.jzg.commons.util.Base64Convert;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
+import com.jzg.quotation.commons.utils.DateUtil;
 import com.jzg.quotation.hengbang.crawler.build.HbCrawlerQuoteResultVoBuild;
 import com.jzg.quotation.hengbang.crawler.component.HengBangCrawlerRequestComponent;
 import com.jzg.quotation.hengbang.crawler.constant.RequestConstant;
@@ -162,8 +161,8 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         if (errorMsg.contains("重复投保")) {
             String time = extractDuplicateEndTime(errorMsg);
             if (time != null) {
-                calculationRequest.setBegintimeCi(time);
-                calculationRequest.setBegintimeBi(time);
+                calculationRequest.setBegintimeCi(DateUtil.toUtcDateTime(time));
+                calculationRequest.setBegintimeBi(DateUtil.toUtcDateTime(time));
             }
 
             resJson = hbCrawlerRequestComponent.getCalculationResult(calculationRequest, headers);
@@ -480,7 +479,7 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
      * @return
      */
     public String getSign(String riskType, String businessNo) {
-        StringBuilder signBuilder = new StringBuilder(DateUtil.today());
+        StringBuilder signBuilder = new StringBuilder(DateTimeUtil.getLocalDateStr());
         signBuilder.append(RequestConstant.POLICY_TYPE_POLICY).append(riskType).append(businessNo);
         return DigestUtil.md5Hex(signBuilder.toString());
     }

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

@@ -46,7 +46,7 @@ public class HengBangAESUtil {
 
     public static void main(String[] args) throws Exception {
         String input =
-                "+JTEWrnKYuBWvJEwfftpAEP3zAsrpI0vAF0D1lWpUzulgmrb950t3X8fzzySTcytGMsbHsymR4cqADhc4wO6XDegVAl4ccA5Jn+GXNU8Jcya5muO5LAd0VK5bjI7MW+pJa1RPjKSWphvUt+HEtheIfJOUsOIAEc8wITYSYMLlaeoc/PmFqLgnEE45xppZRsQrmA9oSuijNpbATYPhMvRTYzK6RGEGI42pRaOFRqi+d0vZE7WeV/h5kcFAxIFFWJqY1I5SxlHW4+5dW0KPz2lrLAwxFh7qK6G38cu/RkGgGyD3lHdbCoUMYZzZ7Cgf5DDUrdQxjLvscJSge0f11ia2g==";
+                "mI3hf9u4miA+/sObjxothcw8EQGvagpiFMIbmW68h1JOE2O/QKyvM/jCHIReBXEgY0mzjSLBBPjk3jh6o2kptrsb8iKFLqZGPuVoywlHNWuooe9om891JJn34ar3W9tYwEXdWqLk4873U5dSGsh8fCoMmq6aG7FjvniwaWmzpRtawv5KSQS8CSvZH1VMC0w89raPu1gPvxnzWXqpSleG2k2XamBY9Enj820fhPaTvKHDbNdmyFHBGGx+AQ49Z8fHuGatAfUqNgT7pb2XwgmZu+gjC60s+me+6kajYoQX82gLSF46cd14GedOihRwrtq+PACi61XPGERxb1g/LXHKAme7V7+aw2Fp+8QoHsAyIojpZ2Seg7bbWz568TKyC3ALhLO/2VEnKcAnTFYNxcEhLjDX3fj/4E6wivxfqKdqXSxYzFtU2fJ42P8pXxstongFvDIO6TUitKDULUiGh9SleWNjdBS49eji9N8DDBlmJTRwYuNJa8YBzbBvrRX+Sf29DSmTqKJhOhg66phflvti4ZqAnQufWpWKcGVTUr3G0m5VKo8hAMdw/4l2SU73qycEz94aLpdLrjrGXWTLv1ZVDjZTe7tfsGUk+oI2VkDw1XTIXKWhhH73nTZImZAb0h642OG/OlrhJMZCpoPncYXqym2qKu0gLoha86s059Ln5AO132zQDDqR2MS24JLS6zlbiWB0LGHS5k2/VEvEGyej7jPMq07g62LLXgKb5Bgq1xw=";
         System.out.println(decryptStr(input));
 
         String json = "T070302080120260014158";

+ 56 - 87
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -50,6 +50,7 @@ import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PartnerDistributionClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.utils.BeanCopyUtil;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
 import com.jzg.quotation.summary.entity.bo.DataValueBo;
@@ -171,10 +172,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             InsOrdersAdd insOrdersAdd = BeanCopyUtil.deepCopy(ordersAdd, InsOrdersAdd.class);
             InsOrders parentOrders = insOrdersMapper.selectMainOrderNumber(ordersAdd.getCarInfoVo().getLicenseNo(), realQuoteUserId);
             boolean nullOrders = ObjectUtil.isNull(parentOrders);
-            if (nullOrders){
+            if (nullOrders) {
                 insOrders.setQuoteNo(SnowFlakeUtil.getSnowFlakeId());
                 insOrders.setParentId("0");
-            }else {
+            } else {
                 insOrders.setParentId(parentOrders.getId());
                 insOrders.setQuoteNo(parentOrders.getQuoteNo());
             }
@@ -228,12 +229,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersCostsService.save(insOrdersCosts);
 
             //  保存保单号
-            InsOrdersPolicy policy = BeanUtil.copyProperties(insOrdersOtherInfo,InsOrdersPolicy.class);
+            InsOrdersPolicy policy = BeanUtil.copyProperties(insOrdersOtherInfo, InsOrdersPolicy.class);
             policy.setOrderNo(quoteNo);
             insOrdersPolicyService.save(policy);
 
             //  保存订单费用
-            updateOrSaveFeeOrder(ordersAdd.getFeeOrdersVo(),quoteNo);
+            updateOrSaveFeeOrder(ordersAdd.getFeeOrdersVo(), quoteNo);
 
             // 保险种类信息
             List<KindInfoVo> kindInfoVo = ordersAdd.getKindInfoVo();
@@ -278,7 +279,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             this.orderStatusMessage(insOrders,
                     insOrdersCarInfo, insOrdersCosts,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_9);
-            if (nullOrders){
+            if (nullOrders) {
                 InsOrders orders = insOrdersAdd.getInsOrders();
                 orders.setQuoteNo(insOrders.getQuoteNo());
                 insOrdersAdd.setInsOrders(orders);
@@ -296,17 +297,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
     //  更新订单费用信息
-    public void updateOrSaveFeeOrder(InsFeeOrdersVo feeOrdersVo,String quoteNo){
-        if (StringUtils.isEmpty(feeOrdersVo.getAgreementId())){
+    public void updateOrSaveFeeOrder(InsFeeOrdersVo feeOrdersVo, String quoteNo) {
+        if (StringUtils.isEmpty(feeOrdersVo.getAgreementId())) {
             feeOrdersVo.setAgreementId(null);
         }
-        InsFeeOrders feeOrders = BeanUtil.copyProperties(feeOrdersVo,InsFeeOrders.class);
+        InsFeeOrders feeOrders = BeanUtil.copyProperties(feeOrdersVo, InsFeeOrders.class);
         feeOrders.setOrderNo(quoteNo);
         insFeeOrdersMapper.insertOrUpdate(feeOrders);
     }
 
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult updateOrders(InsOrdersEnd ordersEnd) {
@@ -314,7 +314,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             // 获取订单对象并设置引用编号
             InsOrders insOrders = ordersEnd.getInsOrders();
             InsOrders orders = insOrdersMapper.selectById(insOrders.getId());
-            if (Objects.isNull(orders)){
+            if (Objects.isNull(orders)) {
                 throw new SystemException("订单不存在或已删除");
             }
             // 插入订单信息,如果插入失败,则返回错误信息
@@ -346,13 +346,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             List<InsOrdersKind> insOrdersKinds = BeanUtil.copyToList(kindInfoVo, InsOrdersKind.class);
             insOrdersKindService.updateBatchById(insOrdersKinds);
             //  更新保单号
-            InsOrdersPolicy policy = BeanUtil.copyProperties(insOrdersOtherInfo,InsOrdersPolicy.class);
+            InsOrdersPolicy policy = BeanUtil.copyProperties(insOrdersOtherInfo, InsOrdersPolicy.class);
             policy.setOrderNo(quoteNo);
             insOrdersPolicyService.updateById(policy);
 
 
             //更新订单费用
-            updateOrSaveFeeOrder(ordersEnd.getFeeOrdersVo(),quoteNo);
+            updateOrSaveFeeOrder(ordersEnd.getFeeOrdersVo(), quoteNo);
 
             // 税费信息
             VehicleAndVesselTaxVo vehicleAndVesselTax = ordersEnd.getVehicleAndVesselTaxVo();
@@ -382,7 +382,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             InsTaskImagesAdd imagesAdds = ordersEnd.getImagesAdds();
             if (ObjectUtil.isNotEmpty(imagesAdds)) {
-                insTaskImagesService.remove(new LambdaQueryWrapper<>(InsTaskImages.class).eq(InsTaskImages::getQuoteNo,quoteNo));
+                insTaskImagesService.remove(new LambdaQueryWrapper<>(InsTaskImages.class).eq(InsTaskImages::getQuoteNo, quoteNo));
                 List<InsTaskImages> insTaskImages = BeanUtil.copyToList(imagesAdds.getImages(), InsTaskImages.class);
                 insTaskImages.forEach(image -> {
                     image.setQuoteNo(String.valueOf(quoteNo));
@@ -408,8 +408,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
 
-
-    public void updatePersonnelInformation(InsOrdersEnd ordersEnd){
+    public void updatePersonnelInformation(InsOrdersEnd ordersEnd) {
         // 获取用户信息对象,并设置订单编号,保存用户信息
         List<InsOrdersCarUserInfo> userInfos = new ArrayList<>();
         InsOrdersCarUserInfo ownersInfo = BeanUtil.copyProperties(ordersEnd.getOwnersInfo(), InsOrdersCarUserInfo.class);
@@ -434,7 +433,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
             systemCode = request.getHeader("system_code");
         } else {
-            systemCode =  baseController.getUserSystemCode();
+            systemCode = baseController.getUserSystemCode();
         }
         insOrdersParam.setSystemCode(systemCode);
         IPage<OrdersListVo> ordersListVoIPage = insOrdersMapper.pageList(insOrdersParam.getPage(), insOrdersParam);
@@ -459,11 +458,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      */
     @Override
     public InsOrdersVo selectById(Long id) {
-        log.info("根据id查询订单信息。订单的序号(不是订单号)id=[{}]",id);
+        log.info("根据id查询订单信息。订单的序号(不是订单号)id=[{}]", id);
         // 1. 查询订单信息
         InsOrdersVo insOrdersVo = insOrdersMapper.getById(id);
         if (insOrdersVo == null) {
-            log.info("根据id没有找到订单信息。订单的序号(不是订单号)id=[{}]。",id);
+            log.info("根据id没有找到订单信息。订单的序号(不是订单号)id=[{}]。", id);
             throw new SystemException("查询结果为空,无法处理订单信息");
         }
         // 协议名称、协议类型
@@ -471,7 +470,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             HttpResult<AgreementInfoVo> ptlAgreement = orgClient.queryAgreementById(insOrdersVo.getInsOrders().getAgreementId());
             // modify by lipf 2026年4月14日16:59:27 解决查看后补订单没有协议时查看不到数据的bug
             //AssertionUtils.isFail(ptlAgreement.getCode() == 500, ptlAgreement.getMsg() + ",请联系管理处理");
-            if(ptlAgreement.getData() != null && ptlAgreement.getData().getAgreement() != null){
+            if (ptlAgreement.getData() != null && ptlAgreement.getData().getAgreement() != null) {
                 insOrdersVo.setAgreementType(ptlAgreement.getData().getAgreement().getAgreementType());
                 insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
             }
@@ -523,17 +522,17 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersVo.getInsOrdersRiskList().forEach(riskInfo -> {
                 insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
                 insOrdersVo.setCiRiskInfoVo(getRiskInfoVo(riskInfo));
-                if (StringUtils.equals(riskInfo.getRiskCode(),"0507")){
+                if (StringUtils.equals(riskInfo.getRiskCode(), "0507")) {
                     List<KindInfoVo> kindInfoVos = insOrdersVo.getKindInfoVo();
                     InsOrdersCosts insOrdersCosts = insOrdersVo.getInsOrdersCosts();
                     KindInfoVo jqKind = new KindInfoVo();
                     jqKind.setKindCode("J1");
                     jqKind.setKindName("交强险");
-                    if(Objects.nonNull(insOrdersCosts.getJqPremium())){
+                    if (Objects.nonNull(insOrdersCosts.getJqPremium())) {
                         jqKind.setPremium(insOrdersCosts.getJqPremium().toString());
                     }
                     kindInfoVos.add(jqKind);
-                }else {
+                } else {
                     insOrdersVo.setBiRiskInfoVo(getRiskInfoVo(riskInfo));
                 }
             });
@@ -690,10 +689,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 .equals(quoteVo.getOwnersInfo().getIdentifyNumber())
                 ? ownerAddress
                 : quoteVo.getPolicyHolderInfo().getIdentifyNumber().equals(quoteVo.getInsuredPersonInfo().getIdentifyNumber())
-                ? insuredAddress
-                : orgClient.queryByAddress(quoteVo.getPolicyHolderInfo().getAddr(), quoteVo.getPolicyHolderInfo().getIdentifyNumber());
+                  ? insuredAddress
+                  : orgClient.queryByAddress(quoteVo.getPolicyHolderInfo().getAddr(), quoteVo.getPolicyHolderInfo().getIdentifyNumber());
 
-        if (null != ownerAddress.getData()){
+        if (null != ownerAddress.getData()) {
             quoteVo.getOwnersInfo().setProvinceCode(ownerAddress.getData().getProvinceCode());
             quoteVo.getOwnersInfo().setProvince(ownerAddress.getData().getProvinceName());
             quoteVo.getOwnersInfo().setCityCode(ownerAddress.getData().getCityCode());
@@ -719,38 +718,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
     }
 
-    /**
-     * 将日期字符串解析为LocalDateTime对象
-     * 支持多种日期格式:
-     * - ISO格式:yyyy-MM-ddTHH:mm:ss+08:00(含时区)
-     * - 完整格式:yyyy-MM-dd HH:mm:ss
-     * - 简短格式:yyyy-MM-dd(自动补充时间为00:00:00)
-     *
-     * @param dateStr 日期字符串,可以为null或空字符串
-     * @return 解析后的LocalDateTime对象,如果输入为空则返回null
-     */
-    private LocalDateTime parseDate(String dateStr) {
-        if (StrUtil.isEmpty(dateStr)) {
-            return null;
-        }
-
-        // 处理仅包含日期的字符串(长度为10),补充默认时间
-        if (dateStr.length() == 10) {
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            return LocalDateTime.parse(dateStr + " 00:00:00", formatter);
-        }
-
-        // 如果包含T或时区信息,使用ISO格式解析
-        if (dateStr.contains("T") || dateStr.contains("+") || dateStr.contains("Z")) {
-            return ZonedDateTime.parse(dateStr, DateTimeFormatter.ISO_OFFSET_DATE_TIME).toLocalDateTime();
-        }
-
-        // 使用标准格式解析
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        return LocalDateTime.parse(dateStr, formatter);
-    }
-
-
     @Override
     public void orderAfterUpdateQuote(String ordersNo, QuoteResultsVo quoteResponse) {
 
@@ -779,12 +746,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             if (Objects.nonNull(insOrdersRiskList) && !insOrdersRiskList.isEmpty()) {
                 for (InsOrdersRisk insOrdersRisk : insOrdersRiskList) {
                     if (insOrdersRisk.getRiskCode().equals(InsuranceRisk.TRAFFIC.getCode())) {
-                        insOrdersRisk.setStartDate(parseDate(quoteResponse.getCiRiskInfoVo().getStartDate()));
-                        insOrdersRisk.setEndDate(parseDate(quoteResponse.getCiRiskInfoVo().getEndDate()));
+                        insOrdersRisk.setStartDate(DateTimeUtil.parseDate(quoteResponse.getCiRiskInfoVo().getStartDate()));
+                        insOrdersRisk.setEndDate(DateTimeUtil.parseDate(quoteResponse.getCiRiskInfoVo().getEndDate()));
                     }
                     if (insOrdersRisk.getRiskCode().equals(InsuranceRisk.BUSINESS.getCode())) {
-                        insOrdersRisk.setStartDate(parseDate(quoteResponse.getBiRiskInfoVo().getStartDate()));
-                        insOrdersRisk.setEndDate(parseDate(quoteResponse.getBiRiskInfoVo().getEndDate()));
+                        insOrdersRisk.setStartDate(DateTimeUtil.parseDate(quoteResponse.getBiRiskInfoVo().getStartDate()));
+                        insOrdersRisk.setEndDate(DateTimeUtil.parseDate(quoteResponse.getBiRiskInfoVo().getEndDate()));
                     }
                 }
             }
@@ -797,7 +764,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 ordersCosts = new InsOrdersCosts();
                 ordersCosts.setOrderNo(ordersNo);
             }
-            if (BeanUtil.isNotEmpty(quoteResponse) && BeanUtil.isNotEmpty(quoteResponse.getCosts())){
+            if (BeanUtil.isNotEmpty(quoteResponse) && BeanUtil.isNotEmpty(quoteResponse.getCosts())) {
                 BigDecimal ciPremium = quoteResponse.getCosts().getCiPremium() == null ? new BigDecimal("0.00") : new BigDecimal(quoteResponse.getCosts().getCiPremium());
                 BigDecimal biPremium = quoteResponse.getCosts().getBiPremium() == null ? new BigDecimal("0.00") : new BigDecimal(quoteResponse.getCosts().getBiPremium());
                 BigDecimal niPremium = quoteResponse.getCosts().getNiPremium() == null ? new BigDecimal("0.00") : new BigDecimal(quoteResponse.getCosts().getNiPremium());
@@ -807,7 +774,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 ordersCosts.setJyPremium(niPremium);
                 ordersCosts.setTaxPremium(vvTax);
                 ordersCosts.setSumPremium(ciPremium.add(biPremium).add(niPremium).add(vvTax));
-            }else{
+            } else {
                 BigDecimal bigDecimal = new BigDecimal("0.00");
                 ordersCosts.setJqPremium(bigDecimal);
                 ordersCosts.setSyPremium(bigDecimal);
@@ -1214,14 +1181,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoHttpResult.getData();
         // modify by lipf, 为了支持能查询成员下面所有业务员的数据添加jzgInfoId这个字段 2026年4月28日11:54:43
         String jzgInfoId = null;
-        if(sysUserJzgInfo != null){
+        if (sysUserJzgInfo != null) {
             jzgInfoId = sysUserJzgInfo.getId();
             insOrdersParam.setJzgInfoId(jzgInfoId);
         }
         Page<OrderListVo> orderListVoPage = insOrdersMapper.queryOrderList(insOrdersParam.getPage(), insOrdersParam);
         // modify by lipf, 2026年4月29日11:06:02 解决业务员类型缺失的问题
         List<OrderListVo> records = orderListVoPage.getRecords();
-        if(CollUtil.isNotEmpty(records)){
+        if (CollUtil.isNotEmpty(records)) {
             Map<String, String> attrTypeMap = orgClient.queryAllTypeAttrMap();
             List<OrderListVo> list = records.stream().peek(action -> {
                 String jzgInfoId1 = action.getJzgInfoId();
@@ -1231,14 +1198,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             }).toList();
             orderListVoPage.setRecords(list);
         }
-        if (StringUtils.equals("1",insOrdersParam.getIsLargeOrder())){
+        if (StringUtils.equals("1", insOrdersParam.getIsLargeOrder())) {
             processMainOrder(orderListVoPage);
         }
         return orderListVoPage;
     }
 
 
-    public void processMainOrder(Page<OrderListVo> orderListVoPage){
+    public void processMainOrder(Page<OrderListVo> orderListVoPage) {
         List<OrderListVo> orderList = orderListVoPage.getRecords();
         if (CollUtil.isEmpty(orderList)) {
             return;
@@ -1279,7 +1246,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
 
-    public Map<String, List<OrderQuotationCompany>> orderCount(Map<String, List<OrderQuotationCompany>> orderMaps){
+    public Map<String, List<OrderQuotationCompany>> orderCount(Map<String, List<OrderQuotationCompany>> orderMaps) {
         Map<String, List<OrderQuotationCompany>> data = new HashMap<>();
         for (int code = 1; code <= 7; code++) {
             switch (code) {
@@ -1289,27 +1256,27 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                     break;
                 case 2:
                     // 核保中
-                    data.put("2",orderMaps.get("2"));
+                    data.put("2", orderMaps.get("2"));
                     break;
                 case 3:
                     // 未报价
-                    data.put("3",null);
+                    data.put("3", null);
                     break;
                 case 4:
                     // 待缴费
-                    data.put("4",orderMaps.get("4"));
+                    data.put("4", orderMaps.get("4"));
                     break;
                 case 5:
                     // 已承保
-                    data.put("5",orderMaps.get("5"));
+                    data.put("5", orderMaps.get("5"));
                     break;
                 case 6:
                     // 报价失败
-                    data.put("6",orderMaps.get("6"));
+                    data.put("6", orderMaps.get("6"));
                     break;
                 case 7:
                     // 核保失败
-                    data.put("7",orderMaps.get("7"));
+                    data.put("7", orderMaps.get("7"));
                     break;
             }
         }
@@ -1320,7 +1287,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     @Override
     public QuoteEchoVo getOrderDetail(String ordersNo) {
-        log.info("获取订单详情.ordersNo=[{}]",ordersNo);
+        log.info("获取订单详情.ordersNo=[{}]", ordersNo);
         InsOrdersVo insOrdersVo = selectById(Long.parseLong(ordersNo));
         log.info("根据orderNo=[{}]查询到的订单明细[{}]", ordersNo, JSONUtil.toJsonStr(insOrdersVo));
         AssertionUtils.isFail(Objects.isNull(insOrdersVo), "订单不存在");
@@ -1328,7 +1295,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         //获取保司信息
         String companyId = insOrdersVo.getInsOrders().getCompanyId();
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findLogoById(companyId);
-        log.info("根据保司id=[{}]获取到的保司信息如下:[{}]",companyId, JSONUtil.toJsonStr(esmInsCompanyHttpResult));
+        log.info("根据保司id=[{}]获取到的保司信息如下:[{}]", companyId, JSONUtil.toJsonStr(esmInsCompanyHttpResult));
         if (esmInsCompanyHttpResult.getCode() == 200) {
             resultVo.setInsCompanyVo(esmInsCompanyHttpResult.getData());
         }
@@ -1394,7 +1361,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         //权益信息
         InsOrderRightsInfoVo insOrderRightsInfoVo = insOrderRightsInfoService.queryByOrderNo(ordersNo);
         resultVo.setInsOrderRightsInfoVo(insOrderRightsInfoVo);
-        log.info("根据订单ordersNo=[{}]获取到订单的详细信息resultVo=[{}]",ordersNo, JSONUtil.toJsonStr(resultVo));
+        log.info("根据订单ordersNo=[{}]获取到订单的详细信息resultVo=[{}]", ordersNo, JSONUtil.toJsonStr(resultVo));
         return resultVo;
     }
 
@@ -1554,22 +1521,22 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         String yesterday = DateTimeUtils.getYesterday();
 
         // 获取今日、昨日保费
-        DataValueBo premium = StatisticsUtil.processStatData(today, yesterday, userId,  systemCode,  this.baseMapper::getPremiumStatistics);
+        DataValueBo premium = StatisticsUtil.processStatData(today, yesterday, userId, systemCode, this.baseMapper::getPremiumStatistics);
         dailyDataVo.setPremium(premium.getTodayData());
         dailyDataVo.setPremiumChange(premium.getGrowthRate());
 
         // 获取今日、昨日订单数
-        DataValueBo orderQuantity = StatisticsUtil.processStatData(today, yesterday, userId,  systemCode, this.baseMapper::getOrderQuantity);
+        DataValueBo orderQuantity = StatisticsUtil.processStatData(today, yesterday, userId, systemCode, this.baseMapper::getOrderQuantity);
         dailyDataVo.setOrderQuantity(orderQuantity.getTodayData());
         dailyDataVo.setOrderQuantityChange(orderQuantity.getGrowthRate());
 
         // 获取今日、昨日出单业务员
-        DataValueBo insuranceIssuersCount = StatisticsUtil.processStatData(today, yesterday, userId,  systemCode, this.baseMapper::getOrderQuantity);
+        DataValueBo insuranceIssuersCount = StatisticsUtil.processStatData(today, yesterday, userId, systemCode, this.baseMapper::getOrderQuantity);
         dailyDataVo.setInsuranceIssuersCount(insuranceIssuersCount.getTodayData());
         dailyDataVo.setInsuranceIssuersCountChange(insuranceIssuersCount.getGrowthRate());
 
         // 获取今日、昨日报价次数
-        DataValueBo quoteCount = StatisticsUtil.processStatData(today, yesterday, userId,  systemCode, this.baseMapper::getQuoteCount);
+        DataValueBo quoteCount = StatisticsUtil.processStatData(today, yesterday, userId, systemCode, this.baseMapper::getQuoteCount);
         dailyDataVo.setQuoteCount(quoteCount.getTodayData());
         dailyDataVo.setQuoteCountChange(quoteCount.getTodayData());
 
@@ -1578,7 +1545,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     @Override
     public BusinessTypeDistributionVo getBusinessTypeDistribution(String userId, String systemCode) {
-        BusinessTypeDistributionVo premiumRatio = this.baseMapper.getPremiumRatio(userId,  systemCode);
+        BusinessTypeDistributionVo premiumRatio = this.baseMapper.getPremiumRatio(userId, systemCode);
         if (ObjectUtil.isEmpty(premiumRatio)) {
             return new BusinessTypeDistributionVo("0", "0", "0");
         }
@@ -1592,7 +1559,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     @Override
     public List<OrderTrendVo> getOrderTrend(String userId, String systemCode) {
-        List<OrderTrendVo> orderTrend = this.baseMapper.getOrderTrend(userId,  systemCode);
+        List<OrderTrendVo> orderTrend = this.baseMapper.getOrderTrend(userId, systemCode);
         Map<String, OrderTrendVo> orderTrendVoMap = orderTrend.stream().collect(Collectors.toMap(OrderTrendVo::getMonth, x -> x));
         List<OrderTrendVo> list = new ArrayList<>();
         for (int i = 1; i <= 12; i++) {
@@ -1610,16 +1577,16 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public List<BusinessDistributionVo> getBusinessDistribution(String province, String userId, String systemCode) {
         log.info("查询地区:province=[{}],userId=[{}],systemCode=[{}]", province, userId, systemCode);
         if (!StringUtils.hasText(province)) {
-            return this.baseMapper.getCityBusinessDistribution( userId,  systemCode);
+            return this.baseMapper.getCityBusinessDistribution(userId, systemCode);
         }
-        return this.baseMapper.getProvinceBusinessDistribution(province, userId,  systemCode);
+        return this.baseMapper.getProvinceBusinessDistribution(province, userId, systemCode);
     }
 
     @Override
     public String exportDynamicFields(InsOrdersParamVO insOrdersParam) {
         log.info("导出订单列表。支持动态选择要导出的字段:导出车险订单=[{}]", JSONUtil.toJsonStr(insOrdersParam));
         List<OrderListVo> orderListVos = insOrdersMapper.queryOrderListAll(insOrdersParam);
-        log.info("导出订单列表,导出[{}]条记录",CollUtil.size(orderListVos));
+        log.info("导出订单列表,导出[{}]条记录", CollUtil.size(orderListVos));
         // 动态设置要导出的字段
         String exportDynamicFields = insOrdersParam.getExportDynamicFields();
         Set<String> exportFields = new LinkedHashSet<>(Arrays.asList(exportDynamicFields.split(";")));
@@ -1653,10 +1620,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public void insertActivityCompleteInRule(SysUserActivityCompleteInRule record) {
         insOrdersMapper.insertActivityCompleteInRule(record);
     }
+
     @Override
-    public String queryCustomerPhone(String insOrderNo){
+    public String queryCustomerPhone(String insOrderNo) {
         return insOrdersMapper.queryCustomerPhone(insOrderNo);
     }
+
     @Override
     public Double queryTotalFee(String insOrderNo) {
         return insOrdersMapper.queryTotalFee(insOrderNo);