shangke %!s(int64=2) %!d(string=hai) anos
pai
achega
0ee7013de0

+ 37 - 0
mec-im/src/main/java/com/ym/service/Impl/RoomMemberServiceImpl.java

@@ -0,0 +1,37 @@
+package com.ym.service.Impl;
+
+import com.ym.dao.RoomMemberDao;
+import com.ym.service.RoomMemberService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 房间用户
+ * Created by Eric.Shang on 2023/5/31.
+ */
+@Slf4j
+@Service
+public class RoomMemberServiceImpl implements RoomMemberService {
+
+    @Autowired
+    private RoomMemberDao roomMemberDao;
+
+    /**
+     * 删除房间用户
+     * @param roomId 房间编号
+     * @param userId 用户编号
+     */
+    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+    public void deleteRoomMember(String roomId, String userId) {
+
+        try {
+            // 删除房间用户信息
+            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+        } catch (Exception e) {
+            log.error("deleteRoomMember roomId={}, userId={}", roomId, userId, e);
+        }
+    }
+}

+ 6 - 21
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -42,6 +42,7 @@ import com.ym.mec.im.message.*;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.pojo.*;
+import com.ym.service.RoomMemberService;
 import com.ym.service.RoomService;
 import com.ym.utils.CheckUtils;
 import com.ym.utils.CodeUtil;
@@ -60,8 +61,6 @@ 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;
@@ -84,6 +83,8 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     private RoomMemberDao roomMemberDao;
     @Autowired
+    private RoomMemberService roomMemberService;
+    @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private WhiteBoardHelper whiteBoardHelper;
@@ -783,9 +784,6 @@ public class RoomServiceImpl implements RoomService {
             return;
         }
 
-        // 异步删除用户,让当前事务失效
-        asyncDeleteRoomMember(roomId, userId);
-
         String username;
         SysUser sysUser = sysUserFeignService.queryUserById(parseInt);
         if (roleEnum == RoleTeacher) {
@@ -810,6 +808,9 @@ public class RoomServiceImpl implements RoomService {
             updateDisplay(roomId, userId, "", 0);
         }
 
+        // 删除房间用户,事务单独提效
+        roomMemberService.deleteRoomMember(roomId, userId);
+
         int roomMembers = roomMemberDao.countByRid(roomId);
         if (roomMembers <= 0) {
             // 删除群组用户信息
@@ -868,22 +869,6 @@ 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     房间编号

+ 15 - 0
mec-im/src/main/java/com/ym/service/RoomMemberService.java

@@ -0,0 +1,15 @@
+package com.ym.service;
+
+/**
+ * 房间用户
+ * Created by Eric.Shang on 2023/5/31.
+ */
+public interface RoomMemberService {
+
+    /**
+     * 删除房间用户
+     * @param roomId 房间编号
+     * @param userId 用户编号
+     */
+    void deleteRoomMember(String roomId, String userId);
+}