Browse Source

Merge branch 'feature/0726-kf' into online

yuanliang 11 months ago
parent
commit
088be384b9

+ 8 - 2
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -386,10 +386,16 @@
     <select id="getCustomerServiceByFriendLeast" resultMap="SysUser">
     <select id="getCustomerServiceByFriendLeast" resultMap="SysUser">
         select m.*
         select m.*
         from (SELECT te.user_id_,
         from (SELECT te.user_id_,
-                     count(iuf.friend_id_) friends
+                     count(k.user_id_) friends
               from teacher te
               from teacher te
                        left join sys_user su on te.user_id_ = su.id_
                        left join sys_user su on te.user_id_ = su.id_
-                       left join im_user_friend iuf on te.user_id_ = iuf.user_id_ and iuf.source_form_='CUSTOMER'
+                       left join (select s.user_id_, s.customer_id_
+                                  from student s
+                                  where s.customer_id_ is not null
+                                  union all
+                                  select te.user_id_, te.customer_id_
+                                  from teacher te
+                                  where te.customer_service_ = 0 and te.customer_id_ is not null) k on te.user_id_ = k.customer_id_
               where te.lock_flag_ = 0
               where te.lock_flag_ = 0
                 and te.customer_service_ = 1
                 and te.customer_service_ = 1
                 and su.del_flag_ = 0
                 and su.del_flag_ = 0

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java

@@ -75,5 +75,7 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
     void delTeacherFriendByTenantId(Long tenantId, Long userId, String clientType);
     void delTeacherFriendByTenantId(Long tenantId, Long userId, String clientType);
 
 
     void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType);
     void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType);
+
+    void refreshCustomer(Long userId, ClientEnum userClientType, List<Long> friendIds, ClientEnum friendClientType);
 }
 }
 
 

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1202,6 +1202,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         studentIds.add(studentId);
         studentIds.add(studentId);
         try {
         try {
             imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
             imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
+            imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -392,7 +392,12 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
                         .eq(ImGroupMember::getGroupId, groupId)
                         .eq(ImGroupMember::getGroupId, groupId)
                         .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
                         .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
                         .list();
                         .list();
-                    teacherList.forEach(teacher -> imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList, EImUserFriendSourceForm.TEACHER));
+                    teacherList.forEach(teacher ->
+                            {
+                                imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList, EImUserFriendSourceForm.TEACHER);
+                                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIdList), ClientEnum.STUDENT);
+                            }
+                    );
                 }
                 }
             } catch (Exception e) {
             } catch (Exception e) {
                 log.error("加入群组失败,{}", e.getMessage(), e);
                 log.error("加入群组失败,{}", e.getMessage(), e);
@@ -423,6 +428,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         Long teacherId = courseGroup.getTeacherId();
         Long teacherId = courseGroup.getTeacherId();
         //保存老师学员关联的通讯录xz
         //保存老师学员关联的通讯录xz
         imUserFriendService.saveUserFriend(teacherId, Sets.newHashSet(studentIds),EImUserFriendSourceForm.TEACHER);
         imUserFriendService.saveUserFriend(teacherId, Sets.newHashSet(studentIds),EImUserFriendSourceForm.TEACHER);
+        imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
+
 
 
         // 直播课、琴房课校验群成员人数限制
         // 直播课、琴房课校验群成员人数限制
         if (CourseScheduleEnum.PIANO_ROOM_CLASS.getCode().equals(courseGroupType)
         if (CourseScheduleEnum.PIANO_ROOM_CLASS.getCode().equals(courseGroupType)

+ 20 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -52,13 +51,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import org.tritonus.share.ArraySet;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
-import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
@@ -627,5 +623,25 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
     public void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType) {
     public void delStudentFriendByTenantId(Long tenantId, Long userId, String clientType) {
         this.baseMapper.delStudentFriendByTenantId(tenantId, userId, clientType);
         this.baseMapper.delStudentFriendByTenantId(tenantId, userId, clientType);
     }
     }
+
+    @Override
+    public void refreshCustomer(Long userId, ClientEnum userClientType, List<Long> friendIds, ClientEnum friendClientType) {
+
+        this.lambdaUpdate()
+                .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
+                .eq(ImUserFriend::getUserId, userId)
+                .eq(ImUserFriend::getClientType, userClientType)
+                .in(ImUserFriend::getFriendId, friendIds)
+                .eq(ImUserFriend::getFriendType, friendClientType)
+                .update();
+
+        this.lambdaUpdate()
+                .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
+                .in(ImUserFriend::getUserId, friendIds)
+                .eq(ImUserFriend::getClientType, friendClientType)
+                .eq(ImUserFriend::getFriendId, userId)
+                .eq(ImUserFriend::getFriendType, userClientType)
+                .update();
+    }
 }
 }
 
 

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -465,6 +465,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         studentIds.add(studentId);
         studentIds.add(studentId);
         try {
         try {
             imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
             imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
+            imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);
             log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);

