Bläddra i källkod

fix网络教室死锁

Eric 1 år sedan
förälder
incheckning
dfdc6b890c

+ 8 - 10
mec-im/src/main/java/com/ym/dao/RoomMemberDao.java

@@ -2,12 +2,10 @@ package com.ym.dao;
 
 import com.ym.pojo.RoomMember;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
-import javax.persistence.LockModeType;
 import java.util.List;
 
 /**
@@ -60,21 +58,21 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
     boolean existsByRidAndUid(String rid, String uid);
 
     @Modifying
-    @Query(value = "update rongyun_room_member set camera=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateCameraByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set camera=?2 where id IN (?1)", nativeQuery = true)
+    void updateCameraByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set mic=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateMicByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set mic=?2 where id IN (?1)", nativeQuery = true)
+    void updateMicByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateMusicByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set music_mode=?2 where id IN (?1)", nativeQuery = true)
+    void updateMusicByRidAndRole(List<Long> memberIds, boolean enable);
 
 
     @Modifying
-    @Query(value = "update rongyun_room_member set hand=?3 where rid=?1 and role=?2", nativeQuery = true)
-    void updateHandByRidAndRole(String roomId, int role, boolean enable);
+    @Query(value = "update rongyun_room_member set hand=?2 where id IN (?1)", nativeQuery = true)
+    void updateHandByRidAndRole(List<Long> memberIds,  boolean enable);
 }

+ 1 - 1
mec-im/src/main/java/com/ym/pojo/RoomMember.java

@@ -14,7 +14,7 @@ import java.util.Date;
 public class RoomMember {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private long id;
+    private @Getter @Setter long id;
 
     private @Getter @Setter String uid;
     private @Getter @Setter String rid;

+ 23 - 15
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -1909,21 +1909,29 @@ public class RoomServiceImpl implements RoomService {
             data.setUserId(e.getUid());
             controlDevice(data);
         }
-        boolean enable;
-        if (data.getCameraOn() != null) {
-            enable = data.getCameraOn();
-            roomMemberDao.updateCameraByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getMicrophoneOn() != null) {
-            enable = data.getMicrophoneOn();
-            roomMemberDao.updateMicByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getMusicModeOn() != null) {
-            enable = data.getMusicModeOn();
-            roomMemberDao.updateMusicByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        } else if (data.getHandUpOn() != null) {
-            enable = data.getHandUpOn();
-            roomMemberDao.updateHandByRidAndRole(data.getRoomId(), RoleStudent.getValue(), enable);
-        }  else
-            return true;
+
+        // 批量修复学生端设备状态
+        List<Long> collect = roomMemberDao.findByRidAndRole(data.getRoomId(), RoleStudent.getValue()).stream()
+                .map(RoomMember::getId).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(collect)) {
+
+            boolean enable;
+            if (data.getCameraOn() != null) {
+                enable = data.getCameraOn();
+                roomMemberDao.updateCameraByRidAndRole(collect, enable);
+            } else if (data.getMicrophoneOn() != null) {
+                enable = data.getMicrophoneOn();
+                roomMemberDao.updateMicByRidAndRole(collect, enable);
+            } else if (data.getMusicModeOn() != null) {
+                enable = data.getMusicModeOn();
+                roomMemberDao.updateMusicByRidAndRole(collect, enable);
+            } else if (data.getHandUpOn() != null) {
+                enable = data.getHandUpOn();
+                roomMemberDao.updateHandByRidAndRole(collect, enable);
+            }  else {
+                return true;
+            }
+        }
 
         return true;
     }