Procházet zdrojové kódy

Merge remote-tracking branch 'origin/dev_jzg_lipf_v20260518' into dev_jzg_lipf_v20260518

lipf před 4 měsíci
rodič
revize
d305aede78
19 změnil soubory, kde provedl 184 přidání a 113 odebrání
  1. 2 2
      partner/src/main/java/com/jzg/mapper/PartnerLiftingRecordMapper.java
  2. 13 37
      partner/src/main/java/com/jzg/service/Impl/PartnerLiftingRecordServiceImpl.java
  3. 3 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/InsuranceCode.java
  4. 1 5
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/response/GuoRenCrawlerQueryByVinNoData.java
  5. 7 3
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java
  6. 1 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  7. 58 9
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java
  8. 1 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerCacheComponent.java
  9. 2 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerGetTokenImpl.java
  10. 2 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java
  11. 21 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  12. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  13. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersQrcodeService.java
  14. 16 39
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  15. 3 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  16. 23 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/ConvertUtil.java
  17. 26 4
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
  18. 2 1
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/build/ZmCrawlerSubmitResultVoBuild.java
  19. 1 1
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

+ 2 - 2
partner/src/main/java/com/jzg/mapper/PartnerLiftingRecordMapper.java

@@ -17,8 +17,8 @@ import java.util.Map;
 public interface PartnerLiftingRecordMapper extends BaseMapper<PartnerLiftingRecord> {
 
 
-    @Select("select audit_status as auditStatus,count(1) as count from partner_lifting_record group by audit_status")
-    List<Map<String, Object>> groupByAuditStatus();
+    @Select("SELECT type,audit_status,COUNT(*) AS total FROM partner_lifting_record GROUP BY type,audit_status ORDER BY type,audit_status")
+    List<Map<String, String>> groupByAuditStatus();
 
     @Select("SELECT r.id,r.`name`,r.mobile,r.user_id,r.dept_id,r.type,r.original_level,r.after_change,r.cycle,r.upgrade_strategy,r.audit_status,r.audit_time,r.audit_user,r.reject_reason,r.conditions, " +
             " r.rules,r.create_time,r.upgrade_type,( SELECT `name` FROM sys_dept WHERE sys_dept.id = r.dept_id ) dept_name , " +

+ 13 - 37
partner/src/main/java/com/jzg/service/Impl/PartnerLiftingRecordServiceImpl.java

@@ -74,11 +74,7 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
         queryWrapper.like(StringUtils.isNotBlank(recordParam.getMobile()), "mobile", recordParam.getMobile());
         queryWrapper.like(StringUtils.isNotBlank(recordParam.getUserId()), "user_id", recordParam.getUserId());
         queryWrapper.eq(StringUtils.isNotBlank(recordParam.getType()), "type", recordParam.getType());
-        if (1 == recordParam.getAuditStatus()){
-            queryWrapper.in(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), "audit_status", 1,3,4);
-        }else {
-            queryWrapper.eq(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), "audit_status", recordParam.getAuditStatus());
-        }
+        queryWrapper.eq(ObjectUtils.isNotEmpty(recordParam.getAuditStatus()), "audit_status", recordParam.getAuditStatus());
         if (CollectionUtil.isNotEmpty(recordParam.getApplyTime())){
             String startTime = recordParam.getApplyTime().get(0);
             String endTime = null;
@@ -101,40 +97,20 @@ public class PartnerLiftingRecordServiceImpl extends ServiceImpl<PartnerLiftingR
 
     }
 
