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 >= 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) { - //褰撳墠鐨凷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