--- name: 数据订单流程优化 overview: 根据新的业务流程需求,对数据订单相关接口进行优化,新增审批状态和onboard状态,实现完整的订单分析-审批-生成-完成流程。 todos: - id: model-status content: 模型层:新增 STATUS_PENDING_APPROVAL 和 STATUS_ONBOARD 状态常量及标签映射 status: completed - id: service-analyze content: 服务层:修改 analyze_order 方法,分析通过后转为 pending_approval 状态 status: completed - id: service-update content: 服务层:新增 update_order 方法,支持修改订单描述和提取结果 status: completed - id: service-generate content: 服务层:新增 generate_order_resources 方法,实现自动创建 BusinessDomain 和 DataFlow status: completed - id: service-approve content: 服务层:修改 approve_order 方法,集成自动生成逻辑 status: completed - id: service-onboard content: 服务层:新增 set_order_onboard 方法,供数据工厂回调 status: completed - id: service-complete content: 服务层:修改 complete_order 方法,只允许从 onboard 状态完成 status: completed - id: route-update content: 路由层:新增 PUT /orders/{id} 更新订单接口 status: completed - id: route-onboard content: 路由层:新增 POST /orders/{id}/onboard 回调接口 status: completed - id: route-modify content: 路由层:修改 approve_order 和 complete_order 接口逻辑 status: completed --- # 数据订单流程优化计划 ## 流程概览 ```mermaid stateDiagram-v2 [*] --> pending: 新增订单 pending --> analyzing: 发起分析 analyzing --> pending_approval: 分析通过 analyzing --> manual_review: 分析有问题 manual_review --> analyzing: 修改后重新分析 pending_approval --> processing: 审批通过 pending_approval --> rejected: 审批驳回 processing --> onboard: 数据流程完成回调 onboard --> completed: 标记完成 rejected --> [*] completed --> [*] ``` ## 状态定义变更 | 状态值 | 状态名称 | 说明 | |--------|----------|------| | pending | 待处理 | 新增订单初始状态 | | analyzing | 分析中 | 正在进行 LLM 分析 | | pending_approval | 待审批 | 分析通过,等待人工审批 | | manual_review | 待人工处理 | 分析有问题,需人工修改 | | processing | 加工中 | 审批通过,自动生成资源中 | | onboard | 数据产品就绪 | 数据流程完成,产品可用 | | completed | 已完成 | 订单最终完成 | | rejected | 已驳回 | 审批被驳回 | ## 涉及文件修改 ### 1. 模型层 - [app/models/data_product.py](app/models/data_product.py) **修改内容:** - 新增状态常量 `STATUS_PENDING_APPROVAL = "pending_approval"` 和 `STATUS_ONBOARD = "onboard"` - 更新 `STATUS_LABELS` 映射 ```python # 新增状态常量 STATUS_PENDING_APPROVAL = "pending_approval" # 待审批 STATUS_ONBOARD = "onboard" # 数据产品就绪 ``` ### 2. 服务层 - [app/core/data_service/data_product_service.py](app/core/data_service/data_product_service.py) **修改内容:** **(A) 修改 `analyze_order` 方法** - 分析通过时状态改为 `pending_approval` (而非 `processing`) - 分析有问题时保持 `manual_review` ```python # 修改第 1530-1535 行的逻辑 if can_connect: order.update_status(DataOrder.STATUS_PENDING_APPROVAL) # 改为待审批 else: order.update_status(DataOrder.STATUS_MANUAL_REVIEW) ``` **(B) 修改 `approve_order` 方法** - 接受来自 `pending_approval` 状态的审批 - 审批通过后调用自动生成逻辑 - 返回生成的 BusinessDomain 和 DataFlow 信息 **(C) 新增 `update_order` 方法** - 支持修改订单的 title、description - 支持修改 extracted_domains、extracted_fields、extraction_purpose - 修改后状态重置为 `pending` 或保持 `manual_review` **(D) 新增 `generate_order_resources` 方法** - 根据订单分析结果自动创建 BusinessDomain 节点 - 自动创建 DataFlow 节点 - 建立节点间的关系 (INPUT/OUTPUT) - 关联到数据订单 **(E) 新增 `set_order_onboard` 方法** - 供数据工厂回调,将订单状态更新为 `onboard` - 更新关联的 dataflow_id 和 product_id **(F) 新增 `mark_order_completed` 方法** - 从 `onboard` 状态标记为最终完成 ### 3. 路由层 - [app/api/data_service/routes.py](app/api/data_service/routes.py) **修改内容:** **(A) 修改 `approve_order` 路由** - 接受 `pending_approval` 状态 - 调用自动生成逻辑 **(B) 新增 `PUT /orders/` 更新订单接口** ```python @bp.route("/orders/", methods=["PUT"]) def update_order(order_id: int): """更新数据订单(支持修改描述和提取结果)""" ``` 请求体: ```json { "title": "新标题(可选)", "description": "新描述(可选)", "extracted_domains": ["域1", "域2"], "extracted_fields": ["字段1", "字段2"], "extraction_purpose": "用途(可选)" } ``` **(C) 新增 `POST /orders//onboard` 回调接口** ```python @bp.route("/orders//onboard", methods=["POST"]) def onboard_order(order_id: int): """数据工厂回调:设置订单为数据产品就绪状态""" ``` 请求体: ```json { "product_id": 123, "dataflow_id": 456, "processed_by": "n8n-workflow" } ``` **(D) 修改 `complete_order` 接口逻辑** - 只允许从 `onboard` 状态标记完成 - 添加状态校验 ### 4. 数据库迁移 (可选) 数据库表 `data_orders` 的 `status` 字段已经是 VARCHAR(50),可以直接存储新的状态值,无需 DDL 变更。但建议更新表注释: ```sql -- 更新状态字段注释 COMMENT ON COLUMN public.data_orders.status IS '订单状态:pending/analyzing/pending_approval/manual_review/processing/onboard/completed/rejected'; ``` ## 接口变更汇总 | 操作 | 方法 | 路径 | 变更类型 | |------|------|------|----------| | 更新订单 | PUT | /orders/{id} | 新增 | | 设置onboard | POST | /orders/{id}/onboard | 新增 | | 审批通过 | POST | /orders/{id}/approve | 修改逻辑 | | 标记完成 | POST | /orders/{id}/complete | 修改逻辑 | | 订单分析 | POST | /orders/{id}/analyze | 修改逻辑 | ## 自动生成资源逻辑 审批通过后,`generate_order_resources` 方法将: 1. 根据 `graph_analysis.matched_domains` 确定输入的 BusinessDomain 节点 2. 创建新的目标 BusinessDomain 节点(作为数据产品的承载) 3. 创建 DataFlow 节点,设置 script_requirement 等属性 4. 建立 INPUT 关系(源 BusinessDomain -> DataFlow) 5. 建立 OUTPUT 关系(DataFlow -> 目标 BusinessDomain) 6. 更新订单的 `result_dataflow_id` ## 实施顺序 1. 先修改模型层,新增状态常量 2. 修改服务层,实现核心业务逻辑 3. 修改路由层,暴露新接口 4. 更新数据库注释(可选) 5. 测试完整流程