14 KiB
M002 Order Task Workflow 订单任务主流程 V1
文档状态:历史参考。当前 M002 后续开发基线已由
M002-order-task-workflow-v3.md承接;V2 保留为当前阶段实现记录。 本文只用于理解早期流程讨论和边界来源。
文档信息
| 项目 | 内容 |
|---|---|
| 文档版本 | 0.1 |
| 日期 | 2026-07-06 |
| 状态 | 第一版流程草稿 |
| 适用范围 | SourceMessage 之后的 SuperAgent 抽取、订单挂靠、任务处理、OPERA/OHIP 模拟操作主流程 |
| 主要读者 | 产品、后端、前端、测试、后续协作 agent |
1. 文档定位
本文记录 TH Hotel 当前确认的订单任务主流程第一版理解,用于承接已经完成的
SourceMessage Inbox 能力,并为后续 PRD、接口契约、数据模型和实现 checkpoint 提供
统一业务语义。
本文只沉淀流程和边界,不代表已经开始实现代码。后续进入开发前,仍需要补充具体任务字段、 SuperAgent 创建任务接口契约、前端页面范围、数据库模型和验收标准。
2. 已确认结论
- AgentBus 是当前原始消息起点,后续也可能增加其他入口。
- AgentBus 只负责原始来源事实进入本系统,当前已经通过
SourceMessage Inbox保存。 - SuperAgent 是黑盒抽取能力,本系统不关心它内部如何抽取。
- SuperAgent 不直连本系统数据库,只能通过本系统后端接口查询已有订单和任务上下文。
- SuperAgent 抽取成功后,通过调用本系统后端接口创建一个或多个任务。
- SuperAgent 告知的任务类型是本系统创建任务的依据,本系统暂时不做业务合法性判断。
- 本系统只做接口鉴权、基础 JSON 可解析性、幂等键、必要技术字段等技术校验。
- 任务必须挂靠到订单下,异常任务也需要先创建临时订单作为处理容器。
- 同一次 SuperAgent 调用如果返回多个任务,必须按返回 JSON 列表顺序确定任务执行顺序。
- 同一个订单下,前一个任务未完成时,后续任务只能查看,不能编辑、确认或执行模拟操作。
- 用户在任务详情页可以查看、修改字段内容,并确认订单归属。
- 用户确认字段和订单关系后,才能执行 OPERA/OHIP 模拟操作。
- 当前 OHIP/OPERA 不接真实接口,只做模拟操作。
- 所有任务类型转换、订单切换、临时订单逻辑删除都必须记录审计和原因。
3. 总体流程
AgentBus / 未来其他入口
→ SourceMessage Inbox 记录原始来源事实
→ SuperAgent 读取或处理原始来源数据
→ SuperAgent 抽取结构化 JSON
→ SuperAgent 通过本系统后端接口查询已有订单和任务上下文
→ SuperAgent 调用本系统接口创建一个或多个任务
→ 本系统按任务类型和返回顺序创建任务并挂靠订单
→ 用户在任务详情页查看、修改字段、确认订单归属
→ 用户确认后执行 OPERA/OHIP 模拟操作
→ 任务完成后,同订单下后续任务解锁处理
中文说明:
SourceMessage Inbox是来源事实层,不表达订单、任务或业务结论。- SuperAgent 负责抽取并告知任务类型,但不直接改变本系统最终业务状态。
- Order / Task 是本系统后续业务核心,本系统必须掌握任务顺序、可处理状态、审计和模拟操作结果。
4. 与 M001 SourceMessage 的关系
已完成的 M001 只覆盖以下能力:
AgentBus 原始消息
→ SourceMessage Inbox 落库
→ 查询安全摘要
→ 受控读取原文
→ 记录原文读取审计
M001 不做以下事情:
- 不创建订单。
- 不创建任务。
- 不调用 SuperAgent。
- 不判断任务类型。
- 不执行 OPERA/OHIP 模拟操作。
- 不自动 ACK、回复客户或写业务结果。
因此,本文流程和当前 SourceMessage 代码没有冲突。SourceMessage 是后续订单任务流程的上游来源事实。
5. 核心角色与职责边界
| 模块或外部系统 | 职责 | 不负责 |
|---|---|---|
| AgentBus | 接收邮件等外部渠道消息,并把原始 payload 推送给本系统 | 不做 AI 抽取,不创建任务,不调用业务写接口 |
| SourceMessage Inbox | 保存原始来源事实、幂等、查询安全摘要、受控读取原文 | 不表达订单归属,不表达任务类型,不表达业务合法性 |
| SuperAgent | 抽取结构化 JSON,判断任务类型,调用本系统后端接口创建任务 | 不直连数据库,不绕过本系统权限和审计,不直接执行 OPERA/OHIP |
| Order | 承载任务队列、订单号、临时订单状态和业务订单关系 | 不保存 SuperAgent 外部协议细节 |
| Task | 承载任务类型、抽取字段、用户确认字段、处理状态和执行顺序 | 不直接替代订单,不直接保存原始邮件全文 |
| Operation Simulation | 记录用户确认后的 OPERA/OHIP 模拟操作、结果和重试 | 当前不调用真实 OHIP/OPERA 接口 |
6. SuperAgent 任务创建边界
SuperAgent 创建任务时,本系统只做技术接收校验,不做业务合法性判断。
技术校验包括:
- 接口鉴权和调用方身份校验。
- 请求 JSON 可解析。
- 幂等键或批次标识存在。
- 任务列表结构可识别。
- 任务类型是本系统已经约定的稳定代码。
- 任务列表顺序可保留。
暂时不做的业务判断包括:
- 不判断任务是否应该是
NEW_BOOKING。 - 不判断任务是否应该是
UPDATE_BOOKING。 - 不判断任务是否应该是
CANCEL_BOOKING。 - 不根据字段缺失自动改成异常任务。
- 不判断
CANCEL_BOOKING前是否真的存在已完成的NEW_BOOKING。 - 不判断房型、日期、金额、订单号等字段是否业务合理。
如果 SuperAgent 告知是异常任务,本系统就按异常任务创建。如果 SuperAgent 告知是其他已知任务类型,本系统就按该类型创建。
7. 订单模型第一版理解
订单应至少区分内部身份、临时展示编号和真实业务订单号。
| 概念 | 中文说明 |
|---|---|
orderId |
本系统内部订单 ID,永远存在,用于任务挂靠和内部引用 |
temporaryOrderCode |
临时订单编号或前端展示编号,用于还没有明确真实订单号的场景 |
businessOrderNo |
真实业务订单号,可能来自 SuperAgent 抽取结果、用户确认字段或后续模拟操作回填 |
orderStatus |
订单状态,例如临时、有效、逻辑删除等 |
deletedReason |
逻辑删除原因,主要用于异常任务转移后删除原临时订单 |
NEW_BOOKING 任务不一定都需要等待 OPERA 模拟创建后才获得真实订单号。系统应优先查看用户确认后的字段中是否已有订单号:
- 如果确认字段中已有订单号,则优先使用该订单号作为
businessOrderNo。 - 如果确认字段中没有订单号,则先使用内部订单 ID 或临时编号追踪,后续如果模拟操作返回真实订单号再回填。
8. 任务模型第一版理解
任务至少需要保存 SuperAgent 原始抽取内容和用户确认后的内容。
| 概念 | 中文说明 |
|---|---|
taskId |
本系统内部任务 ID |
orderId |
当前挂靠订单 ID |
taskType |
任务类型,由 SuperAgent 或后续人工转换确定 |
taskStatus |
任务状态,用于控制是否可编辑、可确认、可执行 |
batchId |
SuperAgent 创建任务批次 ID 或调用 ID |
batchItemIndex |
同一次 SuperAgent 返回列表中的顺序,从 0 或 1 开始需后续统一 |
orderSequence |
订单下的任务执行顺序 |
extractedJson |
SuperAgent 原始抽取 JSON,不应被用户编辑覆盖 |
confirmedJson |
用户修改并确认后的 JSON,用于后续模拟操作 |
sourceMessageId |
关联 SourceMessage ID,便于追溯原始邮件或来源消息 |
任务类型当前确认:
NEW_BOOKING:新建订单任务。UPDATE_BOOKING:更新订单任务。后续可按字段组在前端展示不同卡片。CANCEL_BOOKING:取消订单任务。EXCEPTION:异常任务,表示 SuperAgent 无法判断属于前三类。
关于“任务大致 5 种”的表述,当前只确认以上 4 类。后续新增类型以具体任务分类和字段定义为准。
9. 任务顺序与可处理状态
订单下的任务必须按顺序处理。
排序规则第一版:
orderId + orderSequence
同一次 SuperAgent 调用创建多个任务时:
- 必须保留 SuperAgent 返回 JSON 列表中的任务顺序。
- 同一个批次里,列表前面的任务优先执行。
- 不能只依赖创建时间排序,因为同批次任务时间可能完全一样。
后续任务的可处理规则:
- 当前面存在未完成任务时,后续任务只能查看。
- 后续任务不能编辑字段。
- 后续任务不能确认订单关系。
- 后续任务不能执行 OPERA/OHIP 模拟操作。
- 后续任务不能重试模拟操作。
任务切换订单后:
- 必须记录操作人、原订单、新订单、原因和时间。
- 任务进入目标订单队列后,需要按目标订单任务队列规则重新判断是否可处理。
- 如果目标订单前面已有未完成任务,该任务切过去后也只能查看。
10. Task Detail 行为
任务详情页不是只读确认页,而是用户处理任务的主要工作台。
任务可处理时,用户可以:
- 查看 SuperAgent 原始抽取结果。
- 查看关联 SourceMessage 的安全摘要或受控原文入口。
- 修改字段内容。
- 确认订单归属。
- 对异常任务选择转换目标类型。
- 输入转换、切换或删除原因。
- 确认后触发 OPERA/OHIP 模拟操作。
- 查看每条模拟操作结果。
- 对失败或允许重试的模拟操作发起重试。
任务不可处理时,用户只能查看:
- 任务基础信息。
- 当前挂靠订单。
- 抽取字段和已确认字段。
- 阻塞原因,例如“同订单下前置任务未完成”。
- 前置任务信息或跳转入口。
11. 异常任务处理流程
异常任务也必须挂靠订单。创建异常任务时,系统创建一个新的临时订单,并将异常任务挂靠到该临时订单。
SuperAgent 创建 EXCEPTION 任务
→ 系统创建临时订单
→ 异常任务挂靠临时订单
→ 用户在任务详情页处理异常任务
→ 用户选择转为 NEW_BOOKING / UPDATE_BOOKING / CANCEL_BOOKING
→ 用户填写原因并确认
→ 系统写审计
11.1 转为 NEW_BOOKING
- 临时订单继续保留。
- 任务类型从
EXCEPTION改为NEW_BOOKING。 - 用户可以修改并确认字段。
- 系统优先查看确认字段中的订单号是否有值。
- 如果订单号有值,则将该值作为真实业务订单号。
- 如果订单号无值,则继续使用临时编号追踪,后续模拟操作如返回真实订单号再回填。
- 必须记录任务类型变更审计和原因。
11.2 转为 UPDATE_BOOKING
- 用户选择一个已有订单。
- 任务类型从
EXCEPTION改为UPDATE_BOOKING。 - 任务从临时订单切换到目标订单。
- 原临时订单逻辑删除。
- 必须记录任务类型变更、订单关系变更、临时订单逻辑删除审计和原因。
- 切换后必须受目标订单任务队列顺序约束。
11.3 转为 CANCEL_BOOKING
- 用户选择一个已有订单。
- 任务类型从
EXCEPTION改为CANCEL_BOOKING。 - 任务从临时订单切换到目标订单。
- 原临时订单逻辑删除。
- 必须记录任务类型变更、订单关系变更、临时订单逻辑删除审计和原因。
- 切换后必须受目标订单任务队列顺序约束。
12. OPERA/OHIP 模拟操作
当前阶段没有真实 OHIP/OPERA 接口,只做模拟操作。
模拟操作第一版规则:
- 只有当前订单下可处理的任务才能执行模拟操作。
- 执行前必须完成字段修改和订单关系确认。
- 一个任务可能生成多条模拟操作。
- 任务详情页需要展示每条模拟操作的结果。
- 每条模拟操作应有独立状态、失败原因、重试次数和最近执行时间。
- 重试必须可追溯,不能覆盖历史执行结果。
- 任务是否完成,需要根据该任务要求的模拟操作是否全部达到完成条件判断。
模拟操作的具体类型、字段、完成条件和重试限制后续另行定义。
13. 审计要求
以下行为必须有审计:
- SuperAgent 创建任务批次。
- 同批次内每个任务的创建顺序。
- 用户修改任务字段。
- 用户确认订单关系。
- 任务类型转换。
- 任务切换订单。
- 临时订单逻辑删除。
- OPERA/OHIP 模拟操作执行。
- 模拟操作重试。
审计至少应包含:
| 字段 | 中文说明 |
|---|---|
actor |
操作人或系统调用方 |
action |
操作类型 |
reason |
用户填写或系统记录的原因 |
beforeSnapshot |
变更前摘要 |
afterSnapshot |
变更后摘要 |
occurredAt |
发生时间 |
审计中不得记录 Secret、Token、完整邮件正文、附件 URL 或不必要的个人敏感信息。
14. 暂不包含范围
第一版流程文档暂不定义:
- 具体 SuperAgent 创建任务接口 JSON Schema。
- 具体订单表、任务表、操作表结构。
- 具体前端页面布局。
- 具体任务字段和卡片展示规则。
- 真实 OHIP/OPERA 接口调用。
- SuperAgent 内部 prompt、skill 或抽取实现。
- 业务字段合法性判断规则。
- 任务类型之外的自动分类逻辑。
15. 后续建议 checkpoint
建议后续按以下顺序拆分,不一次性做完:
- 定义 SuperAgent 调本系统创建任务接口契约。
- 定义 Order / Task / Task Audit / Operation Simulation 的最小数据模型。
- 实现任务入站创建、幂等、批次顺序和订单挂靠。
- 实现任务详情读取、字段编辑和订单关系确认。
- 实现异常任务转换、订单切换和临时订单逻辑删除。
- 实现 OPERA/OHIP 模拟操作结果和重试机制。
- 再根据前端页面范围实现列表、详情和队列状态展示。
16. 待确认问题
- SuperAgent 创建任务接口的正式 JSON 格式是什么。
- SuperAgent 任务批次 ID 和每个任务 item 的幂等键由谁生成。
batchItemIndex从 0 开始还是从 1 开始。- 订单号字段在不同任务类型的
confirmedJson中具体叫什么。 - 任务状态机需要哪些稳定状态。
- 模拟操作的完成条件和失败后是否允许跳过。
- 任务完成是否允许人工强制完成,若允许需要什么权限和审计。
- 第五种任务类型是否存在,若存在具体业务含义是什么。