1
0

4 Ревизии e08d021fcf ... 7d73555e57

Автор SHA1 Съобщение Дата
  alphaH 7d73555e57 fix: 下拉框值和模板条件全部改为ALIPAY_USER_ID/BANKCARD_ACCOUNT преди 1 месец
  alphaH 63485e5b54 fix: 前后端校验场景截图+资质文件合计不超过5个 преди 1 месец
  alphaH 8015253804 fix: 委托代发通用提示改为上传区常驻文字,不混在tooltip里 преди 1 месец
  alphaH 1cee0b34ef feat: 进件场景资质文件上传 + 问号提示各场景所需资料 преди 1 месец

BIN
frontend/dist.zip


+ 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 }>>({

+ 65 - 6
frontend/src/views/module_payment/account/index.vue

@@ -212,18 +212,18 @@
               </el-form-item>
               <el-form-item label="收款方类型" prop="payee_info.identity_type">
                 <el-select v-model="transferForm.payee_info.identity_type" placeholder="请选择收款方类型">
-                  <el-option label="支付宝账户" value="alipay" />
-                  <el-option label="银行卡" value="bank" />
+                  <el-option label="支付宝账户" value="ALIPAY_USER_ID" />
+                  <el-option label="银行卡" value="BANKCARD_ACCOUNT" />
                   <!-- <el-option label="资金专户" value="book" /> -->
                 </el-select>
               </el-form-item>
               <el-form-item label="收款方真实姓名" prop="payee_info.name">
                 <el-input v-model="transferForm.payee_info.name" placeholder="请输入收款方姓名" />
               </el-form-item>
-              <el-form-item :label="transferForm.payee_info.identity_type === 'ALIPAY_USER_ID' ? '收款方支付宝账号' : '收款方银行卡号'" prop="payee_info.identity">
-                <el-input v-model="transferForm.payee_info.identity" :placeholder="transferForm.payee_info.identity_type === 'ALIPAY_USER_ID' ? '请输入收款方支付宝账号' : '请输入收款方银行卡号'" />
+              <el-form-item :label="isAlipayPayee ? '收款方支付宝账号' : '收款方银行卡号'" prop="payee_info.identity">
+                <el-input v-model="transferForm.payee_info.identity" :placeholder="isAlipayPayee ? '请输入收款方支付宝账号' : '请输入收款方银行卡号'" />
               </el-form-item>
-              <template v-if="transferForm.payee_info.identity_type === 'bank'">
+              <template v-if="transferForm.payee_info.identity_type === 'BANKCARD_ACCOUNT'">
                 <el-form-item label="账户类型" prop="payee_info.bankcard_ext_info.account_type">
                   <el-select v-model="transferForm.payee_info.bankcard_ext_info!.account_type" placeholder="请选择账户类型">
                     <el-option label="公司账户" value="1" />
@@ -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 个文件<br>受其他公司委托为他人代发时,无论属于什么场景,请上传合作协议(含甲方行业、委托代发原因、代发对象身份等)</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,39 @@ 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 qualificationTip = computed(() =>
+  ONBOARD_QUALIFICATION_TIPS[onboardForm.scene_code] || "选填,按需上传行业资质文件"
+);
+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" },
@@ -885,6 +932,10 @@ function handleBeforeUpload(file: File) {
     ElMessage.error("文件大小不能超过 5MB");
     return false;
   }
+  if (onboardImageIds.value.length + onboardQualImageIds.value.length >= 5) {
+    ElMessage.error("场景截图和资质文件合计最多 5 个文件");
+    return false;
+  }
   return true;
 }
 
@@ -940,6 +991,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 +1013,8 @@ function handleOnboardReset() {
   onboardFormRef.value?.resetFields();
   onboardFiles.value = [];
   onboardImageIds.value = [];
+  onboardQualFiles.value = [];
+  onboardQualImageIds.value = [];
   onboardSiteTypes.value = [];
   Object.keys(onboardSites).forEach(k => delete onboardSites[k]);
 }
@@ -1025,6 +1079,11 @@ const transferRules: FormRules = {
   "payee_info.identity": [{ required: true, message: "请输入收款方账号", trigger: "blur" }],
 };
 
+const isAlipayPayee = computed(() =>
+  transferForm.payee_info.identity_type === "ALIPAY_USER_ID"
+  || transferForm.payee_info.identity_type === "ALIPAY_LOGON_ID"
+);
+
 const transferList = ref<any[]>([]);
 const transferPage = reactive({
   page_no: 1,

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

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

@@ -247,11 +247,18 @@ 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, "转账场景说明不能为空");
         if (sceneImageKeys == null || sceneImageKeys.isBlank())
             throw new BusinessException(400, "转账场景截图不能为空");
+        // 场景截图+资质文件合计最多5个
+        int imgCnt = sceneImageKeys.split(",").length;
+        int qualCnt = (sceneQualificationImageKeys != null && !sceneQualificationImageKeys.isBlank())
+                ? sceneQualificationImageKeys.split(",").length : 0;
+        if (imgCnt + qualCnt > 5)
+            throw new BusinessException(400, "场景截图和资质文件合计最多5个");
         String outBizNo = SnowflakeIdGenerator.nextIdStr();
         try {
             AlipayFundExpandindirectCreateModel model = new AlipayFundExpandindirectCreateModel();
@@ -262,6 +269,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, "企业不存在");

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


+ 29 - 134
logs/payment-platform.log

@@ -1,134 +1,29 @@
-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
+2026-07-17 10:04:03.925 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 28304 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
+2026-07-17 10:04:03.926 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
+2026-07-17 10:04:04.936 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
+2026-07-17 10:04:04.940 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2026-07-17 10:04:05.010 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 55 ms. Found 0 Redis repository interfaces.
+2026-07-17 10:04:05.695 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
+2026-07-17 10:04:05.704 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
+2026-07-17 10:04:05.706 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-07-17 10:04:05.706 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
+2026-07-17 10:04:05.768 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
+2026-07-17 10:04:05.769 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1653 ms
+2026-07-17 10:04:05.797 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-07-17 10:04:07.649 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-07-17 10:04:08.568 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
+2026-07-17 10:04:08.781 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
+2026-07-17 10:04:09.138 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
+2026-07-17 10:04:09.446 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
+2026-07-17 10:04:09.999 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@3328db4f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4f9e9c21, org.springframework.security.web.context.SecurityContextHolderFilter@7962a364, org.springframework.security.web.header.HeaderWriterFilter@6fb51e17, org.springframework.web.filter.CorsFilter@1390a43a, org.springframework.security.web.authentication.logout.LogoutFilter@30ce78e3, com.payment.platform.core.security.JwtAuthFilter@240df292, com.payment.platform.core.security.TenantApiKeyAuthFilter@54087bdb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@134ec0f3, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@258ac1e6, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7bf2e475, org.springframework.security.web.session.SessionManagementFilter@721fc228, org.springframework.security.web.access.ExceptionTranslationFilter@4fe9fb65, org.springframework.security.web.access.intercept.AuthorizationFilter@6c120b00]
+2026-07-17 10:04:10.492 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
+2026-07-17 10:04:10.504 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
+2026-07-17 10:04:10.648 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 7.64 seconds (process running for 8.593)
+2026-07-17 10:04:12.984 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
+2026-07-17 10:04:14.679 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
+2026-07-17 10:04:36.262 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-07-17 10:04:36.263 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
+2026-07-17 10:04:36.265 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
+2026-07-17 10:04:46.065 [tomcat-handler-4] INFO  c.p.p.m.s.auth.service.AuthService - 用户ID: 2, 用户名: q 正在生成JWT令牌
+2026-07-17 10:04:46.169 [tomcat-handler-4] INFO  c.p.p.m.s.a.c.AuthController - 用户q登录成功