Browse Source

机构老师不能是客服

yuanliang 10 months ago
parent
commit
9ba4e32059

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

@@ -386,10 +386,16 @@
     <select id="getCustomerServiceByFriendLeast" resultMap="SysUser">
         select m.*
         from (SELECT te.user_id_,
-                     count(iuf.friend_id_) friends
+                     count(k.user_id_) friends
               from teacher te
                        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
                 and te.customer_service_ = 1
                 and su.del_flag_ = 0

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

@@ -708,181 +708,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 .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){
         List<TeacherWrapper.CustomerServiceSendMsg2User> result = new ArrayList<>();
         // 所有的好友
@@ -891,15 +716,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 .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) -> {
@@ -919,6 +735,15 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                             .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()) {
             return result;
         }
@@ -927,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());
         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()
                     .in(Teacher::getUserId, teacherFriendIds)
                     .list()
@@ -940,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());
         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()
                     .in(Student::getUserId, studentFriendIds)
                     .list()

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

@@ -453,11 +453,17 @@
     </select>
 
     <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
                  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
           and te.customer_service_ = 1
           and su.del_flag_ = 0