|
@@ -4,6 +4,7 @@ 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.microsvc.toolkit.middleware.rtc.RTCRoomPluginService;
|
|
|
import com.yonge.cooleshow.auth.api.entity.SysUser;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ImNetworkRoomDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
|
|
@@ -302,8 +303,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void quitRoomSuccess(String roomId, String imUserId) throws Exception {
|
|
|
- // 用户ID
|
|
|
- Long userId = Long.parseLong(imGroupService.analysisImUserId(imUserId));
|
|
|
// 客户端类型
|
|
|
ClientEnum clientType = ClientEnum.valueOf(imGroupService.analysisImUserClient(imUserId));
|
|
|
// 网络教室用户身份
|
|
@@ -311,16 +310,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
if (ClientEnum.STUDENT == clientType) {
|
|
|
userRole = RoleEnum.RoleStudent;
|
|
|
}
|
|
|
- log.info("quitRoomSuccess: roomId={}, userId={}", roomId, userId);
|
|
|
+ log.info("quitRoomSuccess: roomId={}, imUserId={}", roomId, imUserId);
|
|
|
//防止幂等
|
|
|
String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
|
|
|
- StringBuilder sb = new StringBuilder(QUIT_ROOM_SUCCESS).append(roomId).append(userId);
|
|
|
- if (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(sb.toString(), userId, 1L, TimeUnit.SECONDS))){
|
|
|
- log.info("quitRoomSuccess break: roomId={}, userId={}", roomId, userId);
|
|
|
+ StringBuilder sb = new StringBuilder(QUIT_ROOM_SUCCESS).append(roomId).append(imUserId);
|
|
|
+ if (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(sb.toString(), imUserId, 1L, TimeUnit.SECONDS))){
|
|
|
+ log.info("quitRoomSuccess break: roomId={}, imUserId={}", roomId, imUserId);
|
|
|
return;
|
|
|
}
|
|
|
ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery()
|
|
|
- .eq(ImNetworkRoomMember::getUserId, userId)
|
|
|
+ .eq(ImNetworkRoomMember::getUserId, imUserId)
|
|
|
.eq(ImNetworkRoomMember::getRoomId, roomId)
|
|
|
.eq(ImNetworkRoomMember::getRole, userRole.getValue())
|
|
|
.last("LIMIT 1").one();
|
|
@@ -331,23 +330,21 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId))
|
|
|
.orElseThrow(()->new BizException("房间信息不存在"));
|
|
|
Long courseScheduleId = courseSchedule.getId();
|
|
|
- RoleEnum roleEnum = RoleEnum.RoleStudent;
|
|
|
- if(Objects.equals(courseSchedule.getTeacherId(),userId)
|
|
|
- && ClientEnum.TEACHER == clientType){
|
|
|
- roleEnum = RoleEnum.RoleTeacher;
|
|
|
+ Long userId = Long.parseLong(imGroupService.analysisImUserId(imUserId));
|
|
|
+ if(RoleEnum.RoleTeacher == userRole){
|
|
|
teacherAttendanceService.signOut(userId,courseSchedule);
|
|
|
}else {
|
|
|
//记录考勤签退
|
|
|
studentAttendanceService.signOut(userId,courseSchedule);
|
|
|
}
|
|
|
|
|
|
- if (roleEnum == RoleEnum.RoleTeacher ||
|
|
|
+ if (RoleEnum.RoleTeacher == userRole ||
|
|
|
imNetworkRoomMemberService.lambdaQuery().eq(ImNetworkRoomMember::getRoomId,roomId).count() <= 1){
|
|
|
//如果老师退出房间,初始化节拍器和伴奏播放配置
|
|
|
courseScheduleStudentMusicSheetService.getDao().closePlayStatus(courseScheduleId,null);
|
|
|
}
|
|
|
//退出房间
|
|
|
- roomService.quitRoomSuccess(roleEnum,roomMember,courseSchedule.getServiceProvider());
|
|
|
+ roomService.quitRoomSuccess(userRole,roomMember,courseSchedule.getServiceProvider());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -461,6 +458,25 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
|
|
|
List<ImNetworkRoomMember> roomMembers = imNetworkRoomMemberService.lambdaQuery()
|
|
|
.eq(ImNetworkRoomMember::getRoomId,deviceControl.getRoomId())
|
|
|
.eq(ImNetworkRoomMember::getRole,RoleEnum.RoleStudent.getValue()).list();
|
|
|
+ // 同步全员静音状态
|
|
|
+ if (deviceControl.getDeviceType() == ImNetworkDeviceTypeEnum.MICROPHONE || deviceControl.getCancelMuteFlag() != null) {
|
|
|
+ courseScheduleService.lambdaUpdate().eq(CourseSchedule::getId,deviceControl.getRoomId())
|
|
|
+ .set(CourseSchedule::getMuteAll,!deviceControl.getEnable())
|
|
|
+ .set(CourseSchedule::getCancelMuteFlag,deviceControl.getCancelMuteFlag())
|
|
|
+ .update();
|
|
|
+ }
|
|
|
+ /*CourseSchedule courseSchedule = courseScheduleService.getById(deviceControl.getRoomId());
|
|
|
+ // 修改网管课群自定义属性
|
|
|
+ RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(courseSchedule.getServiceProvider());
|
|
|
+ if (Objects.nonNull(pluginService) && Objects.nonNull(newCourseSchedule)) {
|
|
|
+ // 更新群自定义字段
|
|
|
+ updateChatRoomGroupData(data.getRoomId(), newCourseSchedule, pluginService);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 取消网络课群静音
|
|
|
+ if (Objects.isNull(data.getMicrophoneOn())) {
|
|
|
+ return true;
|
|
|
+ }*/
|
|
|
if (!CollectionUtils.isEmpty(roomMembers)) {
|
|
|
for (ImNetworkRoomMember roomMember : roomMembers) {
|
|
|
deviceControl.setUserId(roomMember.getUserId());
|