SET NAMES utf8mb4; USE baiyue_firstleg; -- 船期计划日历首版基线。与 fl_port_schedule(港务船期观测)分离。 CREATE TABLE fl_sailing_channel ( id BIGINT NOT NULL, channel_code VARCHAR(64) NOT NULL, channel_name VARCHAR(128) NOT NULL, source_type VARCHAR(24) NOT NULL, mapped_channel_code VARCHAR(64) NULL, default_departure_port_code VARCHAR(32) NULL, default_destination_port_code VARCHAR(32) NULL, default_cutoff_days TINYINT NOT NULL DEFAULT 3, status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', remark VARCHAR(1000) NULL, created_by BIGINT NOT NULL, created_by_name VARCHAR(128) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_by BIGINT NOT NULL, updated_by_name VARCHAR(128) NULL, updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), version INT NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uk_fl_sailing_channel_code (channel_code), KEY idx_fl_sailing_channel_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE fl_sailing_template ( id BIGINT NOT NULL, template_no VARCHAR(64) NOT NULL, template_name VARCHAR(128) NOT NULL, channel_id BIGINT NOT NULL, channel_code_snapshot VARCHAR(64) NOT NULL, channel_name_snapshot VARCHAR(128) NOT NULL, warehouse_id BIGINT NOT NULL, warehouse_name_snapshot VARCHAR(128) NULL, departure_port_code VARCHAR(32) NOT NULL, destination_port_code VARCHAR(32) NOT NULL, weekday TINYINT NOT NULL, weekday_mask TINYINT NOT NULL DEFAULT 1, etd_local_time TIME NOT NULL, cutoff_days TINYINT NOT NULL DEFAULT 3, cutoff_local_time TIME NOT NULL DEFAULT '18:00:00', valid_from DATE NOT NULL, valid_to DATE NULL, voyage_rule VARCHAR(64) NULL, vessel_name VARCHAR(128) NULL, status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', remark VARCHAR(1000) NULL, created_by BIGINT NOT NULL, created_by_name VARCHAR(128) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_by BIGINT NOT NULL, updated_by_name VARCHAR(128) NULL, updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), version INT NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uk_fl_sailing_template_no (template_no), KEY idx_fl_sailing_template_filter (warehouse_id,channel_id,status,weekday), CONSTRAINT ck_fl_sailing_template_weekday CHECK (weekday BETWEEN 1 AND 7), CONSTRAINT ck_fl_sailing_template_cutoff_days CHECK (cutoff_days BETWEEN 0 AND 30) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE fl_sailing ( id BIGINT NOT NULL, sailing_no VARCHAR(64) NOT NULL, template_id BIGINT NULL, channel_id BIGINT NOT NULL, channel_code_snapshot VARCHAR(64) NOT NULL, channel_name_snapshot VARCHAR(128) NOT NULL, warehouse_id BIGINT NOT NULL, warehouse_name_snapshot VARCHAR(128) NULL, departure_port_code VARCHAR(32) NOT NULL, destination_port_code VARCHAR(32) NOT NULL, vessel_name VARCHAR(128) NULL, voyage_no VARCHAR(64) NULL, etd_at DATETIME(3) NOT NULL, warehouse_cutoff_at DATETIME(3) NOT NULL, eta_at DATETIME(3) NULL, status VARCHAR(16) NOT NULL DEFAULT 'OPEN', source_type VARCHAR(24) NOT NULL DEFAULT 'MANUAL', generated_key VARCHAR(192) NULL, planned_capacity_cbm DECIMAL(14,3) NULL, remark VARCHAR(1000) NULL, created_by BIGINT NOT NULL, created_by_name VARCHAR(128) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_by BIGINT NOT NULL, updated_by_name VARCHAR(128) NULL, updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), version INT NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uk_fl_sailing_no (sailing_no), UNIQUE KEY uk_fl_sailing_generated_key (generated_key), UNIQUE KEY uk_fl_sailing_business (warehouse_id,channel_code_snapshot,departure_port_code,destination_port_code,etd_at,voyage_no), KEY idx_fl_sailing_calendar (etd_at,warehouse_id,channel_id,status), KEY idx_fl_sailing_route (departure_port_code,destination_port_code), CONSTRAINT ck_fl_sailing_status CHECK (status IN ('DRAFT','OPEN','CLOSED','DEPARTED','CANCELLED','COMPLETED')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE fl_sailing_history ( id BIGINT NOT NULL, sailing_id BIGINT NOT NULL, action VARCHAR(32) NOT NULL, from_status VARCHAR(16) NULL, to_status VARCHAR(16) NULL, reason VARCHAR(1000) NULL, operator_id BIGINT NULL, operator_name VARCHAR(128) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), KEY idx_fl_sailing_history_sailing (sailing_id,created_at,id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; USE baiyue_iam; INSERT INTO iam_permission (id,tenant_id,app_code,permission_type,parent_id,permission_code,permission_name,route_path,http_method,sort_no,status,built_in,deleted) VALUES (5102206,0,'PLATFORM','MENU',5102000,'platform:firstleg:sailing-calendar:list','船期日历','/sailing-calendar','GET',125,'ACTIVE',1,0), (5102207,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-calendar:create','新增船期','/sailing-calendar','POST',10,'ACTIVE',1,0), (5102208,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-calendar:edit','编辑船期','/sailing-calendar','PUT',20,'ACTIVE',1,0), (5102209,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-template:manage','管理渠道与周模板','/sailing-calendar','POST',30,'ACTIVE',1,0), (5102210,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-booking:link','关联订舱','/sailing-calendar','POST',40,'ACTIVE',1,0), (5102211,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-volume:forecast-manage','维护货量预报','/sailing-calendar','POST',50,'ACTIVE',1,0), (5102212,0,'PLATFORM','BUTTON',5102206,'platform:firstleg:sailing-volume:exception-reassign','异常重新安排','/sailing-calendar','POST',60,'ACTIVE',1,0) ON DUPLICATE KEY UPDATE parent_id=VALUES(parent_id), permission_code=VALUES(permission_code), permission_name=VALUES(permission_name), route_path=VALUES(route_path), http_method=VALUES(http_method), sort_no=VALUES(sort_no), status='ACTIVE', built_in=1, deleted=0; INSERT IGNORE INTO iam_role_permission(role_id,permission_id,tenant_id) SELECT r.id,p.id,0 FROM iam_role r JOIN iam_permission p ON p.tenant_id=0 AND p.app_code='PLATFORM' AND p.permission_code IN ( 'platform:firstleg:sailing-calendar:list', 'platform:firstleg:sailing-calendar:create', 'platform:firstleg:sailing-calendar:edit', 'platform:firstleg:sailing-template:manage', 'platform:firstleg:sailing-booking:link', 'platform:firstleg:sailing-volume:forecast-manage', 'platform:firstleg:sailing-volume:exception-reassign' ) WHERE r.tenant_id=0 AND r.role_code IN ('PLATFORM_ADMIN','ORDER_OPERATOR');