编辑 | blame | 历史 | 原始文档

批次追溯功能 - 前端联调方案

概述

本次改造修复并完善了批次追溯功能,支持从批次出发的正向(原材料→成品)和反向(成品→原材料)追溯查询。


一、涉及页面

页面 路径 改动说明
批次管理列表 /mes/wm/batch/list 添加"向前追溯"、"向后追溯"按钮
批次详情 /mes/wm/batch/detail 展示追溯结果时间线

二、API 接口

2.1 批次向前追溯

请求方式: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"
    }
  ]
}

2.2 批次向后追溯

请求方式:GET

请求路径/mes/wm/batch/backward-list

请求参数

参数 类型 必填 说明
code String 批次编码

响应示例:同向前追溯


三、前端实现要点

3.1 数据获取时机

用户点击"向前追溯"或"向后追溯"按钮时,调用对应接口获取追溯结果。

3.2 追溯结果展示

建议使用时间线组件展示追溯链路:

<!-- 向前追溯:原材料 → 成品 -->
<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>

3.3 无数据提示

当追溯结果为空时,显示友好提示:

<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>

四、业务流程图

4.1 批次向前追溯流程

┌─────────────┐
│  批次列表页  │
└──────┬──────┘
       │ 点击"向前追溯"
       ▼
┌─────────────────────────────────────┐
│  调用 GET /mes/wm/batch/forward-list │
│  参数: code = 当前批次编码            │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│  返回该批次产出的所有下游批次列表     │
│                                   │
│  追溯路径:                        │
│  库存事务(消耗) → 消耗单 → 报工记录  │
│  → 库存事务(产出) → 下游批次        │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│  以时间线形式展示追溯结果             │
│  可点击任一条目跳转到对应批次详情     │
└─────────────────────────────────────┘

4.2 批次向后追溯流程

┌─────────────┐
│  批次列表页  │
└──────┬──────┘
       │ 点击"向后追溯"
       ▼
┌─────────────────────────────────────┐
│  调用 GET /mes/wm/batch/backward-list│
│  参数: code = 当前批次编码            │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│  返回生产该批次所消耗的所有上游批次   │
│                                   │
│  追溯路径:                        │
│  库存事务(产出) → 产出单 → 报工记录  │
│  → 库存事务(消耗) → 上游批次        │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│  以时间线形式展示追溯结果             │
│  可点击任一条目跳转到对应批次详情     │
└─────────────────────────────────────┘

五、注意事项

5.1 数据完整性

  • 追溯功能依赖 mes_wm_transaction 库存事务表的数据完整性
  • 确保所有消耗和产出操作都正确生成了库存事务记录
  • biz_type 字段值:123 = 物料消耗,124 = 产品产出

5.2 性能考虑

  • 批次追溯采用递归查询,最大深度限制为 20 层
  • 对于复杂生产场景,可能返回大量数据,建议分页展示或限制展示数量

5.3 权限控制

  • 追溯查询需要 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 批次向后追溯

七、数据库变更说明

7.1 新增字段

以下表已添加 feedback_id 字段用于精确关联:

表名 新增字段 说明
mes_wm_item_consume feedback_id 关联报工记录编号
mes_wm_product_produce feedback_id 关联报工记录 ID

7.2 索引优化

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 初始版本,完成批次追溯功能修复