+ 11 - 23
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -386,27 +386,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             studentIds.add(studentVo.getUserId());
             studentIds.add(studentVo.getUserId());
             imUserFriendService.saveUserFriend(userId, studentIds, EImUserFriendSourceForm.TEACHER);
             imUserFriendService.saveUserFriend(userId, studentIds, EImUserFriendSourceForm.TEACHER);
         }
         }
-        Long customerId = studentVo.getCustomerId();
-        if (userId.equals(customerId)) {
-//            Set<Long> studentIds = new HashSet<>();
-//            studentIds.add(studentVo.getUserId());
-//            imUserFriendService.saveUserFriend(userId, studentIds, EImUserFriendSourceForm.TEACHER);
-            imUserFriendService.lambdaUpdate()
-                    .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
-                    .eq(ImUserFriend::getUserId, userId)
-                    .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
-                    .eq(ImUserFriend::getFriendId, studentVo.getUserId())
-                    .eq(ImUserFriend::getFriendType, ClientEnum.STUDENT)
-                    .update();
-
-            imUserFriendService.lambdaUpdate()
-                    .set(ImUserFriend::getSourceForm, EImUserFriendSourceForm.TEACHER)
-                    .eq(ImUserFriend::getUserId, studentVo.getUserId())
-                    .eq(ImUserFriend::getClientType, ClientEnum.STUDENT)
-                    .eq(ImUserFriend::getFriendId, userId)
-                    .eq(ImUserFriend::getFriendType, ClientEnum.TEACHER)
-                    .update();
-        }
+        imUserFriendService.refreshCustomer(userId, ClientEnum.TEACHER, Collections.singletonList(studentVo.getUserId()), ClientEnum.STUDENT);
+//        }
         resMap.put("now", detail);
         resMap.put("now", detail);
         return HttpResponseResult.succeed(resMap);
         return HttpResponseResult.succeed(resMap);
     }
     }
@@ -668,6 +649,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 HashSet<Long> studentIds = new HashSet<>();
                 HashSet<Long> studentIds = new HashSet<>();
                 studentIds.add(student.getUserId());
                 studentIds.add(student.getUserId());
                 imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds, EImUserFriendSourceForm.TEACHER);
                 imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             }
             }
             addBindUnBindRecord(student.getUserId(),student.getTenantId(),true);
             addBindUnBindRecord(student.getUserId(),student.getTenantId(),true);
         }
         }
@@ -759,6 +741,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 HashSet<Long> studentIds = new HashSet<>();
                 HashSet<Long> studentIds = new HashSet<>();
                 studentIds.add(student.getUserId());
                 studentIds.add(student.getUserId());
                 imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds,EImUserFriendSourceForm.TEACHER);
                 imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds,EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             }
             }
 
 
             addBindUnBindRecord(student.getUserId(),studentInfo.getTenantId(),true);
             addBindUnBindRecord(student.getUserId(),studentInfo.getTenantId(),true);
