From c45ce58884c59ddf8a6051ba370215e6f62adeb8 Mon Sep 17 00:00:00 2001 From: Administrator <1144154118@qq.com> Date: 星期五, 28 七月 2023 10:11:55 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 92 insertions(+), 0 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java new file mode 100644 index 0000000..52ba743 --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java @@ -0,0 +1,92 @@ +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.spring.SpringUtils; +import com.ruoyi.utils.websocket.util.WebSocketUtils; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.websocket.Session; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * @Description: app浣嶇疆鎺ㄩ�� + * @ClassName: AppPositionPush + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�07鏈�25鏃�16:07:04 + * @Version: 1.0 + **/ +public class AppPositionPush { + + //app浣嶇疆涓婁紶 + public static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20); + public static final Map<Session, ScheduledFuture<?>> taskMap = new HashMap<>(); + public static final Map<String, List<ArdAppPosition>> initDataMap = new HashMap<>();//姣忎釜浼氳瘽鍒濆鍙戦�佹暟鎹甿ap + + // 鍒濆瀹氭椂浠诲姟锛屾牴鎹敤鎴疯缃殑棰戠巼瀹氭湡鎺ㄩ�佸疄鏃朵綅缃俊鎭� + public static void initPushTask(String userId, Session session, int pushFrequency) { + initDataMap.put(userId, getAppPositionList()); + // 鍚姩鏂扮殑瀹氭椂浠诲姟 + if (pushFrequency > 0) { + scheduler.scheduleAtFixedRate(() -> { + List<ArdAppPosition> appPositionList = initDataMap.get(userId); + Map newMap = new HashMap<>(); + newMap.put("50000", appPositionList); + WebSocketUtils.sendMessage(session, newMap); + }, 0, pushFrequency, TimeUnit.MILLISECONDS); + } + } + + // 鏂扮殑瀹氭椂浠诲姟锛屾牴鎹敤鎴疯缃殑棰戠巼瀹氭湡鎺ㄩ�佸疄鏃朵綅缃俊鎭� + public static void startLocationPushTask(String userId, Session session, String guideUserId, int pushFrequency) { + // 鍙栨秷涔嬪墠璁剧疆鐨勫畾鏃朵换鍔� + stopLocationPushTask(session); + // 鍚姩鏂扮殑瀹氭椂浠诲姟 + if (pushFrequency > 0) { + ScheduledFuture<?> task = scheduler.scheduleAtFixedRate(() -> { + List<ArdAppPosition> appPositionList = getAppPositionList().stream() + .filter(obj -> obj.getUserId().equals(guideUserId)) + .collect(Collectors.toList()); + Map newMap = new HashMap<>(); + newMap.put("50000", appPositionList); + WebSocketUtils.sendMessage(session, newMap); + }, 0, pushFrequency, TimeUnit.MILLISECONDS); + taskMap.put(session, task); // 瀛樺偍鏂扮殑瀹氭椂浠诲姟 + } + } + + //鍙栨秷瀹氭椂浠诲姟 + public static void stopLocationPushTask(Session session) { + ScheduledFuture<?> scheduledTask = taskMap.get(session); + if (scheduledTask != null) { + scheduledTask.cancel(false); + } + } + + //鏌ヨ鎵�鏈塧pp鐢ㄦ埛鐨勪綅缃俊鎭� + public static List<ArdAppPosition> getAppPositionList() { + List<ArdAppPosition> ArdAppPositions = new ArrayList<>(); + ISysUserService sysUserService = SpringUtils.getBean(ISysUserService.class); + //鑾峰彇鎵�鏈塧pp鐢ㄦ埛 + List<SysUser> list = sysUserService.selectAllAppUserList(new SysUser()); + for (SysUser sysUser : list) { + IArdAppPositionService ardAppPositionService = SpringUtils.getBean(IArdAppPositionService.class); + ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId()); + ArdAppPositions.add(ardAppPosition); + } + return ArdAppPositions; + } +} + -- Gitblit v1.9.3