mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-03-29 16:53:23 +08:00
update 完成消息盒子功能前后端联动(已读未读在前端浏览器存储)
This commit is contained in:
@@ -14,11 +14,16 @@ import java.io.Serializable;
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Data
|
||||
public class PushPayload implements Serializable {
|
||||
public class PushPayloadDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 消息记录ID
|
||||
*/
|
||||
private Long messageId;
|
||||
|
||||
/**
|
||||
* 消息类型
|
||||
*/
|
||||
@@ -49,8 +54,8 @@ public class PushPayload implements Serializable {
|
||||
*/
|
||||
private Long timestamp;
|
||||
|
||||
public static PushPayload of(String type, String source, String message, Object data) {
|
||||
PushPayload payload = new PushPayload();
|
||||
public static PushPayloadDTO of(String type, String source, String message, Object data) {
|
||||
PushPayloadDTO payload = new PushPayloadDTO();
|
||||
payload.setType(StringUtils.defaultIfBlank(type, PushTypeEnum.MESSAGE.getType()));
|
||||
payload.setSource(StringUtils.defaultIfBlank(source, PushSourceEnum.BACKEND.getSource()));
|
||||
payload.setMessage(message);
|
||||
@@ -59,7 +64,7 @@ public class PushPayload implements Serializable {
|
||||
return payload;
|
||||
}
|
||||
|
||||
public static PushPayload of(PushTypeEnum type, PushSourceEnum source, String message, Object data) {
|
||||
public static PushPayloadDTO of(PushTypeEnum type, PushSourceEnum source, String message, Object data) {
|
||||
return of(
|
||||
type == null ? null : type.getType(),
|
||||
source == null ? null : source.getSource(),
|
||||
@@ -68,8 +73,8 @@ public class PushPayload implements Serializable {
|
||||
);
|
||||
}
|
||||
|
||||
public static PushPayload of(PushTypeEnum type, PushSourceEnum source, String message, Object data, String path) {
|
||||
PushPayload payload = of(type, source, message, data);
|
||||
public static PushPayloadDTO of(PushTypeEnum type, PushSourceEnum source, String message, Object data, String path) {
|
||||
PushPayloadDTO payload = of(type, source, message, data);
|
||||
payload.setPath(path);
|
||||
return payload;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.dromara.common.core.service;
|
||||
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通用 消息服务
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
public interface MessageService {
|
||||
|
||||
void sendMessage(Long userId, String message);
|
||||
|
||||
void sendMessage(String message);
|
||||
|
||||
void sendMessage(Long userId, PushPayloadDTO payload);
|
||||
|
||||
void sendMessage(PushPayloadDTO payload);
|
||||
|
||||
void publishMessage(List<Long> userIds, PushPayloadDTO payload);
|
||||
|
||||
void publishAll(String message);
|
||||
|
||||
void publishAll(PushPayloadDTO payload);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public class SseController implements DisposableBean {
|
||||
// public R<Void> send(Long userId, String msg) {
|
||||
// PushDTO dto = new PushDTO();
|
||||
// dto.setUserIds(List.of(userId));
|
||||
// dto.setPayload(PushPayload.of("message", "backend", msg, null));
|
||||
// dto.setPayload(PushPayloadDTO.of("message", "backend", msg, null));
|
||||
// sessionManager.publishMessage(dto);
|
||||
// return R.ok();
|
||||
// }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.dromara.common.push.core;
|
||||
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
import org.dromara.common.push.dto.PushDTO;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
@@ -14,11 +14,11 @@ public interface PushSessionManager {
|
||||
|
||||
void subscribeMessage(Consumer<PushDTO> consumer);
|
||||
|
||||
void sendMessage(Long userId, PushPayload payload);
|
||||
void sendMessage(Long userId, PushPayloadDTO payload);
|
||||
|
||||
void sendMessage(PushPayload payload);
|
||||
void sendMessage(PushPayloadDTO payload);
|
||||
|
||||
void publishMessage(PushDTO pushDTO);
|
||||
|
||||
void publishAll(PushPayload payload);
|
||||
void publishAll(PushPayloadDTO payload);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.dromara.common.push.core;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
import org.dromara.common.push.constant.MessageConstants;
|
||||
import org.dromara.common.push.dto.PushDTO;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
@@ -194,7 +194,7 @@ public class SseEmitterSessionManager implements PushSessionManager {
|
||||
* @param payload 要发送的消息体
|
||||
*/
|
||||
@Override
|
||||
public void sendMessage(Long userId, PushPayload payload) {
|
||||
public void sendMessage(Long userId, PushPayloadDTO payload) {
|
||||
sendMessage(userId, JsonUtils.toJsonString(payload));
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ public class SseEmitterSessionManager implements PushSessionManager {
|
||||
* @param payload 要发送的消息体
|
||||
*/
|
||||
@Override
|
||||
public void sendMessage(PushPayload payload) {
|
||||
public void sendMessage(PushPayloadDTO payload) {
|
||||
sendMessage(JsonUtils.toJsonString(payload));
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ public class SseEmitterSessionManager implements PushSessionManager {
|
||||
* @param message 要发布的消息内容
|
||||
*/
|
||||
public void publishAll(String message) {
|
||||
publishAll(PushPayload.of("message", "backend", message, null));
|
||||
publishAll(PushPayloadDTO.of("message", "backend", message, null));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,7 +262,7 @@ public class SseEmitterSessionManager implements PushSessionManager {
|
||||
* @param payload 要发布的消息体
|
||||
*/
|
||||
@Override
|
||||
public void publishAll(PushPayload payload) {
|
||||
public void publishAll(PushPayloadDTO payload) {
|
||||
PushDTO dto = new PushDTO();
|
||||
dto.setPayload(payload);
|
||||
RedisUtils.publish(MessageConstants.MESSAGE_TOPIC, dto, consumer -> {
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.dromara.common.push.core;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.push.dto.PushDTO;
|
||||
@@ -90,7 +90,7 @@ public class WebSocketSessionManager implements PushSessionManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(Long userId, PushPayload payload) {
|
||||
public void sendMessage(Long userId, PushPayloadDTO payload) {
|
||||
if (payload == null) {
|
||||
return;
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class WebSocketSessionManager implements PushSessionManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(PushPayload payload) {
|
||||
public void sendMessage(PushPayloadDTO payload) {
|
||||
USER_TOKEN_SESSIONS.keySet().forEach(userId -> sendMessage(userId, payload));
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ public class WebSocketSessionManager implements PushSessionManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publishAll(PushPayload payload) {
|
||||
public void publishAll(PushPayloadDTO payload) {
|
||||
PushDTO dto = new PushDTO();
|
||||
dto.setPayload(payload);
|
||||
publishMessage(dto);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.dromara.common.push.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@@ -26,5 +26,5 @@ public class PushDTO implements Serializable {
|
||||
/**
|
||||
* 推送消息体。
|
||||
*/
|
||||
private PushPayload payload;
|
||||
private PushPayloadDTO payload;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.dromara.common.push.handler;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.enums.PushSourceEnum;
|
||||
import org.dromara.common.core.enums.PushTypeEnum;
|
||||
@@ -61,7 +61,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
|
||||
}
|
||||
PushDTO dto = new PushDTO();
|
||||
dto.setUserIds(List.of(loginUser.getUserId()));
|
||||
dto.setPayload(PushPayload.of(
|
||||
dto.setPayload(PushPayloadDTO.of(
|
||||
PushTypeEnum.CUSTOM,
|
||||
PushSourceEnum.CLIENT,
|
||||
message.getPayload(),
|
||||
|
||||
@@ -2,7 +2,7 @@ package org.dromara.common.push.helper;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.PushPayload;
|
||||
import org.dromara.common.core.domain.dto.PushPayloadDTO;
|
||||
import org.dromara.common.core.enums.PushSourceEnum;
|
||||
import org.dromara.common.core.enums.PushTypeEnum;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
@@ -27,21 +27,21 @@ public class PushHelper {
|
||||
sendMessage(buildMessage(message));
|
||||
}
|
||||
|
||||
public static void sendMessage(Long userId, PushPayload payload) {
|
||||
public static void sendMessage(Long userId, PushPayloadDTO payload) {
|
||||
if (!isEnabled()) {
|
||||
return;
|
||||
}
|
||||
getSessionManager().sendMessage(userId, payload);
|
||||
}
|
||||
|
||||
public static void sendMessage(PushPayload payload) {
|
||||
public static void sendMessage(PushPayloadDTO payload) {
|
||||
if (!isEnabled()) {
|
||||
return;
|
||||
}
|
||||
getSessionManager().sendMessage(payload);
|
||||
}
|
||||
|
||||
public static void publishMessage(List<Long> userIds, PushPayload payload) {
|
||||
public static void publishMessage(List<Long> userIds, PushPayloadDTO payload) {
|
||||
PushDTO dto = new PushDTO();
|
||||
dto.setUserIds(userIds);
|
||||
dto.setPayload(payload);
|
||||
@@ -59,7 +59,7 @@ public class PushHelper {
|
||||
publishAll(buildMessage(message));
|
||||
}
|
||||
|
||||
public static void publishAll(PushPayload payload) {
|
||||
public static void publishAll(PushPayloadDTO payload) {
|
||||
if (!isEnabled()) {
|
||||
return;
|
||||
}
|
||||
@@ -74,7 +74,7 @@ public class PushHelper {
|
||||
return SpringUtils.getBean(PushSessionManager.class);
|
||||
}
|
||||
|
||||
private static PushPayload buildMessage(String message) {
|
||||
return PushPayload.of(PushTypeEnum.MESSAGE, PushSourceEnum.BACKEND, message, null);
|
||||
private static PushPayloadDTO buildMessage(String message) {
|
||||
return PushPayloadDTO.of(PushTypeEnum.MESSAGE, PushSourceEnum.BACKEND, message, null);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user