78 lines
5.2 KiB
SQL
78 lines
5.2 KiB
SQL
-- 头程履约服务独占数据库。
|
||
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='客户固定四箱规尺寸配置';
|