|
@@ -26,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
|
|
|
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.mapper.TenantGroupMapper;
|
|
|
import com.yonge.cooleshow.biz.dal.mapper.UserTenantBindRecordMapper;
|
|
|
import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
|
|
@@ -674,29 +675,99 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
|
|
|
|
|
|
// 客服好友移交给其他客服
|
|
|
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()
|
|
|
.eq(ImUserFriend::getUserId, userId)
|
|
|
.eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
|
|
|
.list();
|
|
|
+
|
|
|
+ friendList.removeIf(n -> {
|
|
|
+ if (ClientEnum.STUDENT.equals(n.getClientType())) {
|
|
|
+ return savedStudentIdList.contains(n.getFriendId());
|
|
|
+ }
|
|
|
+ if (ClientEnum.TEACHER.equals(n.getClientType())) {
|
|
|
+ return savedTeacherIdList.contains(n.getFriendId());
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ });
|
|
|
if (friendList.isEmpty()) { // 没有好友
|
|
|
return;
|
|
|
}
|
|
|
- List<Teacher> customerService = getCustomerService();
|
|
|
- List<Long> teacherIdList = customerService.stream().map(Teacher::getUserId).collect(Collectors.toList());
|
|
|
- teacherIdList.removeIf(n->n.equals(userId));
|
|
|
- if (teacherIdList.isEmpty()) { // 没有客服
|
|
|
+ List<Long> customerIdList = getCustomerService().stream().map(Teacher::getUserId).collect(Collectors.toList());
|
|
|
+ customerIdList.removeIf(n -> n.equals(userId));
|
|
|
+ if (customerIdList.isEmpty()) { // 没有客服
|
|
|
return;
|
|
|
}
|
|
|
- List<Long> friendIdList = friendList.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
|
|
|
- friendIdList.removeIf(teacherIdList::contains);
|
|
|
- if (friendIdList.isEmpty()) { // 有一个客服好友
|
|
|
+ List<ImUserFriend> userFriendList = friendList.stream()
|
|
|
+ .filter(n -> !ClientEnum.TEACHER.equals(n.getFriendType()) || !customerIdList.contains(n.getFriendId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (userFriendList.isEmpty()) { // 除去客服好友,没有其他好友
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //todo
|
|
|
-
|
|
|
-
|
|
|
+ // 好友交接
|
|
|
+ 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);
|
|
|
+ }
|
|
|
|
|
|
+ teacherFriends.forEach((key, value) -> imUserFriendService.saveUserTeacherFriend(key, value));
|
|
|
+ studentFriends.forEach((key, value) -> imUserFriendService.saveUserFriend(key, value));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/***
|