7.4 KiB
7.4 KiB
工单批次列表功能实现说明
问题描述
- 工单管理页面应该显示批次列表,而不是工单列表
- 点击某个批次,才进入该批次的工单详情列表
- "进行中"是指该批次中有工单在进行中
- "已完成"是指该批次中所有工单都已完成
解决方案
1. 数据库层(DAO)
文件: ruoyi-fastapi-backend/module_admin/system/dao/test_work_order_dao.py
新增方法: get_batch_list
功能: 按 batch_id 分组聚合工单数据,返回批次列表
SQL 逻辑:
SELECT
batch_id,
batch_name,
MIN(create_time) AS create_time,
COUNT(id) AS work_order_count,
MIN(creator) AS creator,
creator_name,
-- 统计各状态工单数量
SUM(CASE WHEN test_step = 0 THEN 1 ELSE 0 END) AS pending_count,
SUM(CASE WHEN test_step = 1 THEN 1 ELSE 0 END) AS testing_count,
SUM(CASE WHEN test_step = 2 THEN 1 ELSE 0 END) AS review1_count,
SUM(CASE WHEN test_step = 3 THEN 1 ELSE 0 END) AS review2_count,
SUM(CASE WHEN test_step = 4 THEN 1 ELSE 0 END) AS review3_count,
SUM(CASE WHEN test_step = 5 THEN 1 ELSE 0 END) AS completed_count,
-- 批次状态
CASE
WHEN SUM(CASE WHEN test_step = 5 THEN 1 ELSE 0 END) = COUNT(id) THEN 5 -- 全部完成
WHEN SUM(CASE WHEN test_step > 0 THEN 1 ELSE 0 END) > 0 THEN 1 -- 有工单在进行中
ELSE 0 -- 全部待领取
END AS batch_status
FROM test_work_order
LEFT JOIN sys_user ON test_work_order.creator = sys_user.user_id
WHERE order_id IS NULL AND batch_id IS NOT NULL
GROUP BY batch_id, batch_name, sys_user.nick_name
ORDER BY batch_id DESC
过滤逻辑:
test_step = 0(待领取): 批次中所有工单都是待领取状态test_step = 1-4(进行中): 批次中至少有一个工单在该步骤test_step = 5(已完成): 批次中所有工单都已完成
2. 服务层(Service)
文件: ruoyi-fastapi-backend/module_admin/system/service/test_work_order_service.py
新增方法: get_batch_list_services
功能: 调用 DAO 层的 get_batch_list 方法
3. 控制器层(Controller)
文件: ruoyi-fastapi-backend/module_admin/system/controller/test_work_order_controller.py
新增 API 端点: GET /system/test_work_order/batch/list
功能: 返回批次列表数据
响应格式:
{
"code": 200,
"data": {
"rows": [
{
"batchId": 1767886248798,
"batchName": "批次-20260108233048",
"createTime": "2026-01-08 23:30:48",
"workOrderCount": 10,
"creator": 1,
"creatorName": "管理员",
"pendingCount": 0,
"testingCount": 5,
"review1Count": 3,
"review2Count": 2,
"review3Count": 0,
"completedCount": 0,
"batchStatus": 1
}
],
"total": 5,
"pageNum": 1,
"pageSize": 10
}
}
字段说明:
batchId: 批次ID(时间戳)batchName: 批次名称createTime: 批次创建时间(最早的工单创建时间)workOrderCount: 该批次的工单总数creator: 创建人IDcreatorName: 创建人姓名pendingCount: 待领取工单数量testingCount: 测试中工单数量review1Count: 一审中工单数量review2Count: 二审中工单数量review3Count: 三审中工单数量completedCount: 已完成工单数量batchStatus: 批次状态(0=待领取, 1=进行中, 5=已完成)
4. 前端修改(需要)
文件: ruoyi-fastapi-frontend/src/views/system/test_work_order/index.vue
需要修改:
- API 调用改为
/system/test_work_order/batch/list - 表格列改为显示批次信息
- 点击批次行时,跳转到工单详情页面(传递
batchId参数)
前端 API 文件: ruoyi-fastapi-frontend/src/api/system/test_work_order.js
需要添加:
// 查询工单批次列表
export function listTest_work_order_batch(query) {
return request({
url: '/system/test_work_order/batch/list',
method: 'get',
params: query
})
}
前端表格列:
<el-table-column label="批次名称" align="center" prop="batchName" />
<el-table-column label="工单数量" align="center" prop="workOrderCount" />
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="待领取" align="center" prop="pendingCount" />
<el-table-column label="测试中" align="center" prop="testingCount" />
<el-table-column label="一审中" align="center" prop="review1Count" />
<el-table-column label="二审中" align="center" prop="review2Count" />
<el-table-column label="三审中" align="center" prop="review3Count" />
<el-table-column label="已完成" align="center" prop="completedCount" />
<el-table-column label="批次状态" align="center" prop="batchStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_test_step" :value="scope.row.batchStatus"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="viewBatchDetail(scope.row)"
>查看工单</el-button>
</template>
</el-table-column>
点击查看工单:
viewBatchDetail(row) {
// 跳转到工单详情页面,传递 batchId
this.$router.push({
path: '/system/test_work_order/detail',
query: { batchId: row.batchId }
})
}
数据流程
1. 样品生成工单
样品 → 生成工单 → 设置 batch_id(时间戳)和 batch_name
2. 批次列表查询
前端点击"进行中" →
API: /system/test_work_order/batch/list?testStep=1 →
后端按 batch_id 分组聚合 →
返回批次列表(包含统计信息)
3. 查看批次详情
前端点击"查看工单" →
API: /system/test_work_order/list?batchId=1767886248798 →
后端查询该批次的所有工单 →
返回工单列表
批次状态判断逻辑
待领取(test_step = 0)
- 批次中所有工单都是
test_step = 0 - SQL:
SUM(CASE WHEN test_step = 0 THEN 1 ELSE 0 END) = COUNT(id)
进行中(test_step = 1-4)
- 批次中至少有一个工单在该步骤
- SQL:
SUM(CASE WHEN test_step = 1 THEN 1 ELSE 0 END) > 0
已完成(test_step = 5)
- 批次中所有工单都是
test_step = 5 - SQL:
SUM(CASE WHEN test_step = 5 THEN 1 ELSE 0 END) = COUNT(id)
验证步骤
1. 重启后端服务
cd ruoyi-fastapi-backend
python main.py
2. 测试批次列表 API
# 获取所有批次
curl http://localhost:9099/system/test_work_order/batch/list
# 获取进行中的批次
curl http://localhost:9099/system/test_work_order/batch/list?testStep=1
# 获取已完成的批次
curl http://localhost:9099/system/test_work_order/batch/list?testStep=5
3. 检查响应数据
确认返回的数据包含:
batchId: 批次IDbatchName: 批次名称workOrderCount: 工单数量testingCount,completedCount等统计信息
4. 前端修改
修改前端代码,调用新的批次列表 API
优势
1. 不需要批次表
- 批次信息直接从
test_work_order表聚合 - 减少数据冗余
- 简化数据维护
2. 实时统计
- 批次状态实时计算
- 工单数量实时统计
- 无需额外更新批次表
3. 灵活过滤
- 可以按测试步骤过滤批次
- 可以按创建人过滤批次
- 可以按时间范围过滤批次
完成时间
2026-01-09 01:00