From 4cc19e25b2a210ba4b5af46f30f28dbe4ca289fe Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 27 七月 2023 08:56:22 +0800
Subject: [PATCH] 修改websocket包位置 增加单兵端-下发给我的任务详情 增加app位置websocket推送按用户频率

---
 ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java          |   96 ++++++++++
 ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java                    |    1 
 ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml                               |  118 +++++++++----
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java                           |    4 
 ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java           |   86 +++++++++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java                             |    8 
 ard-work/src/main/java/com/ruoyi/utils/webrtcService.java                                 |   37 ++++
 ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java                 |   22 ++
 ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java         |   31 +--
 /dev/null                                                                                 |   70 -------
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AppTask.java                             |   13 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java          |    5 
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java    |    1 
 ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java                 |    2 
 ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java         |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                  |    2 
 ard-work/src/main/java/com/ruoyi/utils/websocket/config/websocketConfig.java              |    2 
 ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java            |   18 +
 ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java |    2 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java                 |    5 
 20 files changed, 373 insertions(+), 151 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index 465b865..94e936d 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -166,7 +166,6 @@
         List<SysUser> offLineList=new ArrayList<>();
         for(SysUser sysUser:list)
         {
-
             ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId());
             if(ardAppPosition!=null) {
                 Map<String, Object> params =new HashMap<>();
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java b/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
index 05640d8..5cb7f8c 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
@@ -65,4 +65,5 @@
      * @return 缁撴灉
      */
     public int deleteArdAppPositionById(String id);
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
new file mode 100644
index 0000000..a3c2f72
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
@@ -0,0 +1,86 @@
+package com.ruoyi.app.position.service.impl;
+
+import com.ruoyi.app.position.domain.ArdAppPosition;
+import com.ruoyi.app.position.service.IArdAppPositionService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
+import com.ruoyi.system.service.ISysUserService;
+
+import javax.websocket.Session;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Description: app浣嶇疆鎺ㄩ��
+ * @ClassName: AppPositionPush
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�25鏃�16:07:04
+ * @Version: 1.0
+ **/
+public class AppPositionPush {
+
+    //app浣嶇疆涓婁紶
+    public static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);
+    public static final Map<Session, ScheduledFuture<?>> taskMap = new HashMap<>();
+    public static final Map<Session, Map> defaultDataMap = new HashMap<>();//榛樿浼氳瘽鍙戦�佹暟鎹甿ap
+
+    // 鍒濆瀹氭椂浠诲姟锛屾牴鎹敤鎴疯缃殑棰戠巼瀹氭湡鎺ㄩ�佸疄鏃朵綅缃俊鎭�
+    public static void initPushTask(Session session, int pushFrequency) {
+        // 鍚姩鏂扮殑瀹氭椂浠诲姟
+        if (pushFrequency > 0) {
+            scheduler.scheduleAtFixedRate(() -> {
+                Map map = defaultDataMap.get(session);
+                WebSocketUtils.sendMessage(session, map);
+            }, 0, pushFrequency, TimeUnit.MILLISECONDS);
+        }
+    }
+    // 鏂扮殑瀹氭椂浠诲姟锛屾牴鎹敤鎴疯缃殑棰戠巼瀹氭湡鎺ㄩ�佸疄鏃朵綅缃俊鎭�
+    public static void startLocationPushTask(String userId, Session session, int pushFrequency) {
+        // 鍙栨秷涔嬪墠璁剧疆鐨勫畾鏃朵换鍔�
+        stopLocationPushTask(session);
+
+        // 鍚姩鏂扮殑瀹氭椂浠诲姟
+        if (pushFrequency > 0) {
+            ScheduledFuture<?> task = ScheduledFutureTask(session, userId, pushFrequency);
+            taskMap.put(session, task); // 瀛樺偍鏂扮殑瀹氭椂浠诲姟
+        }
+    }
+    public static ScheduledFuture<?> ScheduledFutureTask(Session session, String userId, Integer pushFrequency) {
+        return scheduler.scheduleAtFixedRate(() -> {
+            ArdAppPosition ardAppPosition = getAppPositionList().get(userId);
+            Map<String, ArdAppPosition> DataMap = new HashMap<>();
+            DataMap.put(userId,ardAppPosition);
+            WebSocketUtils.sendMessage(session, DataMap);
+        }, 0, pushFrequency, TimeUnit.MILLISECONDS);
+    }
+    //鍙栨秷瀹氭椂浠诲姟
+    public static void stopLocationPushTask(Session session) {
+        ScheduledFuture<?> scheduledTask = taskMap.get(session);
+        if (scheduledTask != null) {
+            scheduledTask.cancel(false);
+        }
+    }
+    //鏌ヨ鎵�鏈塧pp鐢ㄦ埛鐨勪綅缃俊鎭�
+    public static Map<String,ArdAppPosition> getAppPositionList()
+    {
+        Map<String,ArdAppPosition> userMap=new HashMap<>();
+        ISysUserService sysUserService = SpringUtils.getBean(ISysUserService.class);
+        //鑾峰彇鎵�鏈塧pp鐢ㄦ埛
+        List<SysUser> list = sysUserService.selectAppUserListNoDataScope(new SysUser());
+        for(SysUser sysUser:list)
+        {
+            IArdAppPositionService ardAppPositionService = SpringUtils.getBean(IArdAppPositionService.class);
+            ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId());
+            userMap.put(sysUser.getUserId(),ardAppPosition);
+        }
+
+        return userMap;
+    }
+}
+
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
index 2214737..18e068d 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -98,4 +98,6 @@
     public int deleteArdAppPositionById(String id) {
         return ardAppPositionMapper.deleteArdAppPositionById(id);
     }
