绑盘与消费独立运行模式设计

文档信息

字段内容
Use Case IDUC-RUNMODE-001
需求名称管理员配置设备固定运行模式
所属项目ZhctTrayBindingMachine
版本v0.1
状态Review
优先级P0
DoRREADY(P0 业务规则已由用户确认)
日期2026-08-29

1. 背景与结论

当前 StartActivity 实际承担绑盘模式加载:申请相机等权限、检查基础配置、激活人脸 SDK、加载模型、初始化人脸库并同步绑盘人员数据。消费功能则在 ConsumptionActivity 内初始化扫码、订单、一卡通读卡和消费补传等能力。

只增加“是否进入消费页面”开关会把页面导航和设备运行模式混在一起,可能直接跳过某一模式的前置加载。最终方案是引入设备级持久运行模式,并为绑盘、消费建立相互独立的加载链路。

设备配置完成后运行模式相对固定。应用启动、开机自启和崩溃重启均自动进入已配置模式,不再展示功能选择页。绑盘页和消费页均隐藏返回按钮,系统返回键和返回手势也不执行返回。

2. 目标与范围

2.1 目标

2.2 In Scope

2.3 Out of Scope

3. 参与者与边界

参与者职责权限/边界入口
管理员配置设备运行模式通过现有管理员密码后才可进入设置页标题栏 Logo 长按
普通操作员使用绑盘或消费业务不可切换模式,不可退出到功能选择页业务首页
Android 系统启动、开机自启、崩溃恢复只读取已持久化模式,不自行变更Launcher/广播/PendingIntent
模式分发器解析模式并选择加载链路不执行业务初始化,不持有硬件资源ModeDispatchActivity

4. 核心数据与业务规则

4.1 数据对象

新增 DeviceRunMode 枚举:BINDING 为默认绑盘模式,CONSUMPTION 为消费模式。运行模式通过独立 MMKV 键持久化,由枚举集中解析,禁止在页面中散落数字或字符串判断。

4.2 业务规则

5. 架构设计

5.1 启动路由

应用启动 / 开机自启 / 崩溃重启
              |
              v
     ModeDispatchActivity
        |             |
        | BINDING     | CONSUMPTION
        v             v
  StartActivity   ConsumptionStartActivity
        |             |
        v             v
   HomeActivity   ConsumptionActivity

ModeDispatchActivity 是无业务界面的轻量分发入口。Manifest Launcher、开机广播和崩溃恢复 PendingIntent 最终都进入该入口。

5.2 组件职责

组件职责明确不负责
DeviceRunMode定义模式及稳定持久化值MMKV 读写、页面跳转
DeviceRunModeStore读取、保存、兜底运行模式页面展示、业务初始化
ModeTargetResolver将模式解析为加载目标,提供纯逻辑测试点调用 Android startActivity
ModeDispatchActivity执行冷启动分发业务校验、人员同步、硬件初始化
StartActivity保留现有绑盘加载职责消费人员和一卡通初始化
ConsumptionStartActivity公共配置校验、启动非阻塞补传调度并立即进入消费页一卡通连接、人员同步、USB 读卡交易、订单消费流程
SettingModeRouter设置页校验通过后解析加载目标保存设置项、执行初始化

5.3 初始化状态

绑盘和消费分别维护初始化状态。模式分发不根据旧的统一完成标记跳过加载页;加载页只可依据本模式状态决定完整加载、增量检查或快速通过。

6. 分模式加载与校验

6.1 绑盘模式

  1. 检查设备型号和绑盘所需权限。
  2. 检查公共 API、配对码、终端编号。
  3. 检查至少选择一种绑定方式。
  4. 启用人脸时检查激活码并初始化模型、人脸库。
  5. 准备绑盘人员数据。
  6. 进入 HomeActivity

6.2 消费模式

  1. 检查公共 API、配对码、终端编号。
  2. 启动只处理本地已有消费结果的非阻塞补传调度。
  3. 立即进入 ConsumptionActivity,由业务页按实际需要连接一卡通并打开餐盘读取和 USB 读卡。

消费模式不校验绑定方式、人脸激活、一卡通地址或 AppID,不加载人脸模型,也不执行人员同步。一卡通连接失败不得阻止进入消费页。

6.3 消费公共配置失败

7. 设置页设计

基础设置新增“设备运行模式”,点击后复用现有单选弹窗。设置页的页面按钮、物理返回键和系统返回手势统一调用同一返回方法:读取模式、执行模式专属校验、失败则停留并提示、成功则进入对应加载页并结束设置页。

