一、背景和价值
1.背景
出库单号:TS409U0M 异常原因:T打单失败,初始验证规则不符合,请检查产品多箱特性是否匹配,产品渠道类型是否匹配,这渠道(美西FEDEX-GROUND中转),建多箱异常。
2.价值
优化打单异常,减少出错,提升打单效率。
二、需求描述
2.1. 功能清单
出库单号打单优化
2.2.影响点
暂无
2.3. 功能描述:
1.问题现象:
出库单号:TS409U0M 异常原因:打单失败,初始验证规则不符合,请检查产品多箱特性是否匹配,产品渠道类型是否匹配,
这渠道(美西FEDEX-GROUND中转)对接的进度怎样了,建多箱异常。
2.问题分析:
1)服务入口 : newjob/SyncShipmentOrderToOmsJob
2)关键代码 : ShipmentOrder_Job_Service.cs , 634到640行代码。792行代码
3) 具体原因:可能是上一轮服务还没有结束,下一轮服务就开始了。两轮服务获取到同一个订单导致重复预生成了。
3.优化方案:
1) 通过Redis并发所防止并发
2)具体代码:
加锁,RedisHelper.Set(key, "doing", 10 * 60, CSRedis.RedisExistence.Nx),key = CustomerCode + “_” + 订单号,有效时间为10分钟。634到640行代码【加锁】
解锁,RedisHelper.Del(new string[] { key }); 792行代码加个finally【解锁】
3).该服务部署在WMS,需要参考仓租服务,部署5个POD,分别用于部署多个仓库的订单预生成服务
1. 没有改动原有业务逻辑
2. 通过Redis分布式并发锁控制并发
3. 支持按仓库维度配置服务,每个仓库可以单独配置一个服务
4. 使用多线程执行订单预生成,默认4个线程,意味着4个订单可以同时支持预生成,效率提升4倍。