ETest-Vue-FastAPI/工单列表直接显示修复完成.md

3.7 KiB
Raw Permalink Blame History

工单列表直接显示修复完成

修改内容

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可选用于查看某个批次的工单

响应数据

{
  "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
  }
}

前端使用

查询所有工单

listTest_work_order({
  pageNum: 1,
  pageSize: 10
})

查询进行中的工单

listTest_work_order({
  pageNum: 1,
  pageSize: 10,
  testStep: 1
})

查询已完成的工单

listTest_work_order({
  pageNum: 1,
  pageSize: 10,
  testStep: 5
})

查询某个批次的工单

listTest_work_order({
  pageNum: 1,
  pageSize: 10,
  batchId: 1767886248798
})

核心修复

Row 对象序列化问题

问题: DAO 层使用 .label()SQLAlchemy 返回 Row 对象Pydantic 无法序列化

修复:

# 执行查询并转换为字典列表
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. 重启后端服务

cd ruoyi-fastapi-backend
python main.py

2. 测试 API

# 测试全部工单
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 条工单),建议添加索引:

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