现有按来源 Activity 和统一初始化标记决定返回目标的逻辑退出正常链路。

8. 页面返回与管理员入口

9. AI 可执行 Use Case

9.1 触发、前置与后置

9.2 主流程

步骤角色动作/系统响应状态变化AC
M1Android 系统启动统一模式分发入口应用进入分发中AC-001
M2模式分发器读取并解析持久运行模式得到唯一模式AC-002
M3模式分发器启动对应加载页并结束自身进入模式加载中AC-003
M4模式加载页执行本模式校验和初始化模式就绪或可恢复失败AC-004
M5模式加载页就绪后启动业务页并结束自身进入稳定业务运行AC-005
M6普通操作员尝试标题栏或系统返回页面保持不变AC-006

9.3 分支流程

分支条件系统行为结果AC
A1@M2没有模式值使用默认绑盘模式进入绑盘加载AC-010
A2@M2已配置消费模式选择消费加载目标进入消费加载AC-011
A3@M4消费公共配置完整启动非阻塞补传调度立即进入消费页AC-012
A4@M1从设置页返回按所选模式校验并加载新模式立即生效AC-013

9.4 异常与恢复流程

异常/恢复条件系统处理恢复方式AC
E1@M2 / R1@E1模式值未知记录告警并回退绑盘管理员重新选择AC-020
E2@M4 / R2@E2模式配置不完整不进入业务页并提示进入设置修正AC-021

10. 验收标准

ACGivenWhenThen证据
AC-001任一冷启动入口应用启动首个业务路由经过模式分发器Manifest/Intent 测试
AC-002已保存合法模式分发器解析返回唯一对应目标单元测试
AC-003已解析模式执行分发只启动对应加载页且分发页结束Activity 测试/日志
AC-004进入任一加载页执行初始化只执行本模式任务单元/集成测试与日志
AC-005当前模式准备就绪加载完成进入对应业务页且加载页结束Activity 测试/人工验证
AC-006位于任一业务页触发任意返回页面不跳转且无返回按钮UI/真机验证
AC-010无模式配置启动应用进入绑盘加载单元测试
AC-011模式为消费启动应用进入消费加载单元测试
AC-012公共配置完整且一卡通不可连接执行消费加载不连接一卡通并立即进入消费页单元/静态检查
AC-013设置选择模式且配置有效点击返回进入对应模式加载页Activity 测试
AC-020模式值未知启动应用告警并进入绑盘加载单元测试
AC-021模式配置缺失返回或加载留在设置/加载页并显示具体错误单元/UI 测试

11. 测试矩阵

Test ID层级覆盖对象预期建议套件
UT-RUNMODE-001单元默认、合法、异常模式默认及异常回退绑盘DeviceRunModeStoreTest
UT-RUNMODE-002单元模式到加载目标唯一正确映射ModeTargetResolverTest
UT-RUNMODE-003单元分模式配置校验消费不受绑定/人脸阻塞ModeConfigValidatorTest
UT-RUNMODE-004单元设置页返回目标只由当前模式决定SettingModeRouterTest
UT-RUNMODE-005单元消费配置边界一卡通和人脸状态均不阻塞消费启动ModeConfigurationPolicyTest
UI-RUNMODE-001UI基础设置模式选择正确展示、保存、回显Android UI/人工证据
UI-RUNMODE-002UI两业务页返回无按钮且无跳转Android UI/真机证据
E2E-RUNMODE-001E2E新安装默认模式启动至绑盘页真机流程
E2E-RUNMODE-002E2E切换消费并重启启动至消费页真机流程
E2E-RUNMODE-003E2E开机/崩溃恢复保持已配置模式设备日志与页面证据

12. 非功能、安全与兼容

13. 风险与控制

风险影响控制措施
冷启动入口遗漏恢复场景仍进入绑盘检查 Manifest、开机广播和崩溃 PendingIntent
设置页仍按来源路由配置与页面不一致单一 SettingModeRouter
消费加载提前打开读卡器USB 重复占用禁止创建读卡管理器
消费仍检查人脸无人脸设备无法退出设置分模式校验反向测试
业务页能回功能选择固定模式被绕开XML 隐藏和系统返回双重拦截
当前工作区存在大量未提交改动修改重叠、回归定位困难实施时最小差异,编辑前重读现场文件

14. 待确认项与设计结论