原人员同步链路存在增量同步可能清空人脸库、部分失败仍反馈成功、客户与人脸职责混合、数据库与内存缓存/SDK 索引不一致、MQTT ACK 失败后重复落库、周期 Worker 自替换或旧任务覆盖新计划等问题。
本次修复以以下协议语义为准:
type=0 是增量同步,不执行 userClean(),空列表按成功且处理数为 0。type=1 是全量快照,整批校验通过后原子替换;明确的空列表表示清空,缺失 data 或列表表示失败且不改库。status=1/2 表示新增或更新,status=3 表示幂等删除。/userdata 只维护客户/卡片数据,/facedata 只维护人脸特征数据。performUpdate("0") 不再清库;增量新增/更新采用 UUID/数据库 ID 替换,删除采用幂等语义。"0" 调用替换为命名协议常量,避免增量类型继续散落为魔法字符串。FaceApi 的数据库与内存缓存同步更新;数据库写入失败时不污染缓存,读取结果使用防御性副本。null/0 状态。data 和列表边界检查,并阻止页面销毁后的旧回调继续操作 UI、SDK 或导航。PROCESSING -> ACKING -> PENDING_ACK:ACK 失败后的重投只重试 ACK,不重复执行本地写入。app/src/main/java/com/cpt/aidishrecognition/sync/app/src/main/java/com/cpt/aidishrecognition/utils/FaceDataUpdaters.javaapp/src/main/java/com/cpt/aidishrecognition/manager/FaceSDKManager.javaapp/src/main/java/com/cpt/aidishrecognition/mqtt/MqttSimple.javaapp/src/main/java/com/cpt/aidishrecognition/workmanager/app/src/main/java/com/cpt/aidishrecognition/dataabase/datalibrary/src/main/java/com/example/datalibrary/api/FaceApi.javadatalibrary/src/main/java/com/example/datalibrary/db/DBManager.javaapp/src/test/java/com/cpt/aidishrecognition/sync/执行:
./gradlew :app:testDebugUnitTest --rerun-tasks
./gradlew :app:assembleDebug
git diff --check
结果:
app/build/outputs/apk/debug/app-debug.apk。git diff --check 无空白错误。docs/、doc/ 或 prompt/ 文档目录。工作区原有菜品学习、识别及网络拦截器相关未提交改动,本次没有回滚、覆盖或纳入这些改动,也未执行任何 Git 写操作。