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

8.0 KiB
Raw Blame History

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.javaMapper 方法。
  • nl-module-lms/nl-module-lms-server/src/main/resources/mapper/stockingivt/StockingIvtMapper.xml:全部查询和更新 SQL。
  • .../service/stockingivt/StockingIvtService.javaStockingIvtServiceImpl.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.vue5×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 写入:

lms_stocking_ivt_point_type: 1=绑定位, 2=缓存位, 3=对接位
lms_stocking_ivt_status: 1=空, 2=有托盘

字典类型写入 system_dict_type,数据写入 system_dict_dataID 使用新的雪花 ID状态启用。

  • 步骤 2静态检查 SQL
rg -n "lms_stocking_ivt_(point_type|status)|NOT EXISTS" sql/mysql/lms_stocking_ivt_dict.sql

预期:两个类型和五条数据均存在,所有插入均幂等。

任务 2后端数据模型与 XML

  • 步骤 1创建两个 DO

StockingIvtDO 映射点位字段并继承 BaseDOPaperVehicleDO 映射字符串主键、托盘号、行列、物料编码、名称和数量。

  • 步骤 2创建 VO

分页字段:

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
./mvnw -pl nl-module-lms/nl-module-lms-server -am -DskipTests compile

预期:BUILD SUCCESS

任务 3后端服务与接口

  • 步骤 1增加错误码

使用未占用编号增加:备货区域点位不存在、托盘格位重复、托盘格位超出 5×5。

  • 步骤 2实现 Service
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
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注册字典常量
LMS_STOCKING_IVT_POINT_TYPE: 'lms_stocking_ivt_point_type',
LMS_STOCKING_IVT_STATUS: 'lms_stocking_ivt_status',
  • 步骤 2创建 API

定义 StockingIvtStockingIvtUpdateReqPaperVehicleInventory,实现 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检查边界
git status --short
git diff --check
git diff --stat

确认不覆盖原有 RpcConfiguration.javaapplication-dev.yamlnl-module-wms/img.png 用户改动。

  • 步骤 2编译后端

运行 Maven compile预期 BUILD SUCCESS

  • 步骤 3检查前端

运行实际可用的 typecheck预期退出码 0若存在仓库基线错误记录与本次文件无关的证据。

  • 步骤 4需求核对

确认:无新增删除;无“规划”;编码与名称只读;七个字段可改;字典值正确;托盘号可点击;库存为 5×5每格一根空托盘显示正确。