# 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 版本 维云智造 库存管理模块*