09-12-netty优化

This commit is contained in:
2025-09-12 15:43:51 +08:00
parent a1d1aaff49
commit 974b11f8d3
3 changed files with 100 additions and 13 deletions

View File

@ -155,7 +155,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
message.put("type", "3"); message.put("type", "3");
message.put("unReadCount", roomCounts); message.put("unReadCount", roomCounts);
log.info("发送所有未读消息:{}",message); log.info("发送所有未读消息:{}",message);
sendMessage(ctx, message.toJSONString()); if(!roomCounts.isEmpty()) {
sendMessage(ctx, message.toJSONString());
}
} }
//认证完成后开始构建系统消息房间 判断是否有系统消息房间 没有则增加 //认证完成后开始构建系统消息房间 判断是否有系统消息房间 没有则增加
if (!isHaveSystemRoom){ if (!isHaveSystemRoom){
@ -277,7 +279,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
temp.put(value,userRoomCountMap.get(value)); temp.put(value,userRoomCountMap.get(value));
} }
}); });
jsonObject.put("unReadCount", JsonUtils.toJsonString(temp)); jsonObject.put("unReadCount", temp);
//给每个通道发送对应消息 //给每个通道发送对应消息
for (ChannelHandlerContext handlerContext : channelHandlerContexts) { for (ChannelHandlerContext handlerContext : channelHandlerContexts) {
sendMessage(handlerContext, jsonObject.toString()); sendMessage(handlerContext, jsonObject.toString());

View File

@ -4,7 +4,10 @@ package org.dromara.websocket.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.core.domain.R; 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.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl;
import org.dromara.websocket.domain.ChatFriendship; import org.dromara.websocket.domain.ChatFriendship;
@ -129,17 +132,18 @@ public class ChatFriendshipController {
*/ */
// @SaCheckPermission("chatGroup:chatFriendship:getList") // @SaCheckPermission("chatGroup:chatFriendship:getList")
@GetMapping("/getList") @GetMapping("/getList")
public R<List<SysUserVo>> getList(){ public TableDataInfo<SysUserVo> getList(SysUserBo bo, PageQuery pageQuery){
Long userId = LoginHelper.getLoginUser().getUserId(); // Long userId = LoginHelper.getLoginUser().getUserId();
LambdaQueryWrapper<ChatFriendship> lambdaQueryWrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<ChatFriendship> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ChatFriendship::getOurSide,userId); // lambdaQueryWrapper.eq(ChatFriendship::getOurSide, userId);
List<ChatFriendship> list = chatFriendshipService.list(lambdaQueryWrapper); // List<ChatFriendship> list = chatFriendshipService.list(lambdaQueryWrapper);
//
List<SysUserVo> sysUserVos = new ArrayList<>(); // List<SysUserVo> sysUserVos = new ArrayList<>();
for (ChatFriendship chatFriendship : list) { // for (ChatFriendship chatFriendship : list) {
sysUserVos.add(sysUserService.selectUserById(chatFriendship.getOtherSide())); // sysUserVos.add(sysUserService.selectUserById(chatFriendship.getOtherSide()));
} // }
return R.ok(sysUserVos); // return R.ok(sysUserVos);
return chatFriendshipService.getAppUserList(bo,pageQuery);
} }
} }

View File

@ -1,11 +1,92 @@
package org.dromara.websocket.service.Impl; package org.dromara.websocket.service.Impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserFile;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysUserFileService;
import org.dromara.system.service.impl.SysUserServiceImpl;
import org.dromara.websocket.domain.ChatFriendship; import org.dromara.websocket.domain.ChatFriendship;
import org.dromara.websocket.mapper.ChatFriendshipMapper; import org.dromara.websocket.mapper.ChatFriendshipMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class ChatFriendshipServiceImpl extends ServiceImpl<ChatFriendshipMapper, ChatFriendship> { public class ChatFriendshipServiceImpl extends ServiceImpl<ChatFriendshipMapper, ChatFriendship> {
@Autowired
private SysDeptMapper deptMapper;
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private ISysUserFileService userFileService;
public TableDataInfo<SysUserVo> getAppUserList(SysUserBo user, PageQuery pageQuery){
Page<SysUserVo> page = sysUserMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
List<SysUserVo> userVoList = page.getRecords();
List<Long> userIdList = userVoList.stream().map(SysUserVo::getUserId).toList();
if (CollUtil.isNotEmpty(userIdList)) {
List<SysUserFile> userFileList = userFileService.lambdaQuery()
.in(SysUserFile::getUserId, userIdList)
.list();
Map<Long, List<SysUserFile>> userFileMap = userFileList.stream().collect(Collectors.groupingBy(SysUserFile::getUserId));
userVoList.forEach(userVo -> {
Long userId = userVo.getUserId();
if (userFileMap.containsKey(userId)) {
List<SysUserFile> fileList = userFileMap.get(userId);
String fileIdStr = fileList.stream()
.map(file -> String.valueOf(file.getFileId()))
.collect(Collectors.joining(","));
userVo.setFilePath(fileIdStr);
}
});
page.setRecords(userVoList);
}
return TableDataInfo.build(page);
}
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) {
Map<String, Object> params = user.getParams();
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, "u.create_time", params.get("beginTime"), params.get("endTime"))
.eq(ObjectUtil.isNotNull(user.getDeptId()),"u.dept_id", user.getDeptId())
.orderByAsc("u.user_id");
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong));
}
return wrapper;
}
} }