日期:2026-08-27
状态:代码落地完成,等待真机与服务端环境验收
本日志记录本次对话从需求定稿到代码落地过程中必要的中间产物。每个记录项都包含产物、原因、证据和后续用途,避免只保留最终代码而无法解释关键决策。
docs/2026-08-27-consumption-product-requirements.md/.html。prototypes/2026-08-27-consumption-flow/final.html、scheme-b-ui-spec.md/.html 及6张状态证据图。docs/2026-08-27-interface-c-contract-test-matrix.md/.html。2026-08-27-consumption-code-implementation-design.md/.html。bash gradlew :app:testDebugUnitTest --no-daemon,结果 BUILD SUCCESSFUL;23个测试类、80个测试、0 failure、0 error、0 skipped。./gradlew 因文件没有执行权限而未启动;改用 bash gradlew,未修改文件权限。ConsumptionFlowStateMachine.java、ConsumptionFlowStateMachineTest.java,以及更新后的 ConsumptionOrderCoordinator 和测试。READING_ZERO_AMOUNT_CARD 只读状态,正金额进入三阶段扣款;移盘只更新在位状态;终态且餐盘、卡片均已移走后才允许复位。订单协调器在会话锁定期间忽略重复码和新码,显式完成后才接受下一张餐盘。completeSession() 尚不存在而产生33个编译错误,证明新规则先由测试表达。BUILD SUCCESSFUL in 13s。BUILD SUCCESSFUL in 10s;当前88个测试、0 failure、0 error、0 skipped。ConsumptionRecordRepository、SQLiteConsumptionRecordRepository、ConsumptionTransactionSnapshotJson。consumption_records.db 以订单号为主键,关联餐盘码、订单金额、消费前读卡、扣款、消费后读卡、交易状态、错误码、接口 C 原始请求、上传状态、次数及下次重试时间。ConsumptionReportSyncRunner、ConsumptionReportSyncScheduler、ConsumptionReportSyncReceiver、ConsumptionReportSyncWorker,以及应用启动/网络恢复接入。UPLOADED,不再入选。ConsumptionActivity、activity_consumption.xml、方案 B 色板/尺寸/样式/面板资源及 please_place_card.wav。ConsumptionCardTransactionExecutor 回调;前后卡不一致、金额不完整、部分扣款或后读卡失败均保存为异常并禁止自动重扣。JAVA_HOME=.../corretto-1.8.0_482/Contents/Home bash gradlew :app:testDebugUnitTest :app:assembleDebug --no-daemon --console=plain。BUILD SUCCESSFUL in 17s;84个测试、0 failure、0 error、0 skipped;app/build/outputs/apk/debug/app-debug.apk 约61 MB。git diff --check 通过;消费主流程不再引用临时 192.168.* 地址、模拟订单、支付按钮或 please_swipe_card。change_records/2026-08-27-consumption-scheme-b-code-implementation.md/.html。docs/2026-08-28-consumption-business-flow-logging-plan.md/.html。ConsumptionFlowLog JSONL 日志类型,以 flowId 和 orderNo 贯穿放盘、订单、前读卡、扣款、后读卡、落库、接口 C、补传和复位;协议原文与 HTTP 原文仍由现有日志保存。customerID、cardNO、cardASN、余额、交易次数和扣款解析字段纳入本地业务日志。Access-Token、完整 UID、原始 APDU 和完整网络报文仍不进入业务流水;交易事实仍以 consumption_records.db 为准。2026-08-29 更新:该临时地址方案已按用户要求撤销,消费前台、后台补传和人员同步恢复使用基础设置中的全局 API 地址;历史实施证据保留用于追溯。
change_records/2026-08-28-consumption-temporary-network-address.md/.html、ConsumptionNetworkProvider 及其单元测试。192.168.10.38;必须同时记录作用范围和恢复方式,避免误改全局地址或忘记补传任务的目标服务端。http://192.168.10.38/;全局 NetworkManager 不变。当前消费页未实际发起 syncPersons,未新增额外同步行为。BUILD SUCCESSFUL in 16s;全量单测及 Debug 构建 BUILD SUCCESSFUL in 46s;86个测试、0 failure、0 error、0 skipped;git diff --check 通过。change_records/2026-08-28-consumption-flow-log-readability-simplification.md/.html、ConsumptionFlowEventNames 及消费业务日志调用点调整。事件 值仍为英文,不便于现场人员快速定位。BUILD SUCCESSFUL in 43s;95个测试、0 failure、0 error、0 skipped;git diff --check 通过;Debug APK 约61 MB。change_records/2026-08-28-consumption-order-business-message-display.md/.html、接口 B 空数组适配、业务码保留测试和订单失败页文案调整。code=1/message=未找到餐盘待支付订单/data=[],页面却显示“未能获取订单 / 缺少订单数据”,业务语义与服务端结果不一致。code=1 页面只显示“未找到餐盘对应的待支付订单”,其他技术异常仍保留通用兜底。BUILD SUCCESSFUL in 13s;98个测试、0 failure、0 error、0 skipped;git diff --check 通过;Debug APK 约61 MB。018004,确认页面文案、日志业务码及 trace_id 一致。change_records/2026-08-28-consumption-three-stage-protocol-result-logging.md/.html、ConsumptionStageProtocolResultJson、消费页三阶段日志接入和对应单元测试。明细.协议解析结果 中保存原生 JSON 对象,结构固定为 code/message/data。前后读卡字段与用户确认示例一致;扣款阶段保存请求/完成金额和每个钱包的解析交易明细。原始 APDU 不重复写入消费流水,仍由 ReaderLog 负责。BUILD SUCCESSFUL in 54s;100个测试、0 failure、0 error、0 skipped;git diff --check 通过;当前 Debug APK 64,329,946 字节。协议解析结果 与读卡器现场结果;失败路径同步检查 code/message/errorCode。change_records/2026-08-28-consumption-zero-amount-card-read-report.md/.html 及对应代码/测试。:app:testDebugUnitTest :app:assembleDebug 为 BUILD SUCCESSFUL in 21s,31 个测试类、105 个测试、0 failure、0 error、0 skipped,Debug APK 为 64,336,640 字节。docs/2026-08-28-consumption-ui-simplification-design.md/.html、实施计划、独立变更记录及对应 Android 代码/资源/测试。ConsumptionUiStateMapperTest 与 ConsumptionCardTransactionExecutorTest 定向测试通过;:app:assembleDebug 为 BUILD SUCCESSFUL in 54s;XML 语法和相关文件 git diff --check 通过。按用户要求未执行全量回归、真机自动化或截图对比。artifacts/rollback/2026-08-28-consumption-ui-before-change.tar.gz,SHA-256 1bcc13616f874ffde492ef57608c5dadd16f72c52073416d42a2cee145b90cfa;不使用 Git reset、checkout、stash 或提交实现回滚。| 编号 | 阶段 | 必须记录的内容 | 记录原因 |
|---|---|---|---|
| R-06 | 本地交易记录 | 已完成 | 表结构、三阶段数据和恢复规则已记录 |
| R-07 | 接口 C 补传 | 已完成 | 批次、定时、并发和前后台错峰已记录 |
| R-08 | 三页面落地 | 已完成 | 方案 B、状态、语音和安全校验已记录 |
| R-09 | 完整验证 | 已完成 | 单测、构建、APK和静态检查已记录 |
| R-10 | 真机待验 | 待现场执行 | 待验原因和场景已记录,不冒充已验 |
| R-11 | 最终变更记录 | 已完成 | 变更、替代关系和边界已归档 |
| R-12 | 全链路日志规划 | 已完成规划 | 事件、字段、存储、脱敏、查看及实施任务已归档 |
| R-13 | 消费临时服务地址 | 已撤销 | 历史实施证据保留;当前统一使用基础设置 API 地址 |
| R-14 | 消费流水日志中文化与精简 | 已完成代码落地 | 中文事件、仅流程结束后空行、精简口径和异常保留边界已归档 |
| R-15 | 接口 B 无待支付订单提示 | 已完成代码落地 | 空数组兼容、业务码保留、页面文案和回归测试已归档 |
| R-16 | 三阶段协议解析结果日志 | 已完成代码落地 | 三阶段结构化原始解析数据、敏感字段边界和验证证据已归档 |
| R-17 | 零元单读卡核验与携卡反馈 | 已完成代码落地与本地验证,待真机验收 | 单次只读、无扣款、携卡反馈、失败重试和补传边界已归档 |
| R-18 | 三步页面简化与持卡人余额展示 | 已完成代码落地与轻量验证,待真机视觉验收 | 展示状态归并、人员余额、统一配图和精确回滚快照已归档 |