Xiajijian
2026-02-05 537cf9cd1e3ac2e03655cc1d062dad8abc193a9a
1. 最后提交所有修改。
2 files added
7 files modified
163 ■■■■■ changed files
ard-admin/src/main/java/com/ard/web/controller/route/ArdRouteMissionController.java 8 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java 25 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/mapper/ArdRouteMissionMapper.java 2 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/IArdRouteMissionService.java 6 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteMissionServiceImpl.java 34 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java 36 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/websocket/handler/MiWebSocketHandler.java 24 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/websocket/utils/MiWebSocketUtils.java 24 ●●●●● patch | view | raw | blame | history
ard-route/src/main/resources/mapper/ArdRouteMissionMapper.xml 4 ●●●●● patch | view | raw | blame | history
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));
    }
}
ard-route/src/main/java/com/ard/route/domain/route/UpdateMission.java
New file
@@ -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;
}
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);
}
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);
}
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);
    }
}
ard-route/src/main/java/com/ard/route/websocket/MiWebSocketSessionManager.java
New file
@@ -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);
    }
}
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());
    }
}
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 客户端
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>