Browse Source

user groups list

master
tangmingyou 4 years ago
parent
commit
41f7ce3b12
  1. 25
      im-client/src/main/java/net/sopod/soim/client/handler/cmd/GroupHandler.java
  2. 36
      im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/dto/GroupView.java
  3. 5
      im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupService.java
  4. 49
      im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupServiceImpl.java
  5. 1
      im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqSearchGroupHandler.java
  6. 46
      im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqUserGroupsHandler.java
  7. 1726
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/group/Group.java
  8. 9
      im-service-api/im-entry-protocol/src/main/resources/proto/group/Group.proto
  9. 56
      im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt
  10. 3
      im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/service/ImGroupService.java
  11. 8
      im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/service/ImGroupServiceImpl.java
  12. 2
      im-service/im-logic-group/src/main/resources/application.yml

25
im-client/src/main/java/net/sopod/soim/client/handler/cmd/GroupHandler.java

@ -45,6 +45,8 @@ public class GroupHandler implements CmdHandler<ArgsGroup> {
} else if (args.getUsersGroupId() != null) { } else if (args.getUsersGroupId() != null) {
this.handleGroupUsers(args.getUsersGroupId()); this.handleGroupUsers(args.getUsersGroupId());
} else {
this.handleUserGroups();
} }
} }
@ -81,7 +83,11 @@ public class GroupHandler implements CmdHandler<ArgsGroup> {
List<Group.GroupInfo> groupsList = res.getGroupsList(); List<Group.GroupInfo> groupsList = res.getGroupsList();
List<String> userLines = groupsList.stream() List<String> userLines = groupsList.stream()
.map(g -> g.getGid() + "|" + g.getGroupName() + "|" + g.getUserLimit() + "|" + g.getUserNum() + "|" + ImClock.millis2time(g.getCreateTime())) .map(g -> g.getGid() + " | " +
g.getGroupName() + " | " +
g.getUserLimit() + " | " +
g.getUserNum() + " | " +
ImClock.millis2time(g.getCreateTime()))
.collect(Collectors.toList()); .collect(Collectors.toList());
Console.logList("群聊搜索结果", userLines); Console.logList("群聊搜索结果", userLines);
} }
@ -120,4 +126,21 @@ public class GroupHandler implements CmdHandler<ArgsGroup> {
Console.logList("群用户列表", userLines); Console.logList("群用户列表", userLines);
} }
private void handleUserGroups() {
Group.ReqUserGroups req = Group.ReqUserGroups.newBuilder().build();
CompletableFuture<Group.ResUserGroups> future = soImSession.send(req);
Group.ResUserGroups res = future.join();
List<Group.GroupInfo> groupsList = res.getGroupsList();
List<String> userLines = groupsList.stream()
.map(g -> g.getGid() + " | " +
g.getGroupName() + " | " +
g.getUserLimit() + " | " +
g.getUserNum() + "/" +
g.getUserLimit() + " | " +
g.getMasterUid() + " | " +
ImClock.millis2time(g.getCreateTime()))
.collect(Collectors.toList());
Console.logList("我的群聊", userLines);
}
} }

36
im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/dto/GroupView.java

@ -0,0 +1,36 @@
package net.sopod.soim.das.group.api.model.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* GroupView
*
* @author tmy
* @date 2022-06-06 21:04
*/
@Data
@Accessors(chain = true)
public class GroupView implements Serializable {
private static final long serialVersionUID = -9110996998635374890L;
private Long gid;
/** 群主id */
private Long masterUid;
private String gName;
private Integer userLimit;
private Integer userNum;
private Integer unreadNum;
private Date createTime;
}

5
im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupService.java

@ -1,5 +1,6 @@
package net.sopod.soim.das.group.api.service; package net.sopod.soim.das.group.api.service;
import net.sopod.soim.das.group.api.model.dto.GroupView;
import net.sopod.soim.das.group.api.model.entity.ImGroup; import net.sopod.soim.das.group.api.model.entity.ImGroup;
import java.util.List; import java.util.List;
@ -16,6 +17,8 @@ public interface DasGroupService {
Long saveGroup(ImGroup imGroup); Long saveGroup(ImGroup imGroup);
List<ImGroup> listGroup(String groupNameLike); List<ImGroup> searchGroup(String groupNameLike);
List<GroupView> listUserGroup(Long uid);
} }

49
im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupServiceImpl.java

