ソースを参照

Merge remote-tracking branch 'origin/master'

周箭河 5 年 前
コミット
8a0fa044ba

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

@@ -4,6 +4,7 @@ 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.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -15,6 +16,9 @@ import javax.persistence.LockModeType;
 @Repository
 public interface UserDao extends JpaRepository<UserInfo, Long> {
 
+    @Query(value = "SELECT * FROM rongyun_user WHERE uid = ?1 FOR UPDATE", nativeQuery = true)
+    UserInfo lockFindByUid(String uid);
+
     UserInfo findByUid(String uid);
 
     Boolean existsByUid(String uid);

+ 15 - 12
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -107,15 +107,6 @@ public class RoomServiceImpl implements RoomService {
         if (!roomDao.existsByRid(roomId)) {
             saveRoom(roomId,curTime);
         }
-//        UserInfo userInfo = userDao.findByUid(userId);
-        if(!userDao.existsByUid(userId)){
-            UserInfo userInfo = new UserInfo();
-            userInfo.setUid(userId);
-            userInfo.setName(roomMember.getName());
-            userInfo.setCreateDt(curTime);
-            userInfo.setUpdateDt(curTime);
-            userDao.save(userInfo);
-        }
         MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Join, userId, roomMember.getRole());
         msg.setTimestamp(curTime);
         msg.setUserName(roomMember.getName());
@@ -191,8 +182,7 @@ public class RoomServiceImpl implements RoomService {
                 roleEnum = Student;
             }
             log.info("user join the room: roomId={} , userId={}, roleEnum={}", roomId, userId, roleEnum);
-            saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(),true, curTime,registrationId);
-            roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+            roomMember = saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(),true, curTime,registrationId);
         } else {
             roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
             if(roleEnum == Student){
@@ -210,6 +200,9 @@ public class RoomServiceImpl implements RoomService {
             }
             log.info("user exist in the room: roomId={} , userId={}, use the last role={}", roomId, userId, roleEnum);
         }
+        if (!userDao.existsByUid(userId)) {
+            saveUser(userId,realName,curTime);
+        }
         userResult.setMicrophone(roomMember.isMic());
         userResult.setCamera(roomMember.isCamera());
         userResult.setJoinTime(roomMember.getJoinDt());
@@ -226,6 +219,15 @@ public class RoomServiceImpl implements RoomService {
         return baseResponse;
     }
 
+    private void saveUser(String userId,String realName,Date createTime) {
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUid(userId);
+        userInfo.setName(realName);
+        userInfo.setCreateDt(createTime);
+        userInfo.setUpdateDt(createTime);
+        userDao.save(userInfo);
+    }
+
     private void saveRoom(String roomId,Date createTime) {
         Room room = new Room();
         room.setRid(roomId);
@@ -234,7 +236,7 @@ public class RoomServiceImpl implements RoomService {
         roomDao.save(room);
     }
 
-    private void saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn, Date joinTime,Long examRegistrationId) {
+    private RoomMember saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn, Date joinTime,Long examRegistrationId) {
         RoomMember roomMember = new RoomMember();
         roomMember.setUid(userId);
         roomMember.setName(userName);
@@ -248,6 +250,7 @@ public class RoomServiceImpl implements RoomService {
             roomMember.setMsidFlag(true);
         }
         roomMemberDao.save(roomMember);
+        return roomMember;
     }
 
     public void leaveRoomSuccess(RoomMember roomMember) throws Exception {