-- 头程履约服务独占数据库。 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 '履约任务当前状态', 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_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重复投递造成重复建单;不是消息发布表';