chore(firstleg): remove legacy inbound evidence schema
This commit is contained in:
+13
-122
@@ -7670,34 +7670,6 @@ CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence (
|
||||
CONSTRAINT chk_cabinet_evidence_status CHECK (status IN ('ACTIVE','VOID'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜次物理装柜证据;task仅记录来源审计';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fl_loading_evidence (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '装柜证据记录ID',
|
||||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
||||
inbound_id BIGINT UNSIGNED NOT NULL COMMENT '关联入库单逻辑ID',
|
||||
evidence_type VARCHAR(32) NOT NULL COMMENT 'PHOTO_STEP_1空仓/PHOTO_STEP_2半仓/PHOTO_STEP_3满仓/PHOTO_STEP_4锁仓/SEAL带锁码照',
|
||||
file_id BIGINT UNSIGNED NOT NULL COMMENT 'File 服务逻辑文件ID',
|
||||
file_name VARCHAR(255) NULL COMMENT '上传时文件名称快照',
|
||||
seal_no VARCHAR(64) NULL COMMENT '锁码文本;带锁码照必填,客户不可见',
|
||||
remark VARCHAR(1000) NULL COMMENT '证据补充说明',
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID已作废;错误照片保留记录不硬删除',
|
||||
void_reason VARCHAR(500) NULL COMMENT '照片作废原因',
|
||||
voided_by BIGINT UNSIGNED NULL COMMENT '执行作废的平台操作人ID',
|
||||
voided_by_name VARCHAR(64) 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(64) NULL COMMENT '上传证据的操作人姓名快照',
|
||||
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改操作人ID',
|
||||
updated_by_name VARCHAR(64) 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),
|
||||
KEY idx_loading_evidence_type (tenant_id, inbound_id, evidence_type, status),
|
||||
KEY idx_loading_evidence_seal (tenant_id, seal_no, status),
|
||||
KEY idx_loading_evidence_time (tenant_id, inbound_id, updated_at),
|
||||
CONSTRAINT fk_loading_evidence_inbound FOREIGN KEY (inbound_id) REFERENCES fl_inbound_order (id)
|
||||
) ENGINE=InnoDB COMMENT='订单装柜空仓/半仓/满仓/锁仓/带锁码照证据';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fl_loading_operation (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '装柜写操作记录ID',
|
||||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
||||
@@ -9838,60 +9810,6 @@ SELECT role.id,permission.id,0 FROM iam_role role JOIN iam_permission permission
|
||||
AND permission.permission_code IN ('platform:firstleg:customs:list','platform:firstleg:customs:manage')
|
||||
WHERE role.tenant_id=0 AND role.role_code IN ('PLATFORM_ADMIN','ORDER_OPERATOR');
|
||||
USE baiyue_firstleg;
|
||||
-- Phase 3 loading evidence hardening for existing databases. Evidence is append-only:
|
||||
-- multiple active/void records of the same type are allowed; voiding is an audit action.
|
||||
USE baiyue_firstleg;
|
||||
DROP PROCEDURE IF EXISTS phase3_loading_evidence_add_column;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE phase3_loading_evidence_add_column(IN p_column VARCHAR(64), IN p_definition VARCHAR(255))
|
||||
BEGIN
|
||||
SET @ddl = IF(
|
||||
EXISTS(SELECT 1 FROM information_schema.tables
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence')
|
||||
AND NOT EXISTS(SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence' AND column_name=p_column),
|
||||
CONCAT('ALTER TABLE fl_loading_evidence ADD COLUMN `', p_column, '` ', p_definition),
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL phase3_loading_evidence_add_column('status', 'VARCHAR(16) NOT NULL DEFAULT ''ACTIVE'' COMMENT ''ACTIVE/VOID''');
|
||||
CALL phase3_loading_evidence_add_column('void_reason', 'VARCHAR(500) NULL');
|
||||
CALL phase3_loading_evidence_add_column('voided_by', 'BIGINT UNSIGNED NULL');
|
||||
CALL phase3_loading_evidence_add_column('voided_by_name', 'VARCHAR(64) NULL');
|
||||
CALL phase3_loading_evidence_add_column('voided_at', 'DATETIME(3) NULL');
|
||||
DROP PROCEDURE IF EXISTS phase3_loading_evidence_add_column;
|
||||
|
||||
UPDATE fl_loading_evidence SET status='ACTIVE' WHERE status IS NULL OR status='';
|
||||
UPDATE fl_loading_evidence SET seal_no=NULL WHERE evidence_type<>'SEAL' AND seal_no IS NOT NULL;
|
||||
|
||||
SET @ddl = IF(
|
||||
EXISTS(SELECT 1 FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence'
|
||||
AND index_name='uk_loading_evidence_type'),
|
||||
'ALTER TABLE fl_loading_evidence DROP INDEX uk_loading_evidence_type', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(
|
||||
EXISTS(SELECT 1 FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence'
|
||||
AND index_name='uk_loading_evidence_seal'),
|
||||
'ALTER TABLE fl_loading_evidence DROP INDEX uk_loading_evidence_seal', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(
|
||||
NOT EXISTS(SELECT 1 FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence'
|
||||
AND index_name='idx_loading_evidence_type'),
|
||||
'ALTER TABLE fl_loading_evidence ADD KEY idx_loading_evidence_type (tenant_id,inbound_id,evidence_type,status)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(
|
||||
NOT EXISTS(SELECT 1 FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='fl_loading_evidence'
|
||||
AND index_name='idx_loading_evidence_seal'),
|
||||
'ALTER TABLE fl_loading_evidence ADD KEY idx_loading_evidence_seal (tenant_id,seal_no,status)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
/* Phase 3: link inbound preload plans to one or more container loading plans. */
|
||||
CREATE TABLE IF NOT EXISTS fl_preload_loading_plan_link (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '关联ID',
|
||||
@@ -10043,27 +9961,14 @@ BEGIN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:三期出仓、报关或船期表未完整创建';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_evidence'
|
||||
AND column_name IN ('status','void_reason','voided_by','voided_by_name','voided_at')) <> 5
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_cabinet_evidence'
|
||||
AND column_name IN ('container_booking_id','source_task_id','active_flag','operation_key','request_hash')) <> 5
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_evidence'
|
||||
AND index_name='uk_loading_evidence_type') <> 0
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_cabinet_evidence'
|
||||
AND index_name='uk_cabinet_evidence_active' AND non_unique=0) <> 3
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_evidence'
|
||||
AND index_name='uk_loading_evidence_seal') <> 0
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_evidence'
|
||||
AND index_name='idx_loading_evidence_type' AND non_unique=1
|
||||
AND ((seq_in_index=1 AND column_name='tenant_id')
|
||||
OR (seq_in_index=2 AND column_name='inbound_id')
|
||||
OR (seq_in_index=3 AND column_name='evidence_type')
|
||||
OR (seq_in_index=4 AND column_name='status'))) <> 4
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_evidence'
|
||||
AND index_name='idx_loading_evidence_seal' AND non_unique=1
|
||||
AND ((seq_in_index=1 AND column_name='tenant_id')
|
||||
OR (seq_in_index=2 AND column_name='seal_no')
|
||||
OR (seq_in_index=3 AND column_name='status'))) <> 3
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_cabinet_evidence'
|
||||
AND index_name='uk_cabinet_evidence_operation' AND non_unique=0) <> 2
|
||||
OR (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema='baiyue_firstleg' AND table_name='fl_outbound_dispatch'
|
||||
AND index_name='uk_outbound_dispatch_owner' AND non_unique=0) <> 3
|
||||
@@ -12150,7 +12055,7 @@ CALL queue_table_comment('baiyue_firstleg', 'fl_inbound_status_history', '入库
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_inbound_transport_snapshot', '入库单关联运输信息只读快照');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_inbound_weight_result', '称重图片、托盘皮重快照、OCR毛重和确认净重');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_inbound_weight_revision', 'OCR重量人工修正和确认的不可变版本历史');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_loading_evidence', '订单装柜空仓/半仓/满仓/锁仓/带锁码照证据');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', '柜次物理装柜证据;任务仅记录来源审计');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_loading_operation', '装柜与派送写操作幂等记录');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_loading_pick_assignment', '柜次PDA任务领取与作业员分配');
|
||||
CALL queue_table_comment('baiyue_firstleg', 'fl_loading_pick_history', 'PDA拣货幂等和操作审计历史');
|
||||
@@ -13461,26 +13366,12 @@ CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_weight_revision', 'reas
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_weight_revision', 'revision_no', '结果版本号,与乐观锁版本一致');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_weight_revision', 'tenant_id', '客户ID和数据隔离键');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_weight_revision', 'weight_result_id', 'OCR重量结果ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'created_at', '证据记录创建时间');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'created_by', '上传证据的操作人ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'created_by_name', '上传证据的操作人姓名快照');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'evidence_type', 'PHOTO_STEP_1空仓/PHOTO_STEP_2半仓/PHOTO_STEP_3满仓/PHOTO_STEP_4锁仓/SEAL带锁码照');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'file_id', 'File 服务逻辑文件ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'file_name', '上传时文件名称快照');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'id', '装柜证据记录ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'inbound_id', '关联入库单逻辑ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'remark', '证据补充说明');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'seal_no', '锁码文本;带锁码照必填,客户不可见');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'status', '证据状态:ACTIVE有效、VOID已作废;错误照片保留记录不硬删除');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'tenant_id', '客户ID和数据隔离键');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'updated_at', '证据记录最后更新时间');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'updated_by', '最后修改操作人ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'updated_by_name', '最后修改操作人姓名快照');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'version', '乐观锁版本号,每次更新递增');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'void_reason', '照片作废原因');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'voided_at', '照片作废时间');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'voided_by', '执行作废的平台操作人ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_evidence', 'voided_by_name', '执行作废的平台操作人姓名快照');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'container_booking_id', '证据唯一归属柜次ID');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'source_task_id', '上传来源PDA任务ID,仅用于审计');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'evidence_type', 'PHOTO_STEP_1至PHOTO_STEP_4或SEAL');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'active_flag', '有效记录为1,作废记录为NULL,保证每柜每类型仅一条有效事实');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'operation_key', '任务范围内幂等操作键');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_cabinet_evidence', 'request_hash', '规范化请求SHA-256摘要');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_operation', 'completed_at', '操作完成时间');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_operation', 'created_at', '操作声明创建时间');
|
||||
CALL queue_column_comment('baiyue_firstleg', 'fl_loading_operation', 'id', '装柜写操作记录ID');
|
||||
|
||||
+3
-1
@@ -31,6 +31,8 @@ class LoadingEvidenceSqlContractTest {
|
||||
String sql = Files.readString(unified, StandardCharsets.UTF_8);
|
||||
assertThat(sql).contains("CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence")
|
||||
.contains("uk_cabinet_evidence_active")
|
||||
.contains("uk_cabinet_evidence_operation");
|
||||
.contains("uk_cabinet_evidence_operation")
|
||||
.doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_evidence")
|
||||
.doesNotContain("phase3_loading_evidence_add_column");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user