|
@@ -1,32 +1,20 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.google.common.collect.Lists;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginContext;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.enums.EMemberAction;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.impl.TencentCloudRTCPlugin;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.message.ImGroupMemberWrapper;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.message.RTCRoomConfig;
|
|
|
-import com.microsvc.toolkit.middleware.rtc.message.RTCRoomMessage;
|
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
|
|
|
-import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomMemberDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.*;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
-import com.yonge.cooleshow.biz.dal.enums.*;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.ImNetworkDeviceTypeEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.support.IMHelper;
|
|
|
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
|
|
|
import com.yonge.cooleshow.common.constant.SysConfigConstant;
|
|
|
import com.yonge.cooleshow.common.entity.BaseResponse;
|
|
|
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
|
|
|
-import com.yonge.cooleshow.common.enums.EStatus;
|
|
|
import com.yonge.cooleshow.common.enums.ErrorEnum;
|
|
|
import com.yonge.toolset.base.exception.BizException;
|
|
|
import com.yonge.toolset.utils.date.DateUtil;
|
|
@@ -41,10 +29,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.text.MessageFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
-import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -125,13 +111,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
//定时销毁房间
|
|
|
//初始化房间用户信息
|
|
|
ImNetworkRoomMember roomMember = imNetworkRoomMemberService.initRoomMember(roomId,sysUser,userRole,!courseSchedule.getMuteAll());
|
|
|
- joinRoomResult.setRoomMember(roomMember);
|
|
|
+ joinRoomResult.setUserInfo(roomMember);
|
|
|
//获取教室剩余时长
|
|
|
joinRoomResult.setSurplusTime(DateUtil.secondsBetween(now, courseSchedule.getEndTime()));
|
|
|
//获取房间所有成员
|
|
|
- List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.queryByRoomId(roomId);
|
|
|
-
|
|
|
- joinRoomResult.setRoomMemberList(roomMemberList);
|
|
|
+ List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId).list();
|
|
|
+ joinRoomResult.setMembers(roomMemberList);
|
|
|
//如果是老师,
|
|
|
if(userRole == RoleEnum.RoleTeacher){
|
|
|
//重置节拍器数据
|
|
@@ -141,7 +126,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
setMusicSheetList(roomMemberList,Long.parseLong(roomId));
|
|
|
}else {
|
|
|
//获取节拍器信息
|
|
|
- joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
|
|
|
+ joinRoomResult.setPlayMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomMember));
|
|
|
}
|
|
|
//课程结束后关闭教室的时间
|
|
|
joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
|
|
@@ -154,11 +139,13 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
courseScheduleStudentPaymentService.lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId,roomId).list();
|
|
|
List<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
|
|
|
//创建并加入群组
|
|
|
+ basicUserInfo.setImUserId(imGroupService.getImUserId(basicUserInfo.getUserId(),RoleEnum.RoleTeacher));
|
|
|
imGroupService.joinImGroup(roomId, basicUserInfo,
|
|
|
courseSchedule.getServiceProvider(), studentIds);
|
|
|
//获取腾讯所需基本信息配置
|
|
|
joinRoomResult.setRtcRoomConfig(roomService.getRtcRoomConfig(courseSchedule.getServiceProvider(),roomMember));
|
|
|
joinRoomResult.setGroupId(roomId);
|
|
|
+ joinRoomResult.setStudentNums(studentIds.size());
|
|
|
return BaseResponse.success(joinRoomResult);
|
|
|
}
|
|
|
|
|
@@ -176,8 +163,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
userRole = RoleEnum.RoleTeacher;
|
|
|
}
|
|
|
log.info("joinRoom params:roomId:{},userRole:{},userId:{}",roomId,userRole,userId);
|
|
|
- BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
- orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
|
|
|
ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
|
|
|
//初始化房间信息
|
|
@@ -188,28 +173,29 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
BeanUtils.copyProperties(room,joinRoomResult);
|
|
|
//定时销毁房间
|
|
|
//初始化房间用户信息
|
|
|
+ String imUserId = imGroupService.getImUserId(userId, userRole);
|
|
|
ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId)
|
|
|
- .eq(ImNetworkRoomMember::getUserId,userId).last("LIMIT 1").one();
|
|
|
- joinRoomResult.setRoomMember(roomMember);
|
|
|
+ .eq(ImNetworkRoomMember::getUserId,imUserId).last("LIMIT 1").one();
|
|
|
+ joinRoomResult.setUserInfo(roomMember);
|
|
|
//获取教室剩余时长
|
|
|
joinRoomResult.setSurplusTime(DateUtil.secondsBetween(new Date(), courseSchedule.getEndTime()));
|
|
|
//获取房间所有成员
|
|
|
- List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.queryByRoomId(roomId);
|
|
|
-
|
|
|
- joinRoomResult.setRoomMemberList(roomMemberList);
|
|
|
+ List<ImNetworkRoomMember> roomMemberList = imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId).list();
|
|
|
+ joinRoomResult.setMembers(roomMemberList);
|
|
|
//如果是老师,
|
|
|
if(userRole == RoleEnum.RoleTeacher){
|
|
|
//获取所有学员的伴奏下载详情
|
|
|
setMusicSheetList(roomMemberList,Long.parseLong(roomId));
|
|
|
}else {
|
|
|
//获取节拍器信息
|
|
|
- joinRoomResult.setMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomId, sysUser.getUserId()));
|
|
|
+ joinRoomResult.setPlayMidiJson(imNetworkRoomMemberStatusService.getMemberMidi(roomMember));
|
|
|
}
|
|
|
//课程结束后关闭教室的时间
|
|
|
joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
|
|
|
//获取腾讯所需基本信息配置
|
|
|
joinRoomResult.setRtcRoomConfig(roomService.getRtcRoomConfig(courseSchedule.getServiceProvider(),roomMember));
|
|
|
joinRoomResult.setGroupId(roomId);
|
|
|
+ joinRoomResult.setStudentNums(courseScheduleStudentPaymentService.lambdaQuery().eq(CourseScheduleStudentPayment::getCourseId,roomId).count());
|
|
|
return BaseResponse.success(joinRoomResult);
|
|
|
}
|
|
|
|
|
@@ -221,8 +207,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
Map<Long, List<CourseScheduleStudentMusicSheetResult>> musicSheetResultMap = musicSheetResults.stream().
|
|
|
collect(Collectors.groupingBy(CourseScheduleStudentMusicSheet::getUserId));
|
|
|
roomMemberList.forEach(e -> {
|
|
|
- if (musicSheetResultMap.containsKey(e.getUserId())) {
|
|
|
- e.setMusicSheetResults(musicSheetResultMap.get(e.getUserId()));
|
|
|
+ Long userId = Long.parseLong(imGroupService.analysisImUserId(e.getUserId()));
|
|
|
+ if (musicSheetResultMap.containsKey(userId)) {
|
|
|
+ e.setMusicSheetResults(musicSheetResultMap.get(userId));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -265,19 +252,20 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void joinRoomFailure(String roomId, ClientEnum clientType) {
|
|
|
-
|
|
|
// 当前登录用户ID
|
|
|
Long userId = sysUserService.getUserId();
|
|
|
log.info("joinRoomFailure: roomId={}, userId={}", roomId, userId);
|
|
|
|
|
|
// 网络教室用户身份
|
|
|
- UserRoleEnum userRole = UserRoleEnum.TEACHER;
|
|
|
+ RoleEnum userRole = RoleEnum.RoleTeacher;
|
|
|
if (ClientEnum.STUDENT == clientType) {
|
|
|
- userRole = UserRoleEnum.STUDENT;
|
|
|
+ userRole = RoleEnum.RoleStudent;
|
|
|
}
|
|
|
-
|
|
|
// 删除网络教室学员
|
|
|
- imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId, userRole.ordinal());
|
|
|
+ String imUserId = imGroupService.getImUserId(userId, userRole);
|
|
|
+ imNetworkRoomMemberService.lambdaUpdate().eq(ImNetworkRoomMember::getRoomId,roomId)
|
|
|
+ .eq(ImNetworkRoomMember::getUserId,imUserId)
|
|
|
+ .eq(ImNetworkRoomMember::getRole,userRole.getValue()).remove();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -287,8 +275,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
Long userId = Long.parseLong(imGroupService.analysisImUserId(imUserId));
|
|
|
// 客户端类型
|
|
|
ClientEnum clientType = ClientEnum.valueOf(imGroupService.analysisImUserClient(imUserId));
|
|
|
- // 客户端类型
|
|
|
- UserRoleEnum userRole = UserRoleEnum.convert(clientType);
|
|
|
+ // 网络教室用户身份
|
|
|
+ RoleEnum userRole = RoleEnum.RoleTeacher;
|
|
|
+ if (ClientEnum.STUDENT == clientType) {
|
|
|
+ userRole = RoleEnum.RoleStudent;
|
|
|
+ }
|
|
|
log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
//防止幂等
|
|
|
String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
|
|
@@ -297,8 +288,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId, userRole.ordinal());
|
|
|
+ ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery()
|
|
|
+ .eq(ImNetworkRoomMember::getUserId, userId)
|
|
|
+ .eq(ImNetworkRoomMember::getRoomId, roomId)
|
|
|
+ .eq(ImNetworkRoomMember::getRole, userRole.getValue())
|
|
|
+ .last("LIMIT 1").one();
|
|
|
if(Objects.isNull(roomMember)){
|
|
|
return;
|
|
|
}
|
|
@@ -316,7 +310,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
studentAttendanceService.signOut(userId,courseSchedule);
|
|
|
}
|
|
|
|
|
|
- if (roleEnum == RoleEnum.RoleTeacher || imNetworkRoomMemberService.getDao().countByRoomId(roomId) <= 1){
|
|
|
+ if (roleEnum == RoleEnum.RoleTeacher ||
|
|
|
+ imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId).count() <= 1){
|
|
|
//如果老师退出房间,初始化节拍器和伴奏播放配置
|
|
|
courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId,null);
|
|
|
}
|
|
@@ -338,7 +333,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
.map(x -> x.split(":")[0]).collect(Collectors.joining(","));
|
|
|
imNetworkRoomMemberStatusService.lambdaUpdate()
|
|
|
.eq(ImNetworkRoomMemberStatus::getRoomId,customMessage.getRoomId())
|
|
|
- .in(ImNetworkRoomMemberStatus::getUserId,collect)
|
|
|
+ .in(ImNetworkRoomMemberStatus::getImUserId,collect)
|
|
|
.set(ImNetworkRoomMemberStatus::getPlayMidi,customMessage.getContent());
|
|
|
}
|
|
|
|
|
@@ -417,10 +412,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
- List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.getDao().findByRoomAndRole(deviceControl.getRoomId(), 0);
|
|
|
+ List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.lambdaQuery()
|
|
|
+ .eq(ImNetworkRoomMember::getRoomId,deviceControl.getRoomId())
|
|
|
+ .eq(ImNetworkRoomMember::getRole,RoleEnum.RoleStudent.getValue()).list();
|
|
|
if (!CollectionUtils.isEmpty(roomMembers)) {
|
|
|
for (ImNetworkRoomMember roomMember : roomMembers) {
|
|
|
- deviceControl.setImUserId(imGroupService.getImUserId(String.valueOf(roomMember.getUserId()), ClientEnum.STUDENT.name()));
|
|
|
+ deviceControl.setImUserId(roomMember.getUserId());
|
|
|
controlDevice(deviceControl);
|
|
|
}
|
|
|
}
|
|
@@ -485,18 +482,21 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void approveControlDevice(ImNetworkDeviceControlDto deviceControl) throws Exception {
|
|
|
log.info("approveControlDevice: roomId:{} ,deviceType:{} ,enable:{}", deviceControl.getRoomId(),deviceControl.getDeviceType(),deviceControl.getEnable());
|
|
|
- UserRoleEnum userRole = UserRoleEnum.TEACHER;
|
|
|
+ RoleEnum userRole = RoleEnum.RoleTeacher;
|
|
|
if (ClientEnum.STUDENT == deviceControl.getClientType()) {
|
|
|
- userRole = UserRoleEnum.STUDENT;
|
|
|
+ userRole = RoleEnum.RoleStudent;
|
|
|
}
|
|
|
- ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().findByRidAndUid(deviceControl.getRoomId(),sysUserService.getUserId(),
|
|
|
- userRole.ordinal())).
|
|
|
+ Long userId = sysUserService.getUserId();
|
|
|
+ String imUserId = imGroupService.getImUserId(userId, userRole);
|
|
|
+ ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,deviceControl.getRoomId())
|
|
|
+ .eq(ImNetworkRoomMember::getUserId,imUserId)
|
|
|
+ .eq(ImNetworkRoomMember::getRole,userRole.getValue()).last("LIMIT 1").one()).
|
|
|
orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(deviceControl.getRoomId());
|
|
|
deviceControl.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
|
|
|
imService.pushApproveControlDevice(deviceControl,roomMember,
|
|
|
- teacherDao.getBasicUserInfo(roomMember.getUserId()),
|
|
|
+ teacherDao.getBasicUserInfo(userId),
|
|
|
teacherDao.getBasicUserInfo(courseSchedule.getTeacherId()));
|
|
|
}
|
|
|
|
|
@@ -506,26 +506,26 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
log.info("deviceStatusSync: enable:{} ,roomId:{} ,deviceType:{}", deviceStatusSync.getEnable(),deviceStatusSync.getRoomId(),deviceStatusSync.getDeviceType());
|
|
|
SysUser user = sysUserService.getUser();
|
|
|
Long userId = user.getId();
|
|
|
-
|
|
|
- UserRoleEnum userRole = UserRoleEnum.TEACHER;
|
|
|
+ RoleEnum userRole = RoleEnum.RoleTeacher;
|
|
|
if (ClientEnum.STUDENT == deviceStatusSync.getClientType()) {
|
|
|
- userRole = UserRoleEnum.STUDENT;
|
|
|
+ userRole = RoleEnum.RoleStudent;
|
|
|
}
|
|
|
|
|
|
CourseSchedule courseSchedule = courseScheduleService.getById(deviceStatusSync.getRoomId());
|
|
|
deviceStatusSync.setServiceProvider(courseSchedule.getServiceProvider());
|
|
|
- ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.getDao().
|
|
|
- findByRidAndUid(deviceStatusSync.getRoomId(), userId, userRole.ordinal()))
|
|
|
- .orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
+ String imUserId = imGroupService.getImUserId(userId, userRole);
|
|
|
+ ImNetworkRoomMember roomMember = Optional.ofNullable(imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,deviceStatusSync.getRoomId())
|
|
|
+ .eq(ImNetworkRoomMember::getUserId,imUserId)
|
|
|
+ .eq(ImNetworkRoomMember::getRole,userRole.getValue()).last("LIMIT 1").one()).
|
|
|
+ orElseThrow(()-> new BizException("用户不在房间内"));
|
|
|
imService.sendDeviceStatusSync(deviceStatusSync,roomMember);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<BasicUserInfo> queryNoJoinStu(String roomId) {
|
|
|
- List<BasicUserInfo> userInfos = courseScheduleStudentPaymentService.getDao().queryNoJoinStu(roomId);
|
|
|
-
|
|
|
- for (BasicUserInfo item : userInfos) {
|
|
|
- item.setImUserId(imGroupService.getImUserId(String.valueOf(item.getUserId()),ClientEnum.STUDENT.name()));
|
|
|
+ public List<BasicUserInfoDto> queryNoJoinStu(String roomId) {
|
|
|
+ List<BasicUserInfoDto> userInfos = courseScheduleStudentPaymentService.getDao().queryNoJoinStu(roomId);
|
|
|
+ for (BasicUserInfoDto item : userInfos) {
|
|
|
+ item.setUserId(imGroupService.getImUserId(item.getUserId(),ClientEnum.STUDENT.name()));
|
|
|
}
|
|
|
return userInfos;
|
|
|
}
|