ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/media/service/impl/webrtcService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
@@ -23,7 +23,7 @@ import java.util.stream.Collectors; /** * @Description: appä½ç½®æ¨é * @Description: appä½ç½®æ¨éï¼å¼ç¨ï¼ * @ClassName: AppPositionPush * @Author: åèä¹ * @Date: 2023å¹´07æ25æ¥16:07:04 ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPushService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,97 @@ 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.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.websocket.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; import java.util.*; import java.util.stream.Collectors; /** * @ClassName AppPositionPushService * @Description: appä½ç½®æ¨é * @Author åèä¹ * @Date 2023/7/28 19:18 * @Version 1.0 * {"enabled":false,"frequency":1000,"userId":"69cf75f289424a48ba10cf33fa324206"} */ @Slf4j public class AppPositionPushService { public static Map<String, List<ArdAppPosition>> dataMap = new HashMap<>();//å¸¸è§æ°æ® æ¯ä¸ªç¨æ·å ³è public static Map<String, List<ArdAppPosition>> tempDataMap = new HashMap<>();//ä¸´æ¶æ°æ® æ¯ä¸ªç¨æ·å ³è public static Map<String, Timer> userTimerMap = new HashMap();//宿¶å¨ æ¯ä¸ªç¨æ·å ³è public static Map<String, Timer> tempUserTimerMap = new HashMap();//临æ¶å®æ¶å¨ æ¯ä¸ªç¨æ·å ³è public static List<ArdAppPosition> initDataList; static { initDataList = getAppPositionList(); } //å¯å¨å ¨å±å®æ¶å¨ public static Timer startTimerTask(String userId, Integer period) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { List<ArdAppPosition> data = dataMap.get(userId); if (data.size() > 0) { Map newMap = new HashMap<>(); newMap.put("50000", data); WebSocketUtils.sendMessage(WebSocketUtils.ONLINE_USER_SESSIONS.get(userId), newMap); } } }, 0, period); return timer; } //å¯å¨å¼å¯¼å®æ¶å¨ public static Timer startTempTimerTask(String userId, Integer period) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { //å¾ªç¯ List<ArdAppPosition> data = tempDataMap.get(userId); if (data.size() > 0) { Map newMap = new HashMap<>(); newMap.put("50000", data); WebSocketUtils.sendMessage(WebSocketUtils.ONLINE_USER_SESSIONS.get(userId), newMap); } } }, 0, period); return timer; } //忢宿¶å¨ public static void stopTimerTask(Timer timer) { if (timer != null) { timer.cancel(); log.info("忢è¿è¡"); } } //æ¥è¯¢ææappç¨æ·çä½ç½®ä¿¡æ¯ public static List<ArdAppPosition> getAppPositionList() { List<ArdAppPosition> ArdAppPositions = new ArrayList<>(); ISysUserService sysUserService = SpringUtils.getBean(ISysUserService.class); //è·åææappç¨æ· List<SysUser> list = sysUserService.selectAllAppUserList(new SysUser()); List<SysUser> onlineList = list.stream() .filter(obj -> obj.getAppOnlineState().equals("1")) .collect(Collectors.toList()); for (SysUser sysUser : onlineList) { IArdAppPositionService ardAppPositionService = SpringUtils.getBean(IArdAppPositionService.class); ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId()); ArdAppPositions.add(ardAppPosition); } return ArdAppPositions; } } ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -15,8 +15,10 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -43,20 +45,42 @@ if (Platform.isWindows()) { String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.exe"; String ymlPath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.yml"; try { // æå»ºå¯å¨å½ä»¤ï¼ä½¿ç¨cmd /c startå½ä»¤æ¥å¯å¨å¯æ§è¡ç¨åºå¹¶æ¾ç¤ºå½ä»¤æç¤ºç¬¦çªå£ String[] cmd = {"cmd", "/c", "start", exePath,ymlPath}; ProcessBuilder processBuilder = new ProcessBuilder(cmd); processBuilder.redirectErrorStream(true); // å°é误è¾åºéå®åå°æ åè¾åº Process process = processBuilder.start(); // å¦æä½ æ³çå¾ ç¨åºå®æ int exitCode = process.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } // æå»ºå¯å¨å½ä»¤ï¼ä½¿ç¨cmd /c startå½ä»¤æ¥å¯å¨å¯æ§è¡ç¨åºå¹¶æ¾ç¤ºå½ä»¤æç¤ºç¬¦çªå£ // String[] cmd = {"cmd", "/c", "start", exePath,ymlPath}; // ProcessBuilder processBuilder = new ProcessBuilder(cmd); // processBuilder.redirectErrorStream(true); // å°é误è¾åºéå®åå°æ åè¾åº // Process process = processBuilder.start(); // å¦æä½ æ³çå¾ ç¨åºå®æ // int exitCode = process.waitFor(); List<String> cmd = new ArrayList<>(); cmd.add(exePath); cmd.add(ymlPath); commandStart(cmd); } } public static void commandStart(List<String> command) { command.forEach(v -> System.out.print(v + " ")); System.out.println(); System.out.println(); ProcessBuilder builder = new ProcessBuilder(); //æ£å¸¸ä¿¡æ¯åé误信æ¯åå¹¶è¾åº builder.redirectErrorStream(true); builder.command(command); //å¼å§æ§è¡å½ä»¤ Process process = null; try { process = builder.start(); //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç // String line = ""; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((line = br.readLine()) != null) { // System.out.println(line); // } } catch (IOException e) { e.printStackTrace(); } } @Override public String addPath(String name, String rtspPath, String mode) { String rtspUrl = "rtsp://" + mediamtxHost + ":7554/"; ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ruoyi.media.service.impl; import com.sun.jna.Platform; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /** * @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 + "setup.bat"; // String[] cmd = {"cmd", "/c", "start", exePath}; String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + "webrtc-streamer.exe"; List<String> cmd = new ArrayList<>(); cmd.add(exePath); cmd.add("-o"); cmd.add("-H127.0.0.1:8000"); commandStart(cmd); } } public static void commandStart(List<String> command) { command.forEach(v -> System.out.print(v + " ")); System.out.println(); System.out.println(); ProcessBuilder builder = new ProcessBuilder(); //æ£å¸¸ä¿¡æ¯åé误信æ¯åå¹¶è¾åº builder.redirectErrorStream(true); builder.command(command); //å¼å§æ§è¡å½ä»¤ Process process = null; try { process = builder.start(); // //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç // String line = ""; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((line = br.readLine()) != null) { // System.out.println(line); // } } catch (IOException e) { e.printStackTrace(); } } } ard-work/src/main/java/com/ruoyi/media/service/impl/webrtcService.java
ÎļþÒÑɾ³ý ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
@@ -4,6 +4,7 @@ import com.ruoyi.app.position.domain.ArdAppPosition; import com.ruoyi.app.position.service.IArdAppPositionService; import com.ruoyi.app.position.service.impl.AppPositionPush; import com.ruoyi.app.position.service.impl.AppPositionPushService; import com.ruoyi.app.position.service.impl.ArdAppPositionServiceImpl; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.spring.SpringUtils; @@ -18,10 +19,7 @@ import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.*; import java.util.stream.Collectors; /** @@ -36,45 +34,93 @@ @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ç¨æ·ä½ç½®åé AppPositionPush.initDataMap.put(userId,AppPositionPush.getAppPositionList()); AppPositionPush.initPushTask(userId,session,3000); //region æ§æ¹æ³ // //æ¯ä¸ªç¨æ·è¿æ¥æ¶ï¼å¯å¨åå§ææappç¨æ·ä½ç½®åé // AppPositionPush.initDataMap.put(userId,AppPositionPush.getAppPositionList()); // AppPositionPush.initPushTask(userId,session,3000); //endregion } @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); 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"); Map<String, Object> map = JSONObject.parseObject(message, Map.class); if (map.size() > 0) { Boolean enabled = (Boolean) map.get("enabled"); if (enabled) { //å¯å¨å ¨å±æ¨é List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.initDataList); AppPositionPushService.dataMap.put(userId, newList); if (!AppPositionPushService.userTimerMap.containsKey(userId)) { Timer timer = AppPositionPushService.startTimerTask(userId, 3000); AppPositionPushService.userTimerMap.put(userId, timer);//å°å®æ¶å¨å ³èç¨æ· } } else { //åæ¢å ¨å±æ¨é if (AppPositionPushService.userTimerMap.containsKey(userId)) { Timer timer = AppPositionPushService.userTimerMap.get(userId); AppPositionPushService.stopTimerTask(timer); AppPositionPushService.userTimerMap.remove(userId); } if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) { Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId); AppPositionPushService.stopTimerTask(temptimer); AppPositionPushService.tempUserTimerMap.remove(userId); } AppPositionPushService.dataMap.remove(userId); AppPositionPushService.tempDataMap.remove(userId); } Integer frequency = (Integer) map.get("frequency"); String uId = (String) map.get("userId"); Map<String, List<ArdAppPosition>> dataMap = new HashMap<>(); List<ArdAppPosition> positionList = AppPositionPush.initDataMap.get(userId);//è·åå½åç¨æ·çé»è®¤åéçæ°æ®map if(frequency>0) { //æ¥æ¶å°é¢ç大äº0ï¼å±äºç³è¯·å¼å¯¼ï¼è·åé¤å¼å¯¼å¤çå ¶ä»appç¨æ·çä½ç½®List List<ArdAppPosition> appPositionList = positionList.stream() if (frequency > 0) { List<ArdAppPosition> List = AppPositionPushService.initDataList.stream() .filter(obj -> !obj.getUserId().equals(uId)) .collect(Collectors.toList()); dataMap.put(userId,appPositionList); .collect(Collectors.toList());//å»é¤å¼å¯¼åçlist AppPositionPushService.dataMap.put(userId,List); List<ArdAppPosition> tempList = AppPositionPushService.initDataList.stream() .filter(obj -> obj.getUserId().equals(uId)) .collect(Collectors.toList());//è·åå¼å¯¼çlist AppPositionPushService.tempDataMap.put(userId, tempList); Timer timer = AppPositionPushService.startTempTimerTask(userId, frequency); AppPositionPushService.tempUserTimerMap.put(userId, timer); } else { List<ArdAppPosition> newList = new ArrayList<>(AppPositionPushService.initDataList); AppPositionPushService.dataMap.put(userId, newList); Timer timer = AppPositionPushService.tempUserTimerMap.get(userId); AppPositionPushService.stopTimerTask(timer); AppPositionPushService.tempUserTimerMap.remove(userId); AppPositionPushService.tempDataMap.remove(userId); } else { //æ¥æ¶å°é¢ççäº0ï¼å±äºéæ¾å¼å¯¼ï¼è·åå°å ¨é¨appç¨æ·çä½ç½®List dataMap.put(userId,AppPositionPush.getAppPositionList()); } AppPositionPush.initDataMap.putAll(dataMap);//æ´æ°åå§ä¼è¯é»è®¤æ°æ®map AppPositionPush.startLocationPushTask(userId,session,uId, frequency);//å¼å¯æ°ä»»å¡ //region æ§æ¹æ³ // Map<String, List<ArdAppPosition>> dataMap = new HashMap<>(); // List<ArdAppPosition> positionList = AppPositionPush.initDataMap.get(userId);//è·åå½åç¨æ·çé»è®¤åéçæ°æ®map // if(frequency>0) // { // //æ¥æ¶å°é¢ç大äº0ï¼å±äºç³è¯·å¼å¯¼ï¼è·åé¤å¼å¯¼å¤çå ¶ä»appç¨æ·çä½ç½®List // List<ArdAppPosition> appPositionList = positionList.stream() // .filter(obj -> !obj.getUserId().equals(uId)) // .collect(Collectors.toList()); // dataMap.put(userId,appPositionList); // } // else { // //æ¥æ¶å°é¢ççäº0ï¼å±äºéæ¾å¼å¯¼ï¼è·åå°å ¨é¨appç¨æ·çä½ç½®List // dataMap.put(userId,AppPositionPush.getAppPositionList()); // } // AppPositionPush.initDataMap.putAll(dataMap);//æ´æ°åå§ä¼è¯é»è®¤æ°æ®map // AppPositionPush.startLocationPushTask(userId,session,uId, frequency);//å¼å¯æ°ä»»å¡ //endregion } } @@ -83,12 +129,25 @@ //å½åçSession ç§»é¤ WebSocketUtils.ONLINE_USER_SESSIONS.remove(userId); // //å¹¶ä¸éç¥å ¶ä»äººå½åç¨æ·å·²ç»ç¦»å¼èå¤©å®¤äº String message="ç¨æ·[" + userId + "] æå¼è¿æ¥ï¼"; String message = "ç¨æ·[" + userId + "] æå¼è¿æ¥ï¼"; // sendMessage(session,message); log.info("æ¶æ¯ï¼"+message); log.info("æ¶æ¯ï¼" + message); try { session.close(); AppPositionPush.stopLocationPushTask(session); //åæ¢å ¨å±æ¨é if (AppPositionPushService.userTimerMap.containsKey(userId)) { Timer timer = AppPositionPushService.userTimerMap.get(userId); AppPositionPushService.stopTimerTask(timer); AppPositionPushService.userTimerMap.remove(userId); } if (AppPositionPushService.tempUserTimerMap.containsKey(userId)) { Timer temptimer = AppPositionPushService.tempUserTimerMap.get(userId); AppPositionPushService.stopTimerTask(temptimer); AppPositionPushService.tempUserTimerMap.remove(userId); } AppPositionPushService.dataMap.remove(userId); AppPositionPushService.tempDataMap.remove(userId); // AppPositionPush.stopLocationPushTask(session);//æ§æ¹æ³ } catch (IOException e) { log.error("onClose error", e); } ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.rongcloud.service.RongCloudService; import com.ruoyi.system.service.ISysUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -20,6 +21,7 @@ * @Version: 1.0 **/ @Component("RongCloudTask") @Slf4j public class RongCloudTask { @Resource @@ -29,6 +31,7 @@ public void getAppUserOnlineStateTask() { try{ List<SysUser> SysUserList = sysUserService.selectAllAppUserList(new SysUser()); if(SysUserList.size()>0) { for (SysUser sysUser : SysUserList) { @@ -40,6 +43,10 @@ } sysUserService.updateUserProfile(sysUser); } }} catch (Exception ex) { log.error("èäºå¨çº¿æ¥å£å¼å¸¸ï¼"+ex.getMessage()); } } }