Просмотр исходного кода

Merge branch 'master' into dev_jzg_lipf_v20260518

lipf 3 месяцев назад
Родитель
Сommit
85d1830cdf
15 измененных файлов с 153 добавлено и 83 удалено
  1. 1 1
      authentication/src/main/java/com/jzg/config/SecurityConfig.java
  2. 1 0
      authentication/src/main/java/com/jzg/filter/TokenAuthenticationFilter.java
  3. 3 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/AddReceivableVo.java
  4. 3 0
      gateway/src/main/java/com/jzg/filter/AuthGlobalFilter.java
  5. 105 61
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java
  6. 12 8
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java
  7. 4 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/build/TkCrawlerQuoteResultsBuild.java
  8. 1 8
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKSimpleService.java
  9. 5 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
  10. 1 0
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  11. 11 0
      tenant/organization/src/main/java/com/jzg/organization/controller/SchemeController.java
  12. 1 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java
  13. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  14. 3 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  15. 1 0
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

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

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

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

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

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

@@ -22,4 +22,7 @@ public class AddReceivableVo {
     @Schema(description = "查询")
     @Schema(description = "查询")
     private String queryType;
     private String queryType;
 
 
+    @Schema(description = "租户代码")
+    private String systemCode;
+
 }
 }

+ 3 - 0
gateway/src/main/java/com/jzg/filter/AuthGlobalFilter.java

@@ -71,6 +71,9 @@ public class AuthGlobalFilter implements GlobalFilter {
         WHITELIST.add("/appLogin");
         WHITELIST.add("/appLogin");
         WHITELIST.add("/smsCodeLogin");
         WHITELIST.add("/smsCodeLogin");
 
 
+        // 扫码
+        WHITELIST.add("/order/qrCode/index");
+
         // 其他公开接口
         // 其他公开接口
         WHITELIST.add("/system/sysListAccountLinking");
         WHITELIST.add("/system/sysListAccountLinking");
         WHITELIST.add("/supplementOrder/getOrderDetail");
         WHITELIST.add("/supplementOrder/getOrderDetail");

+ 105 - 61
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java

@@ -1236,12 +1236,31 @@ public class RenBaoNewCrawlerRequestBuilder {
         prpCmain.put("linkerName", linkerName != null ? linkerName : "");
         prpCmain.put("linkerName", linkerName != null ? linkerName : "");
 
 
         // ========== 日期信息 ==========
         // ========== 日期信息 ==========
-        prpCmain.put("startDate", (startDate != null && startDate.length() >= 10) ? startDate.substring(0, 10) : "");
-        prpCmain.put("endDate", (endDate != null && endDate.length() >= 10) ? endDate.substring(0, 10) : "");
+        LocalDateTime syStartDateTime;
+        if (startDate != null && !startDate.isEmpty()) {
+            syStartDateTime = parseCiDateTime(startDate);
+        } else {
+            syStartDateTime = LocalDateTime.now();
+        }
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDateTime syEndDateTime = syStartDateTime.plusDays(364);
+        // 终保时间是凌晨0点,调整为前一天24点
+        prpCmain.put("endDate", syEndDateTime.format(formatter));
+        prpCmain.put("endHour", "24");
+        prpCmain.put("endMinute", "00");
+
+        prpCmain.put("startDate", syStartDateTime.format(formatter));
         String currentDate = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ISO_LOCAL_DATE);
         String currentDate = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ISO_LOCAL_DATE);
+        // ========== 时间细分 ==========
+        prpCmain.put("startHour", String.format("%02d", syStartDateTime.getHour()));
+        prpCmain.put("startMinute", String.format("%02d", syStartDateTime.getMinute()));
+
         prpCmain.put("operateDate", currentDate);
         prpCmain.put("operateDate", currentDate);
         prpCmain.put("operateDateOld", currentDate);
         prpCmain.put("operateDateOld", currentDate);
 
 
+
+
+
         // ========== 保单编号相关 ==========
         // ========== 保单编号相关 ==========
         prpCmain.put("proposalNoDI", "");
         prpCmain.put("proposalNoDI", "");
         prpCmain.put("proposalNoBI", "");
         prpCmain.put("proposalNoBI", "");
