test(firstleg): align cabinet evidence SQL contracts

This commit is contained in:
2026-08-31 18:31:39 +08:00
parent 60d45613c7
commit 838bd93bc4
4 changed files with 54 additions and 56 deletions
@@ -7636,29 +7636,29 @@ END$$
DELIMITER ;
CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence (
id BIGINT UNSIGNED NOT NULL,
container_booking_id BIGINT UNSIGNED NOT NULL,
source_task_id BIGINT UNSIGNED NOT NULL,
evidence_type VARCHAR(32) NOT NULL,
file_id BIGINT UNSIGNED NOT NULL,
file_name VARCHAR(255) NOT NULL,
seal_no VARCHAR(64) NULL,
remark VARCHAR(1000) NULL,
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE',
active_flag TINYINT UNSIGNED NULL DEFAULT 1,
operation_key VARCHAR(128) NOT NULL,
request_hash CHAR(64) NOT NULL,
void_reason VARCHAR(500) NULL,
voided_by BIGINT UNSIGNED NULL,
voided_by_name VARCHAR(128) NULL,
voided_at DATETIME(3) NULL,
version INT NOT NULL DEFAULT 0,
created_by BIGINT UNSIGNED NOT NULL,
created_by_name VARCHAR(128) NULL,
updated_by BIGINT UNSIGNED NOT NULL,
updated_by_name VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
id BIGINT UNSIGNED NOT NULL COMMENT '柜次证据记录ID',
container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '证据唯一归属柜次ID',
source_task_id BIGINT UNSIGNED NOT NULL COMMENT '上传来源PDA任务ID,仅用于审计',
evidence_type VARCHAR(32) NOT NULL COMMENT '四步照片或带锁码照类型',
file_id BIGINT UNSIGNED NOT NULL COMMENT 'File服务文件ID',
file_name VARCHAR(255) NOT NULL COMMENT '文件名称快照',
seal_no VARCHAR(64) NULL COMMENT '带锁码照对应锁码',
remark VARCHAR(1000) NULL COMMENT '证据备注',
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID作废',
active_flag TINYINT UNSIGNED NULL DEFAULT 1 COMMENT '有效唯一标识;作废后置NULL',
operation_key VARCHAR(128) NOT NULL COMMENT '任务范围内幂等操作键',
request_hash CHAR(64) NOT NULL COMMENT '规范化请求SHA-256摘要',
void_reason VARCHAR(500) NULL COMMENT '作废原因',
voided_by BIGINT UNSIGNED NULL COMMENT '作废操作人ID',
voided_by_name VARCHAR(128) NULL COMMENT '作废操作人名称快照',
voided_at DATETIME(3) NULL COMMENT '作废时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
created_by_name VARCHAR(128) NULL COMMENT '创建操作人名称快照',
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
updated_by_name VARCHAR(128) NULL COMMENT '最后修改操作人名称快照',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_cabinet_evidence_active (container_booking_id,evidence_type,active_flag),
UNIQUE KEY uk_cabinet_evidence_operation (source_task_id,operation_key),
@@ -2,29 +2,29 @@ SET NAMES utf8mb4;
USE baiyue_firstleg;
CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence (
id BIGINT UNSIGNED NOT NULL,
container_booking_id BIGINT UNSIGNED NOT NULL,
source_task_id BIGINT UNSIGNED NOT NULL,
evidence_type VARCHAR(32) NOT NULL,
file_id BIGINT UNSIGNED NOT NULL,
file_name VARCHAR(255) NOT NULL,
seal_no VARCHAR(64) NULL,
remark VARCHAR(1000) NULL,
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE',
active_flag TINYINT UNSIGNED NULL DEFAULT 1,
operation_key VARCHAR(128) NOT NULL,
request_hash CHAR(64) NOT NULL,
void_reason VARCHAR(500) NULL,
voided_by BIGINT UNSIGNED NULL,
voided_by_name VARCHAR(128) NULL,
voided_at DATETIME(3) NULL,
version INT NOT NULL DEFAULT 0,
created_by BIGINT UNSIGNED NOT NULL,
created_by_name VARCHAR(128) NULL,
updated_by BIGINT UNSIGNED NOT NULL,
updated_by_name VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
id BIGINT UNSIGNED NOT NULL COMMENT '柜次证据记录ID',
container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '证据唯一归属柜次ID',
source_task_id BIGINT UNSIGNED NOT NULL COMMENT '上传来源PDA任务ID,仅用于审计',
evidence_type VARCHAR(32) NOT NULL COMMENT '四步照片或带锁码照类型',
file_id BIGINT UNSIGNED NOT NULL COMMENT 'File服务文件ID',
file_name VARCHAR(255) NOT NULL COMMENT '文件名称快照',
seal_no VARCHAR(64) NULL COMMENT '带锁码照对应锁码',
remark VARCHAR(1000) NULL COMMENT '证据备注',
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID作废',
active_flag TINYINT UNSIGNED NULL DEFAULT 1 COMMENT '有效唯一标识;作废后置NULL',
operation_key VARCHAR(128) NOT NULL COMMENT '任务范围内幂等操作键',
request_hash CHAR(64) NOT NULL COMMENT '规范化请求SHA-256摘要',
void_reason VARCHAR(500) NULL COMMENT '作废原因',
voided_by BIGINT UNSIGNED NULL COMMENT '作废操作人ID',
voided_by_name VARCHAR(128) NULL COMMENT '作废操作人名称快照',
voided_at DATETIME(3) NULL COMMENT '作废时间',
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建操作人ID',
created_by_name VARCHAR(128) NULL COMMENT '创建操作人名称快照',
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
updated_by_name VARCHAR(128) NULL COMMENT '最后修改操作人名称快照',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_cabinet_evidence_active (container_booking_id,evidence_type,active_flag),
UNIQUE KEY uk_cabinet_evidence_operation (source_task_id,operation_key),
@@ -58,10 +58,9 @@ class OutboundDispatchReadMapperContractTest {
assertThat(sql)
.contains("plan.id=#{loadingPlanId}", "plan.container_booking_id=#{containerBookingId}")
.contains("item.loading_plan_id=plan.id", "item.deleted=0")
.contains("evidence.inbound_id=item.inbound_id", "evidence.tenant_id=item.account_id")
.contains("evidence.container_booking_id=plan.container_booking_id")
.contains("COUNT(DISTINCT CASE", "evidence.evidence_type")
.doesNotContain("WHERE tenant_id=#{tenantId}", "inbound_id=#{inboundId}");
.doesNotContain("item.loading_plan_id=plan.id", "evidence.inbound_id", "evidence.tenant_id");
}
@Test
@@ -45,12 +45,11 @@ class Phase3FinalUnifiedSqlContractTest {
.contains("trg_inbound_split_detail_before_update")
.contains("trg_inbound_split_detail_before_delete")
.contains("CHECK (action_type IN ('CLAIM', 'ASSIGN', 'ITEM_CLAIM', 'ITEM_ASSIGN', 'REVIEW', 'BATCH', 'COMPLETE_LOADING'))")
.contains("phase3_loading_evidence_add_column")
.contains("DROP INDEX uk_loading_evidence_type")
.contains("DROP INDEX uk_loading_evidence_seal")
.contains("ADD KEY idx_loading_evidence_type (tenant_id,inbound_id,evidence_type,status)")
.contains("ADD KEY idx_loading_evidence_seal (tenant_id,seal_no,status)")
.contains("column_name IN ('status','void_reason','voided_by','voided_by_name','voided_at')")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence")
.contains("UNIQUE KEY uk_cabinet_evidence_active (container_booking_id,evidence_type,active_flag)")
.contains("UNIQUE KEY uk_cabinet_evidence_operation (source_task_id,operation_key)")
.contains("column_name IN ('container_booking_id','source_task_id','active_flag','operation_key','request_hash')")
.doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_evidence", "phase3_loading_evidence_add_column")
.contains("CALL assert_phase3_final_schema()")
.contains("trg_port_schedule_history_before_update")
.contains("trg_port_schedule_history_before_delete")
@@ -154,7 +153,7 @@ class Phase3FinalUnifiedSqlContractTest {
.contains("存在缺失中文注释的业务字段")
.doesNotContain("CREATE PROCEDURE upgrade_column_comment");
assertThat(count(sql, "CALL queue_table_comment(")).isEqualTo(144);
assertThat(count(sql, "CALL queue_column_comment(")).isGreaterThanOrEqualTo(2394);
assertThat(count(sql, "CALL queue_column_comment(")).isGreaterThanOrEqualTo(2380);
assertThat(sql)
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_id'")
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_name'")