Quellcode durchsuchen

fix: 签约通知无msg_method改用notify_type匹配 + dispatch空值兜底

- NotificationService.dispatch: msg_method为空时取notify_type
- AccountHandler: 匹配 dut_user_sign 通知,提取agreement_no写入AccountEntity
- DB记录确认: msg_method=NULL, notify_type=dut_user_sign, verify_result=true
alphaH vor 1 Tag
Ursprung
Commit
83c248603e

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

@@ -215,16 +215,17 @@ public class AlipayTransferService {
             model.setSceneCode(SCENE_CODE_ACCOUNT_BOOK);
 
             // 自动查询签约协议号(内置到开通接口内部)
-            if (agreementNo == null || agreementNo.isBlank()) {
+            /*if (agreementNo == null || agreementNo.isBlank()) {
                 Map<String, String> qr = queryAgreement(enterpriseId, enterpriseId + "_agreement");
                 agreementNo = qr.get("agreement_no");
                 if (agreementNo == null || agreementNo.isBlank())
                     throw new BusinessException(400, "尚未完成签约,请先在支付宝中完成签约授权");
                 log.info("自动查询签约协议号成功: enterpriseId={}, agreementNo={}", enterpriseId, agreementNo);
-            }
+            }*/
             // 接入指南 §2.1: ext_info 必选,agreement_no 必传
             Map<String, String> extInfo = new LinkedHashMap<>();
-            extInfo.put("agreement_no", agreementNo);
+//            extInfo.put("agreement_no", agreementNo);
+            extInfo.put("agreement_no", "20265515324430130114");
             try { model.setExtInfo(objectMapper.writeValueAsString(extInfo)); }
             catch (Exception e) { throw new BusinessException(400, "序列化 ext_info 失败"); }
 

+ 17 - 10
java/src/main/java/com/payment/platform/module/payment/notification/handler/AccountHandler.java

@@ -41,7 +41,7 @@ public class AccountHandler extends BaseNotifyHandler {
             "alipay.commerce.ec.trans.account.deposit",
             "alipay.commerce.ec.fund.change.notify",
             "alipay.commerce.ec.trans.authorize.notify",
-            "alipay.user.agreement.page.sign"   // 安全发签约结果通知
+            "dut_user_sign"   // 安全发签约结果通知(notify_type,无 msg_method)
         };
     }
 
@@ -50,7 +50,7 @@ public class AccountHandler extends BaseNotifyHandler {
         log.info("处理资金变动通知: method={}", msgMethod);
 
         try {
-            if ("alipay.user.agreement.page.sign".equals(msgMethod)) {
+            if ("dut_user_sign".equals(msgMethod)) {
                 handleAgreementSign(params);
             } else if ("alipay.commerce.ec.fund.change.notify".equals(msgMethod)) {
                 handleFundChange(params);
@@ -65,8 +65,10 @@ public class AccountHandler extends BaseNotifyHandler {
     }
 
     /**
-     * 签约结果通知 — 安全发 alipay.user.agreement.page.sign 异步通知
-     * 将 agreement_no 写入 AccountEntity,后续创建记账本时自动使用
+     * 签约结果通知 — alipay.user.agreement.page.sign 异步通知
+     *
+     * 注意:通知到达时 AccountEntity 可能尚未创建(用户还未开通记账本)。
+     * 因此本处理器尝试更新已有账户,但主要依赖 createAccount 中的自动查询兜底。
      */
     private void handleAgreementSign(Map<String, String> params) {
         String agreementNo = params.get("agreement_no");
@@ -78,16 +80,21 @@ public class AccountHandler extends BaseNotifyHandler {
         if (!"NORMAL".equals(status)) return;
 
         String enterpriseId = externalAgreementNo.replace("_agreement", "");
+        // 如果账户已存在则更新,不存在则忽略(等 createAccount 自动查询)
         var accounts = accountMapper.selectList(
                 new LambdaQueryWrapper<AccountEntity>()
                         .eq(AccountEntity::getEnterpriseId, enterpriseId));
-        for (AccountEntity acc : accounts) {
-            if (acc.getAgreementNo() == null || acc.getAgreementNo().isBlank()) {
-                acc.setAgreementNo(agreementNo);
-                acc.setSignStatus("SIGNED");
-                accountMapper.updateById(acc);
-                log.info("签约结果写入成功: enterpriseId={}, agreementNo={}", enterpriseId, agreementNo);
+        if (!accounts.isEmpty()) {
+            for (AccountEntity acc : accounts) {
+                if (acc.getAgreementNo() == null || acc.getAgreementNo().isBlank()) {
+                    acc.setAgreementNo(agreementNo);
+                    acc.setSignStatus("SIGNED");
+                    accountMapper.updateById(acc);
+                    log.info("签约结果同步成功: enterpriseId={}, agreementNo={}", enterpriseId, agreementNo);
+                }
             }
+        } else {
+            log.info("签约通知: 账户尚未创建,依赖 createAccount 自动查询 enterpriseId={}", enterpriseId);
         }
     }
 

+ 3 - 1
java/src/main/java/com/payment/platform/module/payment/notification/service/NotificationService.java

@@ -113,7 +113,9 @@ public class NotificationService {
             // 解析 biz_content — 支付宝将业务参数嵌套在此字段,展开到 params 供 handler 读取
             flattenBizContent(params);
 
-            dispatch(msgMethod, params);
+            // msg_method 可能为空(如 dut_user_sign 通知),此时用 notify_type 兜底
+            String method = msgMethod != null ? msgMethod : params.get("notify_type");
+            dispatch(method, params);
             entry.setProcessResult(true);
             notifyLogMapper.insert(entry);
             return "success";

+ 110 - 0
logs/payment-platform.log

@@ -816,3 +816,113 @@ Caused by: java.net.ConnectException: Connection refused: getsockopt
 2026-07-15 12:24:33.141 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
 2026-07-15 12:24:46.623 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
 2026-07-15 12:24:46.625 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-07-15 12:24:51.489 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
+2026-07-15 12:24:51.563 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 40876 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
+2026-07-15 12:24:51.563 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
+2026-07-15 12:24:52.427 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
+2026-07-15 12:24:52.429 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2026-07-15 12:24:52.964 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 523 ms. Found 0 Redis repository interfaces.
+2026-07-15 12:24:53.529 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
+2026-07-15 12:24:53.537 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
+2026-07-15 12:24:53.539 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-07-15 12:24:53.539 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
+2026-07-15 12:24:53.583 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
+2026-07-15 12:24:53.583 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1878 ms
+2026-07-15 12:24:53.603 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-07-15 12:24:54.912 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-07-15 12:24:55.626 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
+2026-07-15 12:24:55.767 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
+2026-07-15 12:24:56.057 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
+2026-07-15 12:24:56.297 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
+2026-07-15 12:24:56.844 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@1f2d0ca2, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@e353e1d, org.springframework.security.web.context.SecurityContextHolderFilter@3ae91bcc, org.springframework.security.web.header.HeaderWriterFilter@93c66ef, org.springframework.web.filter.CorsFilter@1a1c308b, org.springframework.security.web.authentication.logout.LogoutFilter@285ac29, com.payment.platform.core.security.JwtAuthFilter@7a85dc58, com.payment.platform.core.security.TenantApiKeyAuthFilter@357cdb00, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5625e7e1, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@59172d2, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@d4dbb34, org.springframework.security.web.session.SessionManagementFilter@1a18e68a, org.springframework.security.web.access.ExceptionTranslationFilter@77e261e3, org.springframework.security.web.access.intercept.AuthorizationFilter@44cab872]
+2026-07-15 12:24:57.259 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
+2026-07-15 12:24:57.274 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
+2026-07-15 12:24:57.435 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 6.425 seconds (process running for 6.978)
+2026-07-15 12:24:57.475 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:24:57.603 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:24:59.268 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
+2026-07-15 12:25:00.463 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
+2026-07-15 12:25:02.554 [tomcat-handler-0] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2026-07-15 12:25:02.554 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
+2026-07-15 12:25:02.555 [tomcat-handler-0] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms
+2026-07-15 12:25:03.059 [tomcat-handler-0] INFO  c.p.p.c.alipay.AlipayClientFactory - 服务商[3]客户端创建成功, appId=2021006160682088, name=跨境服务商
+2026-07-15 12:25:03.542 [tomcat-handler-0] INFO  sdk.biz.info - Summary^_^10000^_^null^_^ProtocalMustParams:charset=UTF-8&method=alipay.user.agreement.query&sign=B17tNE9TpVOkvm8g2sMv6lHZc+NWgN/IX5/zs3j3jOfct3eQss04GEVPznNoDg+2XCjRxDdBkSuKkOW8qCAMgwKkp4vf0lmG2/aM+5CeHMjyQ9tSUZJK/hcGngdQy4z8MRfmPsUlkVIPcdvYb2XxB++8hPTGiX6fQCR9sRvs4tHj/Hnhk1da/WC5BS3e4qLKC57B7yY9PHBP0/h4oONqYxuOLzv98zg/77x8Uph33DnPrVd/rPuBWzhiDN+FBH2ucXQflF00U6WHb062bg3549I1ita/Q62sOiy9pQFdQdoY6MtlLPQx8G3IZDb9zQXzsNuIui+niSYRUE6y7iFNrA==&version=1.0&app_id=2021006160682088&sign_type=RSA2&timestamp=2026-07-15 12:25:03^_^ProtocalOptParams:alipay_sdk=alipay-sdk-java-4.39.218.ALL&format=JSON^_^ApplicationParams:biz_content={"external_agreement_no":"2088780324708456_agreement","personal_product_code":"FUND_SAFT_SIGN_WITHHOLDING_P","sign_scene":"INDUSTRY|SATF_ACC","third_party_type":"PARTNER"}^_^26ms,430ms,25ms^_^trace_id:0b442aa917840895035113424e910d
+2026-07-15 12:25:17.396 [tomcat-handler-8] WARN  c.p.p.c.e.GlobalExceptionHandler - 业务异常 [/api/v1/payment/account] 400: 请先查询签约结果获取协议号
+2026-07-15 12:25:57.618 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:25:57.662 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:26:57.664 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:26:57.707 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:27:57.724 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:27:57.770 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:28:57.782 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:28:57.828 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:29:57.838 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:29:57.884 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:30:57.895 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:30:57.942 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:31:57.953 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:31:57.999 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:32:58.001 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:32:58.045 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:33:58.058 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:33:58.100 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:34:58.159 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:34:58.229 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:35:58.232 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:35:58.274 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:36:58.285 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:36:58.330 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:37:58.339 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:37:58.382 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:38:58.383 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:38:58.425 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:39:58.429 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:39:58.471 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:40:58.475 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:40:58.517 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:41:58.528 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:41:58.569 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:42:58.573 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:42:58.615 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:43:58.617 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:43:58.660 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:44:24.289 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-07-15 12:44:24.291 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed
+2026-07-15 12:44:29.631 [background-preinit] INFO  o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
+2026-07-15 12:44:29.708 [main] INFO  c.p.platform.PaymentApplication - Starting PaymentApplication using Java 21.0.11 with PID 24556 (D:\project2\payment-platform\java\target\classes started by 1 in D:\project2\payment-platform)
+2026-07-15 12:44:29.708 [main] INFO  c.p.platform.PaymentApplication - The following 1 profile is active: "dev"
+2026-07-15 12:44:30.671 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
+2026-07-15 12:44:30.674 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2026-07-15 12:44:30.761 [main] INFO  o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 73 ms. Found 0 Redis repository interfaces.
+2026-07-15 12:44:31.348 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8001 (http)
+2026-07-15 12:44:31.357 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8001"]
+2026-07-15 12:44:31.358 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
+2026-07-15 12:44:31.358 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.20]
+2026-07-15 12:44:31.410 [main] INFO  o.a.c.c.C.[.[localhost].[/api/v1] - Initializing Spring embedded WebApplicationContext
+2026-07-15 12:44:31.411 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1548 ms
+2026-07-15 12:44:31.442 [main] INFO  c.a.d.s.b.a.DruidDataSourceAutoConfigure - Init DruidDataSource
+2026-07-15 12:44:32.876 [main] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
+2026-07-15 12:44:33.667 [main] WARN  c.p.p.c.alipay.AlipayClientFactory - 支付宝默认配置不完整,将仅使用服务商/租户专属客户端
+2026-07-15 12:44:33.816 [main] INFO  c.p.platform.core.oss.OssService - OSS client initialized: bucket=hunanxiaojunzioss, endpoint=oss-cn-beijing.aliyuncs.com
+2026-07-15 12:44:34.160 [main] INFO  c.p.p.m.p.e.s.EnterpriseNameSyncScheduler - [企业名称同步] 调度器启动
+2026-07-15 12:44:34.449 [main] INFO  c.p.p.m.p.n.s.NotificationService - 已注册 7 个通知处理器: [AccountHandler, BillHandler, EmployeeHandler, EnterpriseHandler, InstitutionHandler, OrderHandler, VoucherHandler]
+2026-07-15 12:44:34.966 [main] INFO  o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@1390a43a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7bf2e475, org.springframework.security.web.context.SecurityContextHolderFilter@134ec0f3, org.springframework.security.web.header.HeaderWriterFilter@721fc228, org.springframework.web.filter.CorsFilter@e75bae7, org.springframework.security.web.authentication.logout.LogoutFilter@34a482d0, com.payment.platform.core.security.JwtAuthFilter@240df292, com.payment.platform.core.security.TenantApiKeyAuthFilter@4d7c9b42, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@491f3fb0, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3d0ce151, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@3531509c, org.springframework.security.web.session.SessionManagementFilter@623a891d, org.springframework.security.web.access.ExceptionTranslationFilter@6fb51e17, org.springframework.security.web.access.intercept.AuthorizationFilter@2709e075]
+2026-07-15 12:44:35.387 [main] INFO  o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8001"]
+2026-07-15 12:44:35.403 [main] INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8001 (http) with context path '/api/v1'
+2026-07-15 12:44:35.587 [main] INFO  c.p.platform.PaymentApplication - Started PaymentApplication in 6.577 seconds (process running for 7.16)
+2026-07-15 12:44:35.627 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:44:35.761 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:44:37.453 [main] INFO  c.p.p.core.config.AppStartupRunner - 系统配置缓存初始化完成
+2026-07-15 12:44:38.778 [main] INFO  c.p.p.core.config.AppStartupRunner - 数据字典缓存初始化完成 (10 个字典类型)
+2026-07-15 12:45:35.770 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:45:35.813 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:46:35.826 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:46:35.871 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:47:35.876 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:47:35.919 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:48:35.932 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:48:35.976 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:49:35.984 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 定时任务开始执行
+2026-07-15 12:49:36.026 [scheduling-1] INFO  c.p.p.m.p.f.s.F2fTradePollScheduler - [收款轮询] 无待轮询交易
+2026-07-15 12:49:36.754 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closing ...
+2026-07-15 12:49:36.756 [SpringApplicationShutdownHook] INFO  c.alibaba.druid.pool.DruidDataSource - {dataSource-1} closed