| 
					
				 | 
			
			
				@@ -67,6 +67,7 @@ import com.yonge.cooleshow.common.enums.CacheNameEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.common.enums.ESettlementFrom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.common.enums.UserLockFlag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.cooleshow.common.enums.YesOrNoEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.toolset.base.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yonge.toolset.base.util.StringUtil; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -630,6 +631,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 客服状态变更,移交好友信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Boolean customerService = teacher.getCustomerService(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Boolean.TRUE.equals(customerService) && Boolean.FALSE.equals(teacherSubmitReq.getCustomerService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                customerServiceSendMsg2User.addAll(transferFriend(teacher.getUserId(), true)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 如果机构解绑,更新机构ID为-1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (Boolean.TRUE.equals(teacherSubmitReq.getBindTenant())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 teacherSubmitReq.setTenantId(-1L); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -650,11 +657,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 updateTenant(updateTenant, teacherSubmitReq.getUpdateBy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 客服状态变更,移交好友信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (Boolean.TRUE.equals(teacher.getCustomerService()) && Boolean.FALSE.equals(teacherSubmitReq.getCustomerService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                transferFriend(teacher.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             teacher.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             teacher = getTeacherDetil(teacher, teacherSubmitReq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (null == teacher.getEntryAuthDate() || null == teacher.getMusicianDate()) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -667,106 +669,198 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 老师头像 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             teacher.setAvatar(Optional.ofNullable(teacherSubmitReq.getAvatar()).orElse(teacher.getAvatar())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             baseMapper.updateById(teacher); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 交接后的客服发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Boolean.TRUE.equals(customerService) && Boolean.FALSE.equals(teacherSubmitReq.getCustomerService())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (TeacherWrapper.CustomerServiceSendMsg2User serviceSendMsg2User : customerServiceSendMsg2User) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getTeacherIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ClientEnum.TEACHER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getStudentIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ClientEnum.STUDENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return teacher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 客服好友移交给其他客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void transferFriend(Long userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 群里的好友保留 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<String> groupIdList = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .eq(ImGroupMember::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .eq(ImGroupMember::getIsAdmin, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .list() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .map(ImGroupMember::getGroupId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Long> savedTeacherIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Long> savedStudentIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!groupIdList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<ImGroupMember> savedMemberList = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .in(ImGroupMember::getGroupId, groupIdList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .eq(ImGroupMember::getIsAdmin, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Member) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            savedTeacherIdList.addAll(savedMemberList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .filter(n -> ImGroupMemberRoleType.TEACHER.equals(n.getRoleType())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .map(ImGroupMember::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            savedStudentIdList.addAll(savedMemberList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .filter(n -> ImGroupMemberRoleType.STUDENT.equals(n.getRoleType())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .map(ImGroupMember::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    .collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<ImUserFriend> friendList = imUserFriendService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriend(Long userId, boolean saveGroupFriend) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TeacherWrapper.CustomerServiceSendMsg2User> result = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 所有的好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ImUserFriend> userFriendList = imUserFriendService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .eq(ImUserFriend::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .eq(ImUserFriend::getClientType, ClientEnum.TEACHER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        friendList.removeIf(n -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (ClientEnum.STUDENT.equals(n.getClientType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return savedStudentIdList.contains(n.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 其他客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = this.getBaseMapper().getCustomerServiceFriendNums(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        customerServiceFriendNums.removeIf(n -> n.getTeacherId().equals(userId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> customerIds = customerServiceFriendNums.stream().map(TeacherWrapper.TeacherFriend::getTeacherId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        userFriendList.removeIf(n -> customerIds.contains(n.getFriendId()) && ClientEnum.TEACHER.equals(n.getFriendType())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (userFriendList.isEmpty()) { // 没有好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ImUserFriend> removeFriendList = userFriendList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (saveGroupFriend) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 群里的好友保留 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> groupIdList = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getIsAdmin, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .list() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .map(ImGroupMember::getGroupId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> savedTeacherIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> savedStudentIdList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!groupIdList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<ImGroupMember> savedMemberList = imGroupMemberService.lambdaQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .in(ImGroupMember::getGroupId, groupIdList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .eq(ImGroupMember::getIsAdmin, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .ne(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                savedTeacherIdList.addAll(savedMemberList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(n -> ImGroupMemberRoleType.TEACHER.equals(n.getRoleType())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .map(ImGroupMember::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                savedStudentIdList.addAll(savedMemberList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(n -> ImGroupMemberRoleType.STUDENT.equals(n.getRoleType())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .map(ImGroupMember::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (ClientEnum.TEACHER.equals(n.getClientType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return savedTeacherIdList.contains(n.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 机构好友保留 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Teacher teacher = this.getById(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> tenantTeacherIds = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> tenantStudentIds = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (teacher.getTenantId() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Long> teacherIdList = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).map(ImUserFriend::getFriendId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Long> studentIdList = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).map(ImUserFriend::getFriendId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!teacherIdList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Long> tenantTeacherIdsTemp = this.lambdaQuery().in(Teacher::getUserId, teacherIdList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .eq(Teacher::getTenantId, teacher.getTenantId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .list() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .stream().filter(n -> n.getTenantId() > 0).map(Teacher::getUserId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tenantTeacherIds.addAll(tenantTeacherIdsTemp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!studentIdList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Long> tenantStudentIdsTemp = studentService.lambdaQuery().in(Student::getUserId, studentIdList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .eq(Student::getTenantId, teacher.getTenantId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .list() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .stream().filter(n -> n.getTenantId() > 0).map(Student::getUserId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    tenantStudentIds.addAll(tenantStudentIdsTemp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 删除的好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            removeFriendList = userFriendList.stream().filter(n -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (ClientEnum.STUDENT.equals(n.getFriendType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (tenantStudentIds.contains(n.getFriendId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return !savedStudentIdList.contains(n.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (ClientEnum.TEACHER.equals(n.getFriendType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (tenantTeacherIds.contains(n.getFriendId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return !savedTeacherIdList.contains(n.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 删除好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        removeFriendList.stream().collect(Collectors.groupingBy(ImUserFriend::getFriendType)).forEach((client, friends) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> friendIds = friends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imUserFriendService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getUserId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getClientType, ClientEnum.TEACHER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .in(ImUserFriend::getFriendId, friendIds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getFriendType, client) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imUserFriendService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getFriendId, userId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getFriendType, ClientEnum.TEACHER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .in(ImUserFriend::getUserId, friendIds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(ImUserFriend::getClientType, client) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (friendList.isEmpty()) { // 没有好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (customerIds.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Long> customerIdList = getCustomerService().stream().map(Teacher::getUserId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        customerIdList.removeIf(n -> n.equals(userId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (customerIdList.isEmpty()) { // 没有客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 去除好友里面存在其他客服关系的好友,只有没有客服好友的好友,才需要与客服建立好友关系 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!teacherFriends.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String teacherFriendIds = teacherFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> existFriendIds = imUserFriendService.getDao().queryExistCustomerServiceFriend(teacherFriendIds, ClientEnum.TEACHER.getCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .map(ImUserFriend::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userFriendList.removeIf(n -> ClientEnum.TEACHER.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<ImUserFriend> userFriendList = friendList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .filter(n -> !ClientEnum.TEACHER.equals(n.getFriendType()) || !customerIdList.contains(n.getFriendId())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (userFriendList.isEmpty()) { // 除去客服好友,没有其他好友 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!studentFriends.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String studentFriendIds = studentFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(",")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> existFriendIds = imUserFriendService.getDao().queryExistCustomerServiceFriend(studentFriendIds, ClientEnum.STUDENT.getCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .map(ImUserFriend::getUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userFriendList.removeIf(n -> ClientEnum.STUDENT.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (userFriendList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 好友交接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = this.getBaseMapper().getCustomerServiceFriendNums(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (customerServiceFriendNums.size() == 1) { // 只有一个客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getClientType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!teacherFriends.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<Long> friendIds = teacherFriends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imUserFriendService.saveUserTeacherFriend(customerServiceFriendNums.get(0).getTeacherId(), new HashSet<>(friendIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getClientType())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!studentFriends.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<Long> friendIds = studentFriends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                imUserFriendService.saveUserFriend(customerServiceFriendNums.get(0).getTeacherId(), new HashSet<>(friendIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Map<Long, Set<Long>> teacherFriends = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Map<Long, Set<Long>> studentFriends = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (ImUserFriend imUserFriend : userFriendList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                TeacherWrapper.TeacherFriend teacherFriend = customerServiceFriendNums.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (ClientEnum.TEACHER.equals(imUserFriend.getClientType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Set<Long> set = teacherFriends.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    set.add(imUserFriend.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    teacherFriends.put(teacherFriend.getTeacherId(), set); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else if (ClientEnum.STUDENT.equals(imUserFriend.getClientType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Set<Long> set = studentFriends.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    set.add(imUserFriend.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    studentFriends.put(teacherFriend.getTeacherId(), set); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                teacherFriend.setFriendNums(teacherFriend.getFriendNums() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Collections.sort(customerServiceFriendNums); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, Set<Long>> teacherFriendMap = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, Set<Long>> studentFriendMap = new LinkedHashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (ImUserFriend imUserFriend : userFriendList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TeacherWrapper.TeacherFriend teacherFriend = customerServiceFriendNums.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (ClientEnum.TEACHER.equals(imUserFriend.getFriendType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Set<Long> set = teacherFriendMap.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                set.add(imUserFriend.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                teacherFriendMap.put(teacherFriend.getTeacherId(), set); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (ClientEnum.STUDENT.equals(imUserFriend.getFriendType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Set<Long> set = studentFriendMap.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                set.add(imUserFriend.getFriendId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                studentFriendMap.put(teacherFriend.getTeacherId(), set); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            teacherFriends.forEach((key, value) -> imUserFriendService.saveUserTeacherFriend(key, value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            studentFriends.forEach((key, value) -> imUserFriendService.saveUserFriend(key, value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            teacherFriend.setFriendNums(teacherFriend.getFriendNums() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Collections.sort(customerServiceFriendNums); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        teacherFriendMap.forEach((teacherId, teacherIds) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imUserFriendService.saveUserTeacherFriend(teacherId, teacherIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerServiceSendMsg2User.setCustomerId(teacherId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerServiceSendMsg2User.getTeacherIds().addAll(teacherIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.add(customerServiceSendMsg2User); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            imUserFriendService.sendCustomerServiceAddFriendMessage(teacherId, customerTitle, customerMessage, new ArrayList<>(teacherIds), ClientEnum.TEACHER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        studentFriendMap.forEach((teacherId, studentIds) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            imUserFriendService.saveUserFriend(teacherId, studentIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerServiceSendMsg2User.setCustomerId(teacherId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerServiceSendMsg2User.getTeacherIds().addAll(studentIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.add(customerServiceSendMsg2User); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            imUserFriendService.sendCustomerServiceAddFriendMessage(teacherId, customerTitle, customerMessage, new ArrayList<>(studentIds), ClientEnum.STUDENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /*** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1407,4 +1501,29 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .eq(Teacher::getLockFlag, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateLock(SysUser sysUser, Long teacherId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Teacher teacher = this.getById(teacherId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (teacher == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("无效的老师账号"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 冻结客服,移交好友给其他客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Boolean customerService = teacher.getCustomerService(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (UserLockFlag.NORMAL.equals(teacher.getLockFlag()) && Boolean.TRUE.equals(customerService)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriend(teacherId, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (TeacherWrapper.CustomerServiceSendMsg2User serviceSendMsg2User : customerServiceSendMsg2User) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getTeacherIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ClientEnum.TEACHER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getStudentIds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ClientEnum.STUDENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        teacher.setLockFlag(UserLockFlag.NORMAL.equals(teacher.getLockFlag()) ? UserLockFlag.LOCKED : UserLockFlag.NORMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.updateById(teacher); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |