# 修复订单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行) **修改前**: ```python work_order_count_subquery = ( select( TestWorkOrder.test_order_id, # ❌ 错误 func.count(TestWorkOrder.id).label('work_order_count') ) .group_by(TestWorkOrder.test_order_id) # ❌ 错误 .subquery() ) ``` **修改后**: ```python 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行) **修改前**: ```python .outerjoin(work_order_count_subquery, TestOrder.id == work_order_count_subquery.c.test_order_id) # ❌ 错误 ``` **修改后**: ```python .outerjoin(work_order_count_subquery, TestOrder.id == work_order_count_subquery.c.order_id) # ✅ 正确 ``` #### 3. 查询订单的工单列表(第272行) **修改前**: ```python .where(TestWorkOrder.test_order_id == order_id) # ❌ 错误 ``` **修改后**: ```python .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. 重启后端服务 ```bash # 停止后端服务 # 启动后端服务 ``` ### 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