Files
JY1.0/docs/库存调拨/02-项目程序开发详细步骤.md

265 lines
5.5 KiB
Markdown

# 02-项目程序开发详细步骤
## 开发入口
前端页面:
```text
src/views/WarehouseManagement/InventoryCheck/index.vue
```
SQL 脚本:
```text
sql/仓储管理_库存盘点_库存调拨.sql
```
## 第 1 步:梳理现有库存盘点页面
确认页面已有能力:
| 已有能力 | 说明 |
| --- | --- |
| 库存查询 | 调用 `仓储管理_库存盘点_查询` |
| 编辑库存 | 调用 `仓储管理_库存盘点_货位数量_编辑数据` |
| 库位下拉 | 调用 `仓储管理_库位_查询` |
| 新增物料存货 | 页面已有新增库存相关逻辑 |
确认表格已有字段:
```text
物料编码
物料流水号
物料名称
图号或型号
物料与货位流水号
类型
库存
货位流水号
货位名称
批次编号
```
## 第 2 步:增加表格调拨入口
在库存盘点表格操作列增加“调拨”按钮。
实现要求:
1. 原操作列宽度调整为可容纳“编辑”和“调拨”。
2. 行处于编辑状态时不显示调拨按钮。
3. 行不处于编辑状态时显示调拨按钮。
关键逻辑:
```html
<el-button v-if="!scope.row.edit" type="text" size="mini" @click="openTransfer(scope.row)">调拨</el-button>
```
## 第 3 步:增加调拨状态和表单对象
`data()` 中增加:
```js
transferDialogVisible: false,
transferLocationAdding: false,
transferSubmitting: false,
transferForm: {
物料与货位流水号: '',
物料流水号: '',
物料名称: '',
图号或型号: '',
类型: '',
原货位流水号: '',
原货位名称: '',
原库存数: 0,
目标货位流水号: '',
目标货位名称: '',
新货位名称: '',
调拨数量: 1,
调拨备注: ''
}
```
## 第 4 步:增加库存调拨弹窗
新增 `el-dialog`,标题为:
```text
库存调拨
```
弹窗内容:
| 字段 | 控件 | 是否可编辑 |
| --- | --- | --- |
| 物料名称 | 文本 | 否 |
| 图号/型号 | 文本 | 否 |
| 原库位 | 文本 | 否 |
| 原库存数 | 文本 | 否 |
| 目标库位 | `el-select` | 是 |
| 新库位 | `el-input` | 是 |
| 调拨数量 | `el-input-number` | 是 |
| 调拨备注 | `el-input` | 是 |
## 第 5 步:打开调拨弹窗
新增方法:
```js
openTransfer(row)
```
处理内容:
1. 校验当前行是否有 `物料与货位流水号`
2. 校验当前行库存是否大于 0。
3. 将当前行物料、库位、库存信息填入 `transferForm`
4. 清空目标库位、新库位、备注。
5. 打开调拨弹窗。
## 第 6 步:选择目标库位
新增方法:
```js
handleTransferLocationChange(value)
```
处理内容:
1. 根据选择的 `货位流水号`,从 `storageLocation` 中找到货位名称。
2. 回填 `transferForm.目标货位名称`
## 第 7 步:一键新建库位
新增方法:
```js
addTransferLocation()
```
处理流程:
1. 校验 `transferForm.新货位名称` 不能为空。
2. 调用 `仓储管理_库位_验证是否存在`
3. 如果库位已存在,提示并按库位名称回填已有库位。
4. 如果库位不存在,调用 `仓储管理_库位_增加数据`
5. 新增成功后调用 `getLocateName()` 刷新库位下拉。
6. 调用 `selectTransferLocation(locationName)` 回填目标库位。
## 第 8 步:提交库存调拨
新增方法:
```js
submitTransfer()
```
前端校验:
| 校验项 | 提示 |
| --- | --- |
| 目标库位为空 | 请选择目标库位 |
| 目标库位等于原库位 | 目标库位不能与原库位相同 |
| 调拨数量小于等于 0 | 调拨数量必须大于0 |
| 调拨数量大于原库存 | 调拨数量不能大于原库存数 |
提交参数:
| 序号 | 参数名 |
| --- | --- |
| 0 | 物料与货位流水号 |
| 1 | 物料流水号 |
| 2 | 原货位流水号 |
| 3 | 目标货位流水号 |
| 4 | 调拨数量 |
| 5 | 原库存数 |
| 6 | 调拨备注 |
| 7 | 操作者 |
| 8 | 类型 |
调用接口:
```js
var Data = this.CreateData('12', '仓储管理_库存盘点_库存调拨', param)
```
成功后:
1. 提示“调拨成功”。
2. 关闭调拨弹窗。
3. 调用 `searchTable()` 刷新列表。
## 第 9 步:后端脚本设计
脚本文件:
```text
sql/仓储管理_库存盘点_库存调拨.sql
```
脚本内容:
1. 如果 `库存盘点_调拨记录` 不存在,则创建该表。
2. 删除并重建存储过程 `dbo.仓储管理_库存盘点_库存调拨`
3.`@类型` 判断库存表:
- `@类型 = N'通用件'` 使用 `库存管理_半成品与货位对照表`
- 其他类型使用 `库存管理_物料与货位对照表`
4. 使用事务处理扣减、增加、新增目标记录、写入日志。
5. 出错时回滚并返回失败信息。
## 第 10 步:后端事务流程
```text
BEGIN TRAN
锁定原库存记录
校验原库存记录存在
校验目标库位不等于原库位
校验当前库存 >= 调拨数量
扣减原库位库存
查询目标库位同物料库存
如果存在则增加目标库存
如果不存在则新增目标库存记录
写入库存盘点_调拨记录
COMMIT TRAN
```
失败处理:
```text
ROLLBACK TRAN
返回 result = 0 和 msg
```
## 第 11 步:数据库部署
部署目标:
```text
SQL Server: 192.168.1.27
Database: ERPTOOL_JY_20250826Back
```
部署对象:
```text
库存盘点_调拨记录
仓储管理_库存盘点_库存调拨
```
## 第 12 步:验证
验证项:
1. SQL 脚本编译通过。
2. 数据库对象存在。
3. 存储过程参数完整。
4. 前端模板解析通过。
5. 前端脚本解析通过。
6. 页面实际选择库存记录调拨。
7. 原库位库存减少。
8. 目标库位库存增加或新增。
9. 调拨记录写入。