-- 头程履约服务独占数据库。 CREATE DATABASE IF NOT EXISTS baiyue_firstleg DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE baiyue_firstleg; CREATE TABLE IF NOT EXISTS fl_fulfillment_task ( id BIGINT UNSIGNED NOT NULL COMMENT '履约任务ID(雪花ID)', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键', order_id BIGINT UNSIGNED NOT NULL COMMENT '订单服务中的订单逻辑ID,不建立跨库外键', order_no VARCHAR(32) NOT NULL COMMENT '订单号快照', order_snapshot_json JSON NOT NULL COMMENT '创建履约任务时所需的订单业务快照', status VARCHAR(24) NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '履约状态:PENDING_ASSIGNMENT待指派、ASSIGNED已指派、PROCESSING处理中、COMPLETED已完成、CANCELLED已取消', assignee_id BIGINT UNSIGNED NULL COMMENT '当前负责人ID', assignee_name VARCHAR(64) NULL COMMENT '当前负责人名称快照', assigned_at DATETIME(3) NULL COMMENT '最近指派时间', started_at DATETIME(3) NULL COMMENT '开始履约时间', completed_at DATETIME(3) NULL COMMENT '履约完成时间', created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人或系统主体ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改人ID', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记', version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id), UNIQUE KEY uk_task_tenant_order (tenant_id, order_id), KEY idx_task_tenant_created (tenant_id, created_at), KEY idx_task_assignee_status (tenant_id, assignee_id, status, created_at) ) ENGINE=InnoDB COMMENT='头程履约任务表:接收订单事件后形成独立履约任务,管理指派、执行和完成状态'; CREATE TABLE IF NOT EXISTS fl_assignment_history ( id BIGINT UNSIGNED NOT NULL COMMENT '指派历史ID', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键', task_id BIGINT UNSIGNED NOT NULL COMMENT '所属履约任务ID', previous_assignee_id BIGINT UNSIGNED NULL COMMENT '原负责人ID', assignee_id BIGINT UNSIGNED NOT NULL COMMENT '新负责人ID', assignee_name VARCHAR(64) NOT NULL COMMENT '新负责人名称快照', reason VARCHAR(500) NULL COMMENT '指派或改派原因', operator_id BIGINT UNSIGNED NOT NULL COMMENT '执行指派的操作人ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '指派发生时间', PRIMARY KEY (id), KEY idx_assignment_task_time (tenant_id, task_id, created_at), CONSTRAINT fk_assignment_task FOREIGN KEY (task_id) REFERENCES fl_fulfillment_task (id) ) ENGINE=InnoDB COMMENT='头程任务指派历史表:不可变记录每次负责人变更及原因,用于追踪和审计'; CREATE TABLE IF NOT EXISTS fl_consumed_event ( event_id BIGINT UNSIGNED NOT NULL COMMENT '已消费领域事件ID,与生产端Outbox事件ID一致', event_type VARCHAR(64) NOT NULL COMMENT '已消费事件类型', consumed_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次成功消费时间', PRIMARY KEY (event_id) ) ENGINE=InnoDB COMMENT='头程消息消费幂等表:记录已处理事件并按事件ID去重,防止RocketMQ重复投递造成重复建单;不是消息发布表'; CREATE TABLE IF NOT EXISTS fl_customer_dimension_config ( id BIGINT UNSIGNED NOT NULL COMMENT '配置ID', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键', box_type VARCHAR(24) NOT NULL COMMENT '固定箱规类型:SMALL/MEDIUM/LARGE/EXTRA_LARGE', inner_length_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内长(厘米)', inner_width_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内宽(厘米)', inner_height_cm DECIMAL(9,3) NOT NULL COMMENT '箱规内高(厘米)', edge_addition_cm DECIMAL(6,3) NOT NULL DEFAULT 2.000 COMMENT '每个尺寸方向的单侧加宽厘米数', remark VARCHAR(500) NULL COMMENT '备注', initialization_key VARCHAR(128) NOT NULL COMMENT '创建流程幂等键及补偿归属', created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改人ID', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除', version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id), UNIQUE KEY uk_customer_dimension_config_tenant_box (tenant_id, box_type), KEY idx_customer_dimension_config_initialization (tenant_id, initialization_key), CONSTRAINT chk_customer_dimension_box_type CHECK (box_type IN ('SMALL', 'MEDIUM', 'LARGE', 'EXTRA_LARGE')), CONSTRAINT chk_customer_dimension_inner_size CHECK (inner_length_cm >= 0.001 AND inner_width_cm >= 0.001 AND inner_height_cm >= 0.001), CONSTRAINT chk_customer_dimension_edge_addition CHECK (edge_addition_cm >= 0.001 AND edge_addition_cm <= 100.000) ) ENGINE=InnoDB COMMENT='客户固定四箱规尺寸配置';