|
@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.ImNetworkRoomMember;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.UserRoleEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.service.ImNetworkRoomMemberService;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
@@ -15,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* 网络教室成员(ImNetworkRoomMember)表服务实现类
|
|
@@ -32,6 +34,72 @@ public class ImNetworkRoomMemberServiceImpl extends ServiceImpl<ImNetworkRoomMem
|
|
|
return this.baseMapper;
|
|
|
}
|
|
|
|
|
|
+ public void leaveRoomSuccess(String roomId, String userId, String deviceNum) throws Exception {
|
|
|
+ log.info("leaveRoomSuccess: roomId={}, userId={},deviceNum={}", roomId, userId, deviceNum);
|
|
|
+ Integer firstCourseId = Integer.parseInt(roomId.substring(1));
|
|
|
+ RoleEnum roleEnum;
|
|
|
+ int parseInt = Integer.parseInt(userId);
|
|
|
+ Teacher teacher = teacherDao.get(parseInt);
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
|
|
|
+ if (teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())) {
|
|
|
+ roleEnum = RoleTeacher;
|
|
|
+ courseScheduleStudentMusicScoreDao.closePlayStatus(courseSchedule.getId(), null, null);
|
|
|
+ } else {
|
|
|
+ roleEnum = RoleStudent;
|
|
|
+ }
|
|
|
+
|
|
|
+ String leaveSuccessKey = "leaveRoomSuccess" + roomId + userId;
|
|
|
+ Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey, roomId, 1l, TimeUnit.SECONDS);
|
|
|
+ log.info("leaveRoomSuccess: roomId={}, userId={},deviceNum={},aBoolean={}", roomId, userId, deviceNum, aBoolean);
|
|
|
+ if (!aBoolean) {
|
|
|
+ if (StringUtils.isNotEmpty(deviceNum)) {
|
|
|
+ //如果设备号不为空,更新设备号
|
|
|
+ if (roleEnum == RoleTeacher) {
|
|
|
+ teacherAttendanceService.updateDeviceNum(firstCourseId, userId, null, deviceNum);
|
|
|
+// teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),parseInt,deviceNum);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String username;
|
|
|
+ SysUser sysUser = sysUserFeignService.queryUserById(parseInt);
|
|
|
+ if (roleEnum == RoleTeacher) {
|
|
|
+ username = sysUser.getRealName();
|
|
|
+ courseScheduleStudentPaymentDao.adjustPlayMidi(firstCourseId, null, null);
|
|
|
+ courseScheduleStudentPaymentDao.adjustExamSong(firstCourseId.longValue(), null, null);
|
|
|
+ teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(), parseInt, deviceNum);
|
|
|
+ } else {
|
|
|
+ username = sysUser.getUsername();
|
|
|
+ studentAttendanceService.addStudentAttendanceSignOut(firstCourseId.longValue(), parseInt);
|
|
|
+ }
|
|
|
+ Room room = roomDao.findByRid(roomId);
|
|
|
+ if (room == null) {
|
|
|
+ roomMemberDao.deleteUserByRidAndUid(roomId, userId);
|
|
|
+ userDao.deleteByUid(userId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (roleEnum != RoleStudent && isUserDisplay(room, userId)) {
|
|
|
+ updateDisplay(roomId, userId, "", 0);
|
|
|
+ }
|
|
|
+ if (roomMemberDao.countByRid(roomId) <= 1) {
|
|
|
+ roomMemberDao.deleteUserByRidAndUid(roomId, userId);
|
|
|
+ roomDao.deleteByRid(roomId);
|
|
|
+ deleteWhiteboardByUser(roomId, userId);
|
|
|
+ imHelper.dismiss(userId, roomId);
|
|
|
+ courseScheduleStudentMusicScoreDao.closePlayStatus(courseSchedule.getId(), null, null);
|
|
|
+ log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId, userId);
|
|
|
+ } else {
|
|
|
+ roomMemberDao.deleteUserByRidAndUid(roomId, userId);
|
|
|
+ MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, roleEnum.getValue());
|
|
|
+ msg.setUserName(username);
|
|
|
+ imHelper.publishMessage(userId, roomId, msg);
|
|
|
+ imHelper.quit(new String[]{userId}, roomId);
|
|
|
+ log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, userId);
|
|
|
+ }
|
|
|
+ userDao.deleteByUid(userId);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ImNetworkRoomMember initRoomMember(String roomId, BasicUserInfo sysUser, UserRoleEnum userRole) {
|