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
|