@@ -1544,11 +1563,7 @@ public class RenBaoNewCrawlerRequestBuilder {
         // ========== 承保意见 ==========
         // ========== 承保意见 ==========
         prpCmain.put("underwritOpinion", "");
         prpCmain.put("underwritOpinion", "");
 
 
-        // ========== 时间细分 ==========
-        prpCmain.put("startHour", "00");
-        prpCmain.put("startMinute", "00");
-        prpCmain.put("endHour", "24");
-        prpCmain.put("endMinute", "00");
+
 
 
         // ========== 邮箱 ==========
         // ========== 邮箱 ==========
         prpCmain.put("email", "");
         prpCmain.put("email", "");
@@ -3158,81 +3173,110 @@ public class RenBaoNewCrawlerRequestBuilder {
      *     </li>
      *     </li>
      * </ol>
      * </ol>
      *
      *
-     * <p>示例:</p>
-     * <pre>
-     * 当前时间: 2025-05-20 14:30:00
-     * 起保日期: 2025-05-21 00:00:00
-     * 终保日期: 2026-05-20 00:00:00 → 调整为 2026-05-19 24:00:00
-     * </pre>
      *
      *
      * @param quoteVo 报价请求VO
      * @param quoteVo 报价请求VO
      * @return 交强险主信息Map
      * @return 交强险主信息Map
      */
      */
+    /**
+     * 构建交强险主信息(prpCmainCI)
+     * <p>
+     * 逻辑与 Python {@code get_itemKindCI} + {@code get_future_time_with_adjusted_format} 保持一致:
+     * <ol>
+     *   <li>起保时间:有交强险时用传入的 startDate(含时分),否则用明天当前时间</li>
+     *   <li>终保时间:起保时间 + 365 天</li>
+     *   <li>如果终保时间的时分正好是 00:00,调整为前一天 24:00</li>
+     * </ol>
+     * </p>
+     */
     public Map<String, Object> buildPrpCmainCI(QuoteVo quoteVo) {
     public Map<String, Object> buildPrpCmainCI(QuoteVo quoteVo) {
         Map<String, Object> prpCmainCI = new HashMap<>();
         Map<String, Object> prpCmainCI = new HashMap<>();
 
 
-        // 获取交强险起保和终保日期
+        // 获取交强险起保日期
         String ciStartDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getStartDate() : null;
         String ciStartDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getStartDate() : null;
-        String ciEndDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getEndDate() : null;
 
 
+        LocalDateTime startDateTime;
         if (ciStartDate == null || ciStartDate.isEmpty()) {
         if (ciStartDate == null || ciStartDate.isEmpty()) {
             // =====================================================================
             // =====================================================================
-            // 场景:未投保交强险或未指定日期,使用默认日期规则
+            // 场景:未投保交强险,起保 = 明天当前时间(与 Python tomorrow_str 一致)
             // =====================================================================
             // =====================================================================
-            LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);       // 起保:明天
-            LocalDateTime nextYear = tomorrow.plusDays(364);                // 终保:一年后(364天后)
-
-            String startDateStr = tomorrow.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-            String startHour = String.format("%02d", tomorrow.getHour());
-            String startMinute = String.format("%02d", tomorrow.getMinute());
-
-            // 处理终保时间的特殊规则:00:00 调整为前一天 24:00
-            String endDateStr;
-            String endHour;
-            String endMinute;
-            if (nextYear.getHour() == 0 && nextYear.getMinute() == 0) {
-                // 终保时间是凌晨0点,调整为前一天24点
-                LocalDateTime adjustedEndDateTime = nextYear.minusDays(1);
-                endDateStr = adjustedEndDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                endHour = "24";
-                endMinute = "00";
-            } else {
-                endDateStr = nextYear.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                endHour = String.format("%02d", nextYear.getHour());
-                endMinute = String.format("%02d", nextYear.getMinute());
-            }
-
-            prpCmainCI.put("startDate", startDateStr);
-            prpCmainCI.put("startHour", startHour);
-            prpCmainCI.put("startMinute", startMinute);
-            prpCmainCI.put("endDate", endDateStr);
-            prpCmainCI.put("endHour", endHour);
-            prpCmainCI.put("endMinute", endMinute);
+            startDateTime = LocalDateTime.now().plusDays(1);
         } else {
         } else {
             // =====================================================================
             // =====================================================================
-            // 场景:已指定交强险日期,使用传入的日期
+            // 场景:已有交强险,起保 = 传入的 startDate(解析时分,与 Python 一致)
             // =====================================================================
             // =====================================================================
-            // 只保留日期部分(yyyy-MM-dd)
-            if (ciStartDate.length() > 10) {
-                ciStartDate = ciStartDate.substring(0, 10);
-            }
-            if (ciEndDate != null && ciEndDate.length() > 10) {
-                ciEndDate = ciEndDate.substring(0, 10);
-            }
-
-            // 交强险默认起保时间00:00,终保时间24:00
-            prpCmainCI.put("startDate", ciStartDate);
-            prpCmainCI.put("endDate", ciEndDate);
-            prpCmainCI.put("startHour", "00");
-            prpCmainCI.put("startMinute", "00");
-            prpCmainCI.put("endHour", "24");
-            prpCmainCI.put("endMinute", "00");
+            startDateTime = parseCiDateTime(ciStartDate);
+        }
+
+        // 起保日期和时分
+        String startDateStr = startDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        String startHour = String.format("%02d", startDateTime.getHour());
+        String startMinute = String.format("%02d", startDateTime.getMinute());
+
+        // 终保 = 起保 + 365 天(与 Python timedelta(days=365) 一致)
+        LocalDateTime endDateTime = startDateTime.plusDays(365);
+
+        // 处理终保时间的特殊规则:00:00 调整为前一天 24:00(与 Python 一致)
+        String endDateStr;
+        String endHour;
+        String endMinute;
+        if (endDateTime.getHour() == 0 && endDateTime.getMinute() == 0) {
+            // 终保时间是凌晨0点,调整为前一天24点
+            LocalDateTime adjustedEndDateTime = endDateTime.minusDays(1);
+            endDateStr = adjustedEndDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            endHour = "24";
+            endMinute = "00";
+        } else {
+            endDateStr = endDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            endHour = String.format("%02d", endDateTime.getHour());
+            endMinute = String.format("%02d", endDateTime.getMinute());
         }
         }
+
+        prpCmainCI.put("startDate", startDateStr);
+        prpCmainCI.put("startHour", startHour);
+        prpCmainCI.put("startMinute", startMinute);
+        prpCmainCI.put("endDate", endDateStr);
+        prpCmainCI.put("endHour", endHour);
+        prpCmainCI.put("endMinute", endMinute);
         prpCmainCI.put("proposalNo", "");
         prpCmainCI.put("proposalNo", "");
 
 
         return prpCmainCI;
         return prpCmainCI;
     }
     }
 
 
+    /**
+     * 解析交强险日期时间字符串为 LocalDateTime
+     * <p>
+     * 兼容格式(与 Python strptime 对应):
+     * <ul>
+     *   <li>{@code yyyy-MM-dd HH:mm:ss}(对应 Python "%Y-%m-%d %H:%M:%S")</li>
+     *   <li>{@code yyyy-MM-dd HH:mm}(对应 Python "%Y-%m-%d %H:%M")</li>
+     *   <li>{@code yyyy-MM-dd}(纯日期,时分默认为 00:00)</li>
+     * </ul>
+     * </p>
+     */
+    private LocalDateTime parseCiDateTime(String dateTimeStr) {
+        if (dateTimeStr == null || dateTimeStr.isEmpty()) {
+            return LocalDateTime.now().plusDays(1);
+        }
+        try {
+            // 尝试 yyyy-MM-dd HH:mm:ss
+            return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        } catch (Exception e1) {
+            try {
+                // 尝试 yyyy-MM-dd HH:mm
+                return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
+            } catch (Exception e2) {
+                try {
+                    // 尝试 yyyy-MM-dd,默认 00:00
+                    LocalDate date = LocalDate.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    return date.atStartOfDay();
+                } catch (Exception e3) {
+                    // 都解析失败,回退到明天当前时间
+                    return LocalDateTime.now().plusDays(1);
+                }
+            }
+        }
+    }
+
     /**
     /**
      * 构建 prpCmainCommon(通用主信息)- 完整版本,与Python保持一致
      * 构建 prpCmainCommon(通用主信息)- 完整版本,与Python保持一致
      */
      */

+ 12 - 8
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java

@@ -357,6 +357,8 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 java.time.LocalDate startDate = java.time.LocalDate.parse(biDate);
                 java.time.LocalDate startDate = java.time.LocalDate.parse(biDate);
                 java.time.LocalDate endDate = startDate.plusDays(364);
                 java.time.LocalDate endDate = startDate.plusDays(364);
                 request.getPrpCmain().put("endDate", endDate.toString());
                 request.getPrpCmain().put("endDate", endDate.toString());
+                request.getPrpCmain().put("endHour", "24");
+                request.getPrpCmain().put("endMinute", "00");
                 log.info("调整商业险日期: startDate={}, endDate={}", biDate, endDate);
                 log.info("调整商业险日期: startDate={}, endDate={}", biDate, endDate);
             } catch (Exception e) {
             } catch (Exception e) {
                 log.warn("计算商业险终保日期失败: {}", e.getMessage());
                 log.warn("计算商业险终保日期失败: {}", e.getMessage());
@@ -378,7 +380,7 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 request.getPrpCmainCI().put("startHour", startHour);
                 request.getPrpCmainCI().put("startHour", startHour);
                 request.getPrpCmainCI().put("startMinute", startMinute);
                 request.getPrpCmainCI().put("startMinute", startMinute);
 
 
-                // 终保日期:起保日期 + 364天
+                // 终保日期:起保日期 + 365天
                 java.time.LocalDateTime endDateTime = ciDateTime.plusDays(365);
                 java.time.LocalDateTime endDateTime = ciDateTime.plusDays(365);
 
 
                 // 特殊处理:如果终保时间是 00:00,调整为前一天的 24:00
                 // 特殊处理:如果终保时间是 00:00,调整为前一天的 24:00
@@ -388,8 +390,8 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 if (endDateTime.getHour() == 0 && endDateTime.getMinute() == 0) {
                 if (endDateTime.getHour() == 0 && endDateTime.getMinute() == 0) {
                     java.time.LocalDateTime adjustedEndDateTime = endDateTime.minusDays(1);
                     java.time.LocalDateTime adjustedEndDateTime = endDateTime.minusDays(1);
                     endDateStr = adjustedEndDateTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                     endDateStr = adjustedEndDateTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                    endHour = "23";
-                    endMinute = "59";
+                    endHour = "24";
+                    endMinute = "00";
                 } else {
                 } else {
                     endDateStr = endDateTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                     endDateStr = endDateTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                     endHour = String.format("%02d", endDateTime.getHour());
                     endHour = String.format("%02d", endDateTime.getHour());
@@ -730,11 +732,11 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         if(quoteRequest.getPrpCmainCI().get("startDate") != null && quoteRequest.getPrpCmainCI().get("endDate") != null){
         if(quoteRequest.getPrpCmainCI().get("startDate") != null && quoteRequest.getPrpCmainCI().get("endDate") != null){
             ciRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+"");
             ciRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+"");
             if(ciRisk.getStartDate().length()<11){
             if(ciRisk.getStartDate().length()<11){
-                ciRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+" 00:00:00");
+                ciRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+" "+quoteRequest.getPrpCmainCI().get("startHour")+":"+quoteRequest.getPrpCmainCI().get("startMinute")+":00");
             }
             }
             ciRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+"");
             ciRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+"");
             if(ciRisk.getEndDate().length()<11){
             if(ciRisk.getEndDate().length()<11){
-                ciRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+" 00:00:00");
+                ciRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+" "+quoteRequest.getPrpCmainCI().get("endHour")+":"+quoteRequest.getPrpCmainCI().get("endMinute")+":00");
             }
             }
         }
         }
         RiskInfoVo biRisk = quoteVo.getBiRiskInfoVo() != null ?quoteVo.getBiRiskInfoVo() : new RiskInfoVo();
         RiskInfoVo biRisk = quoteVo.getBiRiskInfoVo() != null ?quoteVo.getBiRiskInfoVo() : new RiskInfoVo();
