From 277b4f8a32c2332bc067a263bcce2e763e8d13aa Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Wed, 21 Jan 2026 16:38:01 +0800
Subject: [PATCH] 1. 新增航线任务接口。 2. 新增查询航线任务列表接口。 3. 新增获取航线任务详细信息。 4. 新增航线任务接口。 5. 新增修改航线任务接口。 6. 新增删除航线任务接口。 7. 新增修改航线任务状态接口。 8. 优化查询分组业务逻辑。 9. 航线(kmz)对象增加航线任务ID信息。 10. 新增航线(kmz)业务增加航线任务数据加工校验相关业务逻辑。 11. 新增航向任务下航点信息业务相关接口。
---
ard-work/src/main/java/com/ard/work/component/websocket/handler/BaseSubscriptionManager.java | 32 ++++++++++++++++++++------------
1 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/BaseSubscriptionManager.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/BaseSubscriptionManager.java
index 1a74d58..8d0db3e 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/BaseSubscriptionManager.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/BaseSubscriptionManager.java
@@ -16,17 +16,18 @@
// 存储订阅的用户
protected final Map<String, Set<Long>> subscriptions = new ConcurrentHashMap<>();
// 定时任务调度器
- protected final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ protected final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);
// 存储推送任务
protected final Map<String, ScheduledFuture<?>> pushTasks = new ConcurrentHashMap<>();
/**
* 订阅指定设备的数据
*/
- public void subscribe(String boxSn, Long userId,Integer period) {
- subscriptions.computeIfAbsent(boxSn, k -> new HashSet<>()).add(userId);
+ public void subscribe(String boxSn, Long userId, Integer period) {
+ subscriptions.computeIfAbsent(boxSn, k -> ConcurrentHashMap.newKeySet()).add(userId);
if (subscriptions.get(boxSn).size() == 1) {
- startPushTask(boxSn,period);
+ log.debug("首次订阅,启动推送任务");
+ startPushTask(boxSn, period);
}
}
@@ -34,25 +35,33 @@
* 取消订阅
*/
public void unsubscribe(String boxSn, Long userId) {
- Set<Long> userIds = subscriptions.get(boxSn);
- if (userIds != null) {
+ subscriptions.compute(boxSn, (key, userIds) -> {
+ if (userIds == null) {
+ return null;
+ }
userIds.remove(userId);
if (userIds.isEmpty()) {
stopPushTask(boxSn);
+ log.debug("无人订阅设备 {},移除订阅记录", boxSn);
+ return null; // 直接返回 null 等价于 remove(key)
}
- }
+ return userIds;
+ });
}
-
/**
* 启动推送任务
*/
- private void startPushTask(String boxSn,Integer period) {
+ private void startPushTask(String boxSn, Integer period) {
// 如果已经存在任务,则不再创建
if (pushTasks.containsKey(boxSn)) {
return;
}
ScheduledFuture<?> future = scheduler.scheduleAtFixedRate(() -> {
- sendDataToSubscribers(boxSn);
+ try {
+ sendDataToSubscribers(boxSn);
+ } catch (Exception e) {
+ log.error("Error in push task for boxSn={}", boxSn, e);
+ }
}, 0, period, TimeUnit.SECONDS);
pushTasks.put(boxSn, future);
@@ -79,7 +88,6 @@
}
-
/**
* 向订阅者发送数据
*/
@@ -90,7 +98,7 @@
if (userIds != null) {
for (Long userId : userIds) {
try {
- log.warn("给用户{}定时推送",userId);
+ log.debug("给用户{}定时推送", userId);
WebSocketUtil.sendMessage(userId, JSON.toJSONString(baseMessage));
} catch (Exception e) {
log.error("Error sending message to session {}", userId, e);
--
Gitblit v1.9.3