liusuyi
2023-07-28 2c97f9adf61f846edbce4ef458400416f0003ff8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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;
    }
 
}