From ce9ba63127821699be67f70004be2d45cfcb76eb Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 23 七月 2026 11:13:00 +0800
Subject: [PATCH] 监控

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EzvizOpenApiUtils.java |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EzvizOpenApiUtils.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EzvizOpenApiUtils.java
index 81ed634..5113f14 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EzvizOpenApiUtils.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EzvizOpenApiUtils.java
@@ -24,7 +24,9 @@
 
     private static final String SUCCESS_CODE = "200";
     private static final String TOKEN_EXPIRED_CODE = "10002";
+    private static final String PTZ_CURRENT_OPERATION_FAILED_CODE = "60006";
     private static final long TOKEN_EXPIRE_ADVANCE_MS = 5 * 60 * 1000L;
+    private static final Integer[] PTZ_STOP_DIRECTIONS = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
 
     @Value("${ezviz.open.base-url:https://open.ys7.com}")
     private String baseUrl;
@@ -119,7 +121,7 @@
             form.put("speed", normalizePtzSpeed(speed));
             JSONObject result = postFormWithToken("/api/lapp/device/ptz/start", form);
             if (isCurrentOperationFailed(result)) {
-                postFormWithToken("/api/lapp/device/ptz/stop", form);
+                stopAllPtzDirections(deviceSerial, channelNo);
                 result = postFormWithToken("/api/lapp/device/ptz/start", form);
             }
             return result;
@@ -174,8 +176,18 @@
     private boolean isCurrentOperationFailed(JSONObject result) {
         return result != null
                 && !SUCCESS_CODE.equals(result.getString("code"))
-                && StringUtils.hasText(result.getString("msg"))
-                && result.getString("msg").contains("当前操作失败");
+                && (PTZ_CURRENT_OPERATION_FAILED_CODE.equals(result.getString("code"))
+                || StringUtils.hasText(result.getString("msg")) && result.getString("msg").contains("当前操作失败"));
+    }
+
+    private void stopAllPtzDirections(String deviceSerial, Integer channelNo) {
+        for (Integer direction : PTZ_STOP_DIRECTIONS) {
+            Map<String, Object> form = new LinkedHashMap<>();
+            form.put("deviceSerial", deviceSerial);
+            form.put("channelNo", channelNo == null ? 1 : channelNo);
+            form.put("direction", direction);
+            postFormWithToken("/api/lapp/device/ptz/stop", form);
+        }
     }
 
     /**

--
Gitblit v1.7.1