From 537cf9cd1e3ac2e03655cc1d062dad8abc193a9a Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Thu, 05 Feb 2026 20:18:05 +0800
Subject: [PATCH] 1. 最后提交所有修改。

---
 ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java               |   25 ++++++++
 ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java     |   24 +++++--
 ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java         |   24 +++++---
 ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java             |    2 
 ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java      |   36 ++++++++++++
 ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java          |    6 +-
 ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java |    8 +-
 ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java  |   34 ++++++++++-
 ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml                       |    4 
 9 files changed, 133 insertions(+), 30 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java
index e999013..d6b7935 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java
@@ -3,6 +3,7 @@
 import java.util.List;
 
 import com.ard.route.domain.route.ArdRouteMission;
+import com.ard.route.domain.route.UpdateMission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -110,10 +111,9 @@
      */
     @ApiOperation("批量修改航线任务已读状态")
     @Log(title = "航线任务", businessType = BusinessType.UPDATE)
-    @PutMapping("editIsRead/{ids}/{isRead}")
-    public AjaxResult editIsRead(@PathVariable String[] ids,
-                                 @PathVariable String isRead) {
-        return toAjax(ardRouteMissionService.updateIsRead(ids,isRead));
+    @PutMapping("editIsRead")
+    public AjaxResult editIsRead(@RequestBody UpdateMission updateMission) {
+        return toAjax(ardRouteMissionService.updateIsRead(updateMission));
     }
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java b/ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java
new file mode 100644
index 0000000..ba1436f
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java
@@ -0,0 +1,25 @@
+package com.ard.route.domain.route;
+
+import lombok.Data;
+
+/**
+ * 批量修改已读类型实体
+ *
+ * @author xia
+ */
+@Data
+public class UpdateMission {
+
+    /**
+     * 主键集合
+     */
+    private String[] ids;
+
+    /**
+     * 是否已读
+     * 0:否
+     * 1:是
+     * */
+    private String isRead;
+
+}
diff --git a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java
index 2d55ae3..883db24 100644
--- a/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java
+++ b/ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java
@@ -77,6 +77,6 @@
      * @param isRead 已读状态
      * @return 结果
      */
-    public int updateIsRead(@Param("id")String[] ids,@Param("isRead")String isRead);
+    public int updateIsRead(@Param("ids")String[] ids, @Param("isRead")String isRead);
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java b/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java
index e2e55d4..3b85e5e 100644
--- a/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java
+++ b/ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java
@@ -1,6 +1,7 @@
 package com.ard.route.service;
 
 import com.ard.route.domain.route.ArdRouteMission;
+import com.ard.route.domain.route.UpdateMission;
 
 import java.util.List;
 
@@ -72,10 +73,9 @@
     /**
      * 批量修改航线任务已读状态
      *
-     * @param ids 主键集合
-     * @param isRead 已读状态
+     * @param updateMission 批量修改已读类型实体
      * @return 结果
      */
-    public int updateIsRead(String[] ids,String isRead);
+    public int updateIsRead(UpdateMission updateMission);
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
index e23626c..686d42a 100644
--- a/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
+++ b/ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java
@@ -9,11 +9,13 @@
 import com.ard.common.utils.uuid.IdUtils;
 import com.ard.route.domain.route.ArdRouteMission;
 import com.ard.route.domain.route.ArdRoutePoint;
+import com.ard.route.domain.route.UpdateMission;
 import com.ard.route.mapper.ArdRoutePointMapper;
 import com.ard.route.websocket.utils.MiWebSocketUtils;
 import com.ard.system.mapper.SysUserMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import com.ard.route.mapper.ArdRouteMissionMapper;
 import com.ard.route.service.IArdRouteMissionService;
@@ -82,6 +84,7 @@
         ardRouteMission.setExecuteStatus("0");
         ardRouteMission.setIsRead("0");
         ardRouteMission.setCreateTime(DateUtils.getNowDate());
+        ardRouteMission.setIssuerTime(DateUtils.getNowDate());
         ardRouteMission.setIssuerName(getUserName(ardRouteMission.getIssuerId()));
         dataProcessingRoutePoint(ardRouteMission.getMissionDetailList(),ardRouteMission.getId());
         try {
@@ -92,6 +95,25 @@
         }
         return ardRouteMissionMapper.insertArdRouteMission(ardRouteMission);
     }
