Files
openclaw-config/workspace-planner/tasks/G5-库存优化-需求确认与代码审视清单.md

188 lines
13 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.
# G5 库存管理优化 — 需求确认与代码审视清单
> 用途:拿这份清单去代码里翻答案,翻完了回来交底,我再出正式技术规格。
---
## 目录
1. [威玛斯 · 物料转换 — 单价·金额·默认工厂仓库](#1-威玛斯--物料转换)
2. [切纳 · 库存预警 — 采购申请/采购订单模式参数](#2-切纳--库存预警)
3. [凯熙 · 库存调整 — APP/PC 跨仓库物料移动](#3-凯熙--库存调整)
4. [骏全塑胶 · 委外红冲 — 退料失败不回滚](#4-骏全塑胶--委外入库红冲退料不回滚)
---
## 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.1 开始,逐个问题去看,把答案写在旁边
2. **不确定就截代码片段**:拿不准的或者代码看不懂的,把关键代码片段(方法、变量、表结构)直接截下来带回来
3. **遇到瓶颈标记下来**:代码里找不到答案的,标记为「待产品确认」,我帮你转化为需求澄清问题
答完所有问题后,把结果带回来,我出正式的技术规格说明书(含:数据库变更 DDL、接口定义、前端改造点、伪代码逻辑)。
---
*版次:v1.0 | 生成日期:2026-06-01 | 适用范围:G5 版本 维云智造 库存管理模块*