This commit is contained in:
2026-08-11 09:25:41 +08:00
parent 66b3a0cc9b
commit 540a6f5d88
18 changed files with 757 additions and 90 deletions
+31 -1
View File
@@ -83,7 +83,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),
@@ -95,6 +95,36 @@ CREATE TABLE IF NOT EXISTS ord_order_fulfillment_split (
)
) ENGINE=InnoDB COMMENT='父订单到子订单的装柜数量及柜次关联台账';
DROP TRIGGER IF EXISTS trg_order_fulfillment_split_insert;
DROP TRIGGER IF EXISTS trg_order_fulfillment_split_update;
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 ;
CREATE TABLE IF NOT EXISTS ord_order_party (
id BIGINT UNSIGNED NOT NULL COMMENT '参与方快照ID',
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID',