瀏覽代碼

update:
1.大家财险影像上传加密算法
2.大家财险影像上传流程

wks 1 年之前
父節點
當前提交
da87e8419c
共有 13 個文件被更改,包括 158 次插入87 次删除
  1. 4 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/config/WebClientConfig.java
  2. 15 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/base/OrderBase.java
  3. 8 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/image/InsuranceImageVo.java
  4. 21 21
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  5. 1 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java
  6. 1 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerUploadRequest.java
  7. 1 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerOrderServiceImpl.java
  8. 9 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  9. 51 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/ImagesEncrypt.java
  10. 3 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java
  11. 34 16
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/decorator/image/ImageParamHandlerDecorator.java
  12. 6 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/QuoteImageRuleMappingService.java
  13. 4 36
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/QuoteImageRuleMappingServiceImpl.java

+ 4 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/config/WebClientConfig.java

@@ -11,6 +11,7 @@ import org.springframework.http.MediaType;
 import org.springframework.http.client.reactive.ReactorClientHttpConnector;
 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
 import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.DefaultUriBuilderFactory;
 import reactor.core.publisher.Mono;
 import reactor.netty.http.client.HttpClient;
 import reactor.netty.resources.ConnectionProvider;
@@ -58,8 +59,11 @@ public class WebClientConfig {
                                 .addHandlerLast(new ReadTimeoutHandler(READ_TIMEOUT))
                                 .addHandlerLast(new WriteTimeoutHandler(WRITE_TIMEOUT)));
         // 构建WebClient实例
+        DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();
+        factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
         return WebClient
                 .builder()
+                .uriBuilderFactory(factory)
                 .clientConnector(new ReactorClientHttpConnector(httpClient))
                 .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                 .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)

+ 15 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/base/OrderBase.java

@@ -1,7 +1,9 @@
 package com.jzg.quotation.commons.entity.vo.base;
 
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
+import com.jzg.commons.exception.SystemException;
 import lombok.Data;
+import org.springframework.util.StringUtils;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -63,4 +65,17 @@ public class OrderBase implements Serializable {
      * 协议id 或 账号id
      */
     private String agreementId;
+
+    /**
+     * 获取保险公司编码
+     */
+    public String fetchCompanyCode() {
+        if(!StringUtils.hasLength(this.insuranceCompanyCode)) {
+            throw new SystemException("保险公司编码不能为空");
+        }
+        // 使用正则表达式匹配字符串开头的英文字符部分
+        String regex = "^[A-Z]+";
+        return this.insuranceCompanyCode.matches(regex) ? this.insuranceCompanyCode : this.insuranceCompanyCode.replaceAll("(?i).*?([A-Z]+).*", "$1");
+    }
+
 }

+ 8 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/vo/image/InsuranceImageVo.java

