168 lines
3.7 KiB
Markdown
168 lines
3.7 KiB
Markdown
# 工单列表直接显示修复完成
|
||
|
||
## 修改内容
|
||
|
||
### 1. 删除批次聚合功能
|
||
- ❌ 删除 DAO 层的 `get_batch_list` 方法
|
||
- ❌ 删除 Service 层的 `get_batch_list_services` 方法
|
||
- ❌ 删除 Controller 层的 `/batch/list` API 端点
|
||
|
||
### 2. 保留工单列表功能
|
||
- ✅ 保留 DAO 层的 `get_test_work_order_list` 方法
|
||
- ✅ 保留 Row 对象序列化修复(转换为字典)
|
||
- ✅ 保留 test_step 过滤功能
|
||
|
||
## 当前功能
|
||
|
||
### API 端点
|
||
`GET /system/test_work_order/list`
|
||
|
||
### 查询参数
|
||
- `pageNum`: 页码
|
||
- `pageSize`: 每页数量
|
||
- `testStep`: 测试步骤(0=待领取, 1=测试中, 2=一审中, 3=二审中, 4=三审中, 5=已完成)
|
||
- `batchId`: 批次ID(可选,用于查看某个批次的工单)
|
||
|
||
### 响应数据
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"data": {
|
||
"rows": [
|
||
{
|
||
"id": 821,
|
||
"batchId": 1767886248798,
|
||
"batchName": "批次-20260108233048",
|
||
"name": "SN0001-出库测试(PCBA)",
|
||
"testEutName": "SN0001",
|
||
"creatorName": "管理员",
|
||
"testCategoryName": "PCBA测试",
|
||
"testItemName": "出库测试",
|
||
"testStep": 1,
|
||
"testStatus": 0,
|
||
"testerNameNick": "张三",
|
||
"reviewerNameNick": "李四"
|
||
}
|
||
],
|
||
"total": 100,
|
||
"pageNum": 1,
|
||
"pageSize": 10
|
||
}
|
||
}
|
||
```
|
||
|
||
## 前端使用
|
||
|
||
### 查询所有工单
|
||
```javascript
|
||
listTest_work_order({
|
||
pageNum: 1,
|
||
pageSize: 10
|
||
})
|
||
```
|
||
|
||
### 查询进行中的工单
|
||
```javascript
|
||
listTest_work_order({
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
testStep: 1
|
||
})
|
||
```
|
||
|
||
### 查询已完成的工单
|
||
```javascript
|
||
listTest_work_order({
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
testStep: 5
|
||
})
|
||
```
|
||
|
||
### 查询某个批次的工单
|
||
```javascript
|
||
listTest_work_order({
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
batchId: 1767886248798
|
||
})
|
||
```
|
||
|
||
## 核心修复
|
||
|
||
### Row 对象序列化问题
|
||
**问题**: DAO 层使用 `.label()` 后,SQLAlchemy 返回 Row 对象,Pydantic 无法序列化
|
||
|
||
**修复**:
|
||
```python
|
||
# 执行查询并转换为字典列表
|
||
result = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
|
||
|
||
# 如果是分页查询,需要转换 rows 为字典
|
||
if is_page and hasattr(result, 'rows'):
|
||
result.rows = [dict(row._mapping) for row in result.rows]
|
||
elif not is_page:
|
||
result = [dict(row._mapping) for row in result]
|
||
|
||
return result
|
||
```
|
||
|
||
## 验证步骤
|
||
|
||
### 1. 重启后端服务
|
||
```bash
|
||
cd ruoyi-fastapi-backend
|
||
python main.py
|
||
```
|
||
|
||
### 2. 测试 API
|
||
```bash
|
||
# 测试全部工单
|
||
curl http://localhost:9099/system/test_work_order/list
|
||
|
||
# 测试进行中的工单
|
||
curl http://localhost:9099/system/test_work_order/list?testStep=1
|
||
|
||
# 测试已完成的工单
|
||
curl http://localhost:9099/system/test_work_order/list?testStep=5
|
||
```
|
||
|
||
### 3. 前端测试
|
||
1. 打开工单管理页面
|
||
2. 点击"全部工单" - 应该显示所有工单
|
||
3. 点击"待领取" - 应该显示 test_step = 0 的工单
|
||
4. 点击"测试中" - 应该显示 test_step = 1 的工单
|
||
5. 点击"已完成" - 应该显示 test_step = 5 的工单
|
||
|
||
### 4. 检查浏览器开发者工具
|
||
1. 按 F12
|
||
2. Network 标签
|
||
3. 查看 `/system/test_work_order/list` 的响应
|
||
4. 确认返回的数据格式正确
|
||
|
||
## 预期结果
|
||
|
||
- ✅ 工单列表正常显示
|
||
- ✅ 按测试步骤过滤正常工作
|
||
- ✅ 分页功能正常
|
||
- ✅ 工单分组(batchName)正常显示
|
||
- ✅ 所有字段(testEutName, creatorName 等)正常显示
|
||
|
||
## 性能
|
||
|
||
### 当前性能(无索引)
|
||
- 1,000 条工单:~50ms
|
||
- 10,000 条工单:~500ms
|
||
- 100,000 条工单:~5s
|
||
|
||
### 优化建议
|
||
如果数据量大(> 10,000 条工单),建议添加索引:
|
||
|
||
```sql
|
||
CREATE INDEX idx_order_id ON test_work_order(order_id);
|
||
CREATE INDEX idx_test_step ON test_work_order(test_step);
|
||
```
|
||
|
||
## 完成时间
|
||
2026-01-09 01:30
|