|
@@ -1,596 +0,0 @@
|
|
|
-package com.ym.mec.biz.service.impl;
|
|
|
-
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
-import com.google.common.collect.Lists;
|
|
|
-import com.microsvc.toolkit.common.tools.ThreadPool;
|
|
|
-import com.microsvc.toolkit.middleware.im.ImPluginContext;
|
|
|
-import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
|
|
|
-import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
|
|
|
-import com.ym.mec.biz.dal.entity.ImGroup;
|
|
|
-import com.ym.mec.biz.dal.entity.ImGroupMember;
|
|
|
-import com.ym.mec.biz.dal.enums.EFriendRoleType;
|
|
|
-import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
|
|
|
-import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
|
|
|
-import com.ym.mec.biz.service.ImGroupMemberPlusService;
|
|
|
-import com.ym.mec.biz.service.ImGroupPlusService;
|
|
|
-import com.ym.mec.biz.service.ImGroupCoreService;
|
|
|
-import com.ym.mec.common.exception.BizException;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
-
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
-import java.util.Optional;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-/**
|
|
|
- * IM群组务
|
|
|
- * Created by Eric.Shang on 2022/11/26.
|
|
|
- */
|
|
|
-@Slf4j
|
|
|
-@Service
|
|
|
-public class ImGroupCoreServiceImpl implements ImGroupCoreService {
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private ImPluginContext imPluginContext;
|
|
|
- @Autowired
|
|
|
- private ImGroupPlusService imGroupService;
|
|
|
- @Autowired
|
|
|
- private ImConfigProperties imConfig;
|
|
|
- @Autowired
|
|
|
- private ImGroupMemberPlusService imGroupMemberService;
|
|
|
-
|
|
|
- /**
|
|
|
- * IM 用户注册
|
|
|
- *
|
|
|
- * @param userId 用户ID
|
|
|
- * @param username 用户名
|
|
|
- * @param avatar 用户头象
|
|
|
- * @return IM聊天Token
|
|
|
- */
|
|
|
- @Override
|
|
|
- public ImGroupWrapper.ImUserInfo register(String userId, String clientType, String username, String avatar) throws Exception {
|
|
|
-
|
|
|
- ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
|
|
|
- .imUserId(getImUserId(userId, clientType))
|
|
|
- .imToken("")
|
|
|
- .build();
|
|
|
-
|
|
|
- // 聊天Token
|
|
|
- String imUserId = userInfo.getImUserId();
|
|
|
- // 生成IM聊天Token
|
|
|
- try {
|
|
|
- // 生成签名
|
|
|
- userInfo.imUserId(imUserId)
|
|
|
- .setImToken(imPluginContext.getPluginService().register(imUserId, username, avatar));
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("register ImToken EX, userId={}, username={}", userId, username, e);
|
|
|
- // 重新计算用户签名
|
|
|
- userInfo.setImToken(imPluginContext.getPluginService().getUserSig(imUserId));
|
|
|
- }
|
|
|
- return userInfo;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * IM 用户签名
|
|
|
- *
|
|
|
- * @param userId 用户ID
|
|
|
- * @param clientType 用户身份
|
|
|
- * @return ImGroupWrapper.ImUserInfo
|
|
|
- */
|
|
|
- @Override
|
|
|
- public ImGroupWrapper.ImUserInfo getUserSig(String userId, String clientType) {
|
|
|
-
|
|
|
- ImGroupWrapper.ImUserInfo userInfo = ImGroupWrapper.ImUserInfo.builder()
|
|
|
- .imUserId(getImUserId(userId, clientType))
|
|
|
- .imToken("")
|
|
|
- .build();
|
|
|
-
|
|
|
- // 计算用户IM签名
|
|
|
- userInfo.setImToken(imPluginContext.getPluginService().getUserSig(userInfo.getImUserId()));
|
|
|
-
|
|
|
- return userInfo;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * IM 用户注册
|
|
|
- *
|
|
|
- * @param userId 用户Id
|
|
|
- * @return String
|
|
|
- */
|
|
|
- @Override
|
|
|
- public String getImUserId(String userId, String clientType) {
|
|
|
- /*if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && !userId.startsWith(imConfig.getAppPrefix())) {
|
|
|
- imUserId = MessageFormat.format("{0}_{1}_{2}", imConfig.getAppPrefix(), userId, clientType);
|
|
|
- }*/
|
|
|
- return userId;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 解析IM用户规则
|
|
|
- *
|
|
|
- * @param imUserId IM用户Id
|
|
|
- * @return String
|
|
|
- */
|
|
|
- @Override
|
|
|
- public String analysisImUserId(String imUserId) {
|
|
|
- if (StringUtils.isNotBlank(imConfig.getAppPrefix()) && imUserId.startsWith(imConfig.getAppPrefix())) {
|
|
|
- return imUserId.replace(imConfig.getAppPrefix() + "_", "").split("_")[0];
|
|
|
- }
|
|
|
- return imUserId;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加群组信息
|
|
|
- *
|
|
|
- * @param userInfo 用户信息
|
|
|
- * @param imGroup ImGroupWrapper.ImGroup
|
|
|
- * @return Boolean
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- public String groupCreate(ImGroupMemberWrapper.ImGroupMember userInfo, ImGroupWrapper.ImGroup imGroup) throws Exception {
|
|
|
-
|
|
|
- long id = Optional.ofNullable(imGroup.getId()).orElse(IdWorker.getId());
|
|
|
- // 生成群组ID
|
|
|
- imGroup.id(id)
|
|
|
- .type(Optional.ofNullable(imGroup.getType()).orElse("CLASS"))
|
|
|
- .groupId(String.valueOf(id));
|
|
|
-
|
|
|
- ImGroup group = JSON.parseObject(imGroup.jsonString(), ImGroup.class);
|
|
|
- group.setId(imGroup.getGroupId());
|
|
|
- // 保存群组信息
|
|
|
- imGroupService.saveOrUpdate(group);
|
|
|
-
|
|
|
- List<ImGroupMemberWrapper.ImGroupMember> groupMembers = null;
|
|
|
- String imUserId = null;
|
|
|
- if (userInfo != null) {
|
|
|
- imUserId = getImUserId(userInfo.getUserId().toString(), userInfo.getClientType());
|
|
|
- groupMembers = Lists.newArrayList(userInfo);
|
|
|
-
|
|
|
- groupMembers.add(userInfo.imUserId(imUserId));
|
|
|
- imGroupMemberService.insertBatch(getImGroupMemberEntity(groupMembers));
|
|
|
-
|
|
|
- // 自动激活学生IM帐号
|
|
|
- registerUser(groupMembers);
|
|
|
- }
|
|
|
-
|
|
|
- // 创建IM群组
|
|
|
- imPluginContext.getPluginService().groupCreate(imGroup.getGroupId(), imGroup.getName(),imUserId);
|
|
|
-
|
|
|
- if (userInfo != null) {
|
|
|
- // 添加群成员到当前群组
|
|
|
- imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),
|
|
|
- getImGroupMembers(groupMembers));
|
|
|
- }
|
|
|
- return group.getId();
|
|
|
- }
|
|
|
-
|
|
|
- private List<ImGroupMember> getImGroupMemberEntity(List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
- if (CollectionUtils.isEmpty(groupMembers)) {
|
|
|
- return new ArrayList<>();
|
|
|
- }
|
|
|
- return groupMembers.stream().map(o -> {
|
|
|
- ImGroupMember imGroupMember = new ImGroupMember();
|
|
|
- imGroupMember.setImGroupId(o.getGroupId());
|
|
|
- imGroupMember.setUserId(o.getUserId().intValue());
|
|
|
- imGroupMember.setNickname(o.getNickname());
|
|
|
- imGroupMember.setIsAdmin(o.getIsAdmin());
|
|
|
- imGroupMember.setRoleType(o.getRoleType());
|
|
|
- imGroupMember.setType(EFriendRoleType.getByName(o.getRoleType()).name());
|
|
|
- imGroupMember.setTenantId(o.getTenantId());
|
|
|
-
|
|
|
- return imGroupMember;
|
|
|
- }).collect(Collectors.toList());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取群组成员信息
|
|
|
- *
|
|
|
- * @param groupMembers 群组成员信息
|
|
|
- * @return List<GroupMemberWrapper.ImGroupMember>
|
|
|
- */
|
|
|
- private List<GroupMemberWrapper.ImGroupMember> getImGroupMembers(List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
- // 统一转换为群组成员信息
|
|
|
- for (ImGroupMemberWrapper.ImGroupMember member : groupMembers) {
|
|
|
- member.setImUserId(getImUserId(member.getUserId().toString(), member.getClientType()));
|
|
|
- }
|
|
|
- return JSON.parseArray(JSON.toJSONString(groupMembers), GroupMemberWrapper.ImGroupMember.class);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 自动注册用户
|
|
|
- * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
- */
|
|
|
- private void asyncRegisterUser(List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
- ThreadPool.getExecutor().submit(() -> registerUser(groupMembers));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量导入用户
|
|
|
- * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
- */
|
|
|
- private void registerUser(List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
|
|
|
- for (ImGroupMemberWrapper.ImGroupMember member : groupMembers) {
|
|
|
- // 激活用户帐号为空
|
|
|
- if (StringUtils.isBlank(member.getNickname())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- String imUserId = member.getUserId().toString();
|
|
|
- if (StringUtils.isBlank(imUserId)) {
|
|
|
- imUserId = getImUserId(String.valueOf(member.getUserId()),
|
|
|
- member.getClientType());
|
|
|
- }
|
|
|
-
|
|
|
- imPluginContext.getPluginService().register(imUserId, member.getNickname(), member.getAvatar());
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("registerUser member imToken");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 群组解散
|
|
|
- *
|
|
|
- * @param groupId 群组ID
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupDismiss(String groupId) throws Exception {
|
|
|
-
|
|
|
- // 判定登录用户是否为群主
|
|
|
- ImGroup imGroup = imGroupService.lambdaQuery().eq(ImGroup::getId, groupId).last("LIMIT 1").one();
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 获取群成员
|
|
|
- List<ImGroupMemberWrapper.ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
|
|
|
- .select(ImGroupMember::getUserId, ImGroupMember::getImGroupId, ImGroupMember::getRoleType)
|
|
|
- .eq(ImGroupMember::getImGroupId, groupId)
|
|
|
- .list().stream()
|
|
|
- .map(x -> ImGroupMemberWrapper.ImGroupMember.builder().userId(x.getUserId().longValue()).groupId(x.getImGroupId()).clientType(x.getRoleType()).build())
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- // 删除群组
|
|
|
- imGroupService.remove(Wrappers.<ImGroup>lambdaQuery().eq(ImGroup::getId, groupId));
|
|
|
-
|
|
|
- // 删除群组成员
|
|
|
- imGroupMemberService.remove(Wrappers.<ImGroupMember>lambdaQuery().eq(ImGroupMember::getImGroupId, groupId));
|
|
|
-
|
|
|
- // 解散群
|
|
|
- imPluginContext.getPluginService().groupDismiss(imGroup.getId(), getImGroupMembers(groupMembers));
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 用户主动退出群聊
|
|
|
- *
|
|
|
- * @param imGroupMember 用户信息
|
|
|
- * @param groupId 群组ID
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupQuit(GroupMemberWrapper.ImGroupMember imGroupMember, String groupId) throws Exception {
|
|
|
-
|
|
|
- // 判定登录用户是否为群主
|
|
|
- ImGroup imGroup = imGroupService.lambdaQuery().eq(ImGroup::getId, groupId).last("LIMIT 1").one();
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
- // 统计当前群成员用户数
|
|
|
- long count = imGroupMemberService.count(Wrappers.<ImGroupMember>lambdaQuery().eq(ImGroupMember::getImGroupId, groupId));
|
|
|
-
|
|
|
- // 删除当前用户群成员身份
|
|
|
- boolean remove = imGroupMemberService.remove(Wrappers.<ImGroupMember>lambdaQuery()
|
|
|
- .eq(ImGroupMember::getImGroupId, groupId)
|
|
|
- .eq(ImGroupMember::getUserId, imGroupMember.getUserId())
|
|
|
-// .eq(ImGroupMember::getRoleType, imGroupMember.getRoleType())
|
|
|
- );
|
|
|
- if (!remove) {
|
|
|
- // 用户主动退出群聊失败
|
|
|
- throw new BizException("用户主动退出群聊失败");
|
|
|
- }
|
|
|
-
|
|
|
- // 修改群组成员数
|
|
|
- imGroupService.lambdaUpdate()
|
|
|
- .eq(ImGroup::getId, imGroup.getId())
|
|
|
- .set(ImGroup::getMemberNum, count - 1)
|
|
|
- .update();
|
|
|
-
|
|
|
- // 群主退出
|
|
|
- List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList();
|
|
|
- groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
|
|
|
- .userId(imGroupMember.getUserId())
|
|
|
- .groupId(groupId)
|
|
|
- .clientType(imGroupMember.getClientType())
|
|
|
- .imUserId(getImUserId(imGroupMember.getUserId().toString(), imGroupMember.getClientType()))
|
|
|
- .build());
|
|
|
-
|
|
|
- imPluginContext.getPluginService().groupQuit(imGroup.getId(), getImGroupMembers(groupMembers));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量退群
|
|
|
- *
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupQuit(List<GroupMemberWrapper.ImGroupMember> imGroupMembers, String groupId) throws Exception {
|
|
|
-
|
|
|
-
|
|
|
- // 判定登录用户是否为群主
|
|
|
- ImGroup imGroup = imGroupService.lambdaQuery().eq(ImGroup::getId, groupId).last("LIMIT 1").one();
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
- if (CollectionUtils.isEmpty(imGroupMembers)){
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // id集合
|
|
|
- List<Long> userIds = imGroupMembers.stream()
|
|
|
- .map(GroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
|
|
|
-
|
|
|
-
|
|
|
- // 删除当前用户群成员身份
|
|
|
- boolean remove = imGroupMemberService.remove(Wrappers.<ImGroupMember>lambdaQuery()
|
|
|
- .eq(ImGroupMember::getImGroupId, groupId)
|
|
|
- .in(ImGroupMember::getUserId, userIds)
|
|
|
- );
|
|
|
- if (!remove) {
|
|
|
- // 用户主动退出群聊失败
|
|
|
- throw new BizException("用户主动退出群聊失败");
|
|
|
- }
|
|
|
-
|
|
|
- // 统计当前群成员用户数
|
|
|
- long count = imGroupMemberService.count(Wrappers.<ImGroupMember>lambdaQuery().eq(ImGroupMember::getImGroupId, groupId));
|
|
|
-
|
|
|
- // 修改群组成员数
|
|
|
- imGroupService.lambdaUpdate()
|
|
|
- .eq(ImGroup::getId, imGroup.getId())
|
|
|
- .set(ImGroup::getMemberNum, count)
|
|
|
- .update();
|
|
|
- imPluginContext.getPluginService().groupQuit(imGroup.getId(), imGroupMembers);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 用户主动退出群聊
|
|
|
- *
|
|
|
- * @param userId 用户信息
|
|
|
- * @param clientType EClientType
|
|
|
- * @param imGroupId 群组ID
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupQuit(Long userId, String clientType, String imGroupId) throws Exception {
|
|
|
-
|
|
|
- ImGroup imGroup = imGroupService.getById(imGroupId);
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
- GroupMemberWrapper.ImGroupMember groupMember = GroupMemberWrapper.ImGroupMember.builder()
|
|
|
- .userId(userId)
|
|
|
- .roleType(clientType)
|
|
|
- .clientType(clientType)
|
|
|
- .imUserId(getImUserId(userId.toString(), clientType))
|
|
|
- .build();
|
|
|
- // 退出群聊
|
|
|
- groupQuit(groupMember, imGroup.getId());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加群组成员
|
|
|
- * @param imGroupId 群组ID
|
|
|
- * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void saveImGroupMemberList(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
|
|
|
-
|
|
|
- if (CollectionUtils.isEmpty(groupMembers)) {
|
|
|
- // 群成员为空,直接忽略
|
|
|
- return;
|
|
|
- }
|
|
|
- // 查询群组主键Id
|
|
|
- for (ImGroupMemberWrapper.ImGroupMember item : groupMembers) {
|
|
|
- item.id(IdWorker.getId()).imUserId(getImUserId(item.getUserId().toString(), item.getClientType())).setGroupId(imGroupId);
|
|
|
- }
|
|
|
-
|
|
|
- imGroupMemberService.insertBatch(getImGroupMemberEntity(groupMembers));
|
|
|
- // 判断群ID是否有效
|
|
|
- ImGroup imGroup = imGroupService.lambdaQuery().eq(ImGroup::getId, imGroupId).last("LIMIT 1").one();
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
- // 更新群组成员数
|
|
|
- updateGroupMemberNumber(imGroup.getId(), imGroup);
|
|
|
-
|
|
|
- if (groupMembers.stream().anyMatch(ImGroupMemberWrapper.ImGroupMember::getGroupJoin)) {
|
|
|
-
|
|
|
- // 过滤出需要添加到群组的成员
|
|
|
- groupMembers = groupMembers.stream().filter(ImGroupMemberWrapper.ImGroupMember::getGroupJoin).collect(Collectors.toList());
|
|
|
-
|
|
|
- // 添加群成员到当前群组
|
|
|
- imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
|
|
|
-
|
|
|
- // 自动激活用户
|
|
|
- asyncRegisterUser(groupMembers);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加群组成员
|
|
|
- *
|
|
|
- * @param imGroupId 群组主键ID
|
|
|
- * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void saveImGroupMemberList(Long imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
|
|
|
-
|
|
|
- // 群组信息
|
|
|
- ImGroup imGroup = imGroupService.getById(imGroupId);
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
- // 添加群组成员信息
|
|
|
- saveImGroupMemberList(imGroup.getId(), groupMembers);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 群成员加入
|
|
|
- *
|
|
|
- * @param imGroupId 群主ID
|
|
|
- * @param groupMembers 群成员
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
|
|
|
-
|
|
|
- // 群组信息
|
|
|
- ImGroup imGroup = imGroupService.lambdaQuery().eq(ImGroup::getId, imGroupId).last("LIMIT 1").one();
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
- // 添加群组成员信息
|
|
|
- if (CollectionUtils.isEmpty(groupMembers)) {
|
|
|
- // 群成员为空,直接忽略
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 添加群成员到当前群组
|
|
|
- imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
|
|
|
-
|
|
|
- // 自动激活用户
|
|
|
- asyncRegisterUser(groupMembers);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新群组成员数
|
|
|
- * @param groupId 群组ID
|
|
|
- * @param imGroup ImGroup
|
|
|
- */
|
|
|
- private void updateGroupMemberNumber(String groupId, ImGroup imGroup) {
|
|
|
-
|
|
|
- // 统计当前群成员用户数
|
|
|
- long count = imGroupMemberService.count(Wrappers.<ImGroupMember>lambdaQuery().eq(ImGroupMember::getImGroupId, groupId));
|
|
|
-
|
|
|
- // 修改群组成员数
|
|
|
- imGroupService.lambdaUpdate()
|
|
|
- .eq(ImGroup::getId, imGroup.getId())
|
|
|
- .set(ImGroup::getMemberNum, count)
|
|
|
- .update();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加进入群组
|
|
|
- *
|
|
|
- * @param userId 用户ID
|
|
|
- * @param clientType 客户端类型
|
|
|
- * @param imGroupId 群组ID
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void groupJoin(Long userId, String clientType, String imGroupId) throws Exception {
|
|
|
-
|
|
|
- // 群组信息
|
|
|
- ImGroup imGroup = imGroupService.getById(imGroupId);
|
|
|
- if (Objects.isNull(imGroup)) {
|
|
|
- throw new BizException("群组不存在");
|
|
|
- }
|
|
|
-
|
|
|
- List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers = new ArrayList<>();
|
|
|
- ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember
|
|
|
- .builder()
|
|
|
- .groupId(imGroup.getId())
|
|
|
- .userId(userId)
|
|
|
- .clientType(clientType)
|
|
|
- .imUserId(getImUserId(userId.toString(),clientType))
|
|
|
- .isAdmin(false)
|
|
|
- .roleType(clientType)
|
|
|
- .build();
|
|
|
- imGroupMembers.add(groupMember);
|
|
|
-
|
|
|
- saveImGroupMemberList(imGroupId, imGroupMembers);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 转让群主
|
|
|
- *
|
|
|
- * @param groupId 群组ID
|
|
|
- * @param newOwner 新群主
|
|
|
- * @param oldOwner 旧群主
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void changeGroupOwner(String groupId, String newOwner, String oldOwner) throws Exception {
|
|
|
-
|
|
|
- // 转主群主
|
|
|
- imPluginContext.getPluginService().changeGroupOwner(groupId, newOwner, oldOwner);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新群信息
|
|
|
- *
|
|
|
- * @param groupId 群ID
|
|
|
- * @param groupName 群名称
|
|
|
- * @param faceUrl 群头像
|
|
|
- * @throws Exception Exception
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void modifyGroupInfo(String groupId, String groupName, String faceUrl) throws Exception {
|
|
|
-
|
|
|
- // 更新群信息
|
|
|
- imPluginContext.getPluginService().modifyGroupInfo(groupId, groupName, faceUrl);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 群成员加入三方IM状态
|
|
|
- *
|
|
|
- * @param groupMemberIds 群成员ID
|
|
|
- * @param groupJoin 加群状态
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void updateGroupMemberJoinStatus(List<Long> groupMemberIds, Boolean groupJoin) {
|
|
|
-
|
|
|
-// if (CollectionUtils.isEmpty(groupMemberIds)) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 群成员加入三方IM状态
|
|
|
-// imGroupMemberService.lambdaUpdate()
|
|
|
-// .set(ImGroupMember::getGroupJoin, groupJoin)
|
|
|
-// .in(ImGroupMember::getId, groupMemberIds)
|
|
|
-// .update();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean checkImUserId(String imUserId) {
|
|
|
- try {
|
|
|
- Integer.parseInt(analysisImUserId(imUserId));
|
|
|
- return true;
|
|
|
- } catch (Exception e) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-}
|