This commit is contained in:
2026-08-28 11:28:30 +08:00
parent 1e5ce54858
commit f998bed09c
9 changed files with 140 additions and 31 deletions
@@ -175,3 +175,39 @@ CREATE TABLE IF NOT EXISTS fl_container_transport_history (
UNIQUE KEY uk_container_transport_history_operation (container_booking_id,operator_id,operation_id),
KEY idx_container_transport_history (container_booking_id,created_at,id)
) ENGINE=InnoDB COMMENT='柜次真实运输字段不可变变更审计';
DROP PROCEDURE IF EXISTS ensure_container_transport_history_schema;
DELIMITER $$
CREATE PROCEDURE ensure_container_transport_history_schema()
BEGIN
IF (NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND column_name='operation_id')
OR NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND column_name='request_hash'))
AND EXISTS (SELECT 1 FROM fl_container_transport_history LIMIT 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='运输历史升级失败:旧表已有数据且缺少幂等字段';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND column_name='operation_id') THEN
ALTER TABLE fl_container_transport_history
ADD COLUMN operation_id VARCHAR(64) NOT NULL COMMENT '运输字段操作幂等ID' AFTER after_voyage_no;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND column_name='request_hash') THEN
ALTER TABLE fl_container_transport_history
ADD COLUMN request_hash CHAR(64) NOT NULL COMMENT '运输字段请求哈希' AFTER operation_id;
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND index_name='uk_container_transport_history_operation') THEN
ALTER TABLE fl_container_transport_history
ADD UNIQUE KEY uk_container_transport_history_operation (container_booking_id,operator_id,operation_id);
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_schema=DATABASE()
AND table_name='fl_container_transport_history' AND index_name='idx_container_transport_history') THEN
ALTER TABLE fl_container_transport_history
ADD KEY idx_container_transport_history (container_booking_id,created_at,id);
END IF;
END$$
DELIMITER ;
CALL ensure_container_transport_history_schema();
DROP PROCEDURE ensure_container_transport_history_schema;