Ver código fonte

feat: 进件场景资质文件上传 + 问号提示各场景所需资料

- 后端 createOnboard 新增 scene_qualification_image 参数
- 前端弹窗新增「资质文件」上传区(最多5个)
- questionFilled问号tooltip,根据scene_code动态显示该场景所需资料
- 5个场景有专属提示:佣金报酬/现金营销/行政补贴/保险理赔/采购货款
- 通用提示:委托代发时需上传合作协议
alphaH 14 horas atrás
pai
commit
1cee0b34ef

+ 1 - 0
frontend/src/api/module_payment/account.ts

@@ -70,6 +70,7 @@ export const AccountAPI = {
     scene_code: string;
     scene_directions: string;
     scene_image: string;
+    scene_qualification_image?: string;
     sites?: string;
   }) {
     return request<ApiResponse<{ order_id: string; out_biz_no: string; status: string }>>({

+ 53 - 1
frontend/src/views/module_payment/account/index.vue

@@ -529,6 +529,20 @@
           </el-upload>
           <div class="upload-tip">支持 jpg / png / pdf,最多 5 个文件</div>
         </el-form-item>
+        <el-form-item>
+          <template #label>
+            资质文件
+            <el-tooltip placement="top" :content="qualificationTip" raw-content>
+              <el-icon style="margin-left:4px;cursor:help"><QuestionFilled /></el-icon>
+            </el-tooltip>
+          </template>
+          <el-upload ref="qualUploadRef" :http-request="handleQualUpload" :file-list="onboardQualFiles"
+            :limit="5" list-type="picture-card" accept=".jpg,.jpeg,.png,.pdf"
+            :before-upload="handleBeforeUpload" :on-remove="handleQualFileRemove">
+            <el-icon><Plus /></el-icon>
+          </el-upload>
+          <div class="upload-tip">按场景要求上传行业资质,最多 5 个文件</div>
+        </el-form-item>
         <el-form-item label="站点信息">
           <el-checkbox-group v-model="onboardSiteTypes">
             <el-checkbox v-for="s in SITE_TYPE_OPTIONS" :key="s.value" :label="s.value">{{ s.label }}</el-checkbox>
@@ -747,7 +761,7 @@ import ConsumeDetail from "./components/ConsumeDetail.vue";
 import F2fTradeRecord from "./components/F2fTradeRecord.vue";
 import TenantAPI, { TenantTable } from "@/api/module_system/tenant";
 import { ref, reactive, computed, onMounted, watch } from "vue";
-import { Refresh, Loading, Plus } from "@element-plus/icons-vue";
+import { Refresh, Loading, Plus, QuestionFilled } from "@element-plus/icons-vue";
 import { ElMessage, ElMessageBox } from "element-plus";
 import type { FormInstance, FormRules } from "element-plus";
 import * as ExcelJS from "exceljs";
@@ -826,6 +840,41 @@ const createForm = reactive({
   remark: "",
 });
 
+const ONBOARD_QUALIFICATION_TIPS: Record<string, string> = {
+  YONGJIN_BAOCHOU: `需提供以下任一:<br>① 发薪资质(人力资源经营许可证/劳务派遣经营许可证/委托代征协议)+ 至少1份已签署的上游委托发薪合作合同<br>② 付款员工清单(盖章)+至少3份已签署的劳动(务)合同<br>③ 付款员工清单(盖章)+最近1个月代缴个税或社保缴纳证明`,
+  XIANJIN_YINGXIAO: "需提供用户参与营销活动细则",
+  XINGZHENG_BUTIE: "需提供行政补贴/奖励官方文件或政府官网全文截图;若委托其他主体代发且无官方文件,需行政机关出具证明函说明委托关系",
+  BAOXIAN_LIPEI: "需提供保险资质证明(如《保险许可证》《保险业务法人登记证书》等)或保司合作证明",
+  CAIGOU_HUOKUAN: "需提供至少1份上下游合作伙伴合作协议",
+};
+const GENERAL_QUAL_TIP = "受其他公司委托为他人代发时,无论属于什么场景,请上传合作协议(含甲方行业、委托代发原因、代发对象身份等)";
+const qualificationTip = computed(() => {
+  const tip = ONBOARD_QUALIFICATION_TIPS[onboardForm.scene_code];
+  return tip ? tip + "<br><br>" + GENERAL_QUAL_TIP : GENERAL_QUAL_TIP;
+});
+const onboardQualFiles = ref<any[]>([]);
+const onboardQualImageIds = ref<string[]>([]);
+
+async function handleQualUpload(option: any) {
+  try {
+    const res = await AccountAPI.uploadImage(option.file, currentEnterpriseId.value!);
+    const imageId = res.data.data?.image_id;
+    if (imageId) {
+      onboardQualImageIds.value.push(imageId);
+      option.onSuccess();
+    } else {
+      option.onError(new Error("上传失败"));
+    }
+  } catch (e) {
+    option.onError(e);
+  }
+}
+
+function handleQualFileRemove(_file: any, fileList: any) {
+  const idx = fileList.findIndex((f: any) => f.uid === _file.uid);
+  if (idx >= 0) onboardQualImageIds.value.splice(idx, 1);
+}
+
 const SITE_TYPE_OPTIONS = [
   { value: "WEBSITE", label: "网站" },
   { value: "APP", label: "APP" },
@@ -940,6 +989,7 @@ async function handleOnboardSubmit() {
         scene_code: onboardForm.scene_code,
         scene_directions: onboardForm.scene_directions,
         scene_image: onboardImageIds.value.join(","),
+        scene_qualification_image: onboardQualImageIds.value.join(",") || undefined,
         sites,
       });
       const data = res.data.data;
@@ -961,6 +1011,8 @@ function handleOnboardReset() {
   onboardFormRef.value?.resetFields();
   onboardFiles.value = [];
   onboardImageIds.value = [];
+  onboardQualFiles.value = [];
+  onboardQualImageIds.value = [];
   onboardSiteTypes.value = [];
   Object.keys(onboardSites).forEach(k => delete onboardSites[k]);
 }

+ 1 - 0
java/src/main/java/com/payment/platform/module/payment/account/controller/AccountController.java

@@ -131,6 +131,7 @@ public class AccountController {
                 (String) b.get("scene_code"),
                 (String) b.get("scene_directions"),
                 (String) b.get("scene_image"),
+                (String) b.get("scene_qualification_image"),
                 (String) b.get("sites")));
     }
 

+ 3 - 0
java/src/main/java/com/payment/platform/module/payment/account/service/AlipayTransferService.java

@@ -247,6 +247,7 @@ public class AlipayTransferService {
     /** alipay.fund.expandindirect.create — 创建进件单 */
     public Map<String, String> createOnboard(String enterpriseId, String sceneCode,
                                               String sceneDirections, String sceneImageKeys,
+                                              String sceneQualificationImageKeys,
                                               String sites) {
         if (sceneDirections == null || sceneDirections.isBlank())
             throw new BusinessException(400, "转账场景说明不能为空");
@@ -262,6 +263,8 @@ public class AlipayTransferService {
             model.setSceneCode(sceneCode);
             model.setSceneDirections(sceneDirections);
             model.setSceneImage(sceneImageKeys);
+            if (sceneQualificationImageKeys != null && !sceneQualificationImageKeys.isBlank())
+                model.setSceneQualificationImage(sceneQualificationImageKeys);
             if (sites != null && !sites.isBlank()) model.setSites(sites);
             EnterpriseEntity ent = enterpriseMapper.selectByEnterpriseIdIgnoreTenant(enterpriseId);
             if (ent == null) throw new BusinessException(400, "企业不存在");

+ 1 - 1
java/src/main/resources/application.yml

@@ -38,7 +38,7 @@ spring:
 
   data:
     redis:
-      host: redis
+      host: localhost
       port: 6379
       database: 1
       password: '123456#xjz'

BIN
logs/payment-platform.2026-07-16.0.log.gz


+ 1 - 134
logs/payment-platform.log

@@ -1,134 +1 @@
-2026-07-16 10:16:57.648 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
-2026-07-16 10:16:57.733 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 50928 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
-2026-07-16 10:16:57.734 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
-2026-07-16 10:16:58.941 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2026-07-16 10:16:58.943 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-07-16 10:16:59.015 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 56 ms. Found 0 Redis repository interfaces.
-2026-07-16 10:16:59.931 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
-2026-07-16 10:16:59.944 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
-2026-07-16 10:16:59.946 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-07-16 10:16:59.947 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
-2026-07-16 10:17:00.018 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
-2026-07-16 10:17:00.018 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2075 ms
-2026-07-16 10:17:00.055 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-07-16 10:17:01.696 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-07-16 10:17:02.771 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
-2026-07-16 10:17:02.993 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
-2026-07-16 10:17:03.393 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
-2026-07-16 10:17:03.815 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
-2026-07-16 10:17:05.062 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@6939f18a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@8bd9d08, org.springframework.security.web.context.SecurityContextHolderFilter@701da311, org.springframework.security.web.header.HeaderWriterFilter@732bb49d, org.springframework.web.filter.CorsFilter@189f3ccd, org.springframework.security.web.authentication.logout.LogoutFilter@44c54463, com.payment.platform.core.security.JwtAuthFilter@857f1a7, com.payment.platform.core.security.TenantApiKeyAuthFilter@176054b7, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5de14222, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6fb51e17, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2eb0932c, org.springframework.security.web.session.SessionManagementFilter@19a4cdea, org.springframework.security.web.access.ExceptionTranslationFilter@45e68fac, org.springframework.security.web.access.intercept.AuthorizationFilter@41041c31]
-2026-07-16 10:17:05.783 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
-2026-07-16 10:17:05.803 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
-2026-07-16 10:17:05.970 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 8.96 seconds (process running for 10.204)
-2026-07-16 10:17:07.846 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
-2026-07-16 10:17:08.987 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
-2026-07-16 10:17:12.241 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-07-16 10:17:12.242 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
-2026-07-16 10:17:12.244 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
-2026-07-16 10:17:22.528 [tomcat-handler-7] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 1, 用户名: admin 正在生成JWT令牌
-2026-07-16 10:17:22.618 [tomcat-handler-7] INFO  c.p.p.m.s.a.c.AuthController - 用户admin登录成功
-2026-07-16 10:21:53.579 [tomcat-handler-28] INFO  c.p.p.m.s.auth.service.AuthService - 用户退出登录成功,会话编号:6845631e-e62f-4795-8a8b-061a8641fa45
-2026-07-16 10:22:00.630 [tomcat-handler-31] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 2, 用户名: q 正在生成JWT令牌
-2026-07-16 10:22:00.712 [tomcat-handler-31] INFO  c.p.p.m.s.a.c.AuthController - 用户q登录成功
-2026-07-16 10:25:46.743 [tomcat-handler-51] INFO  c.p.p.m.s.auth.service.AuthService - 用户退出登录成功,会话编号:0a67cce3-57ab-4b9e-a1b7-a2cd33570dd3
-2026-07-16 10:25:54.721 [tomcat-handler-54] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 1, 用户名: admin 正在生成JWT令牌
-2026-07-16 10:25:54.804 [tomcat-handler-54] INFO  c.p.p.m.s.a.c.AuthController - 用户admin登录成功
-2026-07-16 10:26:11.340 [tomcat-handler-66] INFO  c.p.p.m.s.auth.service.AuthService - 用户退出登录成功,会话编号:43f9414d-3380-4a1c-a33b-d4e9e0b61aa2
-2026-07-16 10:26:19.262 [tomcat-handler-69] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 2, 用户名: q 正在生成JWT令牌
-2026-07-16 10:26:19.418 [tomcat-handler-69] INFO  c.p.p.m.s.a.c.AuthController - 用户q登录成功
-2026-07-16 10:26:51.947 [tomcat-handler-87] INFO  c.p.p.m.s.auth.service.AuthService - 用户退出登录成功,会话编号:1a2ab41f-452c-4ca1-879d-27cd18f377c0
-2026-07-16 10:27:01.046 [tomcat-handler-90] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 2, 用户名: q 正在生成JWT令牌
-2026-07-16 10:27:01.126 [tomcat-handler-90] INFO  c.p.p.m.s.a.c.AuthController - 用户q登录成功
-2026-07-16 10:27:19.436 [tomcat-handler-121] INFO  c.p.p.m.s.auth.service.AuthService - 用户退出登录成功,会话编号:dcfeae15-4a61-4ec7-8656-3c70e490003f
-2026-07-16 11:50:23.443 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
-2026-07-16 11:50:23.452 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
-2026-07-16 12:13:42.626 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
-2026-07-16 12:13:42.689 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 50468 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
-2026-07-16 12:13:42.690 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
-2026-07-16 12:13:43.574 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2026-07-16 12:13:43.576 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-07-16 12:13:43.635 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 0 Redis repository interfaces.
-2026-07-16 12:13:44.233 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
-2026-07-16 12:13:44.245 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:13:44.246 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-07-16 12:13:44.246 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
-2026-07-16 12:13:44.295 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
-2026-07-16 12:13:44.295 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1441 ms
-2026-07-16 12:13:44.322 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-07-16 12:13:45.804 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-07-16 12:13:46.666 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
-2026-07-16 12:13:46.825 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
-2026-07-16 12:13:47.138 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
-2026-07-16 12:13:47.444 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
-2026-07-16 12:13:48.032 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@6939f18a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@8bd9d08, org.springframework.security.web.context.SecurityContextHolderFilter@701da311, org.springframework.security.web.header.HeaderWriterFilter@732bb49d, org.springframework.web.filter.CorsFilter@189f3ccd, org.springframework.security.web.authentication.logout.LogoutFilter@44c54463, com.payment.platform.core.security.JwtAuthFilter@4eace42b, com.payment.platform.core.security.TenantApiKeyAuthFilter@176054b7, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5de14222, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6fb51e17, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2eb0932c, org.springframework.security.web.session.SessionManagementFilter@19a4cdea, org.springframework.security.web.access.ExceptionTranslationFilter@45e68fac, org.springframework.security.web.access.intercept.AuthorizationFilter@41041c31]
-2026-07-16 12:13:48.630 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:13:48.647 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
-2026-07-16 12:13:48.809 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 6.88 seconds (process running for 7.521)
-2026-07-16 12:13:51.987 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
-2026-07-16 12:13:53.597 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-07-16 12:13:53.598 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
-2026-07-16 12:13:53.600 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
-2026-07-16 12:13:53.601 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
-2026-07-16 12:13:53.823 [scheduling-1] ERROR c.p.p.common.utils.RedisLockUtil - 获取分布式锁失败: key=retry:dealing_transfers, error=Unable to connect to Redis
-2026-07-16 12:14:16.068 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
-2026-07-16 12:14:16.070 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
-2026-07-16 12:14:18.337 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
-2026-07-16 12:14:18.424 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 9664 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
-2026-07-16 12:14:18.425 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
-2026-07-16 12:14:19.377 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2026-07-16 12:14:19.379 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-07-16 12:14:19.430 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 0 Redis repository interfaces.
-2026-07-16 12:14:20.052 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
-2026-07-16 12:14:20.061 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:14:20.062 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-07-16 12:14:20.062 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
-2026-07-16 12:14:20.120 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
-2026-07-16 12:14:20.121 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1521 ms
-2026-07-16 12:14:20.156 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-07-16 12:14:21.654 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-07-16 12:14:22.411 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
-2026-07-16 12:14:22.557 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
-2026-07-16 12:14:22.892 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
-2026-07-16 12:14:23.130 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
-2026-07-16 12:14:23.633 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@e75bae7, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3531509c, org.springframework.security.web.context.SecurityContextHolderFilter@491f3fb0, org.springframework.security.web.header.HeaderWriterFilter@623a891d, org.springframework.web.filter.CorsFilter@23169374, org.springframework.security.web.authentication.logout.LogoutFilter@6939f18a, com.payment.platform.core.security.JwtAuthFilter@2c451c4a, com.payment.platform.core.security.TenantApiKeyAuthFilter@4d7c9b42, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@58a0f75b, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@2b569858, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4f2b1a2f, org.springframework.security.web.session.SessionManagementFilter@756030e2, org.springframework.security.web.access.ExceptionTranslationFilter@721fc228, org.springframework.security.web.access.intercept.AuthorizationFilter@4f9e9c21]
-2026-07-16 12:14:24.053 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:14:24.065 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
-2026-07-16 12:14:24.166 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 6.4 seconds (process running for 7.047)
-2026-07-16 12:14:26.059 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
-2026-07-16 12:14:27.053 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
-2026-07-16 12:14:33.352 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-07-16 12:14:33.352 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
-2026-07-16 12:14:33.353 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms
-2026-07-16 12:14:51.368 [tomcat-handler-6] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 2, 用户名: q 正在生成JWT令牌
-2026-07-16 12:14:51.499 [tomcat-handler-6] INFO  c.p.p.m.s.a.c.AuthController - 用户q登录成功
-2026-07-16 12:15:05.568 [tomcat-handler-23] INFO  c.p.p.c.alipay.AlipayClientFactory - 服务商[3]客户端创建成功, appId=2021006160682088, name=跨境服务商, mode=cert
-2026-07-16 12:17:05.207 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
-2026-07-16 12:17:05.208 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
-2026-07-16 12:17:07.625 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
-2026-07-16 12:17:07.691 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 30656 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
-2026-07-16 12:17:07.692 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
-2026-07-16 12:17:08.595 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
-2026-07-16 12:17:08.597 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-07-16 12:17:08.646 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 38 ms. Found 0 Redis repository interfaces.
-2026-07-16 12:17:09.237 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
-2026-07-16 12:17:09.245 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:17:09.246 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
-2026-07-16 12:17:09.246 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
-2026-07-16 12:17:09.296 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
-2026-07-16 12:17:09.297 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1452 ms
-2026-07-16 12:17:09.324 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
-2026-07-16 12:17:10.913 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
-2026-07-16 12:17:11.852 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
-2026-07-16 12:17:12.008 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
-2026-07-16 12:17:12.308 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
-2026-07-16 12:17:12.563 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
-2026-07-16 12:17:13.077 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@82382d1, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6c120b00, org.springframework.security.web.context.SecurityContextHolderFilter@722d3ddb, org.springframework.security.web.header.HeaderWriterFilter@6debf1b8, org.springframework.web.filter.CorsFilter@d8a2b1b, org.springframework.security.web.authentication.logout.LogoutFilter@1f596988, com.payment.platform.core.security.JwtAuthFilter@682fe17b, com.payment.platform.core.security.TenantApiKeyAuthFilter@531bec12, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@25b87e1b, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@623a891d, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2709e075, org.springframework.security.web.session.SessionManagementFilter@4fe9fb65, org.springframework.security.web.access.ExceptionTranslationFilter@19a4cdea, org.springframework.security.web.access.intercept.AuthorizationFilter@8bd9d08]
-2026-07-16 12:17:13.468 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
-2026-07-16 12:17:13.479 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
-2026-07-16 12:17:13.592 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 6.668 seconds (process running for 7.313)
-2026-07-16 12:17:15.845 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
-2026-07-16 12:17:17.398 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
-2026-07-16 12:17:37.007 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-07-16 12:17:37.008 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
-2026-07-16 12:17:37.009 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms
-2026-07-16 12:17:40.770 [tomcat-handler-7] INFO  c.p.p.c.alipay.AlipayClientFactory - 服务商[3]客户端创建成功, appId=2021006160682088, name=跨境服务商, mode=cert
+2026-07-17 10:04:03.842 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final