Qchen 9 месяцев назад
Родитель
Сommit
e9b68fcb53

+ 10 - 17
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/build/GuoRenApiQuoteResultsVoBuild.java

@@ -6,6 +6,7 @@ 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.guoren.api.constant.enums.GuoRenRiskCode;
+import com.jzg.quotation.guoren.api.entity.Response.NonAutoInsOrderResponse;
 import com.jzg.quotation.guoren.api.entity.Response.PremiumResponse;
 
 import java.util.List;
@@ -18,7 +19,7 @@ import java.util.stream.Collectors;
  * @date: 2025/3/17 10:33
  **/
 public class GuoRenApiQuoteResultsVoBuild {
-    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, PremiumResponse premiumResponse) {
+    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, PremiumResponse premiumResponse, NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         // 交强险
@@ -31,7 +32,7 @@ public class GuoRenApiQuoteResultsVoBuild {
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
 
         // 交强保费 车船税 商业保费
-        buildPremium(quoteResultsVo, premiumResponse);
+        buildPremium(quoteResultsVo, premiumResponse,nonAutoInsOrderResponse);
         return quoteResultsVo;
     }
 
@@ -52,7 +53,7 @@ public class GuoRenApiQuoteResultsVoBuild {
     /**
      * 处理交强险数据
      * @param premiumResponse
-     * @return
+     * @return riskInfoVo
      */
     public static RiskInfoVo buildCiRiskInfoVo(PremiumResponse premiumResponse) {
         RiskInfoVo riskInfoVo = new RiskInfoVo();
@@ -89,15 +90,15 @@ public class GuoRenApiQuoteResultsVoBuild {
      * @param quoteResultsVo
      * @param premiumResponse
      */
-    private static void buildPremium(QuoteResultsVo quoteResultsVo, PremiumResponse premiumResponse) {
+    private static void buildPremium(QuoteResultsVo quoteResultsVo, PremiumResponse premiumResponse, NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         // 设置交强险保费
-        quoteResultsVo.getCosts().setCiPremium(String.valueOf(premiumResponse.getData().getSumPremiumCI()));
+        quoteResultsVo.getCosts().setCiPremium(premiumResponse.getData().getSumPremiumCI() != null ? String.valueOf(premiumResponse.getData().getSumPremiumCI()) : "0.00");
         // 设置车船税
-        quoteResultsVo.getCosts().setVvTax(String.valueOf(premiumResponse.getData().getSumPayTax()));
+        quoteResultsVo.getCosts().setVvTax(premiumResponse.getData().getSumPayTax() != null ? String.valueOf(premiumResponse.getData().getSumPayTax()) : "0.00");
         // 设置商业险保费
-        quoteResultsVo.getCosts().setBiPremium(String.valueOf(premiumResponse.getData().getSumPremiumBI()));
-        // 设置非车险(驾意险)保费,暂时无数据
-
+        quoteResultsVo.getCosts().setBiPremium(premiumResponse.getData().getSumPremiumBI() != null ? String.valueOf(premiumResponse.getData().getSumPremiumBI()) : "0.00");
+        // 设置非车险保费,
+        quoteResultsVo.getCosts().setNiPremium(nonAutoInsOrderResponse != null ? String.valueOf(nonAutoInsOrderResponse.getData().getNoCarPremium()) : "0.00");
     }
 
     public static QuoteResultsVo buildQuoteFailResultsVo(PremiumResponse response) {
@@ -109,12 +110,4 @@ public class GuoRenApiQuoteResultsVoBuild {
         return quoteResultsVo;
     }
 
-    public static QuoteResultsVo buildQuoteSuccessResultsVo(PremiumResponse response) {
-        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
-        // 报价失败提示
-        quoteResultsVo.setErrorMessage(response.getResultMsg());
-        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL.getCode());
-        return quoteResultsVo;
-    }
-
 }

+ 10 - 8
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/component/GuorenDuplicateInsuranceComponent.java

@@ -4,6 +4,9 @@ import cn.hutool.core.lang.Assert;
 //import cn.hutool.http.HttpRequest;
 //import cn.hutool.http.HttpResponse;
 //import cn.hutool.json.JSONUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -246,14 +249,13 @@ public class GuorenDuplicateInsuranceComponent {
 
     public static String sendPost(String url,String bodyStr){
         System.err.println("请求[post、json、body]参数:"+bodyStr);
-//        HttpRequest request = HttpRequest.post(url)
-//                .header("Content-Type", "application/json")//以json的方式传递
+        HttpRequest request = HttpRequest.post(url)
+                .header("Content-Type", "application/json")//以json的方式传递
 ////     .header("authorization","Bearer abcdefghijklmnopqrstuvwxyz")
-//                .body(bodyStr);
+                .body(bodyStr);
 //
-//        HttpResponse response = request.execute();
-//        String respStr = response.body();
-        String respStr = "";
+        HttpResponse response = request.execute();
+        String respStr = response.body();
         System.err.println("返回[post、json、body]参数:"+ respStr);
 
         return respStr;
@@ -271,8 +273,8 @@ public class GuorenDuplicateInsuranceComponent {
         bodyMap.put("syImage", toString(syImageStr, ""));
         String sendBody = toJson(bodyMap);
         String ocrStr = sendPost("http://39.98.41.104:8088/getres", sendBody);
-//        return JSONUtil.toBean(ocrStr, CheckCodeResp.class);
-        return null;
+        System.out.println(JSONUtil.toBean(ocrStr, CheckCodeResp.class));
+        return JSONUtil.toBean(ocrStr, CheckCodeResp.class);
     }
 
 

+ 12 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/GuoRenApiOrder.java

@@ -16,7 +16,7 @@ import java.math.BigDecimal;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@Document("huatai.api.order")
+@Document("guoren.api.order")
 public class GuoRenApiOrder {
 
     @Id
@@ -52,6 +52,12 @@ public class GuoRenApiOrder {
      */
     private BigDecimal jqPremium;
 
+    /**
+     * 国任财险 车船税
+     */
+    private BigDecimal carTax;
+
+
     /**
      * 国任财险 交强险保单号
      */
@@ -62,6 +68,11 @@ public class GuoRenApiOrder {
      */
     private String syPolicyNo;
 
+    /**
+     * 非车订单号
+     */
+    private String noCarOrderNo;
+
     /**
      * 产品代码
      */

+ 1 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/Request/PayRequest.java

@@ -72,7 +72,7 @@ public class PayRequest {
         req.setRedirectUrl(redirectUrl);
         req.setComCode(parameters.getComCode());
         req.setVerificationCode("");
-        BigDecimal amount = guoRenApiOrder.getJqPremium().add(guoRenApiOrder.getSyPremium()).add(guoRenApiOrder.getJyPremium());
+        BigDecimal amount = guoRenApiOrder.getJqPremium().add(guoRenApiOrder.getSyPremium()).add(guoRenApiOrder.getJyPremium()).add(guoRenApiOrder.getCarTax());
         req.setAmount(amount.doubleValue());
         //产品标识  车+意必录:CA
 //        req.setProductCode();

+ 48 - 28
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -15,8 +15,6 @@ import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
-import com.jzg.commons.entity.vo.CompanyClauseVo;
-import com.jzg.commons.entity.vo.InsCompanyClauseVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.StringUtils;
@@ -32,7 +30,6 @@ import com.jzg.quotation.commons.utils.HttpUtil;
 import com.jzg.quotation.guoren.api.build.GuoRenApiQuoteResultsVoBuild;
 import com.jzg.quotation.guoren.api.component.GuoRenRequestApiComponent;
 import com.jzg.quotation.guoren.api.component.GuorenDuplicateInsuranceComponent;
-import com.jzg.quotation.guoren.api.constant.enums.GuoRenRiskCode;
 import com.jzg.quotation.guoren.api.constant.enums.PlatformInterfaceCode;
 import com.jzg.quotation.guoren.api.entity.GuoRenApiOrder;
 import com.jzg.quotation.guoren.api.entity.GuoRenConfigureParameters;
@@ -55,12 +52,10 @@ import org.springframework.util.ObjectUtils;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import static com.jzg.quotation.commons.constant.CacheConstant.GR_SPECIAL_AGREEMENT_KEY;
-import static com.jzg.quotation.commons.constant.CacheConstant.GR_SPECIAL_AGREEMENT_TIME;
 
 /**
  * description:
@@ -122,8 +117,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         String noCarPremium = "";
         String goodsCode = "";
         GuoRenAccidentalDrivingVo accidentalDrivingVo = getGuoRenAccidentalDrivingVo(quoteVo.getAccidentalDrivings());
+        NonAutoInsOrderResponse nonAutoInsOrderResponse = null;
         if (accidentalDrivingVo.getProdCode() != null) {
-            NonAutoInsOrderResponse nonAutoInsOrderResponse = nonAutoInsOrder(quoteVo, accidentalDrivingVo,
+            nonAutoInsOrderResponse = nonAutoInsOrder(quoteVo, accidentalDrivingVo,
                     carPriceQuery.getInputvo(), parameters, vinQuery, url);
             AssertionUtils.isEmpty(nonAutoInsOrderResponse.getData(), nonAutoInsOrderResponse.getMessage());
             orderCode = nonAutoInsOrderResponse.getData().getOrderCode();
@@ -161,8 +157,13 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
             guoRenApiOrder.setProductsCode(orderBase.getProductId());
             guoRenApiOrder.setJqApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoCI());
             guoRenApiOrder.setSyApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoBI());
+            guoRenApiOrder.setJqPremium(premiumResponse.getData().getSumPremiumCI() != null ? BigDecimal.valueOf(premiumResponse.getData().getSumPremiumCI()) : BigDecimal.ZERO);
+            guoRenApiOrder.setSyPremium(premiumResponse.getData().getSumPremiumBI() != null ? BigDecimal.valueOf(premiumResponse.getData().getSumPremiumBI()) : BigDecimal.ZERO);
+            guoRenApiOrder.setJyPremium(new BigDecimal(jsPremium));
+            guoRenApiOrder.setCarTax(BigDecimal.valueOf(premiumResponse.getData().getSumPayTax()));
             guoRenApiOrder.setOthBusinessNo(carPriceQuery.getInputvo());
-            return handleSuccessQuote(guoRenApiOrder,quoteVo, premiumResponse);
+            guoRenApiOrder.setNoCarOrderNo(nonAutoInsOrderResponse != null ? nonAutoInsOrderResponse.getData().getOrderCode() : "");
+            return handleSuccessQuote(guoRenApiOrder,quoteVo, premiumResponse,nonAutoInsOrderResponse);
         }
     }
 
@@ -171,9 +172,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         return GuoRenApiQuoteResultsVoBuild.buildQuoteFailResultsVo(response);
     }
 
-    private QuoteResultsVo handleSuccessQuote(GuoRenApiOrder guoRenApiOrder,QuoteVo quoteVo,PremiumResponse response) {
+    private QuoteResultsVo handleSuccessQuote(GuoRenApiOrder guoRenApiOrder,QuoteVo quoteVo,PremiumResponse response,NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         guoRenApiOrderService.save(guoRenApiOrder);
-        return GuoRenApiQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,response);
+        return GuoRenApiQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,response,nonAutoInsOrderResponse);
     }
 
 
@@ -206,9 +207,8 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         if (StringUtils.isNotEmpty(jqStatus) && StringUtils.isEmpty(syStatus)) {
             if (jqStatus.equals("1") || jqStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             } else if (jqStatus.equals("2")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
@@ -218,9 +218,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         if (StringUtils.isEmpty(syStatus) && StringUtils.isNotEmpty(syStatus)) {
             if (syStatus.equals("1") || syStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
+
             } else if (syStatus.equals("2")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
@@ -234,19 +234,25 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
                 underwritingResultsVo.setUnderwritingResult(message);
             } else if (jqStatus.equals("1") && syStatus.equals("1")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             } else if (jqStatus.equals("3") && syStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             }
         }
         return underwritingResultsVo;
     }
 
+    /**
+     * 通过二维码扫描获取电子投保单签名
+     */
+    public SignatureResponse getSignature(GuoRenApiOrder guoRenApiOrder,String url) {
+        return guoRenRequestApiComponent.signature(guoRenApiOrder,url);
+    }
+
+
     /**
      * 获取支付链接
      * @param paymentLinkVo
@@ -613,14 +619,17 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         imageVoList.forEach(insuranceImageVo -> {
             List<String> imageIds = new ArrayList<>();
             for (InsuranceImageVo.ImageDTO imageDTO : insuranceImageVo.getImageBase64List()) {
-                String imageBase64Str = imageDTO.getImageBase64Str();
-                byte[] imageBytes = Base64.getDecoder().decode(imageBase64Str);
                 try {
                     //需要设置一个临时图片路径
-                    FileOutputStream fileOutputStream = new FileOutputStream("图片临时路径");
-                    fileOutputStream.write(imageBytes);
-                    fileOutputStream.close();
-                    FilePart file1 = new FilePart("file", new File("图片临时路径"));
+                    File tempFile = File.createTempFile("upload_temp_",  getFileSuffix(imageDTO.getImageName()));
+                    FilePart file1 = new FilePart("file", tempFile);
+                    tempFile.deleteOnExit();
+
+                    // 将字节数组写入临时文件
+                    try (FileOutputStream fos = new FileOutputStream(tempFile)) {
+                        fos.write(imageDTO.getImageByte());
+                        fos.flush();
+                    }
 
                     Part[] parts = {file1, new StringPart("businessNo", formMap.get("businessNo").toString()),
                             new StringPart("operatorCode",
@@ -652,4 +661,15 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         insImagesUploadCacheComponent.setUploadImageCache(insuranceUploadImageVo.getOrder().getInsuranceCompanyCode(), map);
     }
 
+    /**
+     * 工具方法:从文件名中提取后缀(如 "test.txt" → "txt")
+     */
+    private static String getFileSuffix(String fileName) {
+        if (fileName.contains(".")) {
+            return fileName.substring(fileName.lastIndexOf("."));
+        }
+        return "bin"; // 默认后缀(二进制文件)
+    }
+
+
 }

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -740,6 +740,9 @@ public class QuoteVerificationAspect {
      * 转换百分比为小数
      */
     private BigDecimal convertPercent(BigDecimal percent) {
+        if (percent == null) {
+            return BigDecimal.ZERO;
+        }
         return percent.divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_EVEN);
     }
 
@@ -760,6 +763,9 @@ public class QuoteVerificationAspect {
         if (costType == null) {
             return BigDecimal.ZERO;
         }
+        if (entranceFeeRatio == null) {
+            return BigDecimal.ZERO;
+        }
         BigDecimal inletPercent = convertPercent(costType.getInlet());
         return inletPercent.subtract(entranceFeeRatio);
     }