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