ETest-Vue-FastAPI/修复订单DAO中的test_order_id引用.md

2.7 KiB
Raw Blame History

修复订单DAO中的test_order_id引用

错误信息

type object 'TestWorkOrder' has no attribute 'test_order_id'

原因

test_order_dao.py 中,订单查询工单数量和工单列表时,仍然使用 TestWorkOrder.test_order_id,但该字段已经改为 batch_id

修复内容

文件:test_order_dao.py

1. 工单数量统计子查询第80-87行

修改前:

work_order_count_subquery = (
    select(
        TestWorkOrder.test_order_id,  # ❌ 错误
        func.count(TestWorkOrder.id).label('work_order_count')
    )
    .group_by(TestWorkOrder.test_order_id)  # ❌ 错误
    .subquery()
)

修改后:

work_order_count_subquery = (
    select(
        TestWorkOrder.order_id,  # ✅ 正确:使用 order_id
        func.count(TestWorkOrder.id).label('work_order_count')
    )
    .where(TestWorkOrder.order_id.isnot(None))  # ✅ 只统计已汇总的工单
    .group_by(TestWorkOrder.order_id)  # ✅ 正确
    .subquery()
)

2. JOIN 条件第105行

修改前:

.outerjoin(work_order_count_subquery, TestOrder.id == work_order_count_subquery.c.test_order_id)  # ❌ 错误

修改后:

.outerjoin(work_order_count_subquery, TestOrder.id == work_order_count_subquery.c.order_id)  # ✅ 正确

3. 查询订单的工单列表第272行

修改前:

.where(TestWorkOrder.test_order_id == order_id)  # ❌ 错误

修改后:

.where(TestWorkOrder.order_id == order_id)  # ✅ 正确:通过 order_id 查询已汇总的工单

业务逻辑说明

旧的数据关系

订单 ← test_order_id ─ 工单

工单通过 test_order_id 关联到订单

新的数据关系

样品 → 生成工单batch_id = 批次ID, order_id = NULL
         ↓
     选择工单 → 生成订单order_id = 订单ID
  • batch_id: 工单批次ID样品生成时设置
  • order_id: 关联订单ID从工单生成订单后设置

订单查询工单的逻辑

  • 旧逻辑: 通过 test_order_id 查询属于该订单的工单
  • 新逻辑: 通过 order_id 查询已汇总到该订单的工单

验证步骤

1. 重启后端服务

# 停止后端服务
# 启动后端服务

2. 测试订单列表

  1. 进入订单管理页面
  2. 应该能正常显示,不再报错
  3. "关联工单"列应该显示正确的工单数量

3. 测试订单详情

  1. 点击订单查看详情
  2. 应该能看到关联的工单(通过 order_id 关联)

相关文件

  • test_order_dao.py - 已修复3处引用
  • test_work_order_do.py - 已改为 batch_id
  • test_work_order_dao.py - 已改为 batch_id

完成时间

2026-01-08 22:50