From 3d296df1ff6f6c34a68d228f5766ebe44cf169e1 Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期五, 28 七月 2023 15:41:56 +0800 Subject: [PATCH] 三一车辆实时位置加入用户追踪提交 --- ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java | 9 +++ ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java | 10 +++ ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java | 5 + ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java | 12 ++++ ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 108 +++++++++++++++++++++++++++++++---- 5 files changed, 130 insertions(+), 14 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java index e275018..2cd4eef 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java +++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java @@ -368,4 +368,14 @@ String syURL = sysConfigService.getSYURL(); return ardSyCarService.getCarGPSBycarId(usersId,carId,syURL,ardSyUser); } + + @PreAuthorize("@ss.hasPermi('sy:syCar:chaseCarByCarId')") + @PostMapping("chaseCarByCarId") + @ApiOperation("鏍规嵁杞﹁締涓婚敭杩借釜杞﹁締") + public Results chaseCarByCarId(@RequestBody Map<String,String> map){ + String usersId = SecurityUtils.getUserId(); + String carId = map.get("carId"); + String cycle = map.get("cycle"); + return ardSyCarService.chaseCarByCarId(usersId,carId,cycle); + } } diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java index 3fc2048..e9f34fc 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java +++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java @@ -7,6 +7,8 @@ private static Map<String, Map<String,Map<String,Object>>> deptPositionMap = new HashMap();//渚濋儴闂ㄥ瓨鏀惧疄鏂借溅杈嗕綅缃�:deptId锛宑arId锛岃溅杈嗕綅缃� + private static Map<String, Map<String,Map<String,Object>>> userPositionMap = new HashMap();//渚濈敤鎴峰瓨鏀惧疄鏂借溅杈嗕綅缃�:userId锛宑arId锛岃溅杈嗕綅缃� + public static synchronized Map<String, Map<String, Map<String,Object>>> getDeptPositionMap() { return deptPositionMap; } @@ -15,4 +17,11 @@ PositionContainer.deptPositionMap = deptPositionMap; } + public static synchronized Map<String, Map<String, Map<String, Object>>> getUserPositionMap() { + return userPositionMap; + } + + public static synchronized void setUserPositionMap(Map<String, Map<String, Map<String, Object>>> userPositionMap) { + PositionContainer.userPositionMap = userPositionMap; + } } diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java index aa2e1b2..674d023 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java +++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java @@ -113,6 +113,18 @@ } } } + //瀛樺叆鐢ㄦ埛瀹瑰櫒 + if(PositionContainer.getUserPositionMap().size() != 0){ + for(String userId : PositionContainer.getUserPositionMap().keySet()){ + Map<String,Map<String,Object>> carIdCarMap = PositionContainer.getUserPositionMap().get(userId); + if(carIdCarMap.keySet().contains(carId)){ + PositionContainer.getUserPositionMap().get(userId).put(carId,gpsMap); + } + } + } + + + } /** * diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java index e5c549f..1e33ba0 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java @@ -125,4 +125,9 @@ Results getCarGPSBycarId(String usersId,String carId,String syURL,ArdSyUser ardSyUser); + /** + * 鏍规嵁鐢ㄦ埛鍙婅溅杈嗕富閿拷韪溅杈� + */ + Results chaseCarByCarId(String usersId,String carId,String cycle); + } 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 a706028..98b5782 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,36 @@ @Override public void sendArdSyCarPosition() { for(String key : ONLINE_USER_SESSIONS.keySet()){ - SysUser sysUser = userMapper.selectUserById(key); - if(sysUser == null){ - return; - } - 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)); + 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)); + } } } } @@ -677,4 +696,65 @@ 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) { + if(ONLINE_USER_SESSIONS.get(usersId) == null){ + userCarTimerMap.get(usersId).cancel(); + userCarTimerMap.remove(usersId); + PositionContainer.getUserPositionMap().remove(usersId); + return Results.succeed("鍋滄杩借釜"); + } + 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