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