本次改造修复并完善了批次追溯功能,支持从批次出发的正向(原材料→成品)和反向(成品→原材料)追溯查询。
| 页面 | 路径 | 改动说明 |
|---|---|---|
| 批次管理列表 | /mes/wm/batch/list |
添加"向前追溯"、"向后追溯"按钮 |
| 批次详情 | /mes/wm/batch/detail |
展示追溯结果时间线 |
请求方式:GET
请求路径:/mes/wm/batch/forward-list
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | String | 是 | 批次编码 |
响应示例:
{
"code": 0,
"msg": "",
"data": [
{
"id": 1,
"code": "BATCH20250713001",
"itemId": 100,
"itemCode": "ITEM001",
"itemName": "成品A",
"workOrderId": 50,
"workOrderCode": "WO20250713001",
"taskId": 80,
"taskCode": "TASK001",
"vendorId": 20,
"vendorCode": "VENDOR001",
"vendorName": "供应商A",
"clientId": 30,
"clientCode": "CLIENT001",
"clientName": "客户A",
"workstationId": 40,
"workstationCode": "WS001",
"toolId": 50,
"toolCode": "TOOL001"
}
]
}
请求方式:GET
请求路径:/mes/wm/batch/backward-list
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | String | 是 | 批次编码 |
响应示例:同向前追溯
用户点击"向前追溯"或"向后追溯"按钮时,调用对应接口获取追溯结果。
建议使用时间线组件展示追溯链路:
<!-- 向前追溯:原材料 → 成品 -->
<el-timeline>
<el-timeline-item
v-for="(batch, index) in forwardList"
:key="batch.id"
:timestamp="formatDate(batch.createTime)"
placement="top"
>
<el-card shadow="hover">
<h4>批次:{{ batch.code }}</h4>
<p>物料:{{ batch.itemName }} ({{ batch.itemCode }})</p>
<p v-if="batch.workOrderCode">工单:{{ batch.workOrderCode }}</p>
<p v-if="batch.taskCode">任务:{{ batch.taskCode }}</p>
<p v-if="batch.vendorName">供应商:{{ batch.vendorName }}</p>
<p v-if="batch.clientName">客户:{{ batch.clientName }}</p>
</el-card>
</el-timeline-item>
</el-timeline>
<!-- 向后追溯:成品 → 原材料 -->
<el-timeline>
<el-timeline-item
v-for="(batch, index) in backwardList"
:key="batch.id"
:timestamp="formatDate(batch.createTime)"
placement="top"
>
<el-card shadow="hover">
<h4>批次:{{ batch.code }}</h4>
<p>物料:{{ batch.itemName }} ({{ batch.itemCode }})</p>
<p v-if="batch.workOrderCode">工单:{{ batch.workOrderCode }}</p>
<p v-if="batch.taskCode">任务:{{ batch.taskCode }}</p>
<p v-if="batch.vendorName">供应商:{{ batch.vendorName }}</p>
</el-card>
</el-timeline-item>
</el-timeline>
当追溯结果为空时,显示友好提示:
<el-empty v-if="!loading && traceList.length === 0" description="暂无追溯数据">
<template #image>
<svg viewBox="0 0 1024 1024" width="128">
<path d="M512 128c-199.8 0-360 160.2-360 360s160.2 360 360 360 360-160.2 360-360S711.8 128 512 128zm0 128c119.8 0 216 96.2 216 216s-96.2 216-216 216-216-96.2-216-216 96.2-216 216-216zm0 128c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96z" fill="#d9d9d9"/>
</svg>
</template>
</el-empty>
┌─────────────┐
│ 批次列表页 │
└──────┬──────┘
│ 点击"向前追溯"
▼
┌─────────────────────────────────────┐
│ 调用 GET /mes/wm/batch/forward-list │
│ 参数: code = 当前批次编码 │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 返回该批次产出的所有下游批次列表 │
│ │
│ 追溯路径: │
│ 库存事务(消耗) → 消耗单 → 报工记录 │
│ → 库存事务(产出) → 下游批次 │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 以时间线形式展示追溯结果 │
│ 可点击任一条目跳转到对应批次详情 │
└─────────────────────────────────────┘
┌─────────────┐
│ 批次列表页 │
└──────┬──────┘
│ 点击"向后追溯"
▼
┌─────────────────────────────────────┐
│ 调用 GET /mes/wm/batch/backward-list│
│ 参数: code = 当前批次编码 │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 返回生产该批次所消耗的所有上游批次 │
│ │
│ 追溯路径: │
│ 库存事务(产出) → 产出单 → 报工记录 │
│ → 库存事务(消耗) → 上游批次 │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 以时间线形式展示追溯结果 │
│ 可点击任一条目跳转到对应批次详情 │
└─────────────────────────────────────┘
mes_wm_transaction 库存事务表的数据完整性biz_type 字段值:123 = 物料消耗,124 = 产品产出mes:wm-batch:query 权限| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/wm/batch/get | 获取批次详情 |
| GET | /mes/wm/batch/page | 获取批次分页列表 |
| GET | /mes/wm/batch/forward-list | 批次向前追溯 |
| GET | /mes/wm/batch/backward-list | 批次向后追溯 |
以下表已添加 feedback_id 字段用于精确关联:
| 表名 | 新增字段 | 说明 |
|---|---|---|
| mes_wm_item_consume | feedback_id | 关联报工记录编号 |
| mes_wm_product_produce | feedback_id | 关联报工记录 ID |
CREATE INDEX idx_item_consume_feedback_id ON mes_wm_item_consume(feedback_id);
CREATE INDEX idx_product_produce_feedback_id ON mes_wm_product_produce(feedback_id);
| 日期 | 版本 | 说明 |
|---|---|---|
| 2026-07-13 | v1.0 | 初始版本,完成批次追溯功能修复 |