2026-08-08 13:32:20 +08:00
|
|
|
SET NAMES utf8mb4;
|
|
|
|
|
USE baiyue_firstleg;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
booking_no VARCHAR(40) NOT NULL,
|
|
|
|
|
status VARCHAR(24) NOT NULL DEFAULT 'DRAFT',
|
|
|
|
|
customer_id BIGINT UNSIGNED NOT NULL COMMENT '当前产品客户ID',
|
|
|
|
|
customer_name VARCHAR(128) NOT NULL,
|
|
|
|
|
bill_of_lading_no VARCHAR(128) NULL,
|
|
|
|
|
shipping_company_id BIGINT UNSIGNED NULL,
|
|
|
|
|
shipping_company_name VARCHAR(128) NULL,
|
|
|
|
|
booking_agent_id BIGINT UNSIGNED NULL,
|
|
|
|
|
booking_agent_name VARCHAR(128) NULL,
|
|
|
|
|
vessel_name VARCHAR(128) NULL,
|
|
|
|
|
voyage_no VARCHAR(64) NULL,
|
|
|
|
|
departure_port_code VARCHAR(32) NULL,
|
|
|
|
|
departure_port_name VARCHAR(128) NULL,
|
|
|
|
|
destination_port_code VARCHAR(32) NULL,
|
|
|
|
|
destination_port_name VARCHAR(128) NULL,
|
|
|
|
|
place_of_delivery VARCHAR(128) NULL,
|
|
|
|
|
service_term VARCHAR(32) NULL,
|
|
|
|
|
freight_term VARCHAR(32) NULL,
|
|
|
|
|
estimated_sailing_at DATETIME(3) NULL,
|
|
|
|
|
estimated_arrival_at DATETIME(3) NULL,
|
|
|
|
|
pending_vessel_name VARCHAR(128) NULL,
|
|
|
|
|
pending_voyage_no VARCHAR(64) NULL,
|
|
|
|
|
pending_estimated_sailing_at DATETIME(3) NULL,
|
|
|
|
|
pending_estimated_arrival_at DATETIME(3) NULL,
|
|
|
|
|
change_reason VARCHAR(1000) NULL,
|
|
|
|
|
failure_reason VARCHAR(1000) NULL,
|
|
|
|
|
cancellation_reason VARCHAR(1000) NULL,
|
|
|
|
|
remark VARCHAR(1000) NULL,
|
|
|
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
created_by_name VARCHAR(64) NULL,
|
|
|
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
|
updated_by BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
updated_by_name VARCHAR(64) NULL,
|
|
|
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
|
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
UNIQUE KEY uk_ocean_booking_no (booking_no),
|
|
|
|
|
KEY idx_ocean_booking_customer (customer_id,status,updated_at,id),
|
|
|
|
|
KEY idx_ocean_booking_voyage (vessel_name,voyage_no,updated_at),
|
|
|
|
|
CONSTRAINT chk_ocean_booking_customer CHECK (customer_id > 0),
|
|
|
|
|
CONSTRAINT chk_ocean_booking_status CHECK (status IN
|
|
|
|
|
('DRAFT','SUBMITTED','CONFIRMED','RELEASED','FAILED','CHANGE_PENDING','CANCELLED')),
|
|
|
|
|
CONSTRAINT chk_ocean_booking_schedule CHECK
|
|
|
|
|
(estimated_sailing_at IS NULL OR estimated_arrival_at IS NULL OR estimated_arrival_at >= estimated_sailing_at),
|
|
|
|
|
CONSTRAINT chk_ocean_booking_pending_schedule CHECK
|
|
|
|
|
(pending_estimated_sailing_at IS NULL OR pending_estimated_arrival_at IS NULL
|
|
|
|
|
OR pending_estimated_arrival_at >= pending_estimated_sailing_at)
|
|
|
|
|
) ENGINE=InnoDB COMMENT='独立海运订舱聚合;柜次仍由fl_container_booking承载';
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking_party (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
ocean_booking_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
party_type VARCHAR(24) NOT NULL COMMENT 'SHIPPER/CONSIGNEE/NOTIFY_PARTY',
|
|
|
|
|
party_name VARCHAR(255) NOT NULL,
|
|
|
|
|
address VARCHAR(1000) NULL,
|
|
|
|
|
contact_name VARCHAR(128) NULL,
|
|
|
|
|
contact_phone VARCHAR(64) NULL,
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
UNIQUE KEY uk_ocean_booking_party (ocean_booking_id,party_type),
|
|
|
|
|
CONSTRAINT fk_ocean_booking_party FOREIGN KEY (ocean_booking_id) REFERENCES fl_ocean_booking(id),
|
|
|
|
|
CONSTRAINT chk_ocean_booking_party_type CHECK (party_type IN ('SHIPPER','CONSIGNEE','NOTIFY_PARTY'))
|
|
|
|
|
) ENGINE=InnoDB COMMENT='订舱提单关系方快照';
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking_container_requirement (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
ocean_booking_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
container_type VARCHAR(32) NOT NULL,
|
|
|
|
|
container_kind VARCHAR(32) NOT NULL,
|
|
|
|
|
quantity INT UNSIGNED NOT NULL,
|
|
|
|
|
sort_no INT UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
KEY idx_ocean_requirement_booking (ocean_booking_id,sort_no,id),
|
|
|
|
|
CONSTRAINT fk_ocean_requirement_booking FOREIGN KEY (ocean_booking_id) REFERENCES fl_ocean_booking(id),
|
|
|
|
|
CONSTRAINT chk_ocean_requirement_quantity CHECK (quantity > 0)
|
|
|
|
|
) ENGINE=InnoDB COMMENT='订舱箱型箱种及数量需求';
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking_container_allocation (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
ocean_booking_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
requirement_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
container_booking_id BIGINT UNSIGNED NOT NULL COMMENT '明确引用现有柜次ID',
|
|
|
|
|
allocated_by BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
allocated_by_name VARCHAR(64) NULL,
|
|
|
|
|
allocated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
UNIQUE KEY uk_ocean_allocation_container (container_booking_id),
|
|
|
|
|
KEY idx_ocean_allocation_booking (ocean_booking_id,requirement_id,allocated_at),
|
|
|
|
|
CONSTRAINT fk_ocean_allocation_booking FOREIGN KEY (ocean_booking_id) REFERENCES fl_ocean_booking(id),
|
|
|
|
|
CONSTRAINT fk_ocean_allocation_requirement FOREIGN KEY (requirement_id)
|
|
|
|
|
REFERENCES fl_ocean_booking_container_requirement(id),
|
|
|
|
|
CONSTRAINT fk_ocean_allocation_container FOREIGN KEY (container_booking_id) REFERENCES fl_container_booking(id)
|
|
|
|
|
) ENGINE=InnoDB COMMENT='订舱需求与现有柜次的唯一分配关系';
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking_status_history (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
ocean_booking_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
from_status VARCHAR(24) NULL,
|
|
|
|
|
to_status VARCHAR(24) NOT NULL,
|
|
|
|
|
action VARCHAR(40) NOT NULL,
|
|
|
|
|
reason VARCHAR(1000) NULL,
|
|
|
|
|
before_snapshot JSON NULL,
|
|
|
|
|
after_snapshot JSON NOT NULL,
|
|
|
|
|
operator_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
operator_name VARCHAR(64) NULL,
|
|
|
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
KEY idx_ocean_history_booking (ocean_booking_id,created_at,id),
|
|
|
|
|
CONSTRAINT fk_ocean_history_booking FOREIGN KEY (ocean_booking_id) REFERENCES fl_ocean_booking(id)
|
|
|
|
|
) ENGINE=InnoDB COMMENT='海运订舱不可变状态历史';
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_ocean_booking_operation (
|
|
|
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
ocean_booking_id BIGINT UNSIGNED NULL COMMENT '创建请求完成前允许为空',
|
|
|
|
|
operator_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
|
operation VARCHAR(40) NOT NULL,
|
|
|
|
|
idempotency_key VARCHAR(128) NOT NULL,
|
|
|
|
|
request_hash CHAR(64) NOT NULL,
|
|
|
|
|
status VARCHAR(16) NOT NULL DEFAULT 'PROCESSING',
|
|
|
|
|
result_json JSON NULL,
|
|
|
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
|
completed_at DATETIME(3) NULL,
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
UNIQUE KEY uk_ocean_operation (operator_id,operation,idempotency_key),
|
|
|
|
|
KEY idx_ocean_operation_booking (ocean_booking_id,created_at),
|
|
|
|
|
CONSTRAINT fk_ocean_operation_booking FOREIGN KEY (ocean_booking_id) REFERENCES fl_ocean_booking(id),
|
|
|
|
|
CONSTRAINT chk_ocean_operation_status CHECK (status IN ('PROCESSING','SUCCESS'))
|
|
|
|
|
) ENGINE=InnoDB COMMENT='海运订舱写操作幂等与请求哈希';
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_booking_before_update;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE TRIGGER trg_ocean_booking_before_update BEFORE UPDATE ON fl_ocean_booking FOR EACH ROW
|
|
|
|
|
BEGIN
|
|
|
|
|
IF OLD.status IN ('RELEASED','CANCELLED') THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='已放舱或已取消订舱不可修改';
|
|
|
|
|
END IF;
|
|
|
|
|
IF OLD.status <> NEW.status AND NOT (
|
|
|
|
|
(OLD.status='DRAFT' AND NEW.status IN ('SUBMITTED','CANCELLED'))
|
|
|
|
|
OR (OLD.status='SUBMITTED' AND NEW.status IN ('CONFIRMED','FAILED','CANCELLED'))
|
|
|
|
|
OR (OLD.status='CONFIRMED' AND NEW.status IN ('RELEASED','CHANGE_PENDING','CANCELLED'))
|
|
|
|
|
OR (OLD.status='CHANGE_PENDING' AND NEW.status IN ('CONFIRMED','FAILED','CANCELLED'))
|
|
|
|
|
OR (OLD.status='FAILED' AND NEW.status='CANCELLED')) THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='海运订舱状态迁移非法';
|
|
|
|
|
END IF;
|
|
|
|
|
END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_party_before_insert;
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_party_before_update;
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_party_before_delete;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE TRIGGER trg_ocean_party_before_insert BEFORE INSERT ON fl_ocean_booking_party FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=NEW.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护订舱方'; END IF; END$$
|
|
|
|
|
CREATE TRIGGER trg_ocean_party_before_update BEFORE UPDATE ON fl_ocean_booking_party FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=OLD.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护订舱方'; END IF; END$$
|
|
|
|
|
CREATE TRIGGER trg_ocean_party_before_delete BEFORE DELETE ON fl_ocean_booking_party FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=OLD.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护订舱方'; END IF; END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_requirement_before_insert;
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_requirement_before_update;
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_requirement_before_delete;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE TRIGGER trg_ocean_requirement_before_insert BEFORE INSERT ON fl_ocean_booking_container_requirement FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=NEW.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护箱型需求'; END IF; END$$
|
|
|
|
|
CREATE TRIGGER trg_ocean_requirement_before_update BEFORE UPDATE ON fl_ocean_booking_container_requirement FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=OLD.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护箱型需求'; END IF; END$$
|
|
|
|
|
CREATE TRIGGER trg_ocean_requirement_before_delete BEFORE DELETE ON fl_ocean_booking_container_requirement FOR EACH ROW
|
|
|
|
|
BEGIN IF (SELECT status FROM fl_ocean_booking WHERE id=OLD.ocean_booking_id) <> 'DRAFT' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='仅草稿可维护箱型需求'; END IF; END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_allocation_before_insert;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE TRIGGER trg_ocean_allocation_before_insert BEFORE INSERT ON fl_ocean_booking_container_allocation FOR EACH ROW
|
|
|
|
|
BEGIN
|
|
|
|
|
IF (SELECT ocean_booking_id FROM fl_ocean_booking_container_requirement WHERE id=NEW.requirement_id) <> NEW.ocean_booking_id THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='箱型需求不属于当前订舱';
|
|
|
|
|
END IF;
|
|
|
|
|
IF (SELECT status FROM fl_ocean_booking WHERE id=NEW.ocean_booking_id) NOT IN
|
|
|
|
|
('SUBMITTED','CONFIRMED','CHANGE_PENDING') THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='当前订舱状态不可分配柜次';
|
|
|
|
|
END IF;
|
|
|
|
|
END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_history_before_update;
|
|
|
|
|
DROP TRIGGER IF EXISTS trg_ocean_history_before_delete;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE TRIGGER trg_ocean_history_before_update BEFORE UPDATE ON fl_ocean_booking_status_history FOR EACH ROW
|
|
|
|
|
BEGIN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订舱状态历史不可修改'; END$$
|
|
|
|
|
CREATE TRIGGER trg_ocean_history_before_delete BEFORE DELETE ON fl_ocean_booking_status_history FOR EACH ROW
|
|
|
|
|
BEGIN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订舱状态历史不可删除'; END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
|
|
|
|
USE baiyue_iam;
|
2026-08-08 14:19:45 +08:00
|
|
|
DROP PROCEDURE IF EXISTS assert_ocean_booking_permission_ids_available;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE PROCEDURE assert_ocean_booking_permission_ids_available()
|
|
|
|
|
BEGIN
|
|
|
|
|
IF EXISTS (
|
|
|
|
|
SELECT 1 FROM iam_permission
|
|
|
|
|
WHERE (id BETWEEN 5102140 AND 5102149
|
|
|
|
|
AND permission_code <> CASE id
|
|
|
|
|
WHEN 5102140 THEN 'platform:firstleg:ocean-booking:list'
|
|
|
|
|
WHEN 5102141 THEN 'platform:firstleg:ocean-booking:view'
|
|
|
|
|
WHEN 5102142 THEN 'platform:firstleg:ocean-booking:create'
|
|
|
|
|
WHEN 5102143 THEN 'platform:firstleg:ocean-booking:edit'
|
|
|
|
|
WHEN 5102144 THEN 'platform:firstleg:ocean-booking:submit'
|
|
|
|
|
WHEN 5102145 THEN 'platform:firstleg:ocean-booking:confirm'
|
|
|
|
|
WHEN 5102146 THEN 'platform:firstleg:ocean-booking:release'
|
|
|
|
|
WHEN 5102147 THEN 'platform:firstleg:ocean-booking:cancel'
|
|
|
|
|
WHEN 5102148 THEN 'platform:firstleg:ocean-booking:change'
|
|
|
|
|
WHEN 5102149 THEN 'platform:firstleg:ocean-booking:allocate'
|
|
|
|
|
END)
|
|
|
|
|
OR (permission_code LIKE 'platform:firstleg:ocean-booking:%'
|
|
|
|
|
AND (tenant_id <> 0 OR app_code <> 'PLATFORM' OR id NOT BETWEEN 5102140 AND 5102149))
|
|
|
|
|
) THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000'
|
|
|
|
|
SET MESSAGE_TEXT = '三期订舱权限迁移失败:5102140-5102149 ID 或权限码被其他语义占用';
|
|
|
|
|
END IF;
|
|
|
|
|
END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
CALL assert_ocean_booking_permission_ids_available();
|
|
|
|
|
DROP PROCEDURE IF EXISTS assert_ocean_booking_permission_ids_available;
|
|
|
|
|
|
2026-08-08 13:32:20 +08:00
|
|
|
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
|
|
|
|
|
(5102140,0,'PLATFORM','MENU',5102000,'platform:firstleg:ocean-booking:list','订舱管理','/first-leg/ocean-bookings','GET',80,'ACTIVE',1,0),
|
|
|
|
|
(5102141,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:view','查看订舱',NULL,'GET',10,'ACTIVE',1,0),
|
|
|
|
|
(5102142,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:create','创建订舱',NULL,'POST',20,'ACTIVE',1,0),
|
|
|
|
|
(5102143,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:edit','编辑订舱',NULL,'PUT',30,'ACTIVE',1,0),
|
|
|
|
|
(5102144,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:submit','提交订舱',NULL,'POST',40,'ACTIVE',1,0),
|
|
|
|
|
(5102145,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:confirm','确认订舱',NULL,'POST',50,'ACTIVE',1,0),
|
|
|
|
|
(5102146,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:release','确认放舱',NULL,'POST',60,'ACTIVE',1,0),
|
|
|
|
|
(5102147,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:cancel','取消订舱',NULL,'POST',70,'ACTIVE',1,0),
|
|
|
|
|
(5102148,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:change','变更船期',NULL,'POST',80,'ACTIVE',1,0),
|
|
|
|
|
(5102149,0,'PLATFORM','BUTTON',5102140,'platform:firstleg:ocean-booking:allocate','分配柜次',NULL,'POST',90,'ACTIVE',1,0)
|
2026-08-08 14:19:45 +08:00
|
|
|
ON DUPLICATE KEY UPDATE tenant_id=0,app_code='PLATFORM',permission_type=VALUES(permission_type),
|
|
|
|
|
permission_code=VALUES(permission_code),permission_name=VALUES(permission_name),parent_id=VALUES(parent_id),
|
2026-08-08 13:32:20 +08:00
|
|
|
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 role.id,permission.id,0 FROM iam_role role JOIN iam_permission permission
|
|
|
|
|
ON permission.tenant_id=0 AND permission.permission_code LIKE 'platform:firstleg:ocean-booking:%'
|
|
|
|
|
WHERE role.tenant_id=0 AND role.role_code IN ('PLATFORM_ADMIN','ORDER_OPERATOR');
|
|
|
|
|
|
|
|
|
|
USE baiyue_firstleg;
|