@ -2,17 +2,24 @@ package net.sopod.soim.das.group.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import net.sopod.soim.common.util.Collects;
import net.sopod.soim.common.util.ImClock; import net.sopod.soim.common.util.ImClock;
import net.sopod.soim.das.common.config.LogicTables; import net.sopod.soim.das.common.config.LogicTables;
import net.sopod.soim.das.group.api.model.dto.GroupView;
import net.sopod.soim.das.group.api.model.entity.ImGroup; import net.sopod.soim.das.group.api.model.entity.ImGroup;
import net.sopod.soim.das.group.api.model.entity.ImGroupUser;
import net.sopod.soim.das.group.api.service.DasGroupService; import net.sopod.soim.das.group.api.service.DasGroupService;
import net.sopod.soim.das.group.dao.ImGroupMapper; import net.sopod.soim.das.group.dao.ImGroupMapper;
import net.sopod.soim.das.group.dao.ImGroupUserMapper;
import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* DasGroupServiceImpl * DasGroupServiceImpl
@ -26,6 +33,9 @@ public class DasGroupServiceImpl implements DasGroupService {
@Resource @Resource
private ImGroupMapper imGroupMapper; private ImGroupMapper imGroupMapper;
@Resource
private ImGroupUserMapper imGroupUserMapper;
@Resource @Resource
private DasGroupUserServiceImpl dasGroupUserService; private DasGroupUserServiceImpl dasGroupUserService;
@ -54,10 +64,47 @@ public class DasGroupServiceImpl implements DasGroupService {
} }
@Override @Override
public List<ImGroup> listGroup(String groupNameLike) { public List<ImGroup> searchGroup(String groupNameLike) {
LambdaQueryWrapper<ImGroup> imGroupQuery = new QueryWrapper<ImGroup>().lambda() LambdaQueryWrapper<ImGroup> imGroupQuery = new QueryWrapper<ImGroup>().lambda()
.likeRight(ImGroup::getGroupName, groupNameLike); .likeRight(ImGroup::getGroupName, groupNameLike);
return imGroupMapper.selectList(imGroupQuery); return imGroupMapper.selectList(imGroupQuery);
} }
@Override
public List<GroupView> listUserGroup(Long uid) {
LambdaQueryWrapper<ImGroupUser> groupUsersWrapper = new QueryWrapper<ImGroupUser>().lambda()
.select(ImGroupUser::getGroupId, ImGroupUser::getUnreadNum)
.eq(ImGroupUser::getUid, uid);
List<ImGroupUser> imGroupUsers = imGroupUserMapper.selectList(groupUsersWrapper);
if (Collects.isEmpty(imGroupUsers)) {
return Collections.emptyList();
}
// 准备数据
List<Long> groupIds = imGroupUsers.stream().map(ImGroupUser::getGroupId).collect(Collectors.toList());
Map<Long, ImGroupUser> guMap = Collects.collect2Map(imGroupUsers, ImGroupUser::getGroupId);
// 查询群信息
LambdaQueryWrapper<ImGroup> imGroupWrapper = new QueryWrapper<ImGroup>().lambda()
.select(ImGroup::getId,
ImGroup::getGroupName,
ImGroup::getMasterUid,
ImGroup::getUserNum,
ImGroup::getUserLimit)
.in(ImGroup::getId, groupIds)
.eq(ImGroup::getStatus, LogicTables.STATUS_NORMAL);
// 查询群信息
List<ImGroup> imGroups = imGroupMapper.selectList(imGroupWrapper);
// 映射结果
return imGroups.stream().map(g -> {
ImGroupUser gu = guMap.get(g.getId());
return new GroupView()
.setGid(g.getId())
.setGName(g.getGroupName())
.setMasterUid(g.getMasterUid())
.setUserNum(g.getUserNum())
.setCreateTime(g.getCreateTime())
.setUserLimit(g.getUserLimit())
.setUnreadNum(gu.getUnreadNum());
}).collect(Collectors.toList());
}
} }

1
im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqSearchGroupHandler.java

@ -34,6 +34,7 @@ public class ReqSearchGroupHandler extends AccountMessageHandler<Group.ReqSearch
.setGroupName(imGroup.getGroupName()) .setGroupName(imGroup.getGroupName())
.setUserLimit(imGroup.getUserLimit()) .setUserLimit(imGroup.getUserLimit())
.setUserNum(imGroup.getUserNum()) .setUserNum(imGroup.getUserNum())
.setMasterUid(imGroup.getMasterUid())
.setCreateTime(imGroup.getCreateTime().getTime()) .setCreateTime(imGroup.getCreateTime().getTime())
.build() .build()
).collect(Collectors.toList()); ).collect(Collectors.toList());

