主因是后端业务归属 Bug,配置漂移是触发条件。
系统取到了设备,却把接口认证档口写进订单。设备管理改对了,不代表订单会跟着改对。
源码置信度:高Root Cause & Remediation Review · 2026-08-10
这是开发前审核稿:把根因、证据、改进项、历史数据边界、测试验收和回滚方案一次讲清。当前未修改业务代码、生产配置或数据库。
系统取到了设备,却把接口认证档口写进订单。设备管理改对了,不代表订单会跟着改对。
源码置信度:高目标配置有 WebSocket 地址,但没有显式打开同步开关;发送失败后又缺少真实失败回传。
源码置信度:中高,错误码待补证equipment.restaurant_idequipment_code,但档口仍取 api_auth.restaurant_id设备档口与认证档口都能代表订单归属,却没有同步和冲突规则。
即使设备档口正确,入口仍把旧认证档口作为有效值传下去。
订单、档口收入、餐段及依赖档口的规则都有潜在影响。
jqbh 同时存在时必须是同一设备;冲突则拒绝下单并告警。接口认证页面展示绑定设备、设备档口与认证档口的一致性;增加只读巡检,逐步取消双真源。
先只读导出候选订单并按设备变更时间勾稽,再单独授权写修复。严禁无时间边界批量 UPDATE。
| 关键测试 | 通过标准 |
|---|---|
| 认证档口旧、设备档口新 | 订单使用设备档口,并生成漂移告警。 |
| 认证设备与 jqbh 不同 | 拒绝下单,不产生订单。 |
| 认证未绑设备、jqbh 唯一有效 | 按兼容规则使用该设备及其档口。 |
| 设备已删除或无档口 | 明确失败,不冒用其他设备、不默认落档口 1。 |
| 普通外部订单、退款、出货上报 | 行为与修复前一致。 |
LockLygPushfalse,入口直接不发送--dry-run,核对范围和数量。| 状态 | 对外口径 | 系统行为 |
|---|---|---|
| 功能关闭 | 未启用 / 已跳过 | 不连接;初始化命令退出非 0。 |
| 无目标设备 | 无符合条件设备 | 不再标记成功。 |
| 部分设备失败 | 部分失败 | 返回数量与失败设备定位,命令退出非 0。 |
| 写帧成功 | 服务端已发起 | 等待 ACK 或现场回读。 |
| 设备业务 ACK | 设备已接收 / 已处理 | 完成消息级对账。 |
确认项目、配置与设备;生产只读查询候选订单;补错误码截图与日志。无生产写操作。
先补失败测试,再修改售卖柜入口、留样柜推送结果与命令退出语义;不顺手重构其他渠道。
构造档口漂移用例;单台售卖柜小额测试;留样柜先 dry-run,再限定范围小批量发送。
候选清单、金额、备份和回滚方案全部审完后,才允许事务化小批量修复。
售卖柜设备真源、冲突校验与测试;留样柜真实结果、命令退出与测试;脱敏结构化日志。
直接改生产配置、直接改历史订单、擅改厂商协议、通用消费链重构、前端视觉改版。
foodInfo 与 preFoodInfo。jqbh 冲突时拒绝下单。审核通过,先按 P0 开发;允许生产只读核验,不允许直接改历史订单。| 证据 | 位置(基线 10475011e) |
|---|---|
| 设备档口保存 | deviceManagement.vue:562-585;Equipment.php:255-275 |
| 售卖柜设备与档口参数 | Shop.php:35-112 |
| 订单档口优先级 | Consume.php:2128-2141 |
| 订单列表档口展示 | MealOrder.php:806-875;consume/index.vue:211-220 |
| 留样柜全局与江西 206 配置 | application/config.php:611-616;zhct_jx206/config.php:51-58 |
| 推送与设备筛选 | LockLygPush.php:21-235 |
| WebSocket 边界 | WebSocketClient.php:16-83 |
| 初始化命令 | LockLygInitPush.php:61-90 |
| 项目归属线索 | 历史提交 1617ddb36:江西206售卖柜接口与PC订单设备支持 |
Markdown 真源:原因分析及改进优化审核稿。页面未包含认证凭据、支付信息或生产敏感数据。