Files
huachuang/docs/superpowers/plans/2026-08-08-lms-stocking-area.md
2026-08-08 15:03:41 +08:00

209 lines
8.0 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.

# LMS 备货区域查询与维护实现计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development推荐或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 在 LMS 管理端提供备货区域分页查询、受控修改,以及托盘库存 5×5 网格查看。
**架构:** 后端为两张业务表建立独立 `stockingivt` 包,查询 SQL 全部写入 MyBatis XML前端采用现有 Vben Grid 与 Modal 模式,托盘库存点击后按需加载。点位类型和状态由系统字典驱动,初始化 SQL 保持幂等。
**技术栈:** Java 17、Spring Boot、MyBatis、Vue 3、TypeScript、Vben Admin、Ant Design Vue。
---
## 文件结构
### 后端新增
- `nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/stockingivt/StockingIvtController.java`:分页、详情、修改、托盘库存接口。
- `.../stockingivt/vo/StockingIvtPageReqVO.java`:分页筛选条件。
- `.../stockingivt/vo/StockingIvtUpdateReqVO.java`:受控修改字段。
- `.../stockingivt/vo/StockingIvtRespVO.java`:点位响应。
- `.../stockingivt/vo/PaperVehicleInventoryRespVO.java`:托盘格位响应。
- `.../dal/dataobject/stockingivt/StockingIvtDO.java`:备货点位表映射。
- `.../dal/dataobject/stockingivt/PaperVehicleDO.java`:托盘库存表映射。
- `.../dal/mysql/stockingivt/StockingIvtMapper.java`Mapper 方法。
- `nl-module-lms/nl-module-lms-server/src/main/resources/mapper/stockingivt/StockingIvtMapper.xml`:全部查询和更新 SQL。
- `.../service/stockingivt/StockingIvtService.java``StockingIvtServiceImpl.java`:业务服务。
### 后端修改
- `nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java`:新增点位和托盘格位错误码。
### 数据库新增
- `sql/mysql/lms_stocking_ivt_dict.sql`:两个字典类型和五条字典数据。
### 前端新增与修改
- `.../src/api/lms/stockingivt/index.ts`:类型与四个 API。
- `.../src/views/lms/stockingivt/data.ts`:查询、修改和列表 Schema。
- `.../src/views/lms/stockingivt/index.vue`:主列表。
- `.../src/views/lms/stockingivt/modules/form.vue`:修改弹窗。
- `.../src/views/lms/stockingivt/modules/pallet-inventory.vue`5×5 网格弹窗。
- `nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/packages/constants/src/dict-enum.ts`:两个字典编码。
---
### 任务 1系统字典初始化
- [ ] **步骤 1创建幂等字典 SQL**
使用 `INSERT ... SELECT ... WHERE NOT EXISTS` 写入:
```text
lms_stocking_ivt_point_type: 1=绑定位, 2=缓存位, 3=对接位
lms_stocking_ivt_status: 1=空, 2=有托盘
```
字典类型写入 `system_dict_type`,数据写入 `system_dict_data`ID 使用新的雪花 ID状态启用。
- [ ] **步骤 2静态检查 SQL**
```bash
rg -n "lms_stocking_ivt_(point_type|status)|NOT EXISTS" sql/mysql/lms_stocking_ivt_dict.sql
```
预期:两个类型和五条数据均存在,所有插入均幂等。
### 任务 2后端数据模型与 XML
- [ ] **步骤 1创建两个 DO**
`StockingIvtDO` 映射点位字段并继承 `BaseDO``PaperVehicleDO` 映射字符串主键、托盘号、行列、物料编码、名称和数量。
- [ ] **步骤 2创建 VO**
分页字段:
```java
private String pointCode;
private String pointName;
private String vehicleCode;
private String pointType;
private String ivtStatus;
private String isUsed;
```
修改 VO 使用注解校验 `ivtId/pointType/ivtStatus/sortSeq/isUsed`,只接收托盘号、类型、状态、位置、顺序号、启用、备注;不接收点位编码和名称。托盘响应包含 `rowNum/colNum/materialCode/materialName/qty`
- [ ] **步骤 3创建 Mapper 与 XML**
分页 SQL 选取列表全部字段;编码、名称、托盘号使用模糊查询,类型、状态、启用使用等值查询,默认 `ORDER BY ivt_id DESC`。详情按主键查询。更新 SQL 只设置七个可编辑字段。托盘库存按托盘号查询并按数字行列排序。
- [ ] **步骤 4编译 Mapper**
```bash
./mvnw -pl nl-module-lms/nl-module-lms-server -am -DskipTests compile
```
预期:`BUILD SUCCESS`
### 任务 3后端服务与接口
- [ ] **步骤 1增加错误码**
使用未占用编号增加:备货区域点位不存在、托盘格位重复、托盘格位超出 5×5。
- [ ] **步骤 2实现 Service**
```java
PageResult<StockingIvtRespVO> getStockingIvtPage(StockingIvtPageReqVO reqVO);
StockingIvtRespVO getStockingIvt(Long ivtId);
void updateStockingIvt(StockingIvtUpdateReqVO reqVO);
List<PaperVehicleInventoryRespVO> getPaperVehicleInventory(String vehicleCode);
```
修改前校验存在,再 new 更新对象调用 Mapper。托盘数据校验行列为 1 至 5并以 `rowNum + ":" + colNum` 检查重复;空列表正常返回。
- [ ] **步骤 3实现 Controller**
```text
GET /lms/stocking-ivt/page lms:stocking-ivt:query
GET /lms/stocking-ivt/get lms:stocking-ivt:query
PUT /lms/stocking-ivt/update lms:stocking-ivt:update
GET /lms/stocking-ivt/paperVehicleList lms:stocking-ivt:query
```
分页返回 `CommonResult<PageResult<...>>`,其他接口统一返回 `CommonResult`
- [ ] **步骤 4编译后端**
运行任务 2 的 Maven 命令,预期 `BUILD SUCCESS` 且 XML 可加载。
### 任务 4前端字典与 API
- [ ] **步骤 1注册字典常量**
```ts
LMS_STOCKING_IVT_POINT_TYPE: 'lms_stocking_ivt_point_type',
LMS_STOCKING_IVT_STATUS: 'lms_stocking_ivt_status',
```
- [ ] **步骤 2创建 API**
定义 `StockingIvt``StockingIvtUpdateReq``PaperVehicleInventory`,实现 page/get/update/paperVehicleList 四个请求。
- [ ] **步骤 3类型检查**
先读取前端 `package.json` 确定实际脚本,再运行对应应用 typecheck预期新增 API 和常量无类型错误。
### 任务 5列表和修改弹窗
- [ ] **步骤 1创建 `data.ts`**
查询表单包含点位编码、名称、托盘号、类型、状态、是否启用。列表列严格按规格顺序;类型、状态、启用显示字典标签,托盘列与操作列使用插槽。
- [ ] **步骤 2创建修改弹窗**
打开时按 `ivtId` 拉取最新详情。点位编码和名称只读;编辑其余七个字段。确认时只调用 update API成功后关闭并刷新。
- [ ] **步骤 3创建列表页**
使用 `useVbenVxeGrid`;不提供勾选、新增、删除和导出。操作列只有修改。托盘号非空时显示链接并打开库存弹窗。
- [ ] **步骤 4运行类型检查**
运行任务 4 确认的命令,预期无新增错误。
### 任务 65×5 托盘库存弹窗
- [ ] **步骤 1构建固定网格**
初始化 25 格,用 `(rowNum - 1) * 5 + (colNum - 1)` 填入接口数据;占用数为记录数,空位数为 `25 - occupiedCount`
- [ ] **步骤 2渲染网格**
显示列 1 至 5、行 1 至 5。有料格展示编码、名称并高亮空格显示“空”。Tooltip 展示行列、物料编码、名称和原始数量,标题包含托盘号。
- [ ] **步骤 3验证空托盘逻辑**
托盘号为空不渲染链接;接口空数组展示 25 个空格和“已占用 0 / 25”。
- [ ] **步骤 4运行类型检查**
运行任务 4 确认的命令,预期无新增错误。
### 任务 7最终验证
- [ ] **步骤 1检查边界**
```bash
git status --short
git diff --check
git diff --stat
```
确认不覆盖原有 `RpcConfiguration.java``application-dev.yaml``nl-module-wms/img.png` 用户改动。
- [ ] **步骤 2编译后端**
运行 Maven compile预期 `BUILD SUCCESS`
- [ ] **步骤 3检查前端**
运行实际可用的 typecheck预期退出码 0若存在仓库基线错误记录与本次文件无关的证据。
- [ ] **步骤 4需求核对**
确认:无新增删除;无“规划”;编码与名称只读;七个字段可改;字典值正确;托盘号可点击;库存为 5×5每格一根空托盘显示正确。