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;
|
}
|
|
}
|