update 优化 使用 record 简化实体类编码

This commit is contained in:
疯狂的狮子Li
2026-03-17 19:52:46 +08:00
parent 13aae27579
commit fcfa5eb767
30 changed files with 148 additions and 370 deletions

View File

@@ -1,30 +1,14 @@
package org.dromara.common.core.domain.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 抄送
*
* @param userId 抄送用户 ID
* @param nickName 抄送用户昵称
* @author may
*/
@Data
public class FlowCopyDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
private Long userId;
/**
* 用户昵称
*/
private String nickName;
public record FlowCopyDTO(
Long userId,
String nickName
) {
}

View File

@@ -1,30 +1,14 @@
package org.dromara.common.core.domain.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 启动流程后的返回结果对象。
*
* @param processInstanceId 流程实例 ID
* @param taskId 首个任务 ID
* @author Lion Li
*/
@Data
public class StartProcessReturnDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private Long processInstanceId;
/**
* 任务id
*/
private Long taskId;
public record StartProcessReturnDTO(
Long processInstanceId,
Long taskId
) {
}

View File

@@ -162,7 +162,7 @@ public class OssClient {
String eTag = uploadResult.response().eTag();
// 提取上传结果中的 ETag并构建一个自定义的 UploadResult 对象
return UploadResult.builder().url(getUrl() + StringUtils.SLASH + key).filename(key).eTag(eTag).build();
return new UploadResult(getUrl() + StringUtils.SLASH + key, key, eTag);
} catch (Exception e) {
// 捕获异常并抛出自定义异常
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
@@ -220,7 +220,7 @@ public class OssClient {
String eTag = uploadResult.response().eTag();
// 提取上传结果中的 ETag并构建一个自定义的 UploadResult 对象
return UploadResult.builder().url(getUrl() + StringUtils.SLASH + key).filename(key).eTag(eTag).build();
return new UploadResult(getUrl() + StringUtils.SLASH + key, key, eTag);
} catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
}

View File

