|
@@ -1,21 +1,20 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
|
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
|
-import com.yonge.cooleshow.biz.dal.constant.SysConfigConstant;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
|
|
|
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.CourseSchedule;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.IMApiResultInfo;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoom;
|
|
|
-import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomErrorEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.ImNetworkRoomMemberChangedEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.support.IMHelper;
|
|
|
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
|
|
|
import com.yonge.cooleshow.common.entity.HttpResponseResult;
|
|
|
import com.yonge.cooleshow.common.exception.BizException;
|
|
|
import com.yonge.toolset.utils.date.DateUtil;
|
|
@@ -27,10 +26,8 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 网络教室房间(ImNetworkRoom)表服务实现类
|
|
@@ -46,6 +43,8 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Resource
|
|
|
private SysUserFeignService sysUserFeignService;
|
|
|
@Resource
|
|
|
+ private TeacherDao teacherDao;
|
|
|
+ @Resource
|
|
|
private ImNetworkRoomMemberService imNetworkRoomMemberService;
|
|
|
@Resource
|
|
|
private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
|
|
@@ -69,20 +68,22 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResponseResult<ImNetworkRoomResult> joinRoom(Long courseScheduleId, UserRoleEnum userRole) throws Exception {
|
|
|
log.info("joinRoom params:courseScheduleId:{},userRole:{}",courseScheduleId,userRole);
|
|
|
- CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getBaseMapper().selectById(courseScheduleId)).
|
|
|
- orElseThrow(()-> new BizException("课程信息不存在"));
|
|
|
+ SysUser user = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
+ orElseThrow(()-> new BizException("请登录"));
|
|
|
+ CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(courseScheduleId)).
|
|
|
+ orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
+ BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(user.getId())).
|
|
|
+ orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
Date now = new Date();
|
|
|
courseSchedule.setUpdatedTime(now);
|
|
|
//是否提前进入教室
|
|
|
if (roomNotStart(courseSchedule)) {
|
|
|
return HttpResponseResult.failed(ImNetworkRoomErrorEnum.ROOM_NOT_START.getRemark());
|
|
|
}
|
|
|
- SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
- orElseThrow(()-> new BizException("请登录"));
|
|
|
String roomId = courseScheduleId.toString();
|
|
|
ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
|
|
|
//初始化房间信息
|
|
|
- ImNetworkRoom room = this.initRoom(roomId,courseScheduleId,userRole,sysUser.getId(),now);
|
|
|
+ ImNetworkRoom room = this.initRoom(roomId,courseScheduleId,userRole,sysUser.getUserId(),now);
|
|
|
BeanUtils.copyProperties(room,joinRoomResult);
|
|
|
//定时销毁房间
|
|
|
//初始化房间用户信息
|
|
@@ -96,11 +97,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
courseScheduleStudentPaymentService.getDao().cleanPlayMidi(courseScheduleId);
|
|
|
}else {
|
|
|
//获取节拍器信息
|
|
|
- joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getId()));
|
|
|
+ joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getUserId()));
|
|
|
}
|
|
|
//获取用户已下载的伴奏列表
|
|
|
List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
|
|
|
- queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
|
|
|
+ queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getUserId(),null,null);
|
|
|
joinRoomResult.setMusicSheetResults(musicSheetResults);
|
|
|
//课程结束后关闭教室的时间
|
|
|
String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
|
|
@@ -108,7 +109,7 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
//获取课程剩余时长
|
|
|
DateUtil.secondsBetween(now, courseSchedule.getEndTime());
|
|
|
//创建、加入群聊
|
|
|
- IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{sysUser.getId().toString()}, roomId, roomId);
|
|
|
+ IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{sysUser.getUserId().toString()}, roomId, roomId);
|
|
|
if(resultInfo.getCode() != 200){
|
|
|
log.error("加入群聊失败 resultInfo:{}",resultInfo);
|
|
|
throw new BizException("加入网络教室失败,请联系管理员");
|
|
@@ -118,11 +119,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void joinRoomSuccess(String roomId,UserRoleEnum userRole) throws Exception {
|
|
|
- SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
- orElseThrow(()-> new BizException("请登录"));
|
|
|
- Long userId = sysUser.getId();
|
|
|
+ public void joinRoomSuccess(String roomId,Long userId) throws Exception {
|
|
|
log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
+ CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId)).
|
|
|
+ orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
+ BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
+ orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
+ UserRoleEnum userRole = UserRoleEnum.STUDENT;
|
|
|
+ if(Objects.equals(courseSchedule.getTeacherId(),userId)){
|
|
|
+ userRole = UserRoleEnum.TEACHER;
|
|
|
+ }
|
|
|
Date now = new Date();
|
|
|
//获取房间信息
|
|
|
this.initRoom(roomId, Long.parseLong(roomId), userRole, userId, now);
|
|
@@ -177,6 +183,29 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ public void leaveRoomSuccess(String roomId, Long userId) throws Exception {
|
|
|
+ log.info("leaveRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
+ CourseSchedule courseSchedule = courseScheduleService.getById(roomId);
|
|
|
+ if(Objects.isNull(courseSchedule)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UserRoleEnum roleEnum = UserRoleEnum.STUDENT;
|
|
|
+ if(Objects.equals(courseSchedule.getTeacherId(),userId)){
|
|
|
+ roleEnum = UserRoleEnum.TEACHER;
|
|
|
+ }
|
|
|
+ BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
|
|
|
+ orElseThrow(()-> new BizException("用户信息不存在"));
|
|
|
+ Date now = new Date();
|
|
|
+ //删房间用户信息
|
|
|
+ imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
|
|
|
+ ImNetworkRoom room = baseMapper.findByRoomId(roomId);
|
|
|
+ if (roleEnum == UserRoleEnum.TEACHER && isUserDisplay(room.getDisplay(), userId)) {
|
|
|
+ this.updateDisplay(userId,room);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
|
|
|
SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
orElseThrow(()-> new BizException("请登录"));
|
|
@@ -192,40 +221,40 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void pushDownloadMusicSheetMsg(ImNetworkRoomMusicSheetData musicSheetData) {
|
|
|
- SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
- orElseThrow(()-> new BizException("请登录"));
|
|
|
- Long userId = sysUser.getId();
|
|
|
- Long courseScheduleId = musicSheetData.getCourseScheduleId();
|
|
|
- log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
|
|
|
- //获取已通知下载的伴奏列表
|
|
|
- List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
|
|
|
- courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
|
|
|
- ImNetworkMusicSheetDownloadMessageContent downloadMessageContent = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
|
|
|
- if (musicSheetResults.size() == 0) {
|
|
|
- //第一次下载,生成数据
|
|
|
- List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
|
|
|
- Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
|
|
|
- studentIds.forEach(e -> {
|
|
|
- CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
|
|
|
- musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
|
|
|
- musicSheetResult.setSpeed(100);
|
|
|
- musicSheetResult.setCourseScheduleId(courseScheduleId);
|
|
|
- musicSheetResult.setUserId(e);
|
|
|
- musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
|
|
|
- musicSheetResults.add(musicSheetResult);
|
|
|
- });
|
|
|
- CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
|
|
|
- musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
|
|
|
- musicSheetResult.setSpeed(100);
|
|
|
- musicSheetResult.setCourseScheduleId(courseScheduleId);
|
|
|
- musicSheetResult.setUserId(userId);
|
|
|
- musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
|
|
|
- musicSheetResults.add(musicSheetResult);
|
|
|
- courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
|
|
|
- }
|
|
|
- ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
|
|
|
- ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
|
|
|
- imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
|
|
|
+// SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
+// orElseThrow(()-> new BizException("请登录"));
|
|
|
+// Long userId = sysUser.getId();
|
|
|
+// Long courseScheduleId = musicSheetData.getCourseScheduleId();
|
|
|
+// log.info("pushDownloadMusicSheetMsg: roomId={}, userId={}", courseScheduleId, userId);
|
|
|
+// //获取已通知下载的伴奏列表
|
|
|
+// List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().queryBySheetIdAndCourseId(musicSheetData.getMusicSheetAccompanimentId(),
|
|
|
+// courseScheduleId, null, null, UserRoleEnum.STUDENT.ordinal());
|
|
|
+// ImNetworkMusicSheetDownloadMessageContent downloadMessageContent = musicSheetAccompanimentService.getDao().findMsgContentByAccompanimentId(musicSheetData.getMusicSheetAccompanimentId());
|
|
|
+// if (musicSheetResults.size() == 0) {
|
|
|
+// //第一次下载,生成数据
|
|
|
+// List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentService.getDao().queryByCourseId(courseScheduleId);
|
|
|
+// Set<Long> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
|
|
|
+// studentIds.forEach(e -> {
|
|
|
+// CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
|
|
|
+// musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
|
|
|
+// musicSheetResult.setSpeed(100);
|
|
|
+// musicSheetResult.setCourseScheduleId(courseScheduleId);
|
|
|
+// musicSheetResult.setUserId(e);
|
|
|
+// musicSheetResult.setUserType(UserRoleEnum.STUDENT.ordinal());
|
|
|
+// musicSheetResults.add(musicSheetResult);
|
|
|
+// });
|
|
|
+// CourseScheduleStudentMusicSheetResult musicSheetResult = new CourseScheduleStudentMusicSheetResult();
|
|
|
+// musicSheetResult.setMusicSheetAccompanimentId(accompaniment.getId());
|
|
|
+// musicSheetResult.setSpeed(100);
|
|
|
+// musicSheetResult.setCourseScheduleId(courseScheduleId);
|
|
|
+// musicSheetResult.setUserId(userId);
|
|
|
+// musicSheetResult.setUserType(UserRoleEnum.TEACHER.ordinal());
|
|
|
+// musicSheetResults.add(musicSheetResult);
|
|
|
+// courseScheduleStudentMusicSheetService.getDao().batchInsert(musicSheetResults);
|
|
|
+// }
|
|
|
+// ImNetworkRoomMusicSheetData musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), ImNetworkRoomMusicSheetData.class);
|
|
|
+// ImNetworkMusicSheetDownloadMessage msg = new ImNetworkMusicSheetDownloadMessage(musicScoreMessage);
|
|
|
+// imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
|
|
|
}
|
|
|
|
|
|
//校验用户是否提前进入教室
|
|
@@ -256,12 +285,32 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
}else {
|
|
|
if(userRole == UserRoleEnum.TEACHER){
|
|
|
- room.setDisplay(new StringBuilder("display://type=1?userId=")
|
|
|
- .append(userId)
|
|
|
- .append("?uri=").toString());
|
|
|
- baseMapper.updateById(room);
|
|
|
+ //修改节拍器
|
|
|
+ this.updateDisplay(userId,room);
|
|
|
}
|
|
|
}
|
|
|
return room;
|
|
|
}
|
|
|
+
|
|
|
+ //修改节拍器
|
|
|
+ public void updateDisplay(Long userId,ImNetworkRoom room) throws Exception {
|
|
|
+ String display = new StringBuilder("display://type=1?userId=")
|
|
|
+ .append(userId)
|
|
|
+ .append("?uri=").toString();
|
|
|
+ room.setDisplay(display);
|
|
|
+ baseMapper.updateById(room);
|
|
|
+ //发送display改动通知
|
|
|
+ ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(display);
|
|
|
+ imHelper.publishMessage(userId.toString(), room.getRoomId(), displayMessage, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isUserDisplay(String display, Long userId) {
|
|
|
+ boolean result = false;
|
|
|
+ if (!display.isEmpty() && display.contains("userId=" + userId)) {
|
|
|
+ if (display.contains("type=0") || display.contains("type=1") || display.contains("type=3")) {
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|