文档故障排查

报工数据重复提交的原因与处理

同一条工单出现两条相同报工记录,产量被重复统计。本文列出三种重复来源、查证方法,以及从机制上防止重复的配置要点。

张工2026-09-09阅读 97有用 18

现象

同一工单、同一工序、同一时间点出现两条完全相同的报工记录,导致完工数量虚高、工时重复计入。

三种重复来源

来源一:用户重复点击

工人点了提交,页面没立刻响应,以为没点上,又点了一次。

特征:两条记录时间间隔通常在 3 秒以内。

来源二:网络重试

请求发出去了,但响应没回来(网络抖动),前端自动重试,服务端处理了两次。

特征:时间间隔极短(毫秒级),且两条记录内容完全一致。

来源三:数据同步重复

如果报工数据通过接口同步到其他系统(比如 ERP),同步失败后重试,可能重复写入。

特征:重复记录出现在下游系统,而非 MES 本身。

排查步骤

第一步:确认重复的范围

先查清楚是个例还是普遍

  • 只有一条工单重复 → 大概率是用户操作问题
  • 多条工单、多个用户都重复 → 大概率是系统机制问题
  • 只有某个时间段重复 → 查那个时间的网络和服务状态

查询方法:按"工单号 + 工序 + 数量 + 操作人"分组,找 count 大于 1 的记录。

第二步:看时间间隔

时间间隔 判断
小于 1 秒 系统重试导致
1-5 秒 用户重复点击
大于 5 秒 用户误操作(以为没提交成功,重新填了一次)

第三步:看操作日志

查系统操作日志,看这两条记录对应几次请求。

如果日志里只有一次请求但产生了两条数据,问题在服务端(重复消费或事务问题)。

如果日志里有两次请求,问题在客户端或网络层。

解决方法

针对用户重复点击

  1. 前端加防重复提交:提交后按钮置灰,直到收到响应或超时
  2. 加提交中的提示:让用户知道"正在提交"
  3. 响应要快:报工接口响应时间控制在 1 秒内,等待时间短,用户就不会重复点

针对网络重试

在请求里带一个幂等键(比如时间戳 + 用户 + 工单的组合,或者前端生成的 UUID)。

服务端收到请求时先查这个键是否处理过:

  • 处理过 → 直接返回上次的结果,不重复写入
  • 没处理过 → 正常处理并记录这个键

这是最根本的解决方式,能覆盖所有网络层导致的重复。

针对同步重复

同步接口同样需要幂等设计。下游系统按业务主键(工单+工序+时间)做唯一约束,重复写入时更新而非新增。

已经产生的重复数据怎么处理

  1. 先备份,导出重复记录的原始数据
  2. 保留最早的一条(通常是真实的),删除后续的
  3. 重算受影响的工单完工数量、工时统计
  4. 检查是否已同步到下游系统,如有,同步修正
  5. 记录事件,说明处理方式和影响范围

不要直接删数据库记录,要走系统的撤销/作废功能,让操作留痕。

预防措施

措施 说明
前端防重 提交置灰 + 加载状态
幂等键 服务端按唯一键判重
唯一约束 数据库层面加唯一索引兜底
操作留痕 所有报工可追溯、可撤销
监控告警 定时检查重复记录,异常时告警

其中数据库唯一索引是最后一道防线。即使前面都失效,唯一索引也能挡住重复写入。

但要注意:唯一索引的字段选择要考虑业务合理性。有些场景确实允许同一工单同一工序多次报工(分批完工),这时候不能用简单的唯一约束,要用幂等键。

一个容易误判的情况

有时候看起来"重复"的记录其实不是重复:

  • 同一工单分两次报工(第一次 50 件、第二次 50 件),如果两次数量刚好相同、时间接近,看起来像重复
  • 换班交接时两个班组各报了一次(各报各的产出)

排查时要先确认业务上是否合理,不要一看到"看起来一样"就判定为重复。

判断方法:看报工记录里的班次、操作人、设备字段。如果这些不同,很可能是两次真实的报工。

具体的幂等配置与唯一约束设置,[待补充:百华智造 MES 报工接口幂等配置说明]。

这篇内容对你有帮助吗?

当前为游客态,投票按设备去重