瀏覽代碼

Merge remote-tracking branch 'origin/master'

Joburgess 5 年之前
父節點
當前提交
3422ae7b89
共有 39 個文件被更改,包括 821 次插入111 次删除
  1. 8 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/ImFeignService.java
  2. 5 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/callback/ImFeignServiceFallback.java
  3. 1 1
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/BaseMessage.java
  4. 99 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/MemberChangedMessage.java
  5. 43 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/PublishMessageDto.java
  6. 28 10
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/ReqUserData.java
  7. 23 3
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java
  8. 1 0
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/IMHelper.java
  9. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/ApplyForSpeechMessage.java
  10. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/AssistantTransferMessage.java
  11. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/ControlDeviceNotifyMessage.java
  12. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/DeviceStateChangedMessage.java
  13. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/DisplayMessage.java
  14. 0 40
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/MemberChangedMessage.java
  15. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/RoleChangedMessage.java
  16. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/SpeechResultMessage.java
  17. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/TicketExpiredMessage.java
  18. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/TurnPageMessage.java
  19. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/UpgradeRoleMessage.java
  20. 1 1
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/WhiteboardMessage.java
  21. 194 6
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java
  22. 24 3
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java
  23. 21 5
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java
  24. 12 1
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java
  25. 1 1
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/enums/ExamEvaluationResultEnum.java
  26. 193 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/enums/StudentExamResultApiDto.java
  27. 17 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java
  28. 8 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentExamResultController.java
  29. 6 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SysConfigController.java
  30. 0 9
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java
  31. 15 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java
  32. 21 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/StudentExamResult.java
  33. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/StudentExamResultQueryInfo.java
  34. 17 4
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java
  35. 7 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentExamResultService.java
  36. 19 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  37. 13 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentExamResultServiceImpl.java
  38. 0 5
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml
  39. 33 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

+ 8 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/ImFeignService.java

@@ -101,4 +101,12 @@ public interface ImFeignService {
 	 */
 	@PostMapping(value = "room/leave")
 	void leaveRoom(@RequestBody ReqUserData reqUserData);
+
+	/**
+	 * 发送消息
+	 * @param publishMessageDto
+	 * @return
+	 */
+	@PostMapping(value = "room/publishMessage")
+	void publishMessage(@RequestBody PublishMessageDto publishMessageDto);
 }

+ 5 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/callback/ImFeignServiceFallback.java

