From 1a7d4bb39f559bae0086d3782a7f60e17eb1be64 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sun, 6 Sep 2026 12:02:11 +0800 Subject: [PATCH] fix: order wallet database assertions --- deploy/sql/头程数据库统一增量-MySQL8.sql | 36 ++++++++++++++----- .../baiyue/finance/FinanceContractTest.java | 5 +++ ...rototypeMenuPermissionSqlContractTest.java | 4 ++- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/deploy/sql/头程数据库统一增量-MySQL8.sql b/deploy/sql/头程数据库统一增量-MySQL8.sql index fbea23673..6cae73c6e 100644 --- a/deploy/sql/头程数据库统一增量-MySQL8.sql +++ b/deploy/sql/头程数据库统一增量-MySQL8.sql @@ -16531,8 +16531,6 @@ BEGIN END IF; END$$ DELIMITER ; -CALL assert_finance_permissions(); -DROP PROCEDURE IF EXISTS assert_finance_permissions; -- IAM 跨区安全事件可靠发送箱。来源:iam/src/main/resources/db/security-event-outbox.sql USE baiyue_iam; @@ -17602,12 +17600,6 @@ DELIMITER ; CALL baiyue_firstleg.ensure_smart_loading_candidate_indexes(); DROP PROCEDURE IF EXISTS baiyue_firstleg.ensure_smart_loading_candidate_indexes; -CALL baiyue_firstleg.assert_unified_final_schema(); -DROP PROCEDURE IF EXISTS baiyue_firstleg.assert_unified_final_schema; -SELECT 'PASS' AS migration_status, - '统一增量全部执行完成;父子订单、履约分片、装柜门禁、订舱拖车、报关船期、船司查询、仓库角色、费用、Finance人工财务、公共资源、可靠审计及IAM安全事件结构校验通过' AS message; - - -- 一件代发客户资金账户:实际余额优先,授信额度补足;冻结后结算或解冻。 USE baiyue_finance; CREATE TABLE IF NOT EXISTS fin_wallet_account ( @@ -17873,7 +17865,9 @@ DELIMITER ; CALL migrate_wallet_permissions(); DROP PROCEDURE IF EXISTS migrate_wallet_permissions; -SELECT '统一增量全部执行完成;父子订单、履约分片、装柜门禁、订舱拖车、报关船期、船司查询、仓库角色、费用、Finance人工财务、客户资金账户、公共资源、可靠审计及IAM安全事件结构校验通过' AS message; +-- 钱包写权限属于 Finance 权限总数的一部分,必须先完成钱包权限迁移再做总量断言。 +CALL assert_finance_permissions(); +DROP PROCEDURE IF EXISTS assert_finance_permissions; USE baiyue_finance; @@ -17911,3 +17905,27 @@ CREATE TABLE IF NOT EXISTS fin_wallet_event_outbox ( UNIQUE KEY uk_fin_wallet_event_key (event_key), KEY idx_fin_wallet_event_publish (status,next_retry_at,created_at) ) ENGINE=InnoDB COMMENT='国内Finance到海外资金结果可靠发送箱'; + +DROP PROCEDURE IF EXISTS assert_wallet_event_schema; +DELIMITER $$ +CREATE PROCEDURE assert_wallet_event_schema() +BEGIN + IF (SELECT COUNT(*) FROM information_schema.TABLES + WHERE TABLE_SCHEMA='baiyue_finance' + AND TABLE_NAME IN ('fin_wallet_command_inbox','fin_wallet_event_outbox')) <> 2 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:客户资金跨区事件表不完整'; + END IF; + IF (SELECT COUNT(*) FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA='baiyue_finance' AND TABLE_NAME='fin_wallet_event_outbox' + AND INDEX_NAME='uk_fin_wallet_event_key' AND NON_UNIQUE=0) <> 1 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:客户资金结果事件幂等索引不完整'; + END IF; +END$$ +DELIMITER ; +CALL assert_wallet_event_schema(); +DROP PROCEDURE IF EXISTS assert_wallet_event_schema; + +CALL baiyue_firstleg.assert_unified_final_schema(); +DROP PROCEDURE IF EXISTS baiyue_firstleg.assert_unified_final_schema; +SELECT 'PASS' AS migration_status, + '统一增量全部执行完成;父子订单、履约分片、装柜门禁、订舱拖车、报关船期、船司查询、仓库角色、费用、Finance人工财务、客户资金账户、公共资源、可靠审计及IAM安全事件结构校验通过' AS message; diff --git a/finance/src/test/java/com/baiyue/finance/FinanceContractTest.java b/finance/src/test/java/com/baiyue/finance/FinanceContractTest.java index 7f2695f70..a7d673357 100644 --- a/finance/src/test/java/com/baiyue/finance/FinanceContractTest.java +++ b/finance/src/test/java/com/baiyue/finance/FinanceContractTest.java @@ -45,5 +45,10 @@ class FinanceContractTest { assertTrue(unified.contains("CREATE DATABASE IF NOT EXISTS baiyue_finance")); assertTrue(unified.contains("assert_finance_permissions")); assertTrue(unified.contains("merchant:finance:statement:view")); + int walletEventSchema = unified.indexOf("CREATE TABLE IF NOT EXISTS fin_wallet_event_outbox"); + int finalPass = unified.lastIndexOf("SELECT 'PASS' AS migration_status"); + assertTrue(walletEventSchema >= 0); + assertTrue(finalPass > walletEventSchema); + assertTrue(unified.contains("CREATE PROCEDURE assert_wallet_event_schema()")); } } diff --git a/iam/src/test/java/com/baiyue/iam/repository/AdminPrototypeMenuPermissionSqlContractTest.java b/iam/src/test/java/com/baiyue/iam/repository/AdminPrototypeMenuPermissionSqlContractTest.java index 2a0616e1e..2075ae94c 100644 --- a/iam/src/test/java/com/baiyue/iam/repository/AdminPrototypeMenuPermissionSqlContractTest.java +++ b/iam/src/test/java/com/baiyue/iam/repository/AdminPrototypeMenuPermissionSqlContractTest.java @@ -66,7 +66,9 @@ class AdminPrototypeMenuPermissionSqlContractTest { .contains("客户全局 Finance 权限模板不完整") .contains("客户全局管理员 Finance 模板授权不完整") .satisfies(content -> assertThat(content.indexOf("(5105050,0,'PLATFORM','BUTTON'")) - .isLessThan(content.indexOf("CREATE PROCEDURE assert_finance_permissions()"))); + .isLessThan(content.indexOf("CREATE PROCEDURE assert_finance_permissions()"))) + .satisfies(content -> assertThat(content.indexOf("CALL migrate_wallet_permissions();")) + .isLessThan(content.indexOf("CALL assert_finance_permissions();"))); } @Test