From 2c45762c6669824121ab13f4e88aa4b855e4d2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Wed, 10 Sep 2025 19:41:11 +0800 Subject: [PATCH] =?UTF-8?q?09-10-netty=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/websocket/ChatServerHandler.java | 6 +- .../controller/ChatGroupController.java | 16 ++++-- .../dromara/websocket/domain/ChatHistory.java | 3 +- .../websocket/domain/vo/ChatHistoryVo.java | 55 +++++++++++++++++++ .../websocket/mapper/ChatHistoryMapper.java | 4 +- 5 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/vo/ChatHistoryVo.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java index 7b3ae02c..eea204e3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java @@ -143,6 +143,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler list = chatHistoryService.list(historyLambdaQueryWrapper); if (list != null && !list.isEmpty()) { roomCounts.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size()); + //连接后同步未读消息到内存中 + userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size()); } //在遍历的同时寻找是否有系统消息房间 if (chatGroup.getMembers().contains("[99")){ @@ -371,8 +373,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler idList = new ArrayList<>(Arrays.asList(ids)); idList.add(userId); - //在点击聊天 新建房间之前 判断是否已经有该房间 没有则创建 有再判断是否是隐藏 修改状态更新 + //在点击聊天 新建房间之前 判断是否已经有该房间 没有则创建 boolean isHave = false; LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (type.equals("0")){ @@ -66,6 +70,7 @@ public class ChatGroupController { ChatGroup chatGroup = new ChatGroup(); chatGroup.setMembers(idList.toString()); + chatGroup.setType(type); if (type.equals("1")){ if (name == null){ return R.fail("群聊名称不能为空"); @@ -124,19 +129,20 @@ public class ChatGroupController { */ // @SaCheckPermission("chatGroup:list:getHistory") @GetMapping("/groupChatRecord") - public R> groupChatRecord(@RequestParam Long id) { + public TableDataInfo groupChatRecord(@RequestParam Long id, PageQuery pageQuery) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // lambdaQueryWrapper.eq(ChatHistory::getGroupId,id).eq(ChatHistory::getType,"1"); lambdaQueryWrapper.eq(ChatHistory::getGeterId, id); - List list = chatHistoryService.list(lambdaQueryWrapper); - for (ChatHistory chatHistory : list) { + IPage chatHistoryVoIPage = chatHistoryService.getBaseMapper().selectVoPage(pageQuery.build(), lambdaQueryWrapper); +// List list = chatHistoryService.list(lambdaQueryWrapper); + for (ChatHistoryVo chatHistory : chatHistoryVoIPage.getRecords()) { SysUserVo sysUserVo = sysUserService.selectUserById(chatHistory.getSenderId()); if (sysUserVo != null){ chatHistory.setAvatar(sysUserVo.getAvatar()); chatHistory.setNickName(sysUserVo.getNickName()); } } - return R.ok(chatHistoryService.list(lambdaQueryWrapper)); + return TableDataInfo.build(chatHistoryVoIPage); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatHistory.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatHistory.java index c302f8b8..50bcedeb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatHistory.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatHistory.java @@ -8,11 +8,12 @@ import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import java.io.Serial; +import java.io.Serializable; import java.util.Date; @Data @TableName("chat_history") -public class ChatHistory { +public class ChatHistory implements Serializable { @Serial private static final long serialVersionUID = 1L; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/vo/ChatHistoryVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/vo/ChatHistoryVo.java new file mode 100644 index 00000000..c5ef3bb3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/vo/ChatHistoryVo.java @@ -0,0 +1,55 @@ +package org.dromara.websocket.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.tender.domain.BusBiddingPlanAnnex; +import org.dromara.websocket.domain.ChatHistory; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ChatHistory.class) +public class ChatHistoryVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + + private Long senderId; + + /*** + * 接收房间id + */ + private Long geterId; + + private String message; + + private Date messageDate; + + /** + * 发送人头像 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL) + private Long avatar; + + /** + * 发送人昵称 + */ + private String nickName; + + /*** + * 0读1未 + */ + private String isRead; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/mapper/ChatHistoryMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/mapper/ChatHistoryMapper.java index 43225e2a..82244c26 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/mapper/ChatHistoryMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/mapper/ChatHistoryMapper.java @@ -2,8 +2,10 @@ package org.dromara.websocket.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.websocket.domain.ChatHistory; +import org.dromara.websocket.domain.vo.ChatHistoryVo; @Mapper -public interface ChatHistoryMapper extends BaseMapper { +public interface ChatHistoryMapper extends BaseMapperPlus { }