@@ -1,30 +1,16 @@
package org.dromara.common.oss.entity;
import lombok.Builder;
import lombok.Data;
/**
* 上传返回体
*
* @param url 文件访问地址
* @param filename 文件名
* @param eTag 存储服务返回的 ETag
* @author Lion Li
*/
@Data
@Builder
public class UploadResult {
/**
* 文件路径
*/
private String url;
/**
* 文件名
*/
private String filename;
/**
* 已上传对象的实体标记(用来校验文件)
*/
private String eTag;
public record UploadResult(
String url,
String filename,
String eTag
) {
}

View File

@@ -205,12 +205,10 @@ public class SseEmitterManager {
* @param sseMessageDTO 要发布的SSE消息对象
*/
public void publishMessage(SseMessageDTO sseMessageDTO) {
SseMessageDTO broadcastMessage = new SseMessageDTO();
broadcastMessage.setMessage(sseMessageDTO.getMessage());
broadcastMessage.setUserIds(sseMessageDTO.getUserIds());
SseMessageDTO broadcastMessage = new SseMessageDTO(sseMessageDTO.userIds(), sseMessageDTO.message());
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
log.info("SSE发送主题订阅消息topic:{} session keys:{} message:{}",
SSE_TOPIC, sseMessageDTO.getUserIds(), sseMessageDTO.getMessage());
SSE_TOPIC, sseMessageDTO.userIds(), sseMessageDTO.message());
});
}
@@ -220,8 +218,7 @@ public class SseEmitterManager {
* @param message 要发布的消息内容
*/
public void publishAll(String message) {
SseMessageDTO broadcastMessage = new SseMessageDTO();
broadcastMessage.setMessage(message);
SseMessageDTO broadcastMessage = new SseMessageDTO(null, message);
RedisUtils.publish(SSE_TOPIC, broadcastMessage, consumer -> {
log.info("SSE发送主题订阅消息topic:{} message:{}", SSE_TOPIC, message);
});

View File

@@ -1,29 +1,16 @@
package org.dromara.common.sse.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 消息的DTO
*
* @param userIds 接收消息的用户 ID 列表
* @param message 推送消息内容
* @author zendwang
*/
@Data
public class SseMessageDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 需要推送到的session key 列表
*/
private List<Long> userIds;
/**
* 需要发送的消息
*/
private String message;
public record SseMessageDTO(
List<Long> userIds,
String message
) {
}

View File

@@ -28,14 +28,14 @@ public class SseTopicListener implements ApplicationRunner, Ordered {
@Override
public void run(ApplicationArguments args) throws Exception {
sseEmitterManager.subscribeMessage((message) -> {
log.info("SSE主题订阅收到消息session keys={} message={}", message.getUserIds(), message.getMessage());
log.info("SSE主题订阅收到消息session keys={} message={}", message.userIds(), message.message());
// 如果key不为空就按照key发消息 如果为空就群发
if (CollUtil.isNotEmpty(message.getUserIds())) {
message.getUserIds().forEach(key -> {
sseEmitterManager.sendMessage(key, message.getMessage());
if (CollUtil.isNotEmpty(message.userIds())) {
message.userIds().forEach(key -> {
sseEmitterManager.sendMessage(key, message.message());
});
} else {
sseEmitterManager.sendMessage(message.getMessage());
sseEmitterManager.sendMessage(message.message());
}
});
log.info("初始化SSE主题订阅监听器成功");

View File

@@ -1,29 +1,16 @@
package org.dromara.common.websocket.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 消息的DTO
*
* @param sessionKeys WebSocket 会话标识列表
* @param message 推送消息内容
* @author zendwang
*/
@Data
public class WebSocketMessageDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 需要推送到的session key 列表
*/
private List<Long> sessionKeys;
/**
* 需要发送的消息
*/
private String message;
public record WebSocketMessageDTO(
List<Long> sessionKeys,
String message
) {
}

View File

@@ -51,9 +51,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
// 创建WebSocket消息DTO对象
WebSocketMessageDTO messageDTO = new WebSocketMessageDTO();
messageDTO.setSessionKeys(List.of(loginUser.getUserId()));
messageDTO.setMessage(message.getPayload());
WebSocketMessageDTO messageDTO = new WebSocketMessageDTO(List.of(loginUser.getUserId()), message.getPayload());
WebSocketUtils.publishMessage(messageDTO);
}

View File

@@ -26,17 +26,17 @@ public class WebSocketTopicListener implements ApplicationRunner, Ordered {
public void run(ApplicationArguments args) throws Exception {
// 订阅WebSocket消息
WebSocketUtils.subscribeMessage((message) -> {
log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage());
log.info("WebSocket主题订阅收到消息session keys={} message={}", message.sessionKeys(), message.message());
// 如果key不为空就按照key发消息 如果为空就群发
if (CollUtil.isNotEmpty(message.getSessionKeys())) {
message.getSessionKeys().forEach(key -> {
if (CollUtil.isNotEmpty(message.sessionKeys())) {
message.sessionKeys().forEach(key -> {
if (WebSocketSessionHolder.existSession(key)) {
WebSocketUtils.sendMessage(key, message.getMessage());
WebSocketUtils.sendMessage(key, message.message());
}
});
} else {
WebSocketSessionHolder.getSessionsAll().forEach(key -> {
WebSocketUtils.sendMessage(key, message.getMessage());
WebSocketUtils.sendMessage(key, message.message());
});
}
});

View File

@@ -56,21 +56,19 @@ public class WebSocketUtils {
public static void publishMessage(WebSocketMessageDTO webSocketMessage) {
List<Long> unsentSessionKeys = new ArrayList<>();
// 当前服务内session,直接发送消息
for (Long sessionKey : webSocketMessage.getSessionKeys()) {
for (Long sessionKey : webSocketMessage.sessionKeys()) {
if (WebSocketSessionHolder.existSession(sessionKey)) {
WebSocketUtils.sendMessage(sessionKey, webSocketMessage.getMessage());
WebSocketUtils.sendMessage(sessionKey, webSocketMessage.message());
continue;
}
unsentSessionKeys.add(sessionKey);
}
// 不在当前服务内session,发布订阅消息
if (CollUtil.isNotEmpty(unsentSessionKeys)) {
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO();
broadcastMessage.setMessage(webSocketMessage.getMessage());
broadcastMessage.setSessionKeys(unsentSessionKeys);
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO(unsentSessionKeys, webSocketMessage.message());
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
log.info(" WebSocket发送主题订阅消息topic:{} session keys:{} message:{}",
WEB_SOCKET_TOPIC, unsentSessionKeys, webSocketMessage.getMessage());
WEB_SOCKET_TOPIC, unsentSessionKeys, webSocketMessage.message());
});
}
}
@@ -81,8 +79,7 @@ public class WebSocketUtils {
* @param message 要发布的消息内容
*/
public static void publishAll(String message) {
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO();
broadcastMessage.setMessage(message);
WebSocketMessageDTO broadcastMessage = new WebSocketMessageDTO(null, message);
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
});