From ff86e3738197b49ed20910501e1fe3f356e2a6e0 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 08 五月 2026 11:51:05 +0800
Subject: [PATCH] 重发优化

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java |   61 +++++++++++++++++++++++++++---
 1 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
index e796aa6..e515c6e 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/RcsTvCallbackService.java
@@ -10,6 +10,9 @@
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -64,7 +67,8 @@
                 continue;
             }
             if (StringUtils.hasText(staNo)) {
-                parts.add("[" + staNo + "]" + msg);
+                // 鍏ㄨ鎷彿鍓嶇紑锛岄伩鍏嶇數瑙嗘満绔� Redis 鍊艰鍒�
+                parts.add("銆�" + staNo + "銆�" + msg);
             } else {
                 parts.add(msg);
             }
@@ -77,6 +81,38 @@
         tvMonitorStringRedisTemplate.opsForValue().set(TvMonitorRedisKeys.TV_MANUAL_ERROR_MSG, value);
         log.info("RCS 鎶ヨ宸插啓鍏� Redis tvManualErrorMsg锛屾潯鏁�={}", parts.size());
         return rcsOk(value);
+    }
+
+    /** AGV 寮傚父鏁存鍐欏叆 tvManualErrorMsg锛屽悗娆¤鐩栧墠娆� */
+    public void publishAgvErrorToTv(JsonNode body) {
+        if (body == null || !body.isObject()) {
+            return;
+        }
+        String agvId = text(body.get("agvId"));
+        String faultName = text(body.get("faultName"));
+        String faultNo = text(body.get("faultNo"));
+        if ("undefined".equalsIgnoreCase(faultName)) {
+            faultName = "";
+        }
+        String prefix = StringUtils.hasText(agvId) ? ("銆怉GV" + agvId + "銆�") : "銆怉GV銆�";
+        String desc = StringUtils.hasText(faultName) ? faultName : "寮傚父";
+        StringBuilder sb = new StringBuilder(prefix).append(desc);
+        if (StringUtils.hasText(faultNo)) {
+            sb.append(" ").append(faultNo);
+        }
+        JsonNode tsNode = body.get("timestamp");
+        if (tsNode != null && tsNode.isNumber()) {
+            long ts = tsNode.asLong();
+            if (ts > 0) {
+                sb.append(" ")
+                        .append(Instant.ofEpochMilli(ts)
+                                .atZone(ZoneId.systemDefault())
+                                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+        String value = sb.toString();
+        tvMonitorStringRedisTemplate.opsForValue().set(TvMonitorRedisKeys.TV_MANUAL_ERROR_MSG, value);
+        log.info("AGV 鎶ヨ宸插啓鍏� Redis tvManualErrorMsg agvId={}", agvId);
     }
 
     private static JsonNode resolveErrorArray(JsonNode body) {
@@ -122,12 +158,7 @@
         if (!StringUtils.hasText(staNo)) {
             throw new IllegalArgumentException("staNo 涓嶈兘涓虹┖");
         }
-        if (!StringUtils.hasText(taskNo)) {
-            tvMonitorStringRedisTemplate.opsForHash().delete(TvMonitorRedisKeys.TV_RCS_STATION_TASK_NO, staNo);
-        } else {
-            tvMonitorStringRedisTemplate.opsForHash()
-                    .put(TvMonitorRedisKeys.TV_RCS_STATION_TASK_NO, staNo, taskNo);
-        }
+        writeStationTaskNo(staNo, taskNo);
         log.info("RCS 浠诲姟鍙峰凡鍐欏叆 Redis Hash staNo={} taskNo={}", staNo, taskNo);
         Map<String, Object> payload = new LinkedHashMap<>();
         payload.put("staNo", staNo);
@@ -135,6 +166,22 @@
         return rcsOk(payload);
     }
 
+    /**
+     * 杞 RCS 绔欑偣浠诲姟鍙锋椂鍐欏叆 Redis锛屼笌 {@link #handleStationTaskNo} 涓� Hash 瑙勫垯涓�鑷�
+     */
+    public void writeStationTaskNo(String staNo, String taskNo) {
+        if (!StringUtils.hasText(staNo)) {
+            return;
+        }
+        String t = taskNo == null ? "" : taskNo.trim();
+        if (!StringUtils.hasText(t) || "0".equals(t)) {
+            tvMonitorStringRedisTemplate.opsForHash().delete(TvMonitorRedisKeys.TV_RCS_STATION_TASK_NO, staNo);
+        } else {
+            tvMonitorStringRedisTemplate.opsForHash()
+                    .put(TvMonitorRedisKeys.TV_RCS_STATION_TASK_NO, staNo, t);
+        }
+    }
+
     private Map<String, Object> rcsOk(Object data) {
         Map<String, Object> m = new LinkedHashMap<>();
         m.put("code", 200);

--
Gitblit v1.9.1