爱可深思▼ 2017▼ 内测 产品 转运 集合

013.内测.转运出库单

对【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
        }
      ]
    }
  ]
}
《013.内测.转运出库单》 对【012.内测.转运仓拆包合包】的产品场景编写出库代码。主要涉及集合的操作,事物边界,锁的时机,异常处理,日志等功夫活。
题图:2016年黑五期间,平行转运在美国东部DE的转运仓,系统成功完成首个黑五压力测试。