-    public List<Map<String, Integer>> groupByAuditStatus() {
-        List<Map<String, Object>> maps = baseMapper.groupByAuditStatus();
-        List<Map<String, Integer>> list = new ArrayList<>();
-        Arrays.asList(0, 1, 2).forEach(auditStatus -> {
-            Map<String, Integer> statusMap = new HashMap<>();
-            int sum;
-            if (1 == auditStatus) {
-                sum = maps.stream()
-                        .filter(map -> {
-                            Object auditStatusObj = map.get("auditStatus");
-                            return auditStatusObj != null &&
-                                    (Integer.valueOf(String.valueOf(auditStatusObj)) == 3 ||
-                                            Integer.valueOf(String.valueOf(auditStatusObj)) == 1);
-                        }).mapToInt(map -> {
-                            Object countObj = map.get("count");
-                            return countObj instanceof Long ? ((Long) countObj).intValue() : 0;
-                        })
-                        .sum();
-            } else {
-                sum = maps.stream()
-                        .filter(map -> {
-                            Object auditStatusObj = map.get("auditStatus");
-                            return auditStatusObj != null &&
-                                    Integer.valueOf(String.valueOf(auditStatusObj)) == auditStatus;
-                        }).mapToInt(map -> {
-                            Object countObj = map.get("count");
-                            return countObj instanceof Long ? ((Long) countObj).intValue() : 0;
-                        })
-                        .sum();
+    public List<Map<String, String>> groupByAuditStatus() {
+        List<Map<String, String>> maps = baseMapper.groupByAuditStatus();
+        List<Map<String, String>> list = new ArrayList<>();
+        for (Map<String, String> map : maps) {
+            Map<String, String> statusMap = new HashMap<>();
+            String type = String.valueOf(map.get("type"));
+            String auditStatus = String.valueOf(map.get("audit_status"));
+            String total = String.valueOf(map.get("total"));
+            if (StringUtils.equalsAny(type, "0", "1") && StringUtils.equalsAny(auditStatus, "0", "1", "2", "3")) {
+                statusMap.put("auditStatus", type + auditStatus);
+                statusMap.put("count", total);
             }
-            statusMap.put("auditStatus", auditStatus);
-            statusMap.put("count", sum);
             list.add(statusMap);
-        });
+        }
         return list;
     }
 

+ 3 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/constant/InsuranceCode.java

@@ -28,7 +28,6 @@ public class InsuranceCode {
     public static final String INSURANCE_CAIC = "CAIC";
     public static final String INSURANCE_CATH = "CATH";
     public static final String INSURANCE_CCBP = "CCBP";
-    public static final String INSURANCE_CCIC = "CCIC";
 
     public static final String INSURANCE_CICP = "CICP";
     public static final String INSURANCE_CJCX = "CJCX";
@@ -104,4 +103,7 @@ public class InsuranceCode {
 
     // 泰山财险
     public static final String  INSURANCE_TSBX = "TSBX";
+
+    // 大地财险
+    public static final String  INSURANCE_CCIC = "CCIC";
 }

+ 1 - 5
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/response/GuoRenCrawlerQueryByVinNoData.java

@@ -66,9 +66,6 @@ public class GuoRenCrawlerQueryByVinNoData implements Serializable, CarModelsFil
     @JsonProperty("purchasePricesz")
     private Double purchasePricesz;
 
-    @JsonProperty("seatCount")
-    private Double seatCount;
-
     @JsonProperty("seatCountlb")
     private Integer seatCountlb;
 
@@ -223,9 +220,8 @@ public class GuoRenCrawlerQueryByVinNoData implements Serializable, CarModelsFil
         return this.carYear;
     }
 
-    @Override
     public String getSeatCount(){
-        return String.valueOf((int) Double.parseDouble(seatCount.toString()));
+        return this.seatCountBC;
     }
 
     @NoArgsConstructor

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

@@ -5,10 +5,12 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.constant.CacheConstant;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
+import com.jzg.quotation.commons.utils.InsuranceLog;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.hengbang.crawler.constant.RequestConstant;
 import com.jzg.quotation.hengbang.crawler.constant.enums.RequestUrl;
@@ -29,11 +31,13 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClientResponseException;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -388,11 +392,11 @@ public class HengBangCrawlerRequestComponent {
             ResponseEntity<String> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + "/" + plyappno, requestBody, String.class, headers);
             return JSONObject.parseObject(responseEntity.getBody()).getString("message");
         } catch (WebClientResponseException e) {
-            log.error("恒邦calculation接口调用失败[{}]: {}", e.getStatusCode(), e.getResponseBodyAsString());
+            log.error("恒邦calculation接口调用失败[{}]: {}", e.getStatusCode(), e.getResponseBodyAsString(StandardCharsets.UTF_8));
             if (e.getStatusCode().equals(HttpStatusCode.valueOf(500))) {
-                return JSONObject.parseObject(e.getResponseBodyAsString()).getString("detail");
+                return JSONObject.parseObject(e.getResponseBodyAsString(StandardCharsets.UTF_8)).getString("detail");
             } else  if (e.getStatusCode().equals(HttpStatusCode.valueOf(400))) {
-                return JSONObject.parseObject(e.getResponseBodyAsString()).getString("title");
+                return JSONObject.parseObject(e.getResponseBodyAsString(StandardCharsets.UTF_8)).getString("title");
             } else {
                 throw new SystemException(e.getMessage());
             }

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

@@ -302,7 +302,7 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
             hbCrawlerOrderService.update(hbCrawlerOrder);
             underwritingResultsVo.setJyApplyNo(response.getEfcProposalNo());
             underwritingResultsVo.setSyApplyNo(response.getBizProposalNo());
-            if (response.getStatus().equals("2")) {
+            if (response.getStatus().equals("2") || response.getStatus().equals("9")) {
                 underwritingResultsVo.setUnderwritingResult("核保失败:" + response.getDesCription());
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             } else {

+ 58 - 9
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java

@@ -1,5 +1,7 @@
 package com.jzg.quotation.huanong.crawler.build;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -24,8 +26,6 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
     public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse, HuaNongCrawlerSaveResponse saveResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(orderNo);
-        quoteResultsVo.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
-        quoteResultsVo.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
 
         List<HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO> contract = huaNongCrawlerQuotedPriceResponse.getBusinessData()
                 .getContract();
@@ -44,9 +44,6 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
                 quoteResultsVo.setJyPolicyNumber(jyContract.get(0).getContractMain().getContractNo());
             }
         }
-
-
-
         Map<String, HuaNongCrawlerSaveResponse.BusinessDataDTO.ContractDTO> collect = saveResponse.getBusinessData()
                 .getContract()
                 .stream()
@@ -59,24 +56,76 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
 
             if (Risk.RISK_0507.getRiskCode().equals(contractDTO.getContractMain().getRiskCode())) {
                 // 交强险
-                buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contractDTO.getContractMain());
+                buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contractDTO.getContractMain(), contractDTO.getPlatFormMessage(), true);
                 quoteResultsVo.getCosts().setCiPremium(String.valueOf(contractDTO.getContractMain().getTotalPremium()));
                 quoteResultsVo.getCosts().setVvTax(String.valueOf(contractDTO.getTax().getSumTax()));
                 quoteResultsVo.setCiPolicyNumber(contractDTO1.getContractMain().getContractNo());
             } else {
                 // 商业险
                 buildKindInfo(quoteVo.getKindInfoVo(), contractDTO.getCoverage());
-                buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contractDTO.getContractMain());
+                buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contractDTO.getContractMain(), contractDTO.getPlatFormMessage(), false);
                 quoteResultsVo.getCosts().setBiPremium(String.valueOf(contractDTO.getContractMain().getBiTotalpremium()));
                 quoteResultsVo.setBiPolicyNumber(contractDTO1.getContractMain().getContractNo());
             }
         });
