A013.内测.转运出库单
对【012.内测.转运仓拆包合包】的产品场景编写出库代码。 主要涉及集合的操作,事物边界,锁的时机,异常处理,日志等功夫活。
@史荣久 / 2017-02-14 / CC-BY-SA-3.0
制出库单
首先,需要先了解【012.内测.转运仓拆包合包】的需求。
仓库每天于纽约时间早9点(西五区,不考虑夏令时,比北京时间晚13小时), 点击【制作出库单】按钮,就会生成【出库单】,运算对象为当前时点所有可出库包裹。
为了避免计算中包裹及内件变化,制单期间,系统不接受任何待出库包裹的修改操作。 一旦【出库单】生成,拣货员就可以捡货了,再之后打包员可以打包出库了。
【出库单】有2个显示维度,一个是包裹维度的,面向捡货员的,方便捡货和打包。 要求,合包的相关包裹要在一个捡货单/Menu中,以便同时运到打包台并打包。
第二个维度是收件人的,面向打包员的。当打包台上放好了一组合包的包裹后, 打包员,必须从各个包裹中捡取第一个收件人的内件,打包(暂时不考虑被动分箱), 第一个收件人处理完毕后,再处理第二个,以此类推。最后处理退货,弃件和暂存件。
任务说明
现在是纽约时间 2017-02-14 11:40:27,假设系统目前只有3个功能
- 【出库指令】,商家通过页面或API发出的出库指令。
- 【制作出库单】,生成【出库单】,包裹维度的。
- 【打包出库】,把【出库单】收件人维度显示,供打包员出库。
结合【012】中的场景,在直邮模式中,仓库存在以下包裹:
- PostX(Item1 *3) // ShopX的包裹
- PostY(Item2 *3) // ShopY的包裹
系统中存在以下出库指令:
- PostX: Item1 *1 → UserA
- PostX: Item1 *2 → UserB
- PostY: Item2 *1 → UserA
- PostY: Item2 *2 → UserB
任务要求
① 设计一组合适的数据结构,包括但不限于Mysql数据表,Java类。
② 完成【制作出库单】功能,生成【出库单】
- MenuXY(PostX, PostY) // 完全混合,全部出库
- MenuZ(PostZ) // 部分出库,部分暂存
③ 完成【打包出库】把MenuXY显示为以下Json。
{
"name": "MenuXY",
"receivers": [
{
"user": "UserA",
"items": [
{
"post": "PostX",
"item": "Item1",
"qnty": 1
},
{
"post": "PostY",
"item": "Item2",
"qnty": 1
}
]
},
{
"user": "UserB",
"items": [
{
"post": "PostX",
"item": "Item1",
"qnty": 2
},
{
"post": "PostY",
"item": "Item2",
"qnty": 2
}
]
}
]
}
题图:2016年黑五期间,平行转运在美国东部DE的转运仓,系统成功完成首个黑五压力测试。