¶Ô±ÈÐÂÎļþ |
| | |
| | | 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<>();//æ¯ä¸ªä¼è¯åå§åéæ°æ®map |
| | | |
| | | // åå§å®æ¶ä»»å¡ï¼æ ¹æ®ç¨æ·è®¾ç½®çé¢ç宿æ¨é宿¶ä½ç½®ä¿¡æ¯ |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | //æ¥è¯¢ææ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()); |
| | | for (SysUser sysUser : list) { |
| | | IArdAppPositionService ardAppPositionService = SpringUtils.getBean(IArdAppPositionService.class); |
| | | ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId()); |
| | | ArdAppPositions.add(ardAppPosition); |
| | | } |
| | | return ArdAppPositions; |
| | | } |
| | | } |
| | | |