Forráskód Böngészése

恒邦报价核保的提交

dongxin 1 éve
szülő
commit
5d38f84c46

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/InsuranceUploadImageVo.java

@@ -1,5 +1,7 @@
 package com.jzg.commons.entity.quote.vo.aggregated;
 
+import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
+import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
@@ -39,6 +41,11 @@ public class InsuranceUploadImageVo implements Serializable {
      */
     private CarInfoVo carInfo;
 
+    /**
+     * 订单车辆人员信息
+     */
+    private List<InsOrdersCarUserInfo> insOrdersCarUserInfoList;
+
     public InsuranceUploadImageVo(OrderBase order, List<InsuranceImageVo> imageVoList) {
         this.order = order;
         this.imageVoList = imageVoList;

+ 16 - 10
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -10,13 +10,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.core.io.buffer.DataBufferUtils;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.reactive.function.client.WebClientResponseException;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
@@ -241,13 +240,20 @@ public class RequestComponent {
         }
         body = Optional.ofNullable(body).orElse("");
         WebClient webClient = selectWebClient(url);
-        return webClient.post()
-                .uri(url)
-                .headers(setHeaders(headers))
-                .body(BodyInserters.fromValue(body))
-                .retrieve()
-                .toEntity(responseClass)
-                .block();
+        try {
+            return webClient.post()
+                    .uri(url)
+                    .headers(setHeaders(headers))
+                    .body(BodyInserters.fromValue(body))
+                    .retrieve()
+                    .toEntity(responseClass)
+                    .block();
+        }catch (WebClientResponseException e) {
+            // 如果服务端返回非2xx状态码
+            System.err.println("状态码: " + e.getRawStatusCode());
+            System.err.println("响应体: " + e.getResponseBodyAsString());
+            throw e;
+        }
     }
 
     /**

+ 13 - 27
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtil.java

@@ -402,38 +402,24 @@ public class DateUtil {
         return newDateStr;
     }
 
-    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-    private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-    private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
+    private static final DateTimeFormatter INPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    private static final DateTimeFormatter OUTPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
 
     /**
-     * 将 yyyy-MM-dd 转换为 UTC 时间字符串 (带毫秒 + Z)
-     * @param dateStr yyyy-MM-dd 格式字符串
-     * @param hour 小时
-     * @param minute 分钟
-     * @return UTC 时间字符串,例如:2025-08-20T16:00:00.000Z
+     * 将北京时间(yyyy-MM-dd HH:mm:ss)转换为UTC时间(ISO8601格式)
      */
-    public static String toUtc(String dateStr, int hour, int minute) {
-        LocalDate localDate = LocalDate.parse(dateStr, DATE_FORMATTER);
-        LocalDateTime localDateTime = localDate.atTime(hour, minute, 0);
-        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
-        return OUTPUT_FORMATTER.format(instant.atOffset(ZoneOffset.UTC));
-    }
+    public static String toUtcDateTime(String beijingTime) {
+        // 解析输入的北京时间
+        LocalDateTime localDateTime = LocalDateTime.parse(beijingTime, INPUT_FORMAT);
 
-    /** 默认 00:00:00 */
-    public static String toUtc(String dateStr) {
-        return toUtc(dateStr, 0, 0);
-    }
+        // 指定时区为中国北京时间
+        ZonedDateTime beijingZoned = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
 
-    /**
-     * 将 yyyy-MM-dd HH:mm:ss 转换为 UTC 时间字符串 (带毫秒 + Z)
-     * @param datetimeStr yyyy-MM-dd HH:mm:ss 格式字符串
-     * @return UTC 时间字符串,例如:2025-08-20T16:00:00.000Z
-     */
-    public static String toUtcDateTime(String datetimeStr) {
-        LocalDateTime localDateTime = LocalDateTime.parse(datetimeStr, DATETIME_FORMATTER);
-        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
-        return OUTPUT_FORMATTER.format(instant.atOffset(ZoneOffset.UTC));
+        // 转为UTC时区
+        ZonedDateTime utcZoned = beijingZoned.withZoneSameInstant(ZoneId.of("UTC"));
+
+        // 格式化为ISO8601字符串
+        return utcZoned.format(OUTPUT_FORMAT);
     }
 
     public static void main(String[] args) throws ParseException {

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

@@ -1,5 +1,6 @@
 package com.jzg.quotation.hengbang.crawler.build;
 
+import cn.hutool.core.collection.CollUtil;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
@@ -9,6 +10,7 @@ import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerProposalRespo
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -41,33 +43,40 @@ public final class HbCrawlerQuoteResultVoBuild {
     public static RiskInfoVo buildCiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo ciRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.ForceCarInsureRiskDTO forceCarInsureRisk = proposalResponse.getForceCarInsureRisk();
-        ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
-        ciRiskInfoVo.setStartDate(forceCarInsureRisk.getBegintime());
-        ciRiskInfoVo.setEndDate(forceCarInsureRisk.getEndtime());
+        if(Objects.nonNull(forceCarInsureRisk)){
+            ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
+            ciRiskInfoVo.setStartDate(forceCarInsureRisk.getBegintime());
+            ciRiskInfoVo.setEndDate(forceCarInsureRisk.getEndtime());
+        }
         return ciRiskInfoVo;
+
     }
 
     public static RiskInfoVo buildbiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo biRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk = proposalResponse.getBusiCarInsureRisk();
-        biRiskInfoVo.setRiskCode(busiCarInsureRisk.getRiskcode());
-        biRiskInfoVo.setStartDate(busiCarInsureRisk.getBegintime());
-        biRiskInfoVo.setEndDate(busiCarInsureRisk.getEndtime());
+        if(Objects.nonNull(busiCarInsureRisk)){
+            biRiskInfoVo.setRiskCode(busiCarInsureRisk.getRiskcode());
+            biRiskInfoVo.setStartDate(busiCarInsureRisk.getBegintime());
+            biRiskInfoVo.setEndDate(busiCarInsureRisk.getEndtime());
+        }
         return biRiskInfoVo;
     }
 
     public static List<KindInfoVo> buildKindInfoList(HbCrawlerProposalResponse proposalResponse, QuoteVo quoteVo) {
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
-        List<HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityList = proposalResponse.getCarInsureLiabilityList();
-        Map<String, HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityDTOMap = carInsureLiabilityList.stream().collect(Collectors.toMap(HbCrawlerProposalResponse.CarInsureLiabilityDTO::getKindcode, carInsureLiabilityDTO -> carInsureLiabilityDTO));
-        kindInfoVoList.forEach(kindInfoVo -> {
-            HbCrawlerProposalResponse.CarInsureLiabilityDTO carInsureLiabilityDTO = carInsureLiabilityDTOMap.get(kindInfoVo.getKindCode());
-            kindInfoVo.setAmount(String.valueOf(carInsureLiabilityDTO.getLiabamt()));
-            kindInfoVo.setPremium(String.valueOf(carInsureLiabilityDTO.getLiabprm()));
-            kindInfoVo.setUnitAmount(carInsureLiabilityDTO.getUnitAmount());
-            kindInfoVo.setQuantity(String.valueOf(carInsureLiabilityDTO.getQuantity()));
-            kindInfoVo.setDeductibleRate(carInsureLiabilityDTO.getLiabrate());
-        });
+        if(CollUtil.isNotEmpty(kindInfoVoList)){
+            List<HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityList = proposalResponse.getCarInsureLiabilityList();
+            Map<String, HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityDTOMap = carInsureLiabilityList.stream().collect(Collectors.toMap(HbCrawlerProposalResponse.CarInsureLiabilityDTO::getKindcode, carInsureLiabilityDTO -> carInsureLiabilityDTO));
+            kindInfoVoList.forEach(kindInfoVo -> {
+                HbCrawlerProposalResponse.CarInsureLiabilityDTO carInsureLiabilityDTO = carInsureLiabilityDTOMap.get(kindInfoVo.getKindCode());
+                kindInfoVo.setAmount(String.valueOf(carInsureLiabilityDTO.getLiabamt()));
+                kindInfoVo.setPremium(String.valueOf(carInsureLiabilityDTO.getLiabprm()));
+                kindInfoVo.setUnitAmount(carInsureLiabilityDTO.getUnitAmount());
+                kindInfoVo.setQuantity(String.valueOf(carInsureLiabilityDTO.getQuantity()));
+                kindInfoVo.setDeductibleRate(carInsureLiabilityDTO.getLiabrate());
+            });
+        }
         return kindInfoVoList;
     }
 
@@ -77,9 +86,15 @@ public final class HbCrawlerQuoteResultVoBuild {
         //商业险数据
         HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk = proposalResponse.getBusiCarInsureRisk();
         HbCrawlerProposalResponse.CarInsureShiptaxDTO carInsureShiptax = proposalResponse.getCarInsureShiptax();
-        quoteResultsVo.getCosts().setBiPremium(busiCarInsureRisk.getSumPremium());
-        quoteResultsVo.getCosts().setCiPremium(forceCarInsureRisk.getSumPremium());
-        quoteResultsVo.getCosts().setVvTax(carInsureShiptax.getSumtax());
+        if(Objects.nonNull(busiCarInsureRisk)){
+            quoteResultsVo.getCosts().setBiPremium(busiCarInsureRisk.getSumPremium());
+        }
+        if(Objects.nonNull(forceCarInsureRisk)){
+            quoteResultsVo.getCosts().setCiPremium(forceCarInsureRisk.getSumPremium());
+        }
+        if(Objects.nonNull(carInsureShiptax)){
+            quoteResultsVo.getCosts().setVvTax(carInsureShiptax.getSumtax());
+        }
         //设置非车保费
         quoteResultsVo.getCosts().setNiPremium(proposalResponse.getAccidentTotalPremium());
     }

+ 41 - 11
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java

@@ -3,7 +3,6 @@ package com.jzg.quotation.hengbang.crawler.component;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
@@ -18,15 +17,17 @@ import com.jzg.quotation.hengbang.crawler.entity.request.*;
 import com.jzg.quotation.hengbang.crawler.entity.response.*;
 import com.jzg.quotation.hengbang.crawler.properties.HengBangCrawlerProperties;
 import com.jzg.quotation.hengbang.crawler.utils.HengBangAESUtil;
+import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.WebClientResponseException;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
@@ -52,6 +53,8 @@ public class HengBangCrawlerRequestComponent {
 
     private final RequestComponent requestComponent;
 
+    private final RestTemplate restTemplate;
+
     /**
      * 验证码
      *
@@ -291,9 +294,15 @@ public class HengBangCrawlerRequestComponent {
             System.out.println(HengBangAESUtil.decryptStr(response.getHbEncD()));
             String resJson = HengBangAESUtil.decryptStr(response.getHbEncD());
             return JSONObject.parseObject(resJson).getString("message");
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new SystemException("加密解密异常!");
+        } catch (WebClientResponseException e) {
+            if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){
+                return JSONObject.parseObject(e.getMessage()).getString("detail");
+            }else{
+                throw new SystemException(e.getMessage());
+            }
+        }
+        catch (Exception e) {
+            throw new SystemException(e.getMessage());
         }
     }
 
@@ -353,13 +362,33 @@ public class HengBangCrawlerRequestComponent {
      *
      * @param plyappno
      * @param headers
+     * @param paramList
+     * @return
+     */
+    public String coreProposal(String plyappno, HttpHeaders headers, List<Map<String, String>> paramList) {
+        try {
+            ResponseEntity<String> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + "/" +plyappno, paramList, String.class, headers);
+            return JSONObject.parseObject(responseEntity.getBody()).getString("message");
+        } catch (WebClientResponseException e) {
+            if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){
+                return JSONObject.parseObject(e.getMessage()).getString("detail");
+            }else{
+                throw new SystemException(e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * 获取核保信息
+     * @param plyappno
+     * @param headers
      * @return
      */
-    public HbCrawlerCoreProposalResponse coreProposal(String plyappno, HttpHeaders headers) {
-        Map<String, String> params = new HashMap<>();
-        params.put("plyappno", plyappno);
-        ResponseEntity<HbCrawlerCoreProposalResponse> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + plyappno, params, HbCrawlerCoreProposalResponse.class, headers);
-        return responseEntity.getBody();
+    public HbCrawlerCoreProposalResponse coreProposalResult(String plyappno, HttpHeaders headers) {
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("plyappno", plyappno);
+        HbCrawlerCoreProposalResponse response = requestComponent.get(RequestUrl.SUBMIT_RESULT.getRequestUrl(hbCrawlerProperties.getBaseUrl()), map, "", HbCrawlerCoreProposalResponse.class, headers);
+        return response;
     }
 
     /**
@@ -424,4 +453,5 @@ public class HengBangCrawlerRequestComponent {
                 .concat(plyappno), null, HbCrawlerPayUrlResponse.class, headers).getBody();
     }
 
+
 }

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

@@ -27,7 +27,9 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
 
     FILEBUFF_UPLOAD("/interflow/api/filebuff-upload/batch-folder?imgType=tihe&plyappno=", "上传影像"),
 
-    SUBMIT("/new-insure/api/carinsurenew/coreproposal", "提交核保"),
+    SUBMIT("/new-insure/api/carinsurenew/quoteToProposal", "提交核保"),
+
+    SUBMIT_RESULT("/new-insure/api/carinsurenew/coreproposal", "获取核保信息"),
 
     ORDER_STATE("/new-insure/api/carInsureMain/list", "查询投保单状态"),
 

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

@@ -83,6 +83,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
             this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
             this.risktype = "2";
         }else{
+//            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.epersonliabilityList = new ArrayList<>();
         }
         if(Objects.nonNull(quoteVo.getCiRiskInfoVo())){
@@ -117,7 +118,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;

+ 14 - 8
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerFileUploadRequest.java

@@ -6,6 +6,7 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @description: 恒邦财险 上传影像 请求参数
@@ -17,14 +18,12 @@ public class HbCrawlerFileUploadRequest extends HbBaseRequest{
     @Serial
     private static final long serialVersionUID = 781293083595362938L;
 
-    public HbCrawlerFileUploadRequest(String fileBuff, String fileType, String mark3, Integer fileNum) {
-        this.file_buff = fileBuff;
-        this.file_type = fileType;
+    public HbCrawlerFileUploadRequest(List<String> fileBuff, List<String> fileType, List<String> mark3, List<ExtJsonDTO.ExtArrDTO> fileNum) {
+        this.file_buff = fileBuff.stream().collect(Collectors.joining("||"));
+        this.file_type = fileType.stream().collect(Collectors.joining("||"));
         ExtJsonDTO extJsonDTO = new ExtJsonDTO();
-        extJsonDTO.setMark3(mark3);
-        List<ExtJsonDTO.ExtArrDTO> extArrDTOList = new ArrayList<>(fileNum);
-        extArrDTOList.add(new ExtJsonDTO.ExtArrDTO());
-        extJsonDTO.setExtArr(extArrDTOList);
+        extJsonDTO.setMark3(mark3.stream().collect(Collectors.joining(",")));
+        extJsonDTO.setExtArr(fileNum);
         this.ext_json = extJsonDTO;
     }
 
@@ -47,9 +46,16 @@ public class HbCrawlerFileUploadRequest extends HbBaseRequest{
         public static class ExtArrDTO implements Serializable {
             @Serial
             private static final long serialVersionUID = 4521445632452212652L;
-            private String ocrFlag = "0";
+            private String ocrFlag;
             private String name;
             private String id_number;
+            private String plate_no;
+            private String vin_code;
+            private String engine_no;
+            private String register_date;
+            private String issue_date;
+            private String owner;
         }
+
     }
 }

+ 4 - 1
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerQuoteimmediatelyRequest.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.hengbang.crawler.entity.HengBangCrawlerConfigureParameters;
 import com.jzg.quotation.hengbang.crawler.entity.dto.HbEncDTO;
 import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerQueryCarResponse;
@@ -68,7 +69,7 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
         carInsureItemDTO.setModelCode(contentDTO.getModelCode());
         carInsureItemDTO.setFamilyName(contentDTO.getFamilyName());
         carInsureItemDTO.setAttachNature(carInfoVo.getPropertyCode());
-        carInsureItemDTO.setCiModelCode(contentDTO.getCimodelCode());
+        carInsureItemDTO.setCiModelCode(StringUtils.isNotBlank(contentDTO.getCimodelCode())? contentDTO.getCimodelCode() : contentDTO.getCimodelCodeC());
         carInsureItemDTO.setPurchasePriceNotTax(Double.parseDouble(contentDTO.getPurchasePriceNotTax()));
         carInsureItemDTO.setStyleUniqueId(contentDTO.getVehicleStyleUniqueId());
         carInsureItemDTO.setCountyCode(ownersInfo.getCountyCode());
@@ -77,6 +78,8 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
         carInsureItemDTO.setPostCode(ownersInfo.getCountyCode());
         carInsureItemDTO.setChgownerFlag(carInfoVo.isTransfer()? "1" : "0");
         carInsureItemDTO.setSpecialCarFlag("1");
+        carInsureItemDTO.setTotalTonCount("0.00");
+        carInsureItemDTO.setNoticeType(contentDTO.getNoticeType());
         this.carInsureItem = carInsureItemDTO;
         //设置被保人
         CarInsureRiskRelatedPartyDTO riskRelatedPartyDTO = new CarInsureRiskRelatedPartyDTO();

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

@@ -1,8 +1,12 @@
 package com.jzg.quotation.hengbang.crawler.service.Impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jzg.commons.constants.ProductsType;
+import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
+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;
@@ -28,10 +32,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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -124,12 +130,46 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HbCrawlerOrder hbCrawlerOrder = hbCrawlerOrderService.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
+        String productCode = underwritingVo.getInsOrders().getProductId();
+        List<Map<String, String>> paramList = new ArrayList<>();
+        if(productCode.equals(ProductsType.PT_0330.getCode())){
+            Map<String, String> params = new HashMap<>();
+            params.put("clauseCode","T001_1");
+            params.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params.put("clauseName","第一现场报案");
+            params.put("riskCode","0801");
+            paramList.add(params);
+        } else if(productCode.equals(ProductsType.PT_034001.getCode())){
+            Map<String, String> params = new HashMap<>();
+            params.put("clauseCode","T001_1");
+            params.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params.put("clauseName","第一现场报案");
+            params.put("riskCode","0808");
+            paramList.add(params);
+        } else{
+            Map<String, String> params1 = new HashMap<>();
+            params1.put("clauseCode","T001_1");
+            params1.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params1.put("clauseName","第一现场报案");
+            params1.put("riskCode","0801");
+            paramList.add(params1);
+            Map<String, String> params2 = new HashMap<>();
+            params2.put("clauseCode","T001_1");
+            params2.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params2.put("clauseName","第一现场报案");
+            params2.put("riskCode","0808");
+            paramList.add(params2);
+        }
 
-        HbCrawlerCoreProposalResponse coreProposalResponse = hbCrawlerRequestComponent.coreProposal(hbCrawlerOrder.getPlyappno(), headers);
-        hbCrawlerOrder.setCiProposalNo(coreProposalResponse.getEfcProposalNo());
-        hbCrawlerOrder.setBiProposalNo(coreProposalResponse.getBizProposalNo());
-        hbCrawlerOrderService.update(hbCrawlerOrder);
-        return null;
+        String message = hbCrawlerRequestComponent.coreProposal(hbCrawlerOrder.getPlyappno(), headers,paramList);
+        if("成功".equals(message)){
+            // 获取核保信息
+            HbCrawlerCoreProposalResponse response = hbCrawlerRequestComponent.coreProposalResult(hbCrawlerOrder.getPlyappno(), headers);
+            hbCrawlerOrder.setCiProposalNo(response.getEfcProposalNo());
+            hbCrawlerOrder.setBiProposalNo(response.getBizProposalNo());
+            hbCrawlerOrderService.update(hbCrawlerOrder);
+        }
+        return new UnderwritingResultsVo();
     }
 
     /**
@@ -161,36 +201,98 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HbCrawlerOrder hbCrawlerOrder = hbCrawlerOrderService.findByOrdersNo(insuranceUploadImageVo.getOrder()
                 .getOrdersNo());
+
+        // 获取车主/投保人/被保人信息
+        List<InsOrdersCarUserInfo> userInfos = insuranceUploadImageVo.getInsOrdersCarUserInfoList();
+        InsOrdersCarUserInfo ownerInfo = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(1))
+                .findFirst().orElse(null);
+        InsOrdersCarUserInfo policyHolderInfo = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(2))
+                .findFirst().orElse(null);
+        InsOrdersCarUserInfo insuredHolder = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(3))
+                .findFirst().orElse(null);
+        CarInfoVo carInfo = insuranceUploadImageVo.getCarInfo();
         //暂时将图片默认为01,06,09,投保业务-旧车-其他资料
         Integer fileNum = 0;
-        StringBuilder fileBuff = new StringBuilder();
-        StringBuilder fileType = new StringBuilder();
-        StringBuilder mark3 = new StringBuilder();
-        Integer mark3Num = 100;//恒邦规定从100开始
+        List<String> fileBuff = new ArrayList<>();
+        List<String> fileType = new ArrayList<>();
+        List<String> mark3 = new ArrayList<>();
+        List<HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO> extArrDTOS = new ArrayList<>();
+
+//        Integer mark3Num = 100;//恒邦规定从100开始
         List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
-        if (imageVoList != null && !imageVoList.isEmpty()) {
+        if (CollUtil.isNotEmpty(imageVoList)) {
             for (InsuranceImageVo insuranceImageVo : imageVoList) {
                 List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
-                if (imageBase64List != null && !imageBase64List.isEmpty()) {
-                    for (InsuranceImageVo.ImageDTO imageBase64 : imageBase64List) {
-                        if (!fileBuff.isEmpty()) {
-                            fileBuff.append("||");
-                        }
-                        fileBuff.append(imageBase64.getImageBase64Str());
-                        if (!fileType.isEmpty()) {
-                            fileType.append("||");
-                        }
-                        fileType.append(RequestConstant.IMAGE_TYPE);
-                        if (!mark3.isEmpty()) {
-                            mark3.append(",");
-                        }
-                        mark3.append(mark3Num++);
-                        fileNum += 1;
+                if(CollUtil.isNotEmpty(imageBase64List)){
+                    fileBuff.add("data:image/jpeg;base64," + imageBase64List.get(0).getImageBase64Str());
+                    if(InsuranceImageEnum.C02.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("6");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(ownerInfo.getName());
+                        extArrDTO.setId_number(ownerInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.C01.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,02,投保业务-旧车-行驶证");
+                        mark3.add("8");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setPlate_no(carInfo.getLicenseNo());
+                        extArrDTO.setEngine_no(carInfo.getEngineNo());
+                        extArrDTO.setOwner(ownerInfo.getName());
+                        extArrDTO.setVin_code(carInfo.getVinNo());
+                        extArrDTO.setIssue_date(carInfo.getIssueDate());
+                        extArrDTO.setRegister_date(carInfo.getRegisterDate());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D02.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("7");
+                        extArrDTOS.add(new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO());
+                    } else if(InsuranceImageEnum.D01.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,02,投保业务-旧车-行驶证");
+                        mark3.add("9");
+                        extArrDTOS.add(new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO());
+                    } else if(InsuranceImageEnum.C03.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("11");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(policyHolderInfo.getName());
+                        extArrDTO.setId_number(policyHolderInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D03.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("12");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(policyHolderInfo.getName());
+                        extArrDTO.setId_number(policyHolderInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.C04.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("13");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(insuredHolder.getName());
+                        extArrDTO.setId_number(insuredHolder.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D04.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("14");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(insuredHolder.getName());
+                        extArrDTO.setId_number(insuredHolder.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
                     }
                 }
             }
         }
-        HbCrawlerFileUploadRequest fileUploadRequest = new HbCrawlerFileUploadRequest(fileBuff.toString(), fileType.toString(), mark3.toString(), fileNum);
+        HbCrawlerFileUploadRequest fileUploadRequest = new HbCrawlerFileUploadRequest(fileBuff, fileType, mark3, extArrDTOS);
         hbCrawlerRequestComponent.uploadImage(fileUploadRequest, headers, hbCrawlerOrder.getPlyappno());
     }
 

+ 7 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -31,6 +31,7 @@ import com.jzg.commons.constants.quote.enums.base.QuoteRuleCategory;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import com.jzg.quotation.summary.aop.QuoteVerification;
 import com.jzg.quotation.summary.aop.OrderOperationLog;
 import com.jzg.quotation.summary.constants.QuoteNumberConstant;
@@ -138,9 +139,10 @@ public class UnifyOrderManager {
     private InsOrdersTrackService insOrdersTrackService;
 
     @Autowired
-    private ZhongMeiCrawlerRequest zhongMeiCrawlerRequest;
-
+    private HengBangCrawlerRequest hengBangCrawlerRequest;
 
+    @Autowired
+    private ZhongMeiCrawlerRequest zhongMeiCrawlerRequest;
 
 
     private String getSystemCode() {
@@ -406,6 +408,9 @@ public class UnifyOrderManager {
         if (byCompanyId.getData().isEmpty()) {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
+
+        List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.getByOrderId(insuranceUploadImageVo.getOrder().getOrdersNo());
+        insuranceUploadImageVo.setInsOrdersCarUserInfoList(insOrdersCarUserInfos);
         insuranceUploadImageVo.getOrder().setAgreementId(byCompanyId.getData().get(0).getId());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());