From 9dffc4017e36f2beae5471e4accc4e26f8d14dcb Mon Sep 17 00:00:00 2001 From: jack ning Date: Sat, 21 Jun 2025 21:18:40 +0800 Subject: [PATCH] update modules/service: mod 2 files --- .../MessageUnreadEventListener.java | 3 +- .../MessageUnreadRestService.java | 79 +++++++++++++++---- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadEventListener.java b/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadEventListener.java index e86e75d101..85d213eb10 100644 --- a/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadEventListener.java +++ b/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadEventListener.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-07-01 12:37:41 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-21 17:55:20 + * @LastEditTime: 2025-06-21 21:14:38 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -70,6 +70,7 @@ public class MessageUnreadEventListener { log.error("Error processing message create event for message {}: {}", event.getMessage() != null ? event.getMessage().getUid() : "unknown", e.getMessage(), e); // 不重新抛出异常,避免影响其他事件处理 + // 对于未读消息处理失败,我们选择记录错误而不是中断消息流程 } } diff --git a/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadRestService.java b/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadRestService.java index 815dea6986..23a0701d1b 100644 --- a/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadRestService.java +++ b/modules/service/src/main/java/com/bytedesk/service/message_unread/MessageUnreadRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-06-28 17:19:02 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-06-21 18:02:16 + * @LastEditTime: 2025-06-21 21:18:26 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -40,7 +40,8 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service @AllArgsConstructor -public class MessageUnreadRestService extends BaseRestService { +public class MessageUnreadRestService + extends BaseRestService { private final MessageUnreadRepository messageUnreadRepository; @@ -98,17 +99,32 @@ public class MessageUnreadRestService extends BaseRestService existing = messageUnreadRepository.findByUid(message.getUid()); if (existing.isPresent()) { log.debug("Message unread already exists for message: {}", message.getUid()); return; } - - MessageUnreadEntity messageUnread = modelMapper.map(message, MessageUnreadEntity.class); - // messageUnread.setUserUid(userUid); + + // 创建新的 MessageUnreadEntity,避免复制 version 字段 + MessageUnreadEntity messageUnread = MessageUnreadEntity.builder() + .uid(message.getUid()) + .type(message.getType()) + .status(message.getStatus()) + .content(message.getContent()) + .extra(message.getExtra()) + .client(message.getClient()) + .user(message.getUser()) + .userUid(message.getUserUid()) + .orgUid(message.getOrgUid()) + .level(message.getLevel()) + .platform(message.getPlatform()) + .build(); + MessageUnreadEntity savedMessageUnread = save(messageUnread); log.info("create message unread: {}", savedMessageUnread); + } @Transactional @@ -116,22 +132,38 @@ public class MessageUnreadRestService extends BaseRestService existing = messageUnreadRepository.findByUid(entity.getUid()); if (existing.isPresent()) { - log.info("MessageUnreadEntity already exists, skipping creation: {}", entity.getUid()); + log.info("MessageUnreadEntity already exists, returning existing entity: {}", entity.getUid()); return existing.get(); } - - // 如果不存在,重新尝试保存 + + // 如果不存在,重新尝试保存,但使用新的实体避免版本冲突 log.info("Retrying to save MessageUnreadEntity: {}", entity.getUid()); - return messageUnreadRepository.save(entity); - + MessageUnreadEntity newEntity = MessageUnreadEntity.builder() + .uid(entity.getUid()) + .type(entity.getType()) + .status(entity.getStatus()) + .content(entity.getContent()) + .extra(entity.getExtra()) + .client(entity.getClient()) + .user(entity.getUser()) + .userUid(entity.getUserUid()) + .orgUid(entity.getOrgUid()) + .level(entity.getLevel()) + .platform(entity.getPlatform()) + .build(); + + return messageUnreadRepository.save(newEntity); + } catch (Exception ex) { - log.error("Failed to handle optimistic locking exception for MessageUnreadEntity {}: {}", - entity.getUid(), ex.getMessage(), ex); + log.error("Failed to handle optimistic locking exception for MessageUnreadEntity {}: {}", + entity.getUid(), ex.getMessage(), ex); // 对于未读消息,如果处理失败,我们选择忽略而不是抛出异常 // 因为未读消息的丢失不会影响核心业务逻辑 return null; @@ -194,5 +240,4 @@ public class MessageUnreadRestService extends BaseRestService