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

109 lines
2.7 KiB
Markdown
Raw Permalink Normal View 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行
**修改前**:
```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