瀏覽代碼

Merge remote-tracking branch 'origin/master'

Qchen 5 月之前
父節點
當前提交
69de85ee8f
共有 100 個文件被更改,包括 1307 次插入 和 716 次删除
  1. 18 5
      README.md
  2. 2 2
      authentication/src/main/java/com/jzg/client/PartnerDistributionClient.java
  3. 5 0
      authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java
  4. 2 2
      authentication/src/main/java/com/jzg/controller/AppAuthController.java
  5. 2 11
      authentication/src/main/java/com/jzg/controller/AuthController.java
  6. 0 5
      authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java
  7. 1 1
      authentication/src/main/java/com/jzg/service/InitializePartnerCommissionService.java
  8. 6 2
      authentication/src/main/java/com/jzg/service/impl/InitializePartnerCommissionServiceImpl.java
  9. 0 7
      authentication/src/main/resources/application-dev.yml
  10. 0 1
      authentication/src/main/resources/application-prod.yml
  11. 13 34
      authentication/src/main/resources/logback-spring.xml
  12. 5 6
      commons/pom.xml
  13. 44 0
      commons/src/main/java/com/jzg/commons/config/OpenTelemetryConfig.java
  14. 1 0
      commons/src/main/java/com/jzg/commons/core/base/BaseController.java
  15. 1 0
      commons/src/main/java/com/jzg/commons/core/base/StateResult.java
  16. 53 0
      commons/src/main/java/com/jzg/commons/core/page/ResultInfo.java
  17. 2 0
      commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlAgreementAttribution.java
  18. 1 4
      commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlInsAttributionTemplate.java
  19. 163 0
      commons/src/main/java/com/jzg/commons/entity/dto/InsOrdersParamVO.java
  20. 0 2
      commons/src/main/java/com/jzg/commons/entity/dto/JyxConfigAdd.java
  21. 49 0
      commons/src/main/java/com/jzg/commons/entity/dto/QrBarcodeConfigAddVO.java
  22. 3 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableQueryVo.java
  23. 34 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java
  24. 1 0
      commons/src/main/java/com/jzg/commons/entity/po/EsmInsCompany.java
  25. 1 1
      commons/src/main/java/com/jzg/commons/entity/po/SysAppManage.java
  26. 23 18
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java
  27. 3 3
      commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java
  28. 4 4
      commons/src/main/java/com/jzg/commons/entity/report/po/ReportUploadExcelTask.java
  29. 1 2
      commons/src/main/java/com/jzg/commons/entity/vo/AdjustAllRefundInfoVo.java
  30. 1 1
      commons/src/main/java/com/jzg/commons/entity/vo/SysAppManageVo.java
  31. 0 3
      commons/src/main/java/com/jzg/commons/exception/GlobalExceptionHandler.java
  32. 116 11
      commons/src/main/java/com/jzg/commons/util/MinioUtils.java
  33. 100 103
      consoleStatistics/src/main/java/com/jzg/console/controller/ReportBusinessDataManageController.java
  34. 44 44
      consoleStatistics/src/main/java/com/jzg/console/controller/ReportQuotationDataManageController.java
  35. 3 4
      consoleStatistics/src/main/java/com/jzg/console/controller/ReportUploadExcelTaskController.java
  36. 13 17
      consoleStatistics/src/main/java/com/jzg/console/mapper/ReportCompanyDataManageMapper.java
  37. 21 21
      consoleStatistics/src/main/java/com/jzg/console/service/ReportBaseService.java
  38. 5 5
      consoleStatistics/src/main/java/com/jzg/console/service/ReportCompanyDataManageService.java
  39. 4 5
      consoleStatistics/src/main/java/com/jzg/console/service/ReportContactPersonDataManageService.java
  40. 4 4
      consoleStatistics/src/main/java/com/jzg/console/service/ReportQuotationOrderDataService.java
  41. 5 5
      consoleStatistics/src/main/java/com/jzg/console/service/ReportRiskDataManageService.java
  42. 56 16
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportBaseServiceImpl.java
  43. 26 27
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportCompanyDataManageServiceImpl.java
  44. 31 38
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportContactPersonDataManageServiceImpl.java
  45. 17 26
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportQuotationOrderDataServiceImpl.java
  46. 35 31
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportRiskDataManageServiceImpl.java
  47. 6 0
      consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportUploadExcelTaskServiceImpl.java
  48. 0 2
      consoleStatistics/src/main/resources/application-dev.yml
  49. 0 2
      consoleStatistics/src/main/resources/application-prod.yml
  50. 2 0
      consoleStatistics/src/main/resources/application.yml
  51. 0 14
      gateway/src/main/java/com/jzg/config/GatewayConfig.java
  52. 30 16
      gateway/src/main/java/com/jzg/filter/AuthFilter.java
  53. 9 4
      gateway/src/main/resources/application-dev.yml
  54. 7 1
      gateway/src/main/resources/application-prod.yml
  55. 5 0
      gateway/src/main/resources/application-test.yml
  56. 6 6
      gateway/src/main/resources/application.yml
  57. 22 0
      gateway/src/main/resources/logback-spring.xml
  58. 0 1
      partner/pom.xml
  59. 2 1
      partner/src/main/java/com/jzg/controller/DistributionController.java
  60. 0 1
      partner/src/main/java/com/jzg/utils/DistributionUtils.java
  61. 5 5
      partner/src/main/java/com/jzg/utils/TimedTaskUtils.java
  62. 0 2
      partner/src/main/resources/application-dev.yml
  63. 0 2
      partner/src/main/resources/application-prod.yml
  64. 0 2
      partner/src/main/resources/application-test.yml
  65. 3 1
      partner/src/main/resources/application.yml
  66. 10 23
      partner/src/main/resources/logback-spring.xml
  67. 10 9
      partner/src/main/resources/mapper/PartnerUserMapper.xml
  68. 5 5
      platform/src/main/java/com/jzg/controller/AttributionTemplateController.java
  69. 13 3
      platform/src/main/java/com/jzg/controller/JyxConfigController.java
  70. 9 1
      platform/src/main/java/com/jzg/controller/QrBarcodeController.java
  71. 0 2
      platform/src/main/java/com/jzg/controller/SysSystemController.java
  72. 9 1
      platform/src/main/java/com/jzg/mapper/PtlAgreementMapper.java
  73. 0 1
      platform/src/main/java/com/jzg/mapper/PtlAgreementUrlMapper.java
  74. 1 1
      platform/src/main/java/com/jzg/mapper/SysMenuMapper.java
  75. 3 1
      platform/src/main/java/com/jzg/mapper/SysUserRoleMapper.java
  76. 17 3
      platform/src/main/java/com/jzg/service/JyxConfigService.java
  77. 5 4
      platform/src/main/java/com/jzg/service/PtlAgreementService.java
  78. 10 5
      platform/src/main/java/com/jzg/service/PtlInsAttributionTemplateService.java
  79. 1 1
      platform/src/main/java/com/jzg/service/SysMenuService.java
  80. 2 9
      platform/src/main/java/com/jzg/service/SysSystemService.java
  81. 6 1
      platform/src/main/java/com/jzg/service/impl/EsmInsCompanyServiceImpl.java
  82. 30 14
      platform/src/main/java/com/jzg/service/impl/JyxConfigServiceImpl.java
  83. 16 1
      platform/src/main/java/com/jzg/service/impl/PtlAgreementServiceImpl.java
  84. 2 5
      platform/src/main/java/com/jzg/service/impl/PtlAgreementUrlServiceImpl.java
  85. 36 6
      platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java
  86. 26 9
      platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java
  87. 28 26
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  88. 1 1
      platform/src/main/resources/application-prod.yml
  89. 10 23
      platform/src/main/resources/logback-spring.xml
  90. 5 2
      platform/src/main/resources/mapper/SysMenuMapper.xml
  91. 7 3
      pom.xml
  92. 0 2
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/CostsOrRuleApplication.java
  93. 1 9
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/client/QuoteClient.java
  94. 0 2
      tenant/costsorrule/src/main/resources/application-dev.yml
  95. 0 3
      tenant/costsorrule/src/main/resources/application-prod.yml
  96. 0 2
      tenant/costsorrule/src/main/resources/application-test.yml
  97. 2 0
      tenant/costsorrule/src/main/resources/application.yml
  98. 22 0
      tenant/costsorrule/src/main/resources/logback-spring.xml
  99. 0 3
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/build/BoHaiCrawlerQuoteResultsVoBuild.java
  100. 4 4
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/po/BoHaiCrawlerOrder.java

+ 18 - 5
README.md

@@ -1,14 +1,27 @@
-authentication      授权服务
-commons             公共类
-gateway             网关
-platform            总控项目
+# 项目介绍
 
 
+## 微服务介绍
+
+| 序号 | 服务名                               | 端口号  | 备注        | 是否必须启动 |
+|:---|:----------------------------------|:-----|:----------|:-------|
+| 1  | authentication                    | 8081 | 认证服务      | 是      |
+| 2  | commons                           |      | 公共类       | 否      |
+| 3  | gateway                           | 8001 | 网关        | 是      |
+| 4  | platform                          | 8087 | 总控项目      | 是      |
+| 5  | consoleStatistics                 | 8086 |           | 是      |
+| 6  | tenant--costsorrule               | 8085 |           | 是      |
+| 7  | tenant-organization               | 8085 |           | 是      |
+| 8  | tenant-insurance-xxx              | xxx  | 对接不同的保险公司 | 否      |
+| 9  | rocketmq                          |      |           | 否      |
+| 10 | operation-Backend                 | xxx  | 前端:平台管理系统 | 否      |
+| 11 | tenant-Platform                   | xxx  | 前端:租户系统   | 否      |
 
-通过gateway网关转发其他服务项目   后期加入nacos 使用服务名支持负载均衡、服务健康状态管理
 
 
+## 其它
 
+通过gateway网关转发其他服务项目   后期加入nacos 使用服务名支持负载均衡、服务健康状态管理
 
 轨迹添加
 Service层 需要继承HistoryDataService  实现getHistoryData方法   更新与删除操作需要获取历史的数据

+ 2 - 2
authentication/src/main/java/com/jzg/client/PartnerDistributionClient.java

@@ -12,10 +12,10 @@ public interface PartnerDistributionClient {
 
 
     @GetMapping("/partner/isTherePartner")
-    HttpResult<Boolean> isTherePartner(@RequestParam String userId, @RequestParam String systemCode);
+    HttpResult<Boolean> isTherePartner(@RequestParam String userId);
 
 
     @GetMapping("/partnerDistribution/initializeCommissionDetails")
-    HttpResult<Boolean> initializeCommissionDetails(@RequestParam String userId);
+    HttpResult<Boolean> initializeCommissionDetails(@RequestParam String userId,@RequestHeader("Authorization") String token);
 
 }

+ 5 - 0
authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java