+        //设置评分
+        quoteResultsVo.setScoreVo(buildScoreVo(huaNongCrawlerQuotedPriceResponse));
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
+        quoteResultsVo.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
+        quoteResultsVo.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
         return quoteResultsVo;
     }
 
-    private static void buildRiskInfoVo(RiskInfoVo riskInfoVo, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO.ContractMainDTO contractMain) {
-        riskInfoVo.setStartDate(contractMain.getValidDate());
+    private static QuoteResultsVo.ScoreVo buildScoreVo(HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse) {
+        QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
+        HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO businessData = huaNongCrawlerQuotedPriceResponse.getBusinessData();
+
+        if (businessData == null) {
+            return scoreVo;
+        }
+
+        HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.PolicyInfoDTO policyInfo = businessData.getPolicyInfo();
+        HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.BusinessMainDTO businessMain = businessData.getBusinessMain();
+
+        String ultimateScoreBiCi = policyInfo != null ? policyInfo.getUltimateScoreBiCi() : "";
+        String hnscoreGroup = businessMain != null ? businessMain.getHnscoreGroup() : "";
+
+        scoreVo.setLossRation(ultimateScoreBiCi);
+
+        JSONArray scoreJson = new JSONArray();
+        scoreJson.add(new JSONObject()
+                .fluentPut("scoreName", "总评分")
+                .fluentPut("scoreKey", "mark")
+                .fluentPut("score", ultimateScoreBiCi));
+        scoreJson.add(new JSONObject()
+                .fluentPut("scoreName", "评分分组")
+                .fluentPut("scoreKey", "markgroup")
+                .fluentPut("score", hnscoreGroup));
+        scoreVo.setScoreJson(scoreJson);
+
+        return scoreVo;
+    }
+
+    private static void buildRiskInfoVo(RiskInfoVo riskInfoVo, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO.ContractMainDTO contractMain, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO.PlatFormMessageDTO platFormMessage, boolean isCi) {
+        String startDate = contractMain.getValidDate();
+        if (platFormMessage != null) {
+            if (isCi) {
+                String ciReinsureEndDate = platFormMessage.getCiReinsureEndDate();
+                if (org.springframework.util.StringUtils.hasText(ciReinsureEndDate)) {
+                    startDate = ciReinsureEndDate;
+                }
+            } else {
+                String biReinsureEndDate = platFormMessage.getBiReinsureEndDate();
+                if (org.springframework.util.StringUtils.hasText(biReinsureEndDate)) {
+                    if (biReinsureEndDate.length() == 10) {
+                        startDate = biReinsureEndDate + " 00:00:00";
+                    } else {
+                        startDate = biReinsureEndDate;
+                    }
+                }
+            }
+        }
+        riskInfoVo.setStartDate(startDate);
         riskInfoVo.setEndDate(contractMain.getExpiryDate());
     }
 

+ 1 - 1
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerCacheComponent.java

@@ -37,7 +37,7 @@ public class HuaNongCrawlerCacheComponent {
     // 账号锁定
     public static final String ACCOUNT_LOCKOUT = "huanong:account:lockout";
 
-    public static final long ACCOUNT_LOCKOUT_TIME = 12L;
+    public static final long ACCOUNT_LOCKOUT_TIME = 1l;
 
     // 登录锁
     public static final String LOGIN_LOCKOUT = "huanong:login:lockout:";

+ 2 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerGetTokenImpl.java

@@ -43,9 +43,9 @@ public class HuaNongCrawlerGetTokenImpl implements HuaNongCrawlerGetToken {
                               Predicate<T> validator) {
         try {
             T data = cacheSupplier.get();
-            if (validator.test(data)) {
+            /*if (validator.test(data)) {
                 return data;
-            }
+            }*/
             huaNongCrawlerQuoteProcessService.login(username, password,deviceId, false);
             T newData = cacheSupplier.get();
             if (!validator.test(newData)) {

+ 2 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java

@@ -5,7 +5,6 @@ import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.DistributedLockComponent;
 import com.jzg.quotation.commons.component.RedissonComponent;
-import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerCacheComponent;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerRequestComponent;
@@ -47,7 +46,8 @@ public class HuaNongCrawlerQuoteProcessServiceImpl implements HuaNongCrawlerQuot
     @Override
     public void login(String username, String password,String deviceId, boolean isFirst) {
         try {
-            distributedLockComponent.executeWithLock(HuaNongCrawlerCacheComponent.LOGIN_LOCKOUT + username, () -> authorization(username, password,deviceId, isFirst), 20, 30);
+            //distributedLockComponent.executeWithLock(HuaNongCrawlerCacheComponent.LOGIN_LOCKOUT + username, () -> authorization(username, password,deviceId, isFirst), 20, 30);
+            authorization(username, password,deviceId, isFirst);
         } catch (Exception e) {
             e.printStackTrace();
             throw new SystemException("登录失败");

+ 21 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java

@@ -34,6 +34,7 @@ import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.http.HttpHeaders;
 
 import java.time.Duration;
@@ -85,8 +86,26 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
         // 3 精确查询
         HuaNongCrawlerPrecisionServiceSearchRequest precisionServiceSearchRequest = new HuaNongCrawlerPrecisionServiceSearchRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), carInfoVo, carModelDTO);
-        HuaNongCrawlerPrecisionServiceSearchResponse precisionServiceSearchResponse = huaNongCrawlerRequestComponent.precisionServiceSearch(precisionServiceSearchRequest, httpHeaders);
-        HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModel = CarModelsFilterUtils.to(precisionServiceSearchResponse.getCarModel(), carInfoVo);
+        HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModel = new HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO();
+        try{
+            HuaNongCrawlerPrecisionServiceSearchResponse precisionServiceSearchResponse = huaNongCrawlerRequestComponent.precisionServiceSearch(precisionServiceSearchRequest, httpHeaders);
+            carModel = CarModelsFilterUtils.to(precisionServiceSearchResponse.getCarModel(), carInfoVo);
+        }catch (Exception e){
+            if(e.getMessage().contains("精友库缺少车型信息")){
+                BeanUtils.copyProperties(carModelDTO, carModel);
+                if(carModel.getFullCarData() == null){
+                    HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.FullCarDataDTO fullCarData = new HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.FullCarDataDTO();
+                    BeanUtils.copyProperties(carModelDTO.getFullCarData(), fullCarData);
+                    carModel.setFullCarData(fullCarData);
+                }
+                if(carModel.getPlatFormCar() == null){
+                    HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.PlatFormCarDTO platFormCarDTO = new HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.PlatFormCarDTO();
+                    BeanUtils.copyProperties(carModelDTO.getPlatFormCar(), platFormCarDTO);
+                    carModel.setPlatFormCar(platFormCarDTO);
+                }
+
+            }
+        }
 
         // 4 折旧价查询
         HuaNongCrawlerActualValueRequestRequest huaNongCrawlerActualValueRequest = new HuaNongCrawlerActualValueRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), carModel, carInfoVo);

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

@@ -724,7 +724,7 @@ public class UnifyOrderManager {
         insOrdersService.orderAfterUpdateOrderStatus(orderStatusVo.getOrder().getOrdersNo(), orderStatusResultVo);
         // 保存支付链接
         insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
-        insOrdersQrcodeService.saveQrCode(insOrders);
+        insOrdersQrcodeService.updateQrCode(insOrders);
         //////////////////////////////////////////新增营销抽奖活动////////////////////////////////////////////////
         // 承保(客户)、出单(业务员)
         if(orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED){

+ 1 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersQrcodeService.java

@@ -44,6 +44,7 @@ public interface InsOrdersQrcodeService extends IService<InsOrdersQrcode> {
         List<InsOrdersQrcode> insOrderQrCodes = lambdaQuery()
                 .eq(InsOrdersQrcode::getOrderno, orderNo)
                 .eq(InsOrdersQrcode::getQrcodeStatus, 1)
+                .orderByDesc(InsOrdersQrcode::getCreatetime)
                 .list();
         if (insOrderQrCodes.isEmpty()) {
 //            throw new SystemException("缴费二维码还未生成请点击二维码生成。");

+ 16 - 39
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java

@@ -88,52 +88,26 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         BigDecimal syPremium = insOrdersCosts.getSyPremium() == null ? BigDecimal.ZERO : insOrdersCosts.getSyPremium();
         BigDecimal jyPremium = insOrdersCosts.getJyPremium() == null ? BigDecimal.ZERO : insOrdersCosts.getJyPremium();
 
-        // 从页面获取【新比例】
-        BigDecimal newJqCommissionRatio = covertPercent(ptlAgreementCostRatioVo.getJqCommissionRatio());
-        BigDecimal newSyCommissionRatio = covertPercent(ptlAgreementCostRatioVo.getSyCommissionRatio());
-        BigDecimal newJyCommissionRatio = covertPercent(ptlAgreementCostRatioVo.getJyCommissionRatio());
-
-        BigDecimal newJqInletRatio = covertPercent(ptlAgreementCostRatioVo.getJqInletRatio());
-        BigDecimal newSyInletRatio = covertPercent(ptlAgreementCostRatioVo.getSyInletRatio());
-        BigDecimal newJyInletRatio = covertPercent(ptlAgreementCostRatioVo.getJyInletRatio());
-
-        BigDecimal newJqFollowRatio = covertPercent(ptlAgreementCostRatioVo.getJqFollowRatio());
-        BigDecimal newSyFollowRatio = covertPercent(ptlAgreementCostRatioVo.getSyFollowRatio());
-        BigDecimal newJyFollowRatio = covertPercent(ptlAgreementCostRatioVo.getJyFollowRatio());
-
-        BigDecimal newJqAddThrowRatio = covertPercent(ptlAgreementCostRatioVo.getJqAdditionalRatio());
-        BigDecimal newSyAddThrowRatio = covertPercent(ptlAgreementCostRatioVo.getSyAdditionalRatio());
-        BigDecimal newJyAddThrowRatio = covertPercent(ptlAgreementCostRatioVo.getJyAdditionalRatio());
-
-        BigDecimal newJqKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getJqKeepPointRatio());
-        BigDecimal newSyKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getSyKeepPointRatio());
-        BigDecimal newJyKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getJyKeepPointRatio());
-
-        BigDecimal newJqExportRatio = covertPercent(ptlAgreementCostRatioVo.getJqExportRatio());
-        BigDecimal newSyExportRatio = covertPercent(ptlAgreementCostRatioVo.getSyExportRatio());
-        BigDecimal newJyExportRatio = covertPercent(ptlAgreementCostRatioVo.getJyExportRatio());
-
-        BigDecimal newJqExportKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getJqExportKeepPointRatio());
-        BigDecimal newSyExportKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getSyExportKeepPointRatio());
-        BigDecimal newJyExportKeepPointRatio = covertPercent(ptlAgreementCostRatioVo.getJyExportKeepPointRatio());
+        // 更新对象中的比例字段
+        saveRatio(ptlAgreementCostRatioVo, insFeeOrders);
 
         // 核心:规则重新计算所有费用
         // 1. 交强险
         calculatePremiumByRule(insFeeOrders, "jq", jqPremium,
-                newJqCommissionRatio, newJqInletRatio, newJqFollowRatio,
-                newJqAddThrowRatio, newJqKeepPointRatio, newJqExportRatio, newJqExportKeepPointRatio,
+                insFeeOrders.getJqCommissionRatio(), insFeeOrders.getJqInletRatio(), insFeeOrders.getJqFollowRatio(),
+                insFeeOrders.getJqAdditionalRatio(), insFeeOrders.getJqKeepPointRatio(), insFeeOrders.getJqExportRatio(), insFeeOrders.getJqExportKeepPointRatio(),
                 withTax, TAX_RATE, SCALE);
 
         // 2. 商业险
         calculatePremiumByRule(insFeeOrders, "sy", syPremium,
-                newSyCommissionRatio, newSyInletRatio, newSyFollowRatio,
-                newSyAddThrowRatio, newSyKeepPointRatio, newSyExportRatio, newSyExportKeepPointRatio,
+                insFeeOrders.getSyCommissionRatio(), insFeeOrders.getSyInletRatio(), insFeeOrders.getSyFollowRatio(),
+                insFeeOrders.getSyAdditionalRatio(), insFeeOrders.getSyKeepPointRatio(), insFeeOrders.getSyExportRatio(), insFeeOrders.getSyExportKeepPointRatio(),
                 withTax, TAX_RATE, SCALE);
 
         // 3. 驾乘险
         calculatePremiumByRule(insFeeOrders, "jy", jyPremium,
-                newJyCommissionRatio, newJyInletRatio, newJyFollowRatio,
-                newJyAddThrowRatio, newJyKeepPointRatio, newJyExportRatio, newJyExportKeepPointRatio,
+                insFeeOrders.getJyCommissionRatio(), insFeeOrders.getJyInletRatio(), insFeeOrders.getJyFollowRatio(),
+                insFeeOrders.getJyAdditionalRatio(), insFeeOrders.getJyKeepPointRatio(), insFeeOrders.getJyExportRatio(), insFeeOrders.getJyExportKeepPointRatio(),
                 withTax, TAX_RATE, SCALE);
 
         // 重新统计总应收、总应付
@@ -144,7 +118,6 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         insFeeOrders.setTotalReceivablePremium(scale(totalReceivable, SCALE));
 
         // 保存比例
-        saveRatio(ptlAgreementCostRatioVo, insFeeOrders);
         this.updateById(insFeeOrders);
         return insFeeOrders;
     }
@@ -175,10 +148,14 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         BigDecimal commission = base.multiply(commissionRatio).setScale(scale, RoundingMode.HALF_EVEN);
         BigDecimal inlet = base.multiply(inletRatio).setScale(scale, RoundingMode.HALF_EVEN);
         BigDecimal follow = base.multiply(followRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal addThrow = base.multiply(addThrowRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal keepPoint = base.multiply(keepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal export = base.multiply(exportRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal exportKeepPoint = base.multiply(exportKeepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
+
+        // 加投直接乘
+        BigDecimal addThrow = premium.multiply(addThrowRatio).setScale(scale, RoundingMode.HALF_EVEN);
+        // 出口直接乘
+        BigDecimal export = premium.multiply(exportRatio).setScale(scale, RoundingMode.HALF_EVEN);
+        BigDecimal exportKeepPoint = premium.multiply(exportKeepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
+        // 留点比例直接乘
+        BigDecimal keepPoint = premium.multiply(keepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
 
         // 赋值到实体(自动匹配 jq / sy / jy)
         if ("jq".equals(type)) {

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

@@ -64,6 +64,7 @@ import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import org.apache.commons.beanutils.BeanUtils;
+import org.apache.http.util.TextUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -942,12 +943,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         InsOrdersQrcode insOrdersQrcode = new InsOrdersQrcode();
         insOrdersQrcode.setId(IdGenerate.nextId());
         insOrdersQrcode.setOrderno(underwritingResultsVo.getOrdersNo());
-        String paylink = "";
+        String paylink = insOrders.getPayLink();
         if (isHttpUrl(insOrders.getPayLink())) {
             paylink = insOrders.getPayLink().replace("{", "").replace("}", "");
             insOrdersQrcode.setJumpUrl(paylink);
         } else {
-            if (paylink.contains("data:image/jpg;base64,")) {
+            if (!TextUtils.isEmpty(paylink) && paylink.contains("data:image/jpg;base64,")) {
                 paylink = paylink.replace("data:image/jpg;base64,", "");
             }
             insOrdersQrcode.setJumpUrl(paylink);

+ 23 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/ConvertUtil.java

@@ -0,0 +1,23 @@
+package com.jzg.quotation.taikang.crawler;
+
+public class ConvertUtil {
+
+    /**
+     * 安全地将Object转换为Double,避免空值导致的NumberFormatException
+     * @param value 待转换的数值对象
+     * @return 转换后的Double值,如果输入为null则返回0.0
+     */
+    public static Double convertToDouble(Object value) {
+        if (value == null) {
+            return 0.0;
+        }
+        if (value instanceof Number) {
+            return ((Number) value).doubleValue();
+        }
+        try {
+            return Double.parseDouble(value.toString());
+        } catch (NumberFormatException e) {
+            return 0.0;
+        }
+    }
+}

+ 26 - 4
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java

@@ -1,12 +1,11 @@
 package com.jzg.quotation.taikang.crawler.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
-import com.jzg.commons.entity.quote.vo.CarInfoVo;
-import com.jzg.commons.entity.quote.vo.KindInfoVo;
-import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.commons.entity.quote.vo.RiskInfoVo;
+import com.jzg.commons.entity.quote.vo.*;
 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;
@@ -17,6 +16,7 @@ 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.entity.DetectLoginRequest;
+import com.jzg.quotation.taikang.crawler.ConvertUtil;
 import com.jzg.quotation.taikang.crawler.cache.RedisCacheUtil;
 import com.jzg.quotation.taikang.crawler.client.AESDecryptor;
 import com.jzg.quotation.taikang.crawler.model.TKLoginSession;
@@ -38,6 +38,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_TKIC)
 @RequiredArgsConstructor
@@ -232,6 +233,27 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         //缓存报价书据数据
         redisCacheUtil.setPreciseInitResult(preciseInitResult, quoteResultsVo.getOrdersNo());
+        //评分
+        JSONArray scoreJson = new JSONArray();
+        scoreJson.add(new JSONObject()
+                .fluentPut("scoreName","保单综合评分")
+                .fluentPut("scoreKey","businessScore")
+                .fluentPut("score", preciseInitResult.getBusinessScore()));
+        scoreJson.add(new JSONObject()
+                .fluentPut("scoreName","风险评分")
+                .fluentPut("scoreKey","riskScore")
+                .fluentPut("score", preciseInitResult.getRiskScore()));
+        quoteResultsVo.getScoreVo().setScoreJson(scoreJson);
+        //欠税信息
+        if (null != preciseInitResult.getCarTax()) {
+            List<TaxInfoVo> taxArrearsList = new ArrayList<>();
+            TaxInfoVo taxArrear = new TaxInfoVo();
+            taxArrear.setYears(preciseInitResult.getCarTax().getRepaymentYear());
+            taxArrear.setTaxDefault(ConvertUtil.convertToDouble(preciseInitResult.getCarTax().getTax()));
+            taxArrear.setLateFee(ConvertUtil.convertToDouble(preciseInitResult.getCarTax().getSumtaxOverdue()));
+            taxArrearsList.add(taxArrear);
+            quoteResultsVo.setTaxVo(taxArrearsList);
+        }
 
         return quoteResultsVo;
     }

+ 2 - 1
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/build/ZmCrawlerSubmitResultVoBuild.java

@@ -17,6 +17,7 @@ import java.util.function.BiConsumer;
 
 public final class ZmCrawlerSubmitResultVoBuild {
     public static UnderwritingResultsVo build(ZmCrawlerSubmitResponse submitResponse, ZmCrawlerOrder zmCrawlerOrder, UnderwritingResultsVo vo) {
+        vo.setCompanyOrderNo(zmCrawlerOrder.getBussinessNo());
         if (submitResponse == null || submitResponse.getHead() == null) {
             vo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             vo.setUnderwritingResult("请求参数为空");
@@ -29,7 +30,7 @@ public final class ZmCrawlerSubmitResultVoBuild {
             return vo;
         }
 
-        // 核保成功 获取投保单号列表
+        // 核保成功 人工处理 获取投保单号列表
         List<ZmCrawlerSubmitResponse.AppliResultDTO> appliResults = submitResponse.getAppliResult();
         if (CollectionUtils.isEmpty(appliResults) || CollectionUtils.isEmpty(appliResults.get(0).getSubContractNos())) {
             return vo;

+ 1 - 1
tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

@@ -321,7 +321,7 @@
             su.identity_time_end,
             (select GROUP_CONCAT(type_attr SEPARATOR ',' ) from sys_user_jzg_info_salesman where sys_user_jzg_info_id = suji.id) as partnerTypeAttr,
             IF(EXISTS ( SELECT id FROM sys_user_jzg_info_salesman  WHERE type_attr = 3 AND sys_user_jzg_info_id = suji.id),
-                    (SELECT GROUP_CONCAT(grade SEPARATOR ',' ) FROM partner_user WHERE user_id = suji.user_id), NULL ) AS gradeList
+                    (SELECT GROUP_CONCAT(grade SEPARATOR ',' ) FROM partner_user WHERE grade IN (1,2,3,4) and user_id = suji.id), NULL ) AS gradeList
         FROM
             sys_user_jzg_info suji
                 LEFT JOIN sys_user su ON suji.user_id = su.id