Bladeren bron

Merge remote-tracking branch 'origin/master'

Joburgess 5 jaren geleden
bovenliggende
commit
d95efe95f9

+ 4 - 4
edu-im/edu-im-server/src/main/java/com/keao/edu/im/dao/UserDao.java

@@ -2,11 +2,12 @@ package com.keao.edu.im.dao;
 
 import com.keao.edu.im.pojo.UserInfo;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import javax.persistence.LockModeType;
 
 /**
  * Created by weiqinxiao on 2019/2/25.
@@ -14,9 +15,8 @@ import java.util.List;
 @Repository
 public interface UserDao extends JpaRepository<UserInfo, Long> {
     //will query with "select * from TABLE where user_id = 'userId'"
-    public List<UserInfo> findByUid(String uid);
-
-    public List<UserInfo> findByName(String name);
+    @Lock(value = LockModeType.PESSIMISTIC_WRITE)
+    UserInfo findByUid(String uid);
 
     @Transactional
     @Modifying

+ 23 - 8
edu-im/edu-im-server/src/main/java/com/keao/edu/im/mec/im/IMHelper.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 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.dao.RoomMemberDao;
 import com.keao.edu.im.http.HttpHelper;
 import com.keao.edu.im.pojo.IMApiResultInfo;
 import com.keao.edu.im.pojo.IMTokenInfo;
@@ -30,6 +31,8 @@ public class IMHelper {
 
     @Autowired
     HttpHelper httpHelper;
+    @Autowired
+    RoomMemberDao roomMemberDao;
 
     @Autowired
     private RedisTemplate<String,String> redisTemplate;
@@ -240,9 +243,7 @@ public class IMHelper {
         if (roomId == null) {
             throw new IllegalArgumentException("Paramer 'roomId' is required");
         }
-        if (roomMembers == null || roomMembers.size() == 0) {
-            throw new IllegalArgumentException("Paramer 'roomMembers' is can not be null");
-        }
+
         JSONObject paramJson = new JSONObject();
 
         String sessionId = redisTemplate.opsForValue().get("sessionId:" + roomId);
@@ -264,14 +265,20 @@ public class IMHelper {
         config.put("hostUserId","");
         config.put("hostStreamId","");
 
-        config.put("input",getInput(roomMembers));
-        paramJson.put("config",config);
-        String body = paramJson.toJSONString();
-        againRecord(body,registrationId,roomId);
+//        config.put("input",getInput(roomMembers));
+//        paramJson.put("config",config);
+        againRecord(paramJson,registrationId,roomId,config);
     }
 
     @Async
-    public void againRecord(String body,Long registrationId,String roomId) throws Exception {
+    public void againRecord(JSONObject paramJson,Long registrationId,String roomId,JSONObject config) throws Exception {
+        List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
+        if (roomMembers == null || roomMembers.size() == 0) {
+            throw new IllegalArgumentException("Paramer 'roomMembers' is can not be null");
+        }
+        config.put("input",getInput(roomMembers));
+        paramJson.put("config",config);
+        String body = paramJson.toJSONString();
         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);
@@ -282,6 +289,13 @@ public class IMHelper {
             int i = 1;
             while (i<=3){
                 Thread.sleep(5000l);
+                List<RoomMember> members = roomMemberDao.findByRid(roomId);
+                if (members == null || members.size() == 0) {
+                    throw new IllegalArgumentException("Paramer 'roomMembers' is can not be null");
+                }
+                config.put("input",getInput(members));
+                paramJson.put("config",config);
+                body = paramJson.toJSONString();
                 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);
@@ -338,6 +352,7 @@ public class IMHelper {
     }
 
     private JSONObject getInput(List<RoomMember> roomMembers){
+
         JSONArray videos = new JSONArray();
         boolean isMaster = true;
 

+ 25 - 26
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -138,18 +138,17 @@ public class RoomServiceImpl implements RoomService {
         msg.setCamera(true);
         imHelper.publishMessage(userId, roomId, msg);
 
-        List<UserInfo> userInfoList = userDao.findByUid(userId);
-        if (userInfoList.isEmpty()) {
-            UserInfo userInfo = new UserInfo();
+        UserInfo userInfo = userDao.findByUid(userId);
+        if (userInfo == null) {
+            userInfo = new UserInfo();
             userInfo.setUid(userId);
             userInfo.setName(realName);
             userInfo.setCreateDt(curTime);
             userInfo.setUpdateDt(curTime);
             userDao.save(userInfo);
         } else {
-            UserInfo user = userInfoList.get(0);
-            user.setUpdateDt(curTime);
-            userDao.save(user);
+            userInfo.setUpdateDt(curTime);
+            userDao.save(userInfo);
         }
         List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
         log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, roleEnum);
@@ -450,9 +449,9 @@ public class RoomServiceImpl implements RoomService {
         if(roomMembers != null && roomMembers.size() > 0){
             roomMembers.forEach(e->{
                 MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Kick, e.getUid(), e.getRole());
-                List<UserInfo> userInfoList = userDao.findByUid(e.getUid());
-                if (!userInfoList.isEmpty()) {
-                    msg.setUserName(userInfoList.get(0).getName());
+                UserInfo userInfo = userDao.findByUid(e.getUid());
+                if (userInfo != null) {
+                    msg.setUserName(userInfo.getName());
                 }
                 try {
                     imHelper.publishMessage(userId, e.getRid(), msg, 1);
@@ -496,9 +495,9 @@ public class RoomServiceImpl implements RoomService {
             throw new ApiException(ErrorEnum.ERR_USER_NOT_EXIST_IN_ROOM);
         } else {
             MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Kick, data.getUserId(), roomMember.getRole());
-            List<UserInfo> userInfoList = userDao.findByUid(data.getUserId());
-            if (!userInfoList.isEmpty()) {
-                msg.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(data.getUserId());
+            if (userInfo != null) {
+                msg.setUserName(userInfo.getName());
             }/*
             if("recorded".equals(data.getType())){
                 msg.setRoomId("recorded" + roomId);
@@ -739,9 +738,9 @@ public class RoomServiceImpl implements RoomService {
             }
             DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), false);
             deviceResourceMessage.setUserId(userId);
-            List<UserInfo> userInfoList = userDao.findByUid(userId);
-            if (!userInfoList.isEmpty()) {
-                deviceResourceMessage.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(userId);
+            if (userInfo != null) {
+                deviceResourceMessage.setUserName(userInfo.getName());
             }
             imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
         }
@@ -914,12 +913,12 @@ public class RoomServiceImpl implements RoomService {
         roomMemberDao.updateRoleByRidAndUid(roomId, taskInfo.getApplyUserId(), Student.getValue());
 
         SpeechResultMessage msg = new SpeechResultMessage(SpeechResultMessage.Action_Approve);
-        List<UserInfo> userInfoList = userDao.findByUid(taskInfo.getApplyUserId());
+        UserInfo userInfo = userDao.findByUid(taskInfo.getApplyUserId());
         msg.setOpUserId(userId);
         msg.setOpUserName(authUser.getRealName());
         msg.setReqUserId(taskInfo.getApplyUserId());
-        if (!userInfoList.isEmpty()) {
-            msg.setReqUserName(userInfoList.get(0).getName());
+        if (userInfo != null) {
+            msg.setReqUserName(userInfo.getName());
         }
         msg.setRole(Student.getValue());
         IMApiResultInfo resultInfo = imHelper.publishMessage(userId, taskInfo.getApplyUserId(), roomId, msg);
@@ -930,8 +929,8 @@ public class RoomServiceImpl implements RoomService {
         RoleChangedMessage rcMsg = new RoleChangedMessage(userId);
         List<RoleChangedMessage.ChangedUser> changedUserList = new ArrayList<>();
         RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(taskInfo.getApplyUserId(), Student.getValue());
-        if (!userInfoList.isEmpty()) {
-            user.setUserName(userInfoList.get(0).getName());
+        if (userInfo != null) {
+            msg.setReqUserName(userInfo.getName());
         }
         changedUserList.add(user);
         rcMsg.setUsers(changedUserList);
@@ -1142,9 +1141,9 @@ public class RoomServiceImpl implements RoomService {
         if (!teachers.isEmpty()) {
             roomMemberDao.updateRoleByRidAndUid(roomId, teachers.get(0).getUid(), Student.getValue());
             RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(teachers.get(0).getUid(), Student.getValue());
-            List<UserInfo> userInfoList = userDao.findByUid(teachers.get(0).getUid());
-            if (!userInfoList.isEmpty()) {
-                user.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(teachers.get(0).getUid());
+            if (userInfo != null) {
+                user.setUserName(userInfo.getName());
             }
             changedUserList.add(user);
         } else {
@@ -1153,9 +1152,9 @@ public class RoomServiceImpl implements RoomService {
 
         roomMemberDao.updateRoleByRidAndUid(roomId, targetUserId, targetRole);
         RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(targetUserId, targetRole);
-        List<UserInfo> userInfoList = userDao.findByUid(targetUserId);
-        if (!userInfoList.isEmpty()) {
-            user.setUserName(userInfoList.get(0).getName());
+        UserInfo userInfo = userDao.findByUid(targetUserId);
+        if (userInfo != null) {
+            user.setUserName(userInfo.getName());
         }
         changedUserList.add(user);
         msg.setUsers(changedUserList);

+ 11 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamCertificationDto.java

@@ -46,6 +46,17 @@ public class ExamCertificationDto{
     @ApiModelProperty(value = "考试内容")
     private String songJson;
 
+    @ApiModelProperty(value = "呼叫时长")
+    private Integer callTime;
+
+    public Integer getCallTime() {
+        return callTime;
+    }
+
+    public void setCallTime(Integer callTime) {
+        this.callTime = callTime;
+    }
+
     public String getBaseExamName() {
         return baseExamName;
     }

+ 8 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamCertificationServiceImpl.java

@@ -5,6 +5,7 @@ import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 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.dao.*;
 import com.keao.edu.user.dto.BasicNeedCheckingDetailDto;
@@ -122,6 +123,13 @@ public class ExamCertificationServiceImpl extends BaseServiceImpl<Long, ExamCert
 		examCertificationDto.setCertificatePhoto(student.getCertificatePhoto());
 		StudentExamResult studentExamResult = studentExamResultDao.findByRegistrationId(examRegistrationId);
 		examCertificationDto.setConfirmStatus(studentExamResult.getConfirmStatus());
+		if(studentExamResult.getIsFinishedExam() == 1){
+			ExamRoomStudentRelation studentExamRoom = examRoomStudentRelationDao.getStudentExamRoom(examRegistrationId);
+			if(studentExamRoom.getCallTime() != null){
+				examCertificationDto.setCallTime(DateUtil.secondsBetween(studentExamRoom.getCallTime(),new Date()));
+				DateUtil.secondsBetween(studentExamRoom.getCallTime(),new Date());
+			}
+		}
 		return examCertificationDto;
 	}
 

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

@@ -61,8 +61,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	@Autowired
 	private ExamRegistrationDao examRegistrationDao;
 	@Autowired
-	private ExamTeacherSalaryService examTeacherSalaryService;
-	@Autowired
 	private ImFeignService imFeignService;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
@@ -705,6 +703,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		ExamRoomStudentRelation examRoomStudentRelation = examRoomStudentRelationDao.get(nextExamRoomStudentRelationId);
 		//开启学员房间入口
 		examRoomStudentRelation.setClassroomSwitch(1);
+		examRoomStudentRelation.setCallTime(new Date());
 		examRoomStudentRelationDao.update(examRoomStudentRelation);
 		HashMap<Integer, String> map = new HashMap<>(1);
 		map.put(examRoomStudentRelation.getStudentId(),examRoomStudentRelation.getStudentId().toString());

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

@@ -231,7 +231,7 @@
 		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"/>
-		ORDER BY ser.is_finished_exam_ ASC
+		ORDER BY ser.is_finished_exam_ ASC,ersr.sign_in_time_ desc
 		<include refid="global.limit"/>
 	</select>
 

+ 4 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -16,6 +16,7 @@
 		<result column="sign_in_time_" property="signInTime" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
+		<result column="call_time_" property="callTime" />
 		<result column="tenant_id_" property="tenantId" />
 	</resultMap>
 
@@ -78,6 +79,9 @@
 			<if test="studentId != null">
 				student_id_ = #{studentId},
 			</if>
+			<if test="callTime != null">
+				call_time_ = #{callTime},
+			</if>
 				update_time_ = NOW()
 		</set> WHERE id_ = #{id}
 	</update>

+ 11 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/ExamRoomStudentRelation.java

@@ -31,11 +31,22 @@ public class ExamRoomStudentRelation extends  ExamRoom{
 
 	private java.util.Date updateTime;
 
+	@ApiModelProperty(value = "呼叫时间")
+	private java.util.Date callTime;
+
 	private String tenantId;
 
 	@ApiModelProperty(value = "房间是否开启")
 	private Integer classroomSwitch;
 
+	public Date getCallTime() {
+		return callTime;
+	}
+
+	public void setCallTime(Date callTime) {
+		this.callTime = callTime;
+	}
+
 	public Date getSignInTime() {
 		return signInTime;
 	}