From cd448f774cfd4837a969d01ebea03530608c6839 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 07 四月 2026 16:55:55 +0800
Subject: [PATCH] #websocket连接管理页面

---
 src/main/java/com/zy/asrs/controller/TvDeviceController.java |  121 +++++++++++++++++++++++++++++++++-------
 1 files changed, 99 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/TvDeviceController.java b/src/main/java/com/zy/asrs/controller/TvDeviceController.java
index ee1ec16..a3ed5ec 100644
--- a/src/main/java/com/zy/asrs/controller/TvDeviceController.java
+++ b/src/main/java/com/zy/asrs/controller/TvDeviceController.java
@@ -1,8 +1,8 @@
 package com.zy.asrs.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.core.annotations.ManagerAuth;
 import com.core.common.Cools;
 import com.core.common.R;
@@ -11,6 +11,8 @@
 import com.zy.asrs.entity.TvDevice;
 import com.zy.asrs.service.ApkBuildTaskService;
 import com.zy.asrs.service.TvDeviceService;
+import com.zy.asrs.websocket.TvWebSocketServer;
+import jakarta.websocket.Session;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -41,7 +43,7 @@
     @RequestMapping(value = "/tvDevice/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") Long id) {
-        return R.ok(tvDeviceService.selectById(id));
+        return R.ok(tvDeviceService.getById(id));
     }
 
     /**
@@ -50,10 +52,10 @@
     @RequestMapping(value = "/tvDevice/list/auth")
     @ManagerAuth
     public R list(@RequestParam(defaultValue = "1") Integer curr,
-            @RequestParam(defaultValue = "10") Integer limit,
-            @RequestParam Map<String, Object> param) {
+                  @RequestParam(defaultValue = "10") Integer limit,
+                  @RequestParam Map<String, Object> param) {
         excludeTrash(param);
-        EntityWrapper<TvDevice> wrapper = new EntityWrapper<>();
+        QueryWrapper<TvDevice> wrapper = new QueryWrapper<>();
 
         for (Map.Entry<String, Object> entry : param.entrySet()) {
             String key = entry.getKey();
@@ -68,8 +70,8 @@
             }
         }
 
-        wrapper.orderBy("id", false);
-        return R.ok(tvDeviceService.selectPage(new Page<>(curr, limit), wrapper));
+        wrapper.orderBy(true, false, "id");
+        return R.ok(tvDeviceService.page(new Page<>(curr, limit), wrapper));
     }
 
     /**
@@ -78,9 +80,9 @@
     @RequestMapping(value = "/tvDevice/all/auth")
     @ManagerAuth
     public R listAll() {
-        EntityWrapper<TvDevice> wrapper = new EntityWrapper<>();
-        wrapper.orderBy("name", true);
-        return R.ok(tvDeviceService.selectList(wrapper));
+        QueryWrapper<TvDevice> wrapper = new QueryWrapper<>();
+        wrapper.orderBy(true, true, "name");
+        return R.ok(tvDeviceService.list(wrapper));
     }
 
     /**
@@ -106,9 +108,9 @@
         }
 
         // 妫�鏌P鏄惁宸插瓨鍦�
-        EntityWrapper<TvDevice> wrapper = new EntityWrapper<>();
+        QueryWrapper<TvDevice> wrapper = new QueryWrapper<>();
         wrapper.eq("ip", device.getIp());
-        if (tvDeviceService.selectCount(wrapper) > 0) {
+        if (tvDeviceService.count(wrapper) > 0) {
             return R.error("璇P宸插瓨鍦�");
         }
 
@@ -118,7 +120,7 @@
         device.setStatus((short) 0);
         device.setCreateTime(new Date());
         device.setUpdateTime(new Date());
-        tvDeviceService.insert(device);
+        tvDeviceService.save(device);
         return R.ok(device);
     }
 
@@ -134,9 +136,9 @@
 
         // 妫�鏌P鏄惁宸茶鍏朵粬璁惧浣跨敤
         if (!Cools.isEmpty(device.getIp())) {
-            EntityWrapper<TvDevice> wrapper = new EntityWrapper<>();
+            QueryWrapper<TvDevice> wrapper = new QueryWrapper<>();
             wrapper.eq("ip", device.getIp()).ne("id", device.getId());
-            if (tvDeviceService.selectCount(wrapper) > 0) {
+            if (tvDeviceService.count(wrapper) > 0) {
                 return R.error("璇P宸茶鍏朵粬璁惧浣跨敤");
             }
         }
@@ -155,7 +157,7 @@
         if (ids == null || ids.length == 0) {
             return R.error();
         }
-        tvDeviceService.deleteBatchIds(Arrays.asList(ids));
+        tvDeviceService.removeByIds(Arrays.asList(ids));
         return R.ok();
     }
 
@@ -169,7 +171,7 @@
             String result = tvDeviceService.testConnection(id);
             Map<String, Object> data = new HashMap<>();
             data.put("result", result);
-            data.put("device", tvDeviceService.selectById(id));
+            data.put("device", tvDeviceService.getById(id));
             return R.ok(data);
         } catch (Exception e) {
             return R.error("杩炴帴澶辫触: " + e.getMessage());
@@ -209,7 +211,7 @@
                 return R.error("璇烽�夋嫨瀹夎璁惧");
             }
 
-            ApkBuildTask task = apkBuildTaskService.selectById(taskId);
+            ApkBuildTask task = apkBuildTaskService.getById(taskId);
             if (task == null) {
                 return R.error("鎵撳寘浠诲姟涓嶅瓨鍦�");
             }
@@ -230,7 +232,7 @@
     @RequestMapping(value = "/tvDevice/uploadAndInstall/auth", method = RequestMethod.POST)
     @ManagerAuth
     public R uploadAndInstall(@RequestParam("file") MultipartFile file,
-            @RequestParam("deviceIds") String deviceIdsStr) {
+                              @RequestParam("deviceIds") String deviceIdsStr) {
         try {
             if (file.isEmpty()) {
                 return R.error("璇烽�夋嫨APK鏂囦欢");
@@ -286,7 +288,7 @@
             String result = tvDeviceService.launchApp(id, packageName);
             Map<String, Object> data = new HashMap<>();
             data.put("result", result);
-            data.put("device", tvDeviceService.selectById(id));
+            data.put("device", tvDeviceService.getById(id));
             return R.ok(data);
         } catch (Exception e) {
             return R.error("鍚姩澶辫触: " + e.getMessage());
@@ -324,10 +326,85 @@
             String base64Image = tvDeviceService.captureScreen(id);
             Map<String, Object> data = new HashMap<>();
             data.put("image", base64Image);
-            data.put("device", tvDeviceService.selectById(id));
+            data.put("device", tvDeviceService.getById(id));
             return R.ok(data);
         } catch (Exception e) {
             return R.error("鎴浘澶辫触: " + e.getMessage());
         }
     }
+
+    /**
+     * 閲嶅惎璁惧涓婄殑搴旂敤
+     */
+    @RequestMapping(value = "/tvDevice/restartApp/{id}/auth", method = RequestMethod.POST)
+    @ManagerAuth
+    public R restartApp(@PathVariable("id") Long id, @RequestBody(required = false) JSONObject param) {
+        try {
+            String packageName = param != null ? param.getString("packageName") : null;
+            String result = tvDeviceService.restartApp(id, packageName);
+            Map<String, Object> data = new HashMap<>();
+            data.put("result", result);
+            data.put("device", tvDeviceService.getById(id));
+            return R.ok(data);
+        } catch (Exception e) {
+            return R.error("閲嶅惎澶辫触: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鎵归噺閲嶅惎璁惧涓婄殑搴旂敤
+     */
+    @RequestMapping(value = "/tvDevice/batchRestartApp/auth", method = RequestMethod.POST)
+    @ManagerAuth
+    public R batchRestartApp(@RequestBody JSONObject param) {
+        try {
+            List<Long> deviceIds = param.getJSONArray("deviceIds").toJavaList(Long.class);
+            String packageName = param.getString("packageName");
+
+            if (deviceIds == null || deviceIds.isEmpty()) {
+                return R.error("璇烽�夋嫨璁惧");
+            }
+
+            List<String> results = tvDeviceService.batchRestartApp(deviceIds, packageName);
+            return R.ok(results);
+        } catch (Exception e) {
+            return R.error("閲嶅惎澶辫触: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ鐢佃鏈篧ebSocket杩炴帴鐘舵��
+     */
+    @RequestMapping(value = "/tvDevice/tvWebSocket/status/auth")
+    @ManagerAuth
+    public R tvWebSocketStatus() {
+        Map<String, Session> sessions = TvWebSocketServer.getSessions();
+
+        // 鏌ヨ鎵�鏈夎澶囦俊鎭紝鐢ㄤ簬鍖归厤IP瀵瑰簲鐨勮澶囧悕绉�
+        List<TvDevice> allDevices = tvDeviceService.list();
+        Map<String, String> ipToDeviceName = new HashMap<>();
+        for (TvDevice device : allDevices) {
+            if (device.getIp() != null) {
+                ipToDeviceName.put(device.getIp(), device.getName());
+            }
+        }
+
+        List<Map<String, Object>> connections = new ArrayList<>();
+        for (Map.Entry<String, Session> entry : sessions.entrySet()) {
+            Map<String, Object> info = new HashMap<>();
+            String ip = entry.getKey();
+            Session session = entry.getValue();
+
+            info.put("ip", ip);
+            info.put("deviceName", ipToDeviceName.getOrDefault(ip, "-"));
+            info.put("sessionId", session.getId());
+            info.put("open", session.isOpen());
+            connections.add(info);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("total", sessions.size());
+        result.put("connections", connections);
+        return R.ok(result);
+    }
 }

--
Gitblit v1.9.1