58 lines
3.0 KiB
SQL
58 lines
3.0 KiB
SQL
USE baiyue_firstleg;
|
|||
|
|
|
||
|
|
DROP PROCEDURE IF EXISTS add_simple_customs_column;
|
||
|
|
DELIMITER $$
|
||
|
|
CREATE PROCEDURE add_simple_customs_column(IN p_name VARCHAR(64), IN p_definition TEXT)
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||
|
|
WHERE table_schema = DATABASE() AND table_name = 'fl_container_document'
|
||
|
|
AND column_name = p_name) THEN
|
||
|
|
SET @ddl = CONCAT('ALTER TABLE fl_container_document ADD COLUMN ', p_name, ' ', p_definition);
|
||
|
|
PREPARE statement FROM @ddl; EXECUTE statement; DEALLOCATE PREPARE statement;
|
||
|
|
END IF;
|
||
|
|
END$$
|
||
|
|
DELIMITER ;
|
||
|
|
|
||
|
|
CALL add_simple_customs_column('file_hash', "VARCHAR(64) NULL COMMENT 'File服务SHA-256快照' AFTER file_name");
|
||
|
|
CALL add_simple_customs_column('completed_by', "BIGINT UNSIGNED NULL COMMENT '一键完成操作人ID' AFTER uploaded_by_name");
|
||
|
|
CALL add_simple_customs_column('completed_by_name', "VARCHAR(64) NULL COMMENT '一键完成操作人名称快照' AFTER completed_by");
|
||
|
|
CALL add_simple_customs_column('completed_at', "DATETIME(3) NULL COMMENT '一键完成时间' AFTER completed_by_name");
|
||
|
|
DROP PROCEDURE add_simple_customs_column;
|
||
|
|
|
||
|
|
SET @old_check = (SELECT CONSTRAINT_NAME FROM information_schema.table_constraints
|
||
|
|
WHERE table_schema = DATABASE() AND table_name = 'fl_container_document'
|
||
|
|
AND constraint_type = 'CHECK' AND constraint_name = 'chk_container_document_type');
|
||
|
|
SET @ddl = IF(@old_check IS NULL, 'SELECT 1',
|
||
|
|
'ALTER TABLE fl_container_document DROP CHECK chk_container_document_type');
|
||
|
|
PREPARE statement FROM @ddl; EXECUTE statement; DEALLOCATE PREPARE statement;
|
||
|
|
ALTER TABLE fl_container_document ADD CONSTRAINT chk_container_document_type
|
||
|
|
CHECK (document_type IN ('DESTINATION_CLEARANCE', 'CUSTOMS_DECLARATION', 'DELIVERY_ORDER', 'PICKUP_ORDER'));
|
||
|
|
|
||
|
|
DROP TRIGGER IF EXISTS trg_container_document_before_insert;
|
||
|
|
DELIMITER $$
|
||
|
|
CREATE TRIGGER trg_container_document_before_insert BEFORE INSERT ON fl_container_document FOR EACH ROW
|
||
|
|
BEGIN
|
||
|
|
DECLARE current_plan_status VARCHAR(24);
|
||
|
|
SELECT MAX(plan_status) INTO current_plan_status FROM fl_loading_plan
|
||
|
|
WHERE container_booking_id = NEW.container_booking_id;
|
||
|
|
IF current_plan_status = 'COMPLETED'
|
||
|
|
AND NEW.document_type NOT IN ('DESTINATION_CLEARANCE', 'CUSTOMS_DECLARATION') THEN
|
||
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '装柜完成后货柜物流文件不可新增';
|
||
|
|
END IF;
|
||
|
|
END$$
|
||
|
|
DELIMITER ;
|
||
|
|
|
||
|
|
DROP TRIGGER IF EXISTS trg_container_document_before_update;
|
||
|
|
DELIMITER $$
|
||
|
|
CREATE TRIGGER trg_container_document_before_update BEFORE UPDATE ON fl_container_document FOR EACH ROW
|
||
|
|
BEGIN
|
||
|
|
DECLARE current_plan_status VARCHAR(24);
|
||
|
|
SELECT MAX(plan_status) INTO current_plan_status FROM fl_loading_plan
|
||
|
|
WHERE container_booking_id = OLD.container_booking_id;
|
||
|
|
IF current_plan_status = 'COMPLETED'
|
||
|
|
AND OLD.document_type NOT IN ('DESTINATION_CLEARANCE', 'CUSTOMS_DECLARATION') THEN
|
||
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '装柜完成后货柜物流文件不可修改';
|
||
|
|
END IF;
|
||
|
|
END$$
|
||
|
|
DELIMITER ;
|