+
+//    /**
+//     * 定时任务,定时发送新增航线任务消息
+//     */
+//    @Scheduled(fixedRate = 2000)
+//    public void sendMissionMessage() {
+//        ArdRouteMission ardRouteMission = new ArdRouteMission();
+//        ardRouteMission.setIsRead("0");
+//        // 获取所有未读的消息给
+//        List<ArdRouteMission> routeMissionLs = ardRouteMissionMapper.selectArdRouteMissionList(ardRouteMission);
+//        for (ArdRouteMission routeMissionL : routeMissionLs) {
+//           if (routeMissionL.getIssuerId() != null){
+//               List<ArdRoutePoint> missionDetailList = ardRoutePointMapper.selectArdRoutePointByMissionId(routeMissionL.getId());
+//               routeMissionL.setMissionDetailList(missionDetailList);
+//               MiWebSocketUtils.sendMessage(routeMissionL.getIssuerId(),JSON.toJSONString(routeMissionL));
+//           }
+//        }
+//    }
+
 
     /**
      * 修改航线任务
@@ -172,13 +194,17 @@
     /**
      * 批量修改航线任务已读状态
      *
-     * @param ids 主键集合
-     * @param isRead 已读状态
+     * @param updateMission 批量修改已读类型实体
      * @return 结果
      */
     @Override
-    public int updateIsRead(String[] ids, String isRead) {
-        return ardRouteMissionMapper.updateIsRead(ids,isRead);
+    public int updateIsRead(UpdateMission updateMission) {
+        if (updateMission == null || updateMission.getIds() == null || updateMission.getIds().length == 0) {
+            return 0;
+        }
+        String[] ids = updateMission.getIds();
+        String isRead = updateMission.getIsRead();
+        return ardRouteMissionMapper.updateIsRead(ids, isRead);
     }
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java b/ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java
new file mode 100644
index 0000000..24e0c23
--- /dev/null
+++ b/ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java
@@ -0,0 +1,36 @@
+package com.ard.route.websocket;
+
+import com.ard.work.component.websocket.utils.WebSocketUtil;
+import org.springframework.web.socket.WebSocketSession;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+public class MiWebSocketSessionManager {
+    private static final ConcurrentMap<Long, WebSocketSession> ONLINE_USER_SESSIONS = new ConcurrentHashMap<>();
+
+    public static void addSession(Long userId, WebSocketSession session) {
+        ONLINE_USER_SESSIONS.put(userId, session);
+    }
+
+    public static void removeSession(Long userId) {
+        ONLINE_USER_SESSIONS.remove(userId);
+    }
+
+    public static WebSocketSession getSession(Long userId) {
+        return ONLINE_USER_SESSIONS.get(userId);
+    }
+
+    public static void broadcast(String message) {
+        ONLINE_USER_SESSIONS.forEach((userId, session) -> WebSocketUtil.sendMessage(session, message));
+    }
+
+    //返回当前在线用户数
+    public static int getOnlineUserCount() {
+        return ONLINE_USER_SESSIONS.size();
+    }
+
+    public static boolean containsUser(Long userId) {
+        return ONLINE_USER_SESSIONS.containsKey(userId);
+    }
+}
diff --git a/ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java b/ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java
index 9228529..d92599e 100644
--- a/ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java
+++ b/ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java
@@ -1,5 +1,6 @@
 package com.ard.route.websocket.handler;
 
+import com.ard.route.websocket.MiWebSocketSessionManager;
 import com.ard.route.websocket.utils.MiWebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -17,23 +18,32 @@
         // 处理接收到的消息
         String payload = message.getPayload();
         log.info("【mi_websocket】Received message: " + payload);
-        log.info("【mi_websocket】size: " + MiWebSocketUtils.ONLINE_USER_SESSIONS.size());
+        log.info("【mi_websocket】size: " + MiWebSocketSessionManager.getOnlineUserCount());
     }
 
     @Override
     public void afterConnectionEstablished(WebSocketSession session) {
+        String userIdStr = (String) session.getAttributes().get("userId");
+        if (userIdStr == null || userIdStr.isBlank()) {
+            return;
+        }
+        Long userId = Long.parseLong(userIdStr);
         log.info("【mi_websocket】Connected: " + session.getId());
-        String userId = (String) session.getAttributes().get("userId");
-        MiWebSocketUtils.ONLINE_USER_SESSIONS.put(userId, session);
-        log.info("【mi_websocket】size: " + MiWebSocketUtils.ONLINE_USER_SESSIONS.size());
+        MiWebSocketSessionManager.addSession(userId, session);
+        log.info("【mi_websocket】size: " + MiWebSocketSessionManager.getOnlineUserCount());
     }
 
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+        String userIdStr = (String) session.getAttributes().get("userId");
+        if (userIdStr == null || userIdStr.isBlank()) {
+            return;
+        }
+        Long userId = Long.parseLong(userIdStr);
+        MiWebSocketSessionManager.removeSession(userId);
         log.info("【mi_websocket】Disconnected: " + session.getId());
