Procházet zdrojové kódy

fix 恒邦报价起止日期显示问题

liub před 4 měsíci
rodič
revize
be25f9e9b6

+ 15 - 0
commons/src/main/java/com/jzg/commons/util/MinioUtils.java

@@ -9,6 +9,7 @@ import io.minio.messages.DeleteObject;
 import io.minio.messages.Item;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -195,6 +196,20 @@ public class MinioUtils {
         return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
     }
 
+    /**
+     * 获取base64 文件
+     *
+     * @param bucketName 存储桶
+     * @param objectName 文件名
+     * @return base64字符串
+     */
+    @SneakyThrows(Exception.class)
+    public String getBase64Str(String bucketName, String objectName) {
+        InputStream inputStream = getObject(bucketName, objectName);
+        return Base64Convert.byteToBase64(IOUtils.toByteArray(inputStream));
+    }
+
+
     /**
      * 断点下载
      *

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

@@ -1,6 +1,7 @@
 package com.jzg.quotation.hengbang.crawler.build;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
@@ -10,6 +11,8 @@ import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerProposalResponse;
 
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -37,7 +40,7 @@ public final class HbCrawlerQuoteResultVoBuild {
         //交强险
         quoteResultsVo.setCiRiskInfoVo(buildCiInfo(proposalResponse));
         //商业险
-        quoteResultsVo.setBiRiskInfoVo(buildbiInfo(proposalResponse));
+        quoteResultsVo.setBiRiskInfoVo(buildBiInfo(proposalResponse));
         quoteResultsVo.setKindInfoVo(buildKindInfoList(proposalResponse, quoteVo));
 
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
@@ -45,22 +48,13 @@ public final class HbCrawlerQuoteResultVoBuild {
         JSONArray scoreJson = new JSONArray();
         if (proposalResponse.getForceLiability() != null && proposalResponse.getCarInsureLiabilityList().size() > 0) {
             //光博评分
-            scoreJson.add(new JSONObject()
-                    .fluentPut("scoreName", "交强光博分")
-                    .fluentPut("scoreKey", "score")
-                    .fluentPut("score", proposalResponse.getBusiCarInsureRisk().getBillelr2()));
+            scoreJson.add(new JSONObject().fluentPut("scoreName", "交强光博分").fluentPut("scoreKey", "score").fluentPut("score", proposalResponse.getBusiCarInsureRisk().getBillelr2()));
         } else if (proposalResponse.getForceLiability() != null) {
             //光博评分
-            scoreJson.add(new JSONObject()
-                    .fluentPut("scoreName", "交强光博分")
-                    .fluentPut("scoreKey", "score")
-                    .fluentPut("score", proposalResponse.getForceCarInsureRisk().getBillelr2()));
+            scoreJson.add(new JSONObject().fluentPut("scoreName", "交强光博分").fluentPut("scoreKey", "score").fluentPut("score", proposalResponse.getForceCarInsureRisk().getBillelr2()));
         } else if (proposalResponse.getCarInsureLiabilityList().size() > 0) {
             //光博评分
-            scoreJson.add(new JSONObject()
-                    .fluentPut("scoreName", "交强光博分")
-                    .fluentPut("scoreKey", "score")
-                    .fluentPut("score", proposalResponse.getBusiCarInsureRisk().getBillelr2()));
+            scoreJson.add(new JSONObject().fluentPut("scoreName", "交强光博分").fluentPut("scoreKey", "score").fluentPut("score", proposalResponse.getBusiCarInsureRisk().getBillelr2()));
 
         }
 
@@ -78,20 +72,20 @@ public final class HbCrawlerQuoteResultVoBuild {
         HbCrawlerProposalResponse.ForceCarInsureRiskDTO forceCarInsureRisk = proposalResponse.getForceCarInsureRisk();
         if (Objects.nonNull(forceCarInsureRisk)) {
             ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
-            ciRiskInfoVo.setStartDate(forceCarInsureRisk.getBegintime());
-            ciRiskInfoVo.setEndDate(forceCarInsureRisk.getEndtime());
+            ciRiskInfoVo.setStartDate(parseDate(forceCarInsureRisk.getBegintime()));
+            ciRiskInfoVo.setEndDate(parseDate(forceCarInsureRisk.getEndtime()));
         }
         return ciRiskInfoVo;
 
     }
 
-    public static RiskInfoVo buildbiInfo(HbCrawlerProposalResponse proposalResponse) {
+    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(busiCarInsureRisk.getBegintime());
-            biRiskInfoVo.setEndDate(busiCarInsureRisk.getEndtime());
+            biRiskInfoVo.setStartDate(parseDate(busiCarInsureRisk.getBegintime()));
+            biRiskInfoVo.setEndDate(parseDate(busiCarInsureRisk.getEndtime()));
         }
         return biRiskInfoVo;
     }
@@ -131,4 +125,34 @@ 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;
+    }
 }

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

@@ -14,6 +14,7 @@ import com.jzg.commons.constants.ProductsType;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
 import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
+import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -21,7 +22,10 @@ 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;
@@ -38,9 +42,12 @@ 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.apache.commons.compress.utils.IOUtils;
 import org.springframework.http.HttpHeaders;
 
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -63,6 +70,10 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
 
     private final HengBangCrawlerProperties hbCrawlerProperties;
 
+    private final PlatformClient platformClient;
+
+    private final MinioUtils minioUtils;
+
     /**
      * 登录
      *
@@ -85,7 +96,6 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         //http://192.168.5.250:8080/quote/quote
 
 
-
         // 1.0 获取token的请求头
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
@@ -349,7 +359,13 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
             for (InsuranceImageVo insuranceImageVo : imageVoList) {
                 List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
                 if (CollUtil.isNotEmpty(imageBase64List)) {
-                    fileBuff.add("data:image/jpeg;base64," + imageBase64List.get(0).getImageBase64Str());
+                    InsuranceImageVo.ImageDTO imageDTO = imageBase64List.get(0);
+                    String base64Str = imageDTO.getImageBase64Str();
+                    if (base64Str.startsWith("http")) {
+                        SysUploadFiles uploadFile = platformClient.getUploadFile(imageDTO.getImageId());
+                        base64Str =  minioUtils.getBase64Str(uploadFile.getBucketName(), uploadFile.getFileName());
+                    }
+                    fileBuff.add("data:image/jpeg;base64," + base64Str);
                     if (InsuranceImageEnum.C02.getCode().equals(insuranceImageVo.getImageCode())) {
                         fileType.add("01,06,03,投保业务-旧车-证件");
                         mark3.add("6");