46
im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqUserGroupsHandler.java

@ -0,0 +1,46 @@
package net.sopod.soim.entry.handlers.group;
import com.google.protobuf.MessageLite;
import net.sopod.soim.das.group.api.model.dto.GroupView;
import net.sopod.soim.data.msg.group.Group;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.handler.ImContext;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.group.service.ImGroupService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* ReqUserGroupsHandler
*
* @author tmy
* @date 2022-06-06 21:18
*/
@Service
public class ReqUserGroupsHandler extends AccountMessageHandler<Group.ReqUserGroups> {
@DubboReference
private ImGroupService imGroupService;
@Override
public MessageLite handle(ImContext ctx, Account account, Group.ReqUserGroups req) {
List<GroupView> groupViews = imGroupService.listUserGroups(account.getUid());
List<Group.GroupInfo> groupInfos = groupViews.stream().map(g -> Group.GroupInfo.newBuilder()
.setGid(g.getGid())
.setGroupName(g.getGName())
.setUserLimit(g.getUserLimit())
.setUserNum(g.getUserNum())
.setMasterUid(g.getMasterUid())
.setCreateTime(g.getCreateTime() == null ? 0L : g.getCreateTime().getTime())
.build()
).collect(Collectors.toList());
return Group.ResUserGroups.newBuilder()
.addAllGroups(groupInfos)
.build();
}
}

1726
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/group/Group.java

File diff suppressed because it is too large Load Diff

9
im-service-api/im-entry-protocol/src/main/resources/proto/group/Group.proto

