Bladeren bron

Merge branch 'master' into wrq_dev

# Conflicts:
#	tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
wangrq 3 maanden geleden
bovenliggende
commit
eda333ee74
43 gewijzigde bestanden met toevoegingen van 393 en 110 verwijderingen
  1. 2 1
      authentication/src/main/java/com/jzg/config/SecurityConfig.java
  2. 2 0
      authentication/src/main/java/com/jzg/filter/TokenAuthenticationFilter.java
  3. 6 4
      commons/src/main/java/com/jzg/commons/config/DataPermissionInterceptor.java
  4. 3 0
      commons/src/main/java/com/jzg/commons/core/page/HttpResult.java
  5. 3 1
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatch.java
  6. 2 0
      commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchRulesAttrLink.java
  7. 3 0
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java
  8. 2 0
      commons/src/main/java/com/jzg/commons/entity/enums/MessageCodeEnum.java
  9. 2 1
      commons/src/main/java/com/jzg/commons/entity/enums/MessageSourceEnum.java
  10. 2 1
      commons/src/main/java/com/jzg/commons/entity/enums/MessageTopicEnum.java
  11. 1 0
      commons/src/main/java/com/jzg/commons/entity/enums/MessageTypeEnum.java
  12. 3 0
      commons/src/main/java/com/jzg/commons/entity/vo/SysUserAccountVo.java
  13. 8 0
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  14. 6 2
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/RuleController.java
  15. 7 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiApiRequestImpl.java
  16. 12 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java
  17. 3 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java
  18. 5 7
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/build/GuoRenCrawlerQuoteResultsVoBuild.java
  19. 1 5
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/entity/response/GuoRenCrawlerQueryByVinNoData.java
  20. 58 9
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java
  21. 1 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerCacheComponent.java
  22. 2 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerGetTokenImpl.java
  23. 2 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java
  24. 21 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  25. 59 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/message/LotteryMessage.java
  26. 34 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/LotteryMessageTemplate.java
  27. 0 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/OrderMessageTemplate.java
  28. 91 26
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  29. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersQrcodeService.java
  30. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  31. 5 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/TKCarModel.java
  32. 1 1
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
  33. 4 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerBrandNameQueryData.java
  34. 6 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java
  35. 2 1
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/build/ZmCrawlerSubmitResultVoBuild.java
  36. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/SchemeController.java
  37. 0 10
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java
  38. 3 2
      tenant/organization/src/main/java/com/jzg/organization/service/PtlSchemeService.java
  39. 4 2
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  40. 12 11
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java
  41. 8 9
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  42. 2 1
      tenant/organization/src/main/resources/mapper/SysUserAccountMapper.xml
  43. 2 1
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoBankCardMapper.xml

+ 2 - 1
authentication/src/main/java/com/jzg/config/SecurityConfig.java

@@ -93,7 +93,8 @@ public class SecurityConfig {
         http.authorizeHttpRequests(auth -> auth
                         .requestMatchers("/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/webjars/**", "/favicon.ico",
                                 "/auth/login","/auth/captchaById","/auth/register","/sendSmsCode","/appLogin","/smsCodeLogin","/auth/publicKeyExchange","/appAuth/smsCodeLogin","/send/sendSmsCode",
-                                "/appAuth/appLogin","/auth/sendSmsCode","/auth/forgotPassword","/appAuth/partnerAppLogin").permitAll()
+                                "/appAuth/appLogin","/auth/sendSmsCode","/auth/forgotPassword","/appAuth/partnerAppLogin",
+                                "/supplementOrder/getOrderDetail","/dict/get").permitAll()
                         .anyRequest().authenticated()  // 其他接口需认证
                 )
 //                .formLogin((form) -> form

+ 2 - 0
authentication/src/main/java/com/jzg/filter/TokenAuthenticationFilter.java

@@ -51,6 +51,8 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
         doList.add("/auth/forgotPassword");
         doList.add("/appAuth/partnerAppLogin");
         doList.add("/system/sysListAccountLinking");