@@ -29,6 +29,8 @@ import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationProvider;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -46,6 +48,8 @@ import java.util.stream.Collectors;
 
 public class JzgAuthenticationProvider implements AuthenticationProvider {
 
+    private static final Logger log = LoggerFactory.getLogger(JzgAuthenticationProvider.class);
+
     private UserDetailsService userDetailsService;
 
     private SysUserService sysUserService;
@@ -251,6 +255,7 @@ public class JzgAuthenticationProvider implements AuthenticationProvider {
                 .collect(Collectors.toList());
         //APP 是手机端,不进行权限校验
         if(!authorities.stream().anyMatch(x->x.getSystem().equals(system)) && !username.equals("admin") && !StringUtils.equals("APP",system) & !appLogin){
+            log.info("没有权限访问系统。system=[{}],username=[{}],appLogin=[{}]",system, username,appLogin);
             throw new SystemException("没有权限访问系统");
         }
         SysUserJzgVo jzgUserInfo = new SysUserJzgVo();

+ 2 - 2
authentication/src/main/java/com/jzg/controller/AppAuthController.java

@@ -102,14 +102,14 @@ public class AppAuthController extends BaseController {
             if (!isApproved){
                 throw new ServletException("当前用户未审核通过");
             }
-            HttpResult<Boolean> isTherePartner = partnerDistributionClient.isTherePartner(sysUserJzgInfo.getId(), loginFormVo.getSystem());
+            HttpResult<Boolean> isTherePartner = partnerDistributionClient.isTherePartner(sysUserJzgInfo.getId());
             if (200 == isTherePartner.getCode()) {
                 if (!isTherePartner.getData()) {
                     throw new ServletException("当前用户无登录权限");
                 }
             }
             modifyPass(loginFormVo);
-            partnerCommissionService.initializePartnerCommission(sysUserJzgInfo.getId());
+            partnerCommissionService.initializePartnerCommission(sysUserJzgInfo.getId(),loginFormVo.getMobile());
         } catch (Exception e) {
             throw new ServletException("当前用户不存在或已注销");
         }

+ 2 - 11
authentication/src/main/java/com/jzg/controller/AuthController.java

@@ -4,8 +4,8 @@ import cn.hutool.core.util.HexUtil;
 import cn.hutool.crypto.BCUtil;
 import cn.hutool.crypto.SmUtil;
 import cn.hutool.crypto.asymmetric.SM2;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayConfig;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.annotation.IgnoreTenant;
@@ -15,7 +15,6 @@ import com.jzg.commons.request.RequestSingleParam;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.PasswordUtils;
-import com.jzg.commons.util.sm.Sm2Util;
 import com.jzg.config.JzgTokenService;
 import com.jzg.config.JzgUserDetailsService;
 import com.jzg.config.JzgUsernamePasswordAuthenticationToken;
@@ -43,21 +42,14 @@ import jakarta.servlet.ServletException;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import jodd.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.api.WxMpService;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
-import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
 import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
-import org.bouncycastle.util.encoders.Hex;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
@@ -69,9 +61,7 @@ import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.security.*;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
-import java.util.Random;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
 
@@ -138,6 +128,7 @@ public class AuthController extends BaseController {
     @PostMapping("/login")
     @IgnoreTenant
     public void login(@RequestBody LoginFormVo loginFormVo) throws ServletException, IOException {
+        log.info("登录接口。loginFormVo=[{}]", JSONUtil.toJsonStr(loginFormVo));
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
 

+ 0 - 5
authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java

@@ -65,9 +65,7 @@ public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHan
         String token = tokenService.generateToken(username);
         // 生成 JWT Token
         tokenService.saveToken(username,token,JSONObject.toJSONString(redisToken));
-
         logger.info(username+"登录成功");
-
         // 设置响应内容类型为 JSON
         response.setContentType("application/json");
         JSONObject json = new JSONObject();
@@ -78,12 +76,9 @@ public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHan
         json.put("msg","login success");
         json.put("data",data);
         json.put("type","1");
-//        json.put("code",200);
-//        json.put("msg","login success");
 //        json.put("data",token);
         // 将 Token 返回给前端
         response.getWriter().write(json.toJSONString());
-
         // 确保状态码为 200 OK,不进行重定向
         response.setStatus(HttpServletResponse.SC_OK);
     }

+ 1 - 1
authentication/src/main/java/com/jzg/service/InitializePartnerCommissionService.java

@@ -5,7 +5,7 @@ public interface InitializePartnerCommissionService {
 
 
 
-    void initializePartnerCommission(String userId);
+    void initializePartnerCommission(String userId,String mobile);
 
 
 }

+ 6 - 2
authentication/src/main/java/com/jzg/service/impl/InitializePartnerCommissionServiceImpl.java

@@ -1,9 +1,11 @@
 package com.jzg.service.impl;
 
 import com.jzg.client.PartnerDistributionClient;
+import com.jzg.config.JzgTokenService;
 import com.jzg.service.InitializePartnerCommissionService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -12,15 +14,17 @@ import org.springframework.stereotype.Service;
 @Service
 public class InitializePartnerCommissionServiceImpl implements InitializePartnerCommissionService {
 
+    @Autowired
+    private JzgTokenService tokenStore;
 
     @Resource
     private PartnerDistributionClient distributionClient;
 
     @Async
     @Override
-    public void initializePartnerCommission(String userId) {
+    public void initializePartnerCommission(String userId,String mobile) {
         try {
-            distributionClient.initializeCommissionDetails(userId);
+            distributionClient.initializeCommissionDetails(userId,tokenStore.getTokenByUsername(mobile));
         }catch (Exception e){
             log.error("初始化用户佣金失败:{}", e.getMessage());
             e.printStackTrace();

+ 0 - 7
authentication/src/main/resources/application-dev.yml

@@ -1,8 +1,4 @@
-server:
-  port: 8081
 spring:
-  application:
-    name: jzg-auth
   cloud:
     nacos:
       server-addr: 192.168.5.250:8848
@@ -21,7 +17,6 @@ spring:
       - nacos:minio
 config:
   sso: 0
-
 seata:
   enabled: true
   application-id: ${spring.application.name}
@@ -50,8 +45,6 @@ wechat:
       app:
         componentAppId: wx612ca90988c46947
         componentSecret: 75b7d4cda453b2075dec23f849278bc0
-
-
 feign:
   client:
     jzg-partner:

+ 0 - 1
authentication/src/main/resources/application-prod.yml

@@ -17,7 +17,6 @@ spring:
       - nacos:mysql
       - nacos:redisson
       - nacos:minio
-      - nacos:logback
 config:
   sso: 0
 

+ 13 - 34
authentication/src/main/resources/logback-spring.xml

@@ -1,43 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 
-<!--    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">-->
-<!--        &lt;!&ndash; Graylog server 的主机名或 IP 地址 &ndash;&gt;-->
-<!--        <graylogHost>192.168.0.250</graylogHost>-->
-<!--        &lt;!&ndash; Graylog 服务器端口,通常为 12201(UDP)或 12202(TCP) &ndash;&gt;-->
-<!--        <graylogPort>12201</graylogPort>-->
-<!--        &lt;!&ndash; 可选项:指定协议,默认使用 UDP &ndash;&gt;-->
-<!--        <transport>UDP</transport>-->
-<!--        &lt;!&ndash; 发送日志时是否压缩 &ndash;&gt;-->
-<!--        <compress>true</compress>-->
-<!--        &lt;!&ndash; 是否在 GELF 消息中加入时间戳 &ndash;&gt;-->
-<!--        <includeTimestamp>true</includeTimestamp>-->
-<!--        &lt;!&ndash; 日志内容最大字节数 &ndash;&gt;-->
-<!--        <maxMessageSize>32768</maxMessageSize>-->
-<!--        &lt;!&ndash; 设置自定义字段 &ndash;&gt;-->
-<!--        <additionalFields>-->
-<!--        </additionalFields>-->
-<!--    </appender>-->
-
-    <!-- 排除启动日志 -->
-<!--    <logger name="org.springframework.boot" level="WARN" additivity="false">-->
-<!--        <appender-ref ref="STDOUT"/>-->
-<!--    </logger>-->
-
-<!--    <logger name="org.springframework.context" level="WARN" additivity="false">-->
-<!--        <appender-ref ref="STDOUT"/>-->
-<!--    </logger>-->
-
-    <!-- 控制台输出日志,非必须,可以根据需要选择性启用 -->
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.layout.TTLLLayout">
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg  %X{traceId} %X{spanId}%n</pattern>
-        </layout>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg traceId=%X{traceId}%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="GRAYLOG" class="de.siegmar.logbackgelf.GelfTcpAppender">
+        <graylogHost>192.168.5.250</graylogHost>
+<!--        <graylogHost>172.24.144.227</graylogHost>-->
+        <graylogPort>12201</graylogPort>
+        <includeMdcData>true</includeMdcData>
+        <extractStackTrace>true</extractStackTrace>
     </appender>
 
-    <!-- 输出到控制台 -->
     <root level="INFO">
-<!--        <appender-ref ref="GELF"/>-->
         <appender-ref ref="STDOUT"/>
+        <appender-ref ref="GRAYLOG"/>
     </root>
+
 </configuration>

+ 5 - 6
commons/pom.xml

@@ -61,6 +61,11 @@
             <artifactId>hutool-core</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>io.minio</groupId>
             <artifactId>minio</artifactId>
@@ -105,12 +110,6 @@
             <version>1.3.2</version>
         </dependency>
 
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>2.0.1.Final</version>
-            <scope>compile</scope>
-        </dependency>
         <dependency>
             <groupId>commons-httpclient</groupId>
             <artifactId>commons-httpclient</artifactId>

+ 44 - 0
commons/src/main/java/com/jzg/commons/config/OpenTelemetryConfig.java

@@ -0,0 +1,44 @@
+package com.jzg.commons.config;
+
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.resources.Resource;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
+import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
+import io.opentelemetry.api.common.Attributes;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class OpenTelemetryConfig {
+
+    @Value("${spring.application.name}")
+    private String serviceName;
+
+    @Bean
+    public OpenTelemetry openTelemetry() {
+        Resource resource = Resource.getDefault()
+                .merge(Resource.create(Attributes.builder()
+                        .put("service.name", serviceName)
+                        .build()));
+
+        // Trace exporter
+        OtlpGrpcSpanExporter spanExporter = OtlpGrpcSpanExporter.builder()
+//                .setEndpoint("http://192.168.5.250:4317")
+                .setEndpoint("http://172.24.144.227:4317")
+                .build();
+
+        // Tracer provider
+        SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
+                .addSpanProcessor(BatchSpanProcessor.builder(spanExporter).build())
+                .setResource(resource)
+                .build();
+
+        // 注册 Trace
+        return OpenTelemetrySdk.builder()
+                .setTracerProvider(tracerProvider)
+                .buildAndRegisterGlobal();
+    }
+}

+ 1 - 0
commons/src/main/java/com/jzg/commons/core/base/BaseController.java

@@ -43,6 +43,7 @@ public class BaseController {
      */
     private void valiedToken(String token){
         if (Objects.isNull(token) || Objects.isNull(redissonClient.getBucket(token).get())) {
+            log.info("登录信息过期。 token=[{}]",token);
             throw new TokenExpireException("用户登录信息过期");
         }
     }

+ 1 - 0
commons/src/main/java/com/jzg/commons/core/base/StateResult.java

@@ -1,4 +1,5 @@
 package com.jzg.commons.core.base;
+
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 

+ 53 - 0
commons/src/main/java/com/jzg/commons/core/page/ResultInfo.java

@@ -0,0 +1,53 @@
+package com.jzg.commons.core.page;
+
+
+import java.io.Serializable;
+
+
+/**
+ * 服务之间交互的实体
+ *
+ * @author lipf
+ * @date 2026/4/2 9:57
+ */
+public class ResultInfo<T> extends HttpResult<T> implements Serializable {
+
+    private boolean success;
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public ResultInfo<T> ResultInfo(){
+        ResultInfo<T> res =  new ResultInfo<>();
+        res.setSuccess(true);
+        return res;
+    }
+
+    public static <T> ResultInfo<T> resOk(String msg) {
+        ResultInfo<T> r = new ResultInfo<>();
+        r.setMsg(msg);
+        r.setSuccess(true);
+        return r;
+    }
+
+    public static <T> ResultInfo<T> resError(String msg) {
+        ResultInfo<T> r = new ResultInfo<>();
+        r.setMsg(msg);
+        r.setSuccess(false);
+        return r;
+    }
+
+    public static <T> ResultInfo<T> resOk(String msg, T data) {
+        ResultInfo<T> r = new ResultInfo<>();
+        r.setMsg(msg);
+        r.setData(data);
+        r.setSuccess(true);
+        return r;
+    }
+
+}

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlAgreementAttribution.java

@@ -1,4 +1,5 @@
 package com.jzg.commons.entity.agreement.po;
+
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -12,6 +13,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+
 /**
  * @author quchen
  * @date 2025/2/18 11:09

+ 1 - 4
commons/src/main/java/com/jzg/commons/entity/agreement/po/PtlInsAttributionTemplate.java

@@ -5,20 +5,17 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.jzg.commons.entity.agreement.vo.PtlInsAttributionTemplateSaveVo;
 import com.jzg.commons.util.idgen.IdGenerate;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import org.apache.ibatis.type.JdbcType;
-
 import java.io.Serializable;
 
 /**
  * 保险公司归属信息模板配置
  *
- * @TableName ptl_ins_attribution_template
+ * ptl_ins_attribution_template
  */
 @Data
 @Schema(description = "保险公司归属信息模板配置")

+ 163 - 0
commons/src/main/java/com/jzg/commons/entity/dto/InsOrdersParamVO.java

@@ -0,0 +1,163 @@
+package com.jzg.commons.entity.dto;
+
+
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@Data
+@Schema(description = "订单录入分页列表查询参数")
+public class InsOrdersParamVO extends PageRequest {
+
+    // --------------- 你原有字段 ---------------
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "车牌号")
+    private String licenseNo;
+
+    @Schema(description = "是否暂存 0-否;1-是")
+    private int isTemporarily;
+
+    @Schema(description = "订单状态")
+    private String orderStatus;
+
+    @Schema(description = "保险公司")
+    private String companyName;
+
+    @Schema(description = "保险公司id")
+    private String companyId;
+
+    @Schema(description = "业务员")
+    private String salesman;
+
+    @Schema(description = "0-待审核;1-已审核;2-已驳回")
+    private String auditStatus;
+
+    @Schema(description = "业务员归属")
+    private String salesmanCompany;
+
+    @Schema(description = "录单时间开始")
+    private String startDate;
+
+    @Schema(description = "录单时间结束")
+    private String endDate;
+
+    @Schema(description = "批改状态")
+    private String adjustStatus;
+
+    @Schema(description = "租户code")
+    private String systemCode;
+
+    @Schema(description = "前端传入录单时间")
+    private String[] recordingTime;
+
+    @Schema(description = "主订单标识")
+    private Integer parentId;
+
+    @Schema(description = "投保人")
+    private String policyholder;
+
+    @Schema(description = "投保人手机号")
+    private String policyholderMobile;
+
+    @Schema(description = "被保人")
+    private String insured;
+
+    @Schema(description = "被保人手机号")
+    private String insuredMobile;
+
+    @Schema(description = "险种Code")
+    private String productCode;
+
+    @Schema(description = "险种名称")
+    private String productName;
+
+    @Schema(description = "车架号")
+    private String vinNo;
+
+    @Schema(description = "车主姓名")
+    private String ownerName;
+
+    @Schema(description = "车主手机号")
+    private String ownerMobile;
+
+    @Schema(description = "投保人姓名(保单)")
+    private String policyName;
+
+    @Schema(description = "投保人手机号(保单)")
+    private String policyMobile;
+
+    @Schema(description = "被保人姓名(保单)")
+    private String insurName;
+
+    @Schema(description = "被保人手机号(保单)")
+    private String insurMobile;
+
+    @Schema(description = "交强险起保日期")
+    private Date ciStartDate;
+
+    @Schema(description = "商业险起保日期")
+    private Date biStartDate;
+
+    @Schema(description = "总保费")
+    private String sumPremium;
+
+    @Schema(description = "交强险保费")
+    private String ciPremium;
+
+    @Schema(description = "商业险保费")
+    private String biPremium;
+
+    @Schema(description = "驾乘险保费")
+    private String niPremium;
+
+    @Schema(description = "车船税")
+    private String vvTax;
+
+    @Schema(description = "录单人")
+    private String recorder;
+
+    @Schema(description = "业务员名称")
+    private String salesmanInfo;
+
+    @Schema(description = "业务员类型")
+    private String salesmanType;
+
+    @Schema(description = "协议名称")
+    private String agreementName;
+
+    @Schema(description = "部门id")
+    private String deptId;
+
+    @Schema(description = "部门名称")
+    private String deptName;
+
+    @Schema(description = "支付链接")
+    private String paymentLink;
+
+    @Schema(description = "批改单ID")
+    private Long adjustId;
+
+    @Schema(description = "批改后保费")
+    private String adjustPremium;
+
+    @Schema(description = "签单开始时间")
+    private String startSigningTime;
+
+    @Schema(description = "签单结束时间")
+    private String endSigningTime;
+
+    @Schema(description = "支付开始时间")
+    private String startPayTime;
+
+    @Schema(description = "支付结束时间")
+    private String endPayTime;
+
+    @Schema(description = "动态导出字段的列,以分号分隔")
+    private String exportDynamicFields;
+}

+ 0 - 2
commons/src/main/java/com/jzg/commons/entity/dto/JyxConfigAdd.java

@@ -5,8 +5,6 @@ import com.jzg.commons.entity.po.JyxBlame;
 import com.jzg.commons.entity.po.jyxSetting;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.math.BigDecimal;

+ 49 - 0
commons/src/main/java/com/jzg/commons/entity/dto/QrBarcodeConfigAddVO.java

@@ -0,0 +1,49 @@
+package com.jzg.commons.entity.dto;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Data
+@Schema(description = "二维码配置新增")
+public class QrBarcodeConfigAddVO {
+
+    /**
+     * 保险公司id
+     */
+    @Schema(description = "保险公司id")
+    @NotBlank(message = "保险公司id不能为空")
+    private String companyId;
+
+
+    /**
+     * 保险公司代码
+     */
+    @Schema(description = "保险公司代码")
+    @NotBlank(message = "保险公司代码不能为空")
+    private String companyCode;
+
+    /**
+     * 保险公司名称简称
+     */
+    @Schema(description = "保险公司名称简称")
+    @NotBlank(message = "保险公司名称简称不能为空")
+    private String companyName;
+
+    /**
+     * 类型   0:url   1:base码   2:h5
+     */
+    @Schema(description = "类型 0:url   1:base码   2:h5")
+    @NotBlank(message = "类型不能为空")
+    private String type;
+
+    /**
+     * 请求类型 1:api 2:python
+     */
+    @Schema(description = "请求类型 1:api 2:python")
+    @NotBlank(message = "请求类型不能为空")
+    private String apiType;
+
+
+}

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

@@ -95,5 +95,8 @@ public class ReceivableQueryVo extends PageRequest {
     @Schema(description = "商业起保时间")
     private String syEndDate;
 
+    @Schema(description = "产品名称")
+    private String productName;
+
 
 }

+ 34 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/OrderListVo.java

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.orders.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
@@ -13,103 +14,136 @@ public class OrderListVo {
     /**
      * 订单号
      */
+    @ExcelProperty("订单号")
     private String orderNo;
 
+    @ExcelProperty("公司id")
     private String companyId;
 
+    @ExcelProperty("公司名称")
     private String companyName;
 
     /**
      * 险种code
      */
+    @ExcelProperty("险种code")
     private String productCode;
     /**
      * 险种名称
      */
+    @ExcelProperty("险种名称")
     private String productName;
     //订单状态
+    @ExcelProperty("订单状态")
     private String orderStatus;
     //车牌号
+    @ExcelProperty("车牌号")
     private String licenseNo;
 
     //车主姓名
+    @ExcelProperty("车主姓名")
     private String ownerName;
 
     //车主手机号
+    @ExcelProperty("车主手机号")
     private String ownerMobile;
 
     //投保人姓名
+    @ExcelProperty("投保人姓名")
     private String policyName;
 
     //投保人手机号
+    @ExcelProperty("投保人手机号")
     private String policyMobile;
 
     //被保人姓名
+    @ExcelProperty("被保人姓名")
     private String insurName;
 
     //被保人手机号
+    @ExcelProperty("被保人手机号")
     private String insurMobile;
 
     //交强险起保时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("交强险起保时间")
     private LocalDateTime ciStartDate;
 
     //商业险起保时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("商业险起保时间")
     private LocalDateTime biStartDate;
 
     //车架号
+    @ExcelProperty("车架号")
     private String vinNo;
 
     // 报价时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ExcelProperty("报价时间")
     private LocalDateTime createTime;
 
     //总保费
+    @ExcelProperty("总保费")
     private String sumPremium;
 
     // 业务员信息
+    @ExcelProperty("业务员信息")
     private String salesmanInfo;
 
     // 业务员类型
+    @ExcelProperty("业务员类型")
     private String salesmanType;
 
     // 出单机构
+    @ExcelProperty("出单机构")
     private String deptName;
 
     // 出单协议
+    @ExcelProperty("出单协议")
     private String agreementName;
 
     // 录单人
+    @ExcelProperty("录单人")
     private String recorder;
 
     // 交强险保费
+    @ExcelProperty("交强险保费")
     private String ciPremium;
 
     // 商业险保费
+    @ExcelProperty("商业险保费")
     private String biPremium;
 
     // 非车险保费
+    @ExcelProperty("非车险保费")
     private String niPremium;
 
     // 车船税
+    @ExcelProperty("车船税")
     private String vvTax;
 
     // 签单时间
+    @ExcelProperty("签单时间")
     private LocalDateTime signingTime;
 
     //支付时间
+    @ExcelProperty("支付时间")
     private LocalDateTime payTime;
 
     //支付链接
+    @ExcelProperty("支付链接")
     private String paymentLink;
 
     //批改状态
+    @ExcelProperty("批改状态")
     private String adjustStatus;
 
     //批改id
+    @ExcelProperty("批改id")
     private String adjustId;
 
     //批改后的保费
+    @ExcelProperty("批改后的保费")
     private String adjustPremium;
 }

+ 1 - 0
commons/src/main/java/com/jzg/commons/entity/po/EsmInsCompany.java

@@ -1,4 +1,5 @@
 package com.jzg.commons.entity.po;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/po/SysAppManage.java

@@ -3,8 +3,8 @@ package com.jzg.commons.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.jzg.commons.core.base.BaseModel;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
-import javax.validation.constraints.NotBlank;
 
 @Data
 public class SysAppManage extends BaseModel {

+ 23 - 18
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java

@@ -369,27 +369,32 @@ public class QuoteEchoVo extends QuoteVo {
 
         //费用处理
         this.costs = new OrdersCostsVo();
-        this.costs.setCiPremium(insOrdersVo.getInsOrdersCosts().getJqPremium());
-        this.costs.setBiPremium(insOrdersVo.getInsOrdersCosts().getSyPremium());
-        this.costs.setNiPremium(insOrdersVo.getInsOrdersCosts().getJyPremium());
-        this.costs.setVvTax(insOrdersVo.getInsOrdersCosts().getTaxPremium());
-        this.costs.setSumPremium(insOrdersVo.getInsOrdersCosts().getSumPremium());
-        this.costs.setCiRatio(insOrdersVo.getInsOrdersCosts().getJqRatio());
-        this.costs.setBiRatio(insOrdersVo.getInsOrdersCosts().getSyRatio());
+        if(insOrdersVo.getInsOrdersCosts() != null){
+            this.costs.setCiPremium(insOrdersVo.getInsOrdersCosts().getJqPremium());
+            this.costs.setBiPremium(insOrdersVo.getInsOrdersCosts().getSyPremium());
+            this.costs.setNiPremium(insOrdersVo.getInsOrdersCosts().getJyPremium());
+            this.costs.setVvTax(insOrdersVo.getInsOrdersCosts().getTaxPremium());
+            this.costs.setSumPremium(insOrdersVo.getInsOrdersCosts().getSumPremium());
+            this.costs.setCiRatio(insOrdersVo.getInsOrdersCosts().getJqRatio());
+            this.costs.setBiRatio(insOrdersVo.getInsOrdersCosts().getSyRatio());
+        }
 
         //保单号信息
         this.policy = new OrdersPolicyVo();
-        this.policy.setCiApplyNumber(insOrdersVo.getInsOrdersPolicy().getJqApplyNo());
-        this.policy.setCiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getJqPolicyNo());
-        this.policy.setBiApplyNumber(insOrdersVo.getInsOrdersPolicy().getSyApplyNo());
-        this.policy.setBiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getSyPolicyNo());
-        this.policy.setNiApplyNumber(insOrdersVo.getInsOrdersPolicy().getJyApplyNo());
-        this.policy.setNiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getJyPolicyNo());
-        this.policy.setCiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getJqUrl());
-        this.policy.setBiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getSyUrl());
-        this.policy.setNiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getJyUrl());
-        this.policy.setCiPolicySignUrl(insOrdersVo.getInsOrdersPdfUrl().getJqSignUrl());
-
+        if(insOrdersVo.getInsOrdersPolicy() != null){
+            this.policy.setCiApplyNumber(insOrdersVo.getInsOrdersPolicy().getJqApplyNo());
+            this.policy.setCiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getJqPolicyNo());
+            this.policy.setBiApplyNumber(insOrdersVo.getInsOrdersPolicy().getSyApplyNo());
+            this.policy.setBiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getSyPolicyNo());
+            this.policy.setNiApplyNumber(insOrdersVo.getInsOrdersPolicy().getJyApplyNo());
+            this.policy.setNiPolicyNumber(insOrdersVo.getInsOrdersPolicy().getJyPolicyNo());
+        }
+        if(insOrdersVo.getInsOrdersPdfUrl() != null){
+            this.policy.setCiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getJqUrl());
+            this.policy.setBiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getSyUrl());
+            this.policy.setNiPolicyUrl(insOrdersVo.getInsOrdersPdfUrl().getJyUrl());
+            this.policy.setCiPolicySignUrl(insOrdersVo.getInsOrdersPdfUrl().getJqSignUrl());
+        }
 
         //评分信息
         this.scoreVo = new QuoteResultsVo.ScoreVo();

