优化
This commit is contained in:
@@ -7282,7 +7282,7 @@ CREATE TABLE IF NOT EXISTS ord_order_fulfillment_split (
|
||||
PRIMARY KEY(id),
|
||||
UNIQUE KEY uk_order_split_operation (tenant_id,operation_id,split_role),
|
||||
UNIQUE KEY uk_order_split_idempotency (tenant_id,parent_order_id,idempotency_key,split_role),
|
||||
UNIQUE KEY uk_order_split_child (tenant_id,child_order_id),
|
||||
UNIQUE KEY uk_order_split_child_role (tenant_id,child_order_id,split_role),
|
||||
KEY idx_order_split_parent (tenant_id,parent_order_id,created_at,id),
|
||||
KEY idx_order_split_source (tenant_id,source_order_id,split_role),
|
||||
KEY idx_order_split_container (tenant_id,container_booking_id,created_at,id),
|
||||
@@ -7294,6 +7294,8 @@ CREATE TABLE IF NOT EXISTS ord_order_fulfillment_split (
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_ord_order_parent_insert;
|
||||
DROP TRIGGER IF EXISTS trg_ord_order_parent_update;
|
||||
DROP TRIGGER IF EXISTS trg_order_fulfillment_split_insert;
|
||||
DROP TRIGGER IF EXISTS trg_order_fulfillment_split_update;
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_ord_order_parent_insert BEFORE INSERT ON ord_order FOR EACH ROW
|
||||
BEGIN
|
||||
@@ -7353,6 +7355,10 @@ BEGIN
|
||||
AND table_name='ord_order_fulfillment_split' AND index_name='uk_order_split_idempotency') THEN
|
||||
ALTER TABLE ord_order_fulfillment_split DROP INDEX uk_order_split_idempotency;
|
||||
END IF;
|
||||
IF EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_schema=DATABASE()
|
||||
AND table_name='ord_order_fulfillment_split' AND index_name='uk_order_split_child') THEN
|
||||
ALTER TABLE ord_order_fulfillment_split DROP INDEX uk_order_split_child;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL phase3_order_drop_split_index();
|
||||
@@ -7361,6 +7367,36 @@ CALL phase3_order_add_index('ord_order_fulfillment_split','uk_order_split_operat
|
||||
'UNIQUE KEY `uk_order_split_operation` (`tenant_id`,`operation_id`,`split_role`)');
|
||||
CALL phase3_order_add_index('ord_order_fulfillment_split','uk_order_split_idempotency',
|
||||
'UNIQUE KEY `uk_order_split_idempotency` (`tenant_id`,`parent_order_id`,`idempotency_key`,`split_role`)');
|
||||
CALL phase3_order_add_index('ord_order_fulfillment_split','uk_order_split_child_role',
|
||||
'UNIQUE KEY `uk_order_split_child_role` (`tenant_id`,`child_order_id`,`split_role`)');
|
||||
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_order_fulfillment_split_insert
|
||||
BEFORE INSERT ON ord_order_fulfillment_split FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.split_role NOT IN ('LOADED','REMAINDER') THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订单履约分片角色非法';
|
||||
END IF;
|
||||
IF NEW.split_role='LOADED' AND NEW.child_order_id<>NEW.source_order_id THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='实装台账必须由来源订单自身承接';
|
||||
END IF;
|
||||
IF NEW.split_role='REMAINDER'
|
||||
AND (NEW.child_order_id=NEW.source_order_id OR NEW.remaining_package_count=0) THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='余量台账必须指向有剩余数量的新子订单';
|
||||
END IF;
|
||||
END$$
|
||||
CREATE TRIGGER trg_order_fulfillment_split_update
|
||||
BEFORE UPDATE ON ord_order_fulfillment_split FOR EACH ROW
|
||||
BEGIN
|
||||
IF NOT (NEW.tenant_id<=>OLD.tenant_id)
|
||||
OR NOT (NEW.parent_order_id<=>OLD.parent_order_id)
|
||||
OR NOT (NEW.source_order_id<=>OLD.source_order_id)
|
||||
OR NOT (NEW.child_order_id<=>OLD.child_order_id)
|
||||
OR NOT (NEW.split_role<=>OLD.split_role) THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订单履约分片来源、子片与角色不可修改';
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
DROP PROCEDURE IF EXISTS phase3_order_add_column;
|
||||
DROP PROCEDURE IF EXISTS phase3_order_add_index;
|
||||
|
||||
@@ -7384,9 +7420,20 @@ BEGIN
|
||||
IF (SELECT COUNT(DISTINCT index_name) FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='ord_order_fulfillment_split'
|
||||
AND index_name IN ('idx_order_split_source','uk_order_split_operation',
|
||||
'uk_order_split_idempotency'))<>3 THEN
|
||||
'uk_order_split_idempotency','uk_order_split_child_role'))<>4 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订单拆分来源或幂等索引未完整创建';
|
||||
END IF;
|
||||
IF EXISTS (SELECT 1 FROM information_schema.statistics
|
||||
WHERE table_schema=DATABASE() AND table_name='ord_order_fulfillment_split'
|
||||
AND index_name='uk_order_split_child') THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='旧订单拆分子单唯一索引仍阻止跨角色分片';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.triggers
|
||||
WHERE trigger_schema=DATABASE()
|
||||
AND trigger_name IN ('trg_order_fulfillment_split_insert',
|
||||
'trg_order_fulfillment_split_update'))<>2 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='订单履约分片写入保护触发器未完整创建';
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL phase3_order_assert();
|
||||
|
||||
Reference in New Issue
Block a user