@ -11,6 +11,7 @@ message GroupInfo {
int32 userLimit = 3; int32 userLimit = 3;
int32 userNum = 4; int32 userNum = 4;
int64 createTime = 5; int64 createTime = 5;
int64 masterUid = 6;
} }
message UserInfo { message UserInfo {
@ -22,6 +23,14 @@ message UserInfo {
int64 lastActive = 5; int64 lastActive = 5;
} }
message ReqUserGroups {
}
message ResUserGroups {
repeated GroupInfo groups = 1;
}
message ReqCreateGroup { message ReqCreateGroup {
// //
string groupName = 1; string groupName = 1;

56
im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt

@ -1,28 +1,30 @@
net.sopod.soim.data.msg.user.Friend$ResFriendList=10000 net.sopod.soim.data.msg.group.Group$ReqUserGroups=10000
net.sopod.soim.data.msg.group.Group$ResSearchGroup=10001 net.sopod.soim.data.msg.group.Group$GroupInfo=10001
net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10002 net.sopod.soim.data.msg.group.Group$ResSearchGroup=10002
net.sopod.soim.data.msg.common.Res$ResState=10003 net.sopod.soim.data.msg.hello.HelloPB$Hello=10003
net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10004 net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10004
net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10005 net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10005
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10006 net.sopod.soim.data.msg.chat.Chat$TextChat=10006
net.sopod.soim.data.msg.user.Friend$ReqFriendList=10007 net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10007
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10008 net.sopod.soim.data.msg.net.HeartBeat$Pong=10008
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10009 net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10009
net.sopod.soim.data.msg.group.Group$ReqSearchGroup=10010 net.sopod.soim.data.msg.group.Group$ReqGroupUsers=10010
net.sopod.soim.data.msg.chat.Chat$TextChat=10011 net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10011
net.sopod.soim.data.msg.hello.HelloPB$World=10012 net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10012
net.sopod.soim.data.msg.hello.HelloPB$Hello=10013 net.sopod.soim.data.msg.group.Group$ReqCreateGroup=10013
net.sopod.soim.data.msg.group.Group$ResGroupMessage=10014 net.sopod.soim.data.msg.user.Friend$ResFriendList=10014
net.sopod.soim.data.msg.net.HeartBeat$Pong=10015 net.sopod.soim.data.msg.group.Group$ReqSearchGroup=10015
net.sopod.soim.data.msg.group.Group$ReqJoinGroup=10016 net.sopod.soim.data.msg.group.Group$ReqGroupMessage=10016
net.sopod.soim.data.msg.group.Group$ReqCreateGroup=10017 net.sopod.soim.data.msg.group.Group$ResGroupUsers=10017
net.sopod.soim.data.msg.group.Group$UserInfo=10018 net.sopod.soim.data.msg.hello.HelloPB$World=10018
net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10019 net.sopod.soim.data.msg.group.Group$ReqJoinGroup=10019
net.sopod.soim.data.msg.group.Group$ReqGroupMessage=10020 net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10020
net.sopod.soim.data.msg.group.Group$ReqGroupUsers=10021 net.sopod.soim.data.msg.group.Group$UserInfo=10021
net.sopod.soim.data.msg.group.Group$ResGroupUsers=10022 net.sopod.soim.data.msg.group.Group$ResGroupMessage=10022
net.sopod.soim.data.msg.net.HeartBeat$Ping=10023 net.sopod.soim.data.msg.user.UserMsg$UserInfo=10023
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10024 net.sopod.soim.data.msg.group.Group$ResUserGroups=10024
net.sopod.soim.data.msg.user.UserMsg$UserInfo=10025 net.sopod.soim.data.msg.user.Friend$ResAddFriend=10025
net.sopod.soim.data.msg.user.Friend$ResAddFriend=10026 net.sopod.soim.data.msg.net.HeartBeat$Ping=10026
net.sopod.soim.data.msg.group.Group$GroupInfo=10027 net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10027
net.sopod.soim.data.msg.user.Friend$ReqFriendList=10028
net.sopod.soim.data.msg.common.Res$ResState=10029

3
im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/service/ImGroupService.java

@ -1,5 +1,6 @@
package net.sopod.soim.logic.api.group.service; package net.sopod.soim.logic.api.group.service;
import net.sopod.soim.das.group.api.model.dto.GroupView;
import net.sopod.soim.das.group.api.model.entity.ImGroup; import net.sopod.soim.das.group.api.model.entity.ImGroup;
import net.sopod.soim.logic.api.group.model.dto.GroupUserInfo; import net.sopod.soim.logic.api.group.model.dto.GroupUserInfo;
@ -19,6 +20,8 @@ public interface ImGroupService {
Long joinGroup(Long groupId, Long uid); Long joinGroup(Long groupId, Long uid);
List<GroupView> listUserGroups(Long uid);
List<GroupUserInfo> listGroupUsers(Long groupId); List<GroupUserInfo> listGroupUsers(Long groupId);
} }

8
im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/service/ImGroupServiceImpl.java

@ -4,6 +4,7 @@ import net.sopod.soim.common.dubbo.exception.LogicException;
import net.sopod.soim.common.util.Collects; import net.sopod.soim.common.util.Collects;
import net.sopod.soim.common.util.StringUtil; import net.sopod.soim.common.util.StringUtil;
import net.sopod.soim.das.group.api.model.dto.GroupUser_0; import net.sopod.soim.das.group.api.model.dto.GroupUser_0;
import net.sopod.soim.das.group.api.model.dto.GroupView;
import net.sopod.soim.das.group.api.model.entity.ImGroup; import net.sopod.soim.das.group.api.model.entity.ImGroup;
import net.sopod.soim.das.group.api.service.DasGroupService; import net.sopod.soim.das.group.api.service.DasGroupService;
import net.sopod.soim.das.group.api.service.DasGroupUserService; import net.sopod.soim.das.group.api.service.DasGroupUserService;
@ -58,7 +59,7 @@ public class ImGroupServiceImpl implements ImGroupService {
@Override @Override
public List<ImGroup> searchGroup(String groupNameLike) { public List<ImGroup> searchGroup(String groupNameLike) {
return dasGroupService.listGroup(groupNameLike); return dasGroupService.searchGroup(groupNameLike);
} }
@Override @Override
@ -70,6 +71,11 @@ public class ImGroupServiceImpl implements ImGroupService {
return dasGroupUserService.insert(groupId, uid); return dasGroupUserService.insert(groupId, uid);
} }
@Override
public List<GroupView> listUserGroups(Long uid) {
return dasGroupService.listUserGroup(uid);
}
@Override @Override
public List<GroupUserInfo> listGroupUsers(Long groupId) { public List<GroupUserInfo> listGroupUsers(Long groupId) {
List<GroupUser_0> groupUsers = dasGroupUserService.listGroupUsers(groupId); List<GroupUser_0> groupUsers = dasGroupUserService.listGroupUsers(groupId);

2
im-service/im-logic-group/src/main/resources/application.yml

@ -9,7 +9,7 @@ dubbo:
address: nacos://124.222.131.236:3848 address: nacos://124.222.131.236:3848
group: so-im group: so-im
protocol: protocol:
port: 3006 port: 3013
consumer: consumer:
check: false check: false
provider: provider:

Loading…
Cancel
Save