实施状态(2026-09-03):源端 1000 人分页、业务响应 unchanged 兼容和 OUTID → xh 人员编号修复均已落地;156 个 JVM 测试及 Debug 构建通过,待真机重新发起业务转发验证。
Goal:从新开普按每批最多 1000 人获取完整人员列表,完整校验后按每批最多 1000 条 JSON 转发业务服务器,并在开关启用且业务全部成功后静默保存本地快照。
Architecture:将旧的“拉取即落库、再从库上传”拆为分页获取并内存汇总、业务分批转发、可选本地保存三个职责。协调器以连接返回的总人数驱动 1000 人源端分页;全部分页完成并映射校验后再串行上传;本地保存只在业务零失败后执行。
Tech Stack:Java 8、Android API 24-30、Retrofit 2.1、Gson、SQLite、MMKV、JUnit 4。
CustomerFetchResult、CustomerFullFetchService、CustomerLocalSaveService。one_card_type 和 JSON Content-Type;mapper 使用 CUSTDEPT/OUTID,不再把 EMPCODE 当人员编号。CustomerFullFetchService.fetch(expectedCount, listener),按独立源端常量每批最多 1000 人拉取并汇总。CUSTDEPT/OUTID 映射、缺少 OUTID、固定 one_card_type=新开普 和 JSON Header 测试。MAX_ITEMS 串行请求。unchanged,按 created + updated + unchanged + failed == total 校验汇总。replaceSnapshot,在一个 SQLite 事务中写全量、删除旧数据、核数和标记成功。failed == 0 时调用保存任务。false 的 MMKV 键和 SwitchButton。CustomerFetchResult 替代旧同步结果并移除旧耦合入口。:app:testDebugUnitTest。:app:assembleDebug。git diff --check 和旧字段 / 50000 硬编码扫描。JAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home ./gradlew -q :app:testDebugUnitTest
JAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home ./gradlew -q :app:assembleDebug
git diff --check
rg -n '"BM"|"XH"|DEFAULT_BATCH_SIZE = 50000' app/src/main app/src/test