@@ -28,7 +28,14 @@ public class InsuranceImageVo {
      * 影像类型名称
      */
     private String imageType;
-
+    /**
+     * 保司影像类型
+     */
+    private String insuranceImageCode;
+    /**
+     * 保司影像名称
+     */
+    private String insuranceImageType;
     /**
      * 影像base64 影像类型
      */

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

@@ -1,8 +1,8 @@
 package com.jzg.quotation.dajia.crawler.component;
 
 
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
@@ -24,10 +24,10 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
 
-import java.util.Base64;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 @Slf4j
@@ -35,6 +35,9 @@ import java.util.UUID;
 @RequiredArgsConstructor
 public class DaJiaCrawlerRequestComponent {
 
+    // 循环次数
+    public static final int CIRCULATE_NUMBER = 3;
+
     private final WebClient webClient;
 
     private final RequestComponent requestComponent;
@@ -43,10 +46,6 @@ public class DaJiaCrawlerRequestComponent {
 
     private final DaJiaCrawlerProperties daJiaCrawlerProperties;
 
-    // 循环次数
-    public static final int CIRCULATE_NUMBER = 3;
-
-
     public int processCaptcha(String res) {
         // 检查字符串长度是否足够,并且第三个字符不是'='
         if (res.length() >= 3 && res.charAt(2) != '=') {
@@ -298,26 +297,26 @@ public class DaJiaCrawlerRequestComponent {
     /**
      * 上传图片
      *
-     * @param url       上传文件的路劲
-     * @param base64Str 影像base64字符串
+     * @param url 上传文件的路劲
      * @return 上传图片返回
      */
-    public DaJiaCrawlerUploadRequest.FileListDTO uploadFile(String url, String base64Str) {
+    public DaJiaCrawlerUploadRequest.FileListDTO uploadFile(String url, byte[] imageByte, String contentMD5) {
         HttpHeaders headers = new HttpHeaders();
+        headers.set("Content-MD5", contentMD5);
         headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
-        byte[] fileData = Base64.getDecoder().decode(base64Str);
-        return webClient.put()
+        ResponseEntity<String> block = webClient.put()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(headers))
-                .body(BodyInserters.fromValue(fileData))
-                .exchangeToMono(response -> {
-                    String obsRequestId = response.headers().header("x-obs-request-id").stream().findFirst().orElse("");
-                    DaJiaCrawlerUploadRequest.FileListDTO fileListDTO = new DaJiaCrawlerUploadRequest.FileListDTO();
-                    fileListDTO.setObsRequestId(obsRequestId);
-                    fileListDTO.setOperateResult(1);
-                    return Mono.just(fileListDTO);
-                })
+                .body(BodyInserters.fromValue(imageByte))
+                .retrieve()
+                .toEntity(String.class)
                 .block();
+        HttpHeaders headers1 = block.getHeaders();
+        String obsRequestId = headers1.getFirst("x-obs-request-id");
+        DaJiaCrawlerUploadRequest.FileListDTO fileListDTO = new DaJiaCrawlerUploadRequest.FileListDTO();
+        fileListDTO.setObsRequestId(obsRequestId);
+        fileListDTO.setOperateResult(1);
+        return fileListDTO;
     }
 
     /**
@@ -328,7 +327,8 @@ public class DaJiaCrawlerRequestComponent {
      * @return 上传响应
      */
     public DaJiaCrawlerUploadResponse upload(DaJiaCrawlerUploadRequest request, HttpHeaders headers) {
-        return requestUnencrypted(RequestUrl.UPLOAD, request, DaJiaCrawlerUploadResponse.class, headers);
+        String s = requestUnencrypted(RequestUrl.UPLOAD, request, String.class, headers);
+        return JSON.parseObject(s, DaJiaCrawlerUploadResponse.class);
     }
 
     /**

+ 1 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java

@@ -28,7 +28,7 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     SAVE("/api_vhl_prod/api/save", "保存订单"),
     INIT_DATA("/api_vhl_prod/imp/web/page/init_data", "初始化数据"),
     //上传影像
-    UPLOAD_SIGNS("/api_vhl_prod/imp/web/file/upload_signs", "上传标志"),
+    UPLOAD_SIGNS("/api_vhl_prod/imp/web/obs/upload_signs", "上传标志"),
     UPLOAD("/api_vhl_prod/imp/web/file/upload", "上传"),
     // 提交核保
     GENERATE("/api_vhl_prod/api/generate", "生成订单(核保)"),

+ 1 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerUploadRequest.java

@@ -60,7 +60,7 @@ public class DaJiaCrawlerUploadRequest {
                 busiInfoListDTOS.add(new BusiInfoListDTO(ciBussNo, "交强险投保单号", "proNoE"));
             }
             if (StringUtils.hasLength(biBussNo)) {
-                busiInfoListDTOS.add(new BusiInfoListDTO(ciBussNo, "商业险投保单号", "proNoB"));
+                busiInfoListDTOS.add(new BusiInfoListDTO(biBussNo, "商业险投保单号", "proNoB"));
             }
             return busiInfoListDTOS;
         }

+ 1 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerOrderServiceImpl.java

@@ -33,6 +33,7 @@ public class DaJiaCrawlerOrderServiceImpl implements DaJiaCrawlerOrderService {
                 .map(BusinessInsuranceDTO::getProductInfo)
                 .map(BusinessInsuranceDTO.ProductInfoDTO::getProposalNo)
                 .ifPresent(daJiaCrawlerOrder::setBiPolicyNumber);
+        daJiaCrawlerOrder.setBusinessNo(businessNo);
         daJiaCrawlerOrderRepository.save(daJiaCrawlerOrder);
     }
 

+ 9 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -21,6 +21,7 @@ import com.jzg.quotation.dajia.crawler.entity.response.*;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerOrderService;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerRequest;
+import com.jzg.quotation.dajia.crawler.utils.ImagesEncrypt;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
@@ -122,21 +123,23 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(insuranceUploadImageVo.getOrder()
                 .getOrdersNo());
+        daJiaCrawlerOrder.setBusinessNo("8320019542025135459");
 
         List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
         imageVoList.forEach(imageVo -> {
             // 上传文件标志
-            DaJiaCrawlerUploadSignsRequest daJiaCrawlerUploadSignsRequest = new DaJiaCrawlerUploadSignsRequest(daJiaCrawlerOrder.getBusinessNo(), imageVo.getImageCode(), imageVo.getImageBase64List());
+            DaJiaCrawlerUploadSignsRequest daJiaCrawlerUploadSignsRequest = new DaJiaCrawlerUploadSignsRequest(daJiaCrawlerOrder.getBusinessNo(), imageVo.getInsuranceImageCode(), imageVo.getImageBase64List());
             DaJiaCrawlerUploadSignsResponse daJiaCrawlerUploadSignsResponse = daJiaCrawlerRequestComponent.uploadSigns(daJiaCrawlerUploadSignsRequest, headers);
             Map<String, DaJiaCrawlerUploadSignsResponse.DataDTO> dataDTOMap = daJiaCrawlerUploadSignsResponse.getData()
                     .stream()
                     .collect(Collectors.toMap(DaJiaCrawlerUploadSignsResponse.DataDTO::getFileName, x -> x));
 
-            DaJiaCrawlerUploadRequest daJiaCrawlerUploadRequest = new DaJiaCrawlerUploadRequest(daJiaCrawlerOrder.getBusinessNo(), imageVo.getImageCode(), userCode, daJiaCrawlerOrder.getCiPolicyNumber(), daJiaCrawlerOrder.getBiPolicyNumber());
+            DaJiaCrawlerUploadRequest daJiaCrawlerUploadRequest = new DaJiaCrawlerUploadRequest(daJiaCrawlerOrder.getBusinessNo(), imageVo.getInsuranceImageCode(), userCode, daJiaCrawlerOrder.getCiPolicyNumber(), daJiaCrawlerOrder.getBiPolicyNumber());
             // 上传文件
             imageVo.getImageBase64List().forEach(imageBase64 -> {
+                String contentMD5 = ImagesEncrypt.encrypt(imageBase64.getImageBase64Str());
                 DaJiaCrawlerUploadSignsResponse.DataDTO dataDTO = dataDTOMap.get(imageBase64.getImageName());
-                DaJiaCrawlerUploadRequest.FileListDTO fileListDTO = daJiaCrawlerRequestComponent.uploadFile(dataDTO.getFileURL(), imageBase64.getImageBase64Str());
+                DaJiaCrawlerUploadRequest.FileListDTO fileListDTO = daJiaCrawlerRequestComponent.uploadFile(dataDTO.getFileURL(), imageBase64.getImageByte(), contentMD5);
                 fileListDTO.setName(dataDTO.getFileName());
                 fileListDTO.setPath(dataDTO.getFilePath());
                 fileListDTO.setSize(Integer.valueOf(imageBase64.getImageSize()));
@@ -148,6 +151,9 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     }
 
+
+
+
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo orderBase) {
         AttributionInformationVo attributionInformationVo = orderBase.getOrder().getAttributionInformationVo();

+ 51 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/ImagesEncrypt.java

@@ -17,6 +17,13 @@ public final class ImagesEncrypt {
 
     public static final MD5 MD5;
 
+    private static final char[] BASE64_ENCODE_CHAR = {
+            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
+            'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
+            'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
+            'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
+    };
+
     static {
         MD5 = new MD5();
     }
@@ -28,9 +35,51 @@ public final class ImagesEncrypt {
      * @return
      */
     public static String encrypt(String base64String) {
-        byte[] decodedBytes = Base64.getDecoder().decode(base64String);
+        byte[] decodedBytes = getByteArray(base64String);
         byte[] md5Bytes = MD5.digest(decodedBytes);
-        return Base64.getEncoder().encodeToString(md5Bytes);
+        return base64(md5Bytes);
+    }
+
+    private static String base64(byte[] data) {
+        StringBuilder result = new StringBuilder();
+        for (int i = 0; i < data.length - 2; i += 3) {
+            int e = data[i] & 0xFF;
+            int t = data[i+1] & 0xFF;
+            int n = data[i+2] & 0xFF;
+            result.append(BASE64_ENCODE_CHAR[e >>> 2])
+                    .append(BASE64_ENCODE_CHAR[(e << 4 | t >>> 4) & 0x3F])
+                    .append(BASE64_ENCODE_CHAR[(t << 2 | n >>> 6) & 0x3F])
+                    .append(BASE64_ENCODE_CHAR[n & 0x3F]);
+        }
+        // 处理剩余字节
+        if (data.length % 3 == 1) {
+            int e = data[data.length-1] & 0xFF;
+            result.append(BASE64_ENCODE_CHAR[e >>> 2])
+                    .append(BASE64_ENCODE_CHAR[(e << 4) & 0x3F])
+                    .append("==");
+        } else if (data.length % 3 == 2) {
+            int e = data[data.length-2] & 0xFF;
+            int t = data[data.length-1] & 0xFF;
+            result.append(BASE64_ENCODE_CHAR[e >>> 2])
+                    .append(BASE64_ENCODE_CHAR[(e << 4 | t >>> 4) & 0x3F])
+                    .append(BASE64_ENCODE_CHAR[(t << 2) & 0x3F])
+                    .append("=");
+        }
+        return result.toString();
+    }
+
+    public static byte[] getByteArray(String base64String) {
+        // 处理URL安全的Base64字符串
+        String base64 = base64String.replace('-', '+').replace('_', '/');
+
+        // 自动补全padding
+        switch (base64.length() % 4) {
+            case 2: base64 += "=="; break;
+            case 3: base64 += "="; break;
+        }
+
+        // 解码为字节数组
+        return Base64.getDecoder().decode(base64);
     }
 
 }

+ 3 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/CompanyFactory.java

@@ -84,6 +84,8 @@ public class CompanyFactory {
 
     private final Map<String, QuotationCrawlerBaseService> quotationCrawlerBaseServiceMap;
 
+    private final QuoteImageRuleMappingService quoteImageRuleMappingService;
+
     private static String extractEnglishChars(String input) {
         // 使用正则表达式匹配字符串开头的英文字符部分
         String regex = "^[A-Z]+";
@@ -208,7 +210,7 @@ public class CompanyFactory {
         insuranceUploadImageVo.setCarInfo(insOrdersVo.getCarInfoVo());
         QuotationBaseService service = getQuotationBase(insuranceUploadImageVo.getOrder()
                 .getApiType(), insuranceUploadImageVo.getOrder().getInsuranceCompanyCode());
-        ImageParamHandlerDecorator imageParamHandlerDecorator = new ImageParamHandlerDecorator(service, minioClient, bucketName, insTaskImagesService);
+        ImageParamHandlerDecorator imageParamHandlerDecorator = new ImageParamHandlerDecorator(service, minioClient, bucketName, insTaskImagesService,quoteImageRuleMappingService);
         service = ImageProxyFactory.createProxy(service,
                 imageParamHandlerDecorator);
         return service;

+ 34 - 16
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/factory/decorator/image/ImageParamHandlerDecorator.java

@@ -5,7 +5,9 @@ import com.jzg.commons.entity.vo.InsTaskImagesVo;
 import com.jzg.quotation.commons.entity.vo.aggregated.InsuranceUploadImageVo;
 import com.jzg.quotation.commons.entity.vo.image.InsuranceImageVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
+import com.jzg.quotation.summary.entity.po.QuoteImageRuleMapping;
 import com.jzg.quotation.summary.service.InsTaskImagesService;
+import com.jzg.quotation.summary.service.QuoteImageRuleMappingService;
 import io.minio.GetObjectArgs;
 import io.minio.MinioClient;
 
@@ -22,18 +24,19 @@ public class ImageParamHandlerDecorator {
     private QuotationBaseService target;
 
     private final MinioClient minioClient;
+
     private final String bucketName;
 
     private final InsTaskImagesService insTaskImagesService;
 
-    public ImageParamHandlerDecorator(QuotationBaseService target,
-                                      MinioClient minioClient,
-                                      String bucketName,
-                                      InsTaskImagesService insTaskImagesService) {
+    private final QuoteImageRuleMappingService quoteImageRuleMappingService;
+
+    public ImageParamHandlerDecorator(QuotationBaseService target, MinioClient minioClient, String bucketName, InsTaskImagesService insTaskImagesService, QuoteImageRuleMappingService quoteImageRuleMappingService) {
         this.target = target;
         this.minioClient = minioClient;
         this.bucketName = bucketName;
         this.insTaskImagesService = insTaskImagesService;
+        this.quoteImageRuleMappingService = quoteImageRuleMappingService;
     }
 
     public void setTarget(QuotationBaseService target) {
@@ -42,20 +45,30 @@ public class ImageParamHandlerDecorator {
 
     /**
      * 上传影像
+     *
      * @param uploadImageVo
      */
-    public void uploadImage(InsuranceUploadImageVo uploadImageVo){
+    public void uploadImage(InsuranceUploadImageVo uploadImageVo) {
 
-        if(Objects.isNull(uploadImageVo.getImageVoList())){
+        if (Objects.isNull(uploadImageVo.getImageVoList())) {
             uploadImageVo.setImageVoList(new ArrayList<>());
         }
 
         InsTaskImagesVo insTaskImagesVo = insTaskImagesService.selectByQuoteNo(uploadImageVo.getOrder().getQuoteNo());
         List<ImagesVo> images = insTaskImagesVo.getImages();
-        Map<String, List<ImagesVo>> groupImages = images.stream().collect(Collectors.groupingBy(ImagesVo::getImageType));
+        Map<String, List<ImagesVo>> groupImages = images.stream()
+                .collect(Collectors.groupingBy(ImagesVo::getImageType));
+
+        Map<String, QuoteImageRuleMapping> quoteImageRuleMappingMap = quoteImageRuleMappingService.getQuoteImageRuleMapping(uploadImageVo.getOrder()
+                .fetchCompanyCode());
 
-        groupImages.forEach((imageType,ImageList)->{
+        groupImages.forEach((imageType, ImageList) -> {
             InsuranceImageVo vo = new InsuranceImageVo();
+            QuoteImageRuleMapping quoteImageRuleMapping = quoteImageRuleMappingMap.get(imageType);
+            Optional.ofNullable(quoteImageRuleMapping).ifPresent(quoteImageRuleMappingVo -> {
+                vo.setInsuranceImageCode(quoteImageRuleMappingVo.getInsuranceImageCode());
+                vo.setInsuranceImageType(quoteImageRuleMappingVo.getInsuranceImageType());
+            });
             vo.setImageCode(imageType);
             List<InsuranceImageVo.ImageDTO> imageDTOList = ImageList.stream().map(imageVo -> {
                 InsuranceImageVo.ImageDTO imageDTO = new InsuranceImageVo.ImageDTO();
@@ -64,6 +77,7 @@ public class ImageParamHandlerDecorator {
                 byte[] fileToByte = getFileToByte(minioClient, bucketName, imageVo.getFileName());
                 imageDTO.setImageBase64Str(Base64.getEncoder().encodeToString(fileToByte));
                 imageDTO.setImageByte(fileToByte);
+                imageDTO.setImageSize(String.valueOf(fileToByte.length));
                 return imageDTO;
             }).collect(Collectors.toList());
             vo.setImageBase64List(imageDTOList);
@@ -82,15 +96,17 @@ public class ImageParamHandlerDecorator {
 
     /**
      * 获取文件base64
+     *
      * @param minioClient
      * @param bucketName
      * @param imageId
      * @return
      */
-    public String getFileBase64(MinioClient minioClient,String bucketName,String imageName){
-        try (InputStream stream = minioClient.getObject(
-                GetObjectArgs.builder().bucket(bucketName).object(imageName).build());
-             ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+    public String getFileBase64(MinioClient minioClient, String bucketName, String imageName) {
+        try (InputStream stream = minioClient.getObject(GetObjectArgs.builder()
+                .bucket(bucketName)
+                .object(imageName)
+                .build()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
 
             // 读取流数据
             byte[] buffer = new byte[4096];
@@ -111,14 +127,16 @@ public class ImageParamHandlerDecorator {
 
     /**
      * 获取文件bytes数组
+     *
      * @param minioClient
      * @param bucketName
      * @return
      */
-    public byte[] getFileToByte(MinioClient minioClient,String bucketName,String imageName){
-        try (InputStream stream = minioClient.getObject(
-                GetObjectArgs.builder().bucket(bucketName).object(imageName).build());
-             ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+    public byte[] getFileToByte(MinioClient minioClient, String bucketName, String imageName) {
+        try (InputStream stream = minioClient.getObject(GetObjectArgs.builder()
+                .bucket(bucketName)
+                .object(imageName)
+                .build()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
             // 读取流数据
             byte[] buffer = new byte[4096];
             int bytesRead;

+ 6 - 5
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/QuoteImageRuleMappingService.java

@@ -16,10 +16,11 @@ import java.util.Map;
 public interface QuoteImageRuleMappingService extends IService<QuoteImageRuleMapping> {
 
     /**
-     * 通过保险公司编码获取映射关系 构造InsuranceUploadImageVo对象
-     *
-     * @param insuranceCode 保险公司编码
-     * @return InsuranceUploadImageVo
+     * 获取影像映射
+     * @param insuranceCompanyCode 保险公司编码
+     * @return 掌柜影像编码映射保司影像编码
      */
-    List<InsuranceImageVo> buildInsuranceUploadImageVo(String insuranceCode, Map<String, ImageVo> imageVoMap);
+    Map<String, QuoteImageRuleMapping> getQuoteImageRuleMapping(String insuranceCompanyCode);
+
+
 }

+ 4 - 36
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/QuoteImageRuleMappingServiceImpl.java

@@ -1,17 +1,13 @@
 package com.jzg.quotation.summary.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jzg.quotation.commons.entity.vo.image.ImageVo;
-import com.jzg.quotation.commons.entity.vo.image.InsuranceImageVo;
 import com.jzg.quotation.summary.entity.po.QuoteImageRuleMapping;
 import com.jzg.quotation.summary.mapper.QuoteImageRuleMappingMapper;
 import com.jzg.quotation.summary.service.QuoteImageRuleMappingService;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 
 /**
@@ -24,39 +20,11 @@ public class QuoteImageRuleMappingServiceImpl extends ServiceImpl<QuoteImageRule
 
 
     @Override
-    public List<InsuranceImageVo> buildInsuranceUploadImageVo(String insuranceCode, Map<String, ImageVo> imageVoMap) {
-        return lambdaQuery()
-                .eq(QuoteImageRuleMapping::getInsuranceCompanyCode, insuranceCode)
+    public Map<String, QuoteImageRuleMapping> getQuoteImageRuleMapping(String insuranceCompanyCode) {
+        return lambdaQuery().eq(QuoteImageRuleMapping::getInsuranceCompanyCode, insuranceCompanyCode)
                 .list()
                 .stream()
-                .collect(Collectors.groupingBy(QuoteImageRuleMapping::getInsuranceImageCode, Collectors.collectingAndThen(Collectors.toList(), mappings -> buildImageVo(mappings, imageVoMap))))
-                .values()
-                .stream()
-                .filter(Objects::nonNull)
-                .toList();
-    }
-
-    private InsuranceImageVo buildImageVo(List<QuoteImageRuleMapping> mappings, Map<String, ImageVo> imageVoMap) {
-        final QuoteImageRuleMapping firstMapping = mappings.get(0);
-
-        List<InsuranceImageVo.ImageDTO> imageList = mappings
-                .stream()
-                .map(QuoteImageRuleMapping::getImageCode)
-                .map(imageVoMap::get)
-                .filter(Objects::nonNull)
-                .map(this::convertToImageDto)
-                .toList();
-
-        return imageList.isEmpty() ? null : new InsuranceImageVo()
-                .setImageCode(firstMapping.getInsuranceImageCode())
-                .setImageType(firstMapping.getInsuranceImageType())
-                .setImageBase64List(imageList);
-    }
-
-    private InsuranceImageVo.ImageDTO convertToImageDto(ImageVo imageVo) {
-        return new InsuranceImageVo.ImageDTO()
-                .setImageName(imageVo.getImageName())
-                .setImageBase64Str(imageVo.getImageBase64Str());
+                .collect(HashMap::new, (map, item) -> map.put(item.getImageCode(), item), HashMap::putAll);
     }
 
 }