仓库断网后PDA还能不能继续作业?离线缓存和数据补传怎么实现

断网时先把动作可靠记下来,而不是假装已经写进服务器。
仓库PDA手持机断网后离线缓存与数据补传方案:稳妥的思路,是把每次需要同步的业务操作写成一条独立记录。它至少要有本地操作编号、业务类型、关联单据、条码或对象标识、数量、操作人、设备、现场时间、创建顺序、当前同步状态和必要的业务上下文。字段不必盲目堆砌,但要足够让服务端重放和判断。
本地操作编号尤其重要。它不是数据库自增行号给人看,而是这次业务动作的身份。员工因为页面卡顿再次点击,应用因为超时重试,网络中间设备重复投递,只要它们属于同一动作,就应带着同一个编号。服务端据此识别“这是上次那一笔又来了”,而不是再做一遍。
离线记录应写入持久化数据库,并在一个本地事务里同时保存业务数据和同步队列状态。页面显示“已暂存”之前,写入必须成功。应用崩溃后重新打开,要能从本地数据库恢复待传记录;设备重启后,也要能继续补传。仅靠内存队列无法满足这个要求。
还要保存原始输入和必要的解析结果。比如员工扫到的是一个包装码,应用从中解析出物料、批次和数量。如果以后解析规则改变,只保存最终数量可能难以审计;只保存原始字符串又可能让补传时缺少当时业务上下文。哪些字段要留,应由业务追溯需要决定,而不是全存或全不存。
仓库系统提示要分状态!
仓库系统里,一个模糊的“提交成功”会带来很多误会。断网时数据只是保存在本机,页面却显示提交成功,员工自然会认为后台库存已经更新。下一班在另一台设备上看不到,就会怀疑系统丢数据。
更清楚的提示可以分成几种状态。操作写入本机后显示“已离线保存”,并告诉员工还有多少笔等待同步;服务器确认后变成“已同步”;业务校验失败则显示“需处理”,说明原因和处理入口。不同状态在颜色之外还要有文字或图标,避免员工只凭颜色判断。
状态变化应贴近任务,而不是藏在设置页深处。员工查看当前单据时,应该能看到这张单据还有几笔待传;班组长查看设备时,能看到待传总数和最早一笔时间;IT排查时,能进一步查看错误类型。三类人看到的信息层级不同,但数据来源应一致。
还要避免“转圈等结果”把现场困住。如果应用已经把操作可靠写入本地,就可以让员工进入下一笔,而后台负责发送。若业务要求必须等服务器校验,页面应明确说正在等待在线确认,而不是让员工猜这一枪要不要重扫。
提示音也要区分。条码读到、本地保存、服务器拒绝不能都用同一个短促声音。员工不可能一直盯屏幕,声音和震动是高频作业中的重要反馈。设计时可以把成功层级做得简单,但不能把失败和待确认混成成功。
补传不是“联网后把全部数据再发一遍”
网络恢复时,最直觉的做法是遍历本地记录逐条上传。真正上线后,还会遇到顺序、依赖、重试、限流和冲突。
同一业务链上的动作可能有前后关系。先收货,再上架;先创建容器,再装入明细;先绑定托盘,再移动托盘。如果补传时打乱顺序,服务端会收到一个尚不存在或状态不允许的对象。队列需要保留必要的先后关系,不能单纯谁文件小谁先传。
不同业务之间又不必全部串行。某张盘点单的一笔失败,不应拖住所有巡检记录。可以按单据、任务或业务对象分组,组内保持顺序,组间按服务能力适度并行。这里的并行不是越多越快,仓库一批设备同时恢复网络时,过猛上传会冲击无线网络和服务端。
重试也要有节奏。连接刚恢复时信号可能仍不稳定,如果每条记录连续重试,会耗电、占网,还可能让服务端收到密集重复请求。可靠后台任务通常会在网络满足条件时执行,失败后逐步延长重试间隔,并保留人工立即重试入口。业务拒绝和网络失败要分开:超时可以重试,单据已关闭则不能靠重试变成功。
补传过程中,应用退出或设备重启不应丢掉队列。后台任务需要以持久方式调度,而不是依赖某个页面一直打开。安卓应用可以借助系统推荐的持久后台任务机制配合本地数据库,但具体实现仍要按设备系统版本和应用架构验证。工具只能保证任务有机会继续执行,业务是否幂等、顺序是否正确仍由应用设计负责。
防重复要由服务端兜底

