|  | @@ -1,32 +1,24 @@
 | 
	
		
			
				|  |  |  package com.keao.edu.im.service.Impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.keao.edu.auth.api.client.EduUserFeignService;
 | 
	
		
			
				|  |  |  import com.keao.edu.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  |  import com.keao.edu.auth.api.entity.ExamRoom;
 | 
	
		
			
				|  |  |  import com.keao.edu.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  |  import com.keao.edu.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.common.ApiException;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.common.DisplayEnum;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.common.ErrorEnum;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.config.IMProperties;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.config.RoomProperties;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.dao.RoomDao;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.dao.RoomMemberDao;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.dao.UserDao;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.dao.WhiteboardDao;
 | 
	
		
			
				|  |  | +import com.keao.edu.im.dao.*;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.job.ScheduleManager;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.mec.im.IMHelper;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.mec.im.message.*;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.pojo.*;
 | 
	
		
			
				|  |  | -import com.keao.edu.im.service.MessageService;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.service.RoomService;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.utils.CheckUtils;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.utils.CodeUtil;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.utils.DateTimeUtils;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.utils.IdentifierUtils;
 | 
	
		
			
				|  |  |  import com.keao.edu.im.whiteboard.WhiteBoardHelper;
 | 
	
		
			
				|  |  | -import io.rong.models.message.GroupMessage;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
	
		
			
				|  | @@ -47,9 +39,6 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |      private IMHelper imHelper;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private RoomProperties roomProperties;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private RoomDao roomDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -68,9 +57,6 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |      private UserDao userDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | -    private MessageService messageService;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  |      private IMProperties imProperties;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
	
		
			
				|  | @@ -79,6 +65,12 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private EduUserFeignService eduUserFeignService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private TeacherAttendanceDao teacherAttendanceDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentAttendanceDao studentAttendanceDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public RoomResult joinRoom(String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception {
 | 
	
	
		
			
				|  | @@ -97,11 +89,11 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |                  isAssistant = true;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        String display = "";
 | 
	
		
			
				|  |  | +//        String display = "";
 | 
	
		
			
				|  |  |          Date curTime = DateTimeUtils.currentUTC();
 | 
	
		
			
				|  |  |          List<Room> roomList = roomDao.findByRid(roomId);
 | 
	
		
			
				|  |  |          if (roomList.isEmpty()) {
 | 
	
		
			
				|  |  | -            saveRoom(roomId, roomId, curTime, display);
 | 
	
		
			
				|  |  | +            saveRoom(roomId, roomId, curTime, null);
 | 
	
		
			
				|  |  |              IMApiResultInfo resultInfo = imHelper.createGroup(new String[]{userId}, roomId, roomId);
 | 
	
		
			
				|  |  |              if (!resultInfo.isSuccess()) {
 | 
	
		
			
				|  |  |                  log.error("joinRoom IM error: roomId={}, {}", roomId, resultInfo.getErrorMessage());
 | 
	
	
		
			
				|  | @@ -110,9 +102,9 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |  //            else {
 | 
	
		
			
				|  |  |  //                scheduleManager.addExpiredTask(this, roomId);
 | 
	
		
			
				|  |  |  //            }
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | +        }/* else {
 | 
	
		
			
				|  |  |              display = roomList.get(0).getDisplay();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  |          RoleEnum roleEnum;
 | 
	
		
			
				|  |  |          RoomResult roomResult = new RoomResult();
 | 
	
		
			
				|  |  |          RoomResult.MemberResult userResult = new RoomResult.MemberResult();
 | 
	
	
		
			
				|  | @@ -150,7 +142,7 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |          msg.setUserName(realName);
 | 
	
		
			
				|  |  |          msg.setCamera(!isDisableCamera);
 | 
	
		
			
				|  |  |          imHelper.publishMessage(userId, roomId, msg);
 | 
	
		
			
				|  |  | -        if (roleEnum == RoleEnum.MainTeacher) {
 | 
	
		
			
				|  |  | +        /*if (roleEnum == RoleEnum.MainTeacher) {
 | 
	
		
			
				|  |  |              display = "display://type=0?userId=" + userId + "?uri=";
 | 
	
		
			
				|  |  |              updateDisplay(roomId, userId, display, 0);
 | 
	
		
			
				|  |  |              log.info("joinRoom, display changed: roomId={}, {}, userId={}", roomId, display, userId);
 | 
	
	
		
			
				|  | @@ -158,7 +150,7 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |              display = "display://type=1?userId=" + userId + "?uri=";
 | 
	
		
			
				|  |  |              updateDisplay(roomId, userId, display, 0);
 | 
	
		
			
				|  |  |              log.info("joinRoom, display changed: roomId={}, {}, userId={}", roomId, display, userId);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<UserInfo> userInfoList = userDao.findByUid(userId);
 | 
	
		
			
				|  |  |          if (userInfoList.isEmpty()) {
 | 
	
	
		
			
				|  | @@ -178,7 +170,7 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |          userResult.setUserId(userId);
 | 
	
		
			
				|  |  |          userResult.setRole(roleEnum.getValue());
 | 
	
		
			
				|  |  |          roomResult.setUserInfo(userResult);
 | 
	
		
			
				|  |  | -        roomResult.setDisplay(display);
 | 
	
		
			
				|  |  | +//        roomResult.setDisplay(display);
 | 
	
		
			
				|  |  |          roomResult.setRoomId(roomId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          roomResult.setMembers(roomMemberDao.findByRid(roomId));
 | 
	
	
		
			
				|  | @@ -191,7 +183,34 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 | 
	
		
			
				|  |  |      public void signIn(Long roomId) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        SysUser sysUser = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  | +        Integer userId = sysUser.getId();
 | 
	
		
			
				|  |  | +        log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
 | 
	
		
			
				|  |  | +        ExamRoom examRoom = eduUserFeignService.getExamRoom(roomId.intValue());
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +        boolean isAssistant = false;
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
 | 
	
		
			
				|  |  | +            List<String> list = Arrays.asList(examRoom.getAssistantTeacherUserIdList().split(","));
 | 
	
		
			
				|  |  | +            if(list.contains(userId)){
 | 
	
		
			
				|  |  | +                isAssistant = true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(userId.equals(examRoom.getMainTeacherUserId()) || isAssistant){
 | 
	
		
			
				|  |  | +            TeacherAttendance teacherAttendance = new TeacherAttendance();
 | 
	
		
			
				|  |  | +            teacherAttendance.setExamRoomId(examRoom.getId());
 | 
	
		
			
				|  |  | +            teacherAttendance.setSignInTime(date);
 | 
	
		
			
				|  |  | +            teacherAttendance.setTeacherId(userId);
 | 
	
		
			
				|  |  | +            teacherAttendance.setTenantId(examRoom.getTenantId());
 | 
	
		
			
				|  |  | +            teacherAttendance.setCreateTime(date);
 | 
	
		
			
				|  |  | +            teacherAttendanceDao.save(teacherAttendance);
 | 
	
		
			
				|  |  | +        }else {
 | 
	
		
			
				|  |  | +            StudentAttendance studentAttendance = new StudentAttendance();
 | 
	
		
			
				|  |  | +            studentAttendance.setExamRoomId(examRoom.getId());
 | 
	
		
			
				|  |  | +            studentAttendance.setSignInTime(date);
 | 
	
		
			
				|  |  | +            studentAttendance.setUserId(userId);
 | 
	
		
			
				|  |  | +            studentAttendance.setCreateTime(date);
 | 
	
		
			
				|  |  | +            studentAttendanceDao.save(studentAttendance);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private void saveRoom(String roomId, String roomName, Date createTime, String display) {
 | 
	
	
		
			
				|  | @@ -223,13 +242,11 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public Boolean leaveRoom(String roomId) throws Exception {
 | 
	
		
			
				|  |  | +    public Boolean leaveRoom(String roomId){
 | 
	
		
			
				|  |  |          SysUser user = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  |          String userId = user.getId().toString();
 | 
	
		
			
				|  |  |          log.info("leaveRoom: roomId={}, userId={}", roomId,userId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  |          CheckUtils.checkArgument(user != null, "user must't be null");
 | 
	
		
			
				|  |  |          CheckUtils.checkArgument(roomId != null, "roomId must't be null");
 | 
	
		
			
				|  |  |          List<Room> roomList = roomDao.findByRid(roomId);
 | 
	
	
		
			
				|  | @@ -248,7 +265,7 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |          int userRole = roomMemberList.get(0).getRole();
 | 
	
		
			
				|  |  |          log.info("leaveRoom: roomId={}, role={}", roomId, RoleEnum.getEnumByValue(userRole));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (userRole == RoleEnum.MainTeacher.getValue() || userRole == RoleEnum.AssistantTeacher.getValue()) {
 | 
	
		
			
				|  |  | +        /*if (userRole == RoleEnum.MainTeacher.getValue() || userRole == RoleEnum.AssistantTeacher.getValue()) {
 | 
	
		
			
				|  |  |              if (isUserDisplay(roomList.get(0), userId)) {
 | 
	
		
			
				|  |  |                  updateDisplay(roomId, userId, "", 0);
 | 
	
		
			
				|  |  |                  log.info("clear display cause speaker leave: roomId={}", roomId);
 | 
	
	
		
			
				|  | @@ -257,7 +274,7 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  |              log.info("don't update current display: room={}, userRole={}", roomList.get(0), RoleEnum.getEnumByValue(userRole));
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        }*/
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (roomMemberDao.countByRid(roomId) == 1) {
 | 
	
		
			
				|  |  |              IMApiResultInfo apiResultInfo = null;
 | 
	
	
		
			
				|  | @@ -296,7 +313,6 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          userDao.deleteByUid(userId);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          return true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |