|
@@ -1,6 +1,6 @@
|
|
|
package com.yonge.cooleshow.biz.dal.service.impl;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
+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;
|
|
@@ -8,10 +8,7 @@ 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.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;
|
|
@@ -28,10 +25,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)表服务实现类
|
|
@@ -51,13 +46,15 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Resource
|
|
|
private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
|
|
|
@Resource
|
|
|
- private CourseScheduleStudentMusicScoreService courseScheduleStudentMusicScoreService;
|
|
|
+ private CourseScheduleStudentMusicSheetService courseScheduleStudentMusicSheetService;
|
|
|
@Resource
|
|
|
private CourseScheduleService courseScheduleService;
|
|
|
@Resource
|
|
|
private SysConfigDao sysConfigDao;
|
|
|
@Resource
|
|
|
private IMHelper imHelper;
|
|
|
+ @Resource
|
|
|
+ private MusicSheetAccompanimentService musicSheetAccompanimentService;
|
|
|
|
|
|
@Override
|
|
|
public ImNetworkRoomDao getDao() {
|
|
@@ -98,9 +95,9 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getId()));
|
|
|
}
|
|
|
//获取用户已下载的伴奏列表
|
|
|
- List<CourseScheduleStudentMusicScoreResult> musicScoreResults = courseScheduleStudentMusicScoreService.getDao().
|
|
|
- queryByScoreIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
|
|
|
- joinRoomResult.setMusicScoreResults(musicScoreResults);
|
|
|
+ List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
|
|
|
+ queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getId(),null,null);
|
|
|
+ joinRoomResult.setMusicSheetResults(musicSheetResults);
|
|
|
//课程结束后关闭教室的时间
|
|
|
String autoCloseNetworkRoomTime = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
|
|
|
joinRoomResult.setAutoCloseNetworkRoomTime(autoCloseNetworkRoomTime);
|
|
@@ -117,10 +114,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void joinRoomSuccess(String roomId, Long userId,UserRoleEnum userRole) throws Exception {
|
|
|
- log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
+ public void joinRoomSuccess(String roomId,UserRoleEnum userRole) throws Exception {
|
|
|
SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
orElseThrow(()-> new BizException("请登录"));
|
|
|
+ Long userId = sysUser.getId();
|
|
|
+ log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
Date now = new Date();
|
|
|
//获取房间信息
|
|
|
this.initRoom(roomId, Long.parseLong(roomId), userRole, userId, now);
|
|
@@ -139,8 +137,91 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void joinRoomFailure(String roomId, Long userId) {
|
|
|
- log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void joinRoomFailure(String roomId) {
|
|
|
+ SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
+ orElseThrow(()-> new BizException("请登录"));
|
|
|
+ Long userId = sysUser.getId();
|
|
|
+ log.info("joinRoomFailure: roomId={}, userId={}", roomId, userId);
|
|
|
+ imNetworkRoomMemberService.getDao().delByRidAndUid(roomId, userId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void leaveRoom(String roomId,UserRoleEnum userRole) throws Exception {
|
|
|
+ SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
+ orElseThrow(()-> new BizException("请登录"));
|
|
|
+ Long userId = sysUser.getId();
|
|
|
+ log.info("leaveRoom: roomId={}, userId={}", roomId, userId);
|
|
|
+ long courseScheduleId = Long.parseLong(roomId);
|
|
|
+ if (userRole == UserRoleEnum.TEACHER){
|
|
|
+ //如果老师退出房间,关闭伴奏
|
|
|
+ courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId);
|
|
|
+ courseScheduleStudentPaymentService.getDao().adjustPlayMidi(courseScheduleId, null, null);
|
|
|
+ courseScheduleStudentPaymentService.getDao().adjustExamSong(courseScheduleId, null, null);
|
|
|
+ }
|
|
|
+ ImNetworkRoomMember roomMember = imNetworkRoomMemberService.getDao().findByRidAndUid(roomId, userId);
|
|
|
+ //删除用户信息
|
|
|
+ imNetworkRoomMemberService.getDao().delByRidAndUid(roomId,userId);
|
|
|
+ //发送退出房间的消息
|
|
|
+ ImNetworkRoomMemberChangedMessage msg = new ImNetworkRoomMemberChangedMessage(roomMember,ImNetworkRoomMemberChangedEnum.JOIN);
|
|
|
+ imHelper.publishMessage(userId.toString(), roomId, msg);
|
|
|
+ imHelper.quit(new String[]{userId.toString()}, roomId);
|
|
|
+ //记录考勤信息
|
|
|
+ //是否删除房间信息
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void sendImPlayMidiMessage(ImNetworkCustomMessage customMessage) throws Exception {
|
|
|
+ SysUser sysUser = Optional.ofNullable(sysUserFeignService.queryUserInfo()).
|
|
|
+ orElseThrow(()-> new BizException("请登录"));
|
|
|
+ Long userId = sysUser.getId();
|
|
|
+ Long courseScheduleId = customMessage.getCourseScheduleId();
|
|
|
+ log.info("sendImPlayMidiMessage: roomId={}, userId={}", courseScheduleId, userId);
|
|
|
+ ImNetworkMetronomeMessage displayMessage = new ImNetworkMetronomeMessage(customMessage);
|
|
|
+ imHelper.publishMessage(userId.toString(), courseScheduleId.toString(), displayMessage, 0);
|
|
|
+ //记录节拍器信息
|
|
|
+ courseScheduleStudentPaymentService.getDao().adjustPlayMidi(courseScheduleId,userId,customMessage.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @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 content = 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);
|
|
|
}
|
|
|
|
|
|
//校验用户是否提前进入教室
|