+ 3 - 3
commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java

@@ -11,9 +11,9 @@ import java.io.Serial;
 import java.io.Serializable;
 
 /**
- * @description: 订单交互信息
- * @author: wenks
- * @date: 2025/2/21 16:28
+ * @description 订单交互信息
+ * @author wenks
+ * @date 2025/2/21 16:28
  **/
 @Data
 public class OrderBase implements Serializable {

+ 4 - 4
commons/src/main/java/com/jzg/commons/entity/report/po/ReportUploadExcelTask.java

@@ -15,10 +15,10 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/16 15:30
- *  @Description: 导入任务表
+ * 导入任务表
+ *
+ * @author hxl
+ * @Date 2025/9/16 15:30
  */
 @TableName(value ="report_upload_excel_task")
 @Builder

+ 1 - 2
commons/src/main/java/com/jzg/commons/entity/vo/AdjustAllRefundInfoVo.java

@@ -3,11 +3,10 @@ package com.jzg.commons.entity.vo;
 import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
 import com.jzg.commons.entity.orders.po.InsOrdersRisk;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/vo/SysAppManageVo.java

@@ -4,7 +4,7 @@ package com.jzg.commons.entity.vo;
 import com.jzg.commons.core.base.PageRequest;
 import lombok.Data;
 
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
 
 @Data
 public class SysAppManageVo extends PageRequest {

+ 0 - 3
commons/src/main/java/com/jzg/commons/exception/GlobalExceptionHandler.java

@@ -1,9 +1,7 @@
 package com.jzg.commons.exception;
 
-import cn.hutool.core.util.StrUtil;
 import com.jzg.commons.core.page.HttpResult;
 import jakarta.servlet.http.HttpServletRequest;
-import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.sql.SQLIntegrityConstraintViolationException;
 import java.util.List;
-import java.util.Set;
 
 @ControllerAdvice
 public class GlobalExceptionHandler {

+ 116 - 11
commons/src/main/java/com/jzg/commons/util/MinioUtils.java

@@ -1,6 +1,7 @@
 package com.jzg.commons.util;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.minio.*;
 import io.minio.http.Method;
 import io.minio.messages.Bucket;
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
+import java.lang.reflect.Field;
 import java.net.URLDecoder;
 import java.util.*;
 
@@ -312,7 +314,7 @@ public class MinioUtils {
      * @return
      */
     @SneakyThrows(Exception.class)
-    public static StatObjectResponse  getFileStatusInfo(String bucketName, String objectName) {
+    public static StatObjectResponse getFileStatusInfo(String bucketName, String objectName) {
         return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
     }
 
@@ -385,7 +387,7 @@ public class MinioUtils {
         try {
             GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build();
             return minioClient.getPresignedObjectUrl(args);
-        }catch (Exception e){
+        } catch (Exception e) {
             return null;
         }
     }
@@ -404,24 +406,25 @@ public class MinioUtils {
 
     /**
      * 导出Excel并上传到MinIO
+     *
      * @param fileName 文件名(不含扩展名)
-     * @param clazz 实体类字节码
-     * @param data 导出数据列表
-     * @param <T> 实体类泛型
+     * @param clazz    实体类字节码
+     * @param data     导出数据列表
+     * @param <T>      实体类泛型
      * @return 上传后的文件访问URL
      * @throws Exception 可能抛出的异常
      */
     public static <T> String exportAndUploadToMinIO(String fileName,
-                                             Class<T> clazz,
-                                             List<T> data,
-                                             String bucketName,
-                                             String minioUrl
-                                             ) throws Exception {
+                                                    Class<T> clazz,
+                                                    List<T> data,
+                                                    String bucketName,
+                                                    String minioUrl
+    ) throws Exception {
         // 生成Excel并获取字节数组
         byte[] excelBytes = generateExcelBytes(clazz, data);
 
         // 上传到MinIO并返回URL
-        return uploadToMinIO(excelBytes, fileName,bucketName,minioUrl);
+        return uploadToMinIO(excelBytes, fileName, bucketName, minioUrl);
     }
 
     /**
@@ -466,4 +469,106 @@ public class MinioUtils {
         String baseUrl = minioUrl.endsWith("/") ? minioUrl.substring(0, minioUrl.length() - 1) : minioUrl;
         return baseUrl + "/" + bucketName + "/" + objectName;
     }
+
+    // ===================== 【动态列导出】 =====================
+
+    /**
+     * 动态列导出(重载方法)
+     */
+    public static <T> String exportAndUploadToMinIO(
+            String fileName,
+            Class<T> clazz,
+            List<T> data,
+            Set<String> includeFields,
+            String bucketName,
+            String minioUrl
+    ) throws Exception {
+        byte[] excelBytes = generateExcelBytes(clazz, data, includeFields);
+        return uploadToMinIO(excelBytes, fileName, bucketName, minioUrl);
+    }
+
+    /**
+     * 动态生成Excel
+     */
+    private static <T> byte[] generateExcelBytes(Class<T> clazz, List<T> data, Set<String> includeFields) throws IOException {
+        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+            if (includeFields == null || includeFields.isEmpty()) {
+                // 没有指定列 → 导出全部
+                EasyExcel.write(outputStream, clazz)
+                        .sheet("数据列表")
+                        .doWrite(data);
+            } else {
+                // 有指定列 → 只导出包含的列(官方推荐,无私有方法)
+                EasyExcel.write(outputStream)
+                        .head(createDynamicHead(clazz, includeFields)) // 动态表头
+                        .sheet("数据列表")
+                        .doWrite(convertData(data, includeFields));   // 动态数据
+            }
+
+            return outputStream.toByteArray();
+        }
+    }
+
+    /**
+     * 动态生成表头(只保留需要的字段)
+     */
+    private static List<List<String>> createDynamicHead(Class<?> clazz, Set<String> includeFields) {
+        List<List<String>> head = new ArrayList<>();
+
+        for (String fieldName : includeFields) {
+            try {
+                Field field = clazz.getDeclaredField(fieldName);
+                ExcelProperty anno = field.getAnnotation(ExcelProperty.class);
+
+                String name = (anno != null && anno.value().length > 0)
+                        ? String.join(",", anno.value())
+                        : fieldName;
+
+                head.add(Collections.singletonList(name));
+            } catch (NoSuchFieldException e) {
+                // 防止字段不存在
+                head.add(Collections.singletonList(fieldName));
+            }
+        }
+        return head;
+    }
+
+    /**
+     * 动态抽取数据(只保留需要的字段)
+     */
+    private static <T> List<List<Object>> convertData(List<T> dataList, Set<String> includeFields) {
+        List<List<Object>> result = new ArrayList<>();
+        if (dataList == null || dataList.isEmpty()) return result;
+
+        Class<?> clazz = dataList.get(0).getClass();
+
+        // 按 includeFields 顺序构建字段列表
+        List<Field> fieldList = new ArrayList<>();
+        for (String fieldName : includeFields) {
+            try {
+                Field field = clazz.getDeclaredField(fieldName);
+                field.setAccessible(true);
+                fieldList.add(field);
+            } catch (NoSuchFieldException e) {
+                fieldList.add(null); // 占位,防止错位
+            }
+        }
+
+        for (T data : dataList) {
+            List<Object> row = new ArrayList<>();
+            for (Field field : fieldList) {
+
+                try {
+                    row.add(field != null ? field.get(data) : null);
+                } catch (Exception e) {
+                    row.add(null);
+                }
+            }
+            result.add(row);
+        }
+        return result;
+    }
+
+
+    // ===================== 【动态列结束】 =====================
 }

+ 100 - 103
consoleStatistics/src/main/java/com/jzg/console/controller/ReportBusinessDataManageController.java

@@ -3,7 +3,6 @@ package com.jzg.console.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.report.dto.ReportSearchConfigurationDto;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.console.service.*;
 import io.swagger.v3.oas.annotations.Operation;
@@ -12,13 +11,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 17:56
- *  @Description: 业务数据管理
+ * 业务数据管理
+ *
+ * @author hxl
+ * @Date 2025/9/22 17:56
  */
 @Slf4j
 @Tag(name="业务数据管理")
@@ -52,10 +49,10 @@ public class ReportBusinessDataManageController extends BaseController {
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-保险公司-列表
+     * 业务数据-保险公司-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-保险公司-列表查询", description = "业务数据-保险公司-列表查询")
     @PostMapping(value = "/companyDataManagePageList")
@@ -64,14 +61,15 @@ public class ReportBusinessDataManageController extends BaseController {
             IPage<?> pageList = reportCompanyDataManageService.getPageListByParams(reportSearchCommonVo);
             return HttpResult.ok(pageList);
         }catch (Exception e){
+            log.error("业务数据-保险公司-列表查询", e);
             return HttpResult.error(e.getMessage());
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-保险公司-列表导出
+     * 业务数据-保险公司-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-保险公司-列表导出", description = "业务数据-保险公司-列表导出")
     @PostMapping(value = "/companyDataManageToTask")
@@ -84,10 +82,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-保险公司-明细查询
+     * 业务数据-保险公司-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-保险公司-明细查询", description = "业务数据-保险公司-明细查询")
     @PostMapping(value = "/companyDataManageDetailPageList")
@@ -100,10 +98,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-保险公司-明细导出
+     * 业务数据-保险公司-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-保险公司-明细导出", description = "业务数据-保险公司-明细导出")
     @PostMapping(value = "/companyDataManageDetailToTask")
@@ -117,10 +115,10 @@ public class ReportBusinessDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-险种报表-列表
+     * 业务数据-险种报表-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-险种报表-列表查询", description = "业务数据-险种报表-列表查询")
     @PostMapping(value = "/riskDataManagePageList")
@@ -133,10 +131,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-险种报表-列表导出
+     * 业务数据-险种报表-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-险种报表-列表导出", description = "业务数据-险种报表-列表导出")
     @PostMapping(value = "/riskDataManageToTask")
@@ -149,10 +147,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-保险公司-明细查询
+     * 业务数据-保险公司-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-险种报表-明细查询", description = "业务数据-险种报表-明细查询")
     @PostMapping(value = "/riskDataManageDetailPageList")
@@ -165,10 +163,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-保险公司-明细导出
+     * 业务数据-保险公司-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-险种报表-明细导出", description = "业务数据-险种报表-明细导出")
     @PostMapping(value = "/riskDataManageDetailToPage")
@@ -182,10 +180,10 @@ public class ReportBusinessDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-对接人-列表
+     * 业务数据-对接人-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-对接人-列表查询", description = "业务数据-对接人-列表查询")
     @PostMapping(value = "/contactPersonDataManagePageList")
@@ -198,10 +196,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-对接人-列表导出
+     * 业务数据-对接人-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-对接人-列表导出", description = "业务数据-对接人-列表导出")
     @PostMapping(value = "/contactPersonDataManageToTask")
@@ -214,10 +212,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-对接人-明细查询
+     * 业务数据-对接人-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-对接人-明细查询", description = "业务数据-对接人-明细查询")
     @PostMapping(value = "/contactPersonDataManageDetailPageList")
@@ -230,10 +228,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-对接人-明细导出
+     * 业务数据-对接人-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-对接人-明细导出", description = "业务数据-对接人-明细导出")
     @PostMapping(value = "/contactPersonDataManageDetailToTask")
@@ -247,10 +245,10 @@ public class ReportBusinessDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-业务员-列表
+     * 业务数据-业务员-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-业务员-列表查询", description = "业务数据-业务员-列表查询")
     @PostMapping(value = "/salesmanDataManagePageList")
@@ -263,10 +261,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-业务员-列表导出
+     * 业务数据-业务员-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-业务员-列表导出", description = "业务数据-业务员-列表导出")
     @PostMapping(value = "/salesmanDataManageToTask")
@@ -279,10 +277,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-保险公司-明细查询
+     * 业务数据-保险公司-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-业务员-明细查询", description = "业务数据-业务员-明细查询")
     @PostMapping(value = "/salesmanDataManageDetailPageList")
@@ -295,10 +293,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-业务员-明细导出
+     * 业务数据-业务员-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-业务员-明细导出", description = "业务数据-业务员-明细导出")
     @PostMapping(value = "/salesmanDataManageDetailToTask")
@@ -312,10 +310,10 @@ public class ReportBusinessDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-渠道-列表
+     * 业务数据-渠道-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-渠道-列表查询", description = "业务数据-渠道-列表查询")
     @PostMapping(value = "/channelDataManagePageList")
@@ -329,10 +327,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-渠道-列表导出
+     * 业务数据-渠道-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-渠道-列表导出", description = "业务数据-渠道-列表导出")
     @PostMapping(value = "/channelDataManageToTask")
@@ -345,10 +343,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-渠道-明细查询
+     * 业务数据-渠道-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-渠道-明细查询", description = "业务数据-渠道-明细查询")
     @PostMapping(value = "/channelDataManageDetailPageList")
@@ -361,10 +359,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-渠道-明细导出
+     * 业务数据-渠道-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-渠道-明细导出", description = "业务数据-渠道-明细导出")
     @PostMapping(value = "/channelDataManageDetailToTask")
@@ -378,10 +376,10 @@ public class ReportBusinessDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 业务数据-电销-列表
+     * 业务数据-电销-列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:08
      */
     @Operation(summary = "业务数据-电销-列表查询", description = "业务数据-电销-列表查询")
     @PostMapping(value = "/telemarketingDataManagePageList")
@@ -394,10 +392,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 业务数据-电销-列表导出
+     * 业务数据-电销-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:09
      */
     @Operation(summary = "业务数据-电销-列表导出", description = "业务数据-电销-列表导出")
     @PostMapping(value = "/telemarketingDataManageToTask")
@@ -410,10 +408,10 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-电销-明细查询
+     * 业务数据-电销-明细查询
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-电销-明细查询", description = "业务数据-电销-明细查询")
     @PostMapping(value = "/telemarketingDataManageDetailPageList")
@@ -426,10 +424,9 @@ public class ReportBusinessDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:11
-     *  @Description:  业务数据-电销-明细导出
+     * 业务数据-电销-明细导出
+     * @author hxl
+     * @Date 2025/9/22 17:11
      */
     @Operation(summary = "业务数据-电销-明细导出", description = "业务数据-电销-明细导出")
     @PostMapping(value = "/telemarketingDataManageDetailToTask")

+ 44 - 44
consoleStatistics/src/main/java/com/jzg/console/controller/ReportQuotationDataManageController.java

@@ -12,10 +12,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 17:56
- *  @Description: 报价数据管理
+ *  
+ * @author hxl
+ * @Date 2025/9/22 17:56
+ *  报价数据管理
  */
 @Slf4j
 @Tag(name="报价数据管理")
@@ -45,10 +45,10 @@ public class ReportQuotationDataManageController extends BaseController {
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 报价数据-报价订单-列表
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:08
+     *  报价数据-报价订单-列表
      */
     @Operation(summary = "报价数据-报价订单-列表查询", description = "报价数据-报价订单-列表查询")
     @PostMapping(value = "/quotationOrderDataPageList")
@@ -61,10 +61,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 报价数据-报价订单-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:09
+     *  报价数据-报价订单-列表导出
      */
     @Operation(summary = "报价数据-报价订单-列表导出", description = "报价数据-报价订单-列表导出")
     @PostMapping(value = "/quotationOrderDataToTask")
@@ -78,10 +78,10 @@ public class ReportQuotationDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 报价数据-保险公司-列表
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:08
+     *  报价数据-保险公司-列表
      */
     @Operation(summary = "报价数据-保险公司-列表查询", description = "报价数据-保险公司-列表查询")
     @PostMapping(value = "/companyQuotationDataPageList")
@@ -94,10 +94,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 报价数据-保险公司-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:09
+     *  报价数据-保险公司-列表导出
      */
     @Operation(summary = "报价数据-保险公司-列表导出", description = "报价数据-保险公司-列表导出")
     @PostMapping(value = "/companyQuotationDataToTask")
@@ -110,10 +110,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 报价数据-业务员-列表
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:08
+     *  报价数据-业务员-列表
      */
     @Operation(summary = "报价数据--业务员-列表查询", description = "报价数据--业务员-列表查询")
     @PostMapping(value = "/salesmanQuotationDataPageList")
@@ -126,10 +126,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 报价数据-业务员-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:09
+     *  报价数据-业务员-列表导出
      */
     @Operation(summary = "报价数据-业务员-列表导出", description = "报价数据-业务员-列表导出")
     @PostMapping(value = "/salesmanQuotationDataToTask")
@@ -143,10 +143,10 @@ public class ReportQuotationDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 报价数据-渠道-列表
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:08
+     *  报价数据-渠道-列表
      */
     @Operation(summary = "报价数据-渠道-列表查询", description = "报价数据-渠道-列表查询")
     @PostMapping(value = "/channelQuotationDataPageList")
@@ -159,10 +159,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 报价数据-渠道-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:09
+     *  报价数据-渠道-列表导出
      */
     @Operation(summary = "报价数据-渠道-列表导出", description = "报价数据-渠道-列表导出")
     @PostMapping(value = "/channelQuotationDataToTask")
@@ -176,10 +176,10 @@ public class ReportQuotationDataManageController extends BaseController {
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:08
-     *  @Description: 报价数据-电销-列表
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:08
+     *  报价数据-电销-列表
      */
     @Operation(summary = "报价数据-电销-列表查询", description = "报价数据-电销-列表查询")
     @PostMapping(value = "/telemarketingQuotationDataPageList")
@@ -192,10 +192,10 @@ public class ReportQuotationDataManageController extends BaseController {
         }
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:09
-     *  @Description: 报价数据-电销-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/22 17:09
+     *  报价数据-电销-列表导出
      */
     @Operation(summary = "报价数据-电销-列表导出", description = "报价数据-电销-列表导出")
     @PostMapping(value = "/telemarketingQuotationDataToTask")

+ 3 - 4
consoleStatistics/src/main/java/com/jzg/console/controller/ReportUploadExcelTaskController.java

@@ -15,7 +15,6 @@ import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import java.io.FileInputStream;
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
@@ -23,9 +22,9 @@ import java.nio.charset.StandardCharsets;
 
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/16 11:15
+ *  @version 1.0
+ *  @author hxl
+ *  @date 2025/9/16 11:15
  *  @Description: 导出任务中心
  */
 @Slf4j

+ 13 - 17
consoleStatistics/src/main/java/com/jzg/console/mapper/ReportCompanyDataManageMapper.java

@@ -1,37 +1,33 @@
 package com.jzg.console.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.report.dto.ReportCompanyDataManageDto;
-import com.jzg.commons.entity.report.dto.ReportUploadExcelTaskDto;
-import com.jzg.commons.entity.report.po.ReportUploadExcelTask;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.commons.entity.report.vo.ReportUploadExcelTaskVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/23 15:35
- *  @Description: 业务数据-保险公司
- */ 
+ * 业务数据-保险公司
+ *
+ *  @author hxl
+ *  @Date 2025/9/23 15:35
+ */
 public interface ReportCompanyDataManageMapper  {
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/23 15:37
-     *  @Description:  业务数据-保险公司-列表查询
+     * 业务数据-保险公司-列表查询
+     *
+     *  @author hxl
+     *  @Date 2025/9/23 15:37
      */
     IPage<ReportCompanyDataManageDto> getReportCompanyDataManagePageListByParams(@Param("page") Page<ReportCompanyDataManageDto> page, @Param("vo") ReportSearchCommonVo reportSearchCommonVo);
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/23 15:37
-     *  @Description:  业务数据-保险公司-导出查询
+     * 业务数据-保险公司-导出查询
+     *
+     *  @author hxl
+     *  @Date 2025/9/23 15:37
      */
     List<ReportCompanyDataManageDto> getReportCompanyDataManageAllListByParams(@Param("vo") ReportSearchCommonVo reportSearchCommonVo);
 }

+ 21 - 21
consoleStatistics/src/main/java/com/jzg/console/service/ReportBaseService.java

@@ -4,43 +4,43 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  基础的实现类
- */ 
+ * 基础的实现类
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:43
+ */
 public interface ReportBaseService {
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:02
-     *  @Description:  查询列表
+     *  业务数据-保险公司-列表
+     *
+     *  @author hxl
+     *  @Date 2025/9/22 17:02
      */
     IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo);
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:02
-     *  @Description:  导出列表
+     * 导出列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:02
      */
     void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo);
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:02
-     *  @Description:  查询详情列表
+     * 查询详情列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:02
      */
     IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo);
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/22 17:02
-     *  @Description:  导出详情列表
+     * 导出详情列表
+     *
+     * @author hxl
+     * @Date 2025/9/22 17:02
      */
     void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo);
 

+ 5 - 5
consoleStatistics/src/main/java/com/jzg/console/service/ReportCompanyDataManageService.java

@@ -1,11 +1,11 @@
 package com.jzg.console.service;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  业务数据-保险公司
- */ 
+ * 业务数据-保险公司
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:43
+ */
 public interface ReportCompanyDataManageService extends  ReportBaseService{
 
 }

+ 4 - 5
consoleStatistics/src/main/java/com/jzg/console/service/ReportContactPersonDataManageService.java

@@ -1,11 +1,10 @@
 package com.jzg.console.service;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  业务数据-对接人
- */ 
+ * 业务数据-对接人
+ * @author hxl
+ * @Date 2025/9/22 16:43
+ */
 public interface ReportContactPersonDataManageService extends  ReportBaseService{
 
 }

+ 4 - 4
consoleStatistics/src/main/java/com/jzg/console/service/ReportQuotationOrderDataService.java

@@ -1,10 +1,10 @@
 package com.jzg.console.service;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  报价数据-报价订单
+ * 报价数据-报价订单
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:43
  */ 
 public interface ReportQuotationOrderDataService extends  ReportBaseService{
 

+ 5 - 5
consoleStatistics/src/main/java/com/jzg/console/service/ReportRiskDataManageService.java

@@ -1,11 +1,11 @@
 package com.jzg.console.service;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  业务数据-险种报表
- */ 
+ * 业务数据-险种报表
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:43
+ */
 public interface ReportRiskDataManageService extends  ReportBaseService{
 
 }

+ 56 - 16
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportBaseServiceImpl.java

@@ -1,25 +1,23 @@
 package com.jzg.console.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.jzg.commons.entity.report.dto.ReportCompanyDataManageDto;
 import com.jzg.commons.entity.report.po.ReportUploadExcelTask;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.console.service.ReportUploadExcelTaskService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
- *  @version 
- *  @author: hxl
- *  @Date: 2025/9/22 16:43
- *  @Description:  基础的实现类处理导出excel逻辑
+ * 基础的实现类处理导出excel逻辑
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:43
  */
 @Slf4j
 @Service
@@ -34,11 +32,11 @@ public class ReportBaseServiceImpl {
     // 从配置文件获取存储桶名称
     @Value("${minio.bucket-name:excel-files}")
     private String bucketName;
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:28
-     *  @Description:  通用上传文件
+     * 通用上传文件
+     * @author hxl
+     * @Date 2025/9/24 10:28
      */
     public <T> void upLoadFile(ReportSearchCommonVo reportSearchCommonVo, Class<T> clazz, List<T> list, String upLoadName) {
         //打印导入数据的时间
@@ -53,14 +51,14 @@ public class ReportBaseServiceImpl {
                 .readStatus(0)
                 .build();
         reportUploadExcelTaskService.save(reportUploadExcelTask);
-        long endTime = System.currentTimeMillis();
+        long endTime;
         try{
             String fileName = MinioUtils.exportAndUploadToMinIO(upLoadName, clazz, list,bucketName,minioUrl);
             endTime = System.currentTimeMillis();
             long duration = endTime - startTime;
             double minutes = (double) duration / (1000 * 60);
-            log.info("方法执行时间: " + minutes + " 分钟");
-            log.debug("方法执行时间: " + minutes + " 分钟");
+            log.info("MinioUtils.exportAndUploadToMinIO方法执行时间:[{}]分钟", minutes);
+            log.debug("MinioUtils.exportAndUploadToMinIO方法执行时间[{}]分钟", minutes);
             reportUploadExcelTask.setTaskStatus(2);
             reportUploadExcelTask.setUploadMinutes(minutes);
             reportUploadExcelTask.setFilePath(fileName);
@@ -68,8 +66,8 @@ public class ReportBaseServiceImpl {
             endTime = System.currentTimeMillis();
             long duration = endTime - startTime;
             double minutes = (double) duration / (1000 * 60);
-            log.info("方法执行时间: " + minutes + " 分钟");
-            log.debug("方法执行时间: " + minutes + " 分钟");
+            log.info("MinioUtils.exportAndUploadToMinIO方法执行异常,方法执行时间[{}]分钟 ", minutes);
+            log.debug("MinioUtils.exportAndUploadToMinIO方法执行异常方法执行时间[{}]分钟",minutes);
             reportUploadExcelTask.setTaskStatus(0);
             reportUploadExcelTask.setUploadMinutes(minutes);
             reportUploadExcelTask.setUploadMsg(e.getMessage());
@@ -77,4 +75,46 @@ public class ReportBaseServiceImpl {
         reportUploadExcelTaskService.updateById(reportUploadExcelTask);
     }
 
+
+    /**
+     * 动态字段导出(新增,不影响原有)
+     */
+    public <T> void upLoadFileDynamic(
+            ReportSearchCommonVo reportSearchCommonVo,
+            Class<T> clazz,
+            List<T> list,
+            Set<String> includeFields,
+            String upLoadName
+    ) {
+        long startTime = System.currentTimeMillis();
+        ReportUploadExcelTask task = ReportUploadExcelTask.builder()
+                .taskName(upLoadName)
+                .routerPathKey(reportSearchCommonVo.getRouterKey())
+                .uploadUserId(reportSearchCommonVo.getUserId())
+                .uploadUserName(reportSearchCommonVo.getUserId())
+                .uploadDate(new Date())
+                .taskStatus(1)
+                .readStatus(0)
+                .build();
+        reportUploadExcelTaskService.save(task);
+
+        try {
+            // 调用动态导出
+            String fileName = MinioUtils.exportAndUploadToMinIO(
+                    upLoadName, clazz, list, includeFields, bucketName, minioUrl
+            );
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            task.setTaskStatus(2);
+            task.setUploadMinutes(minutes);
+            task.setFilePath(fileName);
+        } catch (Exception e) {
+            long duration = System.currentTimeMillis() - startTime;
+            double minutes = (double) duration / (1000 * 60);
+            task.setTaskStatus(0);
+            task.setUploadMinutes(minutes);
+            task.setUploadMsg(e.getMessage());
+        }
+        reportUploadExcelTaskService.updateById(task);
+    }
 }

+ 26 - 27
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportCompanyDataManageServiceImpl.java

@@ -18,10 +18,10 @@ import java.util.Date;
 import java.util.List;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  业务数据-保险公司
+ * 业务数据-保险公司
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:45
  */
 @Slf4j
 @Service
@@ -32,22 +32,21 @@ public class ReportCompanyDataManageServiceImpl extends ReportBaseServiceImpl im
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/23 11:49
-     *  @Description:  业务数据-保险公司-列表查询
+     * 业务数据-保险公司-列表查询
+     *
+     * @author hxl
+     * @Date 2025/9/23 11:49
      */
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
         Page<ReportCompanyDataManageDto> page = new Page<>(reportSearchCommonVo.getPageNo(), reportSearchCommonVo.getPageSize());
-        IPage<ReportCompanyDataManageDto> orderList = reportCompanyDataManageMapper.getReportCompanyDataManagePageListByParams(page, reportSearchCommonVo);
-        return orderList;
+        return reportCompanyDataManageMapper.getReportCompanyDataManagePageListByParams(page, reportSearchCommonVo);
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:21
-     *  @Description: 列表导出
+     * 列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/24 10:21
      */
     @Async
     @Override
@@ -56,10 +55,10 @@ public class ReportCompanyDataManageServiceImpl extends ReportBaseServiceImpl im
         upLoadFile(reportSearchCommonVo, ReportCompanyDataManageDto.class,list,"业务数据-保险公司-列表查询-"+ reportSearchCommonVo.getUserId());
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/23 11:49
-     *  @Description:  业务数据-保险公司-明细查询
+     * 业务数据-保险公司-明细查询
+     *
+     *  @author hxl
+     *  @Date 2025/9/23 11:49
      */
     @Override
     public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -67,17 +66,17 @@ public class ReportCompanyDataManageServiceImpl extends ReportBaseServiceImpl im
         IPage<ReportCompanyDataManageDetailDto> detailPageList = new Page<ReportCompanyDataManageDetailDto>();
         List<ReportCompanyDataManageDetailDto> detailList = getDetailList();
         detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
+        detailPageList.setTotal(1L);
         detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageSize());
         return detailPageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:39
-     *  @Description:  业务数据-保险公司-明细导出
+     * 业务数据-保险公司-明细导出
+     *
+     *  @author hxl
+     *  @Date 2025/9/24 10:39
      */
     @Override
     public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -85,10 +84,10 @@ public class ReportCompanyDataManageServiceImpl extends ReportBaseServiceImpl im
         upLoadFile(reportSearchCommonVo, ReportCompanyDataManageDetailDto.class,detailList,"业务数据-保险公司-明细导出-"+ reportSearchCommonVo.getUserId());
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     * 模拟数据
+     *
+     *  @author hxl
+     *  @Date 2025/9/24 10:42
      */
     public List<ReportCompanyDataManageDetailDto>  getDetailList(){
          List<ReportCompanyDataManageDetailDto> list =new ArrayList<>();

+ 31 - 38
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportContactPersonDataManageServiceImpl.java

@@ -1,20 +1,12 @@
 package com.jzg.console.service.impl;
 
 
-import com.alibaba.excel.annotation.ExcelIgnore;
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.entity.report.dto.ReportContactPersonDataManageDetailDto;
 import com.jzg.commons.entity.report.dto.ReportContactPersonDataManageDto;
-import com.jzg.commons.entity.report.dto.ReportRiskDataManageDetailDto;
-import com.jzg.commons.entity.report.dto.ReportRiskDataManageDto;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.console.service.ReportContactPersonDataManageService;
-import io.swagger.v3.oas.annotations.media.Schema;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -23,20 +15,20 @@ import java.util.Date;
 import java.util.List;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  业务数据-对接人
+ * 业务数据-对接人
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:45
  */
 @Service
 public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceImpl  implements ReportContactPersonDataManageService {
 
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 14:12
-     *  @Description: 业务数据-对接人-列表查询
+     * 业务数据-对接人-列表查询
+     *
+     * @author hxl
+     * @Date 2025/9/24 14:12
      */
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -44,17 +36,17 @@ public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceI
         IPage<ReportContactPersonDataManageDto> pageList = new Page<ReportContactPersonDataManageDto>();
         List<ReportContactPersonDataManageDto> list = getList();
         pageList.setRecords(list);
-        pageList.setTotal(1l);
+        pageList.setTotal(1L);
         pageList.setCurrent(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageSize());
         return pageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 14:13
-     *  @Description:  业务数据-对接人-列表导出
+     * 业务数据-对接人-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/24 14:13
      */
     @Override
     public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -62,10 +54,10 @@ public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceI
         upLoadFile(reportSearchCommonVo, ReportContactPersonDataManageDto.class,list,"业务数据-对接人-列表导出-"+ reportSearchCommonVo.getUserId());
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 14:13
-     *  @Description: 业务数据-对接人-明细列表
+     * 业务数据-对接人-明细列表
+     *
+     * @author hxl
+     * @Date 2025/9/24 14:13
      */
     @Override
     public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -73,17 +65,17 @@ public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceI
         IPage<ReportContactPersonDataManageDetailDto> detailPageList = new Page<ReportContactPersonDataManageDetailDto>();
         List<ReportContactPersonDataManageDetailDto> detailList = getDetailList();
         detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
+        detailPageList.setTotal(1L);
         detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageSize());
         return detailPageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 14:13
-     *  @Description: 业务数据-对接人-明细导出
+     *  
+     * @author hxl
+     * @Date 2025/9/24 14:13
+     *   业务数据-对接人-明细导出
      */
     @Override
     public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -92,10 +84,11 @@ public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceI
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     * 模拟数据
+     *  TODO 这里使用的也是假数据
+     * @author hxl
+     * @Date 2025/9/24 10:42
+     *
      */
     public List<ReportContactPersonDataManageDto>  getList(){
         List<ReportContactPersonDataManageDto> list =new ArrayList<>();
@@ -109,10 +102,10 @@ public class ReportContactPersonDataManageServiceImpl extends ReportBaseServiceI
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     * 模拟数据
+     *
+     * @author hxl
+     * @Date 2025/9/24 10:42
      */
     public List<ReportContactPersonDataManageDetailDto>  getDetailList(){
         List<ReportContactPersonDataManageDetailDto> list =new ArrayList<>();

+ 17 - 26
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportQuotationOrderDataServiceImpl.java

@@ -1,38 +1,29 @@
 package com.jzg.console.service.impl;
 
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.report.dto.ReportQuotationOrderDataDto;
-import com.jzg.commons.entity.report.dto.ReportRiskDataManageDetailDto;
-import com.jzg.commons.entity.report.dto.ReportRiskDataManageDto;
-import com.jzg.commons.entity.report.dto.ReportSalesmanDataManageDto;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
-import com.jzg.console.service.ReportChannelDataManageService;
 import com.jzg.console.service.ReportQuotationOrderDataService;
-import io.swagger.v3.oas.annotations.media.Schema;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  报价数据-报价订单
+ *  
+ * @author hxl
+ * @Date 2025/9/22 16:45
+ *   报价数据-报价订单
  */
 @Service
 public class ReportQuotationOrderDataServiceImpl extends ReportBaseServiceImpl implements ReportQuotationOrderDataService {
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 15:37
-     *  @Description: 报价数据-报价订单-列表查询
+     *  
+     * @author hxl
+     * @Date 2025/9/24 15:37
+     *  报价数据-报价订单-列表查询
      */
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -40,17 +31,17 @@ public class ReportQuotationOrderDataServiceImpl extends ReportBaseServiceImpl i
         IPage<ReportQuotationOrderDataDto> pageList = new Page<ReportQuotationOrderDataDto>();
         List<ReportQuotationOrderDataDto> list = getList();
         pageList.setRecords(list);
-        pageList.setTotal(1l);
+        pageList.setTotal(1L);
         pageList.setCurrent(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageSize());
         return pageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/25 9:02
-     *  @Description:  报价数据-报价订单-列表导出
+     *  
+     * @author hxl
+     * @Date 2025/9/25 9:02
+     *   报价数据-报价订单-列表导出
      */
     @Override
     public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -67,10 +58,10 @@ public class ReportQuotationOrderDataServiceImpl extends ReportBaseServiceImpl i
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     *  
+     * @author hxl
+     * @Date 2025/9/24 10:42
+     *   模拟数据
      */
     public List<ReportQuotationOrderDataDto>  getList(){
         List<ReportQuotationOrderDataDto> list =new ArrayList<>();

+ 35 - 31
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportRiskDataManageServiceImpl.java

@@ -1,11 +1,14 @@
 package com.jzg.console.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.report.dto.ReportRiskDataManageDetailDto;
 import com.jzg.commons.entity.report.dto.ReportRiskDataManageDto;
 import com.jzg.commons.entity.report.vo.ReportSearchCommonVo;
 import com.jzg.console.service.ReportRiskDataManageService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -13,19 +16,20 @@ import java.util.Date;
 import java.util.List;
 
 /**
- *  @version
- *  @author: hxl
- *  @Date: 2025/9/22 16:45
- *  @Description:  业务数据-险种报表
+ * 业务数据-险种报表
+ *
+ * @author hxl
+ * @Date 2025/9/22 16:45
  */
 @Service
 public class ReportRiskDataManageServiceImpl extends ReportBaseServiceImpl  implements ReportRiskDataManageService {
 
+    private static final Logger log = LoggerFactory.getLogger(ReportRiskDataManageServiceImpl.class);
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 11:26
-     *  @Description:  业务数据-险种报表-列表查詢
+     * 业务数据-险种报表-列表查詢
+     *
+     * @author hxl
+     * @Date 2025/9/24 11:26
      */
     @Override
     public IPage<?> getPageListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -33,17 +37,17 @@ public class ReportRiskDataManageServiceImpl extends ReportBaseServiceImpl  impl
         IPage<ReportRiskDataManageDto> pageList = new Page<ReportRiskDataManageDto>();
         List<ReportRiskDataManageDto> list = getList();
         pageList.setRecords(list);
-        pageList.setTotal(1l);
+        pageList.setTotal(1L);
         pageList.setCurrent(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageNo());
         pageList.setPages(reportSearchCommonVo.getPageSize());
         return pageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 11:27
-     *  @Description:  业务数据-险种报表-列表导出
+     * 业务数据-险种报表-列表导出
+     *
+     * @author hxl
+     * @Date 2025/9/24 11:27
      */
     @Override
     public void downloadListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -51,10 +55,10 @@ public class ReportRiskDataManageServiceImpl extends ReportBaseServiceImpl  impl
         upLoadFile(reportSearchCommonVo, ReportRiskDataManageDto.class,list,"业务数据-险种报表-列表导出-"+ reportSearchCommonVo.getUserId());
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 11:27
-     *  @Description:  业务数据-险种报表-明细
+     * 业务数据-险种报表-明细
+     *
+     * @author hxl
+     * @Date 2025/9/24 11:27
      */
     @Override
     public IPage<?> getPageDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
@@ -62,45 +66,45 @@ public class ReportRiskDataManageServiceImpl extends ReportBaseServiceImpl  impl
         IPage<ReportRiskDataManageDetailDto> detailPageList = new Page<ReportRiskDataManageDetailDto>();
         List<ReportRiskDataManageDetailDto> detailList = getDetailList();
         detailPageList.setRecords(detailList);
-        detailPageList.setTotal(1l);
+        detailPageList.setTotal(1L);
         detailPageList.setCurrent(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageNo());
         detailPageList.setPages(reportSearchCommonVo.getPageSize());
         return detailPageList;
     }
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 11:27
-     *  @Description:  业务数据-险种报表-明细导出
+     * 业务数据-险种报表-明细导出
+     *
+     * @author hxl
+     * @Date 2025/9/24 11:27
      */
     @Override
     public void downloadDetailListByParams(ReportSearchCommonVo reportSearchCommonVo) {
+        log.info("业务数据-险种报表-明细导出, 导出条件reportSearchCommonVo=[{}]", JSONUtil.toJsonStr(reportSearchCommonVo));
         List<ReportRiskDataManageDetailDto> detailList = getDetailList();
         upLoadFile(reportSearchCommonVo, ReportRiskDataManageDetailDto.class,detailList,"业务数据-险种报表-明细导出-"+ reportSearchCommonVo.getUserId());
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     * 模拟数据
+     * TODO 这里使用的是假数据,没有从数据库里面获取数据
+     * @author hxl
+     * @Date 2025/9/24 10:42
      */
     public List<ReportRiskDataManageDto>  getList(){
         List<ReportRiskDataManageDto> list =new ArrayList<>();
         ReportRiskDataManageDto reportRiskDataManageDto = ReportRiskDataManageDto.builder()
                 .companyId("1").companyName("永诚财险").partnerCompanyId("1").partnerCompanyName("众安财险科技营销部")
-                .riskName("单交").quoteCountNum(1000l).quoteOrderNum(500l).underwriteOrderNum(300l).underwritePremium(new BigDecimal(456))
+                .riskName("单交").quoteCountNum(1000L).quoteOrderNum(500L).underwriteOrderNum(300L).underwritePremium(new BigDecimal(456))
                 .penetrationRate(new BigDecimal(23)).underwriteRate(new BigDecimal(32)).build();
         list.add(reportRiskDataManageDto);
         return list;
     }
 
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2025/9/24 10:42
-     *  @Description:  模拟数据
+     * 模拟数据
+     * @author hxl
+     * @Date 2025/9/24 10:42
      */
     public List<ReportRiskDataManageDetailDto>  getDetailList(){
         List<ReportRiskDataManageDetailDto> list =new ArrayList<>();

+ 6 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/ReportUploadExcelTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.console.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,6 +11,8 @@ import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.console.mapper.ReportUploadExcelTaskMapper;
 import com.jzg.console.service.ReportUploadExcelTaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 /**
@@ -21,6 +24,8 @@ import org.springframework.stereotype.Service;
 public class ReportUploadExcelTaskServiceImpl extends ServiceImpl<ReportUploadExcelTaskMapper, ReportUploadExcelTask>
     implements ReportUploadExcelTaskService {
 
+    private static final Logger log = LoggerFactory.getLogger(ReportUploadExcelTaskServiceImpl.class);
+
     /**
      *  @version
      *  @author: hxl
@@ -29,6 +34,7 @@ public class ReportUploadExcelTaskServiceImpl extends ServiceImpl<ReportUploadEx
      */
     @Override
     public IPage<ReportUploadExcelTaskDto> getPageTaskList(ReportUploadExcelTaskVo reportUploadExcelTaskVo) {
+        log.info("查询:reportUploadExcelTaskVo=[{}]", JSONUtil.toJsonStr(reportUploadExcelTaskVo));
         if (StringUtils.isBlank(reportUploadExcelTaskVo.getUploadUserId())) {
             throw new SystemException("用户id不能为空");
         }

+ 0 - 2
consoleStatistics/src/main/resources/application-dev.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8086
 spring:
   cloud:
     nacos:

+ 0 - 2
consoleStatistics/src/main/resources/application-prod.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8086
 spring:
   cloud:
     nacos:

+ 2 - 0
consoleStatistics/src/main/resources/application.yml

@@ -1,3 +1,5 @@
+server:
+  port: 8086
 spring:
   application:
     name: jzg-console

+ 0 - 14
gateway/src/main/java/com/jzg/config/GatewayConfig.java

@@ -1,14 +0,0 @@
-package com.jzg.config;
-
-import com.jzg.filter.AuthFilter;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class GatewayConfig {
-
-    @Bean
-    public AuthFilter authFilter() {
-        return new AuthFilter();
-    }
-}

+ 30 - 16
gateway/src/main/java/com/jzg/filter/AuthFilter.java

@@ -1,42 +1,56 @@
 package com.jzg.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.context.ApplicationContext;
+import org.springframework.core.Ordered;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 
-import java.time.Duration;
-import java.time.Instant;
-
+/**
+ * 统计每个请求在整个服务器端耗时多久(毫秒级别)
+ *
+ * @author lipf
+ * @date 2026/4/2 11:44
+ */
 @Component
-@Order(0)
+@Order(Ordered.HIGHEST_PRECEDENCE)
 @Slf4j
 public class AuthFilter implements GlobalFilter {
 
-    @Autowired
-    private ApplicationContext applicationContext;
+    // 定义一个 Key,用于在 Exchange 属性中暂存开始时间
+    private static final String BEGIN_VISIT_TIME = "begin_visit_time";
 
+    /**
+     * 统计每个请求在整个服务器端耗时多久(毫秒级别)
+     *
+     * @author lipf, modify by lipf
+     * @date 2026/4/2 11:43
+     */
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+        // 1. 【Pre 阶段】请求刚进来,记录当前时间戳
+        exchange.getAttributes().put(BEGIN_VISIT_TIME, System.currentTimeMillis());
         // 获取请求路径和方法
         String path = exchange.getRequest().getPath().value();
-
         return chain.filter(exchange)
                 .doOnSuccess(v -> {
-                    long cost = Duration.between(Instant.now(), Instant.now()).toMillis();
-                    int statusCode = exchange.getResponse().getStatusCode().value();
-                    log.info("【Gateway响应出口】 请求地址:{} , 耗时: {}ms , 状态码: {} ", path, statusCode, cost);
+                    // 【Post 阶段】响应回来,计算耗时
+                    Long beginTimeObj = exchange.getAttribute(BEGIN_VISIT_TIME);
+                    long beginTime = beginTimeObj != null ? beginTimeObj : System.currentTimeMillis();
+
+                    long cost = System.currentTimeMillis() - beginTime;
+                    int statusCode = exchange.getResponse().getStatusCode() != null ? exchange.getResponse().getStatusCode().value() : -1;
+                    log.info("【Gateway响应出口】 请求地址:{} , 耗时: {}ms , 状态码: {} ", path, cost, statusCode);
                 })
-                // 发生异常时记录日志(ERROR级别)
                 .doOnError(e -> {
-                    long cost = Duration.between(Instant.now(), Instant.now()).toMillis();
-                    log.error("【Gateway请求异常】 请求地址:{} , 耗时: {}ms, 异常信息:{} ",path,cost, e);
+                    // 【Post 阶段】响应回来,计算耗时
+                    Long beginTimeObj = exchange.getAttribute(BEGIN_VISIT_TIME);
+                    long beginTime = beginTimeObj != null ? beginTimeObj : System.currentTimeMillis();
+                    long cost = System.currentTimeMillis() - beginTime;
+                    log.error("【Gateway请求异常】 请求地址:{} , 耗时: {}ms, 异常信息",path,cost, e);
                 });
     }
-
 }

+ 9 - 4
gateway/src/main/resources/application-dev.yml

@@ -1,6 +1,11 @@
 spring:
+  redis:
+    redisson:
+      address: redis://192.168.5.250:6379
+      password: 123456
+      database: 0
   minio:
-    url: http://192.168.0.250:9000
+    url: http://192.168.5.250:9000
     access-key: v7Zb8XhyLcYNcSHlxvyK
     secret-key: 58YibMwpxGKtXcekPL065OM4GonC1hf2tFMjI9EN
     bucket-name: jzg
@@ -13,10 +18,10 @@ spring:
         import-check:
           enabled: false
         file-extension: yaml
-        namespace: e8df500e-697c-46af-ae25-0c02f4fe146d
+        namespace: 353f8f05-4d2c-4a17-b64d-b678408f5759
         group: DEFAULT_GROUP
       discovery:
-        namespace: e8df500e-697c-46af-ae25-0c02f4fe146d
+        namespace: 353f8f05-4d2c-4a17-b64d-b678408f5759
 
     gateway:
       routes:
@@ -96,7 +101,7 @@ spring:
                   - /amountAuditing/**
                   - /newCarJudgeRules/**
                   - /sysDistributionSetting/**
-                  - /organization/wechat/**
+                  - /organization/**
 
         - id: summary_route
           uri: http://localhost:9898/

+ 7 - 1
gateway/src/main/resources/application-prod.yml

@@ -17,7 +17,6 @@ spring:
         group: DEFAULT_GROUP
       discovery:
         namespace: f9ca025f-b5df-47a9-b3f6-15bcbad3ebd3
-
     gateway:
       routes:
         - id: auth_route
@@ -147,3 +146,10 @@ spring:
                   - /partner/rule/**
                   - /partner/**
                   - /purchaseRecord/**
+
+
+  redis:
+    redisson:
+      address: redis://172.24.144.227:6379
+      password: 123456
+      database: 0

+ 5 - 0
gateway/src/main/resources/application-test.yml

@@ -1,4 +1,9 @@
 spring:
+  redis:
+    redisson:
+      address: redis://xxx:xxx
+      password: xxx
+      database: 0
   minio:
     url: http://test-api.baoxianzhanggui.com
     access-key: v7Zb8XhyLcYNcSHlxvyK

+ 6 - 6
gateway/src/main/resources/application.yml

@@ -8,12 +8,12 @@ spring:
     allow-bean-definition-overriding: true
   application:
     name: jzg-gateway
-  redis:
-    redisson:
-      address: redis://172.24.144.227:6379
-      password: 123456
-      database: 0
-
+#  redis:
+#    redisson:
+##      address: redis://172.24.144.227:6379
+##      password: 123456
+##      database: 0
+#
 #      address: redis://192.168.5.250:6379
 #      password: 123456
 #      database: 0

+ 22 - 0
gateway/src/main/resources/logback-spring.xml

@@ -0,0 +1,22 @@
+<configuration>
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg traceId=%X{traceId}%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="GRAYLOG" class="de.siegmar.logbackgelf.GelfTcpAppender">
+        <graylogHost>192.168.5.250</graylogHost>
+<!--        <graylogHost>172.24.144.227</graylogHost>-->
+        <graylogPort>12201</graylogPort>
+        <includeMdcData>true</includeMdcData>
+        <extractStackTrace>true</extractStackTrace>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="GRAYLOG"/>
+    </root>
+
+</configuration>

+ 0 - 1
partner/pom.xml

@@ -24,7 +24,6 @@
             <artifactId>commons</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
-
         <!-- 负载均衡器 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 2 - 1
partner/src/main/java/com/jzg/controller/DistributionController.java

@@ -3,6 +3,7 @@ package com.jzg.controller;
 
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.vo.DistributionVo;
 import com.jzg.utils.DistributionUtils;
@@ -13,7 +14,7 @@ import org.springframework.web.bind.annotation.*;
 @Slf4j
 @RestController
 @RequestMapping("/partnerDistribution")
-public class DistributionController{
+public class DistributionController extends BaseController {
 
 
     @PostMapping("generateDistributionData")

+ 0 - 1
partner/src/main/java/com/jzg/utils/DistributionUtils.java

@@ -70,7 +70,6 @@ public class DistributionUtils {
             log.info("当前出单员不是合伙人用户:{}");
         }
         String userId = userInfoById.getId();
-        RequestContextUtil.setStringParam(userId);
         String userId3 = CalculateCommissionUtils.querySuperiorAndSubordinate(userId, GRADE_3);
         String userId4 = CalculateCommissionUtils.querySuperiorAndSubordinate(userId, GRADE_4);
         PartnerUser partnerUser = staticPartnerUserService.selectByUserId(userId);

+ 5 - 5
partner/src/main/java/com/jzg/utils/TimedTaskUtils.java

@@ -13,10 +13,10 @@ import com.jzg.mapper.PartnerPartnerAccountMapper;
 import com.jzg.mapper.PartnerPremiumDetailsMapper;
 import com.jzg.mapper.PartnerUserMapper;
 import com.jzg.service.PartnerRuleService;
-import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
@@ -57,8 +57,8 @@ public class TimedTaskUtils {
     /**
      * TODO  每天晚上  记录佣金过期记录
      */
-    @XxlJob("updateOrderDateNoon")
-    //@Scheduled(cron = "0 0 0 * * *")
+    //@XxlJob("updateOrderDateNoon")
+    @Scheduled(cron = "0 0 0 * * *")
     public void updateOrderDateNoon() {
         log.info("记录佣金过期定时任务开始执行:{}", expireDays);
         List<PartnerUser> partnerUserList = partnerUserMapper.queryExpiredRecords(expireDays);
@@ -132,8 +132,8 @@ public class TimedTaskUtils {
     /**
      * TODO: 更新降级考核时间
      */
-    @XxlJob("checkCommissionExpireTime")
-    //@Scheduled(cron = "0 0 0 * * *")
+    //@XxlJob("checkCommissionExpireTime")
+    @Scheduled(cron = "0 0 0 * * *")
     public void checkCommissionExpireTime() {
         // TODO等级规则
         List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();

+ 0 - 2
partner/src/main/resources/application-dev.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8087
 spring:
   cloud:
     nacos:

+ 0 - 2
partner/src/main/resources/application-prod.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8087
 spring:
   cloud:
     nacos:

+ 0 - 2
partner/src/main/resources/application-test.yml

@@ -1,5 +1,3 @@
-server:
-  port: 9083
 spring:
   cloud:
     nacos:

+ 3 - 1
partner/src/main/resources/application.yml

@@ -1,3 +1,5 @@
+server:
+  port: 8087
 spring:
   application:
     name: jzg-partner
@@ -5,7 +7,7 @@ spring:
     allow-circular-references: true
     allow-bean-definition-overriding: true
   profiles:
-    active: prod
+    active: dev
 
 mybatis-plus:
   mapper-locations: classpath*:/mapper/*Mapper.xml

+ 10 - 23
partner/src/main/resources/logback-spring.xml

@@ -1,35 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <!-- 定义 Graylog GELF appender -->
-<!--    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">-->
-<!--        &lt;!&ndash; Graylog server 的主机名或 IP 地址 &ndash;&gt;-->
-<!--        <graylogHost>192.168.0.250</graylogHost>-->
-<!--        &lt;!&ndash; Graylog 服务器端口,通常为 12201(UDP)或 12202(TCP) &ndash;&gt;-->
-<!--        <graylogPort>12201</graylogPort>-->
-<!--        &lt;!&ndash; 可选项:指定协议,默认使用 UDP &ndash;&gt;-->
-<!--        <transport>UDP</transport>-->
-<!--        &lt;!&ndash; 发送日志时是否压缩 &ndash;&gt;-->
-<!--        <compress>true</compress>-->
-<!--        &lt;!&ndash; 是否在 GELF 消息中加入时间戳 &ndash;&gt;-->
-<!--        <includeTimestamp>true</includeTimestamp>-->
-<!--        &lt;!&ndash; 日志内容最大字节数 &ndash;&gt;-->
-<!--        <maxMessageSize>32768</maxMessageSize>-->
-<!--        &lt;!&ndash; 设置自定义字段 &ndash;&gt;-->
-<!--        <additionalFields>-->
-<!--        </additionalFields>-->
-<!--    </appender>-->
 
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg traceId=%X{traceId}%n</pattern>
         </encoder>
     </appender>
 
+    <appender name="GRAYLOG" class="de.siegmar.logbackgelf.GelfTcpAppender">
+        <graylogHost>192.168.5.250</graylogHost>
+<!--        <graylogHost>172.24.144.227</graylogHost>-->
+        <graylogPort>12201</graylogPort>
+        <includeMdcData>true</includeMdcData>
+        <extractStackTrace>true</extractStackTrace>
+    </appender>
 
     <root level="INFO">
         <appender-ref ref="STDOUT"/>
+        <appender-ref ref="GRAYLOG"/>
     </root>
-<!--    <root name="com.jzg" level="DEBUG">-->
-<!--        <appender-ref ref="GELF"/>-->
-<!--    </root>-->
+
 </configuration>

+ 10 - 9
partner/src/main/resources/mapper/PartnerUserMapper.xml

@@ -891,15 +891,16 @@ SELECT
 
     <select id="selectNumber" resultType="java.lang.Integer">
         SELECT COUNT(1) FROM (
-             SELECT
-                 p.user_id,
-                 p.grade,
-                 p.referrer_id,
-                 u.`status`,
-        ( SELECT t.partner_review_time FROM sys_user_jzg_info_salesman t WHERE t.sys_user_jzg_info_id = u.id ORDER BY t.partner_review_time LIMIT 1 )  approve_time
-            FROM partner_user p
-        	LEFT JOIN sys_user_jzg_info u ON u.id = p.user_id
-        WHERE p.referrer_id = #{userId} AND p.grade = #{number}
+            SELECT
+            p.user_id,
+            p.grade,
+            p.referrer_id,
+            sa.partner_status,
+            sa.partner_review_time AS approve_time
+            FROM
+            partner_user p
+            LEFT JOIN sys_user_jzg_info_salesman sa ON p.user_id = sa.sys_user_jzg_info_id
+        WHERE  sa.type_attr = 3 AND sa.partner_status = 3 AND p.referrer_id = #{userId} AND p.grade = #{number}
                 <if test="param != null and param != ''">
                     AND p.user_id != #{param}
                 </if>

+ 5 - 5
platform/src/main/java/com/jzg/controller/AttributionTemplateController.java

@@ -8,7 +8,6 @@ import com.jzg.commons.entity.agreement.vo.PtlInsAttributionTemplateSaveVo;
 import com.jzg.commons.entity.agreement.vo.PtlInsAttributionTemplateVo;
 import com.jzg.service.PtlInsAttributionTemplateService;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -37,9 +36,9 @@ public class AttributionTemplateController {
 
     @Operation(summary = "提交模板信息",description = "提交模板信息")
     @PostMapping(value = "submit")
-    public HttpResult<Object> saveTemplate(@RequestBody List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo) {
+    public HttpResult<Boolean> saveTemplate(@RequestBody List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo) {
         ptlInsAttributionTemplateSaveVo.forEach(PtlInsAttributionTemplateSaveVo::converApi);
-        return ptlInsAttributionTemplateService.submit(ptlInsAttributionTemplateSaveVo) ? HttpResult.ok("提交模版信息成功") : HttpResult.error("提交模版信息失败");
+        return ptlInsAttributionTemplateService.submit(ptlInsAttributionTemplateSaveVo);
     }
 
     @PostMapping("/getPtlInsAttributionTemplate")
@@ -60,8 +59,9 @@ public class AttributionTemplateController {
     }
 
     /**
-     *获取协议属性信息
-     * @param companyId
+     * 获取协议属性信息
+     *
+     * @param companyId 保司的id
      * @return HttpResult<PtlAgreementAttribution>
      */
     @GetMapping("/getAgreementAttributionByCompanyId")

+ 13 - 3
platform/src/main/java/com/jzg/controller/JyxConfigController.java

@@ -6,6 +6,7 @@ import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.JyxConfigAdd;
 import com.jzg.commons.entity.dto.JyxConfigEnd;
 import com.jzg.commons.entity.dto.JyxConfigParam;
+import com.jzg.commons.entity.vo.JyxConfigVo;
 import com.jzg.service.JyxConfigService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -15,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 
 @Validated
 @Tag(name="驾意险配置")
@@ -26,9 +29,10 @@ public class JyxConfigController extends BaseController {
     @Autowired
     private JyxConfigService jyxConfigService;
 
+
     @PostMapping("saveAll")
     @Operation(summary = "保存驾意险配置")
-    public HttpResult saveAll(@Valid @RequestBody JyxConfigAdd configAdd){
+    public HttpResult<String> saveAll(@Valid @RequestBody JyxConfigAdd configAdd){
         return jyxConfigService.saveAll(configAdd);
     }
 
@@ -40,10 +44,16 @@ public class JyxConfigController extends BaseController {
     }
 
 
+    /**
+     * 查询驾意险信息,如果查询异常,会给前端返回提示信息
+     *
+     * @author lipf
+     * @date 2026/4/2 10:07
+     */
     @PostMapping("jyxList")
     @Operation(summary = "查询驾意险配置列表")
-    public HttpResult jyxList(@RequestBody JyxConfigParam configParam){
-        return HttpResult.ok(jyxConfigService.jyxList(configParam));
+    public HttpResult<List<JyxConfigVo>> jyxList(@RequestBody JyxConfigParam configParam){
+        return jyxConfigService.jyxList(configParam);
     }
 
 

+ 9 - 1
platform/src/main/java/com/jzg/controller/QrBarcodeController.java

@@ -1,10 +1,12 @@
 package com.jzg.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.commons.aop.OperatorTrajectory;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.QrBarcodeConfigAdd;
+import com.jzg.commons.entity.dto.QrBarcodeConfigAddVO;
 import com.jzg.commons.entity.dto.QrBarcodeConfigEnd;
 import com.jzg.commons.entity.dto.QrBarcodeConfigParam;
 import com.jzg.commons.entity.po.QrBarcodeConfig;
@@ -13,6 +15,8 @@ import com.jzg.service.QrBarcodeService;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -24,6 +28,7 @@ import org.springframework.web.bind.annotation.*;
 public class QrBarcodeController {
 
 
+    private static final Logger log = LoggerFactory.getLogger(QrBarcodeController.class);
     @Autowired
     private QrBarcodeService qrBarcodeService;
 
@@ -44,7 +49,10 @@ public class QrBarcodeController {
 
     @PostMapping("/save")
     @Schema(description = "二维码配置新增")
-    public HttpResult save(@Valid  @RequestBody QrBarcodeConfigAdd barcodeConfigAdd) {
+    public HttpResult save(@Valid  @RequestBody QrBarcodeConfigAddVO barcodeConfigAddVO) {
+        log.info("保险公司的支付宝配置保存。 barcodeConfigAddVO=[{}]", JSONUtil.toJsonStr(barcodeConfigAddVO));
+        QrBarcodeConfigAdd barcodeConfigAdd = new QrBarcodeConfigAdd();
+        BeanUtil.copyProperties(barcodeConfigAddVO, barcodeConfigAdd);
         LambdaQueryWrapper<QrBarcodeConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(QrBarcodeConfig::getCompanyCode, barcodeConfigAdd.getCompanyCode());
         AssertionUtils.isFail(qrBarcodeService.count(lambdaQueryWrapper) > 0, "保险公司编码重复");

+ 0 - 2
platform/src/main/java/com/jzg/controller/SysSystemController.java

@@ -228,6 +228,4 @@ public class SysSystemController {
     public HttpResult getUserCompany(String systemCode) {
         return HttpResult.ok(sysSystemService.getUserCompany(systemCode));
     }
-    //endregion
-
 }

+ 9 - 1
platform/src/main/java/com/jzg/mapper/PtlAgreementMapper.java

@@ -9,5 +9,13 @@ import java.util.List;
 @Mapper
 public interface PtlAgreementMapper extends BaseMapper<PtlAgreement> {
 
-    public List<PtlAgreement> getUserAgreementByCompanyIds(String deptId, List<String> companyIds);
+    /**
+     * 查询租户下可用的协议
+     *
+     * @param deptId 租户序号
+     * @param companyIds 保司序号集
+     * @author lipf
+     * @date 2026/3/31 9:55
+     */
+    List<PtlAgreement> getUserAgreementByCompanyIds(String deptId, List<String> companyIds);
 }

+ 0 - 1
platform/src/main/java/com/jzg/mapper/PtlAgreementUrlMapper.java

@@ -3,7 +3,6 @@ package com.jzg.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.entity.agreement.po.PtlAgreementUrl;
-import com.jzg.commons.entity.agreement.vo.PtlAgreementAttributionQueryVo;
 import com.jzg.commons.entity.agreement.vo.PtlAgreementUrlVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;

+ 1 - 1
platform/src/main/java/com/jzg/mapper/SysMenuMapper.java

@@ -16,7 +16,7 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
 
     public List<SysMenu> getSystemMenusRecursion(String systemCode);
 
-    public List<SysMenu> getMenuByRoleId(String roleId);
+    public List<SysMenu> getMenuByRoleId(List<String> roleIds);
 
     /**
      * 获取常用菜单列表

+ 3 - 1
platform/src/main/java/com/jzg/mapper/SysUserRoleMapper.java

@@ -5,11 +5,13 @@ import com.jzg.commons.entity.po.SysUserRole;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 @Mapper
 public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
 
 
     void deleteByUserId(@Param("userId") String userId);
 
-    SysUserRole selectByUserIdAndSysCodeOne(@Param("userId") String userId,@Param("systemCode") String systemCode);
+    List<SysUserRole> selectByUserIdAndSysCodeOne(@Param("userId") String userId, @Param("systemCode") String systemCode);
 }

+ 17 - 3
platform/src/main/java/com/jzg/service/JyxConfigService.java

@@ -2,6 +2,7 @@ package com.jzg.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.core.page.ResultInfo;
 import com.jzg.commons.entity.dto.JyxConfigAdd;
 import com.jzg.commons.entity.dto.JyxConfigEnd;
 import com.jzg.commons.entity.dto.JyxConfigParam;
@@ -13,14 +14,27 @@ import java.util.List;
 
 public interface JyxConfigService extends IService<JyxConfig> {
 
-
-    HttpResult saveAll(JyxConfigAdd configAdd);
+    /**
+     * 添加驾意险配置
+     *
+     * @param configAdd 要添加的驾意险信息
+     * @author lifp  modify by lipf
+     * @date 2026/4/2 9:49
+     */
+    HttpResult<String> saveAll(JyxConfigAdd configAdd);
 
     HttpResult selectById(String id);
 
     HttpResult updateById(JyxConfigEnd configEnd);
 
-    List<JyxConfigVo> jyxList(JyxConfigParam configParam);
+    /**
+     * 查询驾意险信息
+     *
+     * @param configParam 驾意险查询参数
+     * @author lipf
+     * @date 2026/4/2 9:54
+     */
+    ResultInfo<List<JyxConfigVo>> jyxList(JyxConfigParam configParam);
 
     HttpResult deleteById(String id);
 

+ 5 - 4
platform/src/main/java/com/jzg/service/PtlAgreementService.java

@@ -9,10 +9,11 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
 
     /**
      * 根据用户的机构与保司 获取可报价的协议
-     * @param deptId
-     * @param companyIds
-     * @return
+     *
+     * @param deptId 租户编码
+     * @param companyIds 保司id信息
+     * @return List<PtlAgreement> 不同保司的协议
      */
-    public List<PtlAgreement> getUserAgreementByCompanyIds(String deptId, List<String> companyIds);
+    List<PtlAgreement> getUserAgreementByCompanyIds(String deptId, List<String> companyIds);
 
 }

+ 10 - 5
platform/src/main/java/com/jzg/service/PtlInsAttributionTemplateService.java

@@ -20,9 +20,8 @@ public interface PtlInsAttributionTemplateService extends IService<PtlInsAttribu
     /**
      * 分页查询
      *
-     * @param page
      * @param ptlInsAttributionTemplateVo
-     * @return
+     * @return List<PtlInsAttributionTemplateVo>
      */
     List<PtlInsAttributionTemplateVo> getList(PtlInsAttributionTemplateQueryVo ptlInsAttributionTemplateVo);
 
@@ -36,10 +35,10 @@ public interface PtlInsAttributionTemplateService extends IService<PtlInsAttribu
     /**
      * 保存 保险公司归属信息模版
      *
-     * @param ptlInsAttributionTemplateSaveVo
-     * @return
+     * @param ptlInsAttributionTemplateSaveVo 保险公司归属信息模版, 内部包含多个对象
+     * @return boolean
      */
-    boolean submit(List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo);
+    HttpResult<Boolean> submit(List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo);
 
     HttpResult<PtlInsAttributionTemplate> getPtlInsAttributionTemplate(PtlInsAttributionTemplateVo ptlInsAttributionTemplateVo);
 
@@ -51,5 +50,11 @@ public interface PtlInsAttributionTemplateService extends IService<PtlInsAttribu
      */
     HttpResult<PtlAgreementAttribution> getAgreementAttribution(String agreementId);
 
+    /**
+     * 获取协议属性信息
+     *
+     * @param companyId 保司的id
+     * @return HttpResult<PtlAgreementAttribution>
+     */
     HttpResult<List<PtlAgreementAttribution>> getAgreementAttributionByCompanyId(String companyId);
 }

+ 1 - 1
platform/src/main/java/com/jzg/service/SysMenuService.java

@@ -26,7 +26,7 @@ public interface SysMenuService extends IService<SysMenu> {
      * @param roleId
      * @return
      */
-    public List<SysMenu> getMenuByRoleId(String roleId);
+    public List<SysMenu> getMenuByRoleId(List<String> roleId);
 
     /**
      * 获取常用

+ 2 - 9
platform/src/main/java/com/jzg/service/SysSystemService.java

@@ -8,7 +8,6 @@ import com.jzg.commons.entity.dto.SysSystemParam;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.entity.po.SysConfig;
 import com.jzg.commons.entity.po.SysSystem;
-import com.jzg.commons.entity.po.SysSystemPerms;
 import com.jzg.commons.entity.system.vo.SysSystemBusPermsVo;
 import com.jzg.commons.entity.vo.SysSystemPermsVo;
 import com.jzg.commons.entity.vo.SysSystemVo;
@@ -157,10 +156,6 @@ public interface SysSystemService extends IService<SysSystem> {
      */
     boolean deleteByIds(List<String> ids);
 
-
-
-    //region 租户业务权限配置
-
     /**
      * 保存租户业务权限
      * @param sysSystemBusPermsVo
@@ -177,10 +172,8 @@ public interface SysSystemService extends IService<SysSystem> {
 
     /**
      * 根据租户配置获取保司列表
-     * @param systemCode
-     * @return
+     * @param systemCode 租户编码
+     * @return List<EsmInsCompany>
      */
     List<EsmInsCompany> getUserCompany(String systemCode);
-
-    //endregion
 }

+ 6 - 1
platform/src/main/java/com/jzg/service/impl/EsmInsCompanyServiceImpl.java

@@ -1,6 +1,7 @@
 package com.jzg.service.impl;
 
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -20,12 +21,13 @@ import com.jzg.mapper.EsmInsCompanyMapper;
 import com.jzg.mapper.EsmInsCompanyTenantSortMapper;
 import com.jzg.service.EsmInsCompanyService;
 import com.jzg.service.SysSystemService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -36,6 +38,8 @@ import java.util.stream.Collectors;
 public class EsmInsCompanyServiceImpl extends ServiceImpl<EsmInsCompanyMapper, EsmInsCompany>
         implements EsmInsCompanyService {
 
+    private static final Logger log = LoggerFactory.getLogger(EsmInsCompanyServiceImpl.class);
+
 //    @Override
 //    public EsmInsCompany isOpen(String company) {
 //        LambdaQueryWrapper<EsmInsCompany> wrapper = new LambdaQueryWrapper<>();
@@ -57,6 +61,7 @@ public class EsmInsCompanyServiceImpl extends ServiceImpl<EsmInsCompanyMapper, E
 
     @Override
     public List<EsmInsCompanyVo> findTree(EsmInsCompanyReq req) {
+        log.info("查询保险公司信息:req=[{}]", JSONUtil.toJsonStr(req));
         List<EsmInsCompanyVo> allList  = baseMapper.findTree(req);
         if (CollectionUtils.isEmpty(allList)){
             return new ArrayList<>(0);

+ 30 - 14
platform/src/main/java/com/jzg/service/impl/JyxConfigServiceImpl.java

@@ -1,10 +1,12 @@
 package com.jzg.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+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.constants.Constants;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.core.page.ResultInfo;
 import com.jzg.commons.entity.dto.JyxConfigAdd;
 import com.jzg.commons.entity.dto.JyxConfigEnd;
 import com.jzg.commons.entity.dto.JyxConfigParam;
@@ -14,7 +16,6 @@ import com.jzg.commons.entity.po.JyxConfig;
 import com.jzg.commons.entity.po.jyxSetting;
 import com.jzg.commons.entity.vo.JyxConfigVo;
 import com.jzg.commons.util.AssertionUtils;
-import com.jzg.commons.util.ConvertUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.constants.ConstantsParent;
 import com.jzg.mapper.JyxConfigMapper;
@@ -27,7 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.ObjectUtils;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -55,9 +55,17 @@ public class JyxConfigServiceImpl extends ServiceImpl<JyxConfigMapper, JyxConfig
 
 
 
+    /**
+     * 添加驾意险配置
+     *
+     * @param configAdd 要添加的驾意险信息
+     * @author lipf
+     * @date 2026/4/2 9:49
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult saveAll(JyxConfigAdd configAdd) {
+    public HttpResult<String> saveAll(JyxConfigAdd configAdd) {
+        log.info("添加驾意险信息:[{}]", JSONUtil.toJsonStr(configAdd));
         try {
             AssertionUtils.isFail(Optional.ofNullable(baseMapper.selectOne(new LambdaQueryWrapper<JyxConfig>().eq(JyxConfig::getProductCode, configAdd.getProductCode())
                     .eq(JyxConfig::getIsDelete, Constants.NOT_DELETED))).isPresent(), "产品编码重复");
@@ -85,6 +93,7 @@ public class JyxConfigServiceImpl extends ServiceImpl<JyxConfigMapper, JyxConfig
             }
             return HttpResult.ok("添加成功");
         }catch (Exception e){
+            log.error("添加驾意险异常。configAdd=[{}]", JSONUtil.toJsonStr(configAdd), e);
             return HttpResult.error("添加失败" + e.getMessage());
         }
     }
@@ -156,12 +165,21 @@ public class JyxConfigServiceImpl extends ServiceImpl<JyxConfigMapper, JyxConfig
         }
     }
 
+    /**
+     * 查询驾意险信息
+     *
+     * @param configParam 驾意险查询参数
+     * @author lipf
+     * @date 2026/4/2 9:54
+     */
     @Override
-    public List<JyxConfigVo> jyxList(JyxConfigParam configParam) {
+    public ResultInfo<List<JyxConfigVo>> jyxList(JyxConfigParam configParam) {
         try {
             List<JyxConfigVo> jyxConfigVos = Optional.ofNullable(jyxConfigMapper.jyxList(configParam)).orElse(Collections.emptyList());
             if (StringUtils.isNotEmpty(configParam.getSeats()) || StringUtils.isNotEmpty(configParam.getParams())) {
-                Set<String> ids = jyxConfigVos.stream().filter(v -> !ConstantsParent.PARENT_ID_ROOT.equals(v.getParentId())).map(JyxConfigVo::getParentId).collect(Collectors.toSet());
+                // modify by lipf  2026年4月2日10:10:00, 调换map和filter 来简化filter的写法
+                Set<String> ids = jyxConfigVos.stream().map(JyxConfigVo::getParentId)
+                        .filter(parentId -> !ConstantsParent.PARENT_ID_ROOT.equals(parentId)).collect(Collectors.toSet());
                 if (!CollectionUtils.isEmpty(ids)){
                     List<JyxConfigVo> parentConfigs = jyxConfigMapper.selectParentIds(new ArrayList<>(ids));
                     jyxConfigVos.addAll(parentConfigs);
@@ -171,20 +189,19 @@ public class JyxConfigServiceImpl extends ServiceImpl<JyxConfigMapper, JyxConfig
                 ));
             }
             if (jyxConfigVos.isEmpty()) {
-                return Collections.emptyList();
+                log.info("根据查询条件[{}]查询出的驾意险信息为空", JSONUtil.toJsonStr(configParam));
+                return ResultInfo.resOk("查询出的驾意险数据为空", Collections.emptyList());
             }
             Map<String, List<JyxConfigVo>> childrenMap = jyxConfigVos.stream()
                     .filter(vo -> !ConstantsParent.PARENT_ID_ROOT.equals(vo.getParentId()))
                     .collect(Collectors.groupingBy(vo -> String.valueOf(vo.getParentId()), Collectors.mapping(Function.identity(), Collectors.toList())));
             List<JyxConfigVo> configVos = jyxConfigVos.stream().filter(parentConfig -> ConstantsParent.PARENT_ID_ROOT.equals(parentConfig.getParentId())).collect(Collectors.toList());
-            configVos.forEach(parentConfig -> {
-                parentConfig.setChildren(childrenMap.getOrDefault(String.valueOf(parentConfig.getId()), Collections.emptyList()));
-            });
-            return configVos;
+            configVos.forEach(parentConfig -> parentConfig.setChildren(childrenMap.getOrDefault(String.valueOf(parentConfig.getId()), Collections.emptyList())));
+            return ResultInfo.resOk(null, configVos);
         } catch (Exception e) {
             // 记录日志或进行其他异常处理
-            e.printStackTrace();
-            return Collections.emptyList();
+            log.error("查询驾意险信息异常。 configParam=[{}]",JSONUtil.toJsonStr(configParam), e);
+            return ResultInfo.resError("查询驾意险异常,请联系管理员");
         }
     }
 
@@ -226,8 +243,7 @@ public class JyxConfigServiceImpl extends ServiceImpl<JyxConfigMapper, JyxConfig
 
     @Override
     public List<JyxConfigVo> selectMainInsurance(String company) {
-        List<JyxConfigVo> jyxConfigVos = jyxConfigMapper.selectMainInsurance(company);
-        return jyxConfigVos;
+        return jyxConfigMapper.selectMainInsurance(company);
     }
 
 

+ 16 - 1
platform/src/main/java/com/jzg/service/impl/PtlAgreementServiceImpl.java

@@ -1,9 +1,12 @@
 package com.jzg.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.po.PtlAgreement;
 import com.jzg.mapper.PtlAgreementMapper;
 import com.jzg.service.PtlAgreementService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -15,8 +18,20 @@ import java.util.List;
 
 @Service
 public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement> implements PtlAgreementService {
+
+    private static final Logger log = LoggerFactory.getLogger(PtlAgreementServiceImpl.class);
+
+    /**
+     * 根据用户的机构与保司 获取可报价的协议
+     *
+     * @param deptId 租户编码
+     * @param companyIds 保司id信息
+     * @return List<PtlAgreement> 不同保司的协议
+     */
     @Override
     public List<PtlAgreement> getUserAgreementByCompanyIds(String deptId, List<String> companyIds) {
-        return baseMapper.getUserAgreementByCompanyIds(deptId,companyIds);
+        List<PtlAgreement> userAgreementByCompanyIds = baseMapper.getUserAgreementByCompanyIds(deptId, companyIds);
+        log.info("租户[{}]匹配到[{}]个公司的[{}]个协议", deptId, CollUtil.size(companyIds), CollUtil.size(userAgreementByCompanyIds));
+        return userAgreementByCompanyIds;
     }
 }

+ 2 - 5
platform/src/main/java/com/jzg/service/impl/PtlAgreementUrlServiceImpl.java

@@ -3,9 +3,7 @@ package com.jzg.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.agreement.po.PtlAgreementUrl;
-import com.jzg.commons.entity.agreement.po.PtlInsAttributionTemplate;
 import com.jzg.commons.entity.agreement.vo.PtlAgreementUrlVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.mapper.PtlAgreementUrlMapper;
@@ -52,14 +50,13 @@ public class PtlAgreementUrlServiceImpl extends ServiceImpl<PtlAgreementUrlMappe
         if (Objects.isNull(ptlAgreementUrl)) {
             return false;
         }
-        removeById(ptlAgreementUrl);
+        super.removeById(ptlAgreementUrl);
         return true;
     }
 
     @Override
     public Page<PtlAgreementUrl> getAgreementUrlList(Page page,PtlAgreementUrlVo ptlAgreementUrlVo) {
-        Page<PtlAgreementUrl> ptlAgreementUrlPage = ptlAgreementUrlMapper.getAgreementUrlList(page, ptlAgreementUrlVo);
-        return ptlAgreementUrlPage;
+        return ptlAgreementUrlMapper.getAgreementUrlList(page, ptlAgreementUrlVo);
     }
 
     @Override

+ 36 - 6
platform/src/main/java/com/jzg/service/impl/PtlInsAttributionTemplateServiceImpl.java

@@ -1,11 +1,11 @@
 package com.jzg.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.constants.PtlApiType;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.agreement.dto.PtlAttributionTemplateDto;
 import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.agreement.po.PtlCrawlerApi;
 import com.jzg.commons.entity.agreement.po.PtlInsAttributionTemplate;
@@ -23,15 +23,22 @@ import com.jzg.service.PtlAgreementService;
 import com.jzg.service.PtlCrawlerApiService;
 import com.jzg.service.PtlInsAttributionTemplateService;
 import jakarta.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttributionTemplateMapper, PtlInsAttributionTemplate> implements PtlInsAttributionTemplateService {
 
+    private static final Logger log = LoggerFactory.getLogger(PtlInsAttributionTemplateServiceImpl.class);
+
     @Autowired
     EsmInsCompanyService esmInsCompanyService;
 
@@ -66,12 +73,30 @@ public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttr
         return baseMapper.selectOne(wrapper);
     }
 
+    /**
+     * 保存 保险公司归属信息模版
+     *
+     * @param ptlInsAttributionTemplateSaveVo 保险公司归属信息模版, 内部包含多个对象
+     * @return HttpResult<Boolean>
+     */
     @Override
     @Transactional
-    public boolean submit(List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo) {
+    public HttpResult<Boolean> submit(List<PtlInsAttributionTemplateSaveVo> ptlInsAttributionTemplateSaveVo) {
+        log.info("保存保险公司归属信息模板: ptlInsAttributionTemplateSaveVo=[{}]", JSONUtil.toJsonStr(ptlInsAttributionTemplateSaveVo));
         // 一个保险公司,一种api方式只能配置一种
         ptlInsAttributionTemplateSaveVo.forEach(this::validate);
-
+        List<PtlAttributionTemplateDto> fields = ptlInsAttributionTemplateSaveVo.get(0).getFields();
+        List<String> fieldList = fields.stream().map(PtlAttributionTemplateDto::getField).toList();
+        Set<String> duplicates = fieldList.stream()
+                .filter(n -> Collections.frequency(fieldList, n) > 1)
+                .collect(Collectors.toSet());
+        if(!duplicates.isEmpty()) {
+            log.info("存在字段名称重复的设置。duplicates=[{}]", JSONUtil.toJsonStr(duplicates));
+            HttpResult<Boolean> res = new HttpResult<Boolean>();
+            res.setData(Boolean.FALSE);
+            res.setMsg("存在字段名称重复的设置. 重复字段是" + JSONUtil.toJsonStr(duplicates));
+            return res;
+        }
         ptlInsAttributionTemplateSaveVo.forEach(saveVo -> {
             EsmInsCompany esmInsCompany = esmInsCompanyService.isExists(saveVo.getInsCompanyId());
             PtlInsAttributionTemplate ptlInsAttributionTemplate = new PtlInsAttributionTemplate(saveVo, esmInsCompany.getCnName());
@@ -88,8 +113,7 @@ public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttr
                 AssertionUtils.isSucceed(b, "保险公司api请求插入失败");
             }
         });
-
-        return true;
+        return HttpResult.ok("提交模板信息成功");
     }
 
     private void validate(PtlInsAttributionTemplateSaveVo ptlInsAttributionTemplateSaveVo) {
@@ -127,6 +151,12 @@ public class PtlInsAttributionTemplateServiceImpl extends ServiceImpl<PtlInsAttr
         return HttpResult.ok(ptlAgreementAttribution);
     }
 
+    /**
+     * 获取协议属性信息
+     *
+     * @param companyId 保司的id
+     * @return HttpResult<PtlAgreementAttribution>
+     */
     @Override
     public HttpResult<List<PtlAgreementAttribution>> getAgreementAttributionByCompanyId(String companyId) {
         EsmInsCompany company = esmInsCompanyService.getById(companyId);

+ 26 - 9
platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java

@@ -12,14 +12,17 @@ import com.jzg.mapper.SysMenuMapper;
 import com.jzg.mapper.SysSystemMenuMapper;
 import com.jzg.mapper.SysUserRoleMapper;
 import com.jzg.service.SysMenuService;
-import com.jzg.service.SysUserService;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -28,7 +31,7 @@ import java.util.stream.Collectors;
 public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
         implements SysMenuService {
 
-    private final SysUserService sysUserService;
+    private static final Logger log = LoggerFactory.getLogger(SysMenuServiceImpl.class);
 
     private final SysMenuMapper sysMenuMapper;
 
@@ -61,8 +64,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
 
     @Override
     public List<SysMenu> getRoleMenuTree(String systemCode, String userId) {
-        SysUserRole sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
-        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.getRoleId());
+        List<SysUserRole> sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
+        // modify by lipf ,2026年4月3日08:52:05, 解决NPE 异常
+        if(sysUserRole == null){
+            log.info("租户[{}]下的用户[{}]角色为空",systemCode, userId);
+            return Collections.emptyList();
+        }
+        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(x->x.getRoleId()).toList());
         List<SysMenu> sysMenus = new ArrayList<>();
         for (SysMenu menu : menus) {
             if (menu.getParentId() == null || menu.getParentId().equalsIgnoreCase("0")) {
@@ -90,8 +98,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
         LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(SysMenu::getType,"2");
         List<SysMenu> sysMenus = baseMapper.selectList(lambdaQueryWrapper);
-        SysUserRole sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
-        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.getRoleId());
+        List<SysUserRole> sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
+        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(x->x.getRoleId()).toList());
 
         List<String> perms = new ArrayList<>();
         sysMenus.forEach(item->{
@@ -147,9 +155,18 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
     }
 
     @Override
-    public List<SysMenu> getMenuByRoleId(String roleId) {
-        List<SysMenu> menuByRoleId = sysMenuMapper.getMenuByRoleId(roleId);
-        return menuByRoleId;
+    public List<SysMenu> getMenuByRoleId(List<String> roleIds) {
+        List<SysMenu> menuByRoleId = sysMenuMapper.getMenuByRoleId(roleIds);
+        List<SysMenu> distinctMenuList = menuByRoleId.stream()
+                .collect(Collectors.toMap(
+                        SysMenu::getId,
+                        Function.identity(),
+                        (existing, replacement) -> existing
+                ))
+                .values()
+                .stream()
+                .toList();
+        return distinctMenuList;
     }
 
     private void findChildren(List<SysMenu> SysMenus, List<SysMenu> menus, int menuType) {

+ 28 - 26
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -2,6 +2,7 @@ package com.jzg.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -27,6 +28,8 @@ import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.mapper.*;
 import com.jzg.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -45,6 +48,7 @@ import java.util.stream.Collectors;
 public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem>
     implements SysSystemService {
 
+    private static final Logger log = LoggerFactory.getLogger(SysSystemServiceImpl.class);
     @Autowired
     private SysRolePermsMapper sysRolePermsMapper;
     @Autowired
@@ -104,7 +108,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
         wrapper.eq(SysRolePerms::getRoleId,roles.get(0).getId());
         sysRolePermsMapper.delete(wrapper);
 
-        List<SysSystemPermsVo.PermsVo> permsList = JSON.parseArray(permsStr,SysSystemPermsVo.PermsVo.class);;
+        List<SysSystemPermsVo.PermsVo> permsList = JSON.parseArray(permsStr,SysSystemPermsVo.PermsVo.class);
         return this.savePerms(permsList, roles.get(0).getId());
     }
 
@@ -161,8 +165,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                 .like(SysRole::getName,"管理员");
         List<SysRole> roles = sysRoleMapper.selectList(queryWrapper);
         List<SysRolePerms> sysSystemPerms = sysRolePermsMapper.getByRoleId(roles.get(0).getId());
-        List<String> permsIds = sysSystemPerms.stream().map(SysRolePerms::getPermsId).collect(Collectors.toList());
-        return permsIds;
+        return sysSystemPerms.stream().map(SysRolePerms::getPermsId).collect(Collectors.toList());
     }
 
     @Override
@@ -268,8 +271,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
 
     @Override
     public List<SysSystemVo> queryList(SysSystemParam param) {
-        List<SysSystemVo> sysList = baseMapper.queryList(param);
-        return sysList;
+        return baseMapper.queryList(param);
     }
 
     @Override
@@ -379,7 +381,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                 .eq(SysConfig::getSystemCode, SystemConstants.SYSTEM_PLATFORM.getCode()));
         this.saveConfig(configs.get(0), sysSystem.getSysCode());
 
-        List<SysSystemPermsVo.PermsVo> permsList = JSON.parseArray(configs.get(0).getSysPerms(),SysSystemPermsVo.PermsVo.class);;
+        List<SysSystemPermsVo.PermsVo> permsList = JSON.parseArray(configs.get(0).getSysPerms(),SysSystemPermsVo.PermsVo.class);
 
         this.savePerms(permsList, role.getId());
         // 租户绑定管理员信息
@@ -488,13 +490,9 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     @Transactional(rollbackFor = Exception.class)
     public void upAndDown(UpAndDownVo upAndDownVo) {
         if(YesNoEnum.YES.equals(upAndDownVo.getOpType())) {
-            upAndDownVo.getIds().forEach(id->{
-                reDeploy(Convert.toStr(id));
-            });
+            upAndDownVo.getIds().forEach(id-> reDeploy(Convert.toStr(id)));
         } else {
-            upAndDownVo.getIds().forEach(id->{
-                unDeploy(Convert.toStr(id));
-            });
+            upAndDownVo.getIds().forEach(id-> unDeploy(Convert.toStr(id)));
         }
     }
 
@@ -571,9 +569,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
         sysSystemBusPermsLinkMapper.delete(new LambdaQueryWrapper<SysSystemBusPermsLink>()
                 .eq(SysSystemBusPermsLink::getPermsId, sysSystemBusPermsVo.getId())
         );
-        sysSystemBusPermsLink.forEach(link->{
-            link.setPermsId(sysSystemBusPerms.getId());
-        });
+        sysSystemBusPermsLink.forEach(link-> link.setPermsId(sysSystemBusPerms.getId()));
         sysSystemBusPermsLinkMapper.insert(sysSystemBusPermsLink);
         return true;
     }
@@ -588,15 +584,18 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
 
         List<SysSystemBusPermsLink> sysSystemBusPermsLinks = sysSystemBusPermsLinkMapper.selectList(new LambdaQueryWrapper<SysSystemBusPermsLink>()
                 .eq(SysSystemBusPermsLink::getPermsId, sysSystemBusPerms.getId()));
-
-        SysSystemBusPermsVo sysSystemBusPermsVo = new SysSystemBusPermsVo(sysSystemBusPerms,sysSystemBusPermsLinks);
-
-        return sysSystemBusPermsVo;
+        return new SysSystemBusPermsVo(sysSystemBusPerms,sysSystemBusPermsLinks);
     }
 
     @Autowired
     SysUserJzgInfoService sysUserJzgInfoService;
 
+    /**
+     * 根据租户获取保司信息
+     * @param systemCode 租户代码
+     * @author lipf
+     * @date 2026/3/25 17:07
+     */
     @Override
     public List<EsmInsCompany> getUserCompany(String systemCode) {
         SysSystemBusPermsVo busPerms = getBusPerms(systemCode);
@@ -605,31 +604,34 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
             companyIds = busPerms.getQuoteCompanyList();
         }
         List<EsmInsCompany> companyList = new ArrayList<>();
-//        if(!companyIds.isEmpty()) {
         companyList = baseMapper.getCompanyList(companyIds);
-//        }
-        System.out.printf("------------------------------------------------------------1");
+        log.info("租户代码[{}]匹配到保险公司[{}]个。",systemCode, CollUtil.size(companyList));
+        //log.debug("匹配到的保险公司分别是[{}]", JSONUtil.toJsonStr(companyList));
         // 根据用户权限获取 可使用的协议
-        List<String> companyIdList = companyList.stream().map(x -> x.getId()).collect(Collectors.toList());
+        List<String> companyIdList = companyList.stream().map(EsmInsCompany::getId).collect(Collectors.toList());
         String userDeptId = baseController.getUserDeptId();
         if (StringUtils.isEmpty(userDeptId)){
             SysUserJzgInfo userByUserId = sysUserJzgInfoService.getUserByUserId(baseController.getUserId(), systemCode);
             userDeptId = userByUserId.getDeptId();
         }
-        System.out.printf("------------------------------------------------------------2");
         List<PtlAgreement> userAgreement = ptlAgreementService.getUserAgreementByCompanyIds(userDeptId, companyIdList);
+        log.info("租户[{}],userDeptId= [{}] 匹配保险公司的协议[{}]个", systemCode, userDeptId, CollUtil.size(userAgreement));
 
         Map<String, List<PtlAgreement>> groupedMap = userAgreement.stream()
                 .collect(Collectors.groupingBy(PtlAgreement::getCompanyId));
-        System.out.printf("------------------------------------------------------------3");
+        log.info("租户[{}]匹配到的协议按照保司分类,分为[{}]个", systemCode, CollUtil.size(groupedMap));
+        log.info("groupedMap.keys = [{}]", JSONUtil.toJsonPrettyStr(groupedMap.keySet()));
+        var ids = companyList.stream().map(EsmInsCompany::getId).toList();
+        log.info("ids=[{}]",JSONUtil.toJsonStr(ids));
         companyList.forEach(company->{
             if(groupedMap.containsKey(company.getId())){
                 company.setAgreements(groupedMap.get(company.getId()));
             }
         });
 
-        companyList = companyList.stream().filter(x -> Objects.nonNull(x.getAgreements()) && x.getAgreements().size() > 0).collect(Collectors.toList());
+        companyList = companyList.stream().filter(x -> Objects.nonNull(x.getAgreements()) && !x.getAgreements().isEmpty()).collect(Collectors.toList());
 
+        log.info("租户匹配到的保司个数[{}]",CollUtil.size(companyList));
         return companyList;
     }
 

+ 1 - 1
platform/src/main/resources/application-prod.yml

@@ -17,7 +17,7 @@ spring:
       - nacos:mysql
       - nacos:redisson
       - nacos:minio
-      - nacos:logback
+
 
 
 config:

+ 10 - 23
platform/src/main/resources/logback-spring.xml

@@ -1,35 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <!-- 定义 Graylog GELF appender -->
-<!--    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">-->
-<!--        &lt;!&ndash; Graylog server 的主机名或 IP 地址 &ndash;&gt;-->
-<!--        <graylogHost>192.168.0.250</graylogHost>-->
-<!--        &lt;!&ndash; Graylog 服务器端口,通常为 12201(UDP)或 12202(TCP) &ndash;&gt;-->
-<!--        <graylogPort>12201</graylogPort>-->
-<!--        &lt;!&ndash; 可选项:指定协议,默认使用 UDP &ndash;&gt;-->
-<!--        <transport>UDP</transport>-->
-<!--        &lt;!&ndash; 发送日志时是否压缩 &ndash;&gt;-->
-<!--        <compress>true</compress>-->
-<!--        &lt;!&ndash; 是否在 GELF 消息中加入时间戳 &ndash;&gt;-->
-<!--        <includeTimestamp>true</includeTimestamp>-->
-<!--        &lt;!&ndash; 日志内容最大字节数 &ndash;&gt;-->
-<!--        <maxMessageSize>32768</maxMessageSize>-->
-<!--        &lt;!&ndash; 设置自定义字段 &ndash;&gt;-->
-<!--        <additionalFields>-->
-<!--        </additionalFields>-->
-<!--    </appender>-->
 
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg traceId=%X{traceId}%n</pattern>
         </encoder>
     </appender>
 
+    <appender name="GRAYLOG" class="de.siegmar.logbackgelf.GelfTcpAppender">
+        <graylogHost>192.168.5.250</graylogHost>
+<!--        <graylogHost>172.24.144.227</graylogHost>-->
+        <graylogPort>12201</graylogPort>
+        <includeMdcData>true</includeMdcData>
+        <extractStackTrace>true</extractStackTrace>
+    </appender>
 
     <root level="INFO">
         <appender-ref ref="STDOUT"/>
+        <appender-ref ref="GRAYLOG"/>
     </root>
-<!--    <root name="com.jzg" level="DEBUG">-->
-<!--        <appender-ref ref="GELF"/>-->
-<!--    </root>-->
+
 </configuration>

+ 5 - 2
platform/src/main/resources/mapper/SysMenuMapper.xml

@@ -28,8 +28,11 @@
     <select id="getMenuByRoleId" resultType="com.jzg.commons.entity.po.SysMenu">
         SELECT sm.*
         FROM sys_role_perms srp
-                 LEFT JOIN sys_menu sm ON srp.perms_id = sm.id
-        WHERE srp.role_id = #{roleId}
+        LEFT JOIN sys_menu sm ON srp.perms_id = sm.id
+        WHERE srp.role_id IN
+        <foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
+            #{roleId}
+        </foreach>
     </select>
 
     <select id="getCommonFunction" resultType="com.jzg.commons.entity.dto.SysCommonFunctionDto">

+ 7 - 3
pom.xml

@@ -40,7 +40,7 @@
     <guava.version>29.0-jre</guava.version>
     <rocketmq.version>2.2.1</rocketmq.version>
     <rocket.version>1.0-SNAPSHOT</rocket.version>
-    <seate.version>1.7.0</seate.version>
+    <seata.version>1.8.0</seata.version>
     <weixin-java.version>4.7.0</weixin-java.version>
     <spring-cloud.version>2022.0.0</spring-cloud.version>
     <opentelemetry.version>1.41.0</opentelemetry.version>
@@ -101,8 +101,6 @@
       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
 
-
-
     <!-- OpenTelemetry 核心 -->
     <dependency>
       <groupId>io.opentelemetry</groupId>
@@ -283,6 +281,12 @@
         <version>${weixin-java.version}</version>
       </dependency>
 
+      <!--seata-->
+      <dependency>
+        <groupId>io.seata</groupId>
+        <artifactId>seata-all</artifactId>
+        <version>${seata.version}</version>
+      </dependency>
 
 
     </dependencies>

+ 0 - 2
tenant/costsorrule/src/main/java/com/jzg/costsorrule/CostsOrRuleApplication.java

@@ -3,11 +3,9 @@ package com.jzg.costsorrule;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.context.annotation.ComponentScan;
 
 @SpringBootApplication
-//@EnableDiscoveryClient
 @ComponentScan(basePackages = {"com.jzg.commons","com.jzg.costsorrule"})
 @MapperScan({"com.jzg.costsorrule.mapper","com.jzg.commons.mapper"})
 public class CostsOrRuleApplication {

+ 1 - 9
tenant/costsorrule/src/main/java/com/jzg/costsorrule/client/QuoteClient.java

@@ -1,16 +1,10 @@
 package com.jzg.costsorrule.client;
 
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.dto.InsFeeOrdersParam;
-import com.jzg.commons.entity.po.InsFeeOrders;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import java.util.List;
-
 @FeignClient(name = "jzg-insurance")
 public interface QuoteClient {
 
@@ -23,7 +17,5 @@ public interface QuoteClient {
      * @return
      */
     @GetMapping(value = "/newCarJudgeRules/compareNewCar")
-    public HttpResult compareNewCar(@RequestParam("registerDate") String registerDate, @RequestParam("companyId") String companyId, @RequestParam("vehicleType") String vehicleType);
-
-
+    HttpResult compareNewCar(@RequestParam("registerDate") String registerDate, @RequestParam("companyId") String companyId, @RequestParam("vehicleType") String vehicleType);
 }

+ 0 - 2
tenant/costsorrule/src/main/resources/application-dev.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8085
 spring:
   cloud:
     nacos:

+ 0 - 3
tenant/costsorrule/src/main/resources/application-prod.yml

@@ -1,5 +1,3 @@
-server:
-  port: 8085
 spring:
   cloud:
     nacos:
@@ -18,5 +16,4 @@ spring:
       - nacos:redisson
       - nacos:minio
       - nacos:rocketmq
-      - nacos:logback
 

+ 0 - 2
tenant/costsorrule/src/main/resources/application-test.yml

@@ -1,5 +1,3 @@
-server:
-  port: 9085
 spring:
   cloud:
     nacos:

+ 2 - 0
tenant/costsorrule/src/main/resources/application.yml

@@ -1,3 +1,5 @@
+server:
+  port: 8085
 spring:
   application:
     name: jzg-costsorrule

+ 22 - 0
tenant/costsorrule/src/main/resources/logback-spring.xml

@@ -0,0 +1,22 @@
+<configuration>
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg traceId=%X{traceId}%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="GRAYLOG" class="de.siegmar.logbackgelf.GelfTcpAppender">
+        <graylogHost>192.168.5.250</graylogHost>
+<!--        <graylogHost>172.24.144.227</graylogHost>-->
+        <graylogPort>12201</graylogPort>
+        <includeMdcData>true</includeMdcData>
+        <extractStackTrace>true</extractStackTrace>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="GRAYLOG"/>
+    </root>
+
+</configuration>

+ 0 - 3
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/build/BoHaiCrawlerQuoteResultsVoBuild.java

@@ -5,14 +5,11 @@ 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.quotation.bohai.api.entity.response.QuotationResponse;
 import com.jzg.quotation.bohai.crawler.entity.response.BoHaiCrawlerQuotationResponse;
 import com.jzg.quotation.bohai.crawler.entity.response.BoHaiCrawlerQuotationResponse2;
 
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * @description: 渤海财险爬虫报价结果构建器

+ 4 - 4
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/crawler/entity/po/BoHaiCrawlerOrder.java

@@ -8,12 +8,12 @@ import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.time.LocalDateTime;
-import java.time.ZonedDateTime;
 
 /**
- * @description: 渤海财险爬虫订单实体
- * @author:
- * @date:
+ * 渤海财险爬虫订单实体
+ *
+ * @author
+ * @date
  **/
 @Data
 @Document(collection = "bohai.crawler.order")

部分文件因文件數量過多而無法顯示