|
@@ -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()
|