暂无
任务描述
需求描述
一、背景和价值
1.背景
1.目前中转单提交到海外仓系统时 ,执行订单锁定海外仓库存动作,若海外仓系统的服务还没执行完,ERP没有收到执行完的信息,导致ERP又重新执行命令推送给海外仓,导致出现重复锁定库存的情况。
2.价值
提高库存准确率
二、需求描述
2.1. 功能清单
解决中转订单库存重复锁定的问题。
2.2.影响点
无
2.3. 功能描述:
1. ERP系统->备库订单(新)->FBA备库单->海外仓-FBA 创建订单时,若中转单审核通过后通过到 海外仓系统执行库存锁定时,需要等海外仓返回锁定成功后,任务才算完成,不要进行重复调用海外仓锁定库存接口。
2.优化方案:API锁定库存时,增加Redis锁控制并发,不允许多次调用。

验收标准
暂无
开发报告
1.erp同步中转备库订单到海外仓,调用海外仓添加中转订单接口,由于erp存在调用接口并发的情况,导致海外仓订单产品临时锁定库存存在多次锁,造成库存锁定不准确,
解决方案:海外仓添加中转订单添加前后加redis事务锁
2.海外仓生成拣货单按钮,存在各种意外情况,导致生成拣货单出现无冻结库存记录,导致生单失败,需要人工去处理订单产品临时锁定数据,为了减少人工操作,现在把人工调整的sql写在代码中
解决方案:把人工去修改锁定库存数据的sql,在代码中实现;当订单提示
就去调用一个修复订单产品临时锁定数的方法,修复库存信息,
改动的点涉及到
1.中转出库:按箱产品/按箱中转
2.客户订单
3.按箱 换标单
4.线下订单
这个是人工修复sql
-- 将异常冻结库存存放到临时表
CREATE TEMPORARY TABLE ErrorInventoryID
SELECT
OrderCode,
MultiCode,
StorageLocationCode,
MAX(ID) MID
FROM inv_inventoryfrozenrecord
WHERE OrderCode IN ('OL06083657001')
-- AND Status = 2
GROUP BY OrderCode,MultiCode,StorageLocationCode;
-- 修复异常库存冻结记录状态(状态改成已冻结)
UPDATE inv_inventoryfrozenrecord SET Status = 1, Description = '' WHERE ID IN ((SELECT MID FROM ErrorInventoryID));
-- 将每个SKU需要修复的数量记录保存到临时表
CREATE TEMPORARY TABLE TempErrorInventory
SELECT
e1.MID,
e2.Number,
e2.WarehouseId,
e2.MultiCode,
e2.CustomerCode,
e2.StorageLocationCode
FROM ErrorInventoryID e1
JOIN inv_inventoryfrozenrecord e2 ON e1.MID = e2.ID
WHERE e1.MID = e2.ID;
-- 修复库存表的待发货数量和可用数量
UPDATE
inv_inventory i1
JOIN TempErrorInventory i2
ON i1.MultiCode = i2.MultiCode
AND i1.WareHouseId = i2.WarehouseId
AND i1.CustomerCode = i2.CustomerCode
SET
i1.UsableQuantity = i1.UsableQuantity - i2.Number,
i1.WaitShippingQuantity = i1.WaitShippingQuantity + i2.Number,
i1.LastModificationTime = CURRENT_TIMESTAMP
WHERE i1.MultiCode = i2.MultiCode
AND i1.WareHouseId = i2.WarehouseId
AND i1.StorageLocationCode = i2.StorageLocationCode
AND i1.CustomerCode = i2.CustomerCode
AND i1.UsableQuantity >= i2.Number;
-- 删除临时表
DROP TEMPORARY TABLE ErrorInventoryID;
DROP TEMPORARY TABLE TempErrorInventory;
代码方法: