150 KiB
03 三端功能设计修订 CR-02(v1.0)
触发依据:
docs/公寓端/00-公寓端主要功能设计.md对公寓端功能重新规划;docs/backend/*(既有系统梳理)、docs/frontend/*(既有界面梳理)、docs/10-架构优化方案-三端拆分.md、docs/11-既有数据库结构分析.md为现状基线。 上位依据:docs/10§3(端职责)、§4(模块划分)、§5(数据架构)、§6(接口契约)、§9(迁移阶段)、附录 D(维护约定);docs/设计变更/01-本地建单与本地调整.md(CR-01 v2);docs/设计变更/02-文档修订清单(可执行).md(R-01R-51、R-C1R-C11)。 性质:设计稿(Design Only)。本轮只产出设计文档,不写业务代码、不建表改表、不执行 DDL / DML、不改任何配置。文中所有新增表均为设计定义,DDL 须在阶段二契约冻结评审通过后方可执行。 权威声明:本文件是 CR-02 范围内"覆盖范围、交互协议、交互数据、模块数据设计、数据表设计、关键流程变更"的唯一权威表述。三端分册中与本文件冲突的旧口径一律以本文件为准,并已在 §8 施工单中逐处修订。跨端 20 接口编号、CR-01 的jcid/jcsj裁定、R-C1~R-C11 的裁定继续有效,本文件不推翻。
表 0-1 文档信息
| 项 | 内容 |
|---|---|
| 文档编号 | docs/设计变更/03(CR-02) |
| 文档名称 | 三端功能设计修订:覆盖范围、交互协议与数据、数据表与关键流程 |
| 适用范围 | 铁路行车公寓叫乘与一卡通系统三端(平台端 / 公寓端 / 应用端值班员界面) |
| 关联文档 | docs/公寓端/0009、docs/平台端/0109、docs/应用端/01~10、docs/10、docs/11、docs/backend/*、docs/frontend/*、CR-01、docs/设计变更/02 |
| 约束条件 | ① 三端总体定位不变(平台真源与规则 / 公寓现场执行与事实 / 应用端人看与人工干预);② 公寓端与应用端同 jar、同库、同进程,不构成第三套服务;③ 平台不回调公寓,跨端一律"公寓主动拉 + 推";④ 跨端 20 个接口编号不新增、不重排,新增数据一律走 payload 与 bizType 扩展;⑤ 技术基线锁定 RuoYi-Vue + Vue + MySQL(公寓端 / 应用端),平台端选型按 D13 待决;⑥ 状态字段仍只有 apt.duty.state 一个写入口 |
| 交付对象 | 架构评审、三端详细设计、契约冻结、试点实施与验收 |
表 0-2 修订记录
| 版本 | 日期 | 说明 |
|---|---|---|
| v1.0 | 2026-11-09 | 首次形成:把 docs/公寓端/00 的 14 项需求编号化为需求基线(§1);裁决 14 项口径冲突并重划三端覆盖范围(§2);定义四层交互协议与 v2 契约扩展(§3);定义上行 bizType、payload 与枚举字典(§4);新增模块数据设计(§5)与 16 张表的列级设计(§6);定义 8 条关键流程变更(§7);给出已执行的逐文件施工单(§8)与待决策项(§9) |
| v1.1 | 2026-11-09 | 补遗 §10:落实 docs/公寓端/00 v1.1 新增的「Asterisk 配置数据管理模块」(AC-01AC-05)与 SIP 分机离线告警规则;新增注册表 apt_sip_reg_status(T-17)、表数口径 58 → 59 张、裁决 CR-C15 |
| v1.2 | 2026-11-09 | 补遗 §11:明确叫乘功能的两类实现方式及其业务流程(SIP 语音叫乘 / 平板叫乘)的触发条件、交互流程、状态上报机制与结果反馈路径;流程权威表述为 docs/公寓端/05 §9(表 5-9bizType 或 WS 消息名 |
| v1.3 | 2026-11-09 | 补遗 §12:落实「公寓端人脸数据下发管理」完整模块(AF-01AF-06:注册与平台同步、平台下载入库、签到设备下发、消费/叫乘按设备维度隔离、离寓自动擦除、长期驻留保留);权威表述为 docs/公寓端/10(表 10-1bizType、不改 59 张表口径 |
| v1.4 | 2026-11-10 | 补遗 §13:新增「人员入住作业流程」完整设计(docs/公寓端/11,CI-01CI-05:注册与签到、入住申请、值班员审核、数据提报与匹配、叫乘环节),含三条状态链、复用表补列结构、端内接口 N-38bizType、不新增 gy_jcxx 状态字段,"已入住"为流程态 + 业务事实双重表达 |
| v1.5 | 2026-11-10 | 补遗 §14:新增「消费、充值与菜品管理」完整设计(docs/公寓端/12,CF-01CF-03:人员消费、人员线下充值、公寓菜品管理),含四条状态链、双额度扣减规则、复用表补列结构、端内接口 N-48bizType、不新增状态字段;仅线下充值不接线上支付,远程点菜仅预留入口 |
| v1.6 | 2026-11-10 | 补遗 §15:把公寓端已完成的四项调整(平板叫乘、人脸签到、消费、菜品管理)在应用端 / 平台端同步落地,统一业务规则、交互流程、权限控制、异常处理,并给出三端状态映射与数据同步机制唯一权威表(表 3-66);同时新增平台端「以公寓为单位的分类统计 / 月·季·年报表 / 公寓排名」能力(docs/平台端/10,PS-01PS-05)。新增裁决 CR-C36v2-draft、平台零回调、公寓本地库 59 张、不新增 bizType;统计能力全部落平台管理端 /platform/v1/admin/stat/**,新增 2 张 pl_apt_stat_* 属平台库(另计),统计结果不回写任何业务状态 |
| v1.7 | 2026-11-10 | 非设计变更登记(索引同步):新增 docs/公寓端/13-公寓端小步迭代开发计划.md(v1.0,实施排期设计稿),以 dev/ 的 RuoYi-Vue / Vue2 / MySQL 实测上游为物理起点,把 §11~§15 的设计成果切成 IT-0IT-8 九个小步迭代(P1 入住 + 叫乘核心闭环优先)、里程碑 MS-0MS-5 与交付物 DV-0DV-8;P2 消费 / 充值 / 菜品整体延后为 IT-9IT-11("设计已覆盖、实现延后",非删需求)。登记 6 项 P0 排期前提与 3 项口径偏离(表 13-4 / 表 13-6),须评审签字后方可执行。变更点与影响范围:新建 公寓端/13 1 篇,同步 公寓端/00、公寓端/README.md、公寓端/07、公寓端/08、docs/README.md 与本文表 0-2 / 0-3 索引;不改动 §12~§15 任何权威表述,不新增裁决 CR-C* / 流程 F-* / 决策点 Q-* / 验收 / 施工单 R-* / M7 / 阶段六 / D-4 等既有编号;跨端仍 20 个编号、契约 v2-draft、平台零回调、公寓本地库 59 张表、平台库累计新增 5 张(含 2 张 pl_apt_stat_*)、apt.duty.state 单写入口、统计结果不回写全部不变;阶段与验收仍以 docs/10 §9、公寓端/07 表 7-1~7-8 为权威,13 篇内 IT-* / MS-* / DV-* / IR-* 编号不纳入本文体系 |
| v1.8 | 2026-11-10 | 非设计变更登记(索引同步):新增 docs/公寓端/15-第二轮开发(IT-1)交付说明.md(v1.0),登记 IT-1 运行时基座 M0 的实现与验收——四前缀治理与 /apt/** 鉴权、gyid 隔离、统一错误码与表 4-4 HTTP 状态映射、401/403 处理器、审计切面落 duty_operation_log、分页上限 100、springdoc 分组、权限点种子与只读列表骨架;41 个单测全绿,真实进程端到端 M0 5/5 通过(dev/scripts/verify-it1-m0.ps1)。变更点与影响范围:新建 公寓端/15 1 篇与 dev/scripts/verify-it1-m0.ps1 1 个脚本,同步 公寓端/README.md、公寓端/14 表 14-23、docs/README.md 与本文表 0-2 索引;不改动 §12~§15 任何权威表述,不新增裁决 CR-C* / 流程 F-* / 决策点 Q-* / 验收 / 施工单 R-* 等既有编号;跨端仍 20 个编号、契约 v2-draft、平台零回调、公寓本地库 59 张表、apt.duty.state 单写入口、统计结果不回写全部不变;IT-* / DV-* 仍为 13 篇内编号,不纳入本文体系;契约冻结签字与 D5 签字仍为 P0 待办 |
表 0-3 本文件图表编号规则
| 项 | 规则 |
|---|---|
| 图表编号 | 统一用 表 3-y(x = 文件序号 3,y 篇内连续递增);引用其他文档一律带文档名前缀,如 docs/公寓端/03 表 3-7 |
| 表名 | 一律小写(apartment/db/mysql/*.sql 实际写法);平台库新增表沿用 pl_ 前缀(分册原文大写,本文用小写) |
| 排期编号 | IT-* / MS-* / DV-* / IR-* 仅用于 docs/公寓端/13 篇内(v1.7),不纳入本文编号体系;本文仍只有 A / CR-C / F / Q / R / PS / S 系列 |
| 需求 / 裁决 / 流程编号 | 需求 A-01A-14(细化项 AC-01AC-05 见 docs/公寓端/00 §3)、裁决 CR-C01CR-C42、流程 F-AF-Q、决策点 Q-20Q-50;统计专册功能项 PS-01PS-05 与管理端接口 S-01~S-07 见 docs/平台端/10;不与 CR-01 的 D/F/G、docs/设计变更/02 的 R-*、R-C* 冲突 |
1. 需求基线(公寓端 14 项重新规划)
表 3-1 docs/公寓端/00 14 项需求的编号化与三端归属
| 编号 | 需求要点 | 主责端 | 协同端 | 本期 | 主要承载(模块 / 表 / 协议) |
|---|---|---|---|---|---|
| A-01 | 从平台获取叫乘任务、上报叫乘结果 | 公寓端 | 平台端 | 是(已具备) | #6 / #7 / #8 / #9;gy_jcxx、apt_report_outbox |
| A-02 | 获取机务人员数据、注册新增人员(新增人脸数据) | 公寓端(签到终端申请 + 值班员确认注册 + 本地入档 + 平台 / 设备分别同步) | 平台端(跨公寓主档真源、接收同步回执) | 是(新增) | #1 / #2 / #9 payload 扩展;apt_person_face_reg、apt_master_person、apt_device_command、pl_person_reg_request;流程以 docs/公寓端/10 §4 与 CR-C25 为准 |
| A-03 | 提交入住请求与离寓请求 | 公寓端 | 应用端(操作入口)、平台端(归集) | 是(分期冲突已裁决,CR-C02) | POST /duty/checkin、apt-stay;#9 / #10 payload 扩展 |
| A-04 | 获取补贴、刷卡消费、扣本地补贴、上报消费台账、本地充值、充值上报;断网期间充值只能本地使用 | 公寓端(离线受理) | 平台端(主账与规则)、应用端(登记界面) | 是(由 P2 提升,最小闭环) | apt.ledger.local、apt_ledger_offline、pl_offline_quota;#10 payload 扩展 |
| A-05 | 设备状态上报:在线、离线、报警 | 公寓端 | 平台端(汇总) | 是(补设备报警) | apt_device_alarm、gy_sb;#11 / #12 payload 扩展 |
| A-06 | 公寓侧叫乘设备任务下发:SIP 呼叫(Asterisk)、平板叫乘 | 公寓端 | — | 是(新增双模式) | apt-dispatch、apt-device;AMI、/open/v1/tablet/** |
| A-07 | 任务按叫乘时间顺序派发;SIP 由 Asterisk 组织,平板形成任务数据由平板拉取 | 公寓端 | — | 是(新增派发队列) | apt_tablet_task.dispatch_seq;gy_jcxx.call_mode / dispatch_seq |
| A-08 | 状态判定:SIP 由 AMI 事件推断,平板由平板上报结果(人员 / 刷脸 / 未刷脸) | 公寓端 | 应用端(展示) | 是(新增事件源) | apt_tablet_call_result、apt.duty.state;/ws/duty tablet.result |
| A-09 | 换乘:值班员对交路指定换乘开车时间、叫乘时间,可能换房 | 公寓端(重算与联动) | 应用端(发起)、平台端(接收变更) | 是(新增) | apt_transfer_order、TRANSFER 命令;#8 / #9 payload 扩展 |
| A-10 | 叫乘报警、离寓报警 | 公寓端 | 应用端(处置) | 是(已具备) | gy_bjxx;#12 |
| A-11 | 房间基础台账、房间状态更新、在寓人员查看 | 公寓端 | 平台端(基线) | 是(补台账归属口径,CR-C05) | gy_rooms、apt_master_room;G-01 building 补列(Q-20) |
| A-12 | 保洁人员管理、保洁记录管理 | 公寓端 | 应用端(现场登记) | 是(新增) | apt_clean_staff、apt_clean_record;POST /duty/clean/** |
| A-13 | 值班员排班、盯控质量考核 | 应用端(排班与考核界面) | 公寓端(事实来源)、平台端(跨公寓汇总) | 是(新增) | duty_roster、duty_performance、pl_staff_performance_daily;#13 payload 扩展 |
| A-14 | 数据上报管理:上报历史、断网提交失败后续报;范围含入住、消费、充值(并补齐叫乘结果、设备状态、报警、归档) | 公寓端 | 平台端(接收与对账) | 是(新增) | apt_report_history、apt_report_retry_batch;apt_report_outbox.retry_batch_id |
docs/公寓端/00原第 14 条以逗号截断,本表按上下文补全上报范围;原文件已同步编号化,见 §8。
2. 三端覆盖范围
2.1 总纲(沿用,不改写)
表 3-2 三端一句话边界与本次补充
| 端 | 一句话边界(沿用 docs/10 §3.4) |
CR-02 补充 |
|---|---|---|
| 平台端 | 管主数据真源、规则与策略、账务主账、跨公寓统计 | 新增"本地登记确认、离线额度与冲正、跨公寓考核汇总"三类接收与确认职责;仍不执行现场动作 |
| 公寓端 | 管现场资源、现场事实、事件与媒体 | 新增"离线受理、平板设备与任务派发、换乘重算、上报历史与续报、现场台账"五类执行职责;主数据仍只读,本地登记为"待确认事实" |
| 应用端 | 管人看与人工干预,任何干预经公寓端领域服务落地 | 新增"换乘发起、平板结果查看、本地充值登记、排班与考核查看"入口;仍无业务状态直写权限 |
2.2 功能域矩阵(v2)
表 3-3 新增 / 调整功能域的三端归属(● 主责 ○ 参与 — 不做)
| # | 功能域 | 对应需求 | 平台端 | 公寓端 | 应用端 | 唯一写入口 / 真源 |
|---|---|---|---|---|---|---|
| 1 | 入住 / 离寓 / 换房 | A-03、A-11 | ○ 归集 | ● 执行与事实 | ○ 发起 | apt-stay → gy_jcxx / gy_rooms / gygl_ly_event |
| 2 | 补贴 / 消费 / 充值(含断网) | A-04 | ● 主账、规则、额度 | ● 本地受理、离线流水 | ○ 登记 / 查询 | 平台 platform-ledger;本地 apt.ledger.local(offline_scope 隔离) |
| 3 | 人员与人脸注册 | A-02 | ● 跨公寓主档真源 / 接收同步回执 | ● 签到终端申请、值班员确认注册、本地入档、按范围下发设备 | ○ 值班台审核与确认 | 签到终端 REG_APPLY → apt_person_face_reg(APPLIED) → 值班员 CONFIRM → apt_master_person 入档 → 分别 #9 上行平台 / FACE_ISSUE 下发设备(CR-C25、§12 表 3-48) |
| 4 | SIP 叫乘(Asterisk) | A-06、A-08 | — | ● | ○ 人工触发 | AMI / apt.duty.state |
| 5 | 平板叫乘与顺序派发 | A-06、A-07、A-08 | — | ● | ○ 查看 | apt_tablet_task / apt_tablet_call_result |
| 6 | 换乘(时刻 + 换房联动) | A-09 | ○ 接收变更 | ● 重算与联动 | ● 发起 | apt_transfer_order → apt.duty.state + apt-stay + apt.voice.endpoint |
| 7 | 设备报警(区别于叫乘 / 离寓报警) | A-05、A-10 | ○ 汇总 | ● 判定 | ○ 处置 | apt_device_alarm / gy_bjxx |
| 8 | 保洁人员与保洁记录 | A-12 | ○ 跨公寓统计 | ● 台账与记录 | ○ 现场登记 | apt_clean_staff / apt_clean_record / gy_clean_task |
| 9 | 值班员排班与盯控质量考核 | A-13 | ○ 跨公寓汇总 | ○ 事实来源 | ● 排班与考核 | duty_roster / duty_performance / pl_staff_performance_daily |
| 10 | 上报历史与续报 | A-14 | ○ 接收、对账 | ● 历史、续报 | ○ 查看积压 | apt_report_history / apt_report_retry_batch |
原有功能域(交路与计划、叫乘执行、设备网关、语音与录音、主数据快照、运维自检、RBAC 与审计、跨公寓报表、外部集成)归属不变,见各端 01。
2.3 冲突裁决
表 3-4 CR-C01~CR-C14 口径裁决(冲突时以本表为准)
| 编号 | 冲突(旧口径) | 裁定(唯一口径) | 被撤销 / 修订的旧表述 |
|---|---|---|---|
| CR-C01 | 端定位在三份 01 中措辞不一 |
沿用 docs/10 §3.4 总纲,本文件表 3-2 为补充解释;不改动上位结论 |
— |
| CR-C02 | 公寓端判"入住 / 换房 / 离寓属后续"、接口"本期不提供";应用端 /duty/checkin 却列本期 |
本期实现;公寓 apt-stay 唯一写入口,应用端只发命令,平台只收归集 |
docs/公寓端/01 表 1-4 #2、docs/公寓端/04 §接口清单末段 |
| CR-C03 | 公寓端账务标 P2、应用端"不做任何账务动作"、平台端"消费受理归公寓" | 账务由 P2 提升为本期最小闭环:平台主账权威、公寓离线受理(额度内本地可用)、恢复后按 serverReceivedAt 归集冲正;应用端只做"本地充值登记 / 本地余额查询",不改主账 |
docs/公寓端/01 表 1-4 #6 / §4;docs/应用端/01 §5 表 1-9 首行 |
| CR-C04(v1.3 由 CR-C25 覆盖) | 公寓端人员快照"一律只读",但 A-02 要求本地注册新增人脸 | 平台仍是跨公寓人员主数据真源;下行快照只读,本地登记表独立可写。注册生效点按 §12 CR-C25 改判为值班员确认(不再等平台确认):确认后即入 apt_master_person 并分别同步平台与公寓内设备;确认前不得参与运安匹配、不得下发设备 |
docs/公寓端/04 "平台下发字段一律只读"的绝对表述(改为"下行快照只读,本地登记表独立可写");本行旧流程以 §12 表 3-48 为准 |
| CR-C05 | 房间台账:平台 GY_ROOMS 基线 vs 公寓 apt_master_room 只读 vs 本地新增房间 |
平台存基线(gyid + roomNo + 床位数);公寓维护现场台账(楼栋 / 楼层 / 朝向 / SIP / 房态 / 在寓人员)并上报差异;building 补列登记为 Q-20,未决前沿用 room_floor + room_no 前缀筛选 |
三处"房间归属"表述统一到本条;不改写 D3 |
| CR-C06 | jcsj 以平台为准 / 不取平台值 / 平台存计算值三种口径 |
沿用 docs/设计变更/02 R-C9、R-C10:jcsj 及其派生恒由公寓按规则快照复算,平台只存"按要素派生的基线"不作为权威值;要素(kcsj / jcfs)不一致时以平台为准并告警 |
docs/公寓端/05 表 5-1 第 4 行、docs/平台端/03 PL_TASK.jcsj(平台计算值)、docs/平台端/06 图 6-2 要点 |
| CR-C07 | 跨端契约"20 个不新增、确需新增走 v2 不在本期"与 A-02~A-14 的新数据冲突 | 不新增跨端编号:全部新数据以既有 #1#14、#23#25 的 payload 与新 bizType 扩展;平板 / 消费机 / 抓拍机属设备侧协议 /open/v1/**,应用端属端内协议,均不计入 20 个跨端接口;契约版本升 v2-draft |
docs/平台端/05 §1 第 2 条"确需新增则走 v2 契约,不在本期"改为按本条执行 |
| CR-C08 | 平板叫乘是"任务下发"还是"拉取" | 平板拉取(与 00 第 7 条"由平板拉取叫乘任务"一致,且符合"平台不回调公寓"纪律):公寓按 jcsj 排序生成任务,平板按 cursor 拉取并回传结果 |
docs/公寓端/05 §3 设备协议"未确认"口径 |
| CR-C09 | 换乘无落点(ASSIGN_ELEMENT / ADJUST_TIME 不含换房联动) |
新增 TRANSFER 受控命令 + apt_transfer_order;由公寓重算时刻、联动 apt_sip_binding 与房间,再经 #8 / #9 上报;CR-01 两条命令保持不变 |
三端"换乘零命中"状态 |
| CR-C10 | "上报历史"被 outbox 队列语义覆盖,续报只有单条 replay | outbox 保持队列语义;新增 apt_report_history(终态流水)与 apt_report_retry_batch(续报批次),续报复用既有上行接口重发,不新增编号 |
docs/公寓端/04 §上报接口清单、docs/公寓端/05 §6 |
| CR-C11 | 值班员排班 / 考核无表无接口,交接班标"后续" | 本期新增 duty_roster / duty_performance;duty_shift_handover 仍按原口径后续,不借本次顺带启用 |
docs/应用端/01 表 1-5 #6 不变;新增 #10、#11 两个域 |
| CR-C12 | 设备报警与叫乘 / 离寓报警混在 gy_bjxx |
新增 apt_device_alarm 独立表,alarm_source 区分 CALL / LEAVE / DEVICE;#12 摘要按来源分组,不改 gy_bjxx 列 |
docs/公寓端/09 #12 用途列 |
| CR-C13 | 同码不同常量:40903、50101 两端命名不一致 |
统一:40903 = APT_SNAPSHOT_EXPIRED、50101 = APT_PROTOCOL_NOT_CONFIRMED;别名不保留 |
docs/公寓端/04 表 4-4、docs/应用端/04 表 4-4 对应行 |
| CR-C14 | 契约版本 v1-draft、表数口径 44 / 45 并存 |
契约统一升 v2-draft(字段级仍在阶段二冻结);公寓本地库业务表口径 v1.0 为 58 张、v1.1 补遗后为 59 张(44 存量 + apt_local_task 1 + CR-02 新增 13 + 补遗 apt_sip_reg_status 1,见 §10),平台库新增 3 张 pl_* 另计,框架 sys_* 30 张口径不变(表 3-25、3-26) |
docs/公寓端/09、docs/平台端/05 版本行;docs/公寓端/03 §1 标题、docs/平台端/README 表数量行 |
2.4 分期
表 3-5 本期 / 后续范围
| 阶段 | 做 | 不做 |
|---|---|---|
| 本期(CR-02) | 表 3-3 十个域中 1 |
不改运安接入归属、不新增跨端编号、不启用 duty_shift_handover、不引入 kcgl、不开放录音外链、不做平台回调公寓 |
| 后续 P2-1 | 补助规则引擎化、餐饮结算规则、跨公寓考核报表重建 | 本期不实现规则引擎 |
| 后续 P2-2 | 多公寓推广与注册版本管理、P-01 平台前端形态、D13 平台库选型 | 本期按选项 A(平台保持现库)设计,不改写语义 |
3. 交互协议
3.1 四层协议栈
表 3-6 协议分层、方向与可靠性(平台不回调公寓为全栈硬约束)
| 层 | 参与方 | 协议 / 前缀 | 方向 | 鉴权 | 可靠性 | 对应需求 |
|---|---|---|---|---|---|---|
| L1 跨端 | 公寓端 ↔ 平台端 | HTTPS /platform/v1/**、/open/v1/**;20 个编号不新增 |
公寓主动 GET 拉(#1~#7、#23)/ POST 推(#8~#14、#24);#15 / #25 平台自答;#16 / #17 方向待定(P-02 / F-03) | X-Apt-GyId + 路径 gyId 双携带;mTLS / 双向令牌 |
上行信封 + Idempotency-Key + outbox + 三时间戳 + 水位 / 对账 |
A-01~A-05、A-14 |
| L2 端内 | 应用端 ↔ 公寓端 | 同 JVM 进程内 Java 接口;浏览器门面 /duty/**;推送 /ws/duty |
应用端 → 公寓领域服务(命令);公寓 → 应用端(事件推送) | 复用公寓端 RuoYi 账号 + gyid 数据域 |
commandId / action_id 幂等;seq 单调;60 s 兜底轮询 |
A-03、A-08、A-09、A-13 |
| L3 设备侧 | 平板 / 消费机 / 抓拍机 ↔ 公寓端 | HTTPS /open/v1/tablet/**、/open/v1/device/**;设备主动注册、心跳、拉取、上报 |
设备拉取(平板任务、消费凭证);指令 ACK 回传 | deviceCode + 激活码,HMAC(secret, body) + ±5 min 时间窗 + nonce |
commandId 幂等、本地队列、断网续传 |
A-04、A-06~A-08 |
| L4 语音 | 公寓端 ↔ Asterisk | AMI(本地)、SIP、会议桥、串口广播 | 本机出站 | 本地配置(不出现凭据) | apt_ast_ami_session 自愈、事件兜底比对 |
A-06、A-08、A-10 |
L3 的"设备拉取"不是跨端接口,也不违反"平台不回调公寓":它是公寓端与自有设备之间的本地网关协议。
3.2 跨端 20 接口的 v2 扩展点
表 3-7 既有编号上的 payload 扩展(编号、方向、路径一律不变)
| # | 接口 | v2 扩展内容 | 方向 | 承载需求 |
|---|---|---|---|---|
| 1 | GET /platform/v1/master/apartments/{gyId} |
响应增 offlineQuota(离线充值单笔 / 累计上限)、features.tabletCall 开关 |
下行 | A-04、A-06 |
| 2 | GET /platform/v1/master/persons |
响应增 personRegVerdicts[](平台对已注册人员的同步回执:ACCEPTED / REJECTED 与 platformVersion,不再是注册批准)与人员增量 mediaUrls[] |
下行 | A-02、CR-C25 |
| 3 | GET /platform/v1/master/routes |
routes[] 增 transferPolicy(是否允许换乘、最晚可改时刻) |
下行 | A-09 |
| 5 | GET /platform/v1/master/rooms |
rooms[] 增 building / orientation / sipExtension(现场台账差异核对) |
下行 | A-11 |
| 7 | GET /platform/v1/tasks/changes |
changes[] 增 transferOrders[]、callMode |
下行 | A-06、A-09 |
| 8 | POST /platform/v1/ack/tasks |
items[] 增 computedCallTime 的 transferRef、dispatchSeq |
上行 | A-07、A-09 |
| 9 | POST /platform/v1/report/duty-results |
bizType 扩 CHECKIN / CHECKOUT / TABLET_RESULT / TRANSFER / STAFF_PERFORMANCE_DAILY |
上行 | A-03、A-08、A-09、A-13 |
| 10 | POST /platform/v1/report/ledger |
bizType 扩 LEDGER_OFFLINE;offlineScope / localBalanceVersion / quotaRef |
上行 | A-04 |
| 11 | POST /platform/v1/report/device-status |
摘要增 tabletCount、alarmSource=DEVICE 分组 |
上行 | A-05、A-06 |
| 12 | POST /platform/v1/report/alarms |
摘要按 alarmSource 分组;增 deviceCode |
上行 | A-05、A-10 |
| 13 | POST /platform/v1/report/archive |
摘要增 cleanRecords[]、staffPerformance[]、reportHistory 计数 |
上行 | A-12、A-13、A-14 |
| 14 | POST /platform/v1/heartbeat |
增 pendingRetryBatches、lastReportHistoryAt |
上行 | A-14 |
| 23 | GET /open/v1/voice/config |
configType 增 TABLET(平板提示音 / 模板) |
下行 | A-06 |
| 24 | POST /open/v1/voice/summary |
摘要增 callMode=SIP / TABLET 分组 |
上行 | A-06、A-08 |
| 2 / 9 / 10 的接收侧 | POST /platform/v1/master/person-regs(不新增编号:作为 #2 的配套同步回执返回,仍由公寓拉取) |
值班员注册成功后的人脸主档同步上行走 #9 的 PERSON_REG bizType;平台回执不决定本地注册生效(CR-C25) |
上行 | A-02 |
新增
bizType不新增接口编号,仍复用 §6.2 上报信封;平台侧PL_RECEIVE_LOG按biz_type分流,见docs/平台端/05§9。
3.3 端内与设备侧新增接口
表 3-8 新增接口清单(N-01~N-18;均不计入跨端 20 接口)
| 编号 | 方法 + 路径 | 层 | 端 / 模块 | 权限点 | 幂等 | 落表 | 需求 |
|---|---|---|---|---|---|---|---|
| N-01 | POST /open/v1/tablet/register |
L3 | apt.device.gateway |
设备凭据 | deviceCode |
apt_tablet_device |
A-06 |
| N-02 | POST /open/v1/tablet/heartbeat |
L3 | apt.device.gateway |
设备凭据 | L0 | apt_tablet_device.last_seen_at |
A-05 |
| N-03 | GET /open/v1/tablet/tasks?deviceCode&cursor&limit |
L3 | apt-dispatch |
设备凭据 | L0(游标) | apt_tablet_task |
A-07 |
| N-04 | POST /open/v1/tablet/results |
L3 | apt.duty.state |
设备凭据 | resultId |
apt_tablet_call_result |
A-08 |
| N-05 | POST /open/v1/tablet/tasks/{taskId}/ack |
L3 | apt-dispatch |
设备凭据 | taskId + deviceCode |
apt_tablet_task.pulled_* |
A-07 |
| N-06 | POST /duty/jcxx/{jcid}/commands(TRANSFER) |
L2 | apt.duty.command |
duty:jcxx:transfer |
L2 commandId |
apt_transfer_order、duty_manual_action |
A-09 |
| N-07 | GET /duty/transfer / GET /duty/transfer/{transferId} |
L2 | apt.duty.view |
duty:jcxx:query |
L0 | apt_transfer_order |
A-09 |
| N-08 | POST /duty/person/face-reg / GET /duty/person/face-reg |
L2 | apt-stay(经领域服务) |
duty:person:reg |
L2 regId |
apt_person_face_reg |
A-02 |
| N-09 | POST /duty/ledger/local-recharge |
L2 | apt.ledger.local |
duty:ledger:local |
L2 flowId |
apt_ledger_offline、gy_ykt_xjczjl |
A-04 |
| N-10 | GET /duty/ledger/local-balance?ryid |
L2 | apt.ledger.local |
duty:ledger:local |
L0 | apt_ledger_offline(本地口径) |
A-04 |
| N-11 | POST /duty/clean/staff / GET /duty/clean/staff |
L2 | apt-stay |
duty:clean:staff |
L1 | apt_clean_staff |
A-12 |
| N-12 | POST /duty/clean/records / GET /duty/clean/records |
L2 | apt-stay |
duty:clean:record |
L2 recordId |
apt_clean_record、gy_clean_task |
A-12 |
| N-13 | POST /duty/roster / GET /duty/roster |
L2 | apt-duty |
duty:roster:* |
L1 shiftId |
duty_roster |
A-13 |
| N-14 | GET /duty/performance / POST /duty/performance/recalc |
L2 | apt-duty |
duty:performance:* |
L1 (gyid, date) |
duty_performance |
A-13 |
| N-15 | GET /apt/report/history |
L2(管理端) | apt.report.outbox |
apt:report:list |
L0 | apt_report_history |
A-14 |
| N-16 | POST /apt/report/retry / GET /apt/report/retry/{batchId} |
L2(管理端) | apt.report.outbox |
apt:report:retry |
L2 batchId |
apt_report_retry_batch、apt_report_outbox |
A-14 |
| N-17 | GET /apt/device/alarms / POST /apt/device/alarms/{id}/handle |
L2(管理端) | apt.device.gateway |
apt:device:alarm |
L1 | apt_device_alarm |
A-05 |
| N-18 | GET /apt/tablet/devices / GET /apt/tablet/tasks |
L2(管理端) | apt-device |
apt:tablet:list |
L0 | apt_tablet_device、apt_tablet_task |
A-06、A-07 |
表 3-9 /ws/duty 消息扩展(现有 12 类不变,新增 5 类)
| 消息名 | 方向 | 主要字段 | 触发 | 需求 |
|---|---|---|---|---|
tablet.result |
公寓 → 应用端 | jcid、taskId、faceVerifyState、verifiedRyid、occurredAt、seq |
平板结果回传 | A-08 |
transfer.changed |
公寓 → 应用端 | transferId、jcid、newJcsj、newRoomId、state、seq |
换乘生效 / 驳回 | A-09 |
device.alarm |
公寓 → 应用端 | alarmId、deviceCode、alarmSource、alarmEventKey、seq |
设备报警 | A-05 |
ledger.offline |
公寓 → 应用端 | flowId、offlineScope、localBalanceVersion、quotaRemain、seq |
断网本地受理 | A-04 |
report.backlog |
公寓 → 应用端 | pending、failed、retryBatchId、lastReportHistoryAt、seq |
上报积压 / 续报完成 | A-14 |
表 3-10 错误码统一与新增(沿用两端 04 表 4-4 分段,不自造新段)
| code | 常量 | 含义 | 裁定说明 |
|---|---|---|---|
| 40903 | APT_SNAPSHOT_EXPIRED |
快照过期 / 主数据版本过期 | CR-C13:两端统一此名,废止 APT_MASTER_VERSION_STALE 别名 |
| 50101 | APT_PROTOCOL_NOT_CONFIRMED |
设备协议未确认 | CR-C13:废止 APT_PROTOCOL_UNCONFIRMED |
| 40913 | APT_OFFLINE_QUOTA_EXCEEDED |
断网本地充值 / 扣补贴超过离线额度 | 新增;offlineQuota 由 #1 下发 |
| 40914 | APT_FACE_REG_PENDING |
注册申请未获值班员确认,不能参与运安匹配与设备下发(v1.3 由 CR-C25 改判;平台同步回执未返回不再触发本码) | CR-C25 改判 |
| 40915 | APT_TRANSFER_TIME_ILLEGAL |
换乘时刻晚于开车时刻或超出 transferPolicy |
新增 |
| 40916 | APT_TABLET_TASK_EXPIRED |
平板任务已被派发 / 已过期,重复 ACK | 新增 |
| 50302 | APT_REPORT_RETRY_BUSY |
同一批次续报进行中 | 新增 |
4. 交互数据
4.1 上行信封与 bizType
表 3-11 信封(沿用 docs/10 §6.2,仅扩展取值)
| 字段 | 类型 | 说明 | v2 变更 |
|---|---|---|---|
gyId / appVersion / batchId / sentAt / watermark |
string / string / string / datetime / long | 沿用 | 不变 |
items[].idempotencyKey |
string | hash(gyid + bizType + bizId + bizVersion) |
新增 bizType 取值沿用同一公式 |
items[].bizType |
string | 业务类型 | 见 表 3-12 |
items[].bizId / bizVersion / occurredAt / receivedAt / payload |
string / long / datetime / datetime / object | 沿用 | payload 结构见 表 3-13~3-21 |
serverReceivedAt |
datetime | 平台接收时间,回执带回 | 不变;账务归日仍以它为准 |
表 3-12 新增 bizType 与承载接口(不新增接口编号)
| bizType | 承载接口 | bizId |
幂等补充 | 需求 |
|---|---|---|---|---|
PERSON_REG |
#9 | regId |
值班员注册成功后上报;平台按 regId 去重,重复返回原同步回执 verdict(ACCEPTED / REJECTED),不做注册准入 |
A-02、CR-C25 |
CHECKIN / CHECKOUT |
#9 | jcid + 事件序号 |
沿用 #9 幂等键 | A-03 |
TABLET_RESULT |
#9 | resultId |
平板重传同 resultId 视为成功 |
A-08 |
TRANSFER |
#8 / #9 | transferId |
bizVersion+1 表示换乘单更正 |
A-09 |
LEDGER_OFFLINE |
#10 | flowId |
UK (gyid, type, flow_id);与幂等重放语义区分 |
A-04 |
DEVICE_ALARM |
#12 | alarmId |
handled_result 变更时 bizVersion+1 |
A-05 |
CLEAN_RECORD |
#13 | recordId |
按日汇总 | A-12 |
STAFF_PERFORMANCE_DAILY |
#13 | (gyid, date, ryid) |
重发覆盖同日结果 | A-13 |
REPORT_RETRY |
#14 | batchId |
心跳携带,不进 items 批量 | A-14 |
4.2 payload 字典
表 3-13 PERSON_REG(A-02)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
regId |
string(ULID) | 是 | 本地登记 ID,幂等键 |
gyid / workNo / name / unitCode |
string | 是 | 人员要素;workNo 与平台 ryid 对齐前的本地键 |
photoRef / featureRef / photoChecksum / featureChecksum |
string | 是 | 人员主数据照片与特征值的引用及校验和;媒体本体走短期签名直传,不上行抓拍/录音(CR-C24、§12 表 3-48) |
featureAlgo / featureVersion / personCategory / mediaUrls[] |
string / long / enum / string[] | 是 | 算法标识、特征版本、人员类别(含 LONG_TERM)、媒体签名地址;版本单调、平台按 checksum 去重 |
regId / ryid / regState |
string / string / enum | 是 | 值班员确认注册成功后才上报;ryid 由确认时生成、regState=CONFIRMED;申请阶段(APPLIED)不上报(CR-C25、docs/公寓端/10 §4) |
registeredBy / occurredAt / deviceCode |
string / datetime / string | 是 | 现场来源;deviceCode 为登记设备 |
表 3-14 CHECKIN / CHECKOUT(A-03)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
jcid / ryid / roomId |
string | 是 | 入住记录业务键、人员、房间 |
eventType |
enum | 是 | CHECKIN / CHECKOUT / ROOM_SWAP |
eventAt / source |
datetime / enum | 是 | source = DEVICE / DUTY / SELF |
transferId |
string | 否 | 换乘联动产生的入住 / 离寓 |
faceVerifyState |
enum | 否 | 与 表 3-16 同字典 |
表 3-15 LEDGER_OFFLINE(A-04)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
flowId / type |
string / enum | 是 | type = CONSUME / RECHARGE / ALLOWANCE_DEDUCT |
amount |
string(2) | 是 | 字符串十进制两位小数;扣减用负数,禁止浮点 |
ryid / cardNo / deviceCode |
string | 是 | 账户与受理设备 |
offlineScope |
enum | 是 | LOCAL_ONLY / SYNCED / RECONCILED;断网期间恒 LOCAL_ONLY |
localBalanceVersion / quotaRef |
long / string | 是 | 本地余额 CAS 版本;离线额度批次(#1 下发) |
occurredAt / syncedAt |
datetime / datetime | 是 / 否 | 归日仍以 serverReceivedAt 为准 |
表 3-16 TABLET_RESULT(A-08)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
resultId / taskId / jcid |
string | 是 | 结果、平板任务、叫乘任务三层键 |
deviceCode / callMode |
string / enum | 是 | callMode = TABLET |
faceVerifyState |
enum | 是 | VERIFIED / UNVERIFIED / SKIPPED |
verifiedRyid / personCount |
string / int | 否 | 刷脸识别到的人员与应答人数 |
resultType |
enum | 是 | ANSWERED / NO_ANSWER / FAILED / CANCELLED |
occurredAt / receivedAt |
datetime | 是 | 现场发生 / 公寓入库 |
表 3-17 TRANSFER(A-09)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
transferId / jcid / jlid |
string | 是 | 换乘单、叫乘任务、原交路 |
newDepTime / newCallTime |
datetime | 是 | 值班员指定的换乘开车 / 叫乘时间 |
recomputedCallTime |
datetime | 是 | 公寓按规则快照复算结果(CR-C06),不是平台值 |
newRoomId / oldRoomId |
string / string | 否 / 是 | 换房联动;为空表示不换房 |
commandId / reason |
string | 是 | 与 duty_manual_action 对齐 |
表 3-18 DEVICE_ALARM(A-05)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
alarmId / deviceCode / alarmSource |
string / string / enum | 是 | alarmSource = DEVICE(CALL / LEAVE 仍走 gy_bjxx) |
alarmType / severity |
enum | 是 | OFFLINE / HEARTBEAT_TIMEOUT / CARD_JAM / POWER;P0~P2 |
alarmEventKey |
string | 是 | 与 /ws/duty 去重键一致 |
occurredAt / handledAt / handledBy |
datetime / datetime / string | 是 / 否 / 否 | 处置回写触发 bizVersion+1 |
表 3-19 CLEAN_RECORD / STAFF_PERFORMANCE_DAILY(A-12、A-13)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
recordId / staffId / roomId |
string | 是 | 保洁记录与人员 |
cleanType / state / finishedAt |
enum / enum / datetime | 是 | ROUTINE / CHECKOUT / DEEP;DONE / REDO |
date / ryid / shiftId |
date / string / string | 是(考核) | 按 (gyid, date, ryid) 覆盖重发 |
responseSecAvg / alarmHandledRate / callSuccessRate / manualActionCount |
decimal / decimal / decimal / int | 是(考核) | 盯控质量指标,口径见 Q-23 |
source |
enum | 是 | LOCAL_CALC(本地算,平台只汇总) |
表 3-20 下行扩展字段(#1 / #2 / #3 / #5 / #7)
| 接口 | 字段 | 类型 | 说明 |
|---|---|---|---|
| #1 | offlineQuota.{singleLimit, dailyLimit, maxOutstanding} |
string(2) ×3 | 离线充值 / 扣补贴额度;超限返回 40913 |
| #1 | features.tabletCall |
boolean | 平板叫乘总开关,缺省 false |
| #2 | personRegVerdicts[].{regId, verdict, ryid, rejectReason, version, platformVersion} |
array | 平台同步回执:verdict = ACCEPTED / REJECTED / PENDING(CONFIRMED 为 v1.0 历史别名,按 ACCEPTED 理解);不决定本地注册是否生效(CR-C25) |
| #3 | transferPolicy.{allowed, latestChangeMinutes, requireRoomRecalc} |
object | 换乘策略;不额外下发"应叫时刻" |
| #5 | rooms[].{building, orientation, sipExtension} |
object | 现场台账差异核对(CR-C05) |
| #7 | changes[].{callMode, dispatchSeq, transferOrders[]} |
object | 任务变更增量 |
表 3-21 枚举字典(跨端统一,大写下划线字符串;不用数字码、不用 MySQL ENUM)
| 枚举 | 取值 | 说明 |
|---|---|---|
callMode |
SIP / TABLET |
叫乘执行模式;gy_jcxx.call_mode |
faceVerifyState |
VERIFIED / UNVERIFIED / SKIPPED |
平板上报刷脸状态;UNVERIFIED 触发复叫判定 |
alarmSource |
CALL / LEAVE / DEVICE |
报警来源;#12 分组依据 |
offlineScope |
LOCAL_ONLY / SYNCED / RECONCILED |
离线流水生命周期 |
reportState |
PENDING / SENT / FAILED / DEAD / RETRIED |
outbox 与 history 共用 |
transferState |
DRAFT / APPLIED / REJECTED / ROLLED_BACK |
换乘单状态 |
regVerdict |
PENDING / ACCEPTED / REJECTED(平台同步回执);本地注册态另见 regState = APPLIED / CONFIRMED / REJECTED / ARCHIVED |
平台回执与本地注册态分离,注册生效点为值班员确认(CR-C25、docs/公寓端/10 §4.4) |
callResultType |
ANSWERED / NO_ANSWER / FAILED / CANCELLED |
平板结果 |
表 3-22 定序、幂等与重试(新增 bizType 沿用 docs/10 表 6-2)
| 项 | 口径 |
|---|---|
| 顺序 | 同一 bizId 按 bizVersion 单调;更正上报 bizVersion+1 并生成新 idempotencyKey;count 一律按 biz_id 去重(R-C3) |
| 重试 | 1s / 5s / 30s / 2min / 10min + 抖动,上限 1 小时;PL-VERSION-STALE → DEAD;PL-5xx / 超时 → FAILED |
| 断网 | 本地先落业务表 + outbox;恢复后先派 outbox,再拉 #7(CR-01 §2.9 顺序不变) |
| 续报 | 失败批次由 apt_report_retry_batch 生成,复用原 idempotencyKey 重发;不产生新业务事实 |
| 平板 | 任务按 dispatch_seq 单调拉取;结果以 resultId 幂等;40916 表示任务已过期 |
5. 各模块的数据设计
表 3-23 新增 / 调整的模块职责与唯一写入口(依赖方向仍为单向,apt-duty 不被其他模块依赖)
| 模块 | 端 | 新增职责 | 唯一写入的表 | 依赖 | 需求 |
|---|---|---|---|---|---|
apt.dispatch(扩展) |
公寓端 | 双模式派发、按 jcsj 排序、call_mode 分流、平板任务生成 |
gy_jcxx.call_mode / dispatch_seq、apt_tablet_task |
apt-master-client、apt.duty.state |
A-06、A-07 |
apt.device.gateway(扩展) |
公寓端 | 平板注册 / 心跳 / 任务拉取 / 结果受理 / 设备报警 | apt_tablet_device、apt_tablet_call_result、apt_device_alarm |
apt.duty.state(只提交命令) |
A-05、A-06、A-08 |
apt.stay(扩展) |
公寓端 | 入住 / 离寓 / 换房 / 换乘联动、保洁人员与记录、本地人员登记 | gy_jcxx、gy_rooms、gygl_ly_event、apt_transfer_order、apt_clean_staff、apt_clean_record、apt_person_face_reg |
apt-master-client(只读快照) |
A-02、A-03、A-09、A-11、A-12 |
apt.ledger.local(本期启用) |
公寓端 | 离线扣补贴 / 本地充值 / 本地余额版本 / 额度校验 / 冲正 | apt_ledger_offline、gy_ykt_*(5 张预留表启用) |
apt-master-client(额度与规则) |
A-04 |
apt.report.outbox(扩展) |
公寓端 | 上报历史归档、失败批次续报、积压观测 | apt_report_history、apt_report_retry_batch、apt_report_outbox |
全部上行生产者 | A-14 |
apt-duty(扩展) |
应用端 | 换乘发起、排班、盯控质量考核、本地充值登记界面 | duty_roster、duty_performance、duty_manual_action |
进程内调 apt.duty.command / apt-stay / apt.ledger.local |
A-09、A-13、A-04 |
platform.ingest(扩展) |
平台端 | 新 bizType 分流、登记确认回执、离线流水接收 |
PL_RECEIVE_LOG、pl_person_reg_request |
platform-master / platform-ledger |
A-02、A-04 |
platform.ledger(扩展) |
平台端 | 离线额度下发、冲正与日对账 | pl_offline_quota、PL_LEDGER_FLOW、GY_YKT_REMAINDER |
platform-ingest |
A-04 |
platform.report(扩展) |
平台端 | 跨公寓考核汇总、保洁与上报历史统计 | pl_staff_performance_daily、PL_REPORT_DAILY |
platform-ingest |
A-13、A-14 |
表 3-24 三端数据归属纪律(新增表必须满足)
| 纪律 | 要求 |
|---|---|
| owner 标注 | 每张表在表 3-27 标 apartment / duty / platform / platform-down;写入模块唯一 |
gyid 隔离 |
所有新增业务表带 gyid 且业务 SQL 必带 gyid(sys_* 除外);唯一键一律以 gyid 打头 |
| 状态单入口 | ryzt / finish_jc / finish_ly / stoped 仍只有 apt.duty.state 可写;平板结果、换乘、报警都只提交命令 |
| 跨端媒体边界 | 人员主数据人脸(照片 / 特征值 / 算法标识 / 特征版本)按 CR-C24 允许平台 ↔ 公寓双向同步,本体走短期签名直传、库内只存引用与校验和;业务过程抓拍、录音、签到现场图仍不出公寓,平台只存索引与计数;识别结果上报不带图像(docs/公寓端/10 §1.1 表 10-3、§12 表 3-48) |
| 主数据只读 | 下行快照表(apt_master_*)保持只读;本地登记表是独立表,不算"改主数据" |
| 同库边界 | 应用端新增 duty_* 表与公寓端同库,禁止第二数据源 / 跨库 JOIN |
6. 数据表设计
6.1 表数口径
表 3-25 表数统一口径(CR-C14)
| 库 | v1.2 口径 | CR-01 | CR-02 新增 | 合计 | 说明 |
|---|---|---|---|---|---|
公寓本地库(含 duty_* 操作域) |
44 张(docs/公寓端/03 §1) |
apt_local_task 1 张(已在 CR-01 定义、未在表 3-2 登记) |
13 张(公寓 owner 11 + duty owner 2) + §10 补遗 1 张 | 59 张 | 不含若依框架 sys_* / qrtz_* 30 张;v1.0 的 58 张口径按本行理解 |
| 平台库 | 沿用 docs/平台端/03 §3 表 3-4~3-9 |
— | 3 张 pl_* |
原口径 + 3 | 平台库表数原本不引用 44 |
| 既有库结构缺陷 | docs/11:40 表 / 0 主键 / 0 索引 / gy_jcxx 70 列 |
— | — | — | CR-02 新增表必须全部带主键与索引,不复制既有缺陷 |
本轮为设计稿:以上建表、补列均为设计定义,须在阶段二契约冻结评审通过后按迁移脚本执行;不得直接对生产库执行 DDL / DML。
6.2 新增表总览
表 3-26 17 张新增表(编号 T-01~T-17;T-17 为 §10 补遗)
| 编号 | 表名 | 库 / owner | 唯一写入模块 | 上报源 | 本期 | 需求 |
|---|---|---|---|---|---|---|
| T-01 | apt_tablet_device |
公寓 / apartment | apt.device.gateway |
是(#11 摘要) | 是 | A-05、A-06 |
| T-02 | apt_tablet_task |
公寓 / apartment | apt-dispatch |
否(明细不上报) | 是 | A-07 |
| T-03 | apt_tablet_call_result |
公寓 / apartment | apt.device.gateway → 命令 |
是(TABLET_RESULT / #9) |
是 | A-08 |
| T-04 | apt_person_face_reg |
公寓 / apartment | apt.face.registry(v1.3 由 apt-stay 改判,见 §12 表 3-49) |
是(PERSON_REG / #9) |
是 | A-02、CR-C25 |
| T-05 | apt_transfer_order |
公寓 / apartment | apt-stay(经 apt.duty.state) |
是(TRANSFER / #8、#9) |
是 | A-09 |
| T-06 | apt_clean_staff |
公寓 / apartment | apt-stay |
否 | 是 | A-12 |
| T-07 | apt_clean_record |
公寓 / apartment | apt-stay |
是(#13 摘要) | 是 | A-12 |
| T-08 | apt_device_alarm |
公寓 / apartment | apt.device.gateway |
是(DEVICE_ALARM / #12) |
是 | A-05 |
| T-09 | apt_report_history |
公寓 / apartment | apt.report.outbox |
本身即上报历史 | 是 | A-14 |
| T-10 | apt_report_retry_batch |
公寓 / apartment | apt.report.outbox |
是(#14 心跳) | 是 | A-14 |
| T-11 | apt_ledger_offline |
公寓 / apartment | apt.ledger.local |
是(LEDGER_OFFLINE / #10) |
是 | A-04 |
| T-12 | duty_roster |
公寓 / duty | apt-duty |
否 | 是 | A-13 |
| T-13 | duty_performance |
公寓 / duty | apt-duty |
是(#13 日汇总) | 是 | A-13 |
| T-14 | pl_person_reg_request |
平台 / platform | platform-ingest |
接收侧 | 是 | A-02 |
| T-15 | pl_offline_quota |
平台 / platform | platform-ledger |
下行侧(#1) | 是 | A-04 |
| T-16 | pl_staff_performance_daily |
平台 / platform | platform-report |
接收侧(#13) | 是 | A-13 |
| T-17 | apt_sip_reg_status |
公寓 / apartment | apt.voice.event(只追加) |
是(#11 / #24 摘要,明细不上报) | 是 | A-05、A-06;§10 补遗 |
6.3 列级设计
表 3-27 平板叫乘域(T-01~T-03)
| 表 | 列 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|---|
apt_tablet_device |
id |
bigint | PK | 代理键;业务键为 device_code |
gyid / device_code |
varchar(32) / varchar(64) | UK (gyid, device_code),NOT NULL |
平板设备编码,入库大写 | |
room_id / activation_code_ref |
varchar(64) / varchar(128) | 可空 | 绑定房间;激活码只存引用,不存明文 | |
register_status / app_version |
varchar(20) / varchar(32) | 默认 PENDING |
ACTIVE / DISABLED / PENDING |
|
last_seen_at / last_cursor |
datetime(3) / varchar(128) | 可空 | 心跳与拉取游标 | |
created_at / updated_at |
datetime(3) | NOT NULL | 三时间戳口径 | |
apt_tablet_task |
id |
bigint | PK | 代理键 |
gyid / task_id / jcid |
varchar(32) / varchar(64) / varchar(64) | UK (gyid, task_id),NOT NULL |
与 gy_jcxx.jcid 对齐(R-C1) |
|
dispatch_seq |
bigint | NOT NULL,IDX (gyid, dispatch_seq) |
按 jcsj 排序的派发序号,单调递增 |
|
call_mode / jcsj |
varchar(20) / datetime(3) | 默认 TABLET |
叫乘基准时刻(本地复算值) | |
device_code / pull_state |
varchar(64) / varchar(20) | 默认 WAITING |
WAITING / PULLED / EXPIRED / DONE |
|
pulled_at / pulled_by / expire_at |
datetime(3) / varchar(64) / datetime(3) | 可空 | 拉取回执 | |
created_at / updated_at |
datetime(3) | NOT NULL | — | |
apt_tablet_call_result |
id |
bigint | PK | 代理键 |
gyid / result_id / task_id / jcid |
varchar(32) / varchar(64) ×3 | UK (gyid, result_id),NOT NULL |
幂等键 = result_id |
|
face_verify_state / verified_ryid |
varchar(20) / varchar(64) | NOT NULL / 可空 | VERIFIED / UNVERIFIED / SKIPPED |
|
result_type / person_count |
varchar(20) / int | NOT NULL | 见 表 3-21 | |
device_code / occurred_at / received_at |
varchar(64) / datetime(3) ×2 | NOT NULL | 现场 / 入库时间 | |
applied_state |
varchar(20) | 默认 PENDING |
PENDING / APPLIED / IGNORED;由 apt.duty.state 回写 |
表 3-28 人员登记、换乘与报警(T-04、T-05、T-08)
| 表 | 列 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|---|
apt_person_face_reg |
id |
bigint | PK | 代理键 |
gyid / reg_id / work_no / name |
varchar(32) / varchar(64) ×3 | UK (gyid, reg_id),NOT NULL |
本地登记要素 | |
face_feature_ref / photo_checksum |
varchar(256) / varchar(128) | NOT NULL | 不存特征大对象 / 原图 | |
reg_state / local_only / verdict |
varchar(20) / tinyint(1) / varchar(20) | 默认 APPLIED / 1 / PENDING |
APPLIED → 值班员 CONFIRMED → local_only=0 并写入正式 ryid;verdict 只记平台同步回执(§12 表 3-49) |
|
confirmed_ryid / reject_reason / verdict_version |
varchar(64) / varchar(256) / bigint | 可空 | confirmed_ryid 由值班员确认时生成;verdict_version 来自 #2 personRegVerdicts[] 同步回执 |
|
apply_device_code / applied_at / confirmed_by / confirmed_at |
varchar(64) / datetime(3) / varchar(64) / datetime(3) | 可空 | 签到终端申请来源与值班员确认留痕 | |
upload_state / dispatch_state |
varchar(20) ×2 | 默认 PENDING |
上传平台与下发设备两条独立状态链,互不阻塞(CR-C25) | |
registered_by / device_code / occurred_at |
varchar(64) / varchar(64) / datetime(3) | NOT NULL | 现场来源 | |
report_state / created_at |
varchar(20) / datetime(3) | 默认 PENDING |
上报状态 | |
apt_transfer_order |
id |
bigint | PK | 代理键 |
gyid / transfer_id / jcid / jlid |
varchar(32) / varchar(64) ×3 | UK (gyid, transfer_id),NOT NULL |
换乘业务键 | |
old_room_id / new_room_id |
varchar(64) | 可空 | 换房联动 | |
new_dep_time / new_call_time / recomputed_call_time |
datetime(3) ×3 | NOT NULL | 后两者不得相等时静默覆盖,须告警(CR-C06) | |
state / command_id / reason |
varchar(20) / varchar(64) / varchar(256) | 默认 DRAFT |
与 duty_manual_action.action_id 对齐 |
|
biz_version / applied_at / created_at |
bigint / datetime(3) ×2 | 默认 1 |
更正上报时 +1 | |
apt_device_alarm |
id |
bigint | PK | 代理键 |
gyid / alarm_id / device_code |
varchar(32) / varchar(64) ×2 | UK (gyid, alarm_id),NOT NULL |
设备报警独立表 | |
alarm_source / alarm_type / severity |
varchar(20) ×3 | 默认 DEVICE |
见 表 3-18 / 3-21 | |
alarm_event_key |
varchar(128) | UK (gyid, alarm_event_key) |
与 /ws/duty 去重键一致 |
|
occurred_at / handled_at / handled_by / handled_result |
datetime(3) ×2 / varchar(64) / varchar(256) | 可空 | 处置触发 bizVersion+1 |
|
biz_version / report_state |
bigint / varchar(20) | 默认 1 / PENDING |
— |
表 3-29 保洁与值班域(T-06、T-07、T-12、T-13)
| 表 | 列 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|---|
apt_clean_staff |
id / gyid / staff_id / name |
bigint / varchar(32) / varchar(64) ×2 | PK / UK (gyid, staff_id) |
保洁人员档案 |
state / phone_ref / created_at |
varchar(20) / varchar(128) / datetime(3) | 默认 ACTIVE |
联系方式只存引用 | |
apt_clean_record |
id / gyid / record_id / staff_id / room_id |
bigint / varchar(32) / varchar(64) ×3 | PK / UK (gyid, record_id) |
保洁记录幂等键 |
clean_type / state / task_id |
varchar(20) ×2 / varchar(64) | NOT NULL | 关联 gy_clean_task |
|
started_at / finished_at / remark |
datetime(3) ×2 / varchar(256) | 可空 | — | |
report_state / created_at |
varchar(20) / datetime(3) | 默认 PENDING |
日汇总进 #13 | |
duty_roster |
id / gyid / shift_id / ryid |
bigint / varchar(32) / varchar(64) ×2 | PK / UK (gyid, shift_id, ryid) |
排班;shift_id = 日期 + 班次 |
shift_date / shift_type / start_at / end_at |
date / varchar(20) / datetime(3) ×2 | NOT NULL | DAY / NIGHT |
|
state / created_by / created_at |
varchar(20) / varchar(64) / datetime(3) | 默认 PLANNED |
PLANNED / CONFIRMED / CANCELLED |
|
duty_performance |
id / gyid / ryid / shift_id / stat_date |
bigint / varchar(32) / varchar(64) ×2 / date | PK / UK (gyid, stat_date, ryid) |
盯控质量考核(本地算、平台汇总) |
response_sec_avg / alarm_handled_rate / call_success_rate |
decimal(10,2) ×3 | 默认 0.00 |
指标口径 Q-23 待决 | |
manual_action_count / alarm_missed_count |
int ×2 | 默认 0 |
— | |
calc_version / report_state / calculated_at |
bigint / varchar(20) / datetime(3) | 默认 1 / PENDING |
重算覆盖同日结果 |
表 3-30 上报与账务域(T-09~T-11)
| 表 | 列 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|---|
apt_report_history |
id / gyid / idempotency_key / biz_type / biz_id |
bigint / varchar(32) / varchar(128) ×3 | PK / UK (gyid, idempotency_key) |
上报终态流水,不是队列 |
biz_version / batch_id / retry_batch_id |
bigint / varchar(64) ×2 | NOT NULL / 可空 | 关联续报批次 | |
state / result_code / last_error |
varchar(20) / varchar(64) / varchar(512) | NOT NULL | SENT / FAILED / DEAD / RETRIED |
|
occurred_at / sent_at / platform_recv_at / created_at |
datetime(3) ×4 | 可空 | 三时间戳 + 建档 | |
apt_report_retry_batch |
id / gyid / batch_id |
bigint / varchar(32) / varchar(64) | PK / UK (gyid, batch_id) |
续报批次,POST /apt/report/retry 生成 |
state / trigger_type / item_count / success_count |
varchar(20) / varchar(20) / int ×2 | 默认 RUNNING |
MANUAL / AUTO |
|
from_watermark / to_watermark |
bigint ×2 | NOT NULL | 续报区间,复用原 idempotencyKey |
|
started_at / finished_at / created_by |
datetime(3) ×2 / varchar(64) | 可空 | — | |
apt_ledger_offline |
id / gyid / flow_id / type |
bigint / varchar(32) / varchar(64) / varchar(30) | PK / UK (gyid, type, flow_id) |
断网本地流水;type 见 表 3-15 |
amount / ryid / card_no / device_code |
decimal(12,2) / varchar(64) ×3 | NOT NULL | 金额定点数,禁止浮点 | |
offline_scope / local_balance_version / quota_ref |
varchar(20) / bigint / varchar(64) | 默认 LOCAL_ONLY |
额度批次来自 #1 | |
balance_before / balance_after |
decimal(12,2) ×2 | NOT NULL | 本地余额 CAS 前后值 | |
occurred_at / synced_at / reconcile_state / created_at |
datetime(3) ×2 / varchar(20) / datetime(3) | 默认 PENDING |
恢复后冲正 / 对账 |
表 3-31 平台端新增表(T-14~T-16;逻辑类型族,docs/平台端/03 表 3-16 方言映射)
| 表 | 列 | 类型族 | 约束 / 默认 | 说明 |
|---|---|---|---|---|
pl_person_reg_request |
id / gyid / reg_id / work_no |
id_ulid / string(32) ×2 / string(64) | PK / UK (gyid, reg_id) |
接收侧主档同步回执(注册成功后由 #9 送达) |
verdict / confirmed_ryid / reject_reason |
enum_s / string(64) / string(256) | 默认 PENDING |
同步回执 ACCEPTED / REJECTED;platform-master 校验工号唯一性与 checksum 后回填,不做注册准入审批(CR-C25) |
|
photo_ref / feature_ref / photo_checksum / feature_checksum |
string(512) ×2 / string(128) ×2 | 可空 | 接收人员主数据人脸媒体引用与校验和;不接收业务抓拍、不入库媒体二进制(CR-C24、docs/公寓端/10 表 10-6) |
|
feature_algo / feature_version / person_category |
string(32) / long / enum_s | 默认 1 / TRANSIENT |
算法兼容判定与长期驻留标识 | |
verdict_version / decided_at / received_at |
long / ts_ms ×2 | NOT NULL | 审定版本与三时间戳 | |
pl_offline_quota |
id / gyid / quota_ref |
id_ulid / string(32) / string(64) | PK / UK (gyid, quota_ref) |
离线额度批次 |
single_limit / daily_limit / max_outstanding |
decimal(12,2) ×3 | NOT NULL | #1 下行 | |
version / effective_from / state |
long / ts_ms / enum_s | 默认 1 / ACTIVE |
版本单调(P-06 依赖) | |
pl_staff_performance_daily |
id / gyid / stat_date / ryid |
id_ulid / string(32) / date / string(64) | PK / UK (gyid, stat_date, ryid) |
跨公寓考核汇总,只接收不算明细 |
response_sec_avg / alarm_handled_rate / call_success_rate |
decimal(10,2) ×3 | 默认 0.00 |
— | |
source_version / received_at |
long / ts_ms | NOT NULL | 覆盖同日结果 |
6.4 补列、索引与迁移
表 3-32 既有表补列(设计定义,待阶段二评审)
| 表 | 补列 | 类型 | 默认 | 用途 | 需求 |
|---|---|---|---|---|---|
gy_jcxx |
call_mode |
varchar(20) | SIP |
区分 AMI 推断 / 平板上报两种状态来源 | A-06、A-08 |
gy_jcxx |
dispatch_seq |
bigint | NULL |
顺序派发序号,平板模式必填 | A-07 |
apt_report_outbox |
retry_batch_id |
varchar(64) | NULL |
关联续报批次 | A-14 |
apt_master_room |
building |
varchar(64) | NULL |
楼栋(G-01 的正式落点);Q-20 未决前仍用 room_floor + room_no 前缀筛选 |
A-11 |
表 3-33 索引与约束(新增表全部满足,不复制 docs/11 的 0 主键 / 0 索引缺陷)
| 类别 | 要求 |
|---|---|
| 主键 | 16 张表全部有代理主键 id;跨端业务 ID 用 ULID / UUID 字符串,不用自增作幂等键 |
| 唯一键 | 全部以 gyid 打头(UK 见表 3-27~3-31);alarm_event_key / result_id / flow_id 保证幂等 |
| 查询索引 | 按 (gyid, jcsj)、(gyid, dispatch_seq)、(gyid, state, occurred_at)、(gyid, stat_date) 建复合索引 |
| 逻辑删除与审计 | 沿用三端分册口径;新增表使用 state / report_state 表达生命周期,不做物理删除 |
| 迁移顺序 | 先平台 3 张 → 再公寓 13 张 → 再 §10 补遗 apt_sip_reg_status 1 张(共 14 张)→ 最后 3 处补列;DDL 与数据回填分离,回填需可重放 |
| 方言 | 平台表按 docs/平台端/03 表 3-16 逻辑类型族,迁 MySQL 时只换物理类型、不改语义 |
7. 关键流程变更
表 3-34 流程变更总表(v1.0 的 F-A~F-H;原流程章节不变,本节为增量;F-I 见 §10、F-J 见 §12)
| 编号 | 流程 | 变更性质 | 涉及的原流程 | 需求 |
|---|---|---|---|---|
| F-A | 叫乘双模式与顺序派发 | 分支新增 | docs/公寓端/05 §1 / §2;docs/应用端/05 §1 |
A-06、A-07 |
| F-B | 平板结果回写与刷脸判定 | 事件源新增 | docs/公寓端/05 §2 状态机;docs/应用端/04 §5 |
A-08 |
| F-C | 换乘(时刻 + 换房联动) | 新流程 | docs/应用端/05 §3;docs/平台端/06 §3 |
A-09 |
| F-D | 断网本地充值 / 扣补贴与恢复冲正 | 新流程 | docs/平台端/06 §6 F5;docs/应用端/05 §6 |
A-04 |
| F-E | 上报历史与失败批次续报 | 新流程 | docs/公寓端/05 §6;docs/平台端/06 §5 F4 |
A-14 |
| F-F | 人员注册(签到终端申请 → 值班员确认入档 → 平台 / 设备分别同步) | 新流程(v1.3 由 §12 F-J / CR-C25 改判) | docs/公寓端/05 §5 主数据下行、docs/公寓端/10 §4 |
A-02 |
| F-G | 保洁、排班与盯控质量考核 | 新流程 | docs/应用端/05 §1 / §7;docs/平台端/06 §7 |
A-12、A-13 |
| F-H | 设备报警分流 | 分叉新增 | docs/公寓端/05 §3;#11 / #12 |
A-05 |
7.1 F-A 叫乘双模式与顺序派发
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | apt-dispatch |
计划下行后按规则快照复算 jcsj(CR-C06),按 jcsj 升序生成 dispatch_seq |
gy_jcxx、apt_tablet_task |
规则快照过期 → 40903,保留最后版本并告警 |
| 2 | apt-dispatch |
读 gy_jcxx.call_mode 分流:SIP 走原 Quartz + AMI 链路;TABLET 只置任务 WAITING |
apt_tablet_task |
features.tabletCall=false 时强制回落 SIP |
| 3 | 平板 | GET /open/v1/tablet/tasks(cursor),按 dispatch_seq 顺序拉取;单公寓同一时刻只派发一条 |
apt_tablet_task.pull_state |
重复 ACK → 40916;超时未拉取置 EXPIRED 并转人工 |
| 4 | apt-dispatch |
派发后回执 #8(含 dispatchSeq、复算时刻) |
apt_report_outbox |
回执失败不影响执行(沿用原口径) |
| 5 | apt.voice.event |
SIP 分支仍以 ConfbridgeJoin 判接通、30 s 无入会 ryzt=2、35 s 复叫 |
apt_call_session、gy_jcxx |
事件丢失兜底比对不变 |
7.2 F-B 平板结果回写
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 平板 | POST /open/v1/tablet/results(resultId + faceVerifyState + resultType) |
apt_tablet_call_result |
同 resultId 重传返回首次结果 |
| 2 | apt.device.gateway |
HMAC / 时间窗 / nonce 校验;只提交命令给 apt.duty.state,不直改 gy_jcxx |
duty_manual_action |
校验失败丢弃并告警 |
| 3 | apt.duty.state |
ANSWERED + VERIFIED → ryzt=3 / finish_jc='1';UNVERIFIED / SKIPPED → 保留待确认并触发复叫与告警;NO_ANSWER → ryzt=2 + gy_bjxx(TIMEOUT) |
gy_jcxx、gy_bjxx |
条件更新带期望态;迟到结果记 IGNORED |
| 4 | duty.ws |
推 tablet.result(seq 单调) |
— | 断连走 60 s 兜底轮询 |
| 5 | apt-report |
以 TABLET_RESULT 经 #9 上报 |
apt_report_outbox |
断网进 outbox |
7.3 F-C 换乘
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 值班员(duty 入口) |
选交路,指定换乘开车时间 / 叫乘时间,可选新房间 → TRANSFER 命令(commandId + 原因) |
duty_manual_action |
同 commandId 只生效一次;时刻非法 40915 |
| 2 | apt.duty.command → apt.duty.state |
校验 transferPolicy、任务未结束、人员在寓;建换乘单 DRAFT |
apt_transfer_order |
策略不允许 / 已离寓 → 拒绝并留痕 |
| 3 | apt-dispatch |
本地复算 recomputedCallTime;与原 jcsj 不一致时以复算值执行并告警(CR-C06) |
gy_jcxx、apt_tablet_task |
不取平台值 |
| 4 | apt-stay + apt.voice.endpoint |
若 newRoomId 非空:换房、gy_rooms 房态重算、apt_sip_binding 联动(沿用现有换房链路) |
gy_rooms、apt_sip_binding |
目标房满 → 40901,整单 ROLLED_BACK |
| 5 | apt-report |
经 #8 / #9 上报 TRANSFER(bizVersion 单调) |
apt_report_history |
平台驳回由 #7 下行,公寓自己置 REJECTED,不是平台回调 |
| 6 | duty.ws |
推 transfer.changed |
— | — |
7.4 F-D 断网本地充值 / 扣补贴
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 值班员 / 消费机 | 本地充值登记或刷卡消费请求 | apt_ledger_offline、gy_ykt_* |
超 offlineQuota → 40913;断网时仍允许额度内受理 |
| 2 | apt.ledger.local |
校验 singleLimit / dailyLimit / maxOutstanding;按 localBalanceVersion 做 CAS 扣减,记 balance_before/after |
apt_ledger_offline |
CAS 冲突重读重试一次,再失败转人工 |
| 3 | 写入 | offline_scope=LOCAL_ONLY,本地余额立即可用;不写平台主账 |
gy_ykt_remainder(本地缓存) |
平台主账权威不变(docs/平台端/06 §6) |
| 4 | 恢复 | 先派 outbox(CR-01 §2.9)→ #10 LEDGER_OFFLINE 逐条上报 → 平台按 serverReceivedAt 归日、UK (gyid,type,flow_id) 去重 |
PL_RECEIVE_LOG、PL_LEDGER_FLOW |
余额不足 PF-5001 进人工;重复流水 PF-5002 |
| 5 | 冲正 | 平台日对账通过后,公寓把 offline_scope 置 RECONCILED 并更新 localBalanceVersion |
apt_ledger_offline |
对账未结清禁止调账(PF-5003) |
| 6 | duty.ws |
推 ledger.offline(含 quotaRemain) |
— | — |
7.5 F-E 上报历史与续报
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | apt.report.outbox |
每次派发结束把终态写入 apt_report_history(成功 / 失败 / 死信 / 已续报) |
apt_report_history |
outbox 仍是队列,两者不互相替代(CR-C10) |
| 2 | 运维 / 自动 | POST /apt/report/retry 指定水位区间,生成 apt_report_retry_batch |
apt_report_retry_batch |
同批次运行中 → 50302 |
| 3 | apt.report.outbox |
按区间取失败项,复用原 idempotencyKey 重发既有 #9~#14 接口,不产生新业务事实 |
apt_report_outbox.retry_batch_id |
仍按原退避;不新增跨端编号 |
| 4 | 平台 | 幂等判重返回 PL-IDEMPOTENT-REPLAY,视为成功 |
PL_RECEIVE_LOG |
PL-VERSION-STALE → DEAD |
| 5 | duty.ws / #14 |
推 report.backlog;心跳带 pendingRetryBatches |
apt_report_watermark |
积压超阈值触发横幅告警 |
7.6 F-F 人员注册链路(v1.3 由 §12 F-J / CR-C25 改判)
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 签到终端 | 发起 REG_APPLY,上传人员要素 + 照片 / 特征值 |
apt_person_face_reg(APPLIED) |
媒体异常 40919 / 40920;已注册 40918;未决重复申请返回原 regId;不进主档、不下发、不上报 |
| 2 | duty.ws / 值班台 |
生成待办,值班员核对要素与照片并"确认注册"(duty:person:reg + 二次确认) |
duty_operation_log、duty_manual_action |
驳回写 reject_reason,媒体按 Q-32 清理;未确认不进主档 |
| 3 | apt.face.registry |
确认时生成 ryid、reg_state=CONFIRMED、local_only=0;apt-master-client 事务写 apt_master_person(人脸进入公寓服务系统) |
apt_person_face_reg、apt_master_person、apt_master_version |
事务失败整体回滚、保持 APPLIED;确认前参与匹配 → 40914 |
| 4a | apt.face.sync → apt-report |
注册成功后上传平台:媒体签名直传 + #9 PERSON_REG(表 3-13) |
apt_report_outbox、pl_person_reg_request |
断网进 outbox,恢复后复用原幂等键续报;不阻塞 4b |
| 4b | apt.face.scope / apt.face.dispatch |
注册成功后下发公寓内设备:按 gy_sb.face_scope_* 计算目标集合并生成 FACE_ISSUE |
apt_device_command、gy_sb_xt |
设备离线排队;范围为空记审计;不依赖平台回执 |
| 5 | 平台 / apt-master-client |
平台回同步回执 ACCEPTED / REJECTED + platform_version,由 #2 拉取对齐;不做注册准入审批 |
apt_master_version、apt_person_face_reg.verdict |
回执 REJECTED 只告警 + 待办,不回滚本地注册与已下发设备(Q-35) |
| 6 | 展示 | 值班台可查注册态、平台同步态与设备缓存台账 | — | 抓拍 / 录音 / 签到现场图不出公寓;人员主数据人脸按 CR-C24 允许跨端 |
4a / 4b 为并行双路,各自幂等、各自重试;注册生效点是步 3 的值班员确认,不是平台回执(CR-C25)。完整时序、状态机与异常见
docs/公寓端/10§4。
7.7 F-G 保洁、排班与考核
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 公寓管理员 | 维护保洁人员;值班员登记保洁记录,联动 gy_clean_task.state |
apt_clean_staff、apt_clean_record、gy_clean_task |
同 recordId 幂等 |
| 2 | 值班长 | 排班(日期 + 班次 + 人员),duty_shift_handover 仍不启用 |
duty_roster |
同 (shift_id, ryid) 唯一 |
| 3 | apt-duty |
日终按班次从事实表本地计算盯控质量指标(响应时长、报警处置率、叫乘成功率、人工干预次数) | duty_performance |
口径 Q-23 待决;重算覆盖同日结果 |
| 4 | apt-report → platform-report |
#13 摘要 CLEAN_RECORD / STAFF_PERFORMANCE_DAILY 日汇总 |
pl_staff_performance_daily、PL_REPORT_DAILY |
平台只汇总,不重算公寓明细 |
| 5 | duty 入口 |
只读查看本人 / 本公寓排班与考核 | — | 跨公寓对比归平台 |
7.8 F-H 设备报警分流
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | apt.device.gateway |
心跳超时 / 离线 / 故障码判定为设备报警,与叫乘、离寓报警分离 | apt_device_alarm |
alarm_event_key 去重,同 key 不重复响 |
| 2 | duty.ws |
推 device.alarm;值班台处置后回写 handled_* |
apt_device_alarm |
处置变更触发 bizVersion+1 |
| 3 | apt-report |
#12 按 alarmSource 分组上报 DEVICE_ALARM;#11 摘要增 tabletCount |
apt_report_outbox |
gy_bjxx 原逻辑不变 |
8. 已执行的施工单
表 3-35 三端文档逐处修订(本轮已直接修改,非"只登记")
各分册的新增章节统一置于
## 0. v2 修订(CR-02)(放在追溯段之后、原 §1 之前),图表用独立编号表 C-y,不占用各文件原有表 x-y序号;冲突行的旧表述则就地改判。
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-52 | docs/公寓端/00-公寓端主要功能设计.md |
全文重写 | 补全截断条目、编号化 A-01~A-14、补文档信息与修订记录、指向本文件 |
| R-53 | docs/公寓端/01-功能边界.md |
表 1-4 #2/#3/#4/#6、表 1-5、§4 说明、新增 §0 | 入住 / 换房 / 离寓与账务改判本期;追加 6 个功能域与三条不变式 |
| R-54 | docs/公寓端/03-数据设计.md |
§1 标题、新增 §0 | 44 → 58 张口径;追加 13 张新增表归属、命名分区同步、3 处补列 |
| R-55 | docs/公寓端/04-接口设计.md |
表 4-4、§7 房间域第 3 条、新增 §0 | 统一 40903 常量名、补 5 个新码;撤销"本期不提供入住 / 换房 / 退房接口";追加 N-01 |
| R-56 | docs/公寓端/05-关键流程.md |
表 5-1 第 4 行、新增 §0 | 按 R-C9 修正 jcsj 口径;追加 F-A~F-H 本端流程落点 |
| R-57 | docs/公寓端/09-平台接口约定.md |
契约版本行、新增 §0 | v1-draft → v2-draft;"20 不新增"改判为 payload 扩展;追加 bizType / 下行扩展字段 / 枚举与错误码指针 |
| R-58 | docs/平台端/01-功能边界.md |
新增 §0 | 追加 v2 覆盖范围裁决(主账 vs 离线受理、登记确认、考核汇总、三条不变边界) |
| R-59 | docs/平台端/03-数据设计.md |
新增 §0 | 追加 T-14~T-16 三张表设计、PL_TASK.jcsj 与 44 张引用口径修正 |
| R-60 | docs/平台端/05-跨端接口对齐.md |
契约版本行、§1 第 2 条、新增 §0 | 撤销"确需新增走 v2 不在本期";追加既有编号的 payload 扩展与 bizType 分流 |
| R-61 | docs/平台端/06-关键流程.md |
新增 §0 | 追加 F-C / F-D / F-E / F-G 的平台侧流程变更 |
| R-62 | docs/应用端/01-功能边界.md |
表 1-9、表 1-6 第 14 项说明、新增 §0 | 撤销"不做任何账务动作";追加换乘、平板结果、充值登记、排班考核四个域 |
| R-63 | docs/应用端/03-数据设计.md |
新增 §0 | 追加 duty_roster / duty_performance 表归属与可写 / 只读边界 |
| R-64 | docs/应用端/04-接口设计.md |
表 4-4 50101 行、新增 §0 |
统一错误码;追加 N-06~N-14 接口、5 类 WS 消息、5 个新码 |
| R-65 | docs/应用端/05-关键流程.md |
新增 §0 | 追加 F-B / F-C / F-D / F-G 的本端流程变更与断网能力清单 |
| R-66 | docs/10-架构优化方案-三端拆分.md |
表 0-2 修订记录、§3 章指针 | 追加 v1.3 / v1.4 修订记录与覆盖第 3、4、6 章的 CR-02 指针 |
| R-67 | 三端 README.md + docs/README.md |
文档清单 / 一页结论 / 索引 | 收录 00 与本文件、同步依据版本、20 接口与 58 张表口径 |
按
docs/10附录 D,新增 / 调整端职责、模块划分、跨端接口时须同步第 3、4、6 章与附录 B 图表清单;CR-02 未新增跨端编号,附录 B 图表索引不变,已在docs/10第 3 章开头追加覆盖第 3、4、6 章的 CR-02 指针。
9. 待决策点与验收
表 3-36 新增决策点 Q-20~Q-25(沿用 docs/应用端/10 的决议记录格式:结论 + 决议人 + 日期三者缺一视为未决议)
| 编号 | 待决事项 | 未决默认口径 | 拍板时点 | 影响 |
|---|---|---|---|---|
| Q-20 | apt_master_room.building 补列是否本期执行 |
不补列,沿用 room_floor + room_no 前缀筛选(G-01 兜底) |
阶段二建表清单定稿前 | A-11、表 3-32 |
| Q-21 | 断网离线额度数值与累计口径 | #1 下发 singleLimit / dailyLimit / maxOutstanding,缺省全 0(即断网不开放) |
契约冻结签字时 | A-04、F-D |
| Q-22 | 平板刷脸 UNVERIFIED 是否直接判复叫 |
触发复叫 + 告警,但保留人工确认入口 | 阶段三试点前 | A-08、F-B |
| Q-23 | 盯控质量考核指标口径与权重 | 四指标等权、本地计算、平台只汇总 | 阶段三 D 批开工前 | A-13、F-G |
| Q-24(v1.3 由 CR-C25 改判) | 注册申请人员的运安匹配准入 | 值班员确认注册前一律 40914,不参与匹配、不下发设备;确认后即可匹配,平台上报属异步同步不阻塞 |
契约冻结签字时 | A-02、F-F、F-J |
| Q-25 | 换乘是否允许改开车时间(newDepTime) |
允许,但必须同时重算叫乘时刻并留痕 | 阶段三试点前 | A-09、F-C |
表 3-37 验收要点(写入各端 07 时按此表展开)
| # | 验收项 | 判据 |
|---|---|---|
| 1 | 覆盖范围 | 三端 01 不再出现"入住 / 离寓属后续"、"不做任何账务动作"等与本文件冲突的表述 |
| 2 | 协议 | 跨端仍为 20 个编号、平台零回调;平板 / 消费机 / 值班台协议分层清晰,设备侧一律拉取 |
| 3 | 数据 | 新增 16 张表 + §10 补遗 1 张(共 17 张)全部有主键、gyid 打头的唯一键与查询索引;§12 人脸模块不新增业务表(复用既有表 + 补列,59 张口径不变);抓拍 / 录音不出公寓、人员主数据人脸按 CR-C24 允许跨端;验收 9 |
| 4 | 叫乘 | SIP 与 TABLET 双模式均可闭环;dispatch_seq 严格单调;UNVERIFIED 触发复叫与告警 |
| 5 | 换乘 | 时刻重算、换房联动、分机绑定、bizVersion 单调、平台驳回落库五项全通 |
| 6 | 账务 | 断网额度内本地可用、恢复后先派 outbox 再拉 #7、serverReceivedAt 归日、对账未结清禁止调账 |
| 7 | 上报 | outbox / history / retry batch 三者语义分离;续报复用原 idempotencyKey,不产生重复业务事实 |
| 8 | 状态机 | 所有新增事件源都只提交命令给 apt.duty.state,无任何直改 ryzt / finish_* / stoped 的写入 |
10. 补遗:Asterisk 配置数据管理与 SIP 分机离线告警(v1.1)
触发依据:
docs/公寓端/00v1.1 §3(A-05 / A-06 / A-08 的细化,细化项AC-010-18)为准;本节只登记口径裁决、流程增量、施工单与决策点。跨端 20 个接口编号、契约版本AC-05,不新增A-15以后编号)。现状依据:docs/backend/10表 1-1「分机没有独立台账」;上位依据:docs/10§5.4 表 5-3、§7.8 表 7-4、docs/公寓端/03§3.3 表 3-11、docs/公寓端/08「注册状态不可靠」。 权威关系:四类数据表的字段定义、增删改查、权限控制与离线告警规则以docs/公寓端/00§3(表 0-4v2-draft、平台不回调、附录 B 图表索引全部不变。
表 3-38 补遗范围
| 项 | 内容 | 权威位置 |
|---|---|---|
| 模块功能 | AC-01 分机表、AC-02 呼叫记录表、AC-03 录音文件表、AC-04 注册在线状态表、AC-05 分机状态离线告警 |
docs/公寓端/00 §3.1 表 0-4、0-5 |
| 字段定义 | apt_sip_endpoint(表 0-6)、apt_call_session(表 0-7)、apt_recording(表 0-8)、apt_sip_reg_status(表 0-9,新增 T-17) |
docs/公寓端/00 §3.2 |
| CRUD 与接口 | 四类表 CRUD 矩阵(表 0-10)、N-19~N-24 端内接口(表 0-11) | docs/公寓端/00 §3.3、docs/公寓端/04 §0 表 C-4 |
| 权限控制 | 权限点矩阵(表 0-12)、六条硬要求(表 0-13) | docs/公寓端/00 §3.4 |
| 离线告警 | 触发条件(表 0-14)、级别(表 0-15)、通知(表 0-16)、留存(表 0-17)、Q-26~Q-28(表 0-18) | docs/公寓端/00 §3.5 |
表 3-39 新增裁决 CR-C15~CR-C19(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C15 | 注册在线状态是"字段"还是"表" | 主从,不产生第二真源:apt_sip_endpoint.register_status 为当前态唯一权威字段(apt.voice.endpoint 写);新增 apt_sip_reg_status 为只追加的状态变迁流水(apt.voice.event 写),用于离线持续时长、告警去重与对账回溯。禁止把流水当当前态读,禁止两写入口互写 |
| CR-C16 | 事实类表能否人工增删改 | 不能:apt_call_session、apt_recording、apt_sip_reg_status、apt_device_alarm 不开放人工 CUD 接口;只允许对应领域模块写入或带 commandId 的受控命令(归档 / 清理 / 重探 / 处置);更正以新记录 + biz_version+1 体现 |
| CR-C17 | 分机离线是否单独建告警体系 | 不单独建:复用 apt_device_alarm(alarmSource=DEVICE、alarmType=OFFLINE)、/ws/duty device.alarm 与 alarm.cleared、#12 DEVICE_ALARM;不新增 WS 消息名、不新增 bizType、不新增跨端编号。告警不阻断叫乘,失败原因记 apt_call_session.hangup_cause |
| CR-C18 | register_status 与分机资源状态机的关系 |
补充枚举 ONLINE / OFFLINE / UNREACHABLE / UNKNOWN;不改 sync_state 的 PENDING / SYNCED / FAILED / DRIFT 四值状态机(docs/10 表 7-4、docs/公寓端/03 表 3-11),DISABLED / DELETED 仍由 enabled / deleted 表达 |
| CR-C19 | 表数口径 | 公寓本地库业务表 58 → 59 张(+ T-17);表 3-25、3-26、3-33 与 docs/公寓端/03 §0、三端 README、docs/10 v1.5 已同步。§8 施工单 R-54 / R-67 中的「58 张」「16 张」属 v1.0 历史口径,按本节理解;平台库仍为新增 3 张 pl_* |
表 3-40 T-17 关键约束(列级定义见 docs/公寓端/00 表 0-9)
| 项 | 要求 |
|---|---|
| 键与索引 | id PK;UK (gyid, endpoint_id, event_seq);IDX (gyid, state, occurred_at)、(gyid, endpoint_id, occurred_at);event_seq 同分机单调 |
| 写入语义 | 只追加、无 update_time;source ∈ AMI_EVENT / QUALIFY / PROBE / MANUAL / RECONCILE;双源判定(注册事件 + qualify / 定时探测) |
| 告警关联 | alarm_id 关联 apt_device_alarm;alarm_event_key = hash(gyid, endpoint_id, 'SIP_OFFLINE', offline_since);恢复只追加不清空 |
| 留存 | 在线 90 天、按月归档;同一离线周期的起止必须成对可查 |
表 3-41 新增流程 F-I:SIP 分机注册离线告警
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | apt-dispatch |
判 gy_jcxx.call_mode='SIP';按 jcid → fjh → apt_sip_binding(ROOM, is_primary=1, 生效区间) → apt_sip_endpoint 解析房间主分机 |
apt_sip_binding、apt_sip_endpoint |
绑定缺失 → apt_ast_drift 告警,不误报"注册离线" |
| 2 | apt.voice.endpoint / apt.voice.event |
双源判定注册态:非 ONLINE 或 last_reg_at 超阈值,且 offline_since 持续超阈值;校验 enabled=1 / deleted=0 / sync_state='SYNCED' |
apt_sip_reg_status |
PENDING/FAILED/DRIFT → 40905 或对账告警;AMI 断连标 UNKNOWN + P2 |
| 3 | apt.device.gateway |
按 alarm_event_key 去重,写 apt_device_alarm(DEVICE / OFFLINE / P0~P2) |
apt_device_alarm |
同 key 不重复响、不重复推;不提交状态机命令、不改 gy_jcxx |
| 4 | duty.ws / apt-report |
推 device.alarm;P0 入两级提醒 + TTS;#12 DEVICE_ALARM、#11 摘要、#13 计数、#24 regRate |
apt_report_outbox |
断网先落本地 + outbox,恢复后复用原幂等键续报(F-E) |
| 5 | 恢复闭环 | 写新流水 ONLINE → 置 register_status='ONLINE' → 置 cleared_at → 推 alarm.cleared |
apt_sip_reg_status、apt_sip_endpoint、apt_device_alarm |
只追加不清零;处置回写 handled_* 触发 bizVersion+1 |
阈值默认:注册探测 120 s、离线持续 60 s(Q-26);告警级别:有待叫乘任务
P0、无任务但分机离线P1、UNKNOWN/ 中继P2;留存:告警在线 180 天 + 归档、注册流水 90 天、录音 90 天且PURGED不删索引(表 0-15~0-17)。
表 3-42 施工单追加(R-68~R-76,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-68 | docs/公寓端/00-公寓端主要功能设计.md |
新增 §3、§3→§4、表 0-2 | Asterisk 配置数据管理模块全量补充(v1.1) |
| R-69 | docs/设计变更/03(本文) |
表 0-2 / 0-3、CR-C14、表 3-25 / 3-26 / 3-33、新增 §10 | 补遗登记与 58 → 59 张口径同步 |
| R-70 | docs/公寓端/01-功能边界.md |
§0、表 1-5 | 语音域补遗说明、启动前置与表数口径 |
| R-71 | docs/公寓端/03-数据设计.md |
§0 表 C-1 / C-2、命名分区、§1 标题 | 14 张 / 59 张、apt_* 35 张、注册态主从口径 |
| R-72 | docs/公寓端/04-接口设计.md |
§0 表 C-4 | N-19~N-24 接口与六条权限硬要求 |
| R-73 | docs/公寓端/05-关键流程.md |
§0 表 C-1 | 追加 F-I 流程落点 |
| R-74 | docs/公寓端/09-平台接口约定.md |
§0 表 C-4 | #11 / #12 / #13 / #24 的告警 payload 扩展 |
| R-75 | 三端 README.md + docs/README.md |
索引 / 结论 / 口径 | 收录 00 §3 与补遗,同步 59 张与 17 张表口径 |
| R-76 | docs/10-架构优化方案-三端拆分.md、docs/应用端/02、03、docs/平台端/03 |
表 0-2、§3 指针、表 2-1、§0、表 C-2 | 追加 v1.5 修订记录,同步 59 张口径与 register_status 枚举说明 |
表 3-43 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-26 | 注册探测阈值 / 离线持续阈值:默认 120 s / 60 s,阶段二契约冻结前拍板 |
| Q-27 | 分机离线是否自动降级为平板 / 广播:默认不自动切换,仍发起 SIP 并记失败原因,阶段三试点前拍板 |
| Q-28 | 告警记录在线留存 180 天是否合规:默认在线 180 天 + 按月归档、索引长期保留,阶段三 D 批开工前拍板 |
| 验收 9 | 四类数据表字段、CRUD 与权限点矩阵齐全;事实类表无人工 CUD 接口;gyid 数据域锁定;写操作两级审计 |
| 验收 10 | call_mode='SIP' 且房间主分机离线时能按条件触发 P0/P1/P2 告警、同一离线周期只一条、通知与 #12 上报闭环、恢复只追加不清零 |
| 验收 11 | 告警不阻断叫乘;录音回放短期签名 ≤ 5 分钟且仅内网;录音、业务抓拍与注册流水明细不出公寓(人员主数据人脸按 CR-C24 允许跨端,见 §12);平台零回调 |
11. 补遗:两类叫乘实现方式的端到端流程(v1.2)
触发依据:明确 A-06 / A-07 / A-08 的两类实现方式——SIP 语音叫乘(Asterisk 主动发起呼叫,房间 SIP 终端接听入会后播放提示语音完成叫乘,叫乘状态由业务系统依据 AMI 事件上报)与平板叫乘(平板拉取叫乘任务,到达
jcsj后本地播放语音,人员刷脸确认签到结束叫乘,随后把结果上报公寓服务)。 流程权威表述:docs/公寓端/05§9(表 5-95-21、图 5-85-9)。本节只登记裁决、落点、施工单与决策点;§7.1 F-A / §7.2 F-B、docs/10§7.7 / §7.9 表 7-5 的骨架不变,本节补齐"平板本地定时播放"与"结果反馈路径"两个此前未展开的环节。未新增数据表、跨端接口编号、bizType、WS 消息名或状态字段。
表 3-44 新增裁决 CR-C20~CR-C23(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C20 | "接听后播放提示语音完成叫乘"的判据 | 接通判据是 AMI ConfbridgeJoin(房间侧入会),不是 SIP Answer(docs/10 §7.7 第 2 条)。入会即提交 ANSWERED → ryzt=3 / finish_jc='1' 完成叫乘;Playback(tts) 在入会后播放,apt_tts_utterance 的 DONE / FAILED 与 apt_recording.state 不回退、不改写叫乘终态(沿用 docs/公寓端/05 §4 第 3 条) |
| CR-C21 | "状态由业务系统依据 AMI 事件上报"的路径 | 统一为三段:apt.voice.ami 收事件 → apt.voice.event 判业务状态 → 提交状态机命令(apt.duty.state 唯一写入口)→ 条件更新 gy_jcxx → apt-report 经 #8 / #9 / #24 上行。AMI 事件既不直接写业务表,也不单独构成对外上报;平板链路同构,事实源换成 N-04 的 TABLET_RESULT |
| CR-C22 | 平板"拉取任务"与"到点播放"的关系 | 拉取 ≠ 执行:服务端只生成 apt_tablet_task(WAITING) + dispatch_seq,不向平板推送呼叫指令(CR-C08);平板提前按 cursor 拉取并以 serverTime 校准时钟,到 jcsj 由平板本地定时器播放语音、开启刷脸签到窗口。断网时缓存任务仍可播放,结果入本地队列恢复后按 resultId 重传;只传 faceVerifyState / verifiedRyid,抓拍帧、人脸原图与比对帧不出终端;比对所需特征值按 docs/公寓端/10 的设备权限范围下发(CR-C24) |
| CR-C23 | 两类方式的终态与上报 | 共用 gy_jcxx.ryzt / finish_jc 一套终态语义(表 5-20),跨端 payload 一律带 callMode;#24 语音质量摘要只由 SIP 链路发送,平板链路走 #9 TABLET_RESULT + #13 归档。一条 jcid 只有一种事实来源,执行中不切换方式;TABLET 在 features.tabletCall=false 或平板离线时回落 SIP |
表 3-45 流程落点索引(均以 docs/公寓端/05 §9 为准)
| 维度 | SIP 语音叫乘 | 平板叫乘 | 表 / 图 |
|---|---|---|---|
| 方式对照与模式选择 | call_mode、回落、顺序派发、共用状态机 |
同左 | 表 5-9、5-10 |
| 触发条件 | Quartz 到 jcsj / 人工发起、分机与会议桥前置、F-I 离线告警不阻断 |
任务生成、平板在册与心跳、平板本地到 jcsj、签到窗口 |
表 5-11、5-14 |
| 交互流程 | 8 步:CALL_START → Originate → 终端接听入会 → ANSWERED → Playback(tts) → 归档上报 |
10 步:生成任务 → 拉取 / ACK → 时钟校准 → 本地播放 → 刷脸签到 → N-04 上报 → 状态机命令 | 图 5-8 / 5-9;表 5-12、5-15、5-16、5-17 |
| 状态上报机制 | AMI 事件 → 状态机命令 → gy_jcxx → outbox |
平板结果 → 状态机命令 → gy_jcxx → outbox |
表 5-13、5-18 |
| 结果反馈路径 | 值班台 /ws/duty、平台 #8 / #9 / #24 / #13、本地留痕、异常兜底 |
值班台 tablet.result + state.changed、平台 #9 / #8 / #13、本地留痕、异常兜底 |
表 5-19、5-20 |
表 3-46 施工单追加(R-77~R-84,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-77 | docs/公寓端/05-关键流程.md |
新增 §9(表 5-9 |
两类叫乘方式的端到端流程全量补充(流程权威表述) |
| R-78 | docs/设计变更/03(本文) |
表 0-2 / 0-3、新增 §11 | 补遗登记、编号范围扩至 CR-C23 / Q-29 |
| R-79 | docs/公寓端/04-接口设计.md |
§0 表 C-5 | N-03 任务负载(含 jcsj / serverTime)、N-04 结果契约与不直改 gy_jcxx 口径 |
| R-80 | docs/公寓端/03-数据设计.md |
§0 | SIP / 平板两类落表与共用终态语义 |
| R-81 | docs/公寓端/09-平台接口约定.md |
§0 表 C-5 | #8 / #9 / #12 / #13 / #14 / #24 按 callMode 分流的每日径 |
| R-82 | docs/公寓端/01-功能边界.md、docs/公寓端/00 §4 |
§0 / 关系第 4 条 | 两类方式指针,需求基线编号不变 |
| R-83 | docs/公寓端/README.md、docs/README.md |
文档清单 / 索引 | 收录 05 §9 与 CR-02 §11 |
| R-84 | docs/10-架构优化方案-三端拆分.md |
表 0-2 修订记录 | 追加 v1.6,声明 §7.7 / §7.9 表 7-5、表 7-6 与附录 B 不变 |
表 3-47 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-29 | 平板签到窗口 signTimeoutSec、语音重播次数与 clockSkewMs 阈值:默认 60s / 1 次 / 1s,阶段二契约冻结前拍板 |
| 验收 12 | SIP 链路以 ConfbridgeJoin 判接通、30s 无入会转 ryzt=2 + 复叫;TTS / 录音失败不改叫乘终态;状态只经 apt.duty.state 条件更新落库 |
| 验收 13 | 平板提前拉取任务并按 jcsj 本地定时播放;断网仍可播放、结果按 resultId 幂等续传;VERIFIED → ryzt=3 / finish_jc='1',UNVERIFIED / NO_ANSWER → 复叫 + 告警;抓拍帧与人脸原图不上报,比对所需特征值按 docs/公寓端/10 的设备范围下发 |
| 验收 14 | 两类方式共用终态矩阵与 outbox 上行;值班台 / 平台 / 本地留痕 / 异常兜底四条反馈路径齐全;payload 带 callMode;#24 只由 SIP 发送;跨端 20 接口编号与 v2-draft 契约形态不变 |
12. 补遗:人脸数据下发管理与注册链路改判(v1.3)
触发依据:新建
docs/公寓端/10-人脸数据下发管理.md(完整数据管理模块),并澄清人员注册口径——注册由签到终端发起申请并上传人脸,在值班员处完成人员注册;注册成功后人脸进入公寓服务系统,再分别上传平台与下发公寓内设备。 权威关系:docs/公寓端/10是"人员人脸主数据注册、平台 ↔ 公寓同步、设备下发、权限隔离与离寓清理"的唯一权威表述(AF-0110-30、图 10-1 / 10-2、N-25~N-37);本节只登记口径裁决、流程增量、施工单与决策点。跨端 20 个编号、契约AF-06、表 10-1v2-draft、平台不回调公寓、公寓本地库 59 张口径、附录 B 图表索引全部不变;本补遗不新增业务表(复用既有表 + 补列 + 规则,DDL 待阶段二冻结评审)。
表 3-48 补遗范围与权威位置
| 项 | 内容 | 权威位置 |
|---|---|---|
| 模块功能 | AF-01 注册与双路同步、AF-02 平台下载入库、AF-03 签到设备下发、AF-04 消费 / 叫乘设备隔离、AF-05 离寓擦除、AF-06 长期驻留保留 |
docs/公寓端/10 §3 表 10-8 |
| 注册链路 | 签到终端 REG_APPLY → 值班台待办 → 值班员 CONFIRM → apt_master_person 入档 → 分别 #9 上传平台 / FACE_ISSUE 下发设备 |
§4、图 10-2、表 10-9~10-11 |
| 数据模型 | 复用 8 张表 + 补列(表 10-5 / 10-6)、枚举字典(表 10-7) | §2 |
| 接口与错误码 | N-2540914 / 4091740924 / 50303 |
§13 表 10-26~10-28 |
| 权限与异常 | 九类动作留痕、签到终端 / 值班台职责分离(表 10-24)、异常场景(表 10-25) | §11、§12 |
| 决策与验收 | Q-30 |
§14 表 10-29、10-30 |
表 3-49 新增裁决 CR-C24、CR-C25(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C24 | "原图与特征大对象不出公寓"是否覆盖人员主数据 | 不覆盖。该表述只针对业务过程抓拍、录音与识别结果;人员主数据的照片与特征值允许且必须在平台 ↔ 公寓间双向同步并按设备范围下发,库内只存引用与校验和、媒体本体走短期签名直传。抓拍、录音、签到现场图仍不出公寓,识别结果上报不带图像。表 3-13、表 3-24、表 3-31 及 docs/公寓端/09、docs/平台端/07 已就地改判;不因本裁决放开媒体边界 |
| CR-C25 | 人员注册的发起方、生效点与同步顺序 | 签到终端发起注册申请并上传人脸 → 值班员在值班台完成人员注册 → 注册成功后人脸进入公寓服务系统(apt_master_person)→ 分别上传平台与下发公寓内设备。注册生效点为值班员 CONFIRM;平台 personRegVerdicts[] / verdict 降级为主档同步回执(ACCEPTED / REJECTED),不再是注册准入审批也不是生效前置。两条同步路径解耦并行、各自幂等、互不阻塞:平台不可达不阻塞设备下发,设备离线不阻塞平台上报 |
| CR-C25-a | 覆盖清单 | 表 3-1 A-02、表 3-2 第 3 行、CR-C04、表 3-7 #2 / #9、表 3-10 40914、表 3-13 PERSON_REG、表 3-19 regVerdict、表 3-27 T-04、表 3-31 T-14、§7.6 F-F、Q-24、docs/公寓端/04 表 4-4 / 表 C-3、docs/公寓端/05 表 C-1、docs/应用端/04 N-08 均按本表理解或已就地改判 |
| CR-C25-b | 不变项 | 平台仍是跨公寓人员主档真源;gyid 数据域锁定;下行一律"拉"、设备主动拉取;状态字段仍只有 apt.duty.state 一个写入口;apt_master_person 对业务模块只读,唯一写入口为注册确认时 apt-master-client 的事务写 |
表 3-50 新增流程 F-J:人员注册与双路同步(完整时序见 docs/公寓端/10 §4.2 图 10-2)
| 步 | 主体 | 动作 | 落表 | 失败 / 补偿 |
|---|---|---|---|---|
| 1 | 签到终端 | REG_APPLY 上传人员要素 + 人脸,落 APPLIED |
apt_person_face_reg |
媒体异常 40919 / 40920、已注册 40918;不进主档 |
| 2 | 值班台 | 值班员核对并确认 / 驳回(duty:person:reg + 二次确认) |
duty_manual_action、duty_operation_log |
驳回留 reject_reason,按 Q-32 清理媒体 |
| 3 | apt.face.registry |
生成 ryid、CONFIRMED、local_only=0,事务写 apt_master_person |
apt_person_face_reg、apt_master_person、apt_master_version |
事务失败整体回滚、保持 APPLIED;确认前匹配 → 40914 |
| 4a | apt.face.sync |
#9 PERSON_REG + 媒体签名直传,平台回同步回执 |
apt_report_outbox、pl_person_reg_request |
断网 outbox 续报;REJECTED 告警 + 待办,不回滚注册(Q-35) |
| 4b | apt.face.dispatch |
按 gy_sb.face_scope_* 生成 FACE_ISSUE,设备主动拉取并 ACK |
apt_device_command、gy_sb_xt |
设备离线排队;摘要不一致 → FACE_FULL_SYNC |
| 5 | apt.face.scope / 离寓清理 |
TRANSIENT 离寓自动 FACE_ERASE;LONG_TERM 独立分区长期保留 |
apt_device_command、apt_master_person.person_category |
擦除超时 → P1 告警 + 全量同步(Q-30) |
4a / 4b 并行双路;注册生效点是步 3,不是平台回执。
docs/公寓端/10§4.4 的reg_state状态机、upload_state/dispatch_state双状态链是本节的实现口径。
表 3-51 施工单追加(R-85~R-93,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-85 | docs/公寓端/10-人脸数据下发管理.md |
全文 | 新建人脸数据下发管理模块(v1.0 六项功能 + v1.1 注册链路改判) |
| R-86 | docs/设计变更/03(本文) |
表 0-2 / 0-3、CR-C04、表 3-1 / 3-2 / 3-7 / 3-13 / 3-17 / 3-19 / 3-24 / 3-27 / 3-31、§7.6、Q-24、新增 §12 | 补遗登记;媒体边界与注册链路就地改判 |
| R-87 | docs/公寓端/00-公寓端主要功能设计.md |
表 0-2 / 0-3、§4 | 需求基线 v1.2、A-02 三端归属改判与 §12 指针 |
| R-88 | docs/公寓端/01、03 |
§0 | 功能域指针、补列与 owner 口径同步 |
| R-89 | docs/公寓端/04-接口设计.md |
§0 表 C-6、表 C-3 / 表 4-4 | N-25~N-37、40914 改判与新增错误码 |
| R-90 | docs/公寓端/05-关键流程.md |
§0 表 C-1、§9 | F-J 流程索引与媒体口径改判 |
| R-91 | docs/公寓端/09-平台接口约定.md |
§0 表 C-6、表 C-2 / C-3 | #2 / #9 / #11 / #14 人脸扩展与同步回执语义 |
| R-92 | 三端 README.md + docs/README.md |
清单 / 索引 / 一页结论 | 收录 10 与 CR-02 §12,同步 59 张 / 20 接口 / v2-draft |
| R-93 | docs/10-架构优化方案-三端拆分.md、docs/平台端/*、docs/应用端/* |
表 0-2、§3 指针、§0 | 追加 v1.7;平台侧对象存储与人员照片口径、应用端 N-08 审核入口 |
| R-94 | docs/公寓端/02、06、07、08、docs/平台端/03、05、06、docs/应用端/01、03、05、07 |
顶部追溯 / §0 / 表 C-1 / 表 C-2 | 分册同步补全:apt-face 子域归属与技术基线不变、媒体配置项、Q-30~Q-35 与验收入口;平台侧登记表补列 / 同步回执语义 / #9 上报时点;应用端注册审核职责、只读边界、F-F 流程与验收入口 |
表 3-52 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-30~Q-35 | 见 docs/公寓端/10 表 10-29:擦除时限与告警级别、设备离线期间禁用本地人脸放行、保留期与删除留痕、媒体签名有效期与大小上限、LONG_TERM 标注来源;Q-35 为平台驳回注册结果(如 DUPLICATE_WORK_NO)时是否自动擦除已下发设备缓存,默认不自动擦除(保留本地注册与设备缓存,告警 + 值班台待办 + 暂停后续下发,由值班员人工归并) |
| 验收 15 | 注册链路四段闭环:申请只落 APPLIED 且不进主档 / 不下发 / 不上报;值班员确认生成 ryid 并入 apt_master_person;确认后 #9 上传平台与 FACE_ISSUE 下发设备双路自动触发且互不阻塞;平台驳回不回滚本地注册(CR-C25) |
| 验收 16 | 六项功能齐备:#2 增量下载入库、签到设备全字段下发、CONSUME / CALL 按设备范围隔离且不含照片、TRANSIENT 离寓擦除有 ACK、LONG_TERM 独立分区不误删、三级版本与 hash 对账及 FACE_FULL_SYNC 兜底 |
| 验收 17 | 边界不破:抓拍 / 录音 / 签到现场图不出公寓;人员主数据人脸按 CR-C24 允许跨端;跨端 20 编号、v2-draft、59 张表、附录 B 图表索引不变;九类动作全部留痕 |
13. 补遗:人员入住作业流程(v1.4)
触发依据:新增
docs/公寓端/11-人员入住作业流程.md,要求覆盖「注册与签到、入住申请、值班员审核、数据提报与匹配、叫乘环节」五环节,以及各环节状态流转、关键数据表结构与接口清单(含请求 / 响应字段)。 权威关系:docs/公寓端/11是入住作业流程端到端的唯一权威表述(CI-0111-35、图 11-1~11-3);本节只登记口径裁决、流程增量、施工单与决策点。跨端 20 个编号、契约CI-05、表 11-1v2-draft、平台不回调公寓、jcsj恒由公寓复算、apt.duty.state单写入口、公寓本地库 59 张表、附录 B 图表索引全部不变;本补遗不新增业务表、不新增跨端编号、不新增bizType、不新增gy_jcxx状态字段,采用"复用apt_local_task+ 补列 + 规则"实现(补列均为设计定义,DDL 待阶段二契约冻结评审,Q-40)。
表 3-53 补遗范围与权威位置
| 项 | 内容 | 权威位置 |
|---|---|---|
| 五环节 | CI-01 注册与签到、CI-02 入住申请、CI-03 值班员审核、CI-04 数据提报与匹配、CI-05 叫乘环节 |
docs/公寓端/11 §4~§8 |
| 状态流转 | 三条状态链(申请审核态 / 同步匹配态 / 业务事实态)、10 步全流程状态表、审核状态机 | §2 表 11-4 / 11-5、图 11-2 |
| 数据模型 | 复用表清单、apt_local_task 列级结构、关键事实表相关列、枚举字典 |
§3 表 11-6~11-9 |
| 接口清单 | 端内 N-38~N-47、跨端 #2 / #6 / #7 / #8 / #9 请求 / 响应字段 | §9 表 11-30 / 11-31,§4~§8 各字段表 |
| 异常与权限 | 12 类异常处理、七条权限与审计要求 | §10 表 11-32 / 11-33 |
| 决策与验收 | Q-36~Q-40、8 项验收要点 | §11 表 11-34 / 11-35 |
表 3-54 新增裁决 CR-C26~CR-C30(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C26 | "入住人员状态更新为已入住"如何表达,是否新增 gy_jcxx 状态字段 |
不新增状态字段。已入住 = apt_local_task.checkin_state=CHECKED_IN(流程态)+ 业务事实 gy_jcxx.finish_ly='0' AND sjlysj IS NULL + 已写 gygl_ly_event(CHECKIN)。checkin_state / sync_state 是申请单流程态,不是 gy_jcxx 状态字段;ryzt / finish_jc / finish_ly / stoped 仍只经 apt.duty.state 条件更新,已结束不回写、已离寓不回写、stoped 不可逆(表 3-9 / 3-10、docs/backend/05 §2.1) |
| CR-C27 | 入住申请单落在哪张表 | 不新增业务表(59 张不变):申请单作为 apt_local_task 的申请阶段记录(docs/设计变更/01 表 1-17「本地建单」表,已带 origin=CHECKIN_ROUTE / CHECKIN_PENDING 与 match_state 五值),补 apply_id / checkin_state / sync_state / fjh_final / review_* / face_* 等列。apply_id ↔ 预分配 jcid 一对一;申请阶段不建 gy_jcxx 行,审核通过办理入住时由 apt-stay 沿用同一 jcid 建行(docs/backend/05 §2.1、docs/设计变更/01 表 1-12) |
| CR-C28 | 五环节接口边界 | 端内新增 N-38~N-47(承接 §12 的 N-37,不计入跨端 20 个编号);入住事实上报固定 #9 + CHECKIN / CHECKOUT / ROOM_SWAP(bizId = jcid + 事件序号,表 3-12 / 3-14 已有),运安乘务计划 #6、任务变更与匹配结论 #7、任务回执 #8。平台零回调,匹配结论只能放 #7 响应体 matchVerdict[](与 replayHint 同级,docs/设计变更/02 R-05),不得新开推送通道或新增 bizType |
| CR-C29 | 平台匹配与 jcsj 权威 |
#8 是平台匹配的输入(联网时下一上报周期必发,否则长期 UNMATCHED);平台按 gyid + cardNo/workNo + 日期 + 车次 + 交路 查 GY_SYN_JCXX 快照,命中补 kcsj / jcfs 并写 PL_TASK_CHANGE(op=UPSERT)。match_state 沿用正式五值 PENDING / MATCHED / UNMATCHED / LOCKED / REJECTED(LOCAL_ONLY 属 offlineScope,不是匹配状态);UNMATCHED / LOCKED 保留公寓上报要素不清空、不删既有任务(D8' 例外①②)。jcsj 及派生恒由公寓按 apt_master_rule 复算,PL_TASK.jcsj 只是基线、禁止逐项覆写(CR-C06) |
| CR-C30 | 房间调整与交路可选 | 房间调整(N-45)仅审核期(未建 gy_jcxx)允许,复用 F-C 换房联动(gy_rooms 房态重算 + apt_sip_binding + ROOM_SWAP 事件),但不产生换乘单、不改 jcid、不重算 jcsj;已办理入住后的换房走 F-C TRANSFER。交路可确定时 origin=CHECKIN_ROUTE,否则 CHECKIN_PENDING 由平台匹配补齐,两种情况均不阻塞入住(Q-36) |
| CR-C28-a | 覆盖清单 | 表 3-1 A-03、表 3-3 功能域 1、表 3-12 / 3-14 CHECKIN payload、表 3-8 端内接口清单(历史 N-01~N-18)、表 3-34 流程总表、docs/公寓端/04 §7 房间域第 3 条、docs/公寓端/05 §0 表 C-1、docs/公寓端/09 表 9-1、docs/平台端/05 表 5-1 / 表 C-2 均按本节理解或已就地补指针;不改动 20 个编号、方向与路径 |
表 3-55 新增流程 F-K:人员入住作业(完整时序见 docs/公寓端/11 图 11-1 / 11-3)
| 步 | 环节 | 主体 | 动作 | 落表 / 编号 | 失败 / 补偿 |
|---|---|---|---|---|---|
| 1 | CI-01 注册与签到 | 签到终端 → apt.face.registry |
N-38 扫脸核验;未注册走 docs/公寓端/10 §4 的 N-34 → N-36,确认后重新核验 |
apt_master_person(只读)、apt_person_face_reg |
未确认 40914;缓存过期 40927;核验结论不带图像 |
| 2 | CI-02 入住申请 | 签到终端 → apt-stay |
N-39 拉房间 / 交路,N-40 提交申请;8 项校验后建申请单 + 预分配 jcid |
apt_local_task(SUBMITTED) |
重复 deviceEventId 返回原 applyId;房间不可住 40928;不建 gy_jcxx |
| 3 | CI-03 值班员审核 | 值班台 → apt-stay |
N-42 / N-43 接单查看;N-44 审核、N-45 换房(可多次);通过后单事务办理入住 | apt_local_task(CHECKED_IN)、gy_jcxx、gygl_ly_event(CHECKIN)、gy_rooms、apt_sip_binding |
并发 40926;事务失败整体回滚至 APPROVED;驳回 / 取消为终态 |
| 4 | CI-04 提报 | apt-report |
#9 CHECKIN(表 11-21)入 outbox 并上报 |
apt_report_outbox、PL_RECEIVE_LOG |
断网 outbox 续报,不阻塞本地入住与叫乘准备 |
| 5 | CI-04 匹配 | 平台 / apt-dispatch |
#6 拉计划、#8 回执作匹配输入、平台查运安快照、#7 响应体带 matchVerdict[] |
GY_SYN_JCXX、PL_TASK / PL_TASK_CHANGE、apt_local_task.match_state |
UNMATCHED 保留本地要素;LOCKED 不覆盖本地锁定;REJECTED 转待办 |
| 6 | CI-05 叫乘 | apt-dispatch → apt.duty.state |
#7 拉任务 → 按 apt_master_rule 复算 jcsj → 回 #8 → 按 jcsj + dispatch_seq 派发 |
gy_jcxx、gy_syn_jcxx_status、N-47 关联查询 |
已离寓迟到任务 IGNORED;两类叫乘执行见 docs/公寓端/05 §9 |
表 3-56 施工单追加(R-95~R-103,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-95 | docs/公寓端/11-人员入住作业流程.md |
全文 | 新建入住作业流程专册(v1.0):五环节、三条状态链、复用表补列、N-38 |
| R-96 | docs/设计变更/03(本文) |
表 0-2 / 0-3、新增 §13 | v1.4 补遗登记、CR-C26 |
| R-97 | docs/公寓端/00-公寓端主要功能设计.md |
表 0-1 / 0-2 / 0-3 A-03、§4 | 需求基线 v1.3、A-03 指针与 §13 权威表述 |
| R-98 | docs/公寓端/01、03、04 |
§0 / 表 C-1 / 表 C-6 | 功能域指针、apt_local_task 补列、N-38 |
| R-99 | docs/公寓端/05-关键流程.md |
§0 表 C-1、新增 §10 | F-K 流程索引与入住作业流程章节指针 |
| R-100 | docs/公寓端/09-平台接口约定.md |
§0 表 C-6、表 C-2 | #9 CHECKIN 扩展、#6 / #7 / #8 字段与匹配结论载体 |
| R-101 | 三端 README.md + docs/README.md |
清单 / 索引 / 一页结论 | 收录 公寓端/11 与 CR-02 §13,同步 59 张 / 20 接口 / v2-draft |
| R-102 | docs/10-架构优化方案-三端拆分.md |
表 0-2、§3 指针 | 追加 v1.8;明确入住流程不新增编号、不新增表、jcsj 复算不变 |
| R-103 | docs/平台端/05、06、docs/应用端/01、04、05、docs/公寓端/07、08 |
§0 / 表 C-1 / 表 C-2 | 平台侧匹配结论与 #9 接收口径、值班台审核入口、F-K 流程与 Q-36~Q-40 / 验收追加 |
表 3-57 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-36~Q-40 | 见 docs/公寓端/11 表 11-34:交路是否必填 / CHECKIN_PENDING 可否直接入住、UNMATCHED 超时阈值、入住后是否允许房间调整、签到终端离线能否先办后补、apt_local_task 补列 DDL 冻结时点 |
| 验收 18 | 五环节闭环:未注册先注册并重新核验 → 申请单 8 项校验且申请阶段不建 gy_jcxx → 值班员可换房且 7 项变更清单齐全 → #9 CHECKIN 提报与 #7 matchVerdict[] 匹配 → #7 拉到叫乘任务并复算 jcsj 进入派发 |
| 验收 19 | "已入住"判据:同时满足 checkin_state=CHECKED_IN、finish_ly='0' AND sjlysj IS NULL、gygl_ly_event(CHECKIN) 已写;事务失败整体回滚;gy_jcxx 状态字段无新增、仍只经 apt.duty.state 条件更新;applyId ↔ jcid 一对一 |
| 验收 20 | 边界不破:跨端 20 编号、v2-draft、平台零回调、59 张表、附录 B 图表索引、jcsj 公寓复算、抓拍 / 录音不出公寓均不变;UNMATCHED / LOCKED 不清空本地要素;九类动作全部留痕,签到终端 / 值班台无业务表直写权限 |
14. 补遗:消费、充值与菜品管理(v1.5)
触发依据:新增
docs/公寓端/12-消费充值与菜品管理.md,要求覆盖「人员消费(食堂选餐 → 消费终端加菜显示金额 → 查补贴 / 现金额度 → 补贴优先扣款、不足现金补足 → 费用上报公寓端 → 流水同步平台并落入人员账户)、人员线下充值(扫公寓线下二维码 → 签到终端输入现金充值金额 → 管理员核对 → 计入本人现金充值额度 → 保存公寓端并同步平台)、公寓菜品管理(公寓管理员发布阶段性菜品食谱 → 消费人员在消费终端查看菜品并加入选择菜单 → 预留未来远程点菜入口)」三项流程,含数据结构、接口定义(请求 / 响应字段)、状态流转与异常场景。 权威关系:docs/公寓端/12是三项流程端到端的唯一权威表述(CF-0112-34、图 12-1~12-4);本节只登记口径裁决、流程增量、施工单与决策点。跨端 20 个编号、契约CF-03、表 12-1v2-draft、平台不回调公寓、apt.ledger.local/platform-ledger各自单写入口、公寓本地库 59 张表、附录 B 图表索引全部不变;本补遗不新增业务表、不新增跨端编号、不新增bizType、不新增gy_jcxx状态字段,采用"复用gy_ykt_*五张预留表 +apt_ledger_offline+ 平台库YKT_MEALS补列 + 规则"实现(补列均为设计定义,DDL 待阶段二契约冻结评审,Q-43)。
表 3-58 补遗范围与权威位置
| 项 | 内容 | 权威位置 |
|---|---|---|
| 三项流程 | CF-01 人员消费、CF-02 人员线下充值、CF-03 公寓菜品管理 |
docs/公寓端/12 §4~§6 |
| 状态流转 | 四条状态链(消费流水态 / 充值申请态 / 同步生命周期 / 食谱发布态)、11 步全流程状态表、双额度扣减决策图 | §2 表 12-4 / 12-5、图 12-1 / 12-2 |
| 数据模型 | 复用表清单、gy_ykt_* / apt_ledger_offline / YKT_MEALS 列级结构与补列、枚举字典 |
§3 表 12-6~12-11 |
| 接口清单 | 端内 N-48~N-58、跨端 #1 / #4 / #10 / #16 扩展与 LEDGER_OFFLINE payload 字段 |
§8 表 12-29 / 12-30、§7 表 12-26 |
| 异常与权限 | 12 类异常总表、七条权限与审计要求 | §9 表 12-31 / 12-32 |
| 决策与验收 | Q-41~Q-45、8 项验收要点 | §10 表 12-33 / 12-34 |
表 3-59 新增裁决 CR-C31~CR-C35(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C31 | 补贴与现金双额度扣减如何落流水,是否分别记两条 | 一笔消费只产生一条 flowId / type=CONSUME 流水(CR-02 表 3-15 既有 flowType,不新增)。按"补贴优先、现金补足"拆出 allowanceAmount / cashAmount 随 #10 LEDGER_OFFLINE payload 扩展上报,两者之和等于 abs(amount);不额外生成 ALLOWANCE_DEDUCT 流水,避免平台 sum(amount) 双计。ALLOWANCE_DEDUCT 保留给独立退补助 / 补助调整场景。两者合计仍不足则全额拒绝、不部分扣款、不透支(PF-5001 / 40933) |
| CR-C32 | "扫公寓线下二维码充值"是否构成线上支付 | 不构成。充值仅支持线下现金、系统只记账:二维码只携带 gyid + qrCodeId 用于识别公寓并引导到签到终端,不含支付链接;不接微信 / 支付宝 / 网银、不建支付订单、不监听支付回调、不产生支付流水。现金由管理员线下收取并二次确认后,经 apt.ledger.local 只增 gy_ykt_remainder.xjye(不改 knye 补贴额度),再走 #10 同步平台。rechargeChannel 恒为 OFFLINE_CASH |
| CR-C33 | 阶段性菜品食谱主数据归属,以及"选择菜单"是否落库 | 食谱主数据归平台库 YKT_MEALS 补列(recipe_id / recipe_version / meal_period / 生效区间 / publish_state / published_*),由公寓管理员经 platform.catering 发布;公寓 apt.catering 只经 #4 下行 recipes[] 拉增量与水位,食谱缓存落在消费终端本地,不落公寓本地业务表。YKT_MEALS_ORDERING / YKT_MEALS_ORDERS_MX 本期不写入:终端"选择菜单"是设备本地状态,确认前不落库,确认后只按 CF-01 生成一条消费流水。远程点菜仅保留 #1 features.remoteOrdering=false 与 N-58 入口骨架,本期恒返回 40940 FEATURE_DISABLED,不下单、不扣款 |
| CR-C34 | knye / xjye 语义与金额口径 |
knye = 补贴可用额度(allowanceQuota)、xjye = 现金可用额度(cashQuota)为设计映射,须按 docs/11 与 docs/backend/11 存量数据复核(Q-43),不新造同义余额字段;GY_YKT_REMAINDER 仍是唯一余额表,gy_card 全库不存在、卡号沿用 GY_YKT_RY.card_id。金额一律 decimal(12,2) / 字符串两位小数、扣减用负数、充值用正数、禁止浮点;服务端按 recipeId + recipeVersion 重算金额,不信任终端合计 |
| CR-C35 | 状态表达式与边界不变项 | 四条状态链互不替代:apt_ledger_offline.ledger_state(补列,流程态 SUBMITTED / DEDUCTED / REPORTED / RECONCILED / REJECTED / REVERSED)、gy_ykt_cash_request.request_state(沿用三值 PENDING / COMPLETED / CANCELLED)、offline_scope + outbox state + reconcile_state(沿用表 3-15 / 3-21 / 3-30)、YKT_MEALS.publish_state(补列四值)。ledger_state 不是余额状态字段,也不是 gy_jcxx 状态字段;状态字段仍只有 apt.duty.state 一个业务终态写入口。幂等 idempotencyKey = hash(gyid + bizType + bizId + bizVersion)、bizId = flowId、业务 UK (gyid, type, flow_id)、归日以平台 serverReceivedAt 为准、count 按 biz_id 去重(R-C3)全部沿用 |
| CR-C31-a | 覆盖清单 | 表 3-1 A-04 / A-14、表 3-3 功能域 6、表 3-12 / 3-15 LEDGER_OFFLINE、表 3-20 offlineQuota、表 3-30 apt_ledger_offline、§7.3 F-D、docs/公寓端/01 表 1-4 #6、docs/公寓端/03 表 C-2 / C-3、docs/公寓端/04 §0 表 C-3、docs/公寓端/09 表 9-1、docs/平台端/01 表 C-1、docs/平台端/03 表 3-7、docs/平台端/04 表 4-9 均按本节理解或已就地补指针;不改动 20 个编号、方向与路径,不新增 bizType |
表 3-60 新增流程 F-L / F-M / F-N(完整时序见 docs/公寓端/12 图 12-3 / 12-4、图 12-1)
| 步 | 流程 | 主体 | 动作 | 落表 / 编号 | 失败 / 补偿 |
|---|---|---|---|---|---|
| 1 | F-N 菜品管理 | 公寓管理员 → platform.catering |
N-57 新建 / 发布阶段性食谱(recipe_id + 单调 recipe_version + 餐次 + 生效区间),DRAFT → PUBLISHED |
YKT_MEALS 补列、#4 recipes[] |
区间重叠拒绝发布;改价 / 下架生成新版本,不改已发布版;到期 EXPIRED、撤回 REVOKED |
| 2 | F-N 下发 | apt.catering → 消费终端 |
公寓 GET #4 拉增量与水位,终端 N-48 按 version 主动拉食谱、本地缓存并展示 |
终端本地缓存(不落库) | 缓存落后按 version 刷新;食谱失效 40936 / PF-6001 |
| 3 | F-L 消费受理 | 消费终端 → apt.ledger.local |
点击加入选择菜单、实时显示金额;N-49 查询两条额度,N-50 提交 items[] + amount |
apt_ledger_offline(SUBMITTED) |
校验失败 REJECTED 不扣款;重复 deviceEventId 返回原 flowId |
| 4 | F-L 双额度扣减 | apt.ledger.local |
补贴优先 → 现金补足 → CAS 条件更新两条额度 + 记一条 CONSUME 流水(负数),balance_before/after 留痕 |
gy_ykt_remainder、gy_ykt_consume、apt_ledger_offline(DEDUCTED) |
合计不足全额拒绝;CAS 冲突重读重试一次,再失败 40935 转人工 |
| 5 | F-L 提报与对账 | apt-report → platform-ingest → platform-ledger |
#10 LEDGER_OFFLINE 入 outbox 并上报;平台按 serverReceivedAt 归日、唯一写入口更新 GY_YKT_REMAINDER / PL_LEDGER_FLOW;#16 日对账通过置 RECONCILED |
apt_report_outbox / history、PL_RECEIVE_LOG、PL_LEDGER_FLOW、GY_YKT_REMAINDER |
断网 LOCAL_ONLY + outbox PENDING,恢复复用原幂等键续报;差异 DIFF + PF-5003 阻断调账,只走 POST /adjustments 冲正 |
| 6 | F-M 充值申请 | 签到终端 → apt.ledger.local |
扫公寓线下二维码 → N-52 输入金额提交申请(申请表不存金额,金额落 apt_ledger_offline.amount) |
gy_ykt_cash_request(PENDING) |
金额非法 40938;二维码跨 gyid 40301 / 40939;不建支付订单 |
| 7 | F-M 管理员核对 | 值班台 → apt.ledger.local |
N-53 待核对列表 → N-54 二次确认(或 N-55 作废)→ COMPLETED、只增 xjye、写 gy_ykt_xjczjl(channel=OFFLINE_CASH) |
gy_ykt_remainder、gy_ykt_xjczjl、apt_ledger_offline、duty_manual_action |
实收不符走 N-55 CANCELLED;并发冲突 40939 不重复入账;终态不可回写 |
| 8 | F-M 同步 | apt-report → platform-ledger |
与步 5 共用 #10 LEDGER_OFFLINE(RECHARGE 正数)与 F-D 六步 |
同步 5 | 同步 5 |
三条流程共用 F-D 账务闭环(离线受理 → 本地余额立即可用 → 先派 outbox → #10 逐条上报 → 平台归日 → 日对账置
RECONCILED)与 #1offlineQuota约束;平台零回调、platform.ledger是余额主账唯一写者,消费终端 / 签到终端 / 值班台对余额表零写权限。
表 3-61 施工单追加(R-104~R-113,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-104 | docs/公寓端/12-消费充值与菜品管理.md |
全文 | 新建三项流程专册(v1.0):三条流程、四条状态链、复用表补列、N-48LEDGER_OFFLINE payload 扩展、异常与权限、Q-41 |
| R-105 | docs/设计变更/03(本文) |
表 0-2 / 0-3、新增 §14 | v1.5 补遗登记、CR-C31 |
| R-106 | docs/公寓端/00-公寓端主要功能设计.md |
表 0-2 / 0-3 A-04、§4 | 需求基线 v1.4、A-04 三端归属与 §14 权威表述 |
| R-107 | docs/公寓端/01、02、03 |
§0 / 表 C-1 / 表 C-3 | 功能域 6 补遗、子域归属与技术基线不变、gy_ykt_* / apt_ledger_offline / YKT_MEALS 补列与 owner 口径 |
| R-108 | docs/公寓端/04-接口设计.md |
§0 表 C-3 / 表 C-8 | N-484093340940 |
| R-109 | docs/公寓端/05-关键流程.md |
§0 表 C-1、新增 §11 | F-L / F-M / F-N 流程索引与三项流程章节指针 |
| R-110 | docs/公寓端/09-平台接口约定.md |
§0 表 C-8、表 C-2 | #1 features.remoteOrdering、#4 recipes[]、#10 LEDGER_OFFLINE 扩展字段、#16 对账结论 |
| R-111 | docs/公寓端/06、07、08、README.md |
配置项 / 验收入口 / Q 清单 / 索引 | 金额与离线额度配置项、验收 21公寓端/12 与 v1.9 |
| R-112 | docs/平台端/01、03、04、05、06、07、09、README.md |
§0 / 表 C-1 / C-2 / 表 4-9 / §4.1 / 表 9-1 | YKT_MEALS 补列与 publish_state、platform.catering recipes 资源、#10 payload 扩展与平台归集链路、余额主账单写入口声明;对象存储仍只有两个桶(image_ref 只作引用占位)、P-07 与 Q-44 远程点菜关联 |
| R-113 | docs/应用端/01、03、04、05、07、README.md、docs/10-架构优化方案-三端拆分.md、docs/README.md |
§0 / 表 C-1 / C-2 / 表 0-2 / §3 指针 | 管理员充值核对与食谱发布职责、只读边界、N-53~N-55 入口、F-M 流程与验收入口;追加 v1.9 修订记录与 CR-02 §14 索引 |
表 3-62 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-41~Q-45 | 见 docs/公寓端/12 表 12-33:补贴不足是否允许现金补足(默认允许)、线下充值断网是否受 offlineQuota 约束(默认是,沿用 Q-21)、食谱主数据归属与 knye / xjye 语义复核(默认平台库 YKT_MEALS 补列 + 公寓只读下发,须按存量数据复核)、远程点菜启用条件(本期 features.remoteOrdering=false)、充值单笔上限 / 是否双人复核 / 内部人员透支(默认 > 0 且 < 100、二次确认即可、不透支) |
| 验收 21 | 三项流程闭环:终端按 PUBLISHED 食谱选菜并显示金额 → N-49 返回两条额度 → 严格"补贴优先、现金补足"且一笔消费只一条 flowId → #10 落 PL_LEDGER_FLOW 并更新人员账户;扫码只识别公寓、无支付订单与回调、申请表不存金额、管理员二次确认后只增 xjye;阶段性食谱按 recipe_id + version + period + 区间 发布、选单确认前不落库、N-58 恒 40940 |
| 验收 22 | 状态一致性:四条状态链(表 12-4)互不替代;ledger_state / request_state / offline_scope / publish_state 与 docs/公寓端/12 §4~§6 状态机、§9 异常表逐项对应;终态不回写;amount 一律字符串两位小数、扣减负数、服务端按 recipeVersion 重算;CAS 前后值留痕 |
| 验收 23 | 边界不破:跨端 20 编号、v2-draft、平台零回调、59 张表、附录 B 图表索引、不新增 bizType、apt.ledger.local / platform-ledger 单写入口、抓拍 / 录音不出公寓均不变;十类动作全部留痕,新增权限点前后端同码并登记 sys_menu.perms,设备与前端零余额表写权限 |
15. 补遗:三端一致性同步与平台统计分析(v1.6)
触发依据:把公寓端已完成的四项调整(平板叫乘(§11 F-A / F-B、
docs/公寓端/05§9)、人脸签到与注册(§12 F-F / F-J、docs/公寓端/10)、消费(§14 F-L、docs/公寓端/12§4)、菜品管理(§14 F-N、docs/公寓端/12§6))在应用端与平台端同步落地,统一业务规则、交互流程、权限控制与异常处理,并明确三端数据同步机制与状态映射关系;同时强化平台端「以公寓为单位的分类统计、月 / 季 / 年报表与公寓排名」能力。 权威关系:docs/平台端/10是统计 / 报表 / 排名能力的唯一权威表述(PS-0110-22、图 10-1PS-05、表 10-110-3);表 3-66 是三端状态映射与数据同步机制的唯一权威表述,各端分册的本端视角映射表均指向本节,不得另立第二真源。本节只登记变更点、影响范围、口径裁决、流程增量、施工单与决策点。 性质与边界:设计稿(Design Only),DDL 待阶段二契约冻结评审(Q-48)。跨端仍为 **20 个编号(117 + 23~25)、契约v2-draft、平台零回调、公寓本地库 59 张表、附录 B 图表索引不变;不新增跨端编号、不新增bizType、不新增公寓本地业务表、不新增业务状态字段。统计能力全部落在平台管理端/platform/v1/admin/stat/**,新增 2 张pl_apt_stat_*属平台库**(按 §0 表 C-1 / C-2「平台库新增表另计」执行,不纳入 59 张校验);统计结果不回写公寓端 / 应用端任何业务状态。
表 3-63 变更点与影响范围(本轮修订的交付清单,冲突时以本表为准)
| # | 变更点 | 类型 | 影响文件 | 影响端 | 冻结契约影响 | 施工单 |
|---|---|---|---|---|---|---|
| 1 | 新建「公寓统计分析与排名报表」专册:五类指标、月 / 季 / 年周期、分类与综合排名、报表生成导出 | 新增能力 | docs/平台端/10(新建) |
平台端(主责)、应用端(只读消费)、公寓端(不改上报义务) | 无:不新增跨端编号 / bizType / 公寓业务表;平台库新增 2 张另计 |
R-114 |
| 2 | 三端状态映射与数据同步机制收口为唯一权威表 | 新增 / 收口 | 本文表 3-66;应用端/03、平台端/05 本端视角表;公寓端/09 指针 |
三端 | 无:全部沿用既有编号与枚举 | R-115、R-117、R-123 |
| 3 | 应用端补齐平板叫乘的业务规则、交互流程、权限与异常(F-A / F-B 展开) | 同步落地 | 应用端/01、02、03、04、05、06、07、08、09、README |
应用端 | 无:只提交命令、不直写业务表 | R-116~R-120 |
| 4 | 应用端补齐人脸签到 / 注册审核、消费、菜品管理的规则、权限、异常与错误码登记 | 同步落地 | 同上(04 补 40917 |
应用端 | 无:错误码沿用公寓端已定义值,本端只消费不自造 | R-118、R-119 |
| 5 | 平台端补齐四项能力的业务规则、流程正式行、权限与异常(F-L / F-M / F-N 升入表 C-1) | 同步落地 | 平台端/01、02、03、04、05、06、07、08、09、README |
平台端 | 无:platform-ledger / platform-report 单写入口不变 |
R-121~R-124 |
| 6 | 平台端 worker 任务清单挂接四能力上报与统计生成 | 同步落地 | 平台端/02 §2、平台端/08 §1 / §4 |
平台端 | 无:单活 + 库级协调锁不变,不引入消息中间件 | R-121 |
| 7 | PL_REPORT_DAILY / PL_LEDGER_FLOW 补列与 2 张 pl_apt_stat_* 新表 |
数据结构(设计定义) | 平台端/03、平台端/10 表 10-7 / 10-8 / 10-10 |
平台端 | 平台库新增表另计;DDL 待阶段二冻结(Q-48) | R-122 |
| 8 | 新增管理端接口 S-01S-07 与错误码 PF-7003PF-7005 |
接口(管理端) | 平台端/04 §9、平台端/10 表 10-14 |
平台端 | 不计入跨端 20 编号;管理接口不产生跨端副作用 | R-123 |
| 9 | 评价情况 / 房间周转数据接入:#13 ARCHIVE 摘要 payload 扩展 |
口径裁决 | 公寓端/09、平台端/05、平台端/10 表 10-9 |
公寓端(分组计数)、平台端(只接计数) | 不新增 bizType、不接明细、不新增上报接口 |
R-125 |
| 10 | 顶层架构与三端 README / 总索引版本同步 | 索引同步 | docs/10 v2.0、三端 README.md、docs/README.md、公寓端/00、05 |
三端 | 无 | R-125 |
影响范围总述:功能描述影响三端全部
01分册(公寓端/01、应用端/01、平台端/01);数据流程影响公寓端/03/05/09、应用端/03/05、平台端/03/05/06/10;接口定义影响公寓端/04/09、应用端/04、平台端/04/05;权限控制影响公寓端/02/06、应用端/02/04、平台端/01/04/10;异常处理影响公寓端/07/08、应用端/04/05/07、平台端/06/09/10;实施与验收影响公寓端/07/08、应用端/07/08、平台端/08/09、docs/10与三端README.md/docs/README.md。不改变公寓端四项能力的既有权威表述(公寓端/05§9、公寓端/10、公寓端/11、公寓端/12),只在四册头部补 §15 关联指针并补齐另两端。
表 3-64 新增裁决 CR-C36~CR-C42(冲突时以本表为准)
| 编号 | 事项 | 裁定 |
|---|---|---|
| CR-C36 | 统计周期、封账与日切口径 | 月 YYYY-MM / 季 YYYY-Qn / 年 YYYY 一律由 PL_REPORT_DAILY rollup,不直接扫明细表、不重算公寓明细(表 4-10 边界、F6 要点 1、PR-10)。日切以平台 serverReceivedAt 为准,occurredAt 不参与。封账前置为「期内日报 DONE + 账务日对账无 DIFF」,否则 PF-7003、账务类指标 BLOCKED 且不参与排名。PL_REPORT_DAILY 一旦生成不可改,修正走次日重算 + revision_no+1,旧行标 REVISED(F6 要点 6) |
| CR-C37 | 现金充值是否"计为收入"及与余额的关系 | 计为期间收入:CASH_RECHARGE_INCOME = sum(amount) where type=RECHARGE(正数),不与消费净额抵销、不冲减补贴发放、不记入余额负债;与 GY_YKT_REMAINDER 余额快照是两个口径,禁止互相校验。rechargeChannel=OFFLINE_CASH(CR-C32)仅线下现金、不接线上支付 |
| CR-C38 | 补贴消费额如何取数,是否与 sum(amount) 冲突 |
取 PL_LEDGER_FLOW.allowance_amount(补列,承接 §14 #10 allowanceAmount),不取 sum(amount);一笔消费只一条 flow_id(CR-C31),补贴部分与现金部分分列,避免 sum(amount) 双计。补贴使用率 = ALLOWANCE_CONSUME_AMOUNT / ALLOWANCE_ISSUE_AMOUNT,分母 0 记 NO_DATA |
| CR-C39 | "评价情况 / 房间利用周转"的数据来源,是否新增表或 bizType |
不新增表、不新增 bizType、不新增上报接口:由公寓端在既有 #13 ARCHIVE 日归档摘要中按 payload 扩展分组计数 satisfaction{}(好 / 中 / 差 / 参评)与 roomOccupancy{}(可用房间夜 / 占用房间夜),平台只接计数不接明细、按批覆盖(表 3-13 摘要语义)。PL_REPORT_DAILY 补列承载。未上报则 data_status=NO_DATA 并在报表注明"数据未接入",不推断、不补零、不以 pl_staff_performance_daily 代填(Q-46);该表只作交叉校验,不替代评价计数 |
| CR-C40 | 公寓排名的名次规则、范围与快照 | 以 gyid 为单位,对五类 + COMPOSITE 分别排名;RANK() 跳号、同分同名次、tie_count 记并列;gyIds[] 由会话数据范围解析且必须在 SQL 层带范围(F6 要点 4、平台端/03 §5),空 / 越权 PF-7004;排名按 revision_no 存快照,查询不实时重算;NO_DATA 公寓不参与该指标排名并标注;报警 / 投诉类为逆向指标(越小越优,Q-49) |
| CR-C41 | 三端状态映射的唯一真源,以及统计能否回写业务状态 | 表 3-66 为唯一权威,各端分册只给本端视角投影并指向本节;禁止另立第二套映射或改写既有枚举(ryzt / finish_jc / reg_state / match_state / ledger_state / publish_state 等)。统计与排名结果不回写 gy_jcxx、apt_local_task、apt_person_face_reg、GY_YKT_REMAINDER、YKT_MEALS 等任何业务表;apt.duty.state 仍是业务终态唯一写入口,platform-ledger 仍是余额主账唯一写者,platform-report 是 pl_apt_stat_* 唯一写者 |
| CR-C42 | 边界不变项与新增表归属 | 跨端 20 个编号(1v2-draft、平台零回调、公寓本地库 59 张表、附录 B 图表索引、gyid 四级隔离、金额 decimal(12,2) / 比率 decimal(6,4) / 禁止浮点全部不变;统计接口 /platform/v1/admin/stat/** 属平台管理端,不计入跨端编号、不产生跨端副作用(表 4-10 §12 纪律①);新增 pl_apt_stat_period / pl_apt_stat_rank 2 张属平台库,按 §0 表 C-1 / C-2「平台库新增表另计」执行,平台库累计新增 3 + 2 = 5 张;导出复用 report-export 桶,不新增桶(平台端/07 §4.1) |
| CR-C36-a | 覆盖清单 | 表 3-1 A-01 / A-04 / A-13 / A-14、表 3-7 #9 / #10 / #11 / #12 / #13 / #24、表 3-12 bizType、表 3-21 枚举、docs/平台端/01 表 1-4 / 1-5、平台端/03 表 3-8 / 3-10 / 3-16、平台端/04 表 4-10、平台端/06 §7 / §8、平台端/09 PR-10 / P-07 均按本节理解或已就地补指针;不改动 20 个编号、方向与路径 |
表 3-65 四能力的三端业务规则 / 交互流程 / 权限控制 / 异常处理对照(权威表述仍以各专册为准)
| 能力 | 公寓端(执行与事实) | 应用端(人看与人工干预) | 平台端(真源与归集) | 共同权限控制 | 共同异常处理 |
|---|---|---|---|---|---|
| 平板叫乘 | 到 jcsj 生成 apt_tablet_task(WAITING) + 单调 dispatch_seq;平板 N-03 主动拉取、serverTime 校准、本地定时播放 → 刷脸签到 → N-04 TABLET_RESULT(resultId 幂等)→ apt.device.gateway 提交状态机命令 → apt.duty.state 条件更新 gy_jcxx → #9 / #8 / #13 上行 → /ws/duty tablet.result。平板链路不发 #24(#24 仅 SIP)。权威见 公寓端/05 §9 |
只读 tablet.result / state.changed;UNVERIFIED 标"未刷脸"并按 Q-22 触发复叫提示;值班员只发命令(duty:call:*),不直写 gy_jcxx / apt_tablet_*;断网结果本地缓存、恢复按 resultId 续传 |
platform-ingest 按 idempotencyKey 去重收 #9 TABLET_RESULT → PL_TASK_ACK / PL_RECEIVE_LOG;#8 回执作匹配输入;#13 归档;报表只从 PL_REPORT_DAILY 出数,不重算明细;PL_TASK.jcsj 只是基线、权威 jcsj 恒由公寓复算(CR-C06) |
设备凭据 + HMAC + ±5 min + nonce(/open/v1/**);duty:call:*(/duty/**);platform:report:list(平台只读);gyid 只从凭据 / 会话解析 |
重复 ACK 40916;UNVERIFIED / SKIPPED → 保持待确认 + 复叫;NO_ANSWER / FAILED → ryzt=2 + 复叫;迟到 / 重复 → applied_state=IGNORED;PL-VERSION-STALE / PL-IDEMPOTENT-REPLAY;抓拍帧 / 人脸原图 / 比对帧不出终端 |
| 人脸签到与注册 | N-34 REG_APPLY(APPLIED)→ N-36 值班员 CONFIRM(生效点)→ apt_master_person 入档 → 并行双路 4a #9 PERSON_REG 上传平台 / 4b FACE_ISSUE 下发设备;设备 N-30 拉增量;刷脸核验产出 faceVerifyState。权威见 公寓端/10 §4 |
N-35 待审列表、N-36 确认、N-37 驳回(duty:person:reg + 二次确认);人脸相关表一律只读,只写 duty_*;值班台无 apt_master_person 写权限 |
pl_person_reg_request 回同步回执 ACCEPTED / REJECTED(regVerdict),不做注册准入审批、不决定公寓侧生效;媒体本体落 person-photo 桶、平台库只存引用与校验和;人员主数据人脸按 CR-C24 允许跨端,业务抓拍 / 签到现场图 / 录音不出公寓 |
apt:face:*(公寓管理端);duty:person:reg(值班台);设备按 gy_sb.face_scope_* 隔离;平台对象存储短期签名 ≤ 10 min |
40914 未确认禁止匹配 / 下发;40917~40924、50303 媒体与注册态;40927 缓存过期、40930 核验不符;平台 REJECTED(DUPLICATE_WORK_NO) 不回滚本地注册与已下发设备(Q-35),只告警 + 待办 |
| 消费 | N-48 拉食谱 → N-49 查双额度 → N-50 提交 → "补贴优先、现金补足"双额度 CAS 扣减且一条 CONSUME 流水 → #10 LEDGER_OFFLINE(allowanceAmount / cashAmount 拆分)→ 平台归日落人员账户 → #16 日对账置 RECONCILED。权威见 公寓端/12 §4 / §7 |
值班台只读账户额度(N-56)与流水(N-51),无消费提交权限;消费受理在设备侧;gy_ykt_* / apt_ledger_offline 一律只读;充值核对另见 §14 F-M |
platform-ingest 去重 → platform-ledger 唯一写入口更新 GY_YKT_REMAINDER / PL_LEDGER_FLOW;按 serverReceivedAt 归日、UK (gyid,type,flow_id) 去重;统计只读 PL_LEDGER_FLOW 取三类金额(CR-C37 / C38) |
apt:ledger:list;duty:ledger:*(仅核对 / 查询);platform:ledger:* / platform:stat:*(平台只读统计);设备与前端零余额表写权限 |
合计不足全额拒绝 40933 / PF-5001、不部分扣款;CAS 冲突 40935 重试一次后转人工;断网超 offlineQuota 40913;重复 deviceEventId 返回原 flowId;PF-5002 业务重复 vs PL-IDEMPOTENT-REPLAY 幂等重放;日 sum(amount) 不等 PF-5003 阻断调账,只走 POST /adjustments 冲正 |
| 菜品管理 | #4 recipes[] 增量下行 → N-48 终端按 version 拉取并本地缓存 → 点击查看菜品、加入选择菜单(确认前不落库)→ 确认后按 CF-01 生成一条消费流水;N-58 远程点菜仅预留。权威见 公寓端/12 §6 |
公寓管理员经 N-57 发布 / 撤回(apt:catering:recipe:* + 二次确认);值班台只读食谱与选单;只提交代理命令,不写 YKT_MEALS / 本地业务表 |
platform.catering 承载 YKT_MEALS 补列(§14)与 /recipes 资源;publish_state DRAFT→PUBLISHED→EXPIRED/REVOKED;#4 下行由公寓主动拉;image_ref 只作引用占位、不传图片本体、不新增对象存储桶 |
apt:catering:recipe:*(公寓管理员);平台餐饮管理端权限;消费终端设备凭据;前后端 v-hasPermi / @PreAuthorize 同码并登记 sys_menu.perms |
食谱失效 / 改价 40936 + 终端重拉;菜品下架 PF-6001;区间重叠拒绝发布;改价生成新 recipe_version 不改已发布版;远程点菜误调用 40940 FEATURE_DISABLED(features.remoteOrdering=false);YKT_MEALS_ORDERING / ORDERS_MX 本期不写入 |
表 3-66 三端状态映射与数据同步机制(唯一权威表)
| 能力 / 环节 | 公寓端状态与字段 | 同步载体(既有编号) | 平台端状态与落表 | 应用端可见 / 可写 | 终态与回退 |
|---|---|---|---|---|---|
| 平板叫乘·派发 | apt_tablet_task.pull_state WAITING→PULLED→DONE/EXPIRED;dispatch_seq 单调 |
设备 N-03 主动拉(端内,不计跨端) | 不感知(平台不生成任务行) | 只读任务视图 | EXPIRED 不重派;平板离线回落 SIP(CR-C23) |
| 平板叫乘·结果 | faceVerifyState VERIFIED/UNVERIFIED/SKIPPED;callResultType ANSWERED/NO_ANSWER/FAILED/CANCELLED;applied_state PENDING/APPLIED/IGNORED;gy_jcxx.ryzt / finish_jc 经 apt.duty.state 条件更新 |
#9 TABLET_RESULT(resultId)、#8 TASK_ACK、#13 ARCHIVE;/ws/duty tablet.result(端内 WS) |
PL_RECEIVE_LOG、PL_TASK_ACK、PL_REPORT_DAILY.call_count;PL_TASK.status PLANNED→DISPATCHED→ACKED→EXECUTING→FINISHED/CANCELLED |
只读 tablet.result / state.changed;只提交复叫命令 |
VERIFIED→ANSWERED→ryzt=3 / finish_jc='1'(终态不回写);UNVERIFIED/SKIPPED 保持待确认 + 复叫;NO_ANSWER/FAILED→ryzt=2;迟到/重复 IGNORED;存量 ryzt 数字码不跨端 |
| 人脸注册·本地生效 | reg_state APPLIED→CONFIRMED/REJECTED/ARCHIVED;person_category TRANSIENT/LONG_TERM |
端内 N-34 / N-36 / N-37 | 不感知(注册生效点在公寓) | N-35 待审、N-36 确认、N-37 驳回(只提交命令) | CONFIRMED 为生效点;REJECTED/ARCHIVED 终态;平台回执不决定本地生效 |
| 人脸注册·双路同步 | upload_state / dispatch_state 各自 PENDING→SENT/ISSUED→ACKED,失败 FAILED→DEAD;face_sync_state PENDING/SYNCED/FAILED/STALE |
4a #9 PERSON_REG(+ person-photo 短期签名直传);4b 端内 FACE_ISSUE / FACE_ERASE / FACE_FULL_SYNC |
pl_person_reg_request、regVerdict PENDING→ACCEPTED/REJECTED(同步回执)、platform_version(经 #2 下拉取回) |
只读注册态 / 同步态 / 设备缓存台账 | 两路解耦并行、各自幂等、互不阻塞;REJECTED 只告警 + 待办,不回滚本地注册与已下发设备(Q-35);擦除超时 50303 升级 FACE_FULL_SYNC |
| 入住匹配(衔接项) | match_state PENDING/MATCHED/UNMATCHED/LOCKED/REJECTED;checkin_state SUBMITTED→…→CHECKED_IN;sync_state 五值 |
#9 CHECKIN、#6 计划、#8 回执(匹配输入)、#7 响应体 matchVerdict[](结论唯一载体) |
GY_SYN_JCXX、PL_TASK / PL_TASK_CHANGE(op=UPSERT)、PL_REPORT_DAILY.stay_count |
只读审核状态与匹配结论;N-44 / N-45 只提交命令 | UNMATCHED / LOCKED 保留上报要素不清空;LOCAL_ONLY 属 offlineScope 不是匹配状态;jcsj 恒由公寓复算 |
| 账务·消费流水 | ledger_state SUBMITTED→DEDUCTED→REPORTED→RECONCILED/REJECTED/REVERSED;offline_scope LOCAL_ONLY→SYNCED→RECONCILED;reportState PENDING/SENT/FAILED/DEAD/RETRIED |
#10 LEDGER_OFFLINE(bizId=flowId、idempotencyKey)、#16 日对账(公寓主动调用,P-02) |
PL_LEDGER_FLOW.reconcile_state RECEIVED→RECONCILED/DIFF;PL_RECONCILE_BATCH.state RUNNING→MATCHED/DIFF_FOUND/CLOSED;GY_YKT_REMAINDER(platform-ledger 唯一写) |
只读额度 / 流水 / 对账状态 | DIFF + PF-5003 阻断调账;冲正只走 POST /adjustments;断网 outbox PENDING,恢复复用原幂等键;RECONCILED 后不得直接改余额 |
| 账务·充值申请 | request_state PENDING→COMPLETED/CANCELLED(申请表不存金额);rechargeChannel=OFFLINE_CASH |
端内 N-52 / N-54 / N-55;上行同 #10 RECHARGE |
PL_LEDGER_FLOW(type=RECHARGE) → 统计 CASH_RECHARGE_INCOME |
N-53 列表、N-54 确认、N-55 作废(duty:ledger:confirm + 二次确认) |
终态不可回写(40939);金额不符走 CANCELLED 重新申请;无支付订单与回调 |
| 食谱 | publish_state DRAFT→PUBLISHED→EXPIRED/REVOKED(平台库 YKT_MEALS 补列);终端选单为本地态、确认前不落库 |
#4 recipes[] + recipeWatermark(公寓 GET 拉取);N-48 端内 |
YKT_MEALS(platform.catering 唯一写)、#4 只维护当前有效版本 |
只读食谱 / 选单;N-57 只提交代理命令 | 改价 / 下架生成新 recipe_version,不改已发布版;远程点菜 features.remoteOrdering=false 恒 40940 |
| 统计·日报与周期 | 不感知统计(业务状态一律不变) | 无跨端交互(统计不反向下发) | PL_REPORT_DAILY(冻结不可改)→ pl_apt_stat_period.state DRAFT→FINAL→REVISED + revision_no;pl_apt_stat_rank 快照;data_status OK/NO_DATA/BLOCKED |
只读 FINAL / REVISED 快照与榜单(Q-50) |
未封账 PF-7003;DIFF → BLOCKED 不参与排名;缺报 NO_DATA 不推断不补零;修正走次日重算 + 新 revision_no,不原地改 FINAL |
同步机制总口径(沿用 §3 / §4,不新造):下行一律"公寓主动 GET 拉"(#1~#7 / #23),上行一律"公寓 POST 推"(#8~#14 / #24),平台零回调;
idempotencyKey = hash(gyId + bizType + bizId + bizVersion),UK(gyid, idempotency_key);三时间戳occurredAt(业务时间轴)/receivedAt/serverReceivedAt(归日与账务日切以此为准);outbox 是队列、apt_report_history是终态流水,两者不互换(CR-C10);续报复用原幂等键(F-E);对账三维count(按biz_id去重,R-C3)/sum(amount)/max(watermark);摘要类 #11~#13 / #24 按批覆盖、无版本语义(表 3-13)。统计链路不产生任何新的跨端调用。
表 3-67 新增流程 F-O / F-P / F-Q
| 步 | 流程 | 主体 | 动作 | 落表 / 编号 | 失败 / 补偿 |
|---|---|---|---|---|---|
| 1 | F-O 三端状态对齐 | 三端领域服务 | 四能力事件只提交命令:平板结果 → apt.duty.state;注册确认 → apt.face.registry + apt-master-client 事务;消费 → apt.ledger.local;食谱 → platform.catering。应用端 / 平台端只读 + 归集,不回写公寓业务状态 |
表 3-66 全量映射 | 越权 40301 / PF-7004;映射冲突以表 3-66 为准,不另立第二真源(CR-C41) |
| 2 | F-O 上行归集 | apt-report → platform-ingest |
#9 / #10 / #12 / #13 按既有 bizType 上行;#13 摘要补 satisfaction{} / roomOccupancy{} 分组计数(CR-C39) |
PL_RECEIVE_LOG、PL_REPORT_DAILY |
断网 outbox 续报;PL-IDEMPOTENT-REPLAY 视为成功;缺报标 NO_DATA |
| 3 | F-P 日报与封账 | platform-worker(单活)→ platform-report |
每日日切生成 PL_REPORT_DAILY;platform-ledger 跑日对账三维比对 |
PL_JOB_*、PL_RECONCILE_BATCH |
DIFF + PF-5003 阻断调账;日报冻结不可改;超时 > 10 min 拆批 |
| 4 | F-P 周期汇总 | platform-report |
月 / 季 / 年由日报 + PL_LEDGER_FLOW + PL_RECEIVE_LOG rollup 五类指标 → DRAFT → FINAL |
pl_apt_stat_period |
未封账 PF-7003;缺报 NO_DATA;账务 DIFF → BLOCKED |
| 5 | F-P 修订 | platform-report |
次日重算 / 人工修订生成 revision_no+1,旧行标 REVISED |
两张 pl_apt_stat_* |
版本冲突 PF-7005;不原地改 FINAL、不删历史 |
| 6 | F-Q 排名与输出 | platform-report → 管理端 / 应用端 |
RANK() 生成五类 + 综合排名快照 → S-01 / S-02 查询 → S-06 异步导出 XLSX / PDF |
pl_apt_stat_rank、report-export 桶 |
PF-7001 不输出半成品、PF-7002 导出失败;gyIds[] 越权 PF-7004 |
表 3-68 施工单追加(R-114~R-125,本轮已直接修改)
| 编号 | 文件 | 章节 | 修订内容 |
|---|---|---|---|
| R-114 | docs/平台端/10-公寓统计分析与排名报表.md |
全文 | 新建统计专册(v1.0):五类指标、月/季/年周期、分类与综合排名、S-01 |
| R-115 | docs/设计变更/03(本文) |
表 0-2 / 0-3、新增 §15 | v1.6 补遗登记;表 3-63 变更点与影响范围、CR-C36 |
| R-116 | docs/应用端/01、02、06、09、README.md |
§0 / 权限点 / 部署 / 契约 / 索引 | 四项能力的业务规则与边界、平板结果与异常展示落点、零命中文件补边界指针、§11 补遗 |
| R-117 | docs/应用端/03-数据设计.md |
§0 表 C-3 | 本端视角三端状态映射表(字段 → 对端状态 → 可写性),指向 CR-02 §15 表 3-66 |
| R-118 | docs/应用端/04-接口设计.md |
§0 表 C-3 / C-4 | 四能力接口字段与 faceVerifyState 全枚举;登记 40917 |
| R-119 | docs/应用端/05-关键流程.md |
§0 表 C-1、新增 §10 | F-A / F-J / F-L 流程行与 F-B 展开;§10 三端一致性作业视图(交互时序、权限、异常、状态映射指针) |
| R-120 | docs/应用端/07、08 |
表 7-6 / §0 | 验收 15 |
| R-121 | docs/平台端/01、02、08、README.md |
§0 / §2 / §1 / §4 / 索引 | 四能力职责与统计能力归属;worker 定时任务清单(四能力上行 + 统计生成);单活与拆批约束;§11 补遗 |
| R-122 | docs/平台端/03-数据设计.md |
§0 补遗段 / 表 C-3 | 2 张 pl_apt_stat_* 新表、PL_REPORT_DAILY / PL_LEDGER_FLOW 补列,平台库新增表 3 → 5 张口径 |
| R-123 | docs/平台端/04、05 |
§9 表 4-13 / §0 表 C-3 | S-01S-07 与 PF-7003PF-7005;平台端视角三端状态映射与 #13 摘要扩展字段 |
| R-124 | docs/平台端/06、07、09 |
§0 表 C-1 / §4.1 / 编号纪律段 | F-A / F-B / F-J / F-L / F-M / F-N / F-O~F-Q 升为流程正式行 + 异常分支;对象存储不新增桶;PR-10 / P-07 承接统计口径风险 |
| R-125 | docs/公寓端/00~12、README.md、docs/10-架构优化方案-三端拆分.md、三端 README.md、docs/README.md |
索引 / 指针 / 表 0-2 / §3 指针 / 文档清单 | 收录 平台端/10 与 CR-02 §15;四能力权威专册 10 / 11 / 12 补 §15 关联指针;01 / 02 / 03 / 06 补齐边界 / 模块 / 数据 / 部署口径;#13 摘要扩展字段(公寓端/09 表 C-9、平台端/05 表 C-3);上位版本 v2.0;三端一致性指针、Q-46 |
表 3-69 决策点与验收追加
| 项 | 内容 |
|---|---|
| Q-46~Q-50 | 见 docs/平台端/10 表 10-21:评价 / 房间周转数据接入方式(默认 #13 摘要 payload 扩展)、周期时区与季度划分、补列与 2 张新表 DDL 冻结时点、综合排名权重与逆向指标、统计报表向应用端开放的粒度(默认只读到公寓级) |
| 验收 24 | 三端一致性:四能力在应用端 / 平台端均有业务规则、交互流程、权限控制与异常处理表述;表 3-65 / 3-66 与两端本端视角映射表逐项对应;无第二套状态枚举;统计结果不回写任何业务状态;apt.duty.state / platform-ledger / platform-report 三个单写入口不变 |
| 验收 25 | 统计能力:五类指标公式与数据源齐备(现金充值计收入、补贴消费取 allowance_amount);月 / 季 / 年报表可生成且只由日报 rollup;按 gyid 分类排名 + 综合排名、RANK() 跳号、NO_DATA 不参与;封账 PF-7003 与 DIFF 阻断生效;修正走 revision_no+1 |
| 验收 26 | 边界不破:跨端 20 编号、v2-draft、平台零回调、公寓 59 张表、附录 B 图表索引、不新增 bizType、抓拍 / 录音不出公寓、gyid SQL 层隔离均不变;平台库新增 2 张另计(累计 5 张);管理接口 /platform/v1/admin/stat/** 不产生跨端副作用;DDL 待阶段二契约冻结 |