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/service/impl/ArdSyCarServiceImpl.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 96 insertions(+), 17 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 f8d9e5e..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,19 +1,15 @@ 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; 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 +35,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涓氬姟灞傚鐞� @@ -65,6 +61,8 @@ private SYClient sYClient; private Map<Integer,Map<String,String>> logInMap = new HashMap(); + + private Map<String, Timer> userCarTimerMap = new HashMap(); /** * 鏌ヨ涓変竴杞﹁締 @@ -365,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)); + } } } } @@ -678,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