菜单消费账单核对与并行支付实施计划

Goal:将菜单消费支付入口改为主屏账单核对弹框,并按设备能力实现卡码并行监听及现有人脸支付入口。

Architecture:新增菜单账单展示模型、一次性支付会话门禁和 MenuBillCheckPop。弹框按设备类型复用现有硬件能力;MainActivity 仍负责校验与支付请求,客屏不扩展。

Tech Stack:Android Java、DialogFragment、ListView、现有串口驱动、JUnit 4、Gradle。

文件结构

Task 1:建立可测试的账单模型和支付会话门禁

  1. 编写失败测试,覆盖相同菜品汇总、不同菜品独立、首路获胜和关闭后拒绝。
  2. 运行 ./gradlew :app:testDebugUnitTest --tests 'com.cpt.cusumption.payment.*',确认因类不存在而失败。
  3. 使用 LinkedHashMapBigDecimalAtomicBoolean 实现最小代码及责任注释。
  4. 再次运行测试,要求 0 failures。

Task 2:实现主屏菜单账单核对弹框

  1. 新增账单布局、行布局、字符串和尺寸资源,避免在新增代码中重复硬编码。
  2. 定义卡号、付款码、人脸、外部相机和取消回调。
  3. 设备 4 使用键盘式卡号与伟邦扫码;设备 5 使用伟邦卡码串口;设备 7 使用优卡特卡码串口;设备 3 使用米果扫码;设备 1、2 回调现有相机扫码。
  4. 所有入口经过一次性会话门禁,成功后先释放全部资源再回调。
  5. 运行 ./gradlew :app:compileDebugJavaWithJavac,要求构建成功。

Task 3:接入 MainActivity 并复用现有支付链路

  1. 保留购物车为空判断,删除 100 元限制,直接打开账单核对弹框。
  2. 刷卡继续本地人员校验后调用现有支付;扫码清洗前缀后调用现有支付;人脸打开现有识别弹框;外部相机继续由 onActivityResult() 处理。
  3. 不调用客屏账单或支付选择界面,保留现有支付结果展示。
  4. 只清理 MainActivity 已废弃入口,不删除其他页面仍使用的旧支付弹框。
  5. 运行单元测试和 Java 编译。

Task 4:需求复核、编码检查和变更记录

  1. 静态确认 100 元预警已移除、主屏边界正确、门禁和人脸链路符合规格。
  2. 检查硬编码、责任注释、UTF-8 无 BOM 和简体中文。
  3. 运行 ./gradlew :app:testDebugUnitTest :app:assembleDebug,要求构建成功且测试零失败。
  4. 生成同名 Markdown/HTML 变更记录,写明文件、设备范围和验证结果。
  5. 运行 git status --shortgit diff --check;未经授权不暂存、不提交、不推送。