| 
					
				 | 
			
			
				@@ -2,32 +2,43 @@ package com.yonge.cooleshow.biz.dal.service.im.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.metadata.IPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.toolkit.IdWorker; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.dayaedu.cbs.common.enums.EClientType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.common.collect.Lists; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.common.collect.Maps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.common.tools.ThreadPool; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.ImPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.microsvc.toolkit.middleware.im.ImPluginService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.entity.ImGroup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.entity.SysUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.enums.ClientEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.enums.RoleEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.service.ImGroupService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.SysUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberAuditWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupMemberWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.toolset.base.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.collections.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.collections.MapUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.text.MessageFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -51,6 +62,11 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImGroupMemberService imGroupMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImGroupMemberAuditService imGroupMemberAuditService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysUserService sysUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final String IM_USER_ID_SPLIT = "_"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * IM 用户注册 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -179,6 +195,8 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ImGroup group = JSON.parseObject(imGroup.jsonString(), ImGroup.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         group.setId(imGroup.getGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建群默认全员不禁言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        group.setConfigJson(ImGroupWrapper.ImGroupConfigJson.builder().mute(false).build().toJson()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存群组信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         imGroupService.saveOrUpdate(group); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -680,8 +698,74 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void changeGroupOwner(String groupId, String newOwner, String oldOwner) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (newOwner.equals(oldOwner)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BizException("不能转让给自己"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 判断旧群主 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] values = analysisImUserId(oldOwner).split(IM_USER_ID_SPLIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 新群主ID和身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long userId = Long.parseLong(values[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String clientType = values[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ImGroupMember groupMember = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getGroupId, groupId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getRoleType, clientType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getIsAdmin, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .last("LIMIT 1") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .one(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (groupMember == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("旧群主错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 判定新群主是否为禁言状态,需要先解除禁言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] values = analysisImUserId(newOwner).split(IM_USER_ID_SPLIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 新群主ID和身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long userId = Long.parseLong(values[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String clientType = values[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ImGroupMember member = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getGroupId, groupId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getRoleType, clientType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .last("LIMIT 1") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .one(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Objects.isNull(member)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new BizException("新群主用户不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 解除禁言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Optional.ofNullable(member.getGroupMute()).orElse(false)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imPluginContext.getPluginService().groupUserGagRemove(getImUserId(newOwner, clientType), groupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 更新用户群禁言状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMemberService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .eq(ImGroupMember::getId, member.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .set(ImGroupMember::getGroupMute, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 转主群主 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imPluginContext.getPluginService().changeGroupOwner(groupId, newOwner, oldOwner); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 修改群成员身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            updateGroupOwner(groupId, newOwner, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 旧群主ID和身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            updateGroupOwner(groupId, oldOwner, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("changeGroupOwner 转让群主失败, groupId={}, newOwner={}, oldOwner={}", groupId, newOwner, oldOwner, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("转让群主失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 转主群主 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        imPluginContext.getPluginService().changeGroupOwner(groupId, getImUserId(newOwner,ClientEnum.TEACHER.getCode()), getImUserId(oldOwner,ClientEnum.TEACHER.getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        imPluginContext.getPluginService().changeGroupOwner(groupId, getImUserId(newOwner,ClientEnum.TEACHER.getCode()), getImUserId(oldOwner,ClientEnum.TEACHER.getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -745,4 +829,179 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return imPluginContext.getPluginService().deleteGroupRecentContact(userId, groupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void groupMemberMute(ImGroupMemberWrapper.GroupMemberMute member) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 群成员ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> userIds = JSON.parseArray(JSON.toJSONString(member.getUserIds()), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 更新群成员禁言状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupMember> list = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getGroupId, member.getGroupId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getGroupRoleType, member.getGroupRoleType()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .in(ImGroupMember::getUserId, userIds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isEmpty(list)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 用户ImUserId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> imUserIds = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupMember> updateList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (ImGroupMember imGroupMember : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imUserIds.add(getImUserId(imGroupMember.getUserId().toString(), imGroupMember.getRoleType().getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ImGroupMember imGroupMember1 = new ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMember1.setId(imGroupMember.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMember1.setGroupMute(member.getGroupMute()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                updateList.add(imGroupMember1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imGroupMemberService.updateBatchById(updateList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ImPluginService pluginService = imPluginContext.getPluginService(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Boolean.TRUE.equals(member.getGroupMute())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 群成员禁言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pluginService.groupUserGagCreate(imUserIds, member.getGroupId(), member.getMuteTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 群成员解除禁言 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pluginService.groupUserGagRemove(imUserIds, member.getGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("群成员禁言失败", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("群成员禁言失败,请联系管理员!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public IPage<ImGroupMemberWrapper.ImGroupMember> imGroupMemberPage(IPage<ImGroupMemberWrapper.ImGroupMember> page, ImGroupMemberWrapper.ImGroupMemberQuery query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 群聊成员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IPage<ImGroupMemberWrapper.ImGroupMember> pages = imGroupMemberService.selectPage(page, query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isNotEmpty(pages.getRecords())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupMemberWrapper.ImGroupMember> records = pages.getRecords(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> userIds = records.stream().map(ImGroupMemberWrapper.ImGroupMember::getUserId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Long, SysUser> userIdMap = sysUserService.getMapByIds(userIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 填充群成员信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (ImGroupMemberWrapper.ImGroupMember item : records) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setImUserId(getImUserId(item.getImUserId(), item.getClientType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (userIdMap.containsKey(item.getUserId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SysUser sysUser = userIdMap.get(item.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    item.setAvatar(sysUser.getAvatar()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    item.setNickname(sysUser.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void groupMemberRole(ImGroupMemberWrapper.GroupMemberRole member) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 群成员ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> userIds = JSON.parseArray(JSON.toJSONString(member.getUserIds()), Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 更新群成员禁言状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupMember> list = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getGroupId, member.getGroupId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .in(ImGroupMember::getUserId, userIds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isEmpty(list)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 用户ImUserId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> imUserIds = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupMember> updateList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (ImGroupMember imGroupMember : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imUserIds.add(getImUserId(imGroupMember.getUserId().toString(), imGroupMember.getRoleType().getCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ImGroupMember imGroupMember1 = new ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMember1.setId(imGroupMember.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMember1.setGroupRoleType(member.getGroupRoleType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                updateList.add(imGroupMember1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imGroupMemberService.updateBatchById(updateList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (List<ImGroupMember> items : Lists.partition(list, 50)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                items.parallelStream().forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String imUserId = getImUserId(item.getUserId().toString(), item.getRoleType().getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ImPluginService pluginService = imPluginContext.getPluginService(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        switch (member.getGroupRoleType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case Admin: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                // 管理员取消群禁言状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (Optional.ofNullable(item.getGroupMute()).orElse(false)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    pluginService.groupUserGagRemove(imUserId, member.getGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    imGroupMemberService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            .eq(ImGroupMember::getId, item.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            .set(ImGroupMember::getGroupMute, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            .update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                // 设置管理员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                pluginService.groupAdminCreate(member.getGroupId(), imUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            case Member: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                // 取消管理员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                pluginService.groupAdminRemove(member.getGroupId(), imUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        log.error("群成员身份更新异常", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new BizException("群成员身份更新异常,请联系管理员!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("群成员身份更新异常", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("群成员身份更新异常,请联系管理员!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 更新用户群主身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param groupId 群组ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param groupMember 群成员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param isAdmin 群主标记 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void updateGroupOwner(String groupId, String groupMember, Boolean isAdmin) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String[] values = analysisImUserId(groupMember).split(IM_USER_ID_SPLIT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 新群主ID和身份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        long userId = Long.parseLong(values[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String clientType = values[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        EImGroupMemberRoleType groupRoleType = EImGroupMemberRoleType.fromClientType(clientType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Boolean.TRUE.equals(isAdmin)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            groupRoleType = EImGroupMemberRoleType.Owner; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        imGroupMemberService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(ImGroupMember::getGroupId, groupId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(ImGroupMember::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(ImGroupMember::getRoleType, EClientType.valueOf(clientType)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .set(ImGroupMember::getGroupRoleType, groupRoleType) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .set(ImGroupMember::getIsAdmin, isAdmin) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (EImGroupMemberRoleType.Admin == groupRoleType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 设置管理员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imPluginContext.getPluginService().groupAdminCreate(groupId, groupMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("updateGroupOwner 设置管理员失败, groupId={}, groupMember={}", groupId, groupMember, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |