11 KiB
11 KiB
库存盘点组件库存调拨功能开发说明
01-功能内容
本次功能在库存盘点组件中增加轻量级“库存调拨”能力,应用页面为:
src/views/WarehouseManagement/InventoryCheck/index.vue
功能目标:
- 在库存盘点列表每一行增加“调拨”操作。
- 点击“调拨”后弹出库存调拨窗口。
- 自动带出当前行物料名称、图号/型号、原库位、原库存数。
- 支持选择已有目标库位。
- 支持在弹窗中输入新库位名称,并一键新增库位。
- 新增库位成功后自动刷新库位下拉,并回填为目标库位。
- 输入调拨数量后,提交时从原库位库存数中扣减该数量。
- 目标库位已有同物料库存时累加库存。
- 目标库位没有同物料库存时新增物料货位库存记录。
- 调拨成功后关闭弹窗并刷新库存盘点列表。
- 后端保留调拨记录,记录调拨前后库存、原库位、目标库位、操作人和操作时间。
本次不做完整调拨单流程,不包含审批、打印、调出确认、调入确认、外协调拨和跨仓库复杂流转。
02-程序开发步骤
-
梳理库存盘点页面现状:
- 查询页面现有字段:
库存、货位流水号、货位名称、物料与货位流水号。 - 确认现有接口:
仓储管理_库存盘点_查询、仓储管理_库存盘点_货位数量_编辑数据、仓储管理_库存盘点_物料货位数量_增加数据。
- 查询页面现有字段:
-
梳理库位管理现有接口:
- 查询库位:
仓储管理_库位_查询。 - 验证库位是否存在:
仓储管理_库位_验证是否存在。 - 新增库位:
仓储管理_库位_增加数据。
- 查询库位:
-
前端开发:
- 在库存盘点表格操作列增加“调拨”按钮。
- 新增
transferDialogVisible、transferLocationAdding、transferSubmitting状态。 - 新增
transferForm表单对象。 - 新增库存调拨弹窗。
- 新增
openTransfer(row)打开弹窗方法。 - 新增
handleTransferLocationChange(value)同步目标库位名称。 - 新增
selectTransferLocation(locationName)新库位新增后回填目标库位。 - 新增
addTransferLocation()一键新增库位。 - 新增
submitTransfer()提交调拨。
-
后端设计:
- 新增 SQL 脚本:
sql/仓储管理_库存盘点_库存调拨.sql。 - 新增调拨记录表:
库存盘点_调拨记录。 - 新增存储过程:
仓储管理_库存盘点_库存调拨。 - 存储过程使用事务,确保原库位扣减、目标库位增加、新增目标库存记录、累计库存更新、调拨记录写入同时成功或失败。
- 新增 SQL 脚本:
-
数据库创建:
- 已连接 SQL Server:
192.168.1.27。 - 已在数据库
ERPTOOL_JY_20250826Back中执行脚本。 - 已确认
库存盘点_调拨记录和仓储管理_库存盘点_库存调拨创建成功。
- 已连接 SQL Server:
03-推进台账
| 轮次 | 做了什么 | 改了哪些文件 | 验证了什么 | 下一步 |
|---|---|---|---|---|
| 1 | 生成初版库存调拨设计方案,偏完整调拨单流程 | 库存调拨功能设计方案.md |
参考了仓储模块现有 TransferQuery、InventoryQuery |
根据实际应用场景收敛方案 |
| 2 | 按用户补充场景重写方案,聚焦库存盘点组件内调拨 | 库存调拨功能设计方案.md |
确认 InventoryCheck/index.vue 已有库存、库位和新增物料货位接口 |
开始前端开发 |
| 3 | 开发前端调拨入口和弹窗 | src/views/WarehouseManagement/InventoryCheck/index.vue |
Vue 模板解析输出 template ok,脚本解析输出 script ok |
设计后端原子调拨接口 |
| 4 | 连接 SQL Server,读取相关存储过程和表结构 | 无代码文件变更 | 成功连接 ERPTOOL_JY_20250826Back,确认 SQL Server 2008;读取现有盘点、库位相关过程 |
编写调拨存储过程 |
| 5 | 新增存储过程脚本,适配普通物料和通用件 | sql/仓储管理_库存盘点_库存调拨.sql、src/views/WarehouseManagement/InventoryCheck/index.vue |
SQL NOEXEC 编译检查输出 sql compile ok;前端补传 类型 参数 |
创建数据库对象 |
| 6 | 在数据库中创建调拨记录表和调拨存储过程 | 数据库对象:库存盘点_调拨记录、仓储管理_库存盘点_库存调拨 |
查询 sys.objects 确认对象存在;查询参数和表字段确认结构 |
做页面联调和实际数据调拨测试 |
| 7 | 按要求生成开发说明文档 | 库存调拨功能开发说明.md |
汇总开发内容、验证证据、任务矩阵和决策记录 | 等待业务数据联调 |
04-任务矩阵
| 任务编号 | 任务名称 | 状态 | 验收标准 |
|---|---|---|---|
| INV-TR-001 | 明确应用场景 | 已完成 | 方案明确为库存盘点组件内调拨,不做完整调拨单 |
| INV-TR-002 | 编写设计方案 | 已完成 | 库存调拨功能设计方案.md 已按盘点调拨场景重写 |
| INV-TR-003 | 增加表格调拨按钮 | 已完成 | InventoryCheck/index.vue 操作列出现“调拨”按钮 |
| INV-TR-004 | 增加调拨弹窗 | 已完成 | 弹窗展示物料、图号、原库位、原库存数、目标库位、新库位、调拨数量、备注 |
| INV-TR-005 | 支持选择目标库位 | 已完成 | 目标库位使用现有 storageLocation 下拉,变化时同步目标库位名称 |
| INV-TR-006 | 支持一键新建库位 | 已完成 | 调用 仓储管理_库位_验证是否存在 和 仓储管理_库位_增加数据,成功后刷新并回填 |
| INV-TR-007 | 调拨前端校验 | 已完成 | 校验库存流水号、库存大于 0、目标库位非空、目标库位不等于原库位、调拨数量合法 |
| INV-TR-008 | 提交调拨接口调用 | 已完成 | 前端调用 仓储管理_库存盘点_库存调拨,传入调拨数量、目标库位、操作者、类型等参数 |
| INV-TR-009 | 设计存储过程脚本 | 已完成 | sql/仓储管理_库存盘点_库存调拨.sql 已生成 |
| INV-TR-010 | 创建调拨记录表 | 已完成 | 数据库中存在 库存盘点_调拨记录 |
| INV-TR-011 | 创建调拨存储过程 | 已完成 | 数据库中存在 仓储管理_库存盘点_库存调拨 |
| INV-TR-012 | SQL 编译检查 | 已完成 | NOEXEC 检查输出 sql compile ok |
| INV-TR-013 | 前端模板和脚本基础检查 | 已完成 | 输出 template ok、script ok |
| INV-TR-014 | 页面实际联调 | 待执行 | 在系统页面选择真实库存行,完成调拨并刷新列表 |
| INV-TR-015 | 数据库调拨结果核对 | 待执行 | 原库位库存减少,目标库位库存增加或新增,累计库存保持正确,调拨记录写入 |
05-验收证据
5.1 数据库连接证据
连接 SQL Server 后返回:
DatabaseName=ERPTOOL_JY_20250826Back
Version=Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)
5.2 SQL 编译证据
对 sql/仓储管理_库存盘点_库存调拨.sql 使用 SET NOEXEC ON 编译检查:
sql compile ok
5.3 数据库对象创建证据
执行创建脚本后查询 sys.objects:
仓储管理_库存盘点_库存调拨 SQL_STORED_PROCEDURE
库存盘点_调拨记录 USER_TABLE
5.4 存储过程参数证据
查询 sys.parameters:
1 @物料与货位流水号 int
2 @物料流水号 int
3 @原货位流水号 int
4 @目标货位流水号 int
5 @调拨数量 float
6 @原库存数 float
7 @调拨备注 nvarchar
8 @操作者 int
9 @类型 nvarchar
5.5 调拨记录表字段证据
查询 INFORMATION_SCHEMA.COLUMNS:
库存调拨流水号 int
类型 nvarchar
物料流水号 int
原物料与货位流水号 int
原货位流水号 int
目标物料与货位流水号 int
目标货位流水号 int
调拨数量 float
调拨前原库存 float
调拨后原库存 float
调拨前目标库存 float
调拨后目标库存 float
调拨备注 nvarchar
操作人 int
操作时间 datetime
5.6 前端静态检查证据
使用 vue-template-compiler 和 Babel 对 InventoryCheck/index.vue 做基础解析,输出:
template ok
script ok
说明:命令因本机 Node 启动较慢触到超时边界,但成功输出了检查结果。
5.7 文件证据
新增/修改文件:
src/views/WarehouseManagement/InventoryCheck/index.vue
sql/仓储管理_库存盘点_库存调拨.sql
库存调拨功能设计方案.md
库存调拨功能开发说明.md
06-决策记录
| 决策编号 | 决策 | 原因 | 后续影响 |
|---|---|---|---|
| ADR-001 | 不做完整调拨单流程 | 用户明确应用场景是库存盘点组件内快速调拨 | 页面内弹窗完成,不新增调拨单页面 |
| ADR-002 | 前端不拆成两次库存编辑请求 | 两次请求可能出现只扣不加或并发负库存 | 新增后端原子存储过程 |
| ADR-003 | 调拨数量使用 FLOAT |
库存表 货位存量 是 float,旧编辑过程用 int 有丢小数风险 |
新过程支持小数库存调拨 |
| ADR-004 | 通过 物料与货位流水号 反查物料/产品流水号 |
外购件库存_视图 当前不返回 物料流水号 |
前端传空也不影响后端执行 |
| ADR-005 | 支持普通物料和通用件两套表 | 现有盘点编辑过程按 类型 = 通用件 区分半成品表和物料表 |
存储过程内部按 @类型 分支处理 |
| ADR-006 | 调拨后原库位库存为 0 时保留记录 | 便于追溯,也符合盘点页库存可为 0 的现状 | 查询是否隐藏 0 库存由查询条件控制 |
| ADR-007 | 一键新建库位复用现有库位接口 | 项目已有 仓储管理_库位_验证是否存在 和 仓储管理_库位_增加数据 |
不重复新增库位存储过程 |
| ADR-008 | 新增轻量调拨记录表 | 旧 库存盘点_修改记录 只能记录原库存更改,不记录目标库位和调拨前后目标库存 |
后续可扩展调拨记录查询 |
| ADR-009 | 前端传 类型 参数 |
避免普通物料和通用件流水号存在歧义 | 后端能明确走正确库存对照表 |
| ADR-010 | 暂不做页面截图/PDF | 当前任务聚焦开发和数据库对象创建,未启动本地页面联调 | 下一步实际页面验收时补截图证据 |
下一步建议
- 在测试环境登录系统,进入库存盘点页面。
- 选择一条库存大于 0 的记录点击“调拨”。
- 选择已有库位进行调拨,验证原库位减少、目标库位增加。
- 输入新库位名称点击“新建”,验证库位新增后自动回填。
- 再执行一次调拨到新库位,验证目标库位新增库存记录。
- 查询
库存盘点_调拨记录,确认调拨记录写入完整。