From 4cc19e25b2a210ba4b5af46f30f28dbe4ca289fe Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 周四, 27 7月 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<>();//默认会话发送数据map
+
+ // 初始定时任务,根据用户设置的频率定期推送实时位置信息
+ 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);
+ }
+ }
+ //查询所有app用户的位置信息
+ public static Map<String,ArdAppPosition> getAppPositionList()
+ {
+ Map<String,ArdAppPosition> userMap=new HashMap<>();
+ ISysUserService sysUserService = SpringUtils.getBean(ISysUserService.class);
+ //获取所有app用户
+ 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 {
+ // 构建启动命令,使用cmd /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);
+ //每个用户连接时,启动初始所有app用户位置发送
+ 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,属于申请引导,将app从默认map中移除
+ allMap.remove(uId);
+ AppPositionPush.defaultDataMap.putAll(allMap);
+ }
+ else {
+ //接收到频率等于0,属于释放引导,将app恢复到初始map
+ 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) {
+ //当前的Session 移除
+ 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 >= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
- </if>
- <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
- and a.create_time <= 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 >= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
+ </if>
+ <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+ and a.create_time <= 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 >= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
+ </if>
+ <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+ and a.create_time <= 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) {
- //当前的Session 移除
- 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