实现M002 V4持久化基线

This commit is contained in:
andy
2026-07-19 00:12:40 +07:00
parent 3d9055dd6b
commit e6fbd7a111
29 changed files with 1563 additions and 33 deletions

View File

@@ -0,0 +1,83 @@
CREATE TABLE workflow_reservation_v4_order_task (
id BIGINT NOT NULL COMMENT 'V4 订单任务 ID',
hotel_id VARCHAR(64) NOT NULL COMMENT '酒店 ID',
source_message_id BIGINT NOT NULL COMMENT 'SourceMessage Inbox 内部 ID',
ai_batch_id BIGINT NOT NULL COMMENT 'AI 回调批次 ID',
order_ref VARCHAR(128) NOT NULL COMMENT 'V4 包内订单引用,同一 source_message_id 下用于聚合同一订单任务',
order_context_index INT NOT NULL COMMENT 'order_contexts[] 中的一基序号,用于同一 SourceMessage 下稳定排序',
order_id BIGINT NULL COMMENT '绑定的本地订单投影 ID归属未解决时可为空',
target_booking_type VARCHAR(32) NULL COMMENT '目标订单业务类型,例如 GROUP、FIT',
target_locator_type VARCHAR(64) NULL COMMENT '目标订单定位类型,例如 GROUP_CODE、BOOKING_CODE、CONFIRMATION_NUMBER',
target_locator_value VARCHAR(128) NULL COMMENT '目标订单定位值,未解决时为空',
target_resolution_status VARCHAR(32) NOT NULL COMMENT '订单归属解析状态RESOLVED、UNRESOLVED、CONFLICT',
order_task_status VARCHAR(32) NOT NULL COMMENT '订单任务状态快照OPEN、COMPLETED阻塞状态由查询实时派生',
source_received_at DATETIME(6) NOT NULL COMMENT '来源邮件接收 UTC 时间,用于排序',
version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
created_at DATETIME(6) NOT NULL COMMENT '记录创建 UTC 时间',
updated_at DATETIME(6) NOT NULL COMMENT '记录更新 UTC 时间',
logic_deleted_at DATETIME(6) NULL COMMENT '逻辑删除 UTC 时间,第一版不主动使用',
logic_deleted_reason VARCHAR(512) NULL COMMENT '逻辑删除原因,第一版不主动使用',
PRIMARY KEY (id),
UNIQUE KEY uk_reservation_v4_order_task_source_ref (hotel_id, source_message_id, order_ref),
UNIQUE KEY uk_reservation_v4_order_task_source_index (hotel_id, source_message_id, order_context_index),
KEY idx_reservation_v4_order_task_order (hotel_id, order_id, source_received_at),
KEY idx_reservation_v4_order_task_status (hotel_id, order_task_status, source_received_at),
KEY idx_reservation_v4_order_task_source (hotel_id, source_message_id),
KEY idx_reservation_v4_order_task_locator (hotel_id, target_locator_type, target_locator_value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Reservation V4 订单任务聚合表';
CREATE TABLE workflow_reservation_v4_task_card (
id BIGINT NOT NULL COMMENT 'V4 任务卡 ID',
hotel_id VARCHAR(64) NOT NULL COMMENT '酒店 ID',
v4_order_task_id BIGINT NOT NULL COMMENT 'V4 订单任务 ID',
source_message_id BIGINT NOT NULL COMMENT 'SourceMessage Inbox 内部 ID',
ai_transition_id BIGINT NULL COMMENT 'AI transition ID非 event 卡可为空',
card_type VARCHAR(64) NOT NULL COMMENT '卡片类型,例如 SOURCE_MESSAGE_DISPLAY、BASIC_INFORMATION、ROOM_INFORMATION',
event_type VARCHAR(64) NULL COMMENT '业务事件类型,非 event 卡为空',
source_event_index INT NOT NULL DEFAULT 0 COMMENT 'message_events[] 中的一基序号;非 event 卡固定为 0',
card_sort_order INT NOT NULL COMMENT '同一订单任务内卡片展示和处理排序',
card_status VARCHAR(32) NOT NULL COMMENT '卡片状态READONLY、PENDING_CONFIRM、REVIEW_REQUIRED、CONFIRMED',
review_status VARCHAR(32) NULL COMMENT '人工复核状态,非复核卡为空',
ai_payload_json LONGTEXT NOT NULL COMMENT 'AI 原始卡片 payload JSON 快照',
display_payload_json LONGTEXT NULL COMMENT '前端展示用 payload JSON 快照',
confirmed_payload_json LONGTEXT NULL COMMENT '用户最终确认 payload JSON',
review_resolution_json LONGTEXT NULL COMMENT '人工复核解阻结果 JSON',
validation_errors_json LONGTEXT NULL COMMENT '第一版后端校验错误 JSON',
confirmed_by VARCHAR(128) NULL COMMENT '最终确认人标识',
confirmed_at DATETIME(6) NULL COMMENT '最终确认 UTC 时间',
version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
created_at DATETIME(6) NOT NULL COMMENT '记录创建 UTC 时间',
updated_at DATETIME(6) NOT NULL COMMENT '记录更新 UTC 时间',
logic_deleted_at DATETIME(6) NULL COMMENT '逻辑删除 UTC 时间,第一版不主动使用',
logic_deleted_reason VARCHAR(512) NULL COMMENT '逻辑删除原因,第一版不主动使用',
PRIMARY KEY (id),
UNIQUE KEY uk_reservation_v4_task_card_slot (hotel_id, v4_order_task_id, card_sort_order, source_event_index),
KEY idx_reservation_v4_task_card_task (hotel_id, v4_order_task_id, card_sort_order),
KEY idx_reservation_v4_task_card_source (hotel_id, source_message_id),
KEY idx_reservation_v4_task_card_transition (hotel_id, ai_transition_id),
KEY idx_reservation_v4_task_card_status (hotel_id, card_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Reservation V4 多卡任务表';
CREATE TABLE workflow_reservation_v4_source_notification (
id BIGINT NOT NULL COMMENT 'V4 来源通知 ID',
hotel_id VARCHAR(64) NOT NULL COMMENT '酒店 ID',
source_message_id BIGINT NOT NULL COMMENT 'SourceMessage Inbox 内部 ID',
ai_batch_id BIGINT NOT NULL COMMENT 'AI 回调批次 ID',
ai_transition_id BIGINT NULL COMMENT 'AI transition IDS10 第一版可为空',
route_code VARCHAR(32) NOT NULL COMMENT '包级路由码,第一版用于 S10 来源通知',
notification_status VARCHAR(32) NOT NULL COMMENT '通知状态ACK_REQUIRED、ACKED',
raw_payload_json LONGTEXT NOT NULL COMMENT '来源通知原始 AI 片段或包级摘要 JSON',
ack_by VARCHAR(128) NULL COMMENT '确认处理人标识',
ack_at DATETIME(6) NULL COMMENT '确认处理 UTC 时间',
source_received_at DATETIME(6) NOT NULL COMMENT '来源邮件接收 UTC 时间,用于排序',
version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
created_at DATETIME(6) NOT NULL COMMENT '记录创建 UTC 时间',
updated_at DATETIME(6) NOT NULL COMMENT '记录更新 UTC 时间',
logic_deleted_at DATETIME(6) NULL COMMENT '逻辑删除 UTC 时间,第一版不主动使用',
logic_deleted_reason VARCHAR(512) NULL COMMENT '逻辑删除原因,第一版不主动使用',
PRIMARY KEY (id),
UNIQUE KEY uk_reservation_v4_notification_message_batch (hotel_id, source_message_id, ai_batch_id),
KEY idx_reservation_v4_notification_status (hotel_id, notification_status, source_received_at),
KEY idx_reservation_v4_notification_source (hotel_id, source_message_id),
KEY idx_reservation_v4_notification_transition (hotel_id, ai_transition_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Reservation V4 S10 来源通知表';