fix: order wallet database assertions

This commit is contained in:
2026-09-06 12:02:11 +08:00
parent 42ddc19826
commit 1a7d4bb39f
3 changed files with 35 additions and 10 deletions
@@ -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;
@@ -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()"));
}
}
@@ -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