From 5d6d9020e7124e74efd2b01697cd0d534f8f695e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Tue, 16 Sep 2025 16:10:06 +0800 Subject: [PATCH] =?UTF-8?q?09-15-netty=E4=BC=98=E5=8C=96=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=AE=8C=E5=96=84app=E7=89=88=E6=9C=AC=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 + .../app/controller/SysPackageController.java | 20 +++++++- .../org/dromara/websocket/ChatServer.java | 3 +- .../dromara/websocket/ChatServerHandler.java | 49 +++++++++---------- .../controller/ChatFriendshipController.java | 2 +- .../controller/ChatGroupController.java | 44 +++++++++++------ .../dromara/websocket/domain/ChatGroup.java | 3 ++ .../Impl/ChatFriendshipServiceImpl.java | 11 ++++- 8 files changed, 87 insertions(+), 47 deletions(-) diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 65010f1d..ac87bbb8 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -281,6 +281,8 @@ springdoc: packages-to-scan: org.dromara.tender - group: 25.app版本模块 packages-to-scan: org.dromara.app + - group: 26.netty消息模块 + packages-to-scan: org.dromara.websocket # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java index c59309eb..e1591c06 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java @@ -28,10 +28,11 @@ public class SysPackageController { * 获取最新版本 */ @GetMapping("/getNewVersion") - public R> getNewVersion() { + public R getNewVersion() { LambdaQueryWrapper lambdaQueryWrapper =new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime); - List one = sysPackageService.list(lambdaQueryWrapper); + lambdaQueryWrapper.last("LIMIT 1"); + SysPackage one = sysPackageService.getOne(lambdaQueryWrapper); return R.ok(one); } @@ -60,6 +61,21 @@ public class SysPackageController { } + /** + * 删除 + */ + @Transactional + @GetMapping("/remove") + public R remove(Long id){ + SysPackage byId = sysPackageService.getById(id); + Boolean b1 = sysOssService.deleteWithValidByIds(List.of(byId.getFileId()), false); + boolean b = sysPackageService.removeById(id); + if (b1 && b){ + return R.ok(); + } + return R.fail("删除文件或记录失败"); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServer.java index 4131cfab..b677e1c5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServer.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServer.java @@ -68,7 +68,8 @@ public class ChatServer { }); log.info("Netty聊天服务器启动,端口:" + port); - ChannelFuture future = bootstrap.bind(port).sync(); + bootstrap.bind(port).sync(); +// ChannelFuture future = bootstrap.bind(port).sync(); // future.channel().closeFuture().sync(); } finally { // workerGroup.shutdownGracefully().sync(); 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 251d2806..6dc795cc 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 @@ -67,7 +67,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler> userChannelMap = new ConcurrentHashMap<>(); private static final ConcurrentHashMap channelUserMap = new ConcurrentHashMap<>(); - //维护用户房间未读数量的映射表 用户->RoomId RoomId->Count 用户+房间->Count + //维护用户房间未读数量的映射表 用户+房间->Count private static final ConcurrentHashMap userRoomCountMap = new ConcurrentHashMap<>(); //维护一个在线用户列表 private static final List onlineUserList = new ArrayList<>(); @@ -313,11 +313,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler lambdaQueryWrapper = new LambdaQueryWrapper<>(); - ChatGroup groupServiceOne; + ChatGroup groupServiceOne = null; + ChatHistory chatHistory = null; switch (value){ //1:系统消息 @@ -478,20 +476,20 @@ public class ChatServerHandler extends SimpleChannelInboundHandler { - return; + throw new RuntimeException("未知的类型"); } } + chatGroupService.saveOrUpdate(groupServiceOne); + chatHistoryService.save(chatHistory); //发送消息后 将该房间未读消息数加1 if (userRoomCountMap.containsKey(userId+"+"+groupServiceOne.getId())){ @@ -616,7 +616,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler getList(SysUserBo bo, PageQuery pageQuery){ + public R> getList(SysUserBo bo, PageQuery pageQuery){ // Long userId = LoginHelper.getLoginUser().getUserId(); // LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // lambdaQueryWrapper.eq(ChatFriendship::getOurSide, userId); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/controller/ChatGroupController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/controller/ChatGroupController.java index d43ed0b9..c3db642f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/controller/ChatGroupController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/controller/ChatGroupController.java @@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/chatGroup") @@ -106,26 +107,38 @@ public class ChatGroupController { Long userId = LoginHelper.getLoginUser().getUserId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //无论单群聊 群聊 成员都会有自己 - queryWrapper.like(ChatGroup::getMembers,userId+",").or().like(ChatGroup::getMembers,userId+"]");//.eq(ChatGroup::getOwerId,userId).or() -// queryWrapper.like(searchObject.getName() != null && !searchObject.getName().isEmpty(),ChatGroup::getName,searchObject.getName()); + queryWrapper.like(ChatGroup::getMembers,userId+",").or().like(ChatGroup::getMembers,userId+"]"); //按最后聊天时间排序 queryWrapper.orderByDesc(ChatGroup::getLastMessageTime); List list = chatGroupService.page(pageQuery.build(),queryWrapper).getRecords(); - List searchTemp = new ArrayList<>(); +// List searchTemp = new ArrayList<>(); if (!list.isEmpty()) { - for (ChatGroup chatGroup : list) { - setValue(chatGroup, userId); - //过滤搜索 - if (searchObject != null && searchObject.getName() != null && !searchObject.getName().isEmpty()) { - if (chatGroup.getName().contains(searchObject.getName())) { - searchTemp.add(chatGroup); - } - } else { - searchTemp.add(chatGroup); - } +// for (ChatGroup chatGroup : list) { +// setValue(chatGroup, userId); +// //过滤搜索 +// if (searchObject != null && searchObject.getName() != null && !searchObject.getName().isEmpty()) { +// if (chatGroup.getName().contains(searchObject.getName())) { +// searchTemp.add(chatGroup); +// } +// } else { +// searchTemp.add(chatGroup); +// } +// } + for (ChatGroup chatGroup : list){ + setValue(chatGroup,userId); } + if (searchObject != null && searchObject.getName() != null && !searchObject.getName().isEmpty()){ + return R.ok( + list.stream() + .filter(chatGroup -> chatGroup.getName().contains(searchObject.getName())) + .toList()); + }else { + return R.ok(list); + } + + }else { + return R.fail("没有数据"); } - return R.ok(searchTemp); } /** @@ -168,10 +181,8 @@ public class ChatGroupController { @GetMapping("/groupChatRecord") 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); 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){ @@ -198,6 +209,7 @@ public class ChatGroupController { if (sysUserVo != null) { byId.setName(sysUserVo.getNickName()); byId.setAvatar(sysUserVo.getAvatar()); + byId.setSex(sysUserVo.getSex()); } else { byId.setName("此用户已注销"); byId.setAvatar(null); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java index 002865b6..1d49d6a7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java @@ -39,6 +39,9 @@ public class ChatGroup implements Serializable { @Translation(type = TransConstant.OSS_ID_TO_URL) private Long avatar; + @TableField(exist = false) + private String sex; + /** * 是否显示0显示1隐藏 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatFriendshipServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatFriendshipServiceImpl.java index 9decc416..f1fe86c9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatFriendshipServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatFriendshipServiceImpl.java @@ -10,10 +10,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.dromara.common.core.constant.SystemConstants; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; 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.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserFile; @@ -42,7 +45,11 @@ public class ChatFriendshipServiceImpl extends ServiceImpl getAppUserList(SysUserBo user, PageQuery pageQuery){ + public R> getAppUserList(SysUserBo user, PageQuery pageQuery){ + SysUserVo sysUserVo = sysUserMapper.selectVoById(LoginHelper.getLoginUser().getUserId()); + if (sysUserVo.getProjectIds() == null || sysUserVo.getProjectIds().isEmpty()){ + return R.fail("该账号暂无项目组,请联系管理员尽快分配"); + } Page page = sysUserMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user)); List userVoList = page.getRecords(); List userIdList = userVoList.stream().map(SysUserVo::getUserId).toList(); @@ -63,7 +70,7 @@ public class ChatFriendshipServiceImpl extends ServiceImpl