-        String userId = (String) session.getAttributes().get("userId");
-        MiWebSocketUtils.ONLINE_USER_SESSIONS.remove(userId);
-        log.info("【mi_websocket】size: " + MiWebSocketUtils.ONLINE_USER_SESSIONS.size());
+        MiWebSocketSessionManager.removeSession(userId);
+        log.info("【mi_websocket】size: " + MiWebSocketSessionManager.getOnlineUserCount());
     }
 
 }
diff --git a/ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java b/ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java
index eae6628..7bd1e53 100644
--- a/ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java
+++ b/ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.ard.route.websocket.MiWebSocketSessionManager;
 import com.ard.work.component.websocket.WebSocketSessionManager;
 import com.ard.work.component.websocket.utils.WebSocketUtil;
 import com.ard.work.domain.message.BaseMessage;
@@ -13,14 +14,9 @@
 import java.net.InetSocketAddress;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
 @Slf4j
 public class MiWebSocketUtils {
-
-    // 用于存储所有打开的WebSocket会话
-    public static final ConcurrentMap<String, WebSocketSession> ONLINE_USER_SESSIONS = new ConcurrentHashMap<>();
 
     /**
      * @param session 用户 session
@@ -45,7 +41,7 @@
     }
 
     public static void sendMessage(Long userId, String message) {
-        WebSocketSession session = WebSocketSessionManager.getSession(userId);
+        WebSocketSession session = MiWebSocketSessionManager.getSession(userId);
         sendMessage(session, message);
     }
 
@@ -93,7 +89,7 @@
      * @param message
      */
     public static void sendMessageAll(String message) {
-        ONLINE_USER_SESSIONS.forEach((sessionId, session) -> sendMessage(session, message));
+        MiWebSocketSessionManager.broadcast(message);
     }
 
     /**
@@ -103,7 +99,17 @@
      */
     public static void sendMessageAll(Map message) {
         JSONObject jsonObject = new JSONObject(message);
-        ONLINE_USER_SESSIONS.forEach((sessionId, session) -> sendMessage(session, jsonObject.toString()));
+        MiWebSocketSessionManager.broadcast(jsonObject.toString());
+    }
+
+    /**
+     * 推送消息到其他客户端
+     *
+     * @param message
+     */
+    public static void sendMessageAll(Object message) {
+        String jsonMessage = JSONObject.toJSONString(message);  // 确保对象转换为 JSON 字符串
+        WebSocketSessionManager.broadcast(jsonMessage);
     }
 
     /**
@@ -112,7 +118,7 @@
      * @param message
      */
     public static void sendMessageAll(List message) {
-        ONLINE_USER_SESSIONS.forEach((sessionId, session) -> sendMessage(session, JSON.toJSONString(message)));
+        WebSocketSessionManager.broadcast(JSON.toJSONString(message));
     }
 
     // 发送消息到所有 WebSocket 客户端
diff --git a/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml b/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml
index b3c6aef..cdd6096 100644
--- a/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml
+++ b/ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml
@@ -164,10 +164,10 @@
     <update id="updateIsRead">
         update ard_route_mission
         <trim prefix="SET" suffixOverrides=",">
-            <if test="isRead != null">is_read = #{isRead},</if>
+            <if test="isRead != null and isRead != ''">is_read = #{isRead},</if>
         </trim>
         where id in
-        <foreach item="id" collection="array" open="(" separator="," close=")">
+        <foreach item="id" collection="ids" open="(" separator="," close=")">
             #{id}
         </foreach>
     </update>

--
Gitblit v1.9.3