G5 库存管理优化 — 需求确认与代码审视清单
用途:拿这份清单去代码里翻答案,翻完了回来交底,我再出正式技术规格。
目录
- 威玛斯 · 物料转换 — 单价·金额·默认工厂仓库
- 切纳 · 库存预警 — 采购申请/采购订单模式参数
- 凯熙 · 库存调整 — APP/PC 跨仓库物料移动
- 骏全塑胶 · 委外红冲 — 退料失败不回滚
1. 威玛斯 · 物料转换
需求摘要
- 转换前物料:增加「无税单价」「无税金额」字段,取采购时的值
- 转换前:合计金额取各行金额合计
- 转换后物料:自动带出默认工厂和仓库,取自主数据-物料信息
🔍 需要去看代码回答的问题
1.1 物料转换的数据模型
| # |
去代码里找什么 |
为什么问 |
| 1.1.1 |
物料转换的数据库表名是什么?(找 mapper.xml 或 @TableName 注解) |
确定在哪个表加字段 |
| 1.1.2 |
转换明细表有哪些字段?有无 batch_no(批次号)、warehouse_id、purchase_order_id 等关联字段? |
关联采购单时靠什么字段 join |
| 1.1.3 |
转换单主表有哪些字段?有无 total_amount 合计字段? |
合计是存库还是前端算 |
| 1.1.4 |
现有的物料主数据表(material 或 item)是否有 default_warehouse_id、default_factory_id 字段? |
确认数据源头是否存在 |
1.2 采购单价取数逻辑
| # |
去代码里找什么 |
为什么问 |
| 1.2.1 |
现有代码中采购入库单明细表(purchase_inbound_detail 或类似)有哪些字段?是否有 unit_price_no_tax、amount_no_tax? |
找到单价的数据来源表 |
| 1.2.2 |
采购入库明细和物料通过什么字段关联?material_id?batch_no?inbound_order_no? |
取数时的 join 键 |
| 1.2.3 |
如果物料有批次管理,同一个物料不同批次的单价不同,现有逻辑怎么取的? |
多批次时必须确认取数规则 |
| 1.2.4 |
有没有加权平均或者移动平均的成本计算逻辑?代码的 service 或 util 层有没有相关工具方法? |
如果有现成的成本计算工具,可以直接复用 |
| 1.2.5 |
非采购入库场景的物料(盘盈、产成品入库、期初)怎么处理单价?已有代码有没有类似场景的处理? |
处理边界情况 |
1.3 转换后默认工厂/仓库
| # |
去代码里找什么 |
为什么问 |
| 1.3.1 |
物料主数据加载时,代码中如何取默认仓库的?搜 getDefaultWarehouse / defaultWarehouseId 等 |
复用已有逻辑还是新建 |
| 1.3.2 |
转换后物料的工厂/仓库字段,在前端表单中当前是怎么赋值的?有没有自动填充机制? |
确定改哪里 |
| 1.3.3 |
跨工厂的场景:物料主数据的默认仓库属于A工厂,但登录用户属于B工厂,代码有没有做组织校验? |
判断是否需要增加校验 |
1.4 前端部分
| # |
去代码里找什么 |
为什么问 |
| 1.4.1 |
转换前物料表格的 JSON schema 或 columns 配置在哪里? |
确定表格列配置的代码位置 |
| 1.4.2 |
当前表单提交时物料数据的组装逻辑(handleSubmit 或 transformPayload) |
决定新增字段如何提交 |
| 1.4.3 |
详情页有没有只读的渲染组件?是复用的表单组件还是单独的 Detail 组件? |
详情页改一处还是两处 |
2. 切纳 · 库存预警
需求摘要
- 加一个参数配置:库存预警触发时对接「采购申请」还是「采购订单」
- 采购申请:走原有逻辑
- 采购订单:直接新增采购订单
🔍 需要去看代码回答的问题
2.1 现有库存预警流程
| # |
去代码里找什么 |
为什么问 |
| 2.1.1 |
现有库存预警触发后,生成采购申请单的代码入口在哪里?搜 warn / alert / purchaseRequisition 相关 service |
找到切入点 |
| 2.1.2 |
采购申请的自动生成逻辑是什么?有哪些字段是系统填充的,哪些字段保留给用户填? |
理解现有流程完整链路 |
| 2.1.3 |
预警是按物料级别触发还是按物料+仓库级别触发?同一物料多个仓库都缺货时怎么处理? |
判断参数配置的作用域 |
2.2 参数配置
| # |
去代码里找什么 |
为什么问 |
| 2.2.1 |
系统现有的参数配置表或配置中心机制是什么?(sys_config?system_param?还是枚举 + 常量?) |
参数放哪里 |
| 2.2.2 |
现有的库存预警相关的参数有哪些?(预警上下限、预警方式等)已经存在哪些配置项?代码如何读取? |
复用已有的参数框架 |
| 2.2.3 |
配置参数是全局级别还是仓库/物料分类级别?代码里有没有已有按维度区分参数的写法? |
决定参数的作用域 |
2.3 直接生成采购订单的链路
| # |
去代码里找什么 |
为什么问 |
| 2.3.1 |
新增采购订单(purchase_order)的 Service/Create 方法在哪里?方法签名是什么?需要哪些必填参数? |
找到订单创建入口 |
| 2.3.2 |
采购订单的默认供应商怎么确定?物料主数据有没有 default_supplier_id 字段? |
自动下单必须要填供应商 |
| 2.3.3 |
采购订单的单价怎么取?(上次采购价?物料价格表?加权均价?)代码里有没有现成的取价工具? |
自动下单必须有单价 |
| 2.3.4 |
新增采购订单是否需要走审批流?如需审批,审批流代码入口在哪?能否跳过? |
决定是否全自动 |
| 2.3.5 |
同一个供应商同时多个物料触达预警,现在是合并生成一张采购申请单还是分开建?直接生成采购订单时是否也要做合并? |
确定合并策略 |
2.4 前端
| # |
去代码里找什么 |
为什么问 |
| 2.4.1 |
库存预警的设置页面在哪里?参数配置的UI入口是什么? |
找到新增参数的位置 |
| 2.4.2 |
之前的预警参数是怎么做表单联动的?(存在级联/显隐逻辑吗) |
参数表单的改法 |
3. 凯熙 · 库存调整
需求摘要
- APP 和 PC 的库存调整功能,从"单仓库内调整"扩展为"支持跨仓库间的物料移动"
🔍 需要去看代码回答的问题
3.1 现有库存调整的逻辑
| # |
去代码里找什么 |
为什么问 |
| 3.1.1 |
现有库存调整的数据库表是什么?有哪些字段?有无 target_warehouse_id / to_warehouse_id 字段? |
要不要加字段 |
| 3.1.2 |
现有调整单Service层的调整逻辑:减源仓库存 → 加目标仓库存。代码位置在哪里? |
确定改哪段逻辑 |
| 3.1.3 |
调整是否影响成本?库存调整时有没有调用成本计算的接口(costService / calculateCost 等)? |
跨仓库移动是否需要重新计价 |
| 3.1.4 |
现有代码仓库的库存组织是怎么处理的?一个仓库属于一个工厂/法人,代码里怎么校验跨仓库操作的合法性? |
判断是否允许跨组织移动 |
3.2 同一仓库内 vs 跨仓库的关键差异
| # |
去代码里找什么 |
为什么问 |
| 3.2.1 |
前端库存调整页面的 warehouse_id 是从哪里取的?(URL参数?用户默认仓库?还是页面下拉选择?) |
确定怎么加"目标仓库" |
| 3.2.2 |
库存调整的列表页面,是否存在按仓库过滤的查询逻辑? |
跨仓移动是否需要显示一张单跨两仓 |
| 3.2.3 |
如果有批次/序列号物料,调整时批次号的处理逻辑是什么? |
跨仓时批次是否拆分 |
| 3.2.4 |
现有审批流配置中,有没有按"库存调整类型"设置不同审批链的机制? |
判断跨仓是否需要不同的审批 |
3.3 APP 端(移动端)
| # |
去代码里找什么 |
为什么问 |
| 3.3.1 |
APP 库存调整页面是原生还是 H5/WebView?代码在哪个目录? |
确定开发语言和工具链 |
| 3.3.2 |
APP 是否有扫码功能?扫码后的逻辑是直接识别物料+数量,还是需要额外选择操作? |
跨仓库移动扫码流程设计 |
| 3.3.3 |
APP 端下拉选择仓库列表的数据源是哪个接口?是否有按用户权限过滤? |
确定目的仓库的数据源 |
3.4 后端接口
| # |
去代码里找什么 |
为什么问 |
| 3.4.1 |
库存调整的 DTO/VO 有哪些字段?新增/编辑接口的请求体结构? |
接口改造范围 |
| 3.4.2 |
列表查询接口已经支持按哪些字段过滤和排序? |
判断是否需要扩展查询接口 |
| 3.4.3 |
如果是同价调拨,库存移动时是否需要生成财务凭证?代码里有没有凭证生成逻辑? |
评估财务影响范围 |
4. 骏全塑胶 · 委外入库红冲退料不回滚
需求摘要
- 红冲委外采购入库单时,自动退料失败了,红冲入库单不回滚
- 提示用户:"入库成功,但自动退料失败,请手工退料"
🔍 需要去看代码回答的问题
4.1 现有委外红冲+退料流程
| # |
去代码里找什么 |
为什么问 |
| 4.1.1 |
委外入库单红冲的代码入口在哪里?是 reverse() / redFlush() / negativeInbound() 之类的方法? |
找到主入口 |
| 4.1.2 |
红冲时自动生成委外退料单的代码是哪一段?createReturnMaterial() / autoReturn() 等 |
找到退料触发点 |
| 4.1.3 |
红冲和退料在同一个事务里吗?@Transactional 注解的范围? |
决定事务边界怎么调整 |
| 4.1.4 |
当前退料失败时抛了什么异常?是 RuntimeException + @Transactional(rollbackFor) 导致整体回滚的吗? |
找到回滚的根因 |
| 4.1.5 |
退料的Service方法抛出的异常类型都有哪些?代码里有没有区分"可重试"和"不可重试"的异常? |
设计异常处理策略 |
4.2 退料失败的细分场景
| # |
去代码里找什么 |
为什么问 |
| 4.2.1 |
退料数量 > 委外商在库数量时,代码怎么处理的?是否有数量校验逻辑? |
常见失败场景 |
| 4.2.2 |
委外退料如果需要审批,审批不通过时返回什么结果?是抛异常还是返回状态码? |
非抛异常场景的失败判断 |
| 4.2.3 |
委外商已经领用消耗了该物料(如已经加工消耗),系统怎么处理?是否有校验? |
物料已被消耗的边界 |
| 4.2.4 |
退料接口调用的网络超时/服务异常场景,现有代码有没有重试机制(@Retryable、MQ、定时任务)? |
判断临时失败 vs 确定性失败 |
4.3 改造后的处理逻辑
| # |
去代码里找什么 |
为什么问 |
| 4.3.1 |
红冲入库单表是否有状态字段(status 或 reverse_status)?都有哪些枚举值? |
考虑是否需要加退料状态标记 |
| 4.3.2 |
系统中已有的操作日志/系统日志表结构和插入逻辑是怎样的? |
记录失败原因到日志 |
| 4.3.3 |
有没有通知/待办/消息推送的现成工具类?(sendNotification() / createTask() 等) |
提示用户手工退料时调用 |
| 4.3.4 |
前端提示弹窗或消息提示的统一组件/API是什么?(message.error / notification.warning 等) |
前端提示怎么做 |
| 4.3.5 |
现有委外退料的手工入口在哪里?(菜单路径 / 页面路由) |
提示"请手工退料"时需要告诉用户去哪里操作 |
4.4 类似场景排查
| # |
去代码里找什么 |
为什么问 |
| 4.4.1 |
PC端/APP端有没有其他"自动流程失败但主流程不回滚"的现有处理模式可以参照? |
复用已有模式,保持一致性 |
| 4.4.2 |
除了委外红冲,还有哪些业务也自动触发委外退料?(退货出库、委外结算等) |
判断是否需要同步改造 |
使用建议
- 按需求逐一查代码:从 #1.1 开始,逐个问题去看,把答案写在旁边
- 不确定就截代码片段:拿不准的或者代码看不懂的,把关键代码片段(方法、变量、表结构)直接截下来带回来
- 遇到瓶颈标记下来:代码里找不到答案的,标记为「待产品确认」,我帮你转化为需求澄清问题
答完所有问题后,把结果带回来,我出正式的技术规格说明书(含:数据库变更 DDL、接口定义、前端改造点、伪代码逻辑)。
版次:v1.0 | 生成日期:2026-06-01 | 适用范围:G5 版本 维云智造 库存管理模块