+
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java b/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
index 195c448..9b86968 100644
--- a/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
@@ -39,7 +39,7 @@
     /**
      * 鏌ヨapp浠诲姟绠$悊鍒楄〃
      */
-    @ApiOperation("鏌ヨapp浠诲姟绠$悊鍒楄〃")
+    @ApiOperation("鎸囨尌绔�-鍘嗗彶浠诲姟鏌ヨ")
     @PreAuthorize("@ss.hasPermi('app:task:list')")
     @GetMapping("/list")
     public TableDataInfo list(ArdAppTask ardAppTask) {
@@ -47,12 +47,19 @@
         List<ArdAppTask> list = ardAppTaskService.selectArdAppTaskList(ardAppTask);
         return getDataTable(list);
     }
-    @ApiOperation("鏌ヨapp浠诲姟绠$悊鍒楄〃(璇︽儏)")
+    @ApiOperation("鍗曞叺绔� - 涓嬪彂缁欐垜鐨勪换鍔″垪琛�")
     @PreAuthorize("@ss.hasPermi('app:task:list')")
     @GetMapping("/listWithDetail")
     public TableDataInfo userlist(ArdAppTask ardAppTask) {
         List<ArdAppTask> ardAppTasks = ardAppTaskService.selectArdAppTaskListWithDetail(ardAppTask);
         return getDataTable(ardAppTasks);
+    }
+    @ApiOperation("鍗曞叺绔� - 涓嬪彂缁欐垜鐨勪换鍔¤鎯�")
+    @PreAuthorize("@ss.hasPermi('app:task:list')")
+    @GetMapping("/userDetailById")
+    public AjaxResult userDetail(ArdAppTask ardAppTask) {
+        List<ArdAppTask> ardAppTasks = ardAppTaskService.selectArdAppTaskListWithDetailById(ardAppTask);
+        return AjaxResult.success(ardAppTasks);
     }
     /**
      * 瀵煎嚭app浠诲姟绠$悊鍒楄〃
@@ -69,7 +76,6 @@
     /**
      * 鑾峰彇app浠诲姟绠$悊璇︾粏淇℃伅
      */
