在 ConsumptionActivity 进入后同时启动读卡器自动寻卡和人员全量同步:读卡器自动完成 USB 权限、连接与持续寻卡;人员同步从新开普一卡通 WebService 每批拉取 1000 条,形成完整本地快照后,再通过项目当前业务服务器地址分批调用 POST /api/oneCardTerminal/syncPersons。
http://10.128.1.19/WebService/Newcapec.eCard.ProxyWebService.asmx。6。.asmx 结尾;AppID 必须是正整数。ConsumptionCardSearchManager:管理 USB 广播、权限申请、读卡器连接、寻卡轮询和资源释放。ConsumptionPersonSyncCoordinator:按“连接一卡通 → 完整拉取 → 本地快照完成 → 业务系统上传”顺序编排一次同步。BusinessPersonSyncService:从指定同步快照读取人员、映射接口字段、每批最多 1000 条顺序上传并汇总结果。读卡器与人员同步分别使用单线程执行器,互不占用对方线程;所有 UI 更新切回主线程。
onStart() 注册 USB 权限、设备接入和设备移除广播。findCard()。NO_CARD 是正常状态,继续轮询;找到卡片后显示 UID 并等待移卡,避免重复触发。onStop() 停止寻卡并注销广播,onDestroy() 关闭线程并断开设备。GetCustomerCount 验证连接并取得总人数。CustomerSyncService,每批 1000 条调用 GetCustomerByNum。SQLiteCustomerRepository,仅在数量完整时完成快照并删除旧人员。POST /api/oneCardTerminal/syncPersons,继续使用当前 Base URL、鉴权和日志拦截器。syncId 快照按人员账号顺序读取,每批最多 1000 条并顺序上传。| 业务字段 | 一卡通字段 | 类型 | 规则 |
|---|---|---|---|
bm | BM | String | 必填,最长 200 字符 |
xh | XH | String | 必填,最长 60 字符 |
name | NAME | String | 必填,最长 40 字符 |
sex | SEX | Integer | 原值转整数,1 男、0 女 |
customerid | CUSTOMERID | Integer | 原值转十进制整数 |
cardno | CARDNO | Integer | 原值转十进制整数 |
status | STATUS | Integer | 保持新开普原始状态值 |
cardsn | CARDSN | Integer | 原值转十进制整数 |
映射不截断字符串,也不为缺失或非法数值编造默认值。每批成功且 code == 0 后继续下一批;汇总 total/created/updated/failed 并记录 trace_id。业务失败数会累计,HTTP 错误、非零 code、空响应或数量不一致会停止后续批次。
strings.xml,尺寸与间距放入 dimens.xml。