状态看得见,现场人员才知道哪些数据还没有完成。
设备端可以防止员工快速连点,也可以在按钮提交后暂时禁用,但这些只能减少重复,不能作为最终保证。超时场景最典型:PDA已经把请求发到服务器,服务器也写入成功,只是确认响应在返回途中断了。设备不知道结果,于是恢复网络后再次发送。若服务端每收到一次就扣一次库存,重复就发生了。
服务端应按本地操作编号或业务幂等键识别重复请求。同一编号再次到达时,不再重复执行业务写入,而是返回之前的处理结果。这个编号需要在设备初次创建操作时生成,并在所有重试中保持不变。若每次重试都新建编号,服务端看到的仍是不同操作。
幂等键的作用域也要设计。仅用条码作为键太粗,同一条码可能在不同单据、不同数量、不同时间被合法扫描多次;仅用时间戳又可能碰撞或因设备时钟偏差失真。更实用的键通常由稳定的操作编号配合租户、业务类型或设备范围组成,具体取决于系统的数据隔离方式。
服务端保存幂等结果时,还要考虑保留周期。待补传数据可能在设备上积压较久,如果服务端很快清掉去重记录,旧请求再次到达就会被当作新操作。保留多久,应覆盖业务允许的最长离线周期和异常恢复窗口,并结合数据量评估。
数据库层的不可重复约束可以再加一道防线。比如某业务动作的操作编号在记录表中只能出现一次。应用逻辑先判断,数据库约束兜底,两者配合比只在页面上禁按钮可靠。发生冲突时,服务端应返回已存在记录的状态,而不是把数据库错误直接丢给员工。
设备时间不能决定业务真相
离线数据通常会带两个时间:现场发生时间和服务端接收时间。两者都重要,但用途不同。
现场发生时间帮助还原员工什么时候扫描、在哪个班次操作。不过PDA时钟可能不准,也可能因为长期离线没有校时。它适合做业务线索,不宜单独决定所有先后和有效性。
服务端接收时间由中心系统记录,更容易统一,但它只表示数据什么时候到达。设备离线三小时后补传,接收时间会晚于实际作业。若报表只看接收时间,整个班次的工作会被挪到网络恢复之后。
因此,系统应同时保存两类时间,并在服务端用单据版本、操作序号、业务规则和接收顺序综合判断。需要严格排序的动作,可以由设备为同一任务生成递增序列,服务端检查缺口和逆序。不能只按手机时间排序,也不能简单按补传到达顺序覆盖旧值。
设备时钟还要纳入运维。MDM或系统时间同步可以减少偏差,但断网和手工改时仍可能发生。后台日志应记录时区、设备时间和服务端时间,出现跨日、跨班次异常时才容易定位。
冲突发生时,不要偷偷用“后写覆盖”
离线期间,服务端数据仍可能被其他人修改。员工下载任务时显示某货位有十箱,他离线后拣走八箱;与此同时,另一名在线员工完成了调拨。补传时,本地旧状态和服务端新状态冲突。
最省事的实现是后一次写入覆盖前值,但库存和单据场景里,这往往会掩盖问题。后到的数据未必更正确,它只是更晚到服务器。离线记录还可能是几个小时前发生的动作。
更安全的方式是带上读取时的业务版本或单据版本。服务端收到更新时,先判断当前版本是否仍匹配。匹配则按规则处理,不匹配则进入冲突状态,由系统尝试可解释的合并,或交给有权限的人复核。
哪些冲突能自动合并,要按业务定义。两个盘点观察值可以都保留,供差异分析;两个对同一序列号的出库占用不能同时成立;数量累加也要确认动作语义是增加量还是最终量。字段看起来都是数字,业务含义不同,合并方式就不同。
冲突提示要给出可行动信息。不要只写“同步失败”。应告诉处理人是哪张单、哪件货、设备记录了什么、服务器当前是什么、为何不接受、可选处理是什么。现场员工未必有权改库存,可以把记录转给班组长或后台审核,但原始操作不能丢。
待同步队列要能被人看见

