用户手册
帮助中心/用户手册/拣选:波次、拣选任务与 PICK-STAGE

拣选:波次、拣选任务与 PICK-STAGE

最后更新 2026-10-13

波次释放(手动/定时)、按单生成拣选任务、手机端按步执行——含部分拣选、跳过与 short 处理。

波次释放#

波次(wave)把出库单(wms_shipments)按 merchant × 过滤器分组、按单量切块,释放成波次;波次里的单子再逐单生成拣选任务。两个入口:手动释放(桌面 wave/manual 页)+ 定时释放(scheduler + 外部 cron)。只取 status ∈ commit/draft/ready 的出库单;已被未完成波次(draft/released/picking)锁定的单不参与新匹配。

  • Wave Filter(波次过滤器):conditions[{field, operator, values[]}],operator 有 in/not_in/eq/ne/gt/lt/gte/lte(wave/filter 页)。
  • Dispatch Setting(释放配置):customer_filters[{merchant_id,filter_id}]、max/min_order_qty_per_plan、default_pick_method(order 按单 / batch 批量 / wave 波次 / wave_by_item 按产品波次,默认 order)、is_active(wave/settings 页)。
  • Scheduler(定时计划):work_days(1=周一…7=周日,默认 1–5)、time_from/time_to、step_minutes、is_active(wave/scheduler 页)。
  • 截单时间:按 merchant/carrier 维护 HH:MM(wave/cutoff-time 页)。
  1. 选 Customer(merchant 必填)+ 1+ 个 Dispatch Setting → 预览:返回每 setting 的命中单数 + 每组明细,不建 wave。
  2. 可覆盖 min/max_qty_per_batch(校验 Min ≤ Max)。
  3. 点释放 → 建 wave:wave_no = WV-YYYYMMDD-NNNN,status=released(建出来就是已释放,无 draft 中间态),shipment_ids 存出库单 id 数组。
  4. 释放后页面列出波次内出库单,可逐单 Create Pick Task(见下)。
  5. 定时释放:外部 cron 每 N 分钟 POST /api/wms/wave/scheduler/run(带 x-cron-secret 请求头)。只跑满足"今天星期在 work_days 内、当前时间在 time_from~time_to 内、距上次运行 ≥ step_minutes"的 scheduler。

生成拣选任务#

  • 三入口:Wave released 页面 / Order list 批量选择多个未处理单子 → Create Pick Task / Order detail 的 Create Pick Task。
  • pick_method='order':一单一任务。任务行 = 出库单行 × 系统分配库位:pick 区优先;库存不足按实际可分配量建行,差额进 warnings。
  • 路径规划:按库位行走顺序给每行排 seq,手机端按 seq 顺序引导先拣哪个库位、拣多少。
  • 防重:有未完成拣选任务且还有 pending 行的出库单,不许重复生成;short 剩下的量允许重新生成。
  • 生成后回写出库单的 pick task 字段,并可链接跳转到 Task 详情。

手机端执行#

一个 step = 一个产品 × 一个库位。每个 step 提交四要素:pick from location、pallet LPN(storage 库位才要)、pick to LPN(目标 tote)、picked QTY。

  1. 扫/输 from location → 回车:不合法 → 顶部报错 + 输入框全选;合法 → picking 库位跳到 to LPN,storage 库位先出 pallet LPN 框。
  2. 扫/输 to LPN → 校验(必须是任务分配的 tote)→ 跳到数量。
  3. 输数量(纯数字)→ 点 Pick 提交 → 下一个 step;失败 → 报错停留。
  4. 部分拣选:要求 10 个只拣 5 个提交 → 记 5 已拣,自动新增一个 qty=5 的 step 排到队尾,下一轮回来继续。
  5. Next:跳过当前 step,之后循环回来接着拣没拣完的。
  6. Force close(右上):partial pick 直接关任务,系统按实际拣货数结算。
  7. short:库位没货/破损拣不到 → 标记 short,任务可继续完成,剩余量以后重新生成任务拣。

目标托盘与 PICK-STAGE#

order pick 的目标托盘归属 PICK-STAGE 库位(每仓库一个,location_type='staging',不存在由系统自动创建;界面不展示该库位)。在 WMS → Pallets(托盘管理)页点"批量生成 LPN":选仓库(默认当前仓库)+ 数量 N(1–200,默认 10)。后端按 LPN-{seq} 生成(统一 LPN- 前缀;存量 PLT- 开头的不动),status='building',source_type='pick'。成功后选"只生成"(关闭刷新列表)或"生成并打印"(逐个调 label 接口走打印链路)。注意:Picking cart(location_type='cart')是可移动库位;tote 即 LPN(license_plate 租户全局唯一),箱格拣选时记账 location = tote 所属 cart 的 location_id(cart 本身即库位)。PICK-STAGE(staging)是每仓库的拣货暂存位,order pick 的目标托盘必须归属该库位——两者不要混淆。

任务状态与复核#

pending → in_progress(点开始,或第一次 pick 自动开始;出库单同步 → picking)→ completed(全部行 picked 或 short;出库单 → picked)。完成时回写出库单行的 picked_qty,并触发补货检查。复核:桌面端 Task 详情页可看到手机端提交的全部数据(from location / pallet LPN / to LPN / picked qty / 每 step 记录)——这是复核拣选的入口;打包环节的核验在发货台继续(pack-verify)。

wave 建出来就是 released(无 draft→released 审批流)。wave_no 按当天最大序号+1,高并发下理论上可能重复,调用方可捕获重试。