Files
my-mom-system/prd/mom系统生产领料单-页面开发说明文档.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

1191 lines
53 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产领料单 - 页面设计开发说明文档
> 版本: 1.0.0
> 创建日期: 2026-02-13
> 更新日期: 2026-02-13
> 所属模块: 仓储管理 > 生产领料
> 前端路由: `/mes/wm/issue`MOM 端);`/warehouse/issue`ERP 前端)
> **关联文档**: [erp与mom数据库表映射对照表](db/erp与mom数据库表映射对照表.md)[MOM系统数据升级方案-销售采购生产计划](db/mom系统数据升级方案-销售采购生产计划.md)[生产计划.md](生产计划.md)[mom系统生产订单-页面开发说明文档](mom系统生产订单-页面开发说明文档.md)
---
## 目录
0. [业务流程总览](#0-业务流程总览)
1. [页面概述](#1-页面概述)
2. [页面结构](#2-页面结构)
3. [列表页设计](#3-列表页设计)
4. [新增/编辑页设计](#4-新增编辑页设计)
5. [数据字段定义](#5-数据字段定义)
6. [按钮操作说明](#6-按钮操作说明)
7. [页面交互规则](#7-页面交互规则)
8. [接口调用说明](#8-接口调用说明)
9. [状态流转](#9-状态流转)
10. [业务规则](#10-业务规则)
11. [前端组件设计](#11-前端组件设计)
12. [数据模型](#12-数据模型)
---
## 0. 业务流程总览
### 0.1 生产领料单在 MOM/ERP 中的定位
生产领料单是 **生产工单 → 生产执行(物料出库)** 链条中的关键节点。当生产工单确认后,车间需要根据工单 BOM 物料组成从仓库领取原材料、零部件等生产所需物料。领料单管理从仓库到产线的物料流转,是库存管理与生产执行的衔接点。
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 生产计划单 │────►│ BOM运算/下发 │────►│ 生产工单 │────►│ BOM物料组成 │
│ (计划审核) │ │ (物料清单) │ │ (工单确认) │ │ (需求物料) │
└──────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘
│ 领料
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 库存扣减 │◄────│ 执行出库 │◄────│ 领料明细 │◄────│ ★ 领料单 │
│ (库存事务) │ │ (库存核心) │ │ (拣货确认) │ │ (当前页面) │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
```
### 0.2 端到端业务流程图
```
生产工单确认
┌─────────────────┐ BOM物料需求 ┌─────────────────┐
│ 生产工单 │ ──────────────────── │ pro_workorder_bom│
│ - 产品信息 │ │ (BOM物料组成) │
│ - 生产数量 │ │ - 物料编码/名称 │
└────────┬────────┘ │ - 预计使用量 │
│ └─────────────────┘
│ 创建领料单
┌─────────────────┐ 添加领料行 ┌─────────────────┐
│ ★ 生产领料单 │ ──────────────── ► │ 领料单行 │
│ - 领料单头信息 │ │ (wm_issue_line) │
│ - 工单/任务关联 │ │ - 物料信息 │
│ - 工作站信息 │ │ - 领料数量 │
└────────┬────────┘ │ - 批次号 │
│ └────────┬────────┘
│ 拣货(添加明细) │
▼ ▼
┌─────────────────┐ 执行出库 ┌─────────────────┐
│ 领料明细 │ ──────────────── ► │ 库存事务 │
│ (wm_issue_detail)│ │ - 仓库/库区/库位 │
│ - 仓库/库区/库位 │ │ - 出库数量 │
│ - 实际出库数量 │ │ - 库存扣减 │
└─────────────────┘ └─────────────────┘
```
### 0.3 生产领料单内部业务流程
| 阶段 | 操作 | 触发条件 | 结果 |
|------|------|----------|------|
| 1. 新建 | 点击「新增」 | 始终可用 | 打开新增页,领料单编号手动输入或自动生成,状态=草稿(PREPARE) |
| 2. 填写表头 | 填写领料单名称、选择工单/任务/工作站 | 新增/编辑状态 | 关联生产工单和生产任务 |
| 3. 添加领料行 | 添加物料行,指定物料和领料数量 | 新增/编辑状态 | 领料单行数据填充 |
| 4. 保存 | 点击「保存」 | 表单校验通过 | 数据持久化 |
| 5. 拣货(添加明细) | 为每个领料行添加出库明细 | 已保存 | 指定仓库、库区、库位、实际出库数量 |
| 6. 校验数量 | 系统校验领料行数量与明细数量匹配 | 执行出库前 | 确认数量无误 |
| 7. 执行出库 | 点击「执行出库」 | 已保存,有有效明细数据 | 调用库存核心扣减库存,状态→已完成(FINISHED) |
| 8. 删除 | 点击「删除」 | 仅草稿(PREPARE)状态 | 级联删除领料行,逻辑删除 |
### 0.4 上下游单据关系
| 上游单据 | 关联字段 | 说明 |
|----------|----------|------|
| 生产工单(pro_workorder) | workorder_id, workorder_code | 领料单关联的生产工单 |
| 生产任务(pro_task) | task_id, task_code | 领料单关联的生产任务(可选) |
| 工作站 | workstation_id, workstation_code | 领料对应的工作站 |
| 下游单据 | 关联字段 | 说明 |
|----------|----------|------|
| 库存事务 | issue_id | 执行出库后生成的库存事务记录 |
| 库存明细 | - | 库存扣减(仓库/库区/库位维度) |
### 0.5 三层数据结构
生产领料单采用 **头 → 行 → 明细** 三层结构:
| 层级 | 表名 | 说明 | 关系 |
|------|------|------|------|
| 头(Header) | wm_issue_header | 领料单头信息:单号、关联工单/任务、客户、状态 | 1 |
| 行(Line) | wm_issue_line | 领料物料行:物料编码、领料数量、批次号 | 1:N |
| 明细(Detail) | wm_issue_detail | 出库明细:仓库/库区/库位、实际出库数量 | 行 1:N |
```
wm_issue_header (领料单头)
├── wm_issue_line (领料行1: 物料A, 领料数量=100)
│ ├── wm_issue_detail (明细1: 仓库A-库区1-库位01, 数量=60)
│ └── wm_issue_detail (明细2: 仓库A-库区1-库位02, 数量=40)
└── wm_issue_line (领料行2: 物料B, 领料数量=50)
└── wm_issue_detail (明细1: 仓库B-库区2-库位03, 数量=50)
```
### 0.6 典型操作路径(用户故事)
| 场景 | 路径 |
|------|------|
| **按工单领料** | 列表 → 新增 → 选择生产工单 → 添加BOM物料行 → 保存 → 添加出库明细(拣货) → 执行出库 |
| **按任务领料** | 列表 → 新增 → 选择生产任务 → 自动关联工单 → 添加物料行 → 保存 → 拣货 → 出库 |
| **查看领料记录** | 列表 → 按工单编码/领料单号搜索 → 查看详情 |
| **删除草稿领料单** | 列表 → 勾选草稿状态记录 → 删除 |
---
## 1. 页面概述
### 1.1 功能说明
生产领料单页面用于管理生产过程中的物料领用。当生产工单确认后车间或仓库人员创建领料单从仓库中领取生产所需的原材料、零部件等物料。领料单支持按工单领料关联工单BOM物料或自主添加物料行领料完成后执行出库操作自动扣减库存。
### 1.2 业务场景
- **按工单领料**: 选择已确认的生产工单,根据工单 BOM 物料组成添加领料行
- **按任务领料**: 选择具体的生产任务,按任务需求物料进行领料
- **工作站领料**: 指定工作站,物料领出到具体工作站
- **分批领料**: 同一工单可创建多张领料单,分批次领取物料
- **拣货确认**: 每个领料行需添加出库明细(仓库/库区/库位/数量),支持分库位拣货
- **执行出库**: 领料明细确认后执行出库,系统自动扣减库存
### 1.3 页面截图参考
| 截图文件 | 说明 |
|----------|------|
| `screenshot/生产领料单-列表页.png` | 列表页 - 领料单列表,含搜索区、工具栏、数据表格 |
| `screenshot/生产领料单-新增页.png` | 新增页 - 表头表单 + 领料行子表 |
| `screenshot/生产领料单-查看页.png` | 查看页 - 只读模式,含领料明细 |
---
## 2. 页面结构
### 2.1 整体布局
```
┌─────────────────────────────────────────────────────────────────┐
│ 顶部导航栏 (64px) │
├────────┬────────────────────────────────────────────────────────┤
│ 左侧 │ 面包屑: 首页 / 仓储管理 / 生产领料 │
│ 菜单 │ ┌────────────────────────────────────────────────┐ │
│ (200px │ │ Tab标签: ● 生产领料 │ │
│ /64px)│ ├────────────────────────────────────────────────┤ │
│ │ │ 查询区域 (搜索条件) │ │
│ 仓储管 │ ├────────────────────────────────────────────────┤ │
│ 理 │ │ 工具栏 (操作按钮) │ │
│ ├生产 │ ├────────────────────────────────────────────────┤ │
│ 领料★ │ │ 数据表格 │ │
│ ├采购 │ │ │ │
│ 入库 │ ├────────────────────────────────────────────────┤ │
│ ├产品 │ │ 分页组件 │ │
│ 出库 │ └────────────────────────────────────────────────┘ │
├────────┴────────────────────────────────────────────────────────┤
```
### 2.2 页面模式
| 模式 | 说明 | 入口 |
|------|------|------|
| 列表页 | 默认视图,展示领料单列表 | 菜单点击「生产领料」 |
| 新增页 | 新建生产领料单,填写表头+添加领料物料行 | 列表页点击「新增」按钮 |
| 编辑页 | 修改已有领料单(仅草稿状态) | 列表页操作列点击「编辑」 |
| 查看页 | 只读查看领料单详情,含领料行和出库明细 | 列表页操作列点击「查看」 |
---
## 3. 列表页设计
### 3.1 搜索条件区域
| 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 |
|------|--------|------|----------|------|------|
| 1 | issueCode | 领料单编号 | el-input | 160px | 模糊搜索 |
| 2 | issueName | 领料单名称 | el-input | 160px | 模糊搜索 |
| 3 | workorderCode | 工单编码 | el-input | 140px | 模糊搜索关联工单 |
| 4 | workstationName | 工作站 | el-input | 140px | 模糊搜索 |
| 5 | status | 单据状态 | el-select | 120px | 下拉选择 |
| 6 | beginDate | 开始日期 | el-date-picker | 140px | 领料日期范围起 |
| 7 | endDate | 结束日期 | el-date-picker | 140px | 领料日期范围止 |
| 8 | - | 搜索 | el-button (primary) | - | 执行搜索 |
| 9 | - | 重置 | el-button (default) | - | 清空搜索条件 |
**单据状态选项:**
| 值 | 标签 | 标签颜色 |
|----|------|----------|
| PREPARE | 草稿 | info (灰色) |
| CONFIRMED | 已确认 | primary (蓝色) |
| APPROVED | 已审核 | success (绿色) |
| FINISHED | 已完成 | success (绿色) |
### 3.2 工具栏按钮
| 序号 | 按钮名称 | 图标 | 类型 | 权限标识 | 说明 |
|------|----------|------|------|----------|------|
| 1 | 新增 | el-icon-plus | success | mes:wm:issueheader:add | 打开新增生产领料单页面 |
| 2 | 修改 | el-icon-edit | primary | mes:wm:issueheader:edit | 修改选中领料单(需勾选) |
| 3 | 删除 | el-icon-delete | danger | mes:wm:issueheader:remove | 批量删除选中领料单(需勾选) |
| 4 | 导出 | el-icon-download | warning | mes:wm:issueheader:export | 导出领料单列表到Excel |
### 3.3 数据表格列定义
| 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 说明 |
|------|--------|--------|------|------|------|
| 0 | (复选框) | - | 55px | center | 多选列,用于批量操作 |
| 1 | 领料单编号 | issueCode | 150px | left | 蓝色链接可点击打开详情 |
| 2 | 领料单名称 | issueName | 200px | left | 领料单描述 |
| 3 | 工单编码 | workorderCode | 140px | left | 关联生产工单编码 |
| 4 | 任务编码 | taskCode | 140px | left | 关联生产任务编码(可为空) |
| 5 | 工作站 | workstationName | 120px | left | 工作站名称 |
| 6 | 客户名称 | clientName | 150px | left | 客户名称(可为空) |
| 7 | 领料日期 | issueDate | 120px | center | 领料日期 |
| 8 | 需求时间 | requiredTime | 150px | center | 需求时间 |
| 9 | 状态 | status | 80px | center | 状态标签(颜色区分) |
| 10 | 操作 | - | 200px | center | 操作按钮组 |
### 3.4 操作列按钮
操作列按钮根据领料单状态动态显隐:
**status = PREPARE草稿:**
| 按钮 | 颜色 | 权限 | 说明 |
|------|------|------|------|
| 查看 | success (绿色文字) | mes:wm:issueheader:query | 打开查看页(只读) |
| 编辑 | primary (蓝色文字) | mes:wm:issueheader:edit | 打开编辑页 |
| 删除 | danger (红色文字) | mes:wm:issueheader:remove | 确认后删除 |
| 执行出库 | warning (橙色文字) | mes:wm:issueheader:edit | 校验数量后执行出库 |
**status = FINISHED已完成:**
| 按钮 | 颜色 | 权限 | 说明 |
|------|------|------|------|
| 查看 | success (绿色文字) | mes:wm:issueheader:query | 打开查看页(只读) |
### 3.5 分页组件
| 属性 | 值 | 说明 |
|------|------|------|
| 默认每页条数 | 10 | 可选: 10, 20, 50, 100 |
| 布局 | total, sizes, prev, pager, next, jumper | 完整分页 |
| 总条数显示 | 共 {total} 条 | 右侧显示 |
---
## 4. 新增/编辑页设计
### 4.1 页面布局
新增/编辑页面为独立的全屏页面,包含表头表单区、领料行表格区和出库明细区三个部分。
```
┌──────────────────────────────────────────────────────────────┐
│ 生产领料单 [保存][取消][执行出库][收起] │
├──────────────────────────────────────────────────────────────┤
│ 表头表单区 (4列布局可折叠) │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │ 领料单编号│ 领料单名称│ 工单编码 │ 任务编码 │ │
│ │ 工作站编号│ 工作站名称│ 客户名称 │ 领料日期 │ │
│ │ 需求时间 │ 状态 │ 备注 │ │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
├──────────────────────────────────────────────────────────────┤
│ 领料物料行 [添加行] │
│ ┌──┬──────┬────┬────┬──┬──────┬──────┬──┐ │
│ │序│物料编│物料│规格│单│领料数│批次号│操│ │
│ │号│码 │名称│型号│位│量 │ │作│ │
│ └──┴──────┴────┴────┴──┴──────┴──────┴──┘ │
├──────────────────────────────────────────────────────────────┤
│ 出库明细(选中某行后展示) [添加明细] │
│ ┌──┬──────┬────┬────┬────┬────┬──────┬──┐ │
│ │序│物料编│仓库│库区│库位│批次│出库数│操│ │
│ │号│码 │ │ │ │号 │量 │作│ │
│ └──┴──────┴────┴────┴────┴────┴──────┴──┘ │
└──────────────────────────────────────────────────────────────┘
```
### 4.2 表头表单字段
表头采用 4 列栅格布局el-col :span="6"),每行 4 个字段。
| 序号 | 字段名 | 标签 | 组件类型 | 必填 | 默认值 | 可编辑 | 说明 |
|------|--------|------|----------|------|--------|--------|------|
| 1 | issueCode | 领料单编号 | el-input | 是 | - | 是 | 唯一编码,不可重复 |
| 2 | issueName | 领料单名称 | el-input | 是 | - | 是 | 领料单描述 |
| 3 | workorderId | 生产工单 | el-select / 选择 | 否 | - | 是 | 选择关联的生产工单 |
| 4 | workorderCode | 工单编码 | el-input | - | - | 否(只读) | 选择工单后自动带入 |
| 5 | taskId | 生产任务 | el-select / 选择 | 否 | - | 是 | 选择关联的生产任务 |
| 6 | taskCode | 任务编码 | el-input | - | - | 否(只读) | 选择任务后自动带入 |
| 7 | workstationId | 工作站 | el-select / 选择 | 否 | - | 是 | 选择领料工作站 |
| 8 | workstationCode | 工作站编号 | el-input | - | - | 否(只读) | 选择工作站后自动带入 |
| 9 | workstationName | 工作站名称 | el-input | - | - | 否(只读) | 选择工作站后自动带入 |
| 10 | clientId | 客户 | el-select / 选择 | 否 | - | 是 | 选择客户 |
| 11 | clientCode | 客户编码 | el-input | - | - | 否(只读) | 选择客户后带入 |
| 12 | clientName | 客户名称 | el-input | - | - | 否(只读) | 选择客户后带入 |
| 13 | issueDate | 领料日期 | el-date-picker | 否 | 当天 | 是 | 领料日期 |
| 14 | requiredTime | 需求时间 | el-date-picker | 否 | - | 是 | 需求交付时间 |
| 15 | status | 单据状态 | el-tag | - | PREPARE | 否(只读) | 标签显示 |
| 16 | remark | 备注 | el-input(textarea) | 否 | - | 是 | 多行文本 |
### 4.3 领料行子表wm_issue_line
领料行子表位于表头下方,标题为「领料物料行」。通过「添加行」按钮手动添加物料行或从工单 BOM 物料引入。
| 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 必填 | 说明 |
|------|--------|--------|------|----------|------|------|
| 1 | 序号 | - | 60px | 自动编号 | - | 行序号,自动递增 |
| 2 | 物料编码 | itemCode | 150px | el-input + 选择按钮 | 是 | 可点击「选择」弹窗选择物料 |
| 3 | 物料名称 | itemName | 200px | el-input | - | 只读,选择物料后自动带入 |
| 4 | 规格型号 | specification | 150px | el-input | 否 | 只读,选择物料后自动带入 |
| 5 | 单位 | unitOfMeasure | 80px | el-input | - | 只读 |
| 6 | 领料数量 | quantityIssued | 120px | el-input-number | 是 | 计划领料数量,必须>0 |
| 7 | 批次号 | batchCode | 120px | el-input | 否 | 物料批次号 |
| 8 | 备注 | remark | 150px | el-input | 否 | 行级备注 |
| 9 | 操作 | - | 120px | el-button | - | 编辑明细、删除按钮 |
> **注意**: 每个领料行可以包含多条出库明细wm_issue_detail即从不同仓库/库位拣货。
### 4.4 出库明细子表wm_issue_detail
选中领料行后显示该行的出库明细,用于拣货确认。
| 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 必填 | 说明 |
|------|--------|--------|------|----------|------|------|
| 1 | 序号 | - | 60px | 自动编号 | - | 行序号 |
| 2 | 物料编码 | itemCode | 140px | el-input | - | 只读,从领料行带入 |
| 3 | 物料名称 | itemName | 180px | el-input | - | 只读 |
| 4 | 规格型号 | specification | 120px | el-input | - | 只读 |
| 5 | 单位 | unitOfMeasure | 60px | el-input | - | 只读 |
| 6 | 仓库 | warehouseName | 120px | el-select | 是 | 选择出库仓库 |
| 7 | 库区 | locationName | 120px | el-select | 否 | 选择出库库区 |
| 8 | 库位 | areaName | 120px | el-select | 否 | 选择出库库位 |
| 9 | 批次号 | batchCode | 100px | el-input | 否 | 出库批次 |
| 10 | 出库数量 | quantity | 100px | el-input-number | 是 | 实际出库数量 |
| 11 | 备注 | remark | 120px | el-input | 否 | 备注 |
| 12 | 操作 | - | 80px | el-button | - | 删除按钮 |
> **校验规则**: 每个领料行的所有出库明细数量之和应等于领料数量quantityIssued
### 4.5 选择生产工单弹窗
点击工单旁的「选择」按钮,打开生产工单选择弹窗。
| 属性 | 值 |
|------|------|
| 弹窗标题 | 选择生产工单 |
| 弹窗宽度 | 900px |
| 选择模式 | 单选 |
**弹窗搜索区:**
| 组件 | 说明 |
|------|------|
| 工单编码 | 模糊搜索 |
| 工单名称 | 模糊搜索 |
| 产品名称 | 模糊搜索 |
| 搜索按钮 | 执行搜索 |
| 重置按钮 | 清空条件 |
**弹窗列表结构:**
| 列 | 字段 | 说明 |
|----|------|------|
| (单选) | - | 单选列 |
| 工单编码 | workorderCode | 工单编码 |
| 工单名称 | workorderName | 工单名称 |
| 产品编号 | productCode | 产品编号 |
| 产品名称 | productName | 产品名称 |
| 生产数量 | quantity | 生产数量 |
| 状态 | status | 工单状态 |
**选择交互:**
- 单选一条工单记录,点击「确定」按钮
- 选择后自动填充表头工单ID、工单编码
- 可选:自动根据工单 BOM 物料添加领料行
### 4.6 选择物料弹窗
点击物料编码旁的「选择」按钮,打开物料选择弹窗。
| 属性 | 值 |
|------|------|
| 弹窗标题 | 选择物料 |
| 弹窗宽度 | 800px |
| 选择模式 | 单选或多选 |
**弹窗列表结构:**
| 列 | 字段 | 说明 |
|----|------|------|
| 物料编码 | itemCode | 物料编码 |
| 物料名称 | itemName | 物料名称 |
| 规格型号 | specification | 规格型号 |
| 单位 | unitOfMeasure | 计量单位 |
| 物料分类 | itemTypeName | 分类名称 |
| 当前库存 | stockQuantity | 当前可用库存数量 |
### 4.7 表头折叠
点击「收起」按钮,表头表单区域收起,仅显示领料行子表和出库明细区;点击「展开」恢复。
---
## 5. 数据字段定义
### 5.1 领料单头表字段wm_issue_header
| 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|--------|-----------|------|------|------|--------|------|
| 领料单ID | issue_id | bigint | - | 是 | AUTO | 主键,自增 |
| 领料单编号 | issue_code | varchar | 64 | 是 | - | 唯一编码 |
| 领料单名称 | issue_name | varchar | 255 | 是 | - | 领料单描述 |
| 工作站ID | workstation_id | bigint | - | 否 | - | 外键 |
| 工作站编号 | workstation_code | varchar | 64 | 否 | - | 冗余 |
| 工作站名称 | workstation_name | varchar | 255 | 否 | - | 冗余 |
| 生产工单ID | workorder_id | bigint | - | 否 | - | 外键 → pro_workorder |
| 工单编码 | workorder_code | varchar | 64 | 否 | - | 冗余 |
| 生产任务ID | task_id | bigint | - | 否 | - | 外键 → pro_task |
| 任务编码 | task_code | varchar | 64 | 否 | - | 冗余 |
| 客户ID | client_id | bigint | - | 否 | - | |
| 客户编码 | client_code | varchar | 64 | 否 | - | |
| 客户名称 | client_name | varchar | 255 | 否 | - | |
| 客户简称 | client_nick | varchar | 128 | 否 | - | |
| 需求时间 | required_time | datetime | - | 否 | - | 需求交付时间 |
| 领料日期 | issue_date | datetime | - | 否 | 当天 | 领料日期 |
| 单据状态 | status | varchar | 64 | 否 | PREPARE | 草稿/已确认/已完成 |
| 备注 | remark | varchar | 500 | 否 | - | |
| 创建者 | create_by | varchar | 64 | 否 | - | |
| 创建时间 | create_time | datetime | - | 否 | - | |
| 更新者 | update_by | varchar | 64 | 否 | - | |
| 更新时间 | update_time | datetime | - | 否 | - | |
### 5.2 领料行表字段wm_issue_line
| 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 说明 |
|--------|-----------|------|------|------|------|
| 行ID | line_id | bigint | - | 是 | 主键,自增 |
| 领料单ID | issue_id | bigint | - | 是 | 外键 → wm_issue_header |
| 库存ID | material_stock_id | bigint | - | 否 | 库存记录关联 |
| 物料ID | item_id | bigint | - | 是 | 外键 → md_item |
| 物料编码 | item_code | varchar | 64 | 否 | 冗余 |
| 物料名称 | item_name | varchar | 255 | 否 | 冗余 |
| 规格型号 | specification | varchar | 500 | 否 | |
| 单位 | unit_of_measure | varchar | 64 | 否 | |
| 单位名称 | unit_name | varchar | 128 | 否 | |
| 领料数量 | quantity_issued | double(12,2) | - | 是 | 计划领料数量 |
| 已拣货数量 | quantity | double(12,2) | - | 否 | 实际拣货数量(明细汇总) |
| 批次ID | batch_id | bigint | - | 否 | |
| 批次号 | batch_code | varchar | 255 | 否 | |
| 备注 | remark | varchar | 500 | 否 | |
| 创建者 | create_by | varchar | 64 | 否 | |
| 创建时间 | create_time | datetime | - | 否 | |
| 更新者 | update_by | varchar | 64 | 否 | |
| 更新时间 | update_time | datetime | - | 否 | |
### 5.3 领料明细表字段wm_issue_detail
| 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 说明 |
|--------|-----------|------|------|------|------|
| 明细行ID | detail_id | bigint | - | 是 | 主键,自增 |
| 领料单ID | issue_id | bigint | - | 是 | 外键 → wm_issue_header |
| 行ID | line_id | bigint | - | 是 | 外键 → wm_issue_line |
| 库存ID | material_stock_id | varchar | 64 | 否 | 库存记录关联 |
| 物料ID | item_id | bigint | - | 是 | 外键 → md_item |
| 物料编码 | item_code | varchar | 64 | 否 | 冗余 |
| 物料名称 | item_name | varchar | 255 | 否 | 冗余 |
| 规格型号 | specification | varchar | 500 | 否 | |
| 单位 | unit_of_measure | varchar | 64 | 否 | |
| 单位名称 | unit_name | varchar | 128 | 否 | |
| 出库数量 | quantity | decimal(12,2) | - | 是 | 实际出库数量 |
| 批次ID | batch_id | bigint | - | 否 | |
| 批次号 | batch_code | varchar | 255 | 否 | |
| 仓库ID | warehouse_id | bigint | - | 是 | |
| 仓库编码 | warehouse_code | varchar | 64 | 否 | |
| 仓库名称 | warehouse_name | varchar | 255 | 否 | |
| 库区ID | location_id | bigint | - | 否 | |
| 库区编码 | location_code | varchar | 64 | 否 | |
| 库区名称 | location_name | varchar | 255 | 否 | |
| 库位ID | area_id | bigint | - | 否 | |
| 库位编码 | area_code | varchar | 64 | 否 | |
| 库位名称 | area_name | varchar | 255 | 否 | |
| 备注 | remark | varchar | 500 | 否 | |
| 创建者 | create_by | varchar | 64 | 否 | |
| 创建时间 | create_time | datetime | - | 否 | |
| 更新者 | update_by | varchar | 64 | 否 | |
| 更新时间 | update_time | datetime | - | 否 | |
---
## 6. 按钮操作说明
### 6.1 列表页工具栏按钮
#### 6.1.1 新增按钮
| 项目 | 说明 |
|------|------|
| 触发条件 | 始终可用 |
| 操作 | 路由跳转到新增生产领料单页面 |
| 权限 | mes:wm:issueheader:add |
| 路由 | `/warehouse/issue/new` |
#### 6.1.2 修改按钮
| 项目 | 说明 |
|------|------|
| 触发条件 | 勾选一条记录 |
| 前置校验 | 仅草稿(PREPARE)状态允许修改 |
| 操作 | 路由跳转到编辑页面 |
| 权限 | mes:wm:issueheader:edit |
#### 6.1.3 删除按钮(批量)
| 项目 | 说明 |
|------|------|
| 触发条件 | 勾选一条或多条记录 |
| 前置校验 | 仅草稿(PREPARE)状态允许删除;非草稿状态回滚并提示 |
| 操作 | 弹出确认框,确认后调用删除接口 |
| 权限 | mes:wm:issueheader:remove |
| 级联 | 同时删除关联的领料行(wm_issue_line) |
#### 6.1.4 导出按钮
| 项目 | 说明 |
|------|------|
| 触发条件 | 始终可用 |
| 操作 | 按当前搜索条件导出领料单列表到Excel |
| 权限 | mes:wm:issueheader:export |
### 6.2 操作列按钮
#### 6.2.1 查看按钮
| 项目 | 说明 |
|------|------|
| 显示条件 | 所有状态均显示 |
| 操作 | 路由跳转到查看页面(只读模式) |
| 权限 | mes:wm:issueheader:query |
#### 6.2.2 编辑按钮
| 项目 | 说明 |
|------|------|
| 显示条件 | 仅 status = PREPARE草稿 |
| 操作 | 路由跳转到编辑页面 |
| 权限 | mes:wm:issueheader:edit |
#### 6.2.3 删除按钮(行操作)
| 项目 | 说明 |
|------|------|
| 显示条件 | 仅 status = PREPARE草稿 |
| 操作 | 弹出确认框,确认后删除,级联删除关联领料行 |
| 权限 | mes:wm:issueheader:remove |
#### 6.2.4 执行出库按钮
| 项目 | 说明 |
|------|------|
| 显示条件 | status = PREPARE草稿且已有领料行和出库明细 |
| 前置校验 | 至少有一条领料行;每行明细数量不能为空;校验明细数量与领料数量匹配 |
| 操作 | 调用执行出库接口,库存核心扣减库存 |
| 权限 | mes:wm:issueheader:edit |
| 结果 | status → FINISHED |
### 6.3 新增/编辑页按钮
#### 6.3.1 保存按钮
| 项目 | 说明 |
|------|------|
| 位置 | 页面右上角 |
| 颜色 | primary (蓝色) |
| 触发条件 | 表单校验通过 |
| 操作 | 保存领料单头数据 |
| 成功提示 | "保存成功" |
#### 6.3.2 取消按钮
| 项目 | 说明 |
|------|------|
| 位置 | 保存按钮右侧 |
| 颜色 | default (灰色) |
| 操作 | 返回列表页 |
#### 6.3.3 执行出库按钮
| 项目 | 说明 |
|------|------|
| 位置 | 取消按钮右侧 |
| 颜色 | warning (橙色) |
| 显示条件 | 编辑模式,已保存 |
| 前置条件 | 有有效的领料明细数据 |
| 操作 | 调用执行出库接口 |
#### 6.3.4 收起/展开按钮
| 项目 | 说明 |
|------|------|
| 位置 | 页面右上角最右侧 |
| 操作 | 折叠/展开表头表单区域 |
#### 6.3.5 添加行按钮(领料行区)
| 项目 | 说明 |
|------|------|
| 位置 | 领料物料行区域右上角 |
| 颜色 | primary (蓝色) |
| 操作 | 在领料行子表末尾添加一空行,可手动选择物料并填写领料数量 |
| 显示条件 | 仅编辑/新增状态显示 |
#### 6.3.6 删除行按钮(领料行操作列)
| 项目 | 说明 |
|------|------|
| 位置 | 每行操作列 |
| 颜色 | danger (红色文字) |
| 操作 | 删除当前领料行及其关联的所有出库明细 |
| 显示条件 | 仅编辑状态显示 |
#### 6.3.7 添加明细按钮(出库明细区)
| 项目 | 说明 |
|------|------|
| 位置 | 出库明细区域右上角 |
| 颜色 | primary (蓝色) |
| 操作 | 为当前选中的领料行添加一条出库明细,需选择仓库/库区/库位和出库数量 |
| 显示条件 | 仅编辑/新增状态显示,需先选中领料行 |
---
## 7. 页面交互规则
### 7.1 列表页交互
| 序号 | 交互场景 | 交互规则 |
|------|----------|----------|
| 1 | 页面首次加载 | 默认加载第1页数据按创建时间降序排列 |
| 2 | 搜索操作 | 点击搜索按钮,重置 pageNum=1 |
| 3 | 领料单编号点击 | 点击编号列蓝色链接,路由跳转到查看页面 |
| 4 | 状态标签 | el-tag 组件:草稿=info(灰), 已确认=primary(蓝), 已完成=success(绿) |
| 5 | 批量操作 | 勾选多条记录后,批量操作按钮启用 |
| 6 | 删除校验 | 仅草稿状态允许删除,非草稿状态提示"只能删除草稿状态的单据!" |
| 7 | 执行出库校验 | 需有有效领料明细,明细数量不能为空 |
### 7.2 新增/编辑页交互
| 序号 | 交互场景 | 交互规则 |
|------|----------|----------|
| 1 | 页面加载(新增) | 空白表单,领料日期默认当天,状态=草稿 |
| 2 | 页面加载(编辑) | 调用详情接口加载领料单头、领料行和出库明细 |
| 3 | 选择工单 | 点击「选择」→ 打开工单选择弹窗 → 选中工单 → 确定 → 自动填充工单信息 |
| 4 | 选择任务 | 点击「选择」→ 打开任务选择弹窗 → 选中任务 → 确定 → 自动填充任务信息和关联工单 |
| 5 | 选择工作站 | 点击「选择」→ 打开工作站选择弹窗 → 选中工作站 → 确定 |
| 6 | 添加物料行 | 点击「添加行」→ 新增空行 → 选择物料 → 填写领料数量 |
| 7 | 选择物料 | 物料编码旁「选择」→ 打开物料弹窗 → 选中后自动填充物料信息 |
| 8 | 添加出库明细 | 选中领料行 → 点击「添加明细」→ 选择仓库/库区/库位/填写数量 |
| 9 | 仓库联动 | 选择仓库后,库区下拉框刷新为该仓库下的库区;选择库区后,库位刷新为该库区下的库位 |
| 10 | 保存操作 | 前端表单校验 → 调用保存接口 → 成功提示 |
| 11 | 执行出库 | 校验领料行和明细数量 → 调用执行出库接口 → 库存扣减 → 状态变为已完成 |
| 12 | 领料单编号唯一 | 保存时后端校验编号唯一性,重复则提示"领料单编号已存在" |
| 13 | 表头折叠 | 点击「收起」→ 表头折叠;点击「展开」→ 恢复 |
### 7.3 表单校验规则
#### 表头校验
| 字段 | 规则 | 提示信息 |
|------|------|----------|
| issueCode | 必填,唯一 | 领料单编号不能为空 / 编号已存在 |
| issueName | 必填 | 领料单名称不能为空 |
#### 领料行校验
| 字段 | 规则 | 提示信息 |
|------|------|----------|
| itemId | 必填 | 请选择物料 |
| quantityIssued | 必填min=0.01 | 领料数量必须大于0 |
#### 出库明细校验
| 字段 | 规则 | 提示信息 |
|------|------|----------|
| warehouseId | 必填 | 请选择仓库 |
| quantity | 必填min=0.01 | 出库数量必须大于0 |
#### 业务校验
| 规则 | 说明 |
|------|------|
| 至少一行领料行 | 执行出库时至少要有一条领料行 |
| 明细数量校验 | 每个领料行的出库明细数量之和应等于领料数量 |
| 明细数量不为空 | 出库明细中数量(transactionQuantity)不能为空 |
| 有效明细数据 | 执行出库前需有有效的明细数据 |
---
## 8. 接口调用说明
### 8.1 接口总览
| 序号 | 功能 | 方法 | 路径 | 说明 |
|------|------|------|------|------|
| 1 | 查询领料单列表 | GET | /mes/wm/issueheader/list | 分页查询领料单列表 |
| 2 | 获取领料单详情 | GET | /mes/wm/issueheader/{issueId} | 获取单条领料单详情 |
| 3 | 新增领料单 | POST | /mes/wm/issueheader | 创建新领料单头 |
| 4 | 修改领料单 | PUT | /mes/wm/issueheader | 更新领料单头 |
| 5 | 删除领料单 | DELETE | /mes/wm/issueheader/{issueIds} | 批量删除领料单,级联删除领料行 |
| 6 | 执行出库 | PUT | /mes/wm/issueheader/{issueId} | 执行出库,扣减库存 |
| 7 | 导出领料单 | POST | /mes/wm/issueheader/export | 导出领料单列表到Excel |
| 8 | 校验数量 | GET | /mes/wm/issueheader/checkQuantity/{issueId} | 校验领料行数量与明细数量匹配 |
| 9 | 查询领料行 | GET | /mes/wm/issueline/list | 分页查询领料行 |
| 10 | 新增领料行 | POST | /mes/wm/issueline | 添加领料行 |
| 11 | 修改领料行 | PUT | /mes/wm/issueline | 更新领料行 |
| 12 | 删除领料行 | DELETE | /mes/wm/issueline/{lineIds} | 删除领料行 |
| 13 | 查询出库明细 | GET | /mes/wm/issuedetail/list | 查询出库明细 |
| 14 | 新增出库明细 | POST | /mes/wm/issuedetail | 添加出库明细 |
| 15 | 修改出库明细 | PUT | /mes/wm/issuedetail | 更新出库明细 |
| 16 | 删除出库明细 | DELETE | /mes/wm/issuedetail/{detailIds} | 删除出库明细 |
| 17 | 选择生产工单 | GET | /mes/pro/workorder/list | 工单选择弹窗数据 |
| 18 | 选择物料 | GET | /mes/md/mditem/list | 物料选择弹窗数据 |
| 19 | 选择仓库 | GET | /mes/wm/warehouse/list | 仓库选择数据 |
| 20 | 选择库区 | GET | /mes/wm/location/list | 库区选择数据 |
| 21 | 选择库位 | GET | /mes/wm/area/list | 库位选择数据 |
### 8.2 接口详细说明
#### 8.2.1 查询领料单列表
```
GET /mes/wm/issueheader/list
```
**请求参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | integer | 否 | 页码默认1 |
| pageSize | integer | 否 | 每页数默认10 |
| issueCode | string | 否 | 领料单编号(模糊) |
| issueName | string | 否 | 领料单名称(模糊) |
| workorderCode | string | 否 | 工单编码(模糊) |
| workstationName | string | 否 | 工作站名称(模糊) |
| status | string | 否 | 单据状态 |
| beginIssueDate | string | 否 | 领料日期起 (yyyy-MM-dd) |
| endIssueDate | string | 否 | 领料日期止 (yyyy-MM-dd) |
**响应示例:**
```json
{
"total": 15,
"rows": [
{
"issueId": 1,
"issueCode": "ISSUE20260213001",
"issueName": "组装电脑5400领料",
"workorderId": 10,
"workorderCode": "WO20260213001",
"taskId": null,
"taskCode": null,
"workstationId": 5,
"workstationCode": "WS005",
"workstationName": "组装线A",
"clientName": "客户A",
"issueDate": "2026-02-13 10:00:00",
"requiredTime": "2026-02-15 08:00:00",
"status": "PREPARE"
}
],
"code": 200,
"msg": "查询成功"
}
```
#### 8.2.2 获取领料单详情
```
GET /mes/wm/issueheader/{issueId}
```
**路径参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| issueId | integer | 是 | 领料单ID |
**响应:** 返回领料单头详情对象。领料行和出库明细需分别通过 `/mes/wm/issueline/list``/mes/wm/issuedetail/list` 查询。
#### 8.2.3 新增领料单
```
POST /mes/wm/issueheader
```
**请求体:**
```json
{
"issueCode": "ISSUE20260213001",
"issueName": "组装电脑5400领料",
"workorderId": 10,
"workorderCode": "WO20260213001",
"workstationId": 5,
"workstationCode": "WS005",
"workstationName": "组装线A",
"clientId": 1,
"clientCode": "KH001",
"clientName": "客户A",
"issueDate": "2026-02-13",
"requiredTime": "2026-02-15",
"remark": ""
}
```
**说明:** 校验领料单编号唯一性。
#### 8.2.4 修改领料单
```
PUT /mes/wm/issueheader
```
**请求体:** 同新增,但包含 `issueId`
#### 8.2.5 删除领料单
```
DELETE /mes/wm/issueheader/{issueIds}
```
**路径参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| issueIds | string | 是 | 领料单ID多个用逗号分隔 |
**业务规则:** 仅允许删除草稿(PREPARE)状态;级联删除关联的 `wm_issue_line` 行。事务操作,非草稿状态回滚。
#### 8.2.6 执行出库
```
PUT /mes/wm/issueheader/{issueId}
```
**路径参数:**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| issueId | integer | 是 | 领料单ID |
**业务规则:**
1. 校验领料单下有领料行
2. 获取所有出库明细事务数据IssueTxBean
3. 验证明细数据非空
4. 验证每条明细的事务数量不为空
5. 调用库存核心执行出库storageCoreService.processIssue
6. 更新领料单状态为 FINISHED
#### 8.2.7 校验数量
```
GET /mes/wm/issueheader/checkQuantity/{issueId}
```
**说明:** 校验领料单下每个领料行的领料数量与其出库明细数量之和是否匹配。返回 `true`(匹配)或 `false`(不匹配)。
#### 8.2.8 领料行 CRUD
```
GET /mes/wm/issueline/list # 查询领料行列表
POST /mes/wm/issueline # 新增领料行
PUT /mes/wm/issueline # 修改领料行
DELETE /mes/wm/issueline/{lineIds} # 删除领料行
```
#### 8.2.9 出库明细 CRUD
```
GET /mes/wm/issuedetail/list # 查询出库明细列表
POST /mes/wm/issuedetail # 新增出库明细
PUT /mes/wm/issuedetail # 修改出库明细
DELETE /mes/wm/issuedetail/{detailIds} # 删除出库明细
```
---
## 9. 状态流转
### 9.1 领料单状态流转图
```
┌──────────────┐
│ │
│ 草稿 │
│ (PREPARE) │
│ │
└──────┬───────┘
│ [执行出库]
│ (校验通过,库存扣减)
┌──────────────┐
│ │
│ 已完成 │
│ (FINISHED) │
│ │
└──────────────┘
```
### 9.2 状态说明
| 状态 | 编码 | 可执行操作 | 说明 |
|------|------|-----------|------|
| 草稿 | PREPARE | 编辑、保存、删除、添加领料行、添加出库明细、执行出库 | 初始状态,可自由编辑 |
| 已完成 | FINISHED | 查看 | 已执行出库,库存已扣减,不可修改 |
> **注意**: 领料单状态流转较简单,草稿状态直接通过「执行出库」变为已完成。如业务需要可扩展为:草稿 → 已确认 → 已完成 的三段式流程。
---
## 10. 业务规则
### 10.1 编码规则
| 规则 | 说明 |
|------|------|
| 格式 | 用户手动输入或按规则自动生成 |
| 唯一性 | 领料单编号全局唯一,后端校验 |
### 10.2 领料规则
| 规则 | 说明 |
|------|------|
| 关联工单 | 领料单可关联生产工单,从工单 BOM 物料中选择需要领出的物料 |
| 分批领料 | 同一工单可创建多张领料单,分批次领取 |
| 物料来源 | 可从工单 BOM 引入,也可手动添加物料行 |
### 10.3 出库规则
| 规则 | 说明 |
|------|------|
| 三层结构 | 领料单头 → 领料行(物料) → 出库明细(仓库/库位) |
| 拣货确认 | 每个领料行需添加出库明细,指定从哪个仓库/库区/库位领出多少数量 |
| 数量匹配 | 每个领料行的出库明细数量之和应等于领料数量 |
| 库存扣减 | 执行出库时,系统按明细中的仓库/库区/库位扣减对应库存 |
| 不可逆 | 执行出库后状态为已完成,不可回退(如需退回需创建退料单) |
### 10.4 删除规则
| 规则 | 说明 |
|------|------|
| 前置条件 | 仅草稿(PREPARE)状态允许删除 |
| 级联删除 | 删除领料单头时级联删除所有领料行(wm_issue_line) |
| 事务保证 | 删除操作在事务中执行,任何一条非草稿状态都会回滚 |
---
## 11. 前端组件设计
### 11.1 文件结构
```
src/
├── api/
│ └── warehouse/
│ ├── issue.ts # 领料单头API
│ ├── issueLine.ts # 领料行API
│ └── issueDetail.ts # 出库明细API
├── views/
│ └── Warehouse/
│ └── Issue/
│ ├── index.vue # 领料单列表页
│ ├── form.vue # 领料单新增/编辑/查看页
│ └── components/
│ ├── IssueHeaderForm.vue # 表头表单组件
│ ├── IssueLineTable.vue # 领料行子表组件
│ ├── IssueDetailTable.vue # 出库明细子表组件
│ ├── WorkorderSelectDialog.vue # 选择工单弹窗
│ ├── ItemSelectDialog.vue # 选择物料弹窗
│ └── WarehouseSelector.vue # 仓库/库区/库位级联选择器
```
### 11.2 路由配置
```javascript
// src/router/index.ts
{
path: '/warehouse',
component: Layout,
meta: { title: '仓储管理', icon: 'el-icon-house' },
children: [
{
path: 'issue',
name: 'IssueList',
component: () => import('@/views/Warehouse/Issue/index.vue'),
meta: { title: '生产领料', icon: 'el-icon-box' }
},
{
path: 'issue/new',
name: 'IssueNew',
component: () => import('@/views/Warehouse/Issue/form.vue'),
meta: { title: '新增领料单', activeMenu: '/warehouse/issue' },
hidden: true
},
{
path: 'issue/edit/:id',
name: 'IssueEdit',
component: () => import('@/views/Warehouse/Issue/form.vue'),
meta: { title: '编辑领料单', activeMenu: '/warehouse/issue' },
hidden: true
},
{
path: 'issue/view/:id',
name: 'IssueView',
component: () => import('@/views/Warehouse/Issue/form.vue'),
meta: { title: '查看领料单', activeMenu: '/warehouse/issue' },
hidden: true
}
]
}
```
---
## 12. 数据模型
### 12.1 表关系图
```
┌──────────────────────────┐ ┌──────────────────────────┐
│ pro_workorder │ │ pro_task │
│ (生产工单) │ │ (生产任务) │
│ workorder_id (PK) │ │ task_id (PK) │
│ workorder_code │ │ task_code │
└──────────┬───────────────┘ └──────────┬───────────────┘
│ │
│ workorder_id (FK) │ task_id (FK)
▼ ▼
┌──────────────────────────────────────────────────────────┐
│ wm_issue_header │
│ (生产领料单头) │
│ │
│ issue_id (PK) │
│ issue_code, issue_name │
│ workorder_id, workorder_code │
│ task_id, task_code │
│ workstation_id, workstation_code, workstation_name │
│ client_id, client_code, client_name │
│ issue_date, required_time, status │
└──────────────────────┬───────────────────────────────────┘
│ 1:N
┌──────────────────────────────────────────────────────────┐
│ wm_issue_line │
│ (领料行) │
│ │
│ line_id (PK) │
│ issue_id (FK) │
│ item_id, item_code, item_name │
│ specification, unit_of_measure │
│ quantity_issued (领料数量) │
│ batch_code │
└──────────────────────┬───────────────────────────────────┘
│ 1:N
┌──────────────────────────────────────────────────────────┐
│ wm_issue_detail │
│ (出库明细) │
│ │
│ detail_id (PK) │
│ issue_id (FK), line_id (FK) │
│ item_id, item_code, item_name │
│ warehouse_id, warehouse_code, warehouse_name │
│ location_id, location_code, location_name │
│ area_id, area_code, area_name │
│ quantity (出库数量) │
│ batch_code │
└──────────────────────────────────────────────────────────┘
```
### 12.2 数据同步方向
```
MOM (wm_issue_header / line / detail) ──同步──► ERP
```
- 同步方向: MOM → ERP反向同步领料数据回传
- 同步触发: 执行出库后同步领料数据
---
## 附录A: 状态标签颜色映射
```javascript
// 状态标签类型映射
const statusTagMap = {
'PREPARE': 'info', // 灰色 - 草稿
'CONFIRMED': 'primary', // 蓝色 - 已确认
'APPROVED': 'success', // 绿色 - 已审核
'FINISHED': 'success' // 绿色 - 已完成
}
// 状态标签文字映射
const statusLabelMap = {
'PREPARE': '草稿',
'CONFIRMED': '已确认',
'APPROVED': '已审核',
'FINISHED': '已完成'
}
```
---
## 附录B: 权限标识汇总
| 权限标识 | 说明 | 对应操作 |
|----------|------|----------|
| mes:wm:issueheader:list | 列表查询 | 查看领料单列表 |
| mes:wm:issueheader:query | 详情查询 | 查看领料单详情 |
| mes:wm:issueheader:add | 新增 | 新增领料单 |
| mes:wm:issueheader:edit | 编辑 | 修改领料单、执行出库 |
| mes:wm:issueheader:remove | 删除 | 删除领料单 |
| mes:wm:issueheader:export | 导出 | 导出领料单列表 |
---
## 附录C: 库存出库事务说明
执行出库时,系统根据出库明细(wm_issue_detail)生成库存事务(IssueTxBean),调用库存核心服务(storageCoreService.processIssue)执行以下操作:
1. **校验库存**: 检查指定仓库/库区/库位的物料库存是否充足
2. **扣减库存**: 按明细中的数量从对应库位扣减库存
3. **记录事务**: 生成库存出库事务记录
4. **更新状态**: 领料单状态变为 FINISHED
```
wm_issue_detail (出库明细)
▼ 生成事务
IssueTxBean
▼ 调用库存核心
storageCoreService.processIssue()
├── 校验库存充足
├── 扣减仓库/库区/库位库存
├── 生成库存事务记录
└── 返回执行结果
```
---
## 修订历史
| 版本 | 日期 | 修订内容 | 修订人 |
|------|------|----------|--------|
| 1.0.0 | 2026-02-13 | 初始版本,基于后端 WmIssueHeader/WmIssueLine/WmIssueDetail 实体类、WmIssueHeaderController 控制器及 wm_issue_header/line/detail 表结构编写完整页面开发说明 | System |