两名盘点员在同一间地下配电室断网作业时,一人把某台资产标记为“在用”,另一人标记为“待报废”。这类冲突在离线PDA盘点里并不少见,并不只限于边界情况。离线能力的代价,是把原本由服务端串行处理的写入,拆成了多条彼此不知情的本地分支。
冲突从哪来
根源是任务包与并行作业。PDA用本地嵌入式数据库缓存数万条资产,作业期间与服务端完全隔离,每条作业线拿到的都是一份数据快照。只要两个人、两个班组或两个任务包覆盖到同一资产,快照就会产生分叉。
分叉的类型并不单一:同一资产的状态字段被不同人改写;存放地点变动与状态变动交叉发生;一人判为盘亏、另一人确认真实存在;任务包重复下发导致同一资产被重复计数。这些情况的技术性质不同,不能都套用同一套规则。
合并策略的取舍
最省事的做法是按提交时间“后写覆盖”,取最后一条。问题在于它的前提往往不成立:手持机时钟未必同步,操作顺序与提交顺序也常常不一致,被覆盖的很可能正是真实的那条盘点结果。
更稳妥的思路是以资产ID为键做字段级合并,用版本或基线快照做冲突检测。只有偏离基线、且双方取值不一致的字段才进入仲裁,其余字段正常写入服务端。冲突记录保留双方原始值、操作人、设备与操作时间,交由资产管理员复核,而不是由系统静默取舍。
技术层的合并只能兜底,业务层的防冲突更有效:任务包按库位或区域切分,保证同一资产在同一时段只归属一个任务包;盘亏、报废这类敏感状态变更加复核权限;服务端按资产维度串行写入。这几条做到位,仲裁队列会短很多,盘亏盘盈单据后续推送财务系统时也更经得起对账。
判断一个方案是否真做过现场部署,看它怎么回答三个问题就够了:多人并发盘点同一区域按什么规则合并、冲突记录能否追溯、重复下发的任务包如何处置。只笼统写“支持离线盘点”的报价,通常没把这块工作量算进去。