diff --git a/src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java b/src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java
index 3d8f11e..f9e28bb 100644
--- a/src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java
+++ b/src/main/java/com/gaotao/modules/dashboard/task/DashboardPushTask.java
@@ -1336,5 +1336,213 @@ public class DashboardPushTask {
return "idle";
}
+
+ /**
+ * 定时推送异常看板数据
+ *
+ *
功能说明:每10秒从WMS系统获取异常数据并推送到前端
+ *
+ * 数据来源:
+ *
+ * - WMS系统 - http://172.28.1.18:7002/api/wms/query-task-error-info
+ * - 设备编码:1101
+ *
+ *
+ * 配置开关:
+ *
+ * - dashboard.push.enabled - 看板推送总开关
+ *
+ */
+ @Scheduled(fixedRate = 10000)
+ public void pushExceptionBoardData() {
+ // 检查总开关
+ if (!dashboardPushEnabled) {
+ log.trace("看板推送已禁用");
+ return;
+ }
+
+ try {
+ // 从WMS获取异常数据
+ Map data = getExceptionDataFromWms();
+
+ // 如果返回null,转换为空数据
+ if (data == null) {
+ data = createEmptyExceptionData();
+ }
+
+ // 计算数据哈希值并推送
+ int currentHash = data.hashCode();
+ webSocketService.pushExceptionBoardData(data);
+ lastDataHash.put("exception-board", currentHash);
+
+ } catch (Exception e) {
+ log.error("推送异常看板数据失败,推送空数据: {}", e.getMessage(), e);
+ // 异常时推送空数据,避免前端显示过期数据
+ try {
+ Map emptyData = createEmptyExceptionData();
+ webSocketService.pushExceptionBoardData(emptyData);
+ lastDataHash.put("exception-board", emptyData.hashCode());
+ } catch (Exception ex) {
+ log.error("推送空数据失败: {}", ex.getMessage());
+ }
+ }
+ }
+
+ /**
+ * 从WMS系统获取异常数据
+ *
+ * 数据来源:
+ *
+ * - API: http://172.28.1.18:7002/api/wms/query-task-error-info
+ * - 入参: 1101(设备编码)
+ * - 返回格式: {resCode, resMsg, memo1, memo2, memo3}
+ *
+ *
+ * @return 异常数据
+ */
+ private Map getExceptionDataFromWms() {
+ List