shangke 2 năm trước cách đây
mục cha
commit
b5ded90025

+ 25 - 4
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -60,6 +60,8 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -781,6 +783,9 @@ public class RoomServiceImpl implements RoomService {
             return;
         }
 
+        // 异步删除用户,让当前事务失效
+        asyncDeleteRoomMember(roomId, userId);
+
         String username;
         SysUser sysUser = sysUserFeignService.queryUserById(parseInt);
         if (roleEnum == RoleTeacher) {
@@ -805,11 +810,11 @@ public class RoomServiceImpl implements RoomService {
             updateDisplay(roomId, userId, "", 0);
         }
 
-        // 删除群组用户信息
-        roomMemberDao.deleteUserByRidAndUid(roomId, userId);
-
         int roomMembers = roomMemberDao.countByRid(roomId);
         if (roomMembers <= 0) {
+            // 删除群组用户信息
+            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+
             // 删除群组信息
             roomDao.deleteByRid(roomId);
             // 删除白板信息
@@ -821,7 +826,7 @@ public class RoomServiceImpl implements RoomService {
             log.info("leaveRoomSuccess dismiss the room: {}, userId: {}, role={}", roomId, userId, roleEnum.name());
 
         } else {
-            //roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
 
             // 获取RTC服务提供方
             String rtcServiceProvider = Optional.ofNullable(courseSchedule.getServiceProvider()).orElse("rongCloud");
@@ -863,6 +868,22 @@ public class RoomServiceImpl implements RoomService {
     }
 
     /**
+     * 异步删除房间用户
+     * @param roomId 房间编号
+     * @param userId 用户编号
+     */
+    private void asyncDeleteRoomMember(String roomId, String userId) {
+        Executors.newCachedThreadPool().execute(() -> {
+            try {
+                // 删除房间用户信息
+                roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+            } catch (Exception e) {
+                log.info("leaveRoomSuccess: roomId={}, userId={}", roomId, userId, e);
+            }
+        });
+    }
+
+    /**
      * 事件回调通知
      *
      * @param roomId     房间编号