09-15-netty优化,修复完善app版本模块
This commit is contained in:
@ -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
|
||||
|
||||
@ -28,10 +28,11 @@ public class SysPackageController {
|
||||
* 获取最新版本
|
||||
*/
|
||||
@GetMapping("/getNewVersion")
|
||||
public R<List<SysPackage>> getNewVersion() {
|
||||
public R<SysPackage> getNewVersion() {
|
||||
LambdaQueryWrapper<SysPackage> lambdaQueryWrapper =new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime);
|
||||
List<SysPackage> 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<Void> 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("删除文件或记录失败");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -67,7 +67,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
// 使用内存映射替代Redis存储
|
||||
private static final ConcurrentHashMap<String, List<ChannelHandlerContext>> userChannelMap = new ConcurrentHashMap<>();
|
||||
private static final ConcurrentHashMap<ChannelHandlerContext, String> channelUserMap = new ConcurrentHashMap<>();
|
||||
//维护用户房间未读数量的映射表 用户->RoomId RoomId->Count 用户+房间->Count
|
||||
//维护用户房间未读数量的映射表 用户+房间->Count
|
||||
private static final ConcurrentHashMap<String, Integer> userRoomCountMap = new ConcurrentHashMap<>();
|
||||
//维护一个在线用户列表
|
||||
private static final List<String> onlineUserList = new ArrayList<>();
|
||||
@ -313,11 +313,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
SysOssVo byId = sysOssService.getById(sysUserVo.getAvatar());
|
||||
if(byId != null){
|
||||
jsonObject.put("avatar", byId.getUrl());
|
||||
}else {
|
||||
jsonObject.put("avatar", "http://xny.yj-3d.com:9000/xinnengyuan/2025/09/13/d10d60315d6e41718bfaaab4df53c84e.png");
|
||||
}
|
||||
}else {
|
||||
jsonObject.put("avatar", "http://xny.yj-3d.com:9000/xinnengyuan/2025/09/13/d10d60315d6e41718bfaaab4df53c84e.png");
|
||||
}
|
||||
log.info("收到客户端消息:{}", jsonObject);
|
||||
String RoomId = jsonObject.get("roomId").toString();
|
||||
@ -343,7 +339,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
chatHistory.setIsRead("1");
|
||||
chatHistory.setMessageType(jsonObject.get("messageType").toString());
|
||||
|
||||
if (!jsonObject.get("messageType").equals("text")){
|
||||
if (!jsonObject.get("messageType").equals("txt")){
|
||||
|
||||
//将携带base64转为文件然后进行存储 赋值url
|
||||
String base64Data = jsonObject.get("message").toString();
|
||||
@ -460,10 +456,12 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("type", "0");
|
||||
jsonObject.put("message", message);
|
||||
jsonObject.put("messageType", "txt");
|
||||
|
||||
//初始化变量
|
||||
LambdaQueryWrapper<ChatGroup> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
ChatGroup groupServiceOne;
|
||||
ChatGroup groupServiceOne = null;
|
||||
ChatHistory chatHistory = null;
|
||||
|
||||
switch (value){
|
||||
//1:系统消息
|
||||
@ -478,20 +476,20 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
groupServiceOne.setMembers("[99, "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.save(groupServiceOne);
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
}else {
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.updateById(groupServiceOne);
|
||||
// chatGroupService.updateById(groupServiceOne);
|
||||
}
|
||||
ChatHistory chatHistory = new ChatHistory();
|
||||
chatHistory = new ChatHistory();
|
||||
//发送方设置为99 表示系统消息
|
||||
chatHistory.setSenderId(99L);
|
||||
chatHistory.setGeterId(groupServiceOne.getId());
|
||||
chatHistory.setMessage(jsonObject.toString());
|
||||
chatHistory.setMessageDate(new Date());
|
||||
chatHistory.setIsRead("1");//未读
|
||||
chatHistoryService.save(chatHistory);
|
||||
// chatHistoryService.save(chatHistory);
|
||||
jsonObject.put("roomId", groupServiceOne.getId());
|
||||
}
|
||||
|
||||
@ -506,20 +504,20 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
groupServiceOne.setMembers("[100, "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.save(groupServiceOne);
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
}else {
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.updateById(groupServiceOne);
|
||||
// chatGroupService.updateById(groupServiceOne);
|
||||
}
|
||||
ChatHistory chatHistory = new ChatHistory();
|
||||
chatHistory = new ChatHistory();
|
||||
//发送方设置为100 表示系统消息中的考勤消息
|
||||
chatHistory.setSenderId(100L);
|
||||
chatHistory.setGeterId(groupServiceOne.getId());
|
||||
chatHistory.setMessage(jsonObject.toString());
|
||||
chatHistory.setMessageDate(new Date());
|
||||
chatHistory.setIsRead("1");//未读
|
||||
chatHistoryService.save(chatHistory);
|
||||
// chatHistoryService.save(chatHistory);
|
||||
jsonObject.put("roomId", groupServiceOne.getId());
|
||||
}
|
||||
|
||||
@ -534,20 +532,20 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
groupServiceOne.setMembers("[101, "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.save(groupServiceOne);
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
}else {
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.updateById(groupServiceOne);
|
||||
// chatGroupService.updateById(groupServiceOne);
|
||||
}
|
||||
ChatHistory chatHistory = new ChatHistory();
|
||||
chatHistory = new ChatHistory();
|
||||
//发送方设置为101 表示系统消息中的安全消息
|
||||
chatHistory.setSenderId(101L);
|
||||
chatHistory.setGeterId(groupServiceOne.getId());
|
||||
chatHistory.setMessage(jsonObject.toString());
|
||||
chatHistory.setMessageDate(new Date());
|
||||
chatHistory.setIsRead("1");//未读
|
||||
chatHistoryService.save(chatHistory);
|
||||
// chatHistoryService.save(chatHistory);
|
||||
jsonObject.put("roomId", groupServiceOne.getId());
|
||||
}
|
||||
|
||||
@ -562,28 +560,30 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
|
||||
groupServiceOne.setMembers("[102, "+userId+"]");
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.save(groupServiceOne);
|
||||
// chatGroupService.save(groupServiceOne);
|
||||
}else {
|
||||
groupServiceOne.setLastMessage(message);
|
||||
groupServiceOne.setLastMessageTime(new Date());
|
||||
chatGroupService.updateById(groupServiceOne);
|
||||
// chatGroupService.updateById(groupServiceOne);
|
||||
}
|
||||
ChatHistory chatHistory = new ChatHistory();
|
||||
chatHistory = new ChatHistory();
|
||||
//发送方设置为102 表示系统消息中的质量消息
|
||||
chatHistory.setSenderId(102L);
|
||||
chatHistory.setGeterId(groupServiceOne.getId());
|
||||
chatHistory.setMessage(jsonObject.toString());
|
||||
chatHistory.setMessageDate(new Date());
|
||||
chatHistory.setIsRead("1");//未读
|
||||
chatHistoryService.save(chatHistory);
|
||||
|
||||
jsonObject.put("roomId", groupServiceOne.getId());
|
||||
}
|
||||
|
||||
default -> {
|
||||
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<TextWebSocket
|
||||
}
|
||||
});
|
||||
jsonObject.put("unReadCount", temp);
|
||||
jsonObject.put("messageType", "txt");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -132,7 +132,7 @@ public class ChatFriendshipController {
|
||||
*/
|
||||
// @SaCheckPermission("chatGroup:chatFriendship:getList")
|
||||
@GetMapping("/getList")
|
||||
public TableDataInfo<SysUserVo> getList(SysUserBo bo, PageQuery pageQuery){
|
||||
public R<TableDataInfo<SysUserVo>> getList(SysUserBo bo, PageQuery pageQuery){
|
||||
// Long userId = LoginHelper.getLoginUser().getUserId();
|
||||
// LambdaQueryWrapper<ChatFriendship> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
// lambdaQueryWrapper.eq(ChatFriendship::getOurSide, userId);
|
||||
|
||||
@ -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<ChatGroup> 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<ChatGroup> list = chatGroupService.page(pageQuery.build(),queryWrapper).getRecords();
|
||||
List<ChatGroup> searchTemp = new ArrayList<>();
|
||||
// List<ChatGroup> 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<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);
|
||||
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){
|
||||
@ -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);
|
||||
|
||||
@ -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隐藏
|
||||
*/
|
||||
|
||||
@ -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<ChatFriendshipMapper,
|
||||
@Autowired
|
||||
private ISysUserFileService userFileService;
|
||||
|
||||
public TableDataInfo<SysUserVo> getAppUserList(SysUserBo user, PageQuery pageQuery){
|
||||
public R<TableDataInfo<SysUserVo>> getAppUserList(SysUserBo user, PageQuery pageQuery){
|
||||
SysUserVo sysUserVo = sysUserMapper.selectVoById(LoginHelper.getLoginUser().getUserId());
|
||||
if (sysUserVo.getProjectIds() == null || sysUserVo.getProjectIds().isEmpty()){
|
||||
return R.fail("该账号暂无项目组,请联系管理员尽快分配");
|
||||
}
|
||||
Page<SysUserVo> page = sysUserMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
|
||||
List<SysUserVo> userVoList = page.getRecords();
|
||||
List<Long> userIdList = userVoList.stream().map(SysUserVo::getUserId).toList();
|
||||
@ -63,7 +70,7 @@ public class ChatFriendshipServiceImpl extends ServiceImpl<ChatFriendshipMapper,
|
||||
});
|
||||
page.setRecords(userVoList);
|
||||
}
|
||||
return TableDataInfo.build(page);
|
||||
return R.ok(TableDataInfo.build(page));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user