From e4de256660e0e831d7c6be39fe5d61b35d15f788 Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期五, 28 七月 2023 16:19:29 +0800 Subject: [PATCH] 三一车辆实时位置追踪加入离线资源释放提交 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 123 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 110 insertions(+), 13 deletions(-) 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 99cf40a..f4d6bf2 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 @@ -1,10 +1,7 @@ package com.ruoyi.sy.service.impl; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -64,6 +61,8 @@ private SYClient sYClient; private Map<Integer,Map<String,String>> logInMap = new HashMap(); + + private Map<String, Timer> userCarTimerMap = new HashMap(); /** * 鏌ヨ涓変竴杞﹁締 @@ -364,16 +363,43 @@ @Override public void sendArdSyCarPosition() { for(String key : ONLINE_USER_SESSIONS.keySet()){ - SysUser sysUser = userMapper.selectUserById(key); - if(sysUser == null){ - return; + if(PositionContainer.getUserPositionMap().keySet().contains(key)){//褰撹拷韪殑杞﹁締瀹瑰櫒鍖呭惈姝ょ敤鎴稩d锛屽垯瀹炴椂浣嶇疆鎺ㄩ�侀渶瑕佸墧闄よ杞﹁締 + SysUser sysUser = userMapper.selectUserById(key); + if(sysUser == null){ + //return; + continue; + } + String deptId = String.valueOf(sysUser.getDeptId()); + Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); + List<String> carIdList = new ArrayList(); + carIdList.addAll(PositionContainer.getUserPositionMap().get(key).keySet()); + String carId = carIdList.get(0); + map.remove(carId); + if(map != null){ + Map<String,Object> data = new HashMap(); + data.put("30000", map.values()); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } + }else{ + SysUser sysUser = userMapper.selectUserById(key); + if(sysUser == null){ + //return; + continue; + } + String deptId = String.valueOf(sysUser.getDeptId()); + Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); + if(map != null){ + Map<String,Object> data = new HashMap(); + data.put("30000", map.values()); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } } - String deptId = String.valueOf(sysUser.getDeptId()); - Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); - if(map != null){ - Map<String,Object> data = new HashMap(); - data.put("30000", map.values()); - WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } + for(String userId : userCarTimerMap.keySet()){//鐢ㄦ埛绂荤嚎鍚庡皢杞﹁締杩借釜璧勬簮閲婃斁 + if(!ONLINE_USER_SESSIONS.keySet().contains(userId)){ + userCarTimerMap.get(userId).cancel(); + userCarTimerMap.remove(userId); + PositionContainer.getUserPositionMap().remove(userId); } } } @@ -661,4 +687,75 @@ return new HashMap<String,List<String>>(); } } + + @Override + public Results getCarGPSBycarId(String usersId,String carId,String syURL,ArdSyUser ardSyUser){ + Map<String, String> result = logInMap.get(Integer.parseInt(usersId)); + //31鐢ㄦ埛鍚嶅瘑鐮� + String username31 = ardSyUser.getUserId(); + String password31 = ardSyUser.getPassword(); + String passwordMd5 = DigestUtils.md5Hex(password31); + Map<String, Object> result1 = sYClient.logIn(syURL,passwordMd5, username31); + result = new HashMap(); + result.put("userId", username31); + result.put("sessionId", (String) result1.get("sessionId")); + Map<String,Object> result0 = new HashMap(); + result0 = sYClient.getCarNearPositionByCarId(syURL,carId,result.get("userId"),result.get("sessionId")); + return Results.succeed(result0); + } + + @Override + public Results chaseCarByCarId(String usersId, String carId, String cycle) { + try{ + Map<String,Map<String,Object>> map = new HashMap(); + map.put(carId,new HashMap()); + PositionContainer.getUserPositionMap().put(usersId,map); + if(cycle.equals("0")){ + if(userCarTimerMap.get(usersId) != null){ + userCarTimerMap.get(usersId).cancel(); + userCarTimerMap.remove(usersId); + PositionContainer.getUserPositionMap().remove(usersId); + } + return Results.succeed("鍋滄杩借釜"); + }else{ + if(userCarTimerMap.get(usersId) != null){ + userCarTimerMap.get(usersId).cancel(); + userCarTimerMap.remove(usersId); + PositionContainer.getUserPositionMap().remove(usersId); + Date date = new Date(); + Timer carPositionTimer = new Timer();//瀹氭椂鎺ㄩ�佸疄鏃朵綅缃� + TimerTask carPositionTask =new TimerTask(){ + @Override + public void run(){ + Map<String,Object> position = PositionContainer.getUserPositionMap().get(usersId).get(carId); + Map<String,Map<String,Object>> data = new HashMap(); + data.put("31000",position); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data)); + } + }; + carPositionTimer.scheduleAtFixedRate(carPositionTask,date,Integer.parseInt(cycle));//鍚敤 + this.userCarTimerMap.put(usersId,carPositionTimer); + return Results.succeed("寮�濮嬭拷韪�"); + }else{ + Date date = new Date(); + Timer carPositionTimer = new Timer();//瀹氭椂鎺ㄩ�佸疄鏃朵綅缃� + TimerTask carPositionTask =new TimerTask(){ + @Override + public void run(){ + Map<String,Object> position = PositionContainer.getUserPositionMap().get(usersId).get(carId); + Map<String,Map<String,Object>> data = new HashMap(); + data.put("31000",position); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data)); + } + }; + carPositionTimer.scheduleAtFixedRate(carPositionTask,date,Integer.parseInt(cycle));//鍚敤 + this.userCarTimerMap.put(usersId,carPositionTimer); + return Results.succeed("寮�濮嬭拷韪�"); + } + } + }catch(Exception e){ + e.printStackTrace(); + return Results.error("杩借釜澶辫触"); + } + } } -- Gitblit v1.9.3