-    @ApiOperation("鑾峰彇app浠诲姟绠$悊璇︾粏淇℃伅")
     @PreAuthorize("@ss.hasPermi('app:task:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfoWithPic(@PathVariable("id") String id) {
@@ -79,7 +85,7 @@
     /**
      * 鏂板app浠诲姟绠$悊
      */
-    @ApiOperation("鏂板app浠诲姟绠$悊")
+    @ApiOperation("鎸囨尌绔�-涓嬪彂浠诲姟")
     @PreAuthorize("@ss.hasPermi('app:task:add')")
     @Log(title = "app浠诲姟绠$悊", businessType = BusinessType.INSERT)
     @PostMapping
@@ -110,7 +116,7 @@
     /**
      * 鏇存柊app浠诲姟璇︽儏
      */
-    @ApiOperation("鏇存柊app浠诲姟璇︽儏(鎵撳崱)")
+    @ApiOperation("鍗曞叺绔�-浠诲姟鎵撳崱")
     @PreAuthorize("@ss.hasPermi('app:taskdetail:edit')")
     @Log(title = "鏇存柊app浠诲姟璇︽儏", businessType = BusinessType.UPDATE)
     @PutMapping("/detail")
@@ -120,7 +126,7 @@
     /**
      * 鑾峰彇app浠诲姟璇︽儏鐨勮缁嗕俊鎭�
      */
-    @ApiOperation("鑾峰彇app浠诲姟璇︽儏鐨勮缁嗕俊鎭�")
+    @ApiOperation("鍗曞叺绔�-浠诲姟鐐硅鎯�")
     @PreAuthorize("@ss.hasPermi('app:task:query')")
     @GetMapping(value = "/detail/{id}")
     public AjaxResult getTaskDetailInfo(@PathVariable("id") String id) {
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java b/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java
index dc6def6..b8ef70f 100644
--- a/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java
@@ -38,6 +38,7 @@
      * @return app浠诲姟绠$悊闆嗗悎
      */
     public List<ArdAppTask> selectArdAppTaskListWithDetail(ArdAppTask ardAppTask);
+    public List<ArdAppTask> selectArdAppTaskListWithDetailById(ArdAppTask ardAppTask);
     /**
      * 鏂板app浠诲姟绠$悊
      *
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java b/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
index dabba9d..8d18b1e 100644
--- a/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
+++ b/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
@@ -41,7 +41,7 @@
      * @return app浠诲姟璇︽儏闆嗗悎
      */
     public List<ArdAppTask> selectArdAppTaskListWithDetail(ArdAppTask ardAppTask);
-
+    public List<ArdAppTask> selectArdAppTaskListWithDetailById(ArdAppTask ardAppTask);
     /**
      * 鏂板app浠诲姟绠$悊
      *
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
index ea832a0..ca958c8 100644
--- a/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
@@ -89,27 +89,16 @@
         List<ArdAppTask> list = new ArrayList<>();
         list.addAll(list1);
         return list;
-//        boolean flag=false;
-//        List<ArdAppTask> ardAppTasks = ardAppTaskMapper.selectArdAppTaskList(ardAppTask);
-//        ardAppTask.setUserId(SecurityUtils.getUserId());
-//        List<ArdAppTask> ardAppTasksNew=new ArrayList<>();
-//        for (ArdAppTask appTask : ardAppTasks) {
-//            ArdAppTask task = ardAppTaskMapper.selectArdAppTaskById(appTask.getId());
-//            List<ArdAppTaskDetail> ardAppTaskDetailListNew = new ArrayList<>();
-//            List<ArdAppTaskDetail> ardAppTaskDetailList = task.getArdAppTaskDetailList();
-//            for (ArdAppTaskDetail appTaskDetail : ardAppTaskDetailList) {
-//                if (appTaskDetail.getUserId().equals(ardAppTask.getUserId())) {
-//                    ardAppTaskDetailListNew.add(appTaskDetail);
-//                    flag=true;
-//                }
-//            }
-//            if(flag) {
-//                appTask.setArdAppTaskDetailList(ardAppTaskDetailListNew);
-//                ardAppTasksNew.add(appTask);
-//            }
-//            flag=false;
-//        }
-//        return ardAppTasksNew;
+
+    }
+
+    @Override
+    public List<ArdAppTask> selectArdAppTaskListWithDetailById(ArdAppTask ardAppTask) {
+        ardAppTask.setUserId(SecurityUtils.getUserId());
+        List<ArdAppTask> list1 = ardAppTaskMapper.selectArdAppTaskListWithDetailById(ardAppTask);
+        List<ArdAppTask> list = new ArrayList<>();
+        list.addAll(list1);
+        return list;
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
index d4aadf0..99cf40a 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -11,9 +11,8 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.common.websocket.util.WebSocketUtils;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
@@ -39,7 +38,7 @@
 
 import javax.annotation.Resource;
 
-import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * 涓変竴杞﹁締Service涓氬姟灞傚鐞�
diff --git a/ard-work/src/main/java/com/ruoyi/utils/webrtcService.java b/ard-work/src/main/java/com/ruoyi/utils/webrtcService.java
new file mode 100644
index 0000000..d2b809c
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/webrtcService.java
@@ -0,0 +1,37 @@
+package com.ruoyi.utils;
+
+import com.sun.jna.Platform;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @Description:
+ * @ClassName: webrtcService
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�26鏃�13:43:07
+ * @Version: 1.0
+ **/
+@Component
+public class webrtcService {
+    @PostConstruct
+    public void init() {
+        if (Platform.isWindows()) {
+            String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + "webrtc-streamer.exe";
+
+            try {
+                // 鏋勫缓鍚姩鍛戒护锛屼娇鐢╟md /c start鍛戒护鏉ュ惎鍔ㄥ彲鎵ц绋嬪簭骞舵樉绀哄懡浠ゆ彁绀虹绐楀彛
+                String[] cmd = {"cmd", "/c", "start", exePath,"-o"};
+                ProcessBuilder processBuilder = new ProcessBuilder(cmd);
+                processBuilder.redirectErrorStream(true); // 灏嗛敊璇緭鍑洪噸瀹氬悜鍒版爣鍑嗚緭鍑�
+                Process process = processBuilder.start();
+                // 濡傛灉浣犳兂绛夊緟绋嬪簭瀹屾垚
+                int exitCode = process.waitFor();
+            } catch (IOException | InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/config/websocketConfig.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/config/websocketConfig.java
similarity index 91%
rename from ruoyi-common/src/main/java/com/ruoyi/common/websocket/config/websocketConfig.java
rename to ard-work/src/main/java/com/ruoyi/utils/websocket/config/websocketConfig.java
index c8af08e..5aa35fc 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/config/websocketConfig.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/config/websocketConfig.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.websocket.config;
+package com.ruoyi.utils.websocket.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
new file mode 100644
index 0000000..31aaffd
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
@@ -0,0 +1,96 @@
+package com.ruoyi.utils.websocket.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.app.position.domain.ArdAppPosition;
+import com.ruoyi.app.position.service.impl.AppPositionPush;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName ChatServerEndpoint
+ * @Description:
+ * @Author 鍒樿嫃涔�
+ * @Date 2023/1/27 7:42
+ * @Version 1.0
+ */
+
+@Component
+@Slf4j(topic = "websocket")
+@ServerEndpoint("/websocket/{userId}")
+public class ChatServerEndpoint {
+
+    @OnOpen
+    public void openSession(@PathParam("userId") String userId, Session session) {
+        WebSocketUtils.ONLINE_USER_SESSIONS.put(userId, session);
+        String message = "鐢ㄦ埛[" + userId + "] 鎴愬姛杩炴帴锛�";
+        log.info("鐢ㄦ埛鐧诲綍锛�" + message);
+        WebSocketUtils.sendMessage(session, message);
+        //姣忎釜鐢ㄦ埛杩炴帴鏃讹紝鍚姩鍒濆鎵�鏈塧pp鐢ㄦ埛浣嶇疆鍙戦��
+        Map<String, ArdAppPosition> appPositionMap = AppPositionPush.getAppPositionList();
+        AppPositionPush.defaultDataMap.put(session,appPositionMap);
+        AppPositionPush.initPushTask(session,3000);
+    }
+
+    @OnMessage
+    public void onMessage(@PathParam("userId") String userId, String message) {
+        log.info("鏀跺埌娑堟伅锛�" + message);
+        Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId);
+       // WebSocketUtils.sendMessage(session, message);
+//        sendMessageAll("鐢ㄦ埛[" + userid + "] : " + message);
+        // 鏍规嵁鐢ㄦ埛鏂扮殑棰戠巼閲嶆柊璋冩暣瀹氭椂浠诲姟
+        Map<String,Object> map = JSONObject.parseObject(message, Map.class);
+        if(map.size()>0) {
+            Integer frequency = (Integer)map.get("frequency");
+            String uId = (String) map.get("userId");
+            Map allMap = AppPositionPush.defaultDataMap.get(session);//鑾峰彇褰撳墠session鐨勯粯璁ゅ彂閫佺殑鏁版嵁map
+            if(frequency>0)
+            {
+                //鎺ユ敹鍒伴鐜囧ぇ浜�0锛屽睘浜庣敵璇峰紩瀵硷紝灏哸pp浠庨粯璁ap涓Щ闄�
+                allMap.remove(uId);
+                AppPositionPush.defaultDataMap.putAll(allMap);
+            }
+           else {
+                //鎺ユ敹鍒伴鐜囩瓑浜�0锛屽睘浜庨噴鏀惧紩瀵硷紝灏哸pp鎭㈠鍒板垵濮媘ap
+                Map<String, ArdAppPosition> appPositionList = AppPositionPush.getAppPositionList();
+                allMap.put(uId,appPositionList.get(uId));
+                AppPositionPush.defaultDataMap.putAll(allMap);
+            }
+            AppPositionPush.startLocationPushTask(uId, session, frequency);
+        }
+    }
+
+    @OnClose
+    public void onClose(@PathParam("userId") String userId, Session session) {
+        //褰撳墠鐨凷ession 绉婚櫎
+        WebSocketUtils.ONLINE_USER_SESSIONS.remove(userId);
+//        //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡
+       String message="鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�";
+//        sendMessage(session,message);
+        log.info("娑堟伅锛�"+message);
+        try {
+            session.close();
+            AppPositionPush.stopLocationPushTask(session);
+        } catch (IOException e) {
+            log.error("onClose error", e);
+        }
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        try {
+            session.close();
+        } catch (IOException e) {
+            log.error("onError excepiton", e);
+        }
+        log.info("Throwable msg " + throwable.getMessage());
+    }
+
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/util/WebSocketUtils.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
similarity index 77%
rename from ruoyi-common/src/main/java/com/ruoyi/common/websocket/util/WebSocketUtils.java
rename to ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
index 91a7730..5d35ed4 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/util/WebSocketUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/websocket/util/WebSocketUtils.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.websocket.util;
+package com.ruoyi.utils.websocket.util;
 
 import com.alibaba.fastjson2.JSONObject;
 import lombok.extern.slf4j.Slf4j;
@@ -6,8 +6,10 @@
 import javax.websocket.RemoteEndpoint;
 import javax.websocket.Session;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.*;
 
 /**
  * @ClassName WebSocketUtils
@@ -63,6 +65,22 @@
             }
         }
     }
+    public static void sendMessage(Session session, List message) {
+        if (session == null) {
+            return;
+        }
+        final RemoteEndpoint.Basic basic = session.getBasicRemote();
+        if (basic == null) {
+            return;
+        }
+        synchronized(session) {
+            try {
+                session.getBasicRemote().sendText( String.join(", ", message));
+            } catch (IOException e) {
+                log.error("sendMessage IOException ",e);
+            }
+        }
+    }
     /**
      * 鎺ㄩ�佹秷鎭埌鍏朵粬瀹㈡埛绔�
      * @param message
diff --git a/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml b/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
index b12a14b..b5ea1d1 100644
--- a/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
+++ b/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
@@ -93,13 +93,13 @@
         a.create_time,
         a.update_by,
         a.update_time,
-        b.id      as sub2_id,
+        b.id as sub2_id,
         b.task_id as sub2_task_id,
         b.pic_url as sub2_pic_url,
-        c.id   as sub1_id,
+        c.id as sub1_id,
         c.name as sub1_name,
         c.longitude as sub1_longitude,
-        c.latitude as sub1_latitde,
+        c.latitude as sub1_latitude,
         c.altitude as sub1_altitude,
         c.user_id as sub1_user_id,
         c.text as sub1_text,
@@ -109,13 +109,59 @@
         from ard_app_task a
         left join ard_app_task_pic b on b.task_id = a.id
         left join ard_app_task_detail c on c.task_id = a.id
-        where c.user_id = #{userId}
-        <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-            and a.create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
-        </if>
-        <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-            and a.create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD HH24:MI:ss')
-        </if>
+        <where>
+            <if test="userId != null and userId != ''">
+                and c.user_id = #{userId}
+            </if>
+            <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+                and a.create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
+            </if>
+            <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+                and a.create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD HH24:MI:ss')
+            </if>
+        </where>
+    </select>
+    <select id="selectArdAppTaskListWithDetailById" parameterType="ArdAppTask" resultMap="ArdAppTaskSubResult">
+        select a.id,
+        a.name,
+        a.text,
+        a.voice,
+        a.dept_id,
+        a.user_id,
+        a.create_by,
+        a.create_time,
+        a.update_by,
+        a.update_time,
+        b.id as sub2_id,
+        b.task_id as sub2_task_id,
+        b.pic_url as sub2_pic_url,
+        c.id as sub1_id,
+        c.name as sub1_name,
+        c.longitude as sub1_longitude,
+        c.latitude as sub1_latitude,
+        c.altitude as sub1_altitude,
+        c.user_id as sub1_user_id,
+        c.text as sub1_text,
+        c.voice as sub1_voice,
+        c.status as sub1_status,
+        c.clock_in_pic_url as sub1_clock_in_pic_url
+        from ard_app_task a
+        left join ard_app_task_pic b on b.task_id = a.id
+        left join ard_app_task_detail c on c.task_id = a.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and c.user_id = #{userId}
+            </if>
+            <if test="id != null and id != ''">
+                and c.id = #{id}
+            </if>
+            <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
+                and a.create_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
+            </if>
+            <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
+                and a.create_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD HH24:MI:ss')
+            </if>
+        </where>
     </select>
     <select id="selectArdAppTaskById" parameterType="String" resultMap="ArdAppTaskSubResult">
         select a.id,
@@ -128,17 +174,17 @@
                a.create_time,
                a.update_by,
                a.update_time,
-               b.id      as sub2_id,
-               b.task_id as sub2_task_id,
-               b.pic_url as sub2_pic_url,
-               c.id   as sub1_id,
-               c.name as sub1_name,
+               b.id        as sub2_id,
+               b.task_id   as sub2_task_id,
+               b.pic_url   as sub2_pic_url,
+               c.id        as sub1_id,
+               c.name      as sub1_name,
                c.longitude as sub1_longitude,
-               c.latitude as sub1_latitde,
-               c.altitude as sub1_altitude,
-               c.user_id as sub1_user_id,
-               c.text as sub1_text,
-               c.voice as sub1_voice
+               c.latitude  as sub1_latitude,
+               c.altitude  as sub1_altitude,
+               c.user_id   as sub1_user_id,
+               c.text      as sub1_text,
+               c.voice     as sub1_voice
         from ard_app_task a
                  left join ard_app_task_pic b on b.task_id = a.id
                  left join ard_app_task_detail c on c.task_id = a.id
@@ -155,9 +201,9 @@
                a.create_time,
                a.update_by,
                a.update_time,
-               b.id      as sub_id,
-               b.task_id as sub_task_id,
-               b.pic_url as sub_pic_url
+               b.id      as sub2_id,
+               b.task_id as sub2_task_id,
+               b.pic_url as sub2_pic_url
         from ard_app_task a
                  left join ard_app_task_pic b on b.task_id = a.id
         where a.id = #{id}
@@ -173,16 +219,16 @@
                a.create_time,
                a.update_by,
                a.update_time,
-               c.id   as sub_id,
-               c.name as sub_name,
-               c.longitude as sub_longitude,
-               c.latitude as sub_latitde,
-               c.altitude as sub_altitude,
-               c.user_id as sub_user_id,
-               c.text as sub_text,
-               c.voice as sub_voice,
-               c.status as sub_status,
-               c.clock_in_pic_url as sub_clock_in_pic_url
+               c.id               as sub1_id,
+               c.name             as sub1_name,
+               c.longitude        as sub1_longitude,
+               c.latitude         as sub1_latitude,
+               c.altitude         as sub1_altitude,
+               c.user_id          as sub1_user_id,
+               c.text             as sub1_text,
+               c.voice            as sub1_voice,
+               c.status           as sub1_status,
+               c.clock_in_pic_url as sub1_clock_in_pic_url
         from ard_app_task a
                  left join ard_app_task_detail c on c.task_id = a.id
         where a.id = #{id}
@@ -279,7 +325,8 @@
     </delete>
 
     <insert id="batchArdAppTaskDetail">
-        insert into ard_app_task_detail( id, name, longitude, latitude, altitude, user_id, text, voice, task_id,status,clock_in_pic_url) values
+        insert into ard_app_task_detail( id, name, longitude, latitude, altitude, user_id, text, voice,
+        task_id,status,clock_in_pic_url) values
         <foreach item="item" index="index" collection="list" separator=",">
             ( #{item.id}, #{item.name}, #{item.longitude}, #{item.latitude}, #{item.altitude}, #{item.userId},
             #{item.text}, #{item.voice}, #{item.taskId}, #{item.status}, #{item.clockInPicUrl})
@@ -308,8 +355,7 @@
         where task_detail_id = #{taskDetailId}
     </delete>
     <select id="selectArdAppTaskDetailById" parameterType="String" resultType="ArdAppTaskDetail">
-        select
-               c.id,
+        select c.id,
                c.name,
                c.longitude,
                c.latitude,
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java b/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java
deleted file mode 100644
index 5e7303d..0000000
--- a/ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.ruoyi.common.websocket.service;
-
-import com.ruoyi.common.utils.SecurityUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-
-import javax.websocket.*;
-import javax.websocket.server.PathParam;
-import javax.websocket.server.ServerEndpoint;
-import java.io.IOException;
-
-import static com.ruoyi.common.websocket.util.WebSocketUtils.*;
-
-
-/**
- * @ClassName ChatServerEndpoint
- * @Description:
- * @Author 鍒樿嫃涔�
- * @Date 2023/1/27 7:42
- * @Version 1.0
- */
-
-@Component
-@Slf4j(topic = "websocket")
-@ServerEndpoint("/websocket/{userId}")
-public class ChatServerEndpoint {
-
-    @OnOpen
-    public void openSession( @PathParam("userId")String userId, Session session) {
-
-        ONLINE_USER_SESSIONS.put(userId, session);
-        String message = "鐢ㄦ埛[" + userId + "] 鎴愬姛杩炴帴锛�";
-        log.info("鐢ㄦ埛鐧诲綍锛�"+message);
-        sendMessage(session,message);
-    }
-
-    @OnMessage
-    public void onMessage(@PathParam("userId")String userId, String message) {
-        log.info("鏀跺埌娑堟伅锛�"+message);
-        Session session = ONLINE_USER_SESSIONS.get(userId);
-        sendMessage(session,message);
-//        sendMessageAll("鐢ㄦ埛[" + userid + "] : " + message);
-    }
-
-    @OnClose
-    public void onClose( @PathParam("userId")String userId,Session session) {
-        //褰撳墠鐨凷ession 绉婚櫎
-        ONLINE_USER_SESSIONS.remove(userId);
-//        //骞朵笖閫氱煡鍏朵粬浜哄綋鍓嶇敤鎴峰凡缁忕寮�鑱婂ぉ瀹や簡
-//        String message="鐢ㄦ埛[" + userId + "] 鏂紑杩炴帴锛�";
-//        sendMessage(session,message);
-//        log.info("鍙戦�佹秷鎭細"+message);
-        try {
-            session.close();
-        } catch (IOException e) {
-            log.error("onClose error",e);
-        }
-    }
-
-    @OnError
-    public void onError(Session session, Throwable throwable) {
-        try {
-            session.close();
-        } catch (IOException e) {
-            log.error("onError excepiton",e);
-        }
-        log.info("Throwable msg "+throwable.getMessage());
-    }
-}
\ No newline at end of file
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java
index a082abe..1eea459 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java
@@ -4,14 +4,14 @@
 import com.ruoyi.alarm.global.domain.GuideTask;
 import com.ruoyi.alarm.global.service.IGlobalAlarmService;
 import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.common.websocket.util.WebSocketUtils;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
 import java.util.concurrent.PriorityBlockingQueue;
 
-import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * @ClassName: AlarmTask
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AppTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AppTask.java
new file mode 100644
index 0000000..f2b8ecd
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AppTask.java
@@ -0,0 +1,13 @@
+package com.ruoyi.quartz.task;
+
+/**
+ * @Description:
+ * @ClassName: AppTask
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�26鏃�11:57:33
+ * @Version: 1.0
+ **/
+public class AppTask {
+
+
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
index 388b551..f844f56 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java
@@ -6,20 +6,16 @@
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.common.websocket.util.WebSocketUtils;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
-import com.ruoyi.system.service.ISysUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
 import java.util.*;
 
-import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * @Description:
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 897852b..6249b54 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -26,7 +26,7 @@
      * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
      */
     public List<SysUser> selectAppUserList(SysUser user);
-
+    public List<SysUser> selectAppUserListNoDataScope(SysUser user);
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
      *
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index c74bca5..8100fa0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -141,7 +141,10 @@
     public List<SysUser> selectAppUserList(SysUser user) {
         return userMapper.selectAppUserList(user);
     }
-
+    @Override
+    public List<SysUser> selectAppUserListNoDataScope(SysUser user) {
+        return userMapper.selectAppUserList(user);
+    }
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
      *

--
Gitblit v1.9.3