From 35a6dfa7e9ed8474223379564efe103f9e880f5c Mon Sep 17 00:00:00 2001 From: easonzhu Date: Fri, 14 Feb 2025 17:20:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ws=E5=B7=B2=E8=AF=BB=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppGroupMessageController.java | 8 +++++ .../service/app/AppGroupMessageService.java | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/main/java/com/upchina/group/controller/app/AppGroupMessageController.java b/src/main/java/com/upchina/group/controller/app/AppGroupMessageController.java index 274d3a3..63b1471 100644 --- a/src/main/java/com/upchina/group/controller/app/AppGroupMessageController.java +++ b/src/main/java/com/upchina/group/controller/app/AppGroupMessageController.java @@ -14,6 +14,8 @@ import com.upchina.group.vo.message.GroupMessageVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestAttribute; @@ -68,4 +70,10 @@ public class AppGroupMessageController { return CommonResult.success(count); } + @ApiOperation("WebSocket保存消息已读") + @MessageMapping("/chat/group/readMessage") + public void readMessage(SimpMessageHeaderAccessor accessor) { + appGroupMessageService.readMessage(accessor); + } + } \ No newline at end of file diff --git a/src/main/java/com/upchina/group/service/app/AppGroupMessageService.java b/src/main/java/com/upchina/group/service/app/AppGroupMessageService.java index 1da5bd7..4b564e7 100644 --- a/src/main/java/com/upchina/group/service/app/AppGroupMessageService.java +++ b/src/main/java/com/upchina/group/service/app/AppGroupMessageService.java @@ -1,5 +1,6 @@ package com.upchina.group.service.app; +import cn.hutool.core.util.StrUtil; import com.upchina.advisor.service.AdvisorInfoService; import com.upchina.advisor.vo.AdvisorBasicVO; import com.upchina.common.constant.IsOrNot; @@ -11,6 +12,7 @@ import com.upchina.common.result.ResponseStatus; import com.upchina.common.service.CommentBlackService; import com.upchina.common.service.SensitiveWordService; import com.upchina.common.util.TextUtil; +import com.upchina.common.util.logger.LoggerUtil; import com.upchina.common.vo.FrontUserVO; import com.upchina.group.constant.GroupInteractiveType; import com.upchina.group.constant.GroupMessageStatus; @@ -28,6 +30,7 @@ import com.upchina.group.service.common.GroupMessageService; import com.upchina.group.vo.GroupVO; import com.upchina.group.vo.message.GroupMessageReadVO; import com.upchina.group.vo.message.GroupMessageVO; +import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -135,6 +138,33 @@ public class AppGroupMessageService { groupCacheService.readMessage(vo); } + public void readMessage(SimpMessageHeaderAccessor accessor) { + Map attributes = accessor.getSessionAttributes(); + if (attributes == null) { + LoggerUtil.error("readMessage用户未登录"); + throw new BizException(ResponseStatus.SESSION_EXPIRY, "readMessage用户未登录"); + } + String userId = (String) attributes.get("userId"); + if (StrUtil.isEmpty(userId)) { + throw new BizException(ResponseStatus.PARM_ERROR, "用户ID错误:" + userId); + } + String messageIds = (String) attributes.get("messageIds"); + if (StrUtil.isEmpty(messageIds)) { + throw new BizException(ResponseStatus.PARM_ERROR, "消息ID错误:" + messageIds); + } + String[] ids = messageIds.split(","); + List list = new ArrayList<>(ids.length); + for (String id : ids) { + try { + list.add(Integer.parseInt(id)); + } catch (NumberFormatException e) { + throw new BizException(ResponseStatus.PARM_ERROR, "消息ID错误:" + messageIds); + } + } + GroupMessageReadVO vo = new GroupMessageReadVO(userId, list); + groupCacheService.readMessage(vo); + } + public Integer queryUnreadCount(QueryUnreadCountAppQuery query, FrontUserVO frontUser) { Integer groupId = query.getGroupId(); Integer lastId = query.getLastId(); @@ -147,4 +177,5 @@ public class AppGroupMessageService { } return sortedSet.size(); } + } \ No newline at end of file