人员拉取独立日志与分段耗时 Implementation Plan
目标:新增 人员拉取_yyyyMMdd.txt 独立日志,并在一卡通同步弹框中分别展示一卡通拉取、业务服务器同步和可选本地保存的状态、起止时间与耗时。
架构:协调器提供准确阶段边界,控制器维护状态、触发来源、syncId 和统一日志;独立日志复用 LocalFileRecorder,弹框只渲染状态。
技术栈:Android Java、XML、MMKV/Gson、JUnit 4、Gradle 5.1.1、AGP 3.4.1、JDK 8。项目不自动执行 Git 暂存或提交。
Task 1:三段状态与成功数量
- 先扩展状态编解码测试,覆盖 source/business/local-save 的状态、起止时间、耗时和旧 JSON。
- 状态新增
StepResult 及三段字段;保留整轮字段兼容。
- 业务结果聚合
unchanged,成功数统一为 total - failed。
- 使用 JDK 8 运行状态和业务服务测试,预期 0 failures。
Task 2:协调器阶段边界
- 先测试 source completed、upload started/completed、local policy/start/success/failure 的回调顺序。
- 本地保存开关在单轮开始时冻结;关闭或业务失败时不执行保存。
- 保存失败继续报告阶段失败,但不反向否定业务同步。
- 运行协调器测试验证成功、前置失败、关闭和保存失败路径。
Task 3:独立日志与触发来源
- 新增纯格式化/写入组件
PersonPullLog,写入异常不影响同步。
- Activity 注入
LocalFileRecorder.writeLog("人员拉取_", content);实际前缀由字符串资源维护。
- 控制器接收
AUTO/MANUAL,生成 syncId,记录唯一开始、阶段和终态。
- 失败记录 failedStage;终态记录数量、source/business/local-save 分段耗时和整轮耗时。
- 磁盘清理同步删除相同日期的人员拉取日志。
event=PERSON_PULL_SUCCESS | syncId=... | trigger=AUTO | status=SUCCESS | sourceElapsedMs=... | businessElapsedMs=... | localSaveElapsedMs=...
Task 4:弹框三段展示
- 保留连接区域,增加一卡通拉取、业务同步和本地保存卡片。
- 各段分别显示状态、开始、结束、耗时、进度和数量。
- 本地保存未启用时隐藏;启用但因前置失败跳过时显示“未执行”。
- 复用现有尺寸、颜色和背景资源,并执行 Java/资源编译。
Task 5:验证与交付记录
- 运行 5 个相关测试类并要求 0 failures、0 errors。
- 运行
:app:assembleDebug 并检查 APK。
- 执行
git diff --check、常量/前缀扫描和只读 Git 状态检查。
- 更新 Markdown/HTML 成对变更记录;不自动安装 APK。
验收重点
- 一卡通拉取耗时包含连接与全量分页。
- 业务耗时只包含固定每批最多 1000 条的上传。
- 启用并执行本地保存时独立记录和展示保存耗时。
- AUTO/MANUAL、失败阶段、成功/失败数量和三段 syncId 均正确。