This commit is contained in:
2026-08-20 09:43:31 +08:00
parent f25e270f22
commit 7cf4a8d562
25 changed files with 804 additions and 41 deletions
@@ -125,6 +125,32 @@ CREATE TABLE IF NOT EXISTS fl_container_fee_source_snapshot (
KEY idx_container_fee_snapshot_tenant (tenant_id, loading_plan_id)
) ENGINE=InnoDB COMMENT='柜次费用不可变版本快照';
CREATE TABLE IF NOT EXISTS fl_finance_fee_source_command (
id BIGINT UNSIGNED NOT NULL COMMENT 'Finance费用来源命令ID',
customer_id BIGINT UNSIGNED NOT NULL COMMENT '客户隔离键,由Firstleg费用事实再次校验',
operator_id BIGINT UNSIGNED NOT NULL COMMENT 'Finance操作人ID',
operator_name VARCHAR(64) NOT NULL COMMENT 'Finance操作人名称快照',
action VARCHAR(24) NOT NULL COMMENT '命令动作;当前仅VOID',
idempotency_key VARCHAR(128) NOT NULL COMMENT 'Finance透传的幂等键',
request_hash CHAR(64) NOT NULL COMMENT '规范化请求SHA-256',
source_type VARCHAR(24) NOT NULL COMMENT 'INBOUND_FEE或CONTAINER_FEE',
source_fee_id BIGINT UNSIGNED NOT NULL COMMENT '稳定费用来源ID',
source_version INT UNSIGNED NOT NULL COMMENT '精确费用来源版本',
inbound_id BIGINT UNSIGNED NULL COMMENT '入库费用所属入库单ID',
container_id BIGINT UNSIGNED NULL COMMENT '柜次费用所属柜次ID',
reason VARCHAR(500) NOT NULL COMMENT '操作原因',
status VARCHAR(16) NOT NULL COMMENT 'PROCESSING或SUCCEEDED',
result_status VARCHAR(16) NULL COMMENT '成功业务结果;当前为VOIDED',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
completed_at DATETIME(3) NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_finance_fee_command_idem (customer_id, operator_id, action, idempotency_key),
KEY idx_finance_fee_command_source (source_type, source_fee_id, source_version, created_at),
CONSTRAINT chk_finance_fee_command_action CHECK (action IN ('VOID')),
CONSTRAINT chk_finance_fee_command_status CHECK (status IN ('PROCESSING', 'SUCCEEDED')),
CONSTRAINT chk_finance_fee_command_source CHECK (source_type IN ('INBOUND_FEE', 'CONTAINER_FEE'))
) ENGINE=InnoDB COMMENT='Finance发起、Firstleg执行业务费用命令的幂等审计记录';
CALL firstleg_finance_add_column('fl_container_fee_detail', 'supplier_id',
"BIGINT UNSIGNED NULL COMMENT '应付Warehouse供应商ID快照;应收为空' AFTER direction");
CALL firstleg_finance_add_column('fl_container_fee_detail', 'supplier_name',
@@ -153,6 +179,10 @@ BEGIN
WHERE table_schema = DATABASE() AND table_name = 'fl_container_fee_detail') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Firstleg Finance迁移失败:柜次费用表不存在';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'fl_finance_fee_source_command') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Firstleg Finance迁移失败:费用命令幂等审计表不存在';
END IF;
IF (SELECT COUNT(*) FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'fl_container_fee_detail'
AND column_name IN ('supplier_id', 'supplier_name', 'supplier_category')) <> 3 THEN