Browse Source

网络教室链接超时,和死锁问题

zouxuan 3 years ago
parent
commit
3deb29e28c

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -266,4 +266,9 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
      * @return java.lang.Long
      */
 	Long findFirstSign(@Param("currentScheduleId") Long currentScheduleId, @Param("userId") Integer userId);
+
+	void updateDeviceNum(@Param("courseId") Integer courseId,
+						 @Param("userId") String userId,
+						 @Param("signInDeviceNum") String signInDeviceNum,
+						 @Param("signOutDeviceNum") String signOutDeviceNum);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -185,4 +185,13 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @param teacherAttendanceId
 	 */
 	void rejectTeacherAttendanceComplaints(long teacherAttendanceId,String content);
+
+	/**
+	 * 更新签退设备号
+	 * @param courseId
+	 * @param userId
+	 * @param signInDeviceNum
+	 * @param signOutDeviceNum
+	 */
+	void updateDeviceNum(Integer courseId, String userId,String signInDeviceNum, String signOutDeviceNum);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -912,4 +912,10 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("操作失败: 当前申述状态不允许该操作");
 		}
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateDeviceNum(Integer courseId, String userId, String signInDeviceNum, String signOutDeviceNum) {
+		teacherAttendanceDao.updateDeviceNum(courseId,userId,signInDeviceNum,signOutDeviceNum);
+	}
 }

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -684,6 +684,18 @@
                 ,sign_in_longitude_latitude_ = NULL,sign_out_longitude_latitude_ = NULL
         WHERE course_schedule_id_ = #{courseScheduleId}
     </update>
+    <update id="updateDeviceNum">
+        UPDATE teacher_attendance
+        <set>
+            <if test="signInDeviceNum != null and signInDeviceNum != ''">
+                sign_in_device_no_ = #{signInDeviceNum}
+            </if>
+            <if test="signOutDeviceNum != null and signOutDeviceNum != ''">
+                sign_out_device_no_ = #{signOutDeviceNum}
+            </if>
+        </set>
+        WHERE course_schedule_id_ = #{courseId} AND teacher_id_ = #{userId}
+    </update>
 
     <delete id="deleteByMusicGroupId" parameterType="map" >
 		DELETE ta FROM teacher_attendance ta LEFT JOIN course_schedule cs ON ta.course_schedule_id_ = cs.id_

+ 2 - 0
mec-im/src/main/java/com/ym/mec/im/IMHelper.java

@@ -6,6 +6,7 @@ import com.ym.pojo.IMApiResultInfo;
 import com.ym.pojo.IMTokenInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import java.net.HttpURLConnection;
@@ -111,6 +112,7 @@ public class IMHelper {
      * @param groupName:要加入的群 Id 对应的名称。(必传)
      * @return CodeSuccessResult
      **/
+    @Async
     public IMApiResultInfo joinGroup(String[] userId, String groupId, String groupName)
             throws Exception {
         if (userId == null) {

+ 5 - 3
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -315,7 +315,8 @@ public class RoomServiceImpl implements RoomService {
         if(!aBoolean){
             RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
             if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
-                signInSuccess(roomMember,deviceNum);
+                teacherAttendanceService.updateDeviceNum(Integer.parseInt(roomId.substring(1)),userId,deviceNum,null);
+//                signInSuccess(roomMember,deviceNum);
             }
             return;
         }
@@ -433,7 +434,7 @@ public class RoomServiceImpl implements RoomService {
         return roomMember;
     }
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.SERIALIZABLE)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
     @Override
     public void leaveRoomSuccess(String roomId,String userId,String deviceNum) throws Exception {
         log.info("leaveRoomSuccess: roomId={}, userId={},deviceNum={}", roomId,userId,deviceNum);
@@ -456,7 +457,8 @@ public class RoomServiceImpl implements RoomService {
             if (StringUtils.isNotEmpty(deviceNum)){
                 //如果设备号不为空,更新设备号
                 if(roleEnum == RoleTeacher){
-                    teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),parseInt,deviceNum);
+                    teacherAttendanceService.updateDeviceNum(firstCourseId,userId,null,deviceNum);
+//                    teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),parseInt,deviceNum);
                 }
             }
             return;