|  | @@ -27,6 +27,7 @@ import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.TeacherTypeEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.mapper.UserTenantBindRecordMapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
 | 
	
	
		
			
				|  | @@ -329,7 +330,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public HttpResponseResult<Boolean> submit(TeacherSubmitReq teacherSubmitReq) throws BizException {
 | 
	
		
			
				|  |  |          // todo 暂时不上客服相关
 | 
	
		
			
				|  |  | -        teacherSubmitReq.setCustomerService(null);
 | 
	
		
			
				|  |  | +//        teacherSubmitReq.setCustomerService(null);
 | 
	
		
			
				|  |  |          if (null == teacherSubmitReq.getUserId()) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (StringUtils.isNoneBlank(teacherSubmitReq.getPhone(), teacherSubmitReq.getCode())) {
 | 
	
	
		
			
				|  | @@ -540,7 +541,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |                      .eq(Student::getTenantId, teacher.getTenantId()).list().stream()
 | 
	
		
			
				|  |  |                      .map(Student::getUserId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
 | 
	
		
			
				|  |  | +            imUserFriendService.saveUserFriend(teacher.getUserId(), collect, EImUserFriendSourceForm.TEACHER);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -630,6 +631,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |                  if (customerServiceTeacher != null) {
 | 
	
		
			
				|  |  |                      imUserFriendService.registerUserBindCustomerService(teacher.getUserId(),
 | 
	
		
			
				|  |  |                              Collections.singletonList(customerServiceTeacher.getUserId()), ClientEnum.TEACHER);
 | 
	
		
			
				|  |  | +                    teacher.setCustomerId(customerServiceTeacher.getUserId());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          } else {
 | 
	
	
		
			
				|  | @@ -637,7 +639,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |              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));
 | 
	
		
			
				|  |  | +                customerServiceSendMsg2User.addAll(transferFriendV2(teacher.getUserId(), true));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              // 如果机构解绑,更新机构ID为-1
 | 
	
		
			
				|  |  |              if (Boolean.TRUE.equals(teacherSubmitReq.getBindTenant())) {
 | 
	
	
		
			
				|  | @@ -846,7 +848,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          teacherFriendMap.forEach((teacherId, teacherIds) -> {
 | 
	
		
			
				|  |  | -            imUserFriendService.saveUserTeacherFriend(teacherId, teacherIds);
 | 
	
		
			
				|  |  | +            imUserFriendService.saveUserTeacherFriend(teacherId, teacherIds,EImUserFriendSourceForm.CUSTOMER);
 | 
	
		
			
				|  |  |              // 发送消息
 | 
	
		
			
				|  |  |              TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User();
 | 
	
		
			
				|  |  |              customerServiceSendMsg2User.setCustomerId(teacherId);
 | 
	
	
		
			
				|  | @@ -855,7 +857,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |  //            imUserFriendService.sendCustomerServiceAddFriendMessage(teacherId, customerTitle, customerMessage, new ArrayList<>(teacherIds), ClientEnum.TEACHER);
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |          studentFriendMap.forEach((teacherId, studentIds) -> {
 | 
	
		
			
				|  |  | -            imUserFriendService.saveUserFriend(teacherId, studentIds);
 | 
	
		
			
				|  |  | +            imUserFriendService.saveUserFriend(teacherId, studentIds,EImUserFriendSourceForm.CUSTOMER);
 | 
	
		
			
				|  |  |              TeacherWrapper.CustomerServiceSendMsg2User customerServiceSendMsg2User = new TeacherWrapper.CustomerServiceSendMsg2User();
 | 
	
		
			
				|  |  |              customerServiceSendMsg2User.setCustomerId(teacherId);
 | 
	
		
			
				|  |  |              customerServiceSendMsg2User.getTeacherIds().addAll(studentIds);
 | 
	
	
		
			
				|  | @@ -865,6 +867,117 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |          return result;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriendV2(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();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 其他客服
 | 
	
		
			
				|  |  | +        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;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 好友保留
 | 
	
		
			
				|  |  | +        userFriendList.stream().filter(n -> Boolean.FALSE.equals(saveGroupFriend) || EImUserFriendSourceForm.CUSTOMER.equals(n.getSourceForm()))
 | 
	
		
			
				|  |  | +                .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 (customerIds.isEmpty()) {
 | 
	
		
			
				|  |  | +            return result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 好友分配
 | 
	
		
			
				|  |  | +        // 存在专属客服的好友不需要分配
 | 
	
		
			
				|  |  | +        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 = this.lambdaQuery()
 | 
	
		
			
				|  |  | +                    .in(Teacher::getUserId, teacherFriendIds)
 | 
	
		
			
				|  |  | +                    .list()
 | 
	
		
			
				|  |  | +                    .stream()
 | 
	
		
			
				|  |  | +                    .filter(n -> customerIds.contains(n.getCustomerId()))
 | 
	
		
			
				|  |  | +                    .map(Teacher::getUserId)
 | 
	
		
			
				|  |  | +                    .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            userFriendList.removeIf(n -> ClientEnum.TEACHER.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId()));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        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 = studentService.lambdaQuery()
 | 
	
		
			
				|  |  | +                    .in(Student::getUserId, studentFriendIds)
 | 
	
		
			
				|  |  | +                    .list()
 | 
	
		
			
				|  |  | +                    .stream()
 | 
	
		
			
				|  |  | +                    .filter(n -> customerIds.contains(n.getCustomerId()))
 | 
	
		
			
				|  |  | +                    .map(Student::getUserId)
 | 
	
		
			
				|  |  | +                    .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            userFriendList.removeIf(n -> ClientEnum.STUDENT.equals(n.getFriendType()) && existFriendIds.contains(n.getFriendId()));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (userFriendList.isEmpty()) {
 | 
	
		
			
				|  |  | +            return result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 好友交接
 | 
	
		
			
				|  |  | +        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);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            teacherFriend.setFriendNums(teacherFriend.getFriendNums() + 1);
 | 
	
		
			
				|  |  | +            Collections.sort(customerServiceFriendNums);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        teacherFriendMap.forEach((teacherId, teacherIds) -> {
 | 
	
		
			
				|  |  | +            imUserFriendService.saveUserTeacherFriend(teacherId, teacherIds,EImUserFriendSourceForm.CUSTOMER);
 | 
	
		
			
				|  |  | +            this.lambdaUpdate().set(Teacher::getCustomerId,teacherId).in(Teacher::getUserId,teacherIds).update();
 | 
	
		
			
				|  |  | +            // 发送消息
 | 
	
		
			
				|  |  | +            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, EImUserFriendSourceForm.CUSTOMER);
 | 
	
		
			
				|  |  | +            studentService.lambdaUpdate().set(Student::getCustomerId, teacherId).in(Student::getUserId, studentIds).update();
 | 
	
		
			
				|  |  | +            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;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      /***
 | 
	
		
			
				|  |  |       * 封装用户信息
 | 
	
		
			
				|  |  |       * @author liweifan
 | 
	
	
		
			
				|  | @@ -1363,7 +1476,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |                      .collect(Collectors.toSet());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (!collect.isEmpty()) {
 | 
	
		
			
				|  |  | -                imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
 | 
	
		
			
				|  |  | +                imUserFriendService.saveUserFriend(teacher.getUserId(), collect,EImUserFriendSourceForm.TEACHER);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              addBindUnBindRecord(teacher.getUserId(),updateTenant.getTenantId(),true);
 | 
	
		
			
				|  |  |              SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
 | 
	
	
		
			
				|  | @@ -1512,15 +1625,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 | 
	
		
			
				|  |  |              throw new BizException("无效的老师账号");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // todo 暂时不上,逻辑调整
 | 
	
		
			
				|  |  |          // 冻结客服,移交好友给其他客服
 | 
	
		
			
				|  |  | -//        Boolean customerService = teacher.getCustomerService();
 | 
	
		
			
				|  |  | -        Boolean customerService = null;
 | 
	
		
			
				|  |  | +        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);
 | 
	
		
			
				|  |  | +            List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriendV2(teacherId, false);
 | 
	
		
			
				|  |  |              for (TeacherWrapper.CustomerServiceSendMsg2User serviceSendMsg2User : customerServiceSendMsg2User) {
 | 
	
		
			
				|  |  | +                String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG);
 | 
	
		
			
				|  |  | +                String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE);
 | 
	
		
			
				|  |  |                  imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getTeacherIds(),
 | 
	
		
			
				|  |  |                          ClientEnum.TEACHER);
 | 
	
		
			
				|  |  |                  imUserFriendService.sendCustomerServiceAddFriendMessage(serviceSendMsg2User.getCustomerId(), customerTitle, customerMessage, serviceSendMsg2User.getStudentIds(),
 |