Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 years ago
parent
commit
23823a78d1

+ 24 - 5
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/IMHelper.java

@@ -19,7 +19,6 @@ import org.springframework.stereotype.Component;
 import java.net.HttpURLConnection;
 import java.net.URLEncoder;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * Created by weiqinxiao on 2019/2/28.
@@ -237,8 +236,7 @@ public class IMHelper {
      * @return
      * @throws Exception
      */
-    @Async
-    public IMApiResultInfo startRecord(String roomId, Long registrationId, List<RoomMember> roomMembers) throws Exception {
+    public void startRecord(String roomId, Long registrationId, List<RoomMember> roomMembers) throws Exception {
         if (roomId == null) {
             throw new IllegalArgumentException("Paramer 'roomId' is required");
         }
@@ -269,16 +267,37 @@ public class IMHelper {
         config.put("input",getInput(roomMembers));
         paramJson.put("config",config);
         String body = paramJson.toJSONString();
+        againRecord(body,registrationId,roomId);
+    }
 
+    @Async
+    public void againRecord(String body,Long registrationId,String roomId) throws Exception {
         HttpURLConnection conn = httpHelper.createIMRtcPostHttpConnection("/rtc/record/start.json", "application/json",roomId);
         httpHelper.setBodyParameter(body, conn);
         IMApiResultInfo resultInfo = JSON.parseObject(httpHelper.returnResult(conn, body), IMApiResultInfo.class);
         if(resultInfo.getResultCode() == 10000){
             redisTemplate.opsForValue().set(resultInfo.getRecordId(),registrationId.toString());
         }else {
-            log.error("直播视频录制失败:body : {},resultInfo : {}",body,resultInfo);
+            log.error("直播视频录制失败:body : {},resultInfo : {} 准备重试",body,resultInfo);
+            int i = 1;
+            while (i<=3){
+                Thread.sleep(5000l);
+                HttpURLConnection connection = httpHelper.createIMRtcPostHttpConnection("/rtc/record/start.json", "application/json", roomId);
+                httpHelper.setBodyParameter(body, connection);
+                IMApiResultInfo imApiResultInfo = JSON.parseObject(httpHelper.returnResult(connection, body), IMApiResultInfo.class);
+                log.error("直播视频录制失败:resultInfo : {} 第{}次重试",imApiResultInfo,i);
+                i++;
+                if(imApiResultInfo.getResultCode() == 10000){
+                    redisTemplate.opsForValue().set(imApiResultInfo.getRecordId(),registrationId.toString());
+                    log.info("直播视频录制成功:第{}次重试",i);
+                    return;
+                }
+                if(i > 3){
+                    log.error("直播视频录制失败:resultInfo : {} 重试结束",imApiResultInfo);
+                    return;
+                }
+            }
         }
-        return resultInfo;
     }
 
     /**

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

@@ -75,7 +75,7 @@ public class RoomServiceImpl implements RoomService {
         return baseResponse;
     }
 
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     public void joinRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
         StudentExamResultApiDto examResult = null;
         log.info("joinRoomSuccess: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId);
@@ -89,6 +89,9 @@ public class RoomServiceImpl implements RoomService {
             if(byRidAndRole != null && byRidAndRole.size() > 0){
                 log.info("学员加入时,将其他学员退出房间 byRidAndRole{}",byRidAndRole);
                 for (RoomMember e: byRidAndRole) {
+                    if(e.getUid().equals(userId)){
+                        continue;
+                    }
                     roomMemberDao.deleteUserByRidAndUid(roomId, e.getUid());
                     MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, 3);
                     msg.setUserName(e.getName());
@@ -164,6 +167,7 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     public BaseResponse joinRoom(Long registrationId, String roomId){
         StudentExamResultApiDto examResult = null;
         log.info("joinRoom: roomId={}, registrationId={}", roomId,registrationId);
@@ -280,7 +284,7 @@ public class RoomServiceImpl implements RoomService {
         roomMemberDao.save(roomMember);
     }
 
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     public void leaveRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
         if(registrationId != null){
             StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);

+ 1 - 1
edu-user/edu-teacher-server/src/main/java/com/keao/edu/controller/ExamReviewController.java

@@ -38,7 +38,7 @@ public class ExamReviewController extends BaseController {
     @ApiOperation("修改评审结果")
     @PostMapping(value = "/update")
     public HttpResponseResult update(ExamReview examReview){
-        examReviewService.update(examReview);
+        examReviewService.updateReview(examReview);
         return succeed();
     }
 

+ 1 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamReviewDao.java

@@ -38,7 +38,7 @@ public interface ExamReviewDao extends BaseDAO<Long, ExamReview> {
      */
     List<ExamReviewRecordDto> queryExamReviewRecordList(Map<String, Object> params);
 
-    ExamReview findByRegistrationId(@Param("examRegistrationId") Long examRegistrationId, @Param("teacherId") Integer teacherId);
+    ExamReviewRecordDto findByRegistrationId(@Param("examRegistrationId") Long examRegistrationId, @Param("teacherId") Integer teacherId);
 
     /**
      * @describe 获取考场中学员的评审记录

+ 7 - 8
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamReviewRecordDto.java

@@ -1,6 +1,5 @@
 package com.keao.edu.user.dto;
 
-import com.keao.edu.user.enums.ExamStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 public class ExamReviewRecordDto {
@@ -8,15 +7,15 @@ public class ExamReviewRecordDto {
     @ApiModelProperty(value = "学员报名编号")
     private Long examRegistrationId;
 
-    @ApiModelProperty(value = "项目状态")
-    private ExamStatusEnum examBasicStatus;
-
     @ApiModelProperty(value = "学员名称")
     private String realName;
 
     @ApiModelProperty(value = "学员编号")
     private Integer studentId;
 
+    @ApiModelProperty(value = "是否开启考场")
+    private Integer openFlag;
+
     @ApiModelProperty(value = "是否录制")
     private Integer recordFlag;
 
@@ -41,12 +40,12 @@ public class ExamReviewRecordDto {
     @ApiModelProperty(value = "评审编号")
     private Integer examReviewId;
 
-    public ExamStatusEnum getExamBasicStatus() {
-        return examBasicStatus;
+    public Integer getOpenFlag() {
+        return openFlag;
     }
 
-    public void setExamBasicStatus(ExamStatusEnum examBasicStatus) {
-        this.examBasicStatus = examBasicStatus;
+    public void setOpenFlag(Integer openFlag) {
+        this.openFlag = openFlag;
     }
 
     public Long getExamRegistrationId() {

+ 11 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/ExamReviewService.java

@@ -32,4 +32,15 @@ public interface ExamReviewService extends BaseService<Long, ExamReview> {
      * @param examReview
      */
     void add(ExamReview examReview);
+
+    /**
+     * @describe 修改评审
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/8/21
+     * @time 9:25
+     * @param examReview:
+     * @return void
+     */
+    void updateReview(ExamReview examReview);
 }

+ 18 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamReviewServiceImpl.java

@@ -119,7 +119,7 @@ public class ExamReviewServiceImpl extends BaseServiceImpl<Long, ExamReview> imp
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		sysUserDao.lockUser(sysUser.getId());
 		Long examRegistrationId = examReview.getExamRegistrationId();
-		ExamReview byRegistrationId = examReviewDao.findByRegistrationId(examRegistrationId,sysUser.getId());
+		ExamReviewRecordDto byRegistrationId = examReviewDao.findByRegistrationId(examRegistrationId,sysUser.getId());
 		if(byRegistrationId != null){
 			throw new BizException("评审失败:请勿重复操作");
 		}
@@ -128,6 +128,9 @@ public class ExamReviewServiceImpl extends BaseServiceImpl<Long, ExamReview> imp
 			throw new BizException("评审失败:学员未考试");
 		}
 		ExamRoom examRoom = examRoomDao.get(examRoomStudentRelation.getExamRoomId());
+		if(examRoom.getOpenFlag() == 0){
+			throw new BizException("评审失败:考场已关闭");
+		}
 		if(examRoom.getMainTeacherUserId().equals(sysUser.getId())){
 			examReview.setTeacherType(ExamRoomTeaherTypeEnum.MAIN);
 		}else {
@@ -148,6 +151,20 @@ public class ExamReviewServiceImpl extends BaseServiceImpl<Long, ExamReview> imp
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	public void updateReview(ExamReview examReview) {
+		ExamReview review = examReviewDao.get(examReview.getId());
+		if(Objects.isNull(review)){
+			throw new BizException("修改失败:评审记录不存在");
+		}
+		ExamRoom examRoom = examRoomDao.get(review.getExamRoomId());
+		if(examRoom.getOpenFlag() == 0){
+			throw new BizException("评审失败:考场已关闭");
+		}
+		examReviewDao.update(examReview);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public int update(ExamReview examReview) {
 		if(Objects.isNull(examReview.getId())){
 			throw new BizException("考试结果不存在");

+ 1 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -899,6 +899,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 
 		for (ExamRoom examRoom : examRooms) {
 			examRoom.setOpenFlag(0);
+			examRoom.setExamFlag(0);
 			imFeignService.destroyRoom(examRoom.getId(),examRoom.getMainTeacherUserId().toString());
 			studentExamResultService.calculateStudentExamAvgScore(examRoom.getId());
 		}

+ 1 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -503,7 +503,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			if(roomStudentListDtos.size() > 1){
 				RoomStudentListDto roomStudentListDto1 = roomStudentListDtos.get(1);
 				if(roomStudentListDto1.getFinishedExam() == 2){
-					nextStudent(roomStudentListDto1.getExamRoomStudentRelationId(),false,sysUser.getId());
+					nextStudent(roomStudentListDto1.getExamRoomStudentRelationId(),true,sysUser.getId());
 				}
 			}
 			//当等待人数到指定数值时,推送准备考试消息

+ 3 - 3
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamReviewMapper.xml

@@ -204,7 +204,7 @@
 		<result property="finishedExam" column="is_finished_exam_"/>
 		<result property="videoUrl" column="video_url_"/>
 		<result property="examRegistrationId" column="exam_registration_id_"/>
-		<result property="examBasicStatus" column="status_" typeHandler="com.keao.edu.common.dal.CustomEnumTypeHandler"/>
+		<result property="openFlag" column="open_flag_"/>
 	</resultMap>
 	<sql id="queryExamReviewRecordListSql">
 		<where>
@@ -225,9 +225,9 @@
 
 	<select id="queryExamReviewRecordList" resultMap="ExamReviewRecordDtoMap">
 		SELECT ser.is_finished_exam_,ser.record_flag_,ser.confirm_status_,er.evaluation_content_,
-		er.evaluation_result_,ersr.exam_registration_id_,er.id_,ersr.student_id_,ser.video_url_,eb.status_
+		er.evaluation_result_,ersr.exam_registration_id_,er.id_,ersr.student_id_,ser.video_url_,erm.open_flag_
 		FROM exam_room_student_relation ersr
-		LEFT JOIN examination_basic eb ON eb.id_ = ersr.examination_basic_id_
+		LEFT JOIN exam_room erm ON erm.id_ = ersr.exam_room_id_
 		LEFT JOIN student_exam_result ser ON ser.exam_registration_id_ = ersr.exam_registration_id_
 		LEFT JOIN exam_review er ON ser.exam_registration_id_ = er.exam_registration_id_ AND er.teacher_id_ = #{teacherId}
 		<include refid="queryExamReviewRecordListSql"/>