@@ -926,8 +909,13 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
             QueryWrapper<Teacher> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(Teacher::getTenantId, student.getTenantId());
             queryWrapper.lambda().eq(Teacher::getTenantId, student.getTenantId());
             List<Teacher> teacherList = teacherDao.selectList(queryWrapper);
             List<Teacher> teacherList = teacherDao.selectList(queryWrapper);
-            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
-                    new HashSet<>(ImmutableList.of(sysUser.getId())),EImUserFriendSourceForm.TEACHER));
+            teacherList.forEach(next ->
+                    {
+                        imUserFriendService.saveUserFriend(next.getUserId(), new HashSet<>(ImmutableList.of(sysUser.getId())), EImUserFriendSourceForm.TEACHER);
+                        imUserFriendService.refreshCustomer(next.getUserId(), ClientEnum.TEACHER, Collections.singletonList(sysUser.getId()), ClientEnum.STUDENT);
+                    }
+            );
+
 
 
             addBindUnBindRecord(student.getUserId(), student.getTenantId(), true);
             addBindUnBindRecord(student.getUserId(), student.getTenantId(), true);
         }
         }

+ 32 - 194
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -330,6 +330,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> submit(TeacherSubmitReq teacherSubmitReq) throws BizException {
     public HttpResponseResult<Boolean> submit(TeacherSubmitReq teacherSubmitReq) throws BizException {
+        Long tenantId = teacherSubmitReq.getTenantId();
+        Boolean customerService = teacherSubmitReq.getCustomerService();
+        if (tenantId != null && tenantId > 0 && Boolean.TRUE.equals(customerService)) {
+            throw new BizException("客服不能有机构老师身份");
+        }
         // todo 暂时不上客服相关
         // todo 暂时不上客服相关
 //        teacherSubmitReq.setCustomerService(null);
 //        teacherSubmitReq.setCustomerService(null);
         if (null == teacherSubmitReq.getUserId()) {
         if (null == teacherSubmitReq.getUserId()) {
@@ -703,181 +708,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 .set(Student::getCustomerId, null));
                 .set(Student::getCustomerId, null));
     }
     }
 
 
-    // 客服好友移交给其他客服
-    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();
-
-        // 其他客服
-        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()));
-            }
-
-            // 机构好友保留
-            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);
-                }
-            }
-
-            // 删除的好友
-            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 (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 = 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> 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;
-        }
-
-        // 好友交接
-        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);
-            // 发送消息
-            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);
-            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;
-    }
-
     private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriendV2(Long userId, boolean saveGroupFriend){
     private List<TeacherWrapper.CustomerServiceSendMsg2User> transferFriendV2(Long userId, boolean saveGroupFriend){
         List<TeacherWrapper.CustomerServiceSendMsg2User> result = new ArrayList<>();
         List<TeacherWrapper.CustomerServiceSendMsg2User> result = new ArrayList<>();
         // 所有的好友
         // 所有的好友
@@ -886,15 +716,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
                 .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
                 .list();
                 .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()))
         userFriendList.stream().filter(n -> Boolean.FALSE.equals(saveGroupFriend) || EImUserFriendSourceForm.CUSTOMER.equals(n.getSourceForm()))
                 .collect(Collectors.groupingBy(ImUserFriend::getFriendType)).forEach((client, friends) -> {
                 .collect(Collectors.groupingBy(ImUserFriend::getFriendType)).forEach((client, friends) -> {
@@ -914,6 +735,15 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                             .remove();
                             .remove();
                 });
                 });
 
 
+        // 其他客服
+        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;
+        }
+
         if (customerIds.isEmpty()) {
         if (customerIds.isEmpty()) {
             return result;
             return result;
         }
         }
