09-10-netty优化

This commit is contained in:
2025-09-10 19:41:11 +08:00
parent 056b28af31
commit 2c45762c66
5 changed files with 75 additions and 9 deletions

View File

@ -143,6 +143,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
List<ChatHistory> 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<TextWebSocket
chatGroupService.save(groupServiceOne);
}
ChatHistory chatHistory = new ChatHistory();
//发送方设置为0 表示系统消息
chatHistory.setSenderId(0L);
//发送方设置为99 表示系统消息
chatHistory.setSenderId(99L);
chatHistory.setGeterId(groupServiceOne.getId());
chatHistory.setMessage(message);
chatHistory.setMessageDate(new Date());

View File

@ -3,12 +3,16 @@ package org.dromara.websocket.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.impl.SysUserServiceImpl;
import org.dromara.websocket.domain.ChatGroup;
import org.dromara.websocket.domain.ChatHistory;
import org.dromara.websocket.domain.vo.ChatHistoryVo;
import org.dromara.websocket.service.Impl.ChatGroupServiceImpl;
import org.dromara.websocket.service.Impl.ChatHistoryServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@ -42,7 +46,7 @@ public class ChatGroupController {
List<Long> idList = new ArrayList<>(Arrays.asList(ids));
idList.add(userId);
//在点击聊天 新建房间之前 判断是否已经有该房间 没有则创建 有再判断是否是隐藏 修改状态更新
//在点击聊天 新建房间之前 判断是否已经有该房间 没有则创建
boolean isHave = false;
LambdaQueryWrapper<ChatGroup> 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<List<ChatHistory>> groupChatRecord(@RequestParam Long id) {
public TableDataInfo<ChatHistoryVo> groupChatRecord(@RequestParam Long id, PageQuery pageQuery) {
LambdaQueryWrapper<ChatHistory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
// lambdaQueryWrapper.eq(ChatHistory::getGroupId,id).eq(ChatHistory::getType,"1");
lambdaQueryWrapper.eq(ChatHistory::getGeterId, id);
List<ChatHistory> list = chatHistoryService.list(lambdaQueryWrapper);
for (ChatHistory chatHistory : list) {
IPage<ChatHistoryVo> chatHistoryVoIPage = chatHistoryService.getBaseMapper().selectVoPage(pageQuery.build(), lambdaQueryWrapper);
// List<ChatHistory> 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);
}
/**

View File

@ -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;

View File

@ -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;
}

View File

@ -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<ChatHistory> {
public interface ChatHistoryMapper extends BaseMapperPlus<ChatHistory, ChatHistoryVo> {
}