A02 未放餐盘取餐报警:业务处理与现场诊断汇总

项目:ZhctWeightingTableYoukate · 状态:基于当前代码和 2026-08-25 已连接设备日志整理 · 范围:仅 A02

口径更新:自 2026-08-25 起,A02/A03 的完整且最新技术口径以《A02 / A03 防逃单报警技术业务全量说明》为准。本文件保留 A02 专项过程与现场证据;补录记录的 pick_time 已统一为认领人员确认并触发上传的当前时刻。

A02 在无餐盘状态发生稳定减重时触发。常规认领只有在取餐记录上传成功且本地候选记录删除成功后才解除;管理卡解除不生成取餐记录。

1. 业务目标与总原则

  1. 刷管理卡解除:仅解除报警,记录卡值,不生成取餐记录。
  2. 放餐盘认领并补录:读取已绑定人员餐盘,创建归属该人员的取餐记录并上传;常规情况下服务端上传成功后才解除。

未选择方式时,普通餐盘码、放盘和管理卡均不能解除 A02,也不能进入普通打餐流程。

2. 触发与实时重量

触发时固定并记录:alarmIdbaselineWeighttriggerCurrentWeighttriggerPickWeighttriggerAt。报警未解除前,只要仍是取餐前页、无餐盘码且秤体稳定,页面按 max(0, baselineWeight - currentWeight) 实时显示本单逃单重量。

稳定重量恢复到 baselineWeight 或更高时,写 WEIGHT_RECOVERED 并自动解除;不创建取餐记录、不上传。餐盘认领码出现后冻结最后一次有效逃单重量,防止餐盘自重计入补录。

3. 操作状态和超时

状态可响应输入行为
NONE展示两种方式,忽略所有扫描/放盘
WAIT_MANAGER_CARD有效管理卡管理卡解除
WAIT_TRAY_CLAIM六位非管理卡餐盘码查人并补录
查人、落库或上传中等待当前处理结果
LOCAL_SAVE_FAILED管理卡仅管理卡异常兜底

选择方式后等待 60 秒。超时写 ACTION_TIMEOUT 并返回 NONE,但报警、声光、重量和时长不变。尚未接收有效输入时可点“返回重新选择”,写 ACTION_CANCEL;餐盘码已接收、查人/上传中或 LOCAL_SAVE_FAILED 时不能返回。

4. 刷管理卡解除

  1. 点击“刷管理卡解除”,进入 WAIT_MANAGER_CARD
  2. 只接受 888880888899
  3. 记录卡值、报警时长和最终逃单重量。
  4. MANAGER_CARD 解除;三次本地保存失败时为 LOCAL_SAVE_FAILED_ADMIN_OVERRIDE

此路径不产生或上传取餐记录。

5. 放餐盘认领与补录

5.1 餐盘查人

POST /p/api/selectPlate
plate_code=<餐盘码>
dishes_uuids=["<当前菜品 UUID>"]

只有 code=0data.staff.uuid 存在时查人成功。code=0staff 为空时,当前页面显示“餐盘未绑定人员”;准确含义是“查人结果为空”,需以网络响应为准。

5.2 本地记录

查人成功后创建 pick_record,使用认领人员确认并触发上传的当前时间、最后有效逃单重量、餐盘、人员与当前菜品;报警触发时间只用于审计日志。记录附加 source=ANTI_ESCAPE_A02alarm_id。保存失败自动重试 2 次,共 3 次;全部失败进入 LOCAL_SAVE_FAILED,停止认领且仅管理卡可解除。

5.3 上传与解除

POST /p/api/zhctPushMeal
staff_uuid=<人员 UUID>
code=<餐盘码>
equipment_code=<终端编号>
dish_info={create_date, details:[{uuid, weight}]}
结果本地记录A02 处理
code=0 且删除成功删除TRAY_CLAIM_UPLOAD_SUCCESS 解除
网络类失败即时重试 3 次;仍失败入定时队列TRAY_CLAIM_DEFERRED_NETWORK 离线解除,提示累计延迟
code=1按旧策略删除候选记录NEED_TRAY_BIND,保持报警
其他业务失败或删除失败保留/调度保持报警并展示原因

后台 UploadPickMealRecordWorker 继续处理离线队列;同一 alarmId 后续上传成功可解除仍在报警中的 A02,且当前餐盘仍在打餐页时会重新查人刷新累计。

6. 日志与排障

文件内容
/sdcard/Log/alarm_log_yyyyMMdd.txt日报警分类日志
/sdcard/Log/local_log_yyyyMMdd.txtA02 业务过程日志
/sdcard/Log/网络请求_yyyyMMdd.txt接口 URL、请求、响应和 trace_id

关键事件:TRIGGERACTION_SELECTACTION_CANCELACTION_TIMEOUTWEIGHT_RECOVEREDCLAIM_FAILEDCLAIM_SUCCESSLOCAL_SAVE_ATTEMPTLOCAL_SAVE_FAILEDUPLOAD_SUCCESSUPLOAD_DEFERRED_NETWORKNEED_TRAY_BINDRESOLVE。排障应先按 alarmId 串联报警日志,再按餐盘码/时间查网络原始响应。

7. 现场证据:餐盘 003400

结论:餐盘 003400 能查到人员,不存在读码或查人绑定缺失;问题是服务端两个接口判定不一致。

  1. 17:45:32/p/api/selectPlate 返回 code=0,人员 UUID FCF83901-C1C6-4074-DAD5-2B7EC655F91C,姓名尹旭亮;trace ID:6a8d643be1a1b
  2. 17:45:33,客户端以相同 UUID、code=003400 和终端 ykt_test_0001 调用 /p/api/zhctPushMeal
  3. 上传返回 code=1餐盘003400未绑定人员!!!;trace ID:6a8d643c899e9
  4. 同一报警 ykt_test_0001-A02-1787651031820CLAIM_SUCCESS 后紧跟 NEED_TRAY_BIND,因此按上传成功才解除的规则保持报警。

客户端不能绕过 code=1 强制解除,否则违反业务前提。服务端需统一 selectPlatezhctPushMeal 的绑定校验数据源或缓存策略;客户端应明确提示“上传校验返回餐盘未绑定”,并在一次 code=1 后防止同盘连续重复认领。

8. 现场验收清单

  1. 稳定减重触发 A02,逃单重量实时更新;恢复基准自动解除。
  2. 默认状态不响应扫描或放盘;输入前可返回选择,报警/重量/时长不变。
  3. 管理卡解除记录卡值,无取餐记录。
  4. 认领成功创建带 A02 来源和报警流水号的本地记录。
  5. 仅上传 code=0 且本地删除成功后解除。
  6. 网络失败三次进入定时队列并提示累计延迟。
  7. code=1 时报警不解除,服务端修复后重新验收。

9. 代码定位

模块责任
HomeActivity触发、实时重量、门控、查人、落库、上传、解除、日志
NoTrayPickDetector / AntiEscapeAlarm重量证据和报警实体
AntiEscapeAlarmDialogFragmentA02 页面与状态提示
A02TrayClaimCodePolicy同盘去重、移盘确认
PickMealRecord / UploadPickMealRecordWorker候选记录、离线补传
CPTNetworkRequestselectPlatezhctPushMeal 接口声明