+        doList.add("/supplementOrder/getOrderDetail");
+        doList.add("/dict/get");
         String path = request.getRequestURI();
         for (String pattern : doList) {
             // 使用正则表达式匹配  .* 匹配所有以 pattern 开头的路径

+ 6 - 4
commons/src/main/java/com/jzg/commons/config/DataPermissionInterceptor.java

@@ -58,10 +58,12 @@ public class DataPermissionInterceptor implements MultiDataPermissionHandler {
     }
 
     private boolean shouldIgnoreTable(String sql) throws JSQLParserException {
-        for (String table : dataScopeProperties.getTables()) {
-            String regex = "(?i)\\b" + table + "\\b"; // (?i) 忽略大小写,\\b 表示单词边界
-            if (sql.matches(".*" + regex + ".*")) {
-                return true;
+        if(dataScopeProperties.getTables() != null) {
+            for (String table : dataScopeProperties.getTables()) {
+                String regex = "(?i)\\b" + table + "\\b"; // (?i) 忽略大小写,\\b 表示单词边界
+                if (sql.matches(".*" + regex + ".*")) {
+                    return true;
+                }
             }
         }
         return false;

+ 3 - 0
commons/src/main/java/com/jzg/commons/core/page/HttpResult.java

@@ -2,6 +2,7 @@ package com.jzg.commons.core.page;
 
 
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
@@ -10,6 +11,8 @@ import java.io.Serializable;
 
 public class HttpResult<T> implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 6110438502593696250L;
     private int code = 200;
 
     private String msg;

+ 3 - 1
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatch.java

@@ -8,7 +8,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.io.Serializable;
+import java.io.Serial;
 
 @Data
 @NoArgsConstructor
@@ -16,6 +16,8 @@ import java.io.Serializable;
 @Schema(description = "协议调度实体")
 public class PtlAgreementDispatch extends BaseModel {
 
+    @Serial
+    private static final long serialVersionUID = 1408696065054280481L;
     @Schema(description = "id")
     private String id;
 

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/dispatch/dto/PtlAgreementDispatchRulesAttrLink.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -12,6 +13,7 @@ import java.util.List;
 @Schema(description = "协议调度规则属性关联实体")
 public class PtlAgreementDispatchRulesAttrLink implements Serializable {
 
+    @Serial
     private static final long serialVersionUID = 1000183859846970741L;
 
     @Schema(description = "id")

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java

@@ -82,6 +82,9 @@ public class SysUserJzgInfoBankCardDto implements Serializable {
     @Schema(description = "审核人")
     private String auditBy;
 
+    @Schema(description = "管理员名称")
+    private String leaderName;
+
     @Schema(description = "审核记录列表")
     private List<SysUserJzgInfoBankCardRecord> sysUserJzgInfoBankCardRecordList;
 }

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/enums/MessageCodeEnum.java

@@ -34,6 +34,8 @@ public enum MessageCodeEnum {
     TEMPLATE_11("template_11","发布通知消息(新增业务员) 消息"),
     /**发布通知消息(新增业务员) 消息*/
     TEMPLATE_12("template_12","发布通知消息(新增合伙人) 消息"),
+
+    TEMPLATE_13("template_13","发布抽奖消息"),
     ;
 
     private final String code;

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/enums/MessageSourceEnum.java

@@ -12,7 +12,8 @@ public enum MessageSourceEnum {
 
     ORDERSTATUS("orderStatus", "订单状态变更"),
     ADDISSUEUSER("addIssueUser", "业务员新增"),
-    ORDERREVIEW("orderReview", "补录订单审核");
+    ORDERREVIEW("orderReview", "补录订单审核"),
+    LOTTERY("lottery","抽奖次数");
 
     private final String code;
 

+ 2 - 1
commons/src/main/java/com/jzg/commons/entity/enums/MessageTopicEnum.java

@@ -11,7 +11,8 @@ import lombok.Getter;
 public enum MessageTopicEnum {
 
     ROCKET_ORDER("rocket_order", "订单主题"),
-    ROCKET_USER("rocket_user", "用户主题");
+    ROCKET_USER("rocket_user", "用户主题"),
+    ROCKET_SYSTEM("rocket_system","系统主题");
 
     private final String code;
 

+ 1 - 0
commons/src/main/java/com/jzg/commons/entity/enums/MessageTypeEnum.java

@@ -12,6 +12,7 @@ public enum MessageTypeEnum {
 
     ORDER("ORDER", "订单类型"),
     USER("USER", "用户类型"),
+    LOTTERY("LOTTERY","抽奖类型")
     ;
 
     private final String code;

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/vo/SysUserAccountVo.java

@@ -39,4 +39,7 @@ public class SysUserAccountVo extends BaseModel {
 
     @Schema(description = "未付总金额")
     private BigDecimal sumAmountUnpaid;
+
+    @Schema(description = "管理员名称")
+    private String leaderName;
 }

+ 8 - 0
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -87,6 +87,8 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
 
     @Autowired
     SysUserService sysUserService;
+    @Autowired
+    private SysSystemMapper sysSystemMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -570,6 +572,12 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
         if(Objects.nonNull(busOne)){
             sysSystemBusPerms.setId(busOne.getId());
         }
+
+        // 同步 账号互通
+        SysSystem sysSystem = sysSystemMapper.selectOne(new LambdaQueryWrapper<SysSystem>().eq(SysSystem::getSysCode, sysSystemBusPermsVo.getSystemCode()));
+        sysSystem.setAccountLinking(sysSystemBusPerms.getAccountLinking());
+        sysSystemMapper.insertOrUpdate(sysSystem);
+
         sysSystemBusPermsMapper.insertOrUpdate(sysSystemBusPerms);
         sysSystemBusPermsVo.setId(sysSystemBusPermsVo.getId());
         List<SysSystemBusPermsLink> sysSystemBusPermsLink = SysSystemBusPermsLink.getSystemBusPermsLink(sysSystemBusPermsVo);

+ 6 - 2
tenant/costsorrule/src/main/java/com/jzg/costsorrule/controller/RuleController.java

@@ -1,12 +1,11 @@
 package com.jzg.costsorrule.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchRulesAttrLink;
-import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
 import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.jzg.commons.entity.scheme.po.PtlSchemeRulesAttrLink;
@@ -15,6 +14,8 @@ import com.jzg.costsorrule.model.RuleAttrLinkVo;
 import com.jzg.commons.entity.costs.vo.ValidateSchemeRuleVo;
 import com.jzg.costsorrule.service.RuleService;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -37,6 +38,8 @@ import java.util.stream.Collectors;
 @RequestMapping("/validate/rule")
 public class RuleController extends BaseController {
 
+    private static final Logger log = LoggerFactory.getLogger(RuleController.class);
+
     @Autowired
     private RuleService ruleService;
 
@@ -81,6 +84,7 @@ public class RuleController extends BaseController {
      */
     @PostMapping(value = "/validateDispatchRule")
     public HttpResult validateSchemeRule(@RequestBody ValidateDispatchRuleVo validateDispatchRuleVo){
+        log.info("校验调度规则:校验调度规则=[{}]", JSONUtil.toJsonStr(validateDispatchRuleVo));
         Map<String, List<PtlAgreementDispatchRulesAttrLink>> maps = new HashMap<>();
         for (ValidateDispatchRuleVo.DispatchAttrVo dispatchAttrVo : validateDispatchRuleVo.getDispatchAttrVos()){
             for (ValidateDispatchRuleVo.Section section : dispatchAttrVo.getSections()) {

+ 7 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiApiRequestImpl.java

@@ -11,6 +11,7 @@ import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 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.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.MinioUtils;
@@ -22,14 +23,11 @@ import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
 import com.jzg.quotation.chengtai.api.entity.constants.CarActualValueEnum;
 import com.jzg.quotation.chengtai.api.entity.request.*;
 import com.jzg.quotation.chengtai.api.entity.response.*;
-import com.jzg.quotation.chengtai.api.properties.ChengTaiApiProperties;
-import com.jzg.quotation.chengtai.api.repository.ChengTaiApiOrderRepository;
 import com.jzg.quotation.chengtai.api.service.ChengTaiApiRequest;
-import com.jzg.quotation.chengtai.api.service.ChengTaiCrawlerOrderService;
 import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
-import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
@@ -438,6 +436,11 @@ public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
         return orderStatusResultVo;
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return true;
+    }
+
     @Data
     static class CheckCodeResp {
 

+ 12 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java

@@ -25,6 +25,7 @@ import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.chengtai.crawler.utils.ZipImageExample;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
@@ -268,4 +269,15 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
 
         return new OrderStatusResultVo();
     }
+
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        try {
+            chengTaiCrawlerQuoteProcessService.login(detectLoginRequest.getUsername(), detectLoginRequest.getPassword());
+            return true;
+
+        } catch (Exception ignored) {
+            throw new SystemException("登录失败");
+        }
+    }
 }

+ 3 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/entity/DetectLoginRequest.java

@@ -3,6 +3,9 @@ package com.jzg.quotation.commons.entity;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+/**
+ * @author Administrator
+ */
 @Data
 @NoArgsConstructor
 public class DetectLoginRequest {

+ 5 - 7
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/crawler/build/GuoRenCrawlerQuoteResultsVoBuild.java

@@ -6,21 +6,19 @@ import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.constants.quote.enums.quote.KindCode;
 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.aggregated.QuoteResultsVo;
-import com.jzg.commons.util.StringUtils;
-import com.jzg.quotation.guoren.api.constant.enums.GuoRenRiskCode;
-import com.jzg.quotation.guoren.api.entity.Response.PremiumResponse;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerBaseResponse;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerCalculationPremiumData;
 import com.jzg.quotation.guoren.crawler.entity.response.GuoRenCrawlerProposalNoSaveData;
-import me.chanjar.weixin.mp.bean.card.BaseInfo;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+/**
+ * @author Administrator
+ */
 public final class GuoRenCrawlerQuoteResultsVoBuild {
 
     public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, GuoRenCrawlerCalculationPremiumData calculationPremium, GuoRenCrawlerProposalNoSaveData proposalNoSave) {
@@ -71,13 +69,13 @@ public final class GuoRenCrawlerQuoteResultsVoBuild {
         //光博评分
         scoreJson.add(new JSONObject()
                 .fluentPut("scoreName", "交强光博分")
-                .fluentPut("scoreKey", "score")
+                .fluentPut("scoreKey", "jqScore")
                 .fluentPut("score", calculationPremium.getCi().getPrpTmainRate().getBillcomeGroup()));
 
         if (calculationPremium.getBi().getPrpTmainRate() != null) {
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName", "商业光博分")
-                    .fluentPut("scoreKey", "score")
+                    .fluentPut("scoreKey", "syScore")
                     .fluentPut("score", calculationPremium.getBi().getPrpTmainRate().getBillcomeGroup()));
         }
 

+ 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

+ 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);

+ 59 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/message/LotteryMessage.java

@@ -0,0 +1,59 @@
+package com.jzg.quotation.summary.consumer.message;
+
+import com.jzg.commons.entity.po.SysMessageTemplate;
+import com.jzg.domain.BaseMessage;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单消息模板
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@NoArgsConstructor
+public class LotteryMessage extends BaseMessage {
+
+
+    /**
+     * 发送时间
+     */
+    private LocalDateTime sendTime;
+
+    /**
+     * 发送标题
+     */
+    private String title;
+
+    /**
+     * 发送内容
+     */
+    private String body;
+
+    /**
+     * 接收用户
+     */
+    private String receiverUser;
+
+    /**
+     * 跳转链接
+     */
+    private String linkUrl;
+
+    /**
+     * token鉴权
+     */
+    private String token;
+
+    /**
+     * 模板code
+     */
+    private String tplCode;
+
+
+}

+ 34 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/LotteryMessageTemplate.java

@@ -0,0 +1,34 @@
+package com.jzg.quotation.summary.consumer.template;
+
+
+import com.jzg.commons.entity.enums.MessageTopicEnum;
+import com.jzg.commons.entity.enums.MessageTypeEnum;
+import com.jzg.quotation.summary.consumer.message.LotteryMessage;
+import com.jzg.templete.RocketMQEnhanceTemplate;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.stereotype.Component;
+
+
+import java.time.LocalDateTime;
+
+/**
+ * @author dongxin
+ * 抽奖类发送消息模板工具类
+ */
+@Component
+public class LotteryMessageTemplate extends RocketMQEnhanceTemplate {
+
+
+
+    public LotteryMessageTemplate(RocketMQTemplate template) {
+        super(template);
+    }
+
+    public SendResult addLottery(String userId) {
+        LotteryMessage message = new LotteryMessage();
+        message.setReceiverUser(userId);
+        SendResult result = send(MessageTopicEnum.ROCKET_SYSTEM.getCode(), MessageTypeEnum.LOTTERY.getCode(), message);
+        return result;
+    }
+}

+ 0 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/consumer/template/OrderMessageTemplate.java

@@ -4,10 +4,8 @@ import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.enums.MessageSourceEnum;
 import com.jzg.commons.entity.enums.MessageTopicEnum;
 import com.jzg.commons.entity.enums.MessageTypeEnum;
-import com.jzg.commons.entity.po.SysMessageTemplate;
 import com.jzg.quotation.summary.consumer.message.OrderMessage;
 import com.jzg.templete.RocketMQEnhanceTemplate;
-import jakarta.validation.constraints.NotNull;
 import org.apache.rocketmq.client.producer.SendResult;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.stereotype.Component;

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

@@ -39,9 +39,7 @@ import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
-import com.jzg.quotation.commons.service.GetCaptchaBaseService;
 import com.jzg.quotation.commons.service.QuotationBaseService;
-import com.jzg.quotation.commons.service.QuotationCrawlerBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.guoren.crawler.service.GuoRenCrawlerRequest;
 import com.jzg.quotation.summary.aop.AuditVerification;
@@ -244,7 +242,7 @@ public class UnifyOrderManager {
         String systemCode = getSystemCode();
         String companyName = CompanyConstants.getCompanyNameByCode(esmInsCompanyHttpResult.getData().getCompanyCode());
 
-
+        log.info("查询保司配置的协议:systemCode=[{}],companyId=[{}]",systemCode, esmInsCompanyHttpResult.getData().getId());
         HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(esmInsCompanyHttpResult.getData().getId(), systemCode);
         if (CollUtil.isEmpty(byCompanyId.getData())) {
             AssertionUtils.isFail(true, "保司未配置协议");
@@ -699,7 +697,7 @@ public class UnifyOrderManager {
     @Operation(summary = "获取订单状态")
     @PostMapping("/getOrderStatus")
     public HttpResult getOrderStatus(@RequestBody OrderStatusVo orderStatusVo) throws Exception {
-
+        log.info("更新订单状态:orderStatusVo=[{}]",JSONUtil.toJsonStr(orderStatusVo));
         InsOrders insOrders = insOrdersService.getById(orderStatusVo.getOrder().getOrdersNo());
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId());
@@ -721,30 +719,97 @@ public class UnifyOrderManager {
         InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getByOrderId(insOrders.getId());
         orderStatusVo.setInsOrdersAccidentalDriving(insOrdersAccidentalDriving);
         OrderStatusResultVo orderStatusResultVo = orderStatusService.queryOrderState(orderStatusVo);
-
+        log.info("订单状态orderStatusResultVo=[{}]",JSONUtil.toJsonStr(orderStatusResultVo));
         // 保存状态查询结果
         insOrdersService.orderAfterUpdateOrderStatus(orderStatusVo.getOrder().getOrdersNo(), orderStatusResultVo);
         // 保存支付链接
         insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
-        insOrdersQrcodeService.saveQrCode(insOrders);
+        insOrdersQrcodeService.updateQrCode(insOrders);
         //////////////////////////////////////////新增营销抽奖活动////////////////////////////////////////////////
         // 承保(客户)、出单(业务员)
-        if (orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED) {
-            // 远程调用活动列表
-            // 匹配规则
-            // 规则一:累计出单()次,可得()次抽奖机会
-            // 规则二:累计出单()次,可得()次抽奖机会
-            // 下一个规则的出单次数不能不上一个规则出单次数小
-            HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
-            if (result == null || result.getCode() != 200 || result.getData() == null) {
-                log.error("活动列表异常");
-            } else {
-                for (LotteryActivityVO activity : result.getData()) {
-                    // 检查活动是否有效
-                    if (!LocalDate.now().isBefore(activity.getActivityStartTime())
-                            && !LocalDate.now().isAfter(activity.getActivityEndTime())) {
-                        continue;
-                    }
+        if(orderStatusResultVo.getOrderStatus() == InsOrderStatusEnum.UNDERWRITED){
+            doSomethingAfterUnderwited(insOrders);
+        }
+        return HttpResult.ok("状态刷新成功");
+    }
+
+    /**
+     * 模拟承保(跳过实际付款操作)
+     *
+     * @author lipf
+     * @date 2026/5/19 12:00
+     */
+    @Operation(summary = "模拟承保(跳过实际付款操作)")
+    @PostMapping("/mockUnderwited")
+    public HttpResult<String> mockUnderwited(@RequestBody OrderStatusVo orderStatusVo) throws Exception {
+        log.info("模拟承保(跳过实际付款操作). orderStatusVo=[{}]", JSONUtil.toJsonStr(orderStatusVo));
+        InsOrders insOrders = insOrdersService.getById(orderStatusVo.getOrder().getOrdersNo());
+        if(!"4".equals(insOrders.getOrderStatus())){
+            return HttpResult.error("只能对待缴费的订单进行模拟承保");
+        }
+        AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
+        HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId());
+        orderStatusVo.getOrder().setAgreementId(insOrders.getAgreementId());
+        orderStatusVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
+        orderStatusVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
+        orderStatusVo.getOrder().setCompanyOrderNo(insOrders.getCompanyOrderNo());
+        orderStatusVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
+        orderStatusVo.setInsOrders(insOrders);
+        //获取保司实体
+        QuotationBaseService orderStatusService = companyFactory.getOrderStatusService(orderStatusVo);
+        orderStatusVo.setCarInfo(insOrdersCarInfoService.getByOrderId(insOrders.getId()));
+        InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
+        orderStatusVo.setInsOrdersPolicy(insOrdersPolicy);
+        List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.getByOrderId(insOrders.getId());
+        orderStatusVo.setInsOrdersCarUserInfoList(insOrdersCarUserInfos);
+        InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
+        orderStatusVo.setInsOrdersCosts(insOrdersCosts);
+        InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getByOrderId(insOrders.getId());
+        orderStatusVo.setInsOrdersAccidentalDriving(insOrdersAccidentalDriving);
+        //OrderStatusResultVo orderStatusResultVo = orderStatusService.queryOrderState(orderStatusVo);
+        //log.info("模拟承保订单状态状态查询orderStatusResultVo=[{}]",JSONUtil.toJsonStr(orderStatusResultVo));
+        // 模拟接口请求成功
+        OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
+        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+        // 保存状态查询结果
+        try{
+            // 设置订单状态为 已承保(5)
+            InsOrders insOrdersItem = new  InsOrders();
+            insOrdersItem.setOrderStatus("5");
+            insOrdersItem.setAuditStatus(1);
+            insOrdersItem.setId(insOrders.getId());
+            insOrdersService.updateById(insOrdersItem);
+            insOrdersService.orderAfterUpdateOrderStatus(orderStatusVo.getOrder().getOrdersNo(), orderStatusResultVo);
+        }catch (Exception e){
+            log.error("承保后,更新状态,进行后续逻辑异常. orderStatusResultVo=[{}]",JSONUtil.toJsonStr(orderStatusResultVo), e);
+        }
+
+        //this.doSomethingAfterUnderwited(insOrders);
+        return HttpResult.ok("模拟承保(跳过实际付款操作)");
+    }
+
+    /**
+     * 订单承保后执行一些操作
+     *
+     * @author lipf
+     * @date 2026/5/19 11:59
+     */
+    private void doSomethingAfterUnderwited(InsOrders insOrders) {
+        // 远程调用活动列表
+        // 匹配规则
+        // 规则一:累计出单()次,可得()次抽奖机会
+        // 规则二:累计出单()次,可得()次抽奖机会
+        // 下一个规则的出单次数不能不上一个规则出单次数小
+        HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
+        if (result == null || result.getCode() != 200 || result.getData() == null) {
+            log.error("活动列表异常");
+        } else {
+            for (LotteryActivityVO activity : result.getData()) {
+                // 检查活动是否有效
+                if (!LocalDate.now().isBefore(activity.getActivityStartTime())
+                        && !LocalDate.now().isAfter(activity.getActivityEndTime())) {
+                    continue;
+                }
 
                     if (activity.getLocalActivityTables() == null) {
                         continue;
@@ -831,8 +896,8 @@ public class UnifyOrderManager {
                 }
             }
         }
-        return HttpResult.ok("状态刷新成功");
-    }
+        //return HttpResult.ok("状态刷新成功");
+
 
     @OrderOperationLog(
             module = "车险订单",
@@ -844,7 +909,7 @@ public class UnifyOrderManager {
     )
     @Operation(summary = "获取保单")
     @PostMapping("/downloadPolicy")
-    public HttpResult downloadPolicy(@RequestBody DownloadPolicyVo downloadPolicyVo) {
+    public HttpResult downloadPolicy(@RequestBody DownloadPolicyVo downloadPolicyVo) throws IOException {
         //获取保司实体
         InsOrders insOrders = insOrdersService.getById(downloadPolicyVo.getOrder().getOrdersNo());
         InsOrdersCarInfo carInfo = insOrdersCarInfoService.getByOrderId(insOrders.getId());
@@ -908,7 +973,7 @@ public class UnifyOrderManager {
         return HttpResult.ok(insOrdersPdfUrl);
     }
 
-    @PostMapping("test")
+    @PostMapping("login")
     @Operation(summary = "登录")
     public HttpResult login(@RequestBody LoginBase loginBase) {
         zhongMeiCrawlerRequest.login(loginBase);

+ 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("缴费二维码还未生成请点击二维码生成。");

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

@@ -942,7 +942,7 @@ 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);

+ 5 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/TKCarModel.java

@@ -139,4 +139,9 @@ public class TKCarModel extends UnknownFieldEntity implements CarModelsFilter {
         }
         return replacementValue1;
     }
+
+    @Override
+    public String getSeatCount(){
+        return null;
+    }
 }

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

@@ -660,7 +660,7 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
 
     @Override
     public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
-        return false;
+        return true;
     }
 
     public static void main(String[] args) {

+ 4 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerBrandNameQueryData.java

@@ -632,6 +632,10 @@ public class TaiPingCrawlerBrandNameQueryData implements Serializable {
         @JsonProperty("thirdRunRoute")
         private String thirdRunRoute;
 
+        @Override
+        public String getSeatCount(){
+            return String.valueOf(seatCount);
+        }
 
     }
 }

+ 6 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java

@@ -6,6 +6,7 @@ import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.taiping.crawler.build.TaiPingCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.taiping.crawler.component.TaiPingCrawlerCacheComponent;
@@ -127,4 +128,9 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
         return null;
     }
 
+    @Override
+    public boolean detectLogin(DetectLoginRequest detectLoginRequest) {
+        return true;
+    }
+
 }

+ 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/java/com/jzg/organization/controller/SchemeController.java

@@ -82,7 +82,7 @@ public class SchemeController {
 
     @Operation(summary = "规则过滤保险公司")
     @PostMapping("/ruleFilterCompany")
-    public HttpResult ruleFilterCompany(@RequestBody SchemeRuleFilterVo schemeRuleFilterVo){
+    public HttpResult<List<PtlAgreementInsCompanyVo>> ruleFilterCompany(@RequestBody SchemeRuleFilterVo schemeRuleFilterVo){
         List<PtlAgreementInsCompanyVo> ptlAgreementInsCompanyVos = ptlSchemeService.ruleFilterCompany(schemeRuleFilterVo);
         return HttpResult.ok(ptlAgreementInsCompanyVos);
     }

+ 0 - 10
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementDispatchService.java

@@ -1,22 +1,12 @@
 package com.jzg.organization.service;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
-import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAfterAction;
 import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchQuery;
 import com.jzg.commons.entity.agreement.dispatch.vo.PtlAgreementDispatchVo;
-import com.jzg.commons.entity.dto.*;
-import com.jzg.commons.entity.po.PtlAgreement;
-import com.jzg.commons.entity.po.PtlAgreementCost;
-import com.jzg.commons.entity.vo.AgreementInfoVo;
-import com.jzg.commons.entity.vo.AgreementUserVo;
-import com.jzg.commons.entity.vo.AgreementVo;
-import com.jzg.commons.entity.vo.UpAndDownVo;
 
 import java.util.List;
-import java.util.Map;
 
 /**
 * 协议调度service层

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/service/PtlSchemeService.java

@@ -68,8 +68,9 @@ public interface PtlSchemeService extends IService<PtlScheme> {
 
     /**
      * 规则过滤保险公司
-     * @param schemeRuleFilterVo
-     * @return
+     *
+     * @param schemeRuleFilterVo 过滤保险公司的条件
+     * @return List<PtlAgreementInsCompanyVo> 满足报价要求的保险公司以及其下的协议
      */
     List<PtlAgreementInsCompanyVo> ruleFilterCompany(SchemeRuleFilterVo schemeRuleFilterVo);
 

+ 4 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -137,8 +137,10 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
         // 校验ptlAgreementCostTypeList 数据  exportKeepPointRatio 不能大于 export
         if (!CollectionUtils.isEmpty(ptlAgreementCostEnd.getPtlAgreementCostTypeList())) {
             for (PtlAgreementCostEnd.PtlAgreementCostTypeDto ptlAgreementCostTypeDto : ptlAgreementCostEnd.getPtlAgreementCostTypeList()) {
-                if (ptlAgreementCostTypeDto.getExportKeepPointRatio().compareTo(ptlAgreementCostTypeDto.getExport()) > 0) {
-                    return HttpResult.error("出口留点比例不能大于出口比例");
+                if (null != ptlAgreementCostTypeDto.getExportKeepPointRatio() && null != ptlAgreementCostTypeDto.getExport()){
+                    if (ptlAgreementCostTypeDto.getExportKeepPointRatio().compareTo(ptlAgreementCostTypeDto.getExport()) > 0) {
+                        return HttpResult.error("出口留点比例不能大于出口比例");
+                    }
                 }
             }
         }

+ 12 - 11
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java

@@ -1,9 +1,9 @@
 package com.jzg.organization.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatch;
 import com.jzg.commons.entity.agreement.dispatch.dto.PtlAgreementDispatchAction;
@@ -69,14 +69,12 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
 
     @Autowired
     PtlAgreementDispatchAfterActionMapper afterActionMapper;
-
-    @Autowired
-    BaseController baseController;
-
     @Override
     @Transactional
     public String addAgreementDispatch(PtlAgreementDispatchVo.DispatchVo ptlAgreementDispatchVo) {
+        log.info("添加协议调度信息: ptlAgreementDispatchVo=[{}]", JSONUtil.toJsonStr(ptlAgreementDispatchVo));
         PtlAgreementDispatch dispatch = new PtlAgreementDispatch(ptlAgreementDispatchVo);
+        // ptl_agreement_dispatch 表中插入数据
         baseMapper.insert(dispatch);
 
         for (PtlAgreementDispatchRulesAttrLink link : ptlAgreementDispatchVo.getAttrLinks()){
@@ -84,12 +82,13 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
         }
         rulesAttrLinkMapper.insert(ptlAgreementDispatchVo.getAttrLinks());
 
-        for (PtlAgreementDispatchAction action  : ptlAgreementDispatchVo.getActions()){
-            action.setId(IdGenerate.nextId());
-            action.setDispatchId(dispatch.getId());
+        if(CollUtil.isNotEmpty(ptlAgreementDispatchVo.getActions())){
+            for (PtlAgreementDispatchAction action : ptlAgreementDispatchVo.getActions()){
+                action.setId(IdGenerate.nextId());
+                action.setDispatchId(dispatch.getId());
+            }
+            actionMapper.insert(ptlAgreementDispatchVo.getActions());
         }
-        actionMapper.insert(ptlAgreementDispatchVo.getActions());
-
         return dispatch.getId();
     }
 
@@ -130,7 +129,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
         List<String> dispatchIds = ptlAgreementDispatches.stream().map(PtlAgreementDispatch::getId).collect(Collectors.toList());
         if (!dispatchIds.isEmpty()) {
             List<SysDict> dispatchBeforeActionDict = sysDictService.getByTypeCode("dispatch_before_action");
-            List<SysDict> dispatchAfterActionDict = sysDictService.getByTypeCode("dispatch_after_action");
+            //List<SysDict> dispatchAfterActionDict = sysDictService.getByTypeCode("dispatch_after_action");
 
             // 查询保司所有的规则属性 然后进行分组
             List<PtlAgreementDispatchRulesAttrLink> ptlAgreementDispatchRulesAttrLinks = rulesAttrLinkMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatchRulesAttrLink>()
@@ -220,6 +219,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
                 }else{
                     afterAction.setActionName(sysDict.getLabel());
                     if("specify_agreement".equals(afterAction.getActionCode())){
+                        //specify_agreement 指定协议
                         if(afterAction.getActionJson() != null) {
                             PtlAgreement byId = ptlAgreementService.getById(afterAction.getActionJson().get("agreementId").toString());
                             if(byId != null) {
@@ -227,6 +227,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
                             }
                         }
                     }else if("change_bs_account".equals(afterAction.getActionCode())){
+                        // change_bs_account 更换保司账号
                         HttpResult<PtlAgreementAttribution> agreementAttribution = esmInsCompanyClient.getAgreementAttribution(afterAction.getActionJson().get("accountId").toString());
                         if(agreementAttribution.getCode() == 200){
                             PtlAgreementAttribution data = agreementAttribution.getData();

+ 8 - 9
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -346,19 +346,18 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
     @Autowired
     BaseController baseController;
 
+    /**
+     * 规则过滤保险公司
+     *
+     * @param schemeRuleFilterVo 过滤保险公司的条件
+     * @return List<PtlAgreementInsCompanyVo> 满足报价要求的保险公司以及其下的协议
+     */
     @Override
     public List<PtlAgreementInsCompanyVo> ruleFilterCompany(SchemeRuleFilterVo schemeRuleFilterVo) {
         String userSystemCode = baseController.getUserSystemCode();
-        log.info("租户匹配保司以及保司下的协议等信息。 schemeRuleFilterVo=[{}],userSystemCode=[{}]",
-                JSONUtil.toJsonStr(schemeRuleFilterVo),userSystemCode);
-
-        //如果用户租户code为App  则使用参数传来的租户code
         String systemCode = baseController.getSystemCode();
-
-
-        log.info("getUserSystemCode:{}",baseController.getUserSystemCode());
-        log.info("获取到的租户Code:{}",systemCode);
-
+        log.info("租户匹配保司以及保司下的协议等信息。 schemeRuleFilterVo=[{}],userSystemCode=[{}],systemCode=[{}]",
+                JSONUtil.toJsonStr(schemeRuleFilterVo),userSystemCode,systemCode);
         //根据权限获取所有保司
         HttpResult<List<EsmInsCompany>> companyListResult = esmInsCompanyClient.getUserCompany(systemCode);
         log.info("租户[{}]有权限的保司有[{}]个", systemCode, CollUtil.size(companyListResult.getData()));

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

@@ -49,7 +49,8 @@
         SELECT
         sua.id,suji.name,su.mobile, suji.type_attr as attrType, so.name as organizationName,
         sd.name as deptName, sua.sum_amount as sumAmount, sua.sum_amount_paid as sumAmountPaid,
-        sua.sum_amount_unpaid as sumAmountUnpaid, suji.work_number as workNumber
+        sua.sum_amount_unpaid as sumAmountUnpaid, suji.work_number as workNumber,
+        ( select uu.name from sys_user_jzg_info uu where uu.id = suji.leader_id ) as leaderName
         FROM
         sys_user_account sua
         LEFT JOIN sys_user_jzg_info suji on suji.user_id = sua.user_id

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

@@ -42,7 +42,8 @@
         suji.work_number as workNumber,
         su.mobile as mobile,
         suji.type_attr as typeAttr,
-        ss.sys_name as systemName
+        ss.sys_name as systemName,
+        ( select uu.name from sys_user_jzg_info uu where uu.id = suji.leader_id ) as leaderName
         from
         sys_user_jzg_info_bank_card sujibc
         LEFT JOIN sys_user_jzg_info suji ON suji.id = sujibc.user_info_id