|
@@ -1,22 +1,27 @@
|
|
|
package com.zhentao.groups.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
+import com.aliyuncs.endpoint.UserCustomizedEndpointResolver;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.zhentao.groups.dto.AddGroupMembers;
|
|
|
-import com.zhentao.groups.dto.AddGroupsDto;
|
|
|
-import com.zhentao.groups.dto.DelGroupMembers;
|
|
|
-import com.zhentao.groups.dto.GroupDto;
|
|
|
+import com.zhentao.groups.dto.*;
|
|
|
import com.zhentao.groups.mapper.GroupMembersMapper;
|
|
|
import com.zhentao.groups.pojo.GroupMembers;
|
|
|
import com.zhentao.groups.pojo.Groupss;
|
|
|
import com.zhentao.groups.service.GroupMembersService;
|
|
|
import com.zhentao.groups.service.GroupsService;
|
|
|
import com.zhentao.groups.mapper.GroupsMapper;
|
|
|
+import com.zhentao.groups.vo.GroupsVo;
|
|
|
+import com.zhentao.groups.vo.UserVo;
|
|
|
import com.zhentao.information.cache.GroupMemberCache;
|
|
|
import com.zhentao.shouye.domain.UserShouye;
|
|
|
import com.zhentao.shouye.mapper.UserShouyeMapper;
|
|
|
import com.zhentao.shouye.service.UserShouyeService;
|
|
|
+import com.zhentao.user.domain.UserLogin;
|
|
|
+import com.zhentao.user.dto.UserRegister;
|
|
|
+import com.zhentao.user.mapper.UserLoginMapper;
|
|
|
+import com.zhentao.userRelationships.domain.UserRelationships;
|
|
|
+import com.zhentao.userRelationships.mapper.UserRelationshipsMapper;
|
|
|
import com.zhentao.vo.Result;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -25,10 +30,11 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+import static io.lettuce.core.BitFieldArgs.Builder.set;
|
|
|
|
|
|
/**
|
|
|
* @author lzy
|
|
@@ -53,10 +59,15 @@ public class GroupsServiceImpl extends ServiceImpl<GroupsMapper, Groupss>
|
|
|
private UserShouyeService userShouyeService;
|
|
|
@Autowired
|
|
|
private GroupsMapper groupsMapper;
|
|
|
+ @Autowired
|
|
|
+ private UserLoginMapper userLoginMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private GroupMemberCache groupMemberCache;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserRelationshipsMapper userRelationshipsMapper;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout = 30)
|
|
|
public Result addGroup(AddGroupsDto addGroupsDto) {
|
|
@@ -153,9 +164,39 @@ public class GroupsServiceImpl extends ServiceImpl<GroupsMapper, Groupss>
|
|
|
return Result.ERR(null, "添加失败");
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Result selectAddGroup(AddUserLoginDto addUserLoginDto) {
|
|
|
+ List<UserRelationships> userRelationships = userRelationshipsMapper.selectList(new LambdaQueryWrapper<UserRelationships>().eq(UserRelationships::getUserId, addUserLoginDto.getUid()));
|
|
|
+ if (userRelationships.size()==0){
|
|
|
+ return Result.ERR(null,"请先添加好友");
|
|
|
+ }
|
|
|
+ List<Long> friendId = userRelationships.stream().map(UserRelationships::getFriendId).collect(Collectors.toList());
|
|
|
+ List<GroupMembers> list = groupMembersMapper.selectList(new LambdaQueryWrapper<GroupMembers>().eq(GroupMembers::getGroupId, addUserLoginDto.getId()).in(GroupMembers::getUserId, friendId));
|
|
|
+
|
|
|
+ List<Long> collect = list.stream().map(GroupMembers::getUserId).collect(Collectors.toList());
|
|
|
+ if (collect.contains(friendId)){
|
|
|
+ return Result.ERR(null,"你的好友都已经加入该群了");
|
|
|
+ }
|
|
|
|
|
|
+ List<Long> collect1 = Stream.concat(collect.stream(), friendId.stream())
|
|
|
+ .collect(Collectors.toList())
|
|
|
+ .stream()
|
|
|
+ .filter(e -> Collections.frequency(
|
|
|
+ Stream.concat(collect.stream(), friendId.stream()).collect(Collectors.toList()),
|
|
|
+ e
|
|
|
+ ) == 1)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (collect1.size()==0){
|
|
|
+ return Result.ERR(null,"你的好友都已经在群中了");
|
|
|
+ }
|
|
|
+ List<UserLogin> userLogins = userLoginMapper.selectBatchIds(collect1);
|
|
|
|
|
|
-// 踢人
|
|
|
+ return Result.OK(userLogins,"查询成功");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 踢人
|
|
|
@Override
|
|
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout = 30)
|
|
|
public Result DelGroupMembers(DelGroupMembers delGroupMembers) {
|
|
@@ -237,7 +278,97 @@ public class GroupsServiceImpl extends ServiceImpl<GroupsMapper, Groupss>
|
|
|
return list3;
|
|
|
}
|
|
|
|
|
|
+// 查询群成员
|
|
|
+ @Override
|
|
|
+ public Result getGroupUsers(AddUserLoginDto groupId) {
|
|
|
+ Groupss groupss = this.baseMapper.selectById(groupId.getId());
|
|
|
+ Long groupId1 = groupss.getGroupId();
|
|
|
+ List<GroupMembers> list = groupMembersMapper.selectList(new LambdaQueryWrapper<GroupMembers>().eq(GroupMembers::getGroupId, groupId1));
|
|
|
+
|
|
|
+ List<Long> uid = list.stream().map(GroupMembers::getUserId).collect(Collectors.toList());
|
|
|
+ List<UserLogin> userLogins = userLoginMapper.selectBatchIds(uid);
|
|
|
+
|
|
|
+ GroupsVo groupsVos = new GroupsVo();
|
|
|
+ groupsVos.setName(groupss.getName());
|
|
|
+ groupsVos.setAvatar(groupss.getAvatar());
|
|
|
+ groupsVos.setDescription(groupss.getDescription());
|
|
|
+ groupsVos.setMaxMembers(groupss.getMaxMembers());
|
|
|
+ groupsVos.setStatus(groupss.getStatus());
|
|
|
+ groupsVos.setCreatedAt(groupss.getCreatedAt());
|
|
|
+ groupsVos.setUpdatedAt(groupss.getUpdatedAt());
|
|
|
+ groupsVos.setGroupId(groupss.getGroupId());
|
|
|
+ groupsVos.setCreatorId(groupss.getCreatorId());
|
|
|
+ groupsVos.setAnnouncement(groupss.getAnnouncement());
|
|
|
+ List<UserVo> userVos = new ArrayList<>();
|
|
|
+
|
|
|
+ Map<Long,GroupMembers> map = list.stream().collect(Collectors.toMap(GroupMembers::getUserId, groupMembers -> groupMembers));
|
|
|
+
|
|
|
+ for (UserLogin userLogin:userLogins){
|
|
|
+ UserVo userVo = new UserVo();
|
|
|
+ userVo.setUserId(userLogin.getId());
|
|
|
+ userVo.setNickName(userLogin.getNickName());
|
|
|
+ userVo.setImg(userLogin.getAvatar());
|
|
|
+ GroupMembers groupMembers1 = map.get(userLogin.getId());
|
|
|
+ userVo.setRole(groupMembers1.getRole());
|
|
|
+ userVos.add(userVo);
|
|
|
+ }
|
|
|
+ groupsVos.setUser(userVos);
|
|
|
+
|
|
|
+
|
|
|
+ return Result.OK(groupsVos,"查询成功");
|
|
|
+ }
|
|
|
+// 获取群的信息
|
|
|
+ @Override
|
|
|
+ public Result getGroupDetails(Long groupId) {
|
|
|
+ Groupss groupss = this.baseMapper.selectById(groupId);
|
|
|
+ if (groupss != null) {
|
|
|
+ return Result.OK(groupss, "查询成功");
|
|
|
+ } else {
|
|
|
+ return Result.ERR(null, "群聊不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout = 30)
|
|
|
+ public Result updateGroupMemberRole(UpdateGroupMemberRoleDto updateGroupMemberRoleDto) {
|
|
|
+ if (updateGroupMemberRoleDto.getGroupssId() == null || updateGroupMemberRoleDto.getUserId() == null || updateGroupMemberRoleDto.getRole() == null) {
|
|
|
+ return Result.ERR(null, "参数不能为空");
|
|
|
+ }
|
|
|
|
|
|
+ // 查找群成员
|
|
|
+ LambdaQueryWrapper<GroupMembers> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(GroupMembers::getGroupId, updateGroupMemberRoleDto.getGroupssId())
|
|
|
+ .eq(GroupMembers::getUserId, updateGroupMemberRoleDto.getUserId());
|
|
|
+ GroupMembers groupMember = groupMembersMapper.selectOne(queryWrapper);
|
|
|
+
|
|
|
+ if (groupMember == null) {
|
|
|
+ return Result.ERR(null, "群成员不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查新的角色值是否有效
|
|
|
+ if (updateGroupMemberRoleDto.getRole() < 0 || updateGroupMemberRoleDto.getRole() > 1) { // 0-普通成员, 1-管理员
|
|
|
+ return Result.ERR(null, "无效的角色值");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新角色
|
|
|
+ groupMember.setRole(updateGroupMemberRoleDto.getRole());
|
|
|
+ int rowsAffected = groupMembersMapper.updateById(groupMember);
|
|
|
+
|
|
|
+ if (rowsAffected > 0) {
|
|
|
+ // 更新群成员缓存 (如果需要的话,这里可以重新加载整个群的成员或者单独更新)
|
|
|
+ List<GroupMembers> remainingMembers = groupMembersService.list(
|
|
|
+ new LambdaQueryWrapper<GroupMembers>()
|
|
|
+ .eq(GroupMembers::getGroupId, updateGroupMemberRoleDto.getGroupssId())
|
|
|
+ );
|
|
|
+ List<Long> memberIds = remainingMembers.stream()
|
|
|
+ .map(GroupMembers::getUserId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ groupMemberCache.updateGroupMembers(updateGroupMemberRoleDto.getGroupssId(), memberIds);
|
|
|
+ return Result.OK(null, "成员角色更新成功");
|
|
|
+ } else {
|
|
|
+ return Result.ERR(null, "成员角色更新失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|