@@ -64,6 +64,11 @@ public class ImFeignServiceFallback implements ImFeignService {
     public void leaveRoom(ReqUserData reqUserData) {
 
     }
+
+    @Override
+    public void publishMessage(PublishMessageDto publishMessageDto) {
+
+    }
 /*
     @Override
     public Object privateSendCustom(ImGroupMessage groupMessage) {

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/BaseMessage.java → edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/BaseMessage.java

@@ -1,4 +1,4 @@
-package com.keao.edu.im.mec.im;
+package com.keao.edu.im.api.entity;
 
 import com.alibaba.fastjson.JSONObject;
 

+ 99 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/MemberChangedMessage.java

@@ -0,0 +1,99 @@
+package com.keao.edu.im.api.entity;
+
+import java.util.Date;
+
+public class MemberChangedMessage extends BaseMessage {
+    public final static int Action_Join = 1;
+    public final static int Action_Leave = 2;
+    public final static int Action_Kick = 3;
+    public final static int Action_Recorded = 4;
+
+    private int action;
+
+    private String userId;
+    private String userName;
+    private String roomId;
+    private boolean camera;
+    private boolean microphone;
+
+    int role;
+
+    private Date timestamp;
+
+    public String getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    public int getAction() {
+        return action;
+    }
+
+    public void setAction(int action) {
+        this.action = action;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public boolean isCamera() {
+        return camera;
+    }
+
+    public void setCamera(boolean camera) {
+        this.camera = camera;
+    }
+
+    public boolean isMicrophone() {
+        return microphone;
+    }
+
+    public void setMicrophone(boolean microphone) {
+        this.microphone = microphone;
+    }
+
+    public int getRole() {
+        return role;
+    }
+
+    public void setRole(int role) {
+        this.role = role;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public MemberChangedMessage(int action, String userId, int role) {
+        this.action = action;
+        this.userId = userId;
+        this.role = role;
+        this.camera = true;
+        this.microphone = true;
+    }
+
+    @Override
+    public String getObjectName() {
+        return "SC:RMCMsg";
+    }
+}

+ 43 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/PublishMessageDto.java

@@ -0,0 +1,43 @@
+package com.keao.edu.im.api.entity;
+
+public class PublishMessageDto {
+    private String userId;
+
+    private String roomId;
+
+    private Integer includeSender;
+
+    private MemberChangedMessage memberChangedMessage;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(String roomId) {
+        this.roomId = roomId;
+    }
+
+    public Integer getIncludeSender() {
+        return includeSender;
+    }
+
+    public void setIncludeSender(Integer includeSender) {
+        this.includeSender = includeSender;
+    }
+
+    public MemberChangedMessage getMemberChangedMessage() {
+        return memberChangedMessage;
+    }
+
+    public void setMemberChangedMessage(MemberChangedMessage memberChangedMessage) {
+        this.memberChangedMessage = memberChangedMessage;
+    }
+}

+ 28 - 10
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/ReqUserData.java

@@ -3,20 +3,38 @@ package com.keao.edu.im.api.entity;
 
 public class ReqUserData {
 	private String userName;
-	private String roomId;
+//	private String roomId;
+	private Long registrationId;
 	private String userId;
+	private String type;
 	private boolean audience;
 	private boolean disableCamera;
 	private boolean musicMode;
 
-	public ReqUserData(String roomId, String userId) {
+	/*public ReqUserData(String roomId, String userId) {
 		this.roomId = roomId;
 		this.userId = userId;
-	}
+	}*/
 
 	public ReqUserData() {
 	}
 
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public Long getRegistrationId() {
+		return registrationId;
+	}
+
+	public void setRegistrationId(Long registrationId) {
+		this.registrationId = registrationId;
+	}
+
 	public String getUserName() {
 		return userName;
 	}
@@ -25,13 +43,13 @@ public class ReqUserData {
 		this.userName = userName;
 	}
 
-	public String getRoomId() {
-		return roomId;
-	}
-
-	public void setRoomId(String roomId) {
-		this.roomId = roomId;
-	}
+//	public String getRoomId() {
+//		return roomId;
+//	}
+//
+//	public void setRoomId(String roomId) {
+//		this.roomId = roomId;
+//	}
 
 	public String getUserId() {
 		return userId;

+ 23 - 3
edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java

@@ -2,6 +2,7 @@ package com.keao.edu.im.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.im.common.ApiException;
 import com.keao.edu.im.common.BaseResponse;
@@ -12,6 +13,7 @@ import com.keao.edu.im.service.RoomService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
 import java.util.List;
 
 /**
@@ -31,10 +33,22 @@ public class RoomController{
     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public Object joinRoom(@RequestBody ReqUserData data)
             throws ApiException, Exception {
-        RoomResult roomResult = roomService.joinRoom(data.getRoomId(), data.isAudience(), data.isDisableCamera(),data.isMusicMode());
+        RoomResult roomResult = roomService.joinRoom(data.getRegistrationId(), data.isAudience(), data.isDisableCamera(),data.isMusicMode());
         return new BaseResponse<>(roomResult);
     }
 
+    @RequestMapping(value = "/joinRecorded", method = RequestMethod.POST)
+    public Object joinRecorded(Long examRegistrationId)
+            throws Exception {
+        return new BaseResponse<>(roomService.joinRecorded(examRegistrationId));
+    }
+
+    @RequestMapping(value = "/levelRecorded", method = RequestMethod.POST)
+    public Object levelRecorded(Long examRegistrationId)
+            throws Exception {
+        return new BaseResponse<>(roomService.levelRecorded(examRegistrationId));
+    }
+
     @RequestMapping(value = "/roomQuery", method = RequestMethod.POST)
     public Object signIn(String roomId) throws Exception {
         roomService.startRecord(roomId);
@@ -50,7 +64,7 @@ public class RoomController{
     @RequestMapping(value = "/leave", method = RequestMethod.POST)
     public Object leaveRoom(@RequestBody ReqUserData data)
             throws ApiException, Exception {
-        boolean result = roomService.leaveRoom(data.getRoomId(),data.getUserId());
+        boolean result = roomService.leaveRoom(data.getRegistrationId(),data.getUserId());
         return new BaseResponse<>(result);
     }
 
@@ -91,10 +105,16 @@ public class RoomController{
     @RequestMapping(value = "/kick", method = RequestMethod.POST)
     public Object kickMember(@RequestBody ReqUserData data)
             throws ApiException, Exception {
-        boolean result = roomService.kickMember(data.getRoomId());
+        boolean result = roomService.kickMember(data);
         return new BaseResponse<>(result);
     }
 
+    @RequestMapping(value = "/publishMessage", method = RequestMethod.POST)
+    public Object publishMessage(@RequestBody PublishMessageDto publishMessageDto) throws Exception {
+        roomService.publishMessage(publishMessageDto);
+        return new BaseResponse<>();
+    }
+
     //only teacher
     /*@RequestMapping(value = "/display", method = RequestMethod.POST)
     public Object display(@RequestBody ReqDisplayData data)

+ 1 - 0
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/IMHelper.java

@@ -3,6 +3,7 @@ package com.keao.edu.im.mec.im;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.keao.edu.common.exception.BizException;
+import com.keao.edu.im.api.entity.BaseMessage;
 import com.keao.edu.im.http.HttpHelper;
 import com.keao.edu.im.pojo.IMApiResultInfo;
 import com.keao.edu.im.pojo.IMTokenInfo;

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/ApplyForSpeechMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/AssistantTransferMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/ControlDeviceNotifyMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/DeviceStateChangedMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/DisplayMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 0 - 40
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/MemberChangedMessage.java

@@ -1,40 +0,0 @@
-package com.keao.edu.im.mec.im.message;
-
-import com.keao.edu.im.mec.im.BaseMessage;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Date;
-
-/**
- * Created by weiqinxiao on 2019/3/6.
- */
-public class MemberChangedMessage extends BaseMessage {
-    public final static int Action_Join = 1;
-    public final static int Action_Leave = 2;
-    public final static int Action_Kick = 3;
-
-    @Getter @Setter private int action;
-
-    @Getter @Setter private String userId;
-    @Getter @Setter private String userName;
-    @Getter @Setter private boolean camera;
-    @Getter @Setter private boolean microphone;
-
-    private @Getter @Setter int role;
-
-    private @Getter @Setter Date timestamp;
-
-    public MemberChangedMessage(int action, String userId, int role) {
-        this.action = action;
-        this.userId = userId;
-        this.role = role;
-        this.camera = true;
-        this.microphone = true;
-    }
-
-    @Override
-    public String getObjectName() {
-        return "SC:RMCMsg";
-    }
-}

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/RoleChangedMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/SpeechResultMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/TicketExpiredMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/TurnPageMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/UpgradeRoleMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/message/WhiteboardMessage.java

@@ -1,6 +1,6 @@
 package com.keao.edu.im.mec.im.message;
 
-import com.keao.edu.im.mec.im.BaseMessage;
+import com.keao.edu.im.api.entity.BaseMessage;
 import lombok.Getter;
 import lombok.Setter;
 

+ 194 - 6
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -1,9 +1,13 @@
 package com.keao.edu.im.service.Impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.enums.YesOrNoEnum;
 import com.keao.edu.common.exception.BizException;
+import com.keao.edu.im.api.entity.MemberChangedMessage;
+import com.keao.edu.im.api.entity.PublishMessageDto;
+import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.im.common.ApiException;
 import com.keao.edu.im.common.ErrorEnum;
 import com.keao.edu.im.config.IMProperties;
@@ -21,6 +25,8 @@ import com.keao.edu.im.whiteboard.WhiteBoardHelper;
 import com.keao.edu.user.api.client.EduUserFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
+import com.keao.edu.util.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -87,10 +93,109 @@ public class RoomServiceImpl implements RoomService {
         imHelper.startRecord(sysUser.getId().toString(),roomId);
     }
 
+    @Override
+    public RoomResult joinRecorded(Long examRegistrationId) throws Exception {
+        StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(examRegistrationId);
+//        String roomId = examResult.getRoomId();
+        String recordedRoomId = "recorded" + examResult.getRoomId();
+        CheckUtils.checkArgument(recordedRoomId != null, "joinRecorded roomId must't be null");
+
+        //是否超时
+        Integer isFinishedExam = examResult.getIsFinishedExam();
+        if(isFinishedExam == null || isFinishedExam == 1){
+            throw new BizException("加入失败,考试已结束");
+        }
+        Integer recordFlag = examResult.getRecordFlag();
+        if(recordFlag == null || recordFlag == 0){
+            throw new BizException("加入失败,当前考试不允许录制");
+        }
+        String recordStartTime = examResult.getRecordStartTime();
+        Date date = new Date();
+        if(recordStartTime != null){
+            Date startTime = DateUtil.stringToDate(recordStartTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+            int minutesBetween = DateUtil.minutesBetween(startTime, date);
+            int record_minutes = Integer.parseInt(eduUserFeignService.getSysConfig("record_minutes"));
+            if(minutesBetween >= record_minutes){
+                throw new BizException("加入失败,录制超时");
+            }
+        }
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        String userId = sysUser.getId().toString();
+        String realName = sysUser.getRealName();
+//        ExamRoom examRoom = eduUserFeignService.getExamRoom(Integer.parseInt(roomId));
+        RoomResult roomResult = new RoomResult();
+        RoomResult.MemberResult userResult = new RoomResult.MemberResult();
+        List<RoomMember> memberList = roomMemberDao.findByRidAndUid(recordedRoomId, userId);
+
+        ExamRoomStudentRelation examRoomStudentRelation = eduUserFeignService.getExamRoomStudentRelation(examRegistrationId);
+        if(examRoomStudentRelation == null){
+            throw new BizException("学员考试数据异常");
+        }
+        if(examRoomStudentRelation.getClassroomSwitch() == YesOrNoEnum.NO){
+            throw new BizException("考级入口已关闭");
+        }
+        if (memberList.isEmpty()) {
+            saveRoomMember(userId,sysUser.getAvatar(), realName, recordedRoomId, Student.getValue(), true,true, date);
+            IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, recordedRoomId, recordedRoomId);
+            if (!resultInfo.isSuccess()) {
+                throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
+            }
+            userResult.setMicrophone(true);
+            userResult.setCamera(true);
+            userResult.setHandUp(false);
+            userResult.setJoinTime(date);
+            log.info("joinRecorded user join the room: roomId={} , userId={}, roleEnum={}", recordedRoomId, userId, Student);
+        } else {
+            RoomMember roomMember = memberList.get(0);
+//            roomMemberDao.updateCameraByRidAndUid(roomId, userId, !isDisableCamera);
+            userResult.setCamera(roomMember.isCamera());
+            userResult.setHandUp(roomMember.isHand());
+            userResult.setJoinTime(roomMember.getJoinDt());
+            log.info("joinRecorded user exist in the room: roomId={} , userId={}, use the last role={}", recordedRoomId, userId, Student);
+        }
+
+        MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Join, userId, Student.getValue());
+        msg.setTimestamp(date);
+        msg.setUserName(realName);
+        msg.setCamera(true);
+        imHelper.publishMessage(userId, recordedRoomId, msg);
+
+        List<UserInfo> userInfoList = userDao.findByUid(userId);
+        if (userInfoList.isEmpty()) {
+            UserInfo userInfo = new UserInfo();
+            userInfo.setUid(userId);
+            userInfo.setName(realName);
+            userInfo.setCreateDt(date);
+            userInfo.setUpdateDt(date);
+            userDao.save(userInfo);
+        } else {
+            UserInfo user = userInfoList.get(0);
+            user.setUpdateDt(date);
+            userDao.save(user);
+        }
+
+        userResult.setUserName(realName);
+        userResult.setUserId(userId);
+        userResult.setRole(Student.getValue());
+        roomResult.setUserInfo(userResult);
+        roomResult.setRoomId(recordedRoomId);
+
+        roomResult.setMembers(roomMemberDao.findByRid(recordedRoomId));
+        log.info("joinRecorded join success: roomId = {}, userId = {}, userName={}, role = {}", recordedRoomId, userId, Student);
+        return roomResult;
+    }
+
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public RoomResult joinRoom(String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception {
-        CheckUtils.checkArgument(roomId != null, "roomId must't be null");
+    public RoomResult joinRoom(Long registrationId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception {
+        StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
+        Integer recordFlag = examResult.getRecordFlag();
+        if(recordFlag != null && recordFlag == 1){
+            joinRecorded(registrationId);
+        }
+        String roomId = examResult.getRoomId();
+        CheckUtils.checkArgument(registrationId != null, "registrationId must't be null");
 
         log.info("joinRoom: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId, isAudience, isDisableCamera,isMusicMode);
 
@@ -131,7 +236,7 @@ public class RoomServiceImpl implements RoomService {
             }else if(isAssistant){
                 roleEnum = RoleEnum.AssistantTeacher;
             }else {
-                ExamRoomStudentRelation examRoomStudentRelation = eduUserFeignService.getExamRoomStudentRelation(examRoom.getExaminationBasicId().intValue(), roomId, sysUser.getId());
+                ExamRoomStudentRelation examRoomStudentRelation = eduUserFeignService.getExamRoomStudentRelation(registrationId);
                 if(examRoomStudentRelation == null){
                     throw new BizException("学员考试数据异常");
                 }
@@ -154,7 +259,7 @@ public class RoomServiceImpl implements RoomService {
             RoomMember roomMember = memberList.get(0);
             roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
             if(roleEnum == Student){
-                ExamRoomStudentRelation examRoomStudentRelation = eduUserFeignService.getExamRoomStudentRelation(examRoom.getExaminationBasicId().intValue(), roomId, sysUser.getId());
+                ExamRoomStudentRelation examRoomStudentRelation = eduUserFeignService.getExamRoomStudentRelation(registrationId);
                 if(examRoomStudentRelation == null){
                     throw new BizException("学员考试数据异常");
                 }
@@ -333,7 +438,10 @@ public class RoomServiceImpl implements RoomService {
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public Boolean leaveRoom(String roomId,String userId){
+    public Boolean leaveRoom(Long registrationId,String userId){
+        StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
+        String roomId = examResult.getRoomId();
+
         SysUser user = null;
         if(StringUtils.isEmpty(userId)){
             user = sysUserFeignService.queryUserInfo();
@@ -413,6 +521,72 @@ public class RoomServiceImpl implements RoomService {
         return true;
     }
 
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Override
+    public Boolean levelRecorded(Long registrationId){
+        StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
+        String roomId = "recorded" + examResult.getRoomId();
+        SysUser user = sysUserFeignService.queryUserInfo();
+        String userId = user.getId().toString();
+        log.info("levelRecorded: roomId={}, userId={}", roomId,userId);
+
+        CheckUtils.checkArgument(userId != null, "userId must't be null");
+        CheckUtils.checkArgument(roomId != null, "roomId must't be null");
+        List<Room> roomList = roomDao.findByRid(roomId);
+        if (roomList.size() == 0) {
+            log.error("levelRecorded room : {} not exist ", roomId);
+            return false;
+        }
+        List<RoomMember> roomMemberList = roomMemberDao.findByRidAndUid(roomId, userId);
+        if (roomMemberList.size() == 0) {
+            log.error("levelRecorded {} not exist in room: {}", userId, roomId);
+            return false;
+        }
+
+        int userRole = roomMemberList.get(0).getRole();
+        log.info("levelRecorded: roomId={}, role={}", roomId, RoleEnum.getEnumByValue(userRole));
+
+        if (roomMemberDao.countByRid(roomId) == 1) {
+            IMApiResultInfo apiResultInfo = null;
+            try {
+                apiResultInfo = imHelper.dismiss(userId, roomId);
+                if (apiResultInfo.getCode() == 200) {
+                    roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+                    roomDao.deleteByRid(roomId);
+//                    deleteWhiteboardByUser(roomId, userId);
+                    log.info("levelRecorded dismiss the room: {},userId: {}", roomId,userId);
+                } else {
+                    log.error("levelRecorded {} exit {} room error: {}", userId, roomId, apiResultInfo.getErrorMessage());
+                    throw new ApiException(ErrorEnum.ERR_EXIT_ROOM_ERROR, apiResultInfo.getErrorMessage());
+                }
+            } catch (Exception e) {
+                log.error("levelRecorded {} exit {} room error: {}", userId, roomId, e.getMessage());
+                throw new ApiException(ErrorEnum.ERR_EXIT_ROOM_ERROR, e.getMessage());
+            }
+        } else {
+            IMApiResultInfo apiResultInfo = null;
+            try {
+                apiResultInfo = imHelper.quit(new String[]{userId}, roomId);
+                if (apiResultInfo.isSuccess()) {
+                    roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+                    MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, userRole);
+                    msg.setUserName(user.getUsername());
+                    imHelper.publishMessage(userId, roomId, msg);
+                    imHelper.quit(new String[]{userId}, roomId);
+                    log.info("levelRecorded quit group: roomId={},userId: {}", roomId,userId);
+                } else {
+                    throw new ApiException(ErrorEnum.ERR_EXIT_ROOM_ERROR, apiResultInfo.getErrorMessage());
+                }
+            } catch (Exception e) {
+                log.error("levelRecorded leave room error: roomId={}, {}", roomId, e.getMessage());
+                throw new ApiException(ErrorEnum.ERR_EXIT_ROOM_ERROR);
+            }
+        }
+        userDao.deleteByUid(userId);
+//        this.signOut(Long.parseLong(roomId));
+        return true;
+    }
+
     private void deleteWhiteboardByUser(String roomId, String userId) throws Exception {
         List<Whiteboard> whiteboardList = whiteboardDao.findByRidAndCreator(roomId, userId);
         if (!whiteboardList.isEmpty()) {
@@ -497,7 +671,10 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
-    public Boolean kickMember(String roomId) throws ApiException, Exception {
+    public Boolean kickMember(ReqUserData data) throws ApiException, Exception {
+        StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(data.getRegistrationId());
+        String roomId = examResult.getRoomId();
+
         SysUser authUser = sysUserFeignService.queryUserInfo();
         String userId = authUser.getId().toString();
         CheckUtils.checkArgument(userId != null, "userId must't be null");
@@ -514,6 +691,9 @@ public class RoomServiceImpl implements RoomService {
             if (!userInfoList.isEmpty()) {
                 msg.setUserName(userInfoList.get(0).getName());
             }
+            if("recorded".equals(data.getType())){
+                msg.setRoomId("recorded" + roomId);
+            }
             IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, msg, 1);
             if (!apiResultInfo.isSuccess()) {
                 throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR);
@@ -1340,6 +1520,14 @@ public class RoomServiceImpl implements RoomService {
 
     }
 
+    @Override
+    public void publishMessage(PublishMessageDto publishMessageDto) throws Exception {
+        IMApiResultInfo apiResultInfo = imHelper.publishMessage(publishMessageDto.getUserId(),
+                publishMessageDto.getRoomId(),
+                publishMessageDto.getMemberChangedMessage(),
+                publishMessageDto.getIncludeSender());
+    }
+
     /*@Override
     public void sendImPlayMidiMessage(PlayMidiMessageData playMidiMessageData) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 24 - 3
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java

@@ -3,6 +3,9 @@ package com.keao.edu.im.service;
 import java.io.IOException;
 import java.util.List;
 
+import com.keao.edu.im.api.entity.MemberChangedMessage;
+import com.keao.edu.im.api.entity.PublishMessageDto;
+import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.im.common.ApiException;
 import com.keao.edu.im.pojo.*;
 
@@ -11,7 +14,7 @@ import com.keao.edu.im.pojo.*;
  */
 public interface RoomService {
     //everyone
-    public RoomResult joinRoom(String roomId, boolean isAudience, boolean isDisableCamera, boolean isMusicMode) throws ApiException, Exception;
+    public RoomResult joinRoom(Long registrationId, boolean isAudience, boolean isDisableCamera, boolean isMusicMode) throws ApiException, Exception;
 
     void signIn(Long roomId);
 
@@ -21,12 +24,12 @@ public interface RoomService {
 
     void signOut(Long roomId);
 
-    public Boolean leaveRoom(String roomId,String userId) throws ApiException, Exception;
+    public Boolean leaveRoom(Long registrationId,String userId) throws ApiException, Exception;
 
     //only host
     public Boolean downgrade(String roomId, List<ReqChangeUserRoleData.ChangedUser> users) throws ApiException, Exception;
 
-    public Boolean kickMember(String roomId) throws ApiException, Exception;
+    public Boolean kickMember(ReqUserData data) throws ApiException, Exception;
 
 
     //only teacher
@@ -86,4 +89,22 @@ public interface RoomService {
 //    void sendImPlayMidiMessage(PlayMidiMessageData playMidiMessageData);
 
     void onChannelNotify(ChannelStateNotify notify) throws IOException;
+
+    /**
+     * 发送消息
+     * @param publishMessageDto
+     */
+    void publishMessage(PublishMessageDto publishMessageDto) throws Exception;
+
+    /**
+     * 开始录播
+     * @param examRegistrationId
+     */
+    RoomResult joinRecorded(Long examRegistrationId) throws Exception;
+
+    /**
+     * 结束录播
+     * @param examRegistrationId
+     */
+    Boolean levelRecorded(Long examRegistrationId) throws Exception;
 }

+ 21 - 5
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java

@@ -2,9 +2,11 @@ package com.keao.edu.user.api.client;
 
 
 import com.keao.edu.common.config.FeignConfiguration;
+import com.keao.edu.common.entity.SysConfig;
 import com.keao.edu.user.api.client.fallback.EduUserFeignServiceFallback;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -15,6 +17,14 @@ public interface EduUserFeignService {
 
 	/**
 	 * 获取考场信息
+	 * @param paramName
+	 * @return
+	 */
+	@PostMapping(value = "sysConfig/api/get")
+	String getSysConfig(@RequestParam("paramName") String paramName);
+
+	/**
+	 * 获取考场信息
 	 * @param id
 	 * @return
 	 */
@@ -22,6 +32,14 @@ public interface EduUserFeignService {
 	ExamRoom getExamRoom(@RequestParam("id") Integer id);
 
 	/**
+	 * 获取考场信息
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(value = "examResult/api/get")
+	StudentExamResultApiDto getExamResult(@RequestParam("id") Long id);
+
+	/**
 	 * 学生报名
 	 * @param organId
 	 * @param phone
@@ -32,13 +50,11 @@ public interface EduUserFeignService {
 
 	/**
 	 * 获取考场与学生关联
-	 * @param basicId
-	 * @param roomId
-	 * @param studentId
+	 * @param registrationId
 	 * @return
 	 */
-	@PostMapping(value = "examRoomStudentRelation/getExamRoomStudentRelation")
-	ExamRoomStudentRelation getExamRoomStudentRelation(@RequestParam("basicId") Integer basicId, @RequestParam("roomId") String roomId, @RequestParam("studentId") Integer studentId);
+	@PostMapping(value = "examRoomStudentRelation/api/getExamRoomStudentRelation")
+	ExamRoomStudentRelation getExamRoomStudentRelation(@RequestParam("registrationId") Long registrationId);
 
 	@GetMapping("task/queryPaymentStatus")
 	// 订单支付状态查询

+ 12 - 1
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java

@@ -3,23 +3,34 @@ package com.keao.edu.user.api.client.fallback;
 import com.keao.edu.user.api.client.EduUserFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
 import org.springframework.stereotype.Component;
 
 @Component
 public class EduUserFeignServiceFallback implements EduUserFeignService {
 
 	@Override
+	public String getSysConfig(String paramName) {
+		return null;
+	}
+
+	@Override
 	public ExamRoom getExamRoom(Integer id){
 		return null;
 	}
 
 	@Override
+	public StudentExamResultApiDto getExamResult(Long id) {
+		return null;
+	}
+
+	@Override
 	public Object studentApply(Integer organId, String phone) {
 		return null;
 	}
 
 	@Override
-	public ExamRoomStudentRelation getExamRoomStudentRelation(Integer basicId, String roomId, Integer studentId) {
+	public ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId) {
 		return null;
 	}
 

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/ExamEvaluationResultEnum.java → edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/enums/ExamEvaluationResultEnum.java

@@ -1,4 +1,4 @@
-package com.keao.edu.user.enums;
+package com.keao.edu.user.api.enums;
 
 import com.keao.edu.common.enums.BaseEnum;
 

+ 193 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/enums/StudentExamResultApiDto.java

@@ -0,0 +1,193 @@
+package com.keao.edu.user.api.enums;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+public class StudentExamResultApiDto {
+
+	private Long id;
+
+	@ApiModelProperty(value = "学员报考编号")
+	private Long examRegistrationId;
+	
+	@ApiModelProperty(value = "考级项目编号")
+	private Long examinationBasicId;
+
+	@ApiModelProperty(value = "学员编号")
+	private Integer studentId;
+
+	@ApiModelProperty(value = "考试结果")
+	private ExamEvaluationResultEnum result;
+
+	@ApiModelProperty(value = "教师评审均分")
+	private Float avgScore;
+
+	@ApiModelProperty(value = "考试结果确认")
+	private Integer confirmStatus;
+	
+	@ApiModelProperty(value = "备注")
+	private String memo;
+	
+	@ApiModelProperty(value = "操作者")
+	private Integer operatorId;
+
+	@ApiModelProperty(value = "是否参与考试")
+	private Integer isFinishedExam;
+
+	@ApiModelProperty(value = "视频连接")
+	private String videoUrl;
+
+	private java.util.Date createTime;
+
+	private java.util.Date updateTime;
+
+	private String tenantId;
+
+	private String roomId;
+
+	private String recordStartTime;
+
+	private Integer recordFlag;
+
+	public String getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+
+	public String getRecordStartTime() {
+		return recordStartTime;
+	}
+
+	public void setRecordStartTime(String recordStartTime) {
+		this.recordStartTime = recordStartTime;
+	}
+
+	public Integer getRecordFlag() {
+		return recordFlag;
+	}
+
+	public void setRecordFlag(Integer recordFlag) {
+		this.recordFlag = recordFlag;
+	}
+
+	public Long getExamRegistrationId() {
+		return examRegistrationId;
+	}
+
+	public void setExamRegistrationId(Long examRegistrationId) {
+		this.examRegistrationId = examRegistrationId;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+
+	public Integer getConfirmStatus() {
+		return confirmStatus;
+	}
+
+	public void setConfirmStatus(Integer confirmStatus) {
+		this.confirmStatus = confirmStatus;
+	}
+
+	public void setIsFinishedExam(Integer isFinishedExam) {
+		this.isFinishedExam = isFinishedExam;
+	}
+
+	public Long getExaminationBasicId() {
+		return examinationBasicId;
+	}
+
+	public void setExaminationBasicId(Long examinationBasicId) {
+		this.examinationBasicId = examinationBasicId;
+	}
+
+	public void setStudentId(Integer studentId){
+		this.studentId = studentId;
+	}
+	
+	public Integer getStudentId(){
+		return this.studentId;
+	}
+
+	public ExamEvaluationResultEnum getResult() {
+		return result;
+	}
+
+	public void setResult(ExamEvaluationResultEnum result) {
+		this.result = result;
+	}
+
+	public String getVideoUrl() {
+		return videoUrl;
+	}
+
+	public void setVideoUrl(String videoUrl) {
+		this.videoUrl = videoUrl;
+	}
+
+	public void setMemo(String memo){
+		this.memo = memo;
+	}
+	
+	public String getMemo(){
+		return this.memo;
+	}
+			
+	public void setOperatorId(Integer operatorId){
+		this.operatorId = operatorId;
+	}
+	
+	public Integer getOperatorId(){
+		return this.operatorId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+
+	public Float getAvgScore() {
+		return avgScore;
+	}
+
+	public void setAvgScore(Float avgScore) {
+		this.avgScore = avgScore;
+	}
+
+	public void setTenantId(String tenantId){
+		this.tenantId = tenantId;
+	}
+	
+	public String getTenantId(){
+		return this.tenantId;
+	}
+
+	public Integer getIsFinishedExam() {
+		return isFinishedExam;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 17 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

@@ -56,6 +56,20 @@ public class ExamRoomStudentRelationController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("监考端去录播")
+    @PostMapping(value = "/webRecorded")
+    public HttpResponseResult webRecorded(Long nextExamRoomStudentRelationId,Long examRoomStudentRelationId,Integer examStatus,Long roomId) {
+        examRoomStudentRelationService.recorded(nextExamRoomStudentRelationId,examRoomStudentRelationId,examStatus,roomId);
+        return succeed();
+    }
+
+    @ApiOperation("学生端去录播")
+    @PostMapping(value = "/stuRecorded")
+    public HttpResponseResult stuRecorded(Long examRoomStudentRelationId) {
+        examRoomStudentRelationService.stuRecorded(examRoomStudentRelationId);
+        return succeed();
+    }
+
     @ApiOperation("获取后台考场待考队列")
     @PostMapping(value = "/queryNeedCheckingList")
     public HttpResponseResult queryNeedCheckingList(Long roomId) {
@@ -63,9 +77,9 @@ public class ExamRoomStudentRelationController extends BaseController {
     }
 
     @ApiOperation("获取教室学员关联")
-    @PostMapping(value = "/getExamRoomStudentRelation")
-    public ExamRoomStudentRelation getExamRoomStudentRelation(Integer basicId, String roomId, Integer studentId) {
-        return examRoomStudentRelationService.getExamRoomStudentRelation(basicId,roomId,studentId);
+    @PostMapping(value = "api/getExamRoomStudentRelation")
+    public ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId) {
+        return examRoomStudentRelationService.getExamRoomStudentRelation(registrationId);
     }
 
     @ApiOperation("给教室分配学员")

+ 8 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentExamResultController.java

@@ -1,10 +1,12 @@
 package com.keao.edu.user.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.HttpResponseResult;
 import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
 import com.keao.edu.user.dto.StudentExamResultStatisticsDto;
 import com.keao.edu.user.entity.Employee;
 import com.keao.edu.user.entity.StudentExamResult;
@@ -58,6 +60,12 @@ public class StudentExamResultController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("获取考试结果")
+    @PostMapping(value = "/api/get")
+    public StudentExamResultApiDto update(Long id){
+        return studentExamResultService.getStudentExamResultApiDto(id);
+    }
+
     @ApiOperation("考试结果统计信息")
     @GetMapping(value = "/getStudentExamResultStatisticsInfo")
     public HttpResponseResult<StudentExamResultStatisticsDto> getStudentExamResultStatisticsInfo(Integer examId){

+ 6 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/SysConfigController.java

@@ -84,4 +84,10 @@ public class SysConfigController extends BaseController {
 		}
 		return succeed(sysConfigService.findByParamName(paramName));
 	}
+
+	@ApiOperation(value = "查询参数")
+	@PostMapping(value = "api/get")
+	public String apiGet(String paramName) {
+		return sysConfigService.findByParamName(paramName).getParanValue();
+	}
 }

+ 0 - 9
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java

@@ -63,15 +63,6 @@ public interface ExamRoomStudentRelationDao extends BaseDAO<Long, ExamRoomStuden
      * @param studentId
      * @return
      */
-    ExamRoomStudentRelation getExamRoomStudentRelation(@Param("basicId") Integer basicId, @Param("roomId") String roomId, @Param("studentId") Integer studentId);
-
-    /**
-     * 获取教室学员关联
-     * @param basicId
-     * @param roomId
-     * @param studentId
-     * @return
-     */
     List<ExamRoomStudentRelation> getExamRoomStudentRelations(@Param("basicId") Long basicId, @Param("roomId") String roomId, @Param("studentId") Integer studentId);
 
     /**

+ 15 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
 import com.keao.edu.user.dto.StudentExamResultStatisticsDto;
 import com.keao.edu.user.entity.StudentExamResult;
 import org.apache.ibatis.annotations.Param;
@@ -48,4 +49,18 @@ public interface StudentExamResultDao extends BaseDAO<Long, StudentExamResult> {
      * @param examRegistrationId
      */
     void endExam(Long examRegistrationId);
+
+    /**
+     * 获取考试结果
+     * @param examRegistrationId
+     * @return
+     */
+    StudentExamResult findByRegistrationId(Long examRegistrationId);
+
+    /**
+     * 获取考试结果
+     * @param examRegistrationId
+     * @return
+     */
+    StudentExamResultApiDto getStudentExamResultApiDto(Long examRegistrationId);
 }

+ 21 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/StudentExamResult.java

@@ -1,6 +1,6 @@
 package com.keao.edu.user.entity;
 
-import com.keao.edu.user.enums.ExamEvaluationResultEnum;
+import com.keao.edu.user.api.enums.ExamEvaluationResultEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
@@ -53,6 +53,26 @@ public class StudentExamResult {
 
 	private String tenantId;
 
+	private String recordStartTime;
+
+	private Integer recordFlag;
+
+	public String getRecordStartTime() {
+		return recordStartTime;
+	}
+
+	public void setRecordStartTime(String recordStartTime) {
+		this.recordStartTime = recordStartTime;
+	}
+
+	public Integer getRecordFlag() {
+		return recordFlag;
+	}
+
+	public void setRecordFlag(Integer recordFlag) {
+		this.recordFlag = recordFlag;
+	}
+
 	public ExaminationBasic getExaminationBasic() {
 		return examinationBasic;
 	}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/page/StudentExamResultQueryInfo.java

@@ -1,7 +1,7 @@
 package com.keao.edu.user.page;
 
 import com.keao.edu.common.page.QueryInfo;
-import com.keao.edu.user.enums.ExamEvaluationResultEnum;
+import com.keao.edu.user.api.enums.ExamEvaluationResultEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;

+ 17 - 4
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java

@@ -61,12 +61,10 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
 
     /**
      * 获取教室学员关联
-     * @param basicId
-     * @param roomId
-     * @param studentId
+     * @param registrationId
      * @return
      */
-    ExamRoomStudentRelation getExamRoomStudentRelation(Integer basicId, String roomId, Integer studentId);
+    ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId);
 
     /**
      * 下一位
@@ -95,4 +93,19 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      * @param examRegistrationId
      */
     void signIn(Long examRegistrationId);
+
+    /**
+     * 监考端去录播
+     * @param nextExamRoomStudentRelationId
+     * @param examRoomStudentRelationId
+     * @param examStatus
+     * @param roomId
+     */
+    void recorded(Long nextExamRoomStudentRelationId, Long examRoomStudentRelationId, Integer examStatus, Long roomId);
+
+    /**
+     * 学生端去录播
+     * @param examRoomStudentRelationId
+     */
+    void stuRecorded(Long examRoomStudentRelationId);
 }

+ 7 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/StudentExamResultService.java

@@ -2,12 +2,10 @@ package com.keao.edu.user.service;
 
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
 import com.keao.edu.user.dto.StudentExamResultStatisticsDto;
 import com.keao.edu.user.entity.StudentExamResult;
 import com.keao.edu.user.page.StudentExamResultQueryInfo;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 public interface StudentExamResultService extends BaseService<Long, StudentExamResult> {
 
@@ -31,4 +29,10 @@ public interface StudentExamResultService extends BaseService<Long, StudentExamR
 
     StudentExamResultStatisticsDto getStudentExamResultStatisticsInfo(Integer organId, Integer examId);
 
+    /**
+     * 获取考试结果
+     * @param id
+     * @return
+     */
+    StudentExamResultApiDto getStudentExamResultApiDto(Long id);
 }

+ 19 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -14,6 +14,7 @@ import com.keao.edu.common.service.IdGeneratorService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
 import com.keao.edu.im.api.client.ImFeignService;
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
@@ -269,8 +270,24 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	}
 
 	@Override
-	public ExamRoomStudentRelation getExamRoomStudentRelation(Integer basicId, String roomId, Integer studentId) {
-		return examRoomStudentRelationDao.getExamRoomStudentRelation(basicId,roomId,studentId);
+	public ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId) {
+		return examRoomStudentRelationDao.getStudentExamRoom(registrationId);
+	}
+
+	@Override
+	public void recorded(Long nextExamRoomStudentRelationId, Long examRoomStudentRelationId, Integer examStatus, Long roomId) {
+		PublishMessageDto publishMessageDto = new PublishMessageDto();
+//		publishMessageDto.setUserId();
+//		imFeignService.publishMessage();
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void stuRecorded(Long examRegistrationId) {
+		//修改考试状态为录播
+		StudentExamResult studentExamResult = studentExamResultDao.findByRegistrationId(examRegistrationId);
+		studentExamResult.setRecordFlag(1);
+		studentExamResultDao.update(studentExamResult);
 	}
 
 	@Override

+ 13 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/StudentExamResultServiceImpl.java

@@ -1,11 +1,13 @@
 package com.keao.edu.user.service.impl;
 
-import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.api.entity.Student;
+import com.keao.edu.user.api.enums.StudentExamResultApiDto;
+import com.keao.edu.user.dao.ExamRoomStudentRelationDao;
 import com.keao.edu.user.dao.ExaminationBasicDao;
 import com.keao.edu.user.dao.StudentExamResultDao;
 import com.keao.edu.user.dto.ExaminationBasicDto;
@@ -19,7 +21,6 @@ import com.keao.edu.user.page.StudentExamResultQueryInfo;
 import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.user.service.StudentExamResultService;
 import com.keao.edu.util.collection.MapUtil;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +35,8 @@ public class StudentExamResultServiceImpl extends BaseServiceImpl<Long, StudentE
 	@Autowired
 	private StudentExamResultDao studentExamResultDao;
 	@Autowired
+	private ExamRoomStudentRelationDao examRoomStudentRelationDao;
+	@Autowired
 	private OrganizationService organizationService;
 
 	@Override
@@ -114,4 +117,12 @@ public class StudentExamResultServiceImpl extends BaseServiceImpl<Long, StudentE
 		StudentExamResultStatisticsDto studentExamResultStatisticsInfo = studentExamResultDao.getStudentExamResultStatisticsInfo(childOrganIds, examId);
 		return studentExamResultStatisticsInfo;
 	}
+
+	@Override
+	public StudentExamResultApiDto getStudentExamResultApiDto(Long id) {
+		StudentExamResultApiDto resultApiDto = studentExamResultDao.getStudentExamResultApiDto(id);
+		ExamRoomStudentRelation studentExamRoom = examRoomStudentRelationDao.getStudentExamRoom(id);
+		resultApiDto.setRoomId(studentExamRoom.getId().toString());
+		return resultApiDto;
+	}
 }

+ 0 - 5
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -179,11 +179,6 @@
 		</foreach>
 	</select>
 
-	<select id="getExamRoomStudentRelation" resultMap="ExamRoomStudentRelation">
-		SELECT * FROM exam_room_student_relation
-		WHERE examination_basic_id_ = #{basicId} AND exam_room_id_ = #{roomId} AND student_id_ = #{studentId} LIMIT 1
-	</select>
-
 	<select id="getExamRoomStudentRelations" resultMap="ExamRoomStudentRelation">
 		SELECT * FROM exam_room_student_relation
 		WHERE examination_basic_id_ = #{basicId}

+ 33 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -14,6 +14,8 @@
 		<result column="result_" property="result" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler" />
 		<result column="avg_score_" property="avgScore"/>
 		<result column="confirm_status_" property="confirmStatus" />
+		<result column="record_start_time_" property="recordStartTime" />
+		<result column="record_flag_" property="recordFlag" />
 		<result column="is_finished_exam_" property="isFinishedExam" />
 		<result column="memo_" property="memo" />
 		<result column="video_url_" property="videoUrl" />
@@ -56,6 +58,12 @@
 	<update id="update" parameterType="com.keao.edu.user.entity.StudentExamResult">
 		UPDATE student_exam_result
 		<set>
+			<if test="recordStartTime != null">
+				record_start_time_ = #{recordStartTime},
+			</if>
+			<if test="recordFlag != null">
+				record_flag_ = #{recordFlag},
+			</if>
 			<if test="examRegistrationId != null">
 				exam_registration_id_ = #{examRegistrationId},
 			</if>
@@ -227,4 +235,29 @@
 		</foreach>
 		GROUP BY ser.student_id_
 	</select>
+    <select id="findByRegistrationId" resultMap="StudentExamResult">
+		SELECT * FROM student_exam_result WHERE exam_registration_id_ = #{examRegistrationId} LIMIT 1
+	</select>
+
+	<resultMap type="com.keao.edu.user.api.enums.StudentExamResultApiDto" id="StudentExamResultApiDto">
+		<result column="id_" property="id" />
+		<result column="exam_registration_id_" property="examRegistrationId" />
+		<result column="examination_basic_id_" property="examinationBasicId" />
+		<result column="student_id_" property="studentId" />
+		<result column="result_" property="result" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler" />
+		<result column="avg_score_" property="avgScore"/>
+		<result column="confirm_status_" property="confirmStatus" />
+		<result column="record_start_time_" property="recordStartTime" />
+		<result column="record_flag_" property="recordFlag" />
+		<result column="is_finished_exam_" property="isFinishedExam" />
+		<result column="memo_" property="memo" />
+		<result column="video_url_" property="videoUrl" />
+		<result column="operator_id_" property="operatorId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="tenant_id_" property="tenantId" />
+	</resultMap>
+	<select id="getStudentExamResultApiDto" resultMap="StudentExamResultApiDto">
+		SELECT * FROM student_exam_result WHERE exam_registration_id_ = #{examRegistrationId} LIMIT 1
+	</select>
 </mapper>