网络恢复只是开始,补传还要面对重复、过期和业务冲突。
很多离线方案技术上有队列,现场却看不到。员工交班时不知道设备里还有几十笔待传,随手关机或放回充电柜;下一班换了一台设备,数据仍留在原机器。等盘点差异出现,大家才开始找是哪台PDA没有上传。
队列至少要在三个位置可见。当前任务页显示本任务待传数量;设备首页显示全机待传总数和最早产生时间;管理端能按设备、人员、任务和错误类型查询。这样员工、班组长和IT都有自己的观察窗口。
交接规则也要跟着改。设备归还前检查待传数量,网络正常时等待同步完成;确实无法补传,则把设备编号、待传数量和任务交给下一班或管理员。不能只交机器,不交状态。
本地数据清理必须谨慎。只有服务端明确确认处理完成,设备端才能把记录从待传队列移出。即使从工作队列移出,也可以按审计需要保留一段只读摘要。不能因为用户点了“清空缓存”就把未同步业务一并删除。
存储空间也要监控。离线记录不仅有文本,还可能包含照片、签名或附件。设备长时间断网,空间会逐渐被占满。系统应设置容量预警和业务上限,先阻止继续拍大附件或提示联网处理,不能等数据库写满才发现后续每一笔都保存失败。
多台PDA离线,比单机离线难得多
单台设备断网,很多冲突还不明显。一个仓库同时有几十台PDA,大家在同一区域离线工作,恢复后会形成集中补传和业务争用。
任务分配要尽量减少重叠。离线前可以把区域、货位、波次或单据明确分给设备和人员,避免两台机器都拿到同一份可执行任务。若业务允许共享任务,也要在服务器端定义重复和冲突处理,而不是指望员工口头协调。
恢复网络时,不必让所有设备瞬间冲上来。后台任务可以加入轻微随机延迟或按批次发送,服务端也要有速率控制和队列处理能力。否则无线网络刚恢复就被大量附件和记录塞满,员工又会看到连接时好时坏。
多设备环境还需要统一应用版本和数据结构。旧版本设备离线很久,期间服务端接口和字段发生变化,补传时可能无法解析。接口应有兼容策略,本地记录应带应用版本和数据版本,升级流程要考虑待传队列。设备有未同步数据时,强制升级、清除应用数据或恢复出厂都会带来风险。
设备身份也要稳定。不能只靠员工账号判断来源,因为员工可能换机,设备也可能共用。每条记录应能追到人员、设备、应用版本和任务。这样出现同一账号在两台设备产生冲突时,才知道从哪里查。
一次靠谱的断网演练,应该故意制造麻烦
离线演练之前,还要确认设备手里的基础数据有多新。物料、货位、条码规则、批次状态和任务权限会变化,设备若几天没有联网,虽然页面还能打开,做出的判断却可能基于旧数据。系统应为可离线使用的数据设置版本和有效窗口,下载时记录更新时间,超过边界后限制高风险操作,并提示先完成同步。
基础数据更新也不能与待传操作互相踩踏。设备恢复联网后,如果先把本地字典全部替换,再解析旧记录,可能出现代码含义变化;如果只顾上传,不拉取已经关闭的任务,又会继续产生冲突。更稳妥的顺序要按业务确定,并保留旧记录产生时使用的关键标识和版本。员工不需要知道版本号细节,但页面要告诉他当前任务是否仍可离线执行。
设备长时间离线时,权限也可能过期。人员调岗、账号停用或单据授权撤销后,本地会话不能无限延续。低风险采集可以先保存为待审核记录,高风险动作则应在权限无法在线确认时暂停。这样做会让少数任务等待,却避免恢复联网后发现整批数据都由无效权限产生。
在线演示跑通后,应安排一轮断网演练。不是只关一下Wi-Fi看页面提示,而是把可能导致数据重复和丢失的时刻都走一遍。
可以在扫码前断网,确认任务是否还能打开;扫码后、本地保存前让应用退出,确认不会显示假成功;本地保存后、上传前重启设备,确认队列还在;请求发出后立刻断网,模拟服务器可能已处理但设备没收到确认;恢复网络时连续点击同步,确认服务端不会重复入账。
还要试服务端主动拒绝。让单据在设备离线期间被关闭、库存被他人占用、条码状态改变、用户权限撤回,再看补传结果。网络失败会重试,业务失败应进入待处理,二者不能混在一起无限重试。
应用升级和电量耗尽也值得测试。设备里有待传记录时安装新版本,记录能否迁移;电池突然耗尽后再开机,末笔记录是否存在;本地数据库损坏或空间不足时,应用能否阻止员工继续产生“看似成功”的操作。
演练结束后要对账。设备产生了多少本地操作,服务端成功多少、重复识别多少、冲突多少、失败多少,数量应能闭合。只看页面没有报错不够,必须把每个本地操作编号和服务端结果对应起来。
离线能力上线后,运维看什么
系统上线后,待传数量是很有用的健康指标。正常情况下,网络恢复后队列会逐渐下降。如果某台设备长期有旧记录,可能是网络覆盖、后台任务、账号权限、应用版本或数据库状态有问题。
还可以关注最老待传时间、平均补传耗时、重复请求数量、业务冲突数量和不同错误类型分布。重复请求并非全是坏事,它说明重试机制在工作;服务端能识别并安全返回,才是关键。若重复突然增多,可能意味着网络响应丢失或客户端频繁超时。
日志要能关联同一个操作编号,但不要把敏感业务内容无边界地写进日志。记录必要的状态、错误码、设备和版本即可。条码、人员和业务数据按权限查看,日志保留周期也应符合企业安全要求。
告警要避免噪声。偶发一笔重试不必半夜叫醒IT,待传积压超过业务允许时间、同一错误持续出现、多个设备同时失败、存储空间接近上限时更值得提醒。告警最终要落到处理人和动作,否则只是多一个红点。
仓库流程也要为断网留后路
技术设计再细,现场没有规则仍会乱。仓库需要明确断网由谁确认、哪些岗位继续、哪些动作暂停、离线任务如何分配、设备如何交接、网络恢复后谁看同步结果、冲突由谁审核。
员工培训应使用真实异常。让大家看到“已离线保存”和“已同步”的区别,知道不能因为没看到服务器结果就反复扫,知道换设备前要检查待传数量,也知道业务拒绝不能靠多点几次解决。
纸面应急单据是否保留,要看业务。如果保留,就要规定纸单和PDA数据如何避免重复录入;如果不保留,就要确保离线数据有可靠存储和设备备用。两套方式同时存在却没有统一操作编号,恢复后很容易同一动作录两遍。
断网期间还要控制任务范围。网络大面积故障时,班组长可以冻结新的高风险出库,只让员工完成已分配的低风险采集。这样虽然牺牲一部分速度,却减少恢复后的冲突堆积。离线设计的目标是有序降级,不是让系统假装网络从未断过。
验收离线功能,关键看账能不能闭合
仓库PDA断网后能不能继续作业,答案取决于业务类型和系统设计。能扫出条码,不等于记录已保存;记录留在本机,不等于服务器已入账;服务器收到请求,也不代表不会重复执行。
一套可用的离线方案,会把每次操作做成有身份、有状态、可恢复的本地记录。设备在本地写入成功后再提示暂存,后台在网络满足条件时按规则补传,所有重试沿用同一个操作编号,服务端负责幂等去重和业务校验,冲突进入清楚的处理流程。员工则能随时看到还有多少数据未同步。
验收时不要只演示“关网还能扫”。要把闪退、重启、超时、重复点击、单据变更、多机并发和长期积压都跑一遍,再把设备操作数与服务端入账数逐笔对上。只要每一笔都能说明现在在哪里、经历了什么、处理结果如何,断网就只是一次可管理的降级,而不是一场事后猜账。
# 仓库断网后PDA还能不能继续作业?离线缓存、补传和防重复怎么设计
仓库网络断了,员工手里的PDA还亮着,条码也能扫出来。问题是,这一枪到底算不算完成?
如果页面立刻报错,员工只能停工等网络;如果页面显示成功,却没有把数据保存下来,网络恢复后账上少一笔;如果设备把数据暂存在本地,员工又点了几次提交,恢复联网后可能冒出多笔重复记录。现场最怕的不是屏幕上出现“无网络”,而是员工以为做完了,系统却留下了一本说不清的账。
断网继续作业并不是给PDA加一个“离线模式”开关。它需要设备端、服务端和仓库流程共同约定:断网时哪些任务允许做,数据先存在哪里,怎样标记每次操作,恢复后按什么顺序补传,服务端怎样识别重复,发生冲突时谁来处理。少了其中一环,离线功能就可能从保生产变成制造差异。
先把三个问题说清楚:扫到了、保存了、入账了
仓库员工听到扫码成功提示,通常会理解成动作已经完成。但从系统角度看,一次扫码至少经过三个阶段。
先是设备读到了条码。这个阶段只证明扫描模块识别出一串字符。条码可能还没通过业务校验,也没有写入本地记录。
随后是PDA把这次操作保存下来。联网时,应用可能直接请求服务器;离线时,应用应该把必要数据可靠地写入本地存储。只有写入成功,才有资格告诉员工“已暂存”。如果只是把数据放在页面变量或内存里,应用闪退、系统回收进程或设备重启后,记录就可能消失。
末端是服务端确认入账。服务端需要完成单据、库存、批次、货位、权限和状态检查,写入业务数据库,并返回清楚结果。这个阶段完成后,PDA才可以把本地记录标记为已同步。
这三个阶段的提示不能混成一个绿色对勾。更合适的做法是让员工看懂当前状态:条码已识别、操作已保存到本机、服务器已确认。现场不需要理解数据库术语,但要知道这一笔现在能不能交接、能不能清除、是否还在等待补传。
不是所有仓库动作都适合离线
“断网也能干”听起来很方便,可仓库动作的风险并不相同。
盘点采集通常比较适合离线。员工记录某货位看到了哪些货、多少数量,数据可以先保存在本机,联网后再汇总。即便服务器上的库存期间有变化,系统也可以把盘点结果当作一个待复核事实,而不是直接修改可用库存。
库内巡检、设备点检、拍照留痕、货位信息采集,也常能采用类似方式。它们的核心是先记录现场发生了什么,后续再同步。
但出库确认、库存扣减、序列号排他占用、波次分配、跨库调拨生效等动作更敏感。两个员工都在离线状态下看到同一份旧任务,各自完成操作,恢复网络后才发现争用了同一库存。设备端无法凭本地旧数据判断另一个人刚做了什么。
因此,离线范围要按业务风险划分。可以允许离线采集,但把最终生效留到服务器;可以允许完成当前已下载任务,却不允许离线领取新任务;可以允许记录数量,却把超额、冻结、批次失效等校验放到补传时处理。目标不是让所有按钮在断网时仍可点击,而是让低冲突动作继续,让高冲突动作停在可控边界。
如果一个动作涉及金额、排他序列号、库存承诺、质量放行或法规记录,就更应谨慎。离线能力不能削弱原有审批、权限和追溯要求。必要时宁可提示等待联网,也不要为了“不断工”绕开关键控制。












