| 
					
				 | 
			
			
				@@ -1,79 +1,37 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.ym.mec.biz.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.HashSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Optional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Set; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.CompletableFuture; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.ExecutorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.Executors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.TimeUnit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.google.common.collect.Lists; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.ImPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dto.SimpleUserDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.enums.EFriendRoleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.enums.im.ClientEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.enums.im.EImGroupRoleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.wrapper.ImGroupWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.service.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.service.im.ImGroupCoreService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.common.page.QueryInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.joda.time.DateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.redisson.api.RBucket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.redisson.api.RedissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.dao.DuplicateKeyException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.security.authentication.LockedException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.auth.api.client.SysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.auth.api.entity.SysRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.auth.api.entity.SysUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.ClassGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.CooperationOrganDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.EmployeeDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.ImGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.OrganizationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.SysEmployeePositionDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.dao.TeacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.dao.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dto.EmployeeDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dto.EmployeeLevelDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.dto.SysUserDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.Employee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.Organization; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.SysUserCashAccount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.SysUserTenant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ym.mec.biz.dal.entity.TenantInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.enums.EFriendRoleType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.enums.GroupType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.enums.ParamEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.enums.im.ClientEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.page.EmployeeQueryInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.biz.dal.page.UserBasicQueryInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.service.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.biz.service.im.ImGroupCoreService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.dal.BaseDAO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.entity.ImGroupModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.entity.ImResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.entity.ImUserModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.page.PageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ym.mec.common.page.QueryInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.page.WrapperUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.service.impl.BaseServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.common.tenant.TenantContextHolder; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -81,53 +39,74 @@ import com.ym.mec.im.ImFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.im.entity.GroupMember; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.im.entity.GroupModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ym.mec.util.collection.MapUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.collections.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.joda.time.DateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.redisson.api.RBucket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.redisson.api.RedissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.dao.DuplicateKeyException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.authentication.LockedException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> implements EmployeeService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private EmployeeDao employeeDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImFeignService imFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImGroupMemberService imGroupMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysUserFeignService sysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private TeacherDao teacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysUserCashAccountDao sysUserCashAccountDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ClassGroupDao classGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImUserFriendService imUserFriendService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private OrganizationDao organizationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImGroupDao imGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private CooperationOrganDao cooperationOrganDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private OaUserService oaUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private TenantInfoService tenantInfoService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysEmployeePositionService employeePositionService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysEmployeePositionDao employeePositionDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysUserTenantService sysUserTenantService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RedissonClient redissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImGroupCoreService imGroupCoreService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ImPluginContext imPluginContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysUserService sysUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final ExecutorService exportExecutorService = new ThreadPoolExecutor( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            5, 20, 0L, TimeUnit.MILLISECONDS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            new LinkedBlockingQueue<>(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Executors.defaultThreadFactory(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            new ThreadPoolExecutor.CallerRunsPolicy() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public BaseDAO<Integer, Employee> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return employeeDao; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -350,7 +329,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public PageInfo queryEmployByOrganId(EmployeeQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PageInfo<EmployeeDto> queryEmployByOrganId(EmployeeQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SysUser user = sysUserFeignService.queryUserInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (user == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("获取用户信息失败"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -421,12 +400,14 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sysUserFeignService.exitByPhone("teacher", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else if (sysUser.getUserType().contains("SYSTEM")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     sysUserFeignService.exitByPhone("system", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sysUserFeignService.exitByPhone("education", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case DEMISSION: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 employeeDao.updateUserLock(employeeId, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 employeeDao.updateUserDemissionDate(employeeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 sysUserFeignService.exitByPhone("system", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sysUserFeignService.exitByPhone("education", sysUser.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //更新OA信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 oaUserService.delOaUser(employee.getUserId()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -490,7 +471,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (Integer organId : organIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<EmployeeLevelDto> levelDtoList = organIdMap.get(organId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (EmployeeLevelDto employeeLevelDto : levelDtoList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (employeeLevelDto.getLevelUserId() == employeeLevelDto.getTransferUserId()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (Objects.equals(employeeLevelDto.getLevelUserId(), employeeLevelDto.getTransferUserId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         throw new BizException("交接人校验失败,请重新填写"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     userIds.add(employeeLevelDto.getTransferUserId()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -502,6 +483,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             cooperationOrganDao.batchUpdateEduId(employeeLevelDto.getTransferUserId(), levelUserId, organId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             //教务老师所需加入的群组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             educationGroupModels.addAll(classGroupDao.queryEducationGroups(employeeLevelDto.getTransferUserId(), levelUserId, organId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            //获取当前用户所在的衔接群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            educationGroupModels.addAll(imGroupDao.queryUserGroupList(employeeLevelDto.getTransferUserId(), levelUserId, "乐团主管", organId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         case "teamTeacher": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             //运营主管所需加入的群组 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -515,177 +498,175 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (educationGroupModels.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //❤️用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<GroupModel> groupModelList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (ImGroupModel imGroupModel : educationGroupModels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String userId = imGroupModel.getMemberList().get(0).getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setImGroupId(imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setIsAdmin(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setRoleType(imGroupModel.getUserRole()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(StringUtils.isNotEmpty(imGroupModel.getUserRole())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    imGroupMember.setType(EFriendRoleType.getByName(imGroupModel.getUserRole()).name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isNotEmpty(educationGroupModels)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompletableFuture.runAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //❤️用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<GroupModel> groupModelList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (ImGroupModel imGroupModel : educationGroupModels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String userId = imGroupModel.getMemberList().get(0).getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setImGroupId(imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setIsAdmin(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setRoleType(imGroupModel.getUserRole()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (StringUtils.isNotEmpty(imGroupModel.getUserRole())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        imGroupMember.setType(EFriendRoleType.getByName(imGroupModel.getUserRole()).name()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setUserId(Integer.parseInt(userId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMemberList.add(imGroupMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GroupMember groupMember = new GroupMember(userId, imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupModelList.add(groupModel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 腾讯云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .groupId(imGroupModel.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .roleType(imGroupModel.getUserRole()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .isAdmin(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .userId(Long.valueOf(userId)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .imUserId(userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .groupRoleType(imGroupMember.getGroupRoleType()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .nickname(realNameMap.get(imGroupMember.getUserId())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .updateTime(DateTime.now().toDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .createTime(DateTime.now().toDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setUserId(Integer.parseInt(userId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMemberList.add(imGroupMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                GroupMember groupMember = new GroupMember(userId, imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                groupModelList.add(groupModel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 腾讯云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .groupId(imGroupModel.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .roleType(imGroupModel.getUserRole()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .isAdmin(false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .userId(Long.valueOf(userId)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .imUserId(userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .groupRoleType(imGroupMember.getGroupRoleType()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .nickname(realNameMap.get(imGroupMember.getUserId())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .updateTime(DateTime.now().toDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .createTime(DateTime.now().toDate()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            imGroupMemberService.batchInsert(imGroupMemberList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMemberService.batchInsert(imGroupMemberList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 融云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imFeignService.groupBatchJoin(groupModelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 腾讯云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (org.apache.commons.collections.CollectionUtils.isNotEmpty(groupMembers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Map<String, List<ImGroupMemberWrapper.ImGroupMember>> imGroupMembers = groupMembers.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .collect(Collectors.groupingBy(ImGroupMemberWrapper.ImGroupMember::getGroupId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 融云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imFeignService.groupBatchJoin(groupModelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 腾讯云IM用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (org.apache.commons.collections.CollectionUtils.isNotEmpty(groupMembers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Map<String, List<ImGroupMemberWrapper.ImGroupMember>> imGroupMembers = groupMembers.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .collect(Collectors.groupingBy(ImGroupMemberWrapper.ImGroupMember::getGroupId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (Map.Entry<String, List<ImGroupMemberWrapper.ImGroupMember>> entry : imGroupMembers.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (Map.Entry<String, List<ImGroupMemberWrapper.ImGroupMember>> entry : imGroupMembers.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             // 设置用户默认头象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             for (ImGroupMemberWrapper.ImGroupMember member : entry.getValue()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 SysUser user = teacherDao.getUser(member.getUserId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 // 用户头像 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 member.setAvatar(sysUserService.getImAvatar(user)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if(StringUtils.isNotEmpty(member.getRoleType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    member.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    member.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (StringUtils.isNotEmpty(member.getRoleType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    member.setNickname(StringUtils.isEmpty(user.getRealName()) ? user.getUsername() : user.getRealName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    member.setNickname(StringUtils.isEmpty(user.getUsername()) ? user.getRealName() : user.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 腾讯云用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            imGroupCoreService.groupMemberJoin(entry.getKey(), entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            log.error("腾讯云IM用户加群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                // 腾讯云用户加群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                imGroupCoreService.groupMemberJoin(entry.getKey(), entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                log.error("腾讯云IM用户加群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //原有员工退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //原有员工退预报名群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (groupModels.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 融支IM用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<GroupModel> groupModelList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 腾讯云IM用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (ImGroupModel imGroupModel : groupModels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setImGroupId(imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMember.setUserId(Integer.parseInt(imGroupModel.getMemberList().get(0).getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMemberList.add(imGroupMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                GroupMember groupMember = new GroupMember(imGroupMember.getUserId().toString(), imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                groupModelList.add(groupModel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 腾讯云 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .groupId(imGroupModel.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .userId(imGroupMember.getUserId().longValue()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .imUserId(imGroupMember.getUserId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 用户批量退出群组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 融云退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imFeignService.groupBatchQuit(groupModelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 腾讯云退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (org.apache.commons.collections.CollectionUtils.isNotEmpty(imGroupMembers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Map<String, List<GroupMemberWrapper.ImGroupMember>> groupMembers = imGroupMembers.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .collect(Collectors.groupingBy(GroupMemberWrapper.ImGroupMember::getGroupId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            imGroupCoreService.groupQuit(entry.getValue(), entry.getKey()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            log.error("腾讯云IM用户退群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompletableFuture.runAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //原有员工退预报名群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //获取当前用户所在的衔接群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            groupModels.addAll(imGroupDao.queryUserGroupList(levelUserId, levelUserId, "乐团主管", null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(groupModels)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 融支IM用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<GroupModel> groupModelList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 腾讯云IM用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<GroupMemberWrapper.ImGroupMember> imGroupMembers = Lists.newArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (ImGroupModel imGroupModel : groupModels) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setImGroupId(imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMember.setUserId(Integer.parseInt(imGroupModel.getMemberList().get(0).getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMemberList.add(imGroupMember); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GroupMember groupMember = new GroupMember(imGroupMember.getUserId().toString(), imGroupModel.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[]{groupMember}, imGroupModel.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    groupModelList.add(groupModel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 腾讯云 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imGroupMembers.add(GroupMemberWrapper.ImGroupMember.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .groupId(imGroupModel.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .userId(imGroupMember.getUserId().longValue()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .imUserId(imGroupMember.getUserId().toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 用户批量退出群组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 融云退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imFeignService.groupBatchQuit(groupModelList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 腾讯云退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (org.apache.commons.collections.CollectionUtils.isNotEmpty(imGroupMembers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Map<String, List<GroupMemberWrapper.ImGroupMember>> groupMembers = imGroupMembers.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .collect(Collectors.groupingBy(GroupMemberWrapper.ImGroupMember::getGroupId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                // 用户退群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                imGroupCoreService.groupQuit(entry.getValue(), entry.getKey()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                log.error("腾讯云IM用户退群失败,groupId:{}, members={}", entry.getKey(), JSON.toJSONString(entry.getValue()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //更换教务老师等数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         employeeDao.employeeLevel(employeeLevelDtos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //新增离职时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         employeeDao.updateUserDemissionDate(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //冻结用户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         employeeDao.updateUserLock(levelUserId, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ExecutorService executor = Executors.newCachedThreadPool(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CompletableFuture<Boolean> refreshUserFriend = CompletableFuture.supplyAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //用户退出登陆 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sysUserFeignService.exitByPhone("system", teacherDao.getUser(levelUserId).getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sysUserFeignService.exitByPhone("education", teacherDao.getUser(levelUserId).getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompletableFuture.runAsync(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取用户担任教务老师、维修技师的所有乐团列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<String> musicGroupIds = employeeDao.queryMusicGroupIdByUserId(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取用户担任教务老师的所有网管课列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<String> practiceGroupIds = employeeDao.queryPracticeGroupIdByUserId(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //获取用户担任教务老师的所有VIP课列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<String> vipGroupIds = employeeDao.queryVipGroupIdByUserId(levelUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            boolean refreshFlag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (musicGroupIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(musicGroupIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (String musicGroupId : musicGroupIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                refreshFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (practiceGroupIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(practiceGroupIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (String musicGroupId : practiceGroupIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.PRACTICE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                refreshFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (vipGroupIds.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(vipGroupIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (String musicGroupId : vipGroupIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                refreshFlag = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return refreshFlag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }, executor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Boolean join = refreshUserFriend.join(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (join) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            refreshUserFriend.thenRun(() -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(musicGroupIds) || CollectionUtils.isNotEmpty(practiceGroupIds) || CollectionUtils.isNotEmpty(vipGroupIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //更新群成员数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 imGroupDao.updateMemberNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //删除重复的群成员 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 imGroupMemberService.delRepeat(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        executor.shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, exportExecutorService); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 |