@@ -922,7 +752,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         // 存在专属客服的好友不需要分配
         // 存在专属客服的好友不需要分配
         List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).collect(Collectors.toList());
         List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getFriendType())).collect(Collectors.toList());
         if (!teacherFriends.isEmpty()) {
         if (!teacherFriends.isEmpty()) {
-            String teacherFriendIds = teacherFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(","));
+            List<Long> teacherFriendIds = teacherFriends.stream().map(ImUserFriend::getFriendId).distinct().collect(Collectors.toList());
             List<Long> existFriendIds = this.lambdaQuery()
             List<Long> existFriendIds = this.lambdaQuery()
                     .in(Teacher::getUserId, teacherFriendIds)
                     .in(Teacher::getUserId, teacherFriendIds)
                     .list()
                     .list()
@@ -935,7 +765,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
 
         List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).collect(Collectors.toList());
         List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getFriendType())).collect(Collectors.toList());
         if (!studentFriends.isEmpty()) {
         if (!studentFriends.isEmpty()) {
-            String studentFriendIds = studentFriends.stream().map(n -> n.getFriendId().toString()).distinct().collect(Collectors.joining(","));
+            List<Long> studentFriendIds = studentFriends.stream().map(ImUserFriend::getFriendId).distinct().collect(Collectors.toList());
             List<Long> existFriendIds = studentService.lambdaQuery()
             List<Long> existFriendIds = studentService.lambdaQuery()
                     .in(Student::getUserId, studentFriendIds)
                     .in(Student::getUserId, studentFriendIds)
                     .list()
                     .list()
@@ -971,7 +801,10 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherFriendMap.forEach((teacherId, teacherIds) -> {
         teacherFriendMap.forEach((teacherId, teacherIds) -> {
             List<Long> sameTenant = getSameTenant(teacherId, teacherIds, ClientEnum.TEACHER);
             List<Long> sameTenant = getSameTenant(teacherId, teacherIds, ClientEnum.TEACHER);
             Set<Long> same = teacherIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
             Set<Long> same = teacherIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
-            imUserFriendService.saveUserTeacherFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+            if (!same.isEmpty()) {
+                imUserFriendService.saveUserTeacherFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(same), ClientEnum.TEACHER);
+            }
             Set<Long> notSame = teacherIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
             Set<Long> notSame = teacherIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
             imUserFriendService.saveUserTeacherFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
             imUserFriendService.saveUserTeacherFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
 
 
@@ -986,7 +819,10 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         studentFriendMap.forEach((teacherId, studentIds) -> {
         studentFriendMap.forEach((teacherId, studentIds) -> {
             List<Long> sameTenant = getSameTenant(teacherId, studentIds, ClientEnum.STUDENT);
             List<Long> sameTenant = getSameTenant(teacherId, studentIds, ClientEnum.STUDENT);
             Set<Long> same = studentIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
             Set<Long> same = studentIds.stream().filter(sameTenant::contains).collect(Collectors.toSet());
-            imUserFriendService.saveUserFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+            if (!same.isEmpty()) {
+                imUserFriendService.saveUserFriend(teacherId, same, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(same), ClientEnum.STUDENT);
+            }
             Set<Long> notSame = studentIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
             Set<Long> notSame = studentIds.stream().filter(n->!sameTenant.contains(n)).collect(Collectors.toSet());
             imUserFriendService.saveUserFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
             imUserFriendService.saveUserFriend(teacherId, notSame, EImUserFriendSourceForm.CUSTOMER);
 
 
@@ -1489,10 +1325,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 });
                 });
             }
             }
             // 删除好友关系
             // 删除好友关系
-            Boolean customerService = teacher.getCustomerService();
-            if (Boolean.FALSE.equals(customerService)) {
-                imUserFriendService.delStudentFriendByTenantId(teacher.getTenantId(), teacher.getUserId(), ClientEnum.TEACHER.getCode());
-            }
+            imUserFriendService.delStudentFriendByTenantId(teacher.getTenantId(), teacher.getUserId(), ClientEnum.TEACHER.getCode());
             addBindUnBindRecord(teacher.getUserId(), teacher.getTenantId(), false);
             addBindUnBindRecord(teacher.getUserId(), teacher.getTenantId(), false);
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
             sendBindUnBindSMS(teacher.getUserId(), sysUser.getPhone(), MessageTypeEnum.TEACHER_UNBIND_TENANT, teacher.getTenantId());
             sendBindUnBindSMS(teacher.getUserId(), sysUser.getPhone(), MessageTypeEnum.TEACHER_UNBIND_TENANT, teacher.getTenantId());
@@ -1516,7 +1349,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                     .collect(Collectors.toSet());
                     .collect(Collectors.toSet());
 
 
             if (!collect.isEmpty()) {
             if (!collect.isEmpty()) {
-                imUserFriendService.saveUserFriend(teacher.getUserId(), collect,EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.saveUserFriend(teacher.getUserId(), collect, EImUserFriendSourceForm.TEACHER);
+                imUserFriendService.refreshCustomer(teacher.getUserId(), ClientEnum.TEACHER, new ArrayList<>(collect), ClientEnum.STUDENT);
             }
             }
             addBindUnBindRecord(teacher.getUserId(),updateTenant.getTenantId(),true);
             addBindUnBindRecord(teacher.getUserId(),updateTenant.getTenantId(),true);
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
             SysUser sysUser = sysUserMapper.getByUserId(teacher.getUserId());
@@ -1664,9 +1498,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (teacher == null) {
         if (teacher == null) {
             throw new BizException("无效的老师账号");
             throw new BizException("无效的老师账号");
         }
         }
+        Long tenantId = teacher.getTenantId();
+        Boolean customerService = teacher.getCustomerService();
+        if (tenantId != null && tenantId > 0 && Boolean.TRUE.equals(customerService)) {
+            throw new BizException("客服不能有机构老师身份");
+        }
 
 
         // 冻结客服,移交好友给其他客服
         // 冻结客服,移交好友给其他客服
-        Boolean customerService = teacher.getCustomerService();
         if (UserLockFlag.NORMAL.equals(teacher.getLockFlag()) && Boolean.TRUE.equals(customerService)) {
         if (UserLockFlag.NORMAL.equals(teacher.getLockFlag()) && Boolean.TRUE.equals(customerService)) {
             List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriendV2(teacherId, false);
             List<TeacherWrapper.CustomerServiceSendMsg2User> customerServiceSendMsg2User = transferFriendV2(teacherId, false);
             clearUserCustomerRelation(teacherId);
             clearUserCustomerRelation(teacherId);

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImUserFriendSourceForm;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;

+ 9 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -453,11 +453,17 @@
     </select>
     </select>
 
 
     <select id="getCustomerServiceFriendNums" resultType="com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper$TeacherFriend">
     <select id="getCustomerServiceFriendNums" resultType="com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper$TeacherFriend">
-        SELECT te.user_id_           teacherId,
-               count(iuf.friend_id_) friendNums
+        SELECT te.user_id_       teacherId,
+               count(k.user_id_) friendNums
         from teacher te
         from teacher te
                  left join sys_user su on te.user_id_ = su.id_
                  left join sys_user su on te.user_id_ = su.id_
-                 left join im_user_friend iuf on te.user_id_ = iuf.user_id_ and iuf.client_type_ = 'TEACHER' and iuf.source_form_='CUSTOMER'
+                 left join (select s.user_id_, s.customer_id_
+                            from student s
+                            where s.customer_id_ is not null
+                            union all
+                            select te.user_id_, te.customer_id_
+                            from teacher te
+                            where te.customer_service_ = 0 and te.customer_id_ is not null) k on te.user_id_ = k.customer_id_
         where te.lock_flag_ = 0
         where te.lock_flag_ = 0
           and te.customer_service_ = 1
           and te.customer_service_ = 1
           and su.del_flag_ = 0
           and su.del_flag_ = 0