|
|
|
@@ -18431,9 +18431,32 @@ CREATE TABLE IF NOT EXISTS fl_terminal_drayage (
|
|
|
|
|
KEY idx_terminal_drayage_warning(actual_empty_return_at,estimated_empty_return_at),
|
|
|
|
|
CONSTRAINT fk_terminal_drayage_container FOREIGN KEY(container_booking_id) REFERENCES fl_container_booking(id),
|
|
|
|
|
CONSTRAINT chk_terminal_drayage_times CHECK((actual_pickup_at IS NULL OR pickup_appointment_at IS NOT NULL)
|
|
|
|
|
AND (actual_empty_return_at IS NULL OR actual_pickup_at IS NOT NULL)
|
|
|
|
|
AND (actual_empty_return_at IS NULL OR actual_empty_return_at >= actual_pickup_at))
|
|
|
|
|
AND (actual_empty_return_at IS NULL OR actual_pickup_at IS NULL OR actual_empty_return_at >= actual_pickup_at))
|
|
|
|
|
) ENGINE=InnoDB COMMENT='目的港货柜级码头拖车与还空事实';
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_mail (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '邮件任务ID',
|
|
|
|
|
container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '归属物理货柜ID',
|
|
|
|
|
fleet_supplier_id BIGINT UNSIGNED NOT NULL COMMENT '车队供应商ID快照',
|
|
|
|
|
fleet_name VARCHAR(128) NOT NULL COMMENT '车队名称快照',
|
|
|
|
|
recipient VARCHAR(254) NOT NULL COMMENT '收件人邮箱',
|
|
|
|
|
kind VARCHAR(32) NOT NULL COMMENT '邮件类型:REQUEST_PICKUP提柜请求、CANCEL_PICKUP取消提柜',
|
|
|
|
|
subject VARCHAR(255) NOT NULL COMMENT '邮件主题',
|
|
|
|
|
body TEXT NOT NULL COMMENT '邮件正文',
|
|
|
|
|
status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态:PENDING待发送、SENDING发送中、SENT已发送、FAILED失败',
|
|
|
|
|
attempts INT NOT NULL DEFAULT 0 COMMENT '发送尝试次数',
|
|
|
|
|
failure_reason VARCHAR(500) NULL COMMENT '发送失败原因',
|
|
|
|
|
created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID',
|
|
|
|
|
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后更新人ID',
|
|
|
|
|
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 '更新时间',
|
|
|
|
|
sent_at DATETIME(3) NULL COMMENT '发送成功时间',
|
|
|
|
|
PRIMARY KEY(id),
|
|
|
|
|
KEY idx_terminal_mail_dispatch(status,id),
|
|
|
|
|
KEY idx_terminal_mail_container(container_booking_id,id,status),
|
|
|
|
|
CONSTRAINT fk_terminal_mail_container FOREIGN KEY(container_booking_id) REFERENCES fl_container_booking(id),
|
|
|
|
|
CONSTRAINT chk_terminal_mail_kind CHECK(kind IN ('REQUEST_PICKUP','CANCEL_PICKUP')),
|
|
|
|
|
CONSTRAINT chk_terminal_mail_status CHECK(status IN ('PENDING','SENDING','SENT','FAILED'))
|
|
|
|
|
) ENGINE=InnoDB COMMENT='码头车队邮件任务与投递记录';
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_terminal_drayage_history (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL COMMENT '历史ID', drayage_id BIGINT UNSIGNED NOT NULL COMMENT '码头拖车聚合ID',
|
|
|
|
|
container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '货柜ID快照', action VARCHAR(32) NOT NULL COMMENT '业务动作',
|
|
|
|
@@ -18458,6 +18481,10 @@ CREATE TABLE IF NOT EXISTS fl_terminal_drayage_operation (
|
|
|
|
|
|
|
|
|
|
-- MySQL DDL 会隐式提交;如果前次执行在末段校验失败,重跑时需把已创建表的列注释收敛到当前基线。
|
|
|
|
|
ALTER TABLE fl_terminal_drayage
|
|
|
|
|
DROP CHECK chk_terminal_drayage_times,
|
|
|
|
|
ADD CONSTRAINT chk_terminal_drayage_times CHECK(
|
|
|
|
|
(actual_pickup_at IS NULL OR pickup_appointment_at IS NOT NULL) AND
|
|
|
|
|
(actual_empty_return_at IS NULL OR actual_pickup_at IS NULL OR actual_empty_return_at >= actual_pickup_at)),
|
|
|
|
|
MODIFY COLUMN id BIGINT UNSIGNED NOT NULL COMMENT '目的港码头拖车聚合ID',
|
|
|
|
|
MODIFY COLUMN container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '唯一归属物理货柜ID',
|
|
|
|
|
MODIFY COLUMN fleet_supplier_id BIGINT UNSIGNED NULL COMMENT 'Warehouse ACTIVE/TRUCKING供应商ID快照',
|
|
|
|
@@ -18502,6 +18529,9 @@ DROP PROCEDURE IF EXISTS assert_terminal_drayage_schema;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE PROCEDURE assert_terminal_drayage_schema()
|
|
|
|
|
BEGIN
|
|
|
|
|
IF (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='baiyue_firstleg' AND TABLE_NAME='fl_terminal_drayage_mail') <> 1 THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一基线校验失败:码头车队邮件任务表缺失';
|
|
|
|
|
END IF;
|
|
|
|
|
IF (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='baiyue_firstleg'
|
|
|
|
|
AND TABLE_NAME IN ('fl_terminal_drayage','fl_terminal_drayage_history','fl_terminal_drayage_operation')) <> 3 THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='统一迁移失败:目的港码头拖车表不完整';
|
|
|
|
|