109 lines
2.7 KiB
Markdown
109 lines
2.7 KiB
Markdown
# 修复订单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
|