数据订单流程优化_74e37faf.plan.md 6.9 KB


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 ---

数据订单流程优化计划

流程概览

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

修改内容:

  • 新增状态常量 STATUS_PENDING_APPROVAL = "pending_approval"STATUS_ONBOARD = "onboard"
  • 更新 STATUS_LABELS 映射

    # 新增状态常量
    STATUS_PENDING_APPROVAL = "pending_approval"  # 待审批
    STATUS_ONBOARD = "onboard"  # 数据产品就绪
    

    2. 服务层 - app/core/data_service/data_product_service.py

    修改内容:

    (A) 修改 analyze_order 方法

    • 分析通过时状态改为 pending_approval (而非 processing)
    • 分析有问题时保持 manual_review

      # 修改第 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

修改内容:

(A) 修改 approve_order 路由

  • 接受 pending_approval 状态
  • 调用自动生成逻辑

(B) 新增 PUT /orders/<order_id> 更新订单接口

@bp.route("/orders/<int:order_id>", methods=["PUT"])
def update_order(order_id: int):
    """更新数据订单(支持修改描述和提取结果)"""

请求体:

{
    "title": "新标题(可选)",
    "description": "新描述(可选)",
    "extracted_domains": ["域1", "域2"],
    "extracted_fields": ["字段1", "字段2"],
    "extraction_purpose": "用途(可选)"
}

(C) 新增 POST /orders/<order_id>/onboard 回调接口

@bp.route("/orders/<int:order_id>/onboard", methods=["POST"])
def onboard_order(order_id: int):
    """数据工厂回调:设置订单为数据产品就绪状态"""

请求体:

{
    "product_id": 123,
    "dataflow_id": 456,
    "processed_by": "n8n-workflow"
}

(D) 修改 complete_order 接口逻辑

  • 只允许从 onboard 状态标记完成
  • 添加状态校验

4. 数据库迁移 (可选)

数据库表 data_ordersstatus 字段已经是 VARCHAR(50),可以直接存储新的状态值,无需 DDL 变更。但建议更新表注释:

-- 更新状态字段注释
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. 测试完整流程