@@ -745,7 +747,7 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
             }
             }
             biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+"");
             biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+"");
             if(biRisk.getEndDate().length()<11){
             if(biRisk.getEndDate().length()<11){
-                biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+" 00:00:00");
+                biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+" 24:00:00");
             }
             }
         }
         }
         resultsVo.setCiRiskInfoVo(ciRisk);
         resultsVo.setCiRiskInfoVo(ciRisk);
@@ -1754,8 +1756,10 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
     private LoginInfoBO getLoginInfo(AttributionInformationVo attributionInfo) {
     private LoginInfoBO getLoginInfo(AttributionInformationVo attributionInfo) {
         RenBaoNewCrawlerConfigureParameters parameters = ConfigureParametersConversion
         RenBaoNewCrawlerConfigureParameters parameters = ConfigureParametersConversion
                 .conversionEntity(RenBaoNewCrawlerConfigureParameters.class, attributionInfo.getConfigInfo());
                 .conversionEntity(RenBaoNewCrawlerConfigureParameters.class, attributionInfo.getConfigInfo());
-
-        String jwt = attributionInfo.getPassword();
+        String jwt = requestComponent.getJwtToken(parameters.getCarChecker());
+        if(jwt.isEmpty()){
+            jwt = attributionInfo.getPassword();
+        }
         RMap<String, Object> authorization = getTokenService.getAuthorization(
         RMap<String, Object> authorization = getTokenService.getAuthorization(
                 attributionInfo.getUsername(),
                 attributionInfo.getUsername(),
                 jwt,
                 jwt,

+ 4 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/build/TkCrawlerQuoteResultsBuild.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.TaxInfoVo;
 import com.jzg.commons.entity.quote.vo.TaxInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.util.DateTimeUtils;
 import com.jzg.commons.util.DateTimeUtils;
+import com.jzg.commons.util.ObjectUtil;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.taikang.crawler.ConvertUtil;
 import com.jzg.quotation.taikang.crawler.ConvertUtil;
@@ -19,6 +20,7 @@ import com.jzg.quotation.taikang.crawler.model.entity.TKDateInfo;
 import com.jzg.quotation.taikang.crawler.model.entity.TKOther;
 import com.jzg.quotation.taikang.crawler.model.entity.TKOther;
 import com.jzg.quotation.taikang.crawler.model.entity.TKPremium;
 import com.jzg.quotation.taikang.crawler.model.entity.TKPremium;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.ObjectUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -58,6 +60,8 @@ public class TkCrawlerQuoteResultsBuild {
             errorMessage = other.getMessageBZ().get(0) + "\n" + other.getMessageBZ().get(1);
             errorMessage = other.getMessageBZ().get(0) + "\n" + other.getMessageBZ().get(1);
         } else if (preciseInitResult.getPremium() == null) {
         } else if (preciseInitResult.getPremium() == null) {
             errorMessage = other.getNotice();
             errorMessage = other.getNotice();
+        } else if (other.getNotice() != null && !other.getNotice().isEmpty()) {
+            errorMessage = other.getNotice();
         }
         }
 
 
         if (errorMessage == null) {
         if (errorMessage == null) {

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

@@ -1069,9 +1069,8 @@ public class TKSimpleService {
         Map<String, TKCiKindsVo> tkCiKindsVoMap = new HashMap<>();
         Map<String, TKCiKindsVo> tkCiKindsVoMap = new HashMap<>();
         for (TKCiKindsVo tkCiKindVo : preciseInitParam.getCiKindsVo()) {
         for (TKCiKindsVo tkCiKindVo : preciseInitParam.getCiKindsVo()) {
             String isSelect = tkCiKindVo.getIsSelect();
             String isSelect = tkCiKindVo.getIsSelect();
-            BigDecimal premium = tkCiKindVo.getPremium();
 
 
-            if (isSelect != null && isSelect.equals("1") && premium != null && premium.compareTo(BigDecimal.ZERO) == 0) {
+            if (isSelect != null && isSelect.equals("1")) {
                 continue;
                 continue;
             }
             }
 
 
@@ -1080,9 +1079,6 @@ public class TKSimpleService {
             tkCiKindVo.setIsSelect("0");
             tkCiKindVo.setIsSelect("0");
             tkCiKindVo.setQuantity(0);
             tkCiKindVo.setQuantity(0);
             tkCiKindVo.setQuoteAmountCN("不投保");
             tkCiKindVo.setQuoteAmountCN("不投保");
-            // tkCiKindVo.setQuoteAmount(BigDecimal.ZERO); // 不用管
-            // tkCiKindVo.setPremium(BigDecimal.ZERO); // 不用管
-            // tkCiKindVo.setTotalPremium(BigDecimal.ZERO);// 不用管
             tkCiKindsVoMap.put(tkCiKindVo.getKindCode(), tkCiKindVo);
             tkCiKindsVoMap.put(tkCiKindVo.getKindCode(), tkCiKindVo);
         }
         }
 
 
@@ -1097,9 +1093,6 @@ public class TKSimpleService {
                 tkCiKindVo.setIsSelect("1");
                 tkCiKindVo.setIsSelect("1");
                 tkCiKindVo.setQuoteAmount(commonBiKindInfoVo.getAmount());
                 tkCiKindVo.setQuoteAmount(commonBiKindInfoVo.getAmount());
                 tkCiKindVo.setQuoteAmountCN(commonBiKindInfoVo.getAmount());
                 tkCiKindVo.setQuoteAmountCN(commonBiKindInfoVo.getAmount());
-                // tkCiKindVo.setUnitAmount(new BigDecimal(commonBiKindInfoVo.getUnitAmount()));
-                // tkCiKindVo.setUnitAmountCN(commonBiKindInfoVo.getUnitAmount());
-
 
 
                 String quantity = commonBiKindInfoVo.getQuantity();
                 String quantity = commonBiKindInfoVo.getQuantity();
                 String serviceTimes = commonBiKindInfoVo.getServiceTimes();
                 String serviceTimes = commonBiKindInfoVo.getServiceTimes();

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

@@ -153,6 +153,11 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
 
 
         // # 车险投保单报价(根据保司初始化的投保单匹配系统险种)
         // # 车险投保单报价(根据保司初始化的投保单匹配系统险种)
         preciseInitResult = tkSimpleService.orderQuote(session, mainOrderId, preciseInitResult, commonQuoteVo);
         preciseInitResult = tkSimpleService.orderQuote(session, mainOrderId, preciseInitResult, commonQuoteVo);
+        // 二次校验,有的错误信息不会在初始化时候返回,报价时候进行返回错误信息。此时泰康也会返回报价信息,选中的险种为保司的默认选中险种,会与系统选中的险种不一致。
+        quoteResultsVo = tkCrawlerQuoteResultsBuild.buildQuoteFailResultsVo(preciseInitResult);
+        if (quoteResultsVo != null) {
+            return quoteResultsVo;
+        }
 
 
         // 保存
         // 保存
         preciseInitResult.setMainOrderId(mainOrderId);
         preciseInitResult.setMainOrderId(mainOrderId);

+ 1 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -77,6 +77,7 @@ public class ReceivableController {
     @Operation(summary = "添加应收记录")
     @Operation(summary = "添加应收记录")
     public HttpResult<String> addReceivable(@RequestBody AddReceivableVo addReceivableVo){
     public HttpResult<String> addReceivable(@RequestBody AddReceivableVo addReceivableVo){
         log.info("添加应收记录:addReceivableVo=[{}]", JSONUtil.toJsonStr(addReceivableVo));
         log.info("添加应收记录:addReceivableVo=[{}]", JSONUtil.toJsonStr(addReceivableVo));
+        addReceivableVo.setSystemCode(baseController.getSystemCode());
         boolean result = receivableService.saveAuditedOrder(addReceivableVo);
         boolean result = receivableService.saveAuditedOrder(addReceivableVo);
         return result ? HttpResult.ok("添加成功") : HttpResult.error("添加失败");
         return result ? HttpResult.ok("添加成功") : HttpResult.error("添加失败");
     }
     }

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/SchemeController.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Tag(name="方案管理")
 @Tag(name="方案管理")
 @RestController
 @RestController
@@ -94,6 +95,16 @@ public class SchemeController {
         return HttpResult.ok(ptlAgreementInsCompanyVos);
         return HttpResult.ok(ptlAgreementInsCompanyVos);
     }
     }
 
 
+    @Operation(summary = "规则过滤保险公司")
+    @PostMapping("/ruleFilterCompanyApp")
+    public HttpResult<List<PtlAgreementInsCompanyVo>> ruleFilterCompanyApp(@RequestBody SchemeRuleFilterVo schemeRuleFilterVo){
+        List<PtlAgreementInsCompanyVo> ptlAgreementInsCompanyVos = ptlSchemeService.ruleFilterCompany(schemeRuleFilterVo);
+        List<PtlAgreementInsCompanyVo> ptlAgreementInsCompanyVosNew = ptlAgreementInsCompanyVos.stream()
+                .filter(x -> x.getDispatchAgreementId() != null && !x.getDispatchAgreementId().equals(""))
+                .collect(Collectors.toList());
+        return HttpResult.ok(ptlAgreementInsCompanyVosNew);
+    }
+
     @Operation(summary = "获取方案结果")
     @Operation(summary = "获取方案结果")
     @GetMapping("/getSchemeResult")
     @GetMapping("/getSchemeResult")
     public HttpResult getSchemeResult(String companyId,String productId,String seatCount){
     public HttpResult getSchemeResult(String companyId,String productId,String seatCount){

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java

@@ -40,7 +40,7 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
     /**
     /**
      * 获取为审核的订单列表
      * 获取为审核的订单列表
      */
      */
-    List<InsPlyIncome> getUnauditedOrderList(List<String> orderNo, String orderStatus, String auditStatus);
+    List<InsPlyIncome> getUnauditedOrderList(List<String> orderNo, String orderStatus, String auditStatus, String systemCode);
 
 
     /**
     /**
      * 获取应收订单的保司
      * 获取应收订单的保司

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java

@@ -21,7 +21,7 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
     /**
      * 获取未审核的订单列表
      * 获取未审核的订单列表
      */
      */
-    List<InsPlyIncome> getUnauditOrderList(List<String> orderNo,String orderStatus,String auditStatus);
+    List<InsPlyIncome> getUnauditOrderList(List<String> orderNo, String orderStatus, String auditStatus, String systemCode);
 
 
     /**
     /**
      * 获取为审核的订单
      * 获取为审核的订单

+ 3 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -152,8 +152,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 //    }
 //    }
 
 
     @Override
     @Override
-    public List<InsPlyIncome> getUnauditOrderList(List<String> orderNo, String orderStatus, String auditStatus) {
-        return baseMapper.getUnauditedOrderList(orderNo, orderStatus, auditStatus);
+    public List<InsPlyIncome> getUnauditOrderList(List<String> orderNo, String orderStatus, String auditStatus, String systemCode) {
+        return baseMapper.getUnauditedOrderList(orderNo, orderStatus, auditStatus, systemCode);
     }
     }
 
 
     @Override
     @Override
@@ -172,7 +172,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if (CollUtil.isEmpty(addReceivableVo.getOrderNo())){
         if (CollUtil.isEmpty(addReceivableVo.getOrderNo())){
             throw new SystemException("订单号不能为空!");
             throw new SystemException("订单号不能为空!");
         }
         }
-        List<InsPlyIncome> auditedOrder = this.getUnauditOrderList(addReceivableVo.getOrderNo(), InsOrderStatusEnum.UNDERWRITED.getCode(), "0");
+        List<InsPlyIncome> auditedOrder = this.getUnauditOrderList(addReceivableVo.getOrderNo(), InsOrderStatusEnum.UNDERWRITED.getCode(), "0", addReceivableVo.getSystemCode());
         AssertionUtils.isEmpty(auditedOrder, "订单不存在");
         AssertionUtils.isEmpty(auditedOrder, "订单不存在");
         // 查看当前表是否已经存在了已审核订单数据
         // 查看当前表是否已经存在了已审核订单数据
 //        Long count = baseMapper.selectCount(new LambdaQueryWrapper<InsPlyIncome>().eq(InsPlyIncome::getOrderNo, order.getOrderNo()));
 //        Long count = baseMapper.selectCount(new LambdaQueryWrapper<InsPlyIncome>().eq(InsPlyIncome::getOrderNo, order.getOrderNo()));

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

@@ -187,6 +187,7 @@
         LEFT JOIN ins_fee_audit ifa on ifa.order_no = io.id AND ifa.is_delete = 0
         LEFT JOIN ins_fee_audit ifa on ifa.order_no = io.id AND ifa.is_delete = 0
         <where>
         <where>
             io.is_delete = 0
             io.is_delete = 0
+            and io.system_code = #{systemCode}
             <if test="orderNo != null and orderNo.size > 0">
             <if test="orderNo != null and orderNo.size > 0">
                 AND io.id in
                 AND io.id in
                 <foreach collection="orderNo" item="id" open="(" separator="," close=")">
                 <foreach collection="orderNo" item="id" open="(" separator="," close=")">