厨房单打印行为
修改单打印设置
本文档说明修改单(revised docket)打印设置的工作方式。
适用范围
这些设置适用于修改后的厨房单,不适用于收据、取餐号打印或普通的手动重印。
当订单中至少包含以下一种商品状态时,厨房单被视为修改单:
- 新增商品(New item)
- 取消商品(Cancelled item)
- 修改商品(Modified item)
目前,自动修改单打印用于柜台结账(pay-at-counter)堂食订单的变更和取消。对外带和线上订单餐桌,后端触发的自动修改单会被跳过。首次打印的标准厨房单不受这些设置控制,即使它是在柜台结账时打印的。
每种状态都可以单独配置为以下打印模式之一:
| 打印模式 | 含义 |
|---|---|
| 整单重印(Reprint whole docket) | 打印该状态的商品,并在厨房单上包含未变更的商品。 |
| 仅打印新增/修改/取消的商品(Only print new/edited/cancelled item) | 只打印被各自状态设置允许的变更商品。 |
| 不打印(Don't print) | 不打印该状态的商品。 |
判定规则
当前设计对修改单使用以下规则:
- 如果任一变更商品状态被设为
整单重印,且修改单中存在该状态,则包含未变更的商品。 - 被设为
不打印的商品会被排除,即使另一状态触发了整单重印。 - 被设为
仅打印新增/修改/取消的商品的商品会被打印,但它们不会导致未变更商品被打印。 - 如果过滤后没有可打印的变更商品,该打印位置不打印修改单。
- 标准厨房单不受这些设置影响。
- 对于仅增加数量的修改,打印端会先把正数的数量差视为
新增商品,再应用这些规则。
数量变更
当已有购物车商品仅被修改数量时,后端保持商品状态为修改商品,并同时发送 quantityDelta(数量差)。
打印端会把正数的 quantityDelta 当作新增商品来处理修改单打印:
| 数量变更 | 后端状态 | 打印设置使用的状态 | 打印的数量 |
|---|---|---|---|
2x Beef Burger 改为 3x Beef Burger | 修改商品 | 新增商品 | 1x Beef Burger |
2x Beef Burger 改为 4x Beef Burger | 修改商品 | 新增商品 | 2x Beef Burger |
这意味着数量增加由新增商品的打印设置控制,而不是修改商品的打印设置。例如,如果新增商品设为仅打印新增/修改/取消的商品、修改商品设为不打印,将 2x Beef Burger 增加到 3x Beef Burger 会在修改单上打印 1x Beef Burger。
如果新增商品设为不打印,即使修改商品设为整单重印,同样的数量增加也不会打印,因为打印端对正数数量差使用的状态是新增商品。
如果新增商品设为整单重印,数量增加还可以让该打印位置包含未变更的商品。例如,将 2x Beef Burger 增加到 3x Beef Burger 时,可以打印 1x Beef Burger(作为新增)以及同一位置厨房单上的未变更商品。
订单数据中该行仍然表示为修改状态,并带有最终数量。正数数量差只改变修改单的过滤和显示方式。
当前限制:
| 情况 | 当前行为 |
|---|---|
数量减少,例如 3x Beef Burger 改为 1x Beef Burger | 仍使用修改商品;只有当修改商品设置允许时才打印当前行 1x Beef Burger。不会拆分出 2x Beef Burger 的取消差额行。 |
| 数量变更同时伴随备注、选项、价格或外带状态变更 | 仍使用修改商品;正数差额的新增商品行为仅适用于纯数量变更。 |
打印位置
修改单设置在厨房单按打印位置拆分之前生效。之后,每个打印位置仍然只收到分配给该位置的商品。
如果整单重印包含了未变更商品,这些未变更商品只会在同时拥有至少一条可打印变更行的打印位置上打印。只有未变更商品的打印位置不会打印修改单。
例如,如果厨房(Kitchen)的商品被修改而吧台(Bar)的商品未变更,整单重印会打印厨房的变更商品和厨房的未变更商品。除非吧台位置也有可打印的变更商品或选项行,否则吧台打印机不会打印修改单。
选项变更与位置
当前后端的订单更新在父级购物车商品层面表示选项变更。
| 选项更新 | 当前产生的修改单状态 | 打印行为 |
|---|---|---|
| 添加选项 | 父商品为修改商品 | 打印修改后的父商品及当前选项列表。 |
| 选项从一个换成另一个 | 父商品为修改商品 | 打印修改后的父商品及新的/当前的选项列表。旧选项不会单独作为取消项打印。 |
| 移除选项 | 父商品为修改商品 | 打印修改后的父商品(不含被移除的选项)。被移除的选项不会单独作为取消项打印。 |
对于指定位置的选项,Android POS 会把选项行发送到该选项配置的打印位置。如果变更的/当前的选项与父级菜品的位置不同,选项行在选项的位置打印,父级菜品在菜品的位置打印。
如果父商品被标记为已变更,指定位置的选项会继承父商品的状态用于打印。这样即使后端只标记了父级购物车商品发生变更,选项配置的打印位置也能收到修改行。
由于目前被移除的选项不会作为单独的取消选项行发送,移除一个原本属于其他位置的选项时,旧的选项位置不会打印单独的取消行,只会通过父商品的修改商品状态来表示。
这些选项变更厨房单由修改商品的打印设置控制。例如,如果修改商品设为不打印,仅涉及选项的添加/更换/移除更新不会打印修改单,除非同时存在其他可打印的变更状态。
已知边界情况
以下边界情况尚未处理。它们描述的是当前的实际行为,而不是期望的最终行为。
| 边界情况 | 当前行为 |
|---|---|
| 重新排列相同的选项 ID | 在某些后端匹配路径中仍可能被视为选项变更,因此父商品可能以修改商品打印。 |
| 数量减少 | 仍视为修改商品;不会拆分出取消差额行。 |
| 数量变更同时伴随选项、备注、外带或价格变更 | 仍表示为一个修改商品,因此新增商品的正数差额行为不适用。 |
| 把商品从一个选项组合换成另一个 | 打印新的/当前的组合(作为修改);旧组合不会单独作为取消项打印。 |
| 移除选项 | 打印修改后的父商品(不含被移除选项);被移除选项不会单独作为取消项打印。 |
| 移除指定位置的选项 | 不会在该选项之前的打印位置打印单独的取消选项行,只通过父商品的修改商品状态表示。 |
| 在一次更新中编辑同一菜品的多个变体 | 后端匹配仍可能仅按菜品 ID 配对未匹配的新旧商品,因此产生的新增/修改/取消配对可能与用户意图不完全一致。 |
组合表
此表假设修改单中包含设置对应的变更状态。如果修改单中不存在某个状态,该状态的设置不产生任何影响。由于打印端会在过滤前应用正数 quantityDelta 的转换,本表中仅增加数量的修改按新增商品计算。
| 新增商品设置 | 取消商品设置 | 修改商品设置 | 打印结果 |
|---|---|---|---|
| 不打印 | 不打印 | 不打印 | 什么都不打印 |
| 不打印 | 不打印 | 仅打印变更项 | 仅修改商品 |
| 不打印 | 不打印 | 整单重印 | 修改商品和未变更商品 |
| 不打印 | 仅打印变更项 | 不打印 | 仅取消商品 |
| 不打印 | 仅打印变更项 | 仅打印变更项 | 仅取消和修改商品 |
| 不打印 | 仅打印变更项 | 整单重印 | 取消、修改和未变更商品 |
| 不打印 | 整单重印 | 不打印 | 取消商品和未变更商品 |
| 不打印 | 整单重印 | 仅打印变更项 | 取消、修改和未变更商品 |
| 不打印 | 整单重印 | 整单重印 | 取消、修改和未变更商品 |
| 仅打印变更项 | 不打印 | 不打印 | 仅新增商品 |
| 仅打印变更项 | 不打印 | 仅打印变更项 | 仅新增和修改商品 |
| 仅打印变更项 | 不打印 | 整单重印 | 新增、修改和未变更商品 |
| 仅打印变更项 | 仅打印变更项 | 不打印 | 仅新增和取消商品 |
| 仅打印变更项 | 仅打印变更项 | 仅打印变更项 | 仅新增、取消和修改商品 |
| 仅打印变更项 | 仅打印变更项 | 整单重印 | 新增、取消、修改和未变更商品 |
| 仅打印变更项 | 整单重印 | 不打印 | 新增、取消和未变更商品 |
| 仅打印变更项 | 整单重印 | 仅打印变更项 | 新增、取消、修改和未变更商品 |
| 仅打印变更项 | 整单重印 | 整单重印 | 新增、取消、修改和未变更商品 |
| 整单重印 | 不打印 | 不打印 | 新增商品和未变更商品 |
| 整单重印 | 不打印 | 仅打印变更项 | 新增、修改和未变更商品 |
| 整单重印 | 不打印 | 整单重印 | 新增、修改和未变更商品 |
| 整单重印 | 仅打印变更项 | 不打印 | 新增、取消和未变更商品 |
| 整单重印 | 仅打印变更项 | 仅打印变更项 | 新增、取消、修改和未变更商品 |
| 整单重印 | 仅打印变更项 | 整单重印 | 新增、取消、修改和未变更商品 |
| 整单重印 | 整单重印 | 不打印 | 新增、取消和未变更商品 |
| 整单重印 | 整单重印 | 仅打印变更项 | 新增、取消、修改和未变更商品 |
| 整单重印 | 整单重印 | 整单重印 | 全部打印 |
(表中“仅打印变更项”为“仅打印新增/修改/取消的商品”的简写。)
示例
以下示例均基于这张原始厨房单:
- 12 号桌
- 1x Beef Burger
- 1x Fries
- 1x Lemonade
示例 1:修改商品触发整单重印
员工编辑订单,为 1x Beef Burger 添加了一条备注。
设置:
- 新增商品:
不打印 - 取消商品:
不打印 - 修改商品:
整单重印
打印出的修改单:
- 1x Beef Burger(修改)
- 1x Fries(未变更)
- 1x Lemonade(未变更)
修改商品被打印是因为修改商品设为整单重印。Fries 和 Lemonade 也被打印,因为该设置会包含未变更商品。
示例 2:另一种编辑只打印变更商品
员工编辑同一订单,新增了 1x Onion Rings。
设置:
- 新增商品:
仅打印新增/修改/取消的商品 - 取消商品:
不打印 - 修改商品:
仅打印新增/修改/取消的商品
打印出的修改单:
- 1x Onion Rings(新增)
新增商品被打印是因为新增商品设为仅打印新增/修改/取消的商品。Beef Burger、Fries 和 Lemonade 没有打印,因为它们没有变更。
示例 3:即使其他编辑触发整单重印,取消商品仍被排除
员工对同一订单做了两处编辑:
- 新增
1x Onion Rings - 取消
1x Lemonade
设置:
- 新增商品:
整单重印 - 取消商品:
不打印 - 修改商品:
不打印
打印出的修改单:
- 1x Onion Rings(新增)
- 1x Beef Burger(未变更)
- 1x Fries(未变更)
新增商品触发了整单重印,因此包含未变更商品。Lemonade 仍被排除,因为取消商品设为不打印。
示例 4:数量增加按新增商品打印
原始订单包含 2x Beef Burger。员工在不修改选项、备注、价格或外带状态的情况下将其增加到 3x Beef Burger。
设置:
- 新增商品:
仅打印新增/修改/取消的商品 - 取消商品:
不打印 - 修改商品:
不打印
打印出的修改单:
- 1x Beef Burger(新增)
后端仍然以修改商品发送该购物车商品,最终数量为 3,并附带 quantityDelta: 1。打印端将正数差额按新增商品处理,因此厨房单只打印增加的数量。