46 lines
2.0 KiB
Markdown
46 lines
2.0 KiB
Markdown
|
|
# 🎯 问题修复总结
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
计算铨宝采购需求时,期初库存显示的是友辉的数据。例如:
|
|||
|
|
- 铨宝的"6*6*7.5支架 TS-1166VW"期初库存应该是 0,但显示 995(友辉的库存)
|
|||
|
|
- 铨宝的"0402B102K500NT"期初库存应该是 0,但显示 1243(友辉的库存)
|
|||
|
|
|
|||
|
|
## 根本原因
|
|||
|
|
**`/api/purchase-demand/recalculate` 接口**在查询期初库存时,只用了 `material_code`,没有按 `factory` 过滤:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 错误的查询(第7408行)
|
|||
|
|
c.execute('SELECT stock_qty, min_package as stock_min_package FROM initial_stock WHERE material_code=?', (material_code,))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
当友辉和铨宝有相同的物料编码时,这个查询会返回第一个匹配的记录(通常是友辉的),导致铨宝的采购需求使用了友辉的库存数据。
|
|||
|
|
|
|||
|
|
## 修复方案
|
|||
|
|
在查询时添加工厂过滤条件:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 正确的查询(第7409行)
|
|||
|
|
factory = item['factory'] or '友辉' # 从采购需求记录中获取工厂字段
|
|||
|
|
c.execute('SELECT stock_qty, min_package as stock_min_package FROM initial_stock WHERE material_code=? AND factory=?', (material_code, factory))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 已修复的接口
|
|||
|
|
1. ✅ `/api/purchase-demand/calculate` - 计算单个产品采购需求
|
|||
|
|
2. ✅ `/api/purchase-demand/calculate-all` - 计算所有产品采购需求
|
|||
|
|
3. ✅ `/api/purchase-demand/calculate-from-orders` - 从客户订单计算采购需求
|
|||
|
|
4. ✅ `/api/purchase-demand/recalculate` - 重新计算现有采购需求(**这个是你使用的接口**)
|
|||
|
|
|
|||
|
|
## 验证步骤
|
|||
|
|
1. 重启服务器:`systemctl restart prod-mgmt`
|
|||
|
|
2. 在前端选择"铨宝"工厂
|
|||
|
|
3. 选择产品(如"AP05商超")并输入数量
|
|||
|
|
4. 点击"重新计算"
|
|||
|
|
5. 检查采购需求列表中的期初库存字段:
|
|||
|
|
- 铨宝的"6*6*7.5支架 TS-1166VW"应该显示 0 ✅
|
|||
|
|
- 铨宝的"0402B102K500NT"应该显示 0 ✅
|
|||
|
|
- 铨宝的"0402B104K160NT"应该显示 30124 ✅
|
|||
|
|
|
|||
|
|
## 其他修复
|
|||
|
|
- ✅ 期初库存导入:支持同一物料在不同工厂独立存在
|
|||
|
|
- ✅ 数据备份恢复:导入/删除前自动备份,可一键恢复
|