spec.md 4.1 KB

039 商家 App 订单小票数据

已确认范围(2026-10-29)

小票 GET 接口放在现有商家订单控制器 /system/orderShOprate:

  • /getOrderPrintInfo?ddId=...:按本系统字段提供一张真实订单的小票数据。

只做后端和 App 接入说明;不修改 App、不绑定或驱动打印机、不发送打印任务,不改变普通单、多店子单的付款或履约流程。不新增分支。

数据与权限

  • 接口声明 @Auth、显式 token 请求头;小票查询复用商家订单权限,覆盖普通商家、分管账号、夜市主和摊主,禁止跨店读取。
  • 小票功能直接提供,不设置启用开关,不增加字典或初始化 SQL。
  • 商品从 pos_order.food 快照解析成数组,包含名称、数量、价格、规格加价、已选规格和逐商品备注;不查当前商品或规格,不重新计算订单金额。
  • 订单金额、优惠及运费均来自订单快照。区分骑手原运费 freight 和客户实付运费 customerDeliveryFee;旧订单无新字段时,实付运费回退 freight。优惠分项和合计不包含商家配送补贴,避免混算。
  • 订单类型、自配送及支付状态返回码值;支付方式同时返回原始 payType 和台湾繁体 payTypeName,供 App 小票直接展示。到付 payStatus=1 不代表已收到现金,不能据此打印“已收款”。
  • 收货信息只读订单地址快照;自取/堂食无收货人正常返回 null,并保留取餐号、预留电话、桌号及预约信息。
  • 商品 JSON 损坏时明确返回国际化错误,不伪造空白小票;缺失门店时保留订单店名快照,门店地址/电话为空。不返回用户整表或支付密钥。

验收

小票功能无需开关;有效商家可读取授权订单;跨店、普通用户和骑手被拒;普通/多店快照规格保留;无地址、旧运费、免运、积分及其他优惠可正确展示;不产生订单写入或真实打印。

2026-11-03 商家代客下单的新单通知与小票触发(已确认,待实现)

本节追加商家代客下单的新单通知范围;原小票数据接口、权限及字段契约保持不变。

已确认规则

  • 商家代客现金单(orderSource=MERCHANT、payType=4):订单创建事务提交成功后发送商家新订单通知,App 收到后获取小票数据并打印。不等待确认现金收款;小票仍按真实 payStatus 展示,不把创建成功当成已经收款。
  • 商家代客线上支付单(信用卡 2、LINE Pay 3、Apple Pay 5):创建时不发送可触发打印的新单通知;服务端确认支付成功并提交事务后,再通知商家并由 App 打印。不能依据前端支付页面返回认定付款成功。
  • 现金确认收款及线上重复支付回调不重复触发新单打印;事务回滚、支付失败或已取消且进入退款处理的订单不触发新单打印。
  • 通知复用现有门店收件人路由和新单声音规则,覆盖店主、摊主与有权限的分管账号;携带完整子订单号 ddId,不使用父单号代替。
  • 外送、自取、堂食按订单类型使用现有新单场景;普通用户创建订单的支付、骑手接单和通知时机不变,多店批次通知规则不变。
  • 本次不新增或改写到付 payType=1、线下转账 payType=6 的触发规则,不把它们混同于现金 payType=4。

后端与 App 边界

后端负责符合条件的新单通知及现有 /getOrderPrintInfo?ddId=... 小票数据。App 负责接收通知、按订单号防重复、获取数据及驱动已绑定的打印机。仅改后端不代表已经实现真机自动出纸;不修改 App,不新增打印状态表或打印机绑定功能。

验收

现金创建提交后通知、提交前不通知、回滚不通知;三类线上支付创建不通知,付款成功后通知;现金确认及重复支付不重复发新单;商家代客外送单不能被普通用户单“等骑手接单”的通知分支漏掉;普通订单和多店通知无回归。App 需另行验证重复通知、创建页本地打印与推送同时到达、打印失败重试及实际出纸。