zouxuan 5 年之前
父節點
當前提交
0b26393b8d

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

@@ -2,11 +2,12 @@ package com.keao.edu.im.dao;
 
 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.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import javax.persistence.LockModeType;
 
 /**
  * Created by weiqinxiao on 2019/2/25.
@@ -14,9 +15,8 @@ import java.util.List;
 @Repository
 public interface UserDao extends JpaRepository<UserInfo, Long> {
     //will query with "select * from TABLE where user_id = 'userId'"
-    public List<UserInfo> findByUid(String uid);
-
-    public List<UserInfo> findByName(String name);
+    @Lock(value = LockModeType.PESSIMISTIC_WRITE)
+    UserInfo findByUid(String uid);
 
     @Transactional
     @Modifying

+ 26 - 31
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -138,22 +138,17 @@ public class RoomServiceImpl implements RoomService {
         msg.setCamera(true);
         imHelper.publishMessage(userId, roomId, msg);
 
-        List<UserInfo> userInfoList = userDao.findByUid(userId);
-        if (userInfoList.isEmpty()) {
-            UserInfo userInfo = new UserInfo();
+        UserInfo userInfo = userDao.findByUid(userId);
+        if (userInfo == null) {
+            userInfo = new UserInfo();
             userInfo.setUid(userId);
             userInfo.setName(realName);
             userInfo.setCreateDt(curTime);
             userInfo.setUpdateDt(curTime);
-            try {
-                userDao.save(userInfo);
-            }catch (Exception e){
-                e.printStackTrace();
-            }
+            userDao.save(userInfo);
         } else {
-            UserInfo user = userInfoList.get(0);
-            user.setUpdateDt(curTime);
-            userDao.save(user);
+            userInfo.setUpdateDt(curTime);
+            userDao.save(userInfo);
         }
         List<RoomMember> roomMembers = roomMemberDao.findByRid(roomId);
         log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, roleEnum);
@@ -454,9 +449,9 @@ public class RoomServiceImpl implements RoomService {
         if(roomMembers != null && roomMembers.size() > 0){
             roomMembers.forEach(e->{
                 MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Kick, e.getUid(), e.getRole());
-                List<UserInfo> userInfoList = userDao.findByUid(e.getUid());
-                if (!userInfoList.isEmpty()) {
-                    msg.setUserName(userInfoList.get(0).getName());
+                UserInfo userInfo = userDao.findByUid(e.getUid());
+                if (userInfo != null) {
+                    msg.setUserName(userInfo.getName());
                 }
                 try {
                     imHelper.publishMessage(userId, e.getRid(), msg, 1);
@@ -500,9 +495,9 @@ public class RoomServiceImpl implements RoomService {
             throw new ApiException(ErrorEnum.ERR_USER_NOT_EXIST_IN_ROOM);
         } else {
             MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Kick, data.getUserId(), roomMember.getRole());
-            List<UserInfo> userInfoList = userDao.findByUid(data.getUserId());
-            if (!userInfoList.isEmpty()) {
-                msg.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(data.getUserId());
+            if (userInfo != null) {
+                msg.setUserName(userInfo.getName());
             }/*
             if("recorded".equals(data.getType())){
                 msg.setRoomId("recorded" + roomId);
@@ -743,9 +738,9 @@ public class RoomServiceImpl implements RoomService {
             }
             DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), false);
             deviceResourceMessage.setUserId(userId);
-            List<UserInfo> userInfoList = userDao.findByUid(userId);
-            if (!userInfoList.isEmpty()) {
-                deviceResourceMessage.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(userId);
+            if (userInfo != null) {
+                deviceResourceMessage.setUserName(userInfo.getName());
             }
             imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
         }
@@ -918,12 +913,12 @@ public class RoomServiceImpl implements RoomService {
         roomMemberDao.updateRoleByRidAndUid(roomId, taskInfo.getApplyUserId(), Student.getValue());
 
         SpeechResultMessage msg = new SpeechResultMessage(SpeechResultMessage.Action_Approve);
-        List<UserInfo> userInfoList = userDao.findByUid(taskInfo.getApplyUserId());
+        UserInfo userInfo = userDao.findByUid(taskInfo.getApplyUserId());
         msg.setOpUserId(userId);
         msg.setOpUserName(authUser.getRealName());
         msg.setReqUserId(taskInfo.getApplyUserId());
-        if (!userInfoList.isEmpty()) {
-            msg.setReqUserName(userInfoList.get(0).getName());
+        if (userInfo != null) {
+            msg.setReqUserName(userInfo.getName());
         }
         msg.setRole(Student.getValue());
         IMApiResultInfo resultInfo = imHelper.publishMessage(userId, taskInfo.getApplyUserId(), roomId, msg);
@@ -934,8 +929,8 @@ public class RoomServiceImpl implements RoomService {
         RoleChangedMessage rcMsg = new RoleChangedMessage(userId);
         List<RoleChangedMessage.ChangedUser> changedUserList = new ArrayList<>();
         RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(taskInfo.getApplyUserId(), Student.getValue());
-        if (!userInfoList.isEmpty()) {
-            user.setUserName(userInfoList.get(0).getName());
+        if (userInfo != null) {
+            msg.setReqUserName(userInfo.getName());
         }
         changedUserList.add(user);
         rcMsg.setUsers(changedUserList);
@@ -1146,9 +1141,9 @@ public class RoomServiceImpl implements RoomService {
         if (!teachers.isEmpty()) {
             roomMemberDao.updateRoleByRidAndUid(roomId, teachers.get(0).getUid(), Student.getValue());
             RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(teachers.get(0).getUid(), Student.getValue());
-            List<UserInfo> userInfoList = userDao.findByUid(teachers.get(0).getUid());
-            if (!userInfoList.isEmpty()) {
-                user.setUserName(userInfoList.get(0).getName());
+            UserInfo userInfo = userDao.findByUid(teachers.get(0).getUid());
+            if (userInfo != null) {
+                user.setUserName(userInfo.getName());
             }
             changedUserList.add(user);
         } else {
@@ -1157,9 +1152,9 @@ public class RoomServiceImpl implements RoomService {
 
         roomMemberDao.updateRoleByRidAndUid(roomId, targetUserId, targetRole);
         RoleChangedMessage.ChangedUser user = new RoleChangedMessage.ChangedUser(targetUserId, targetRole);
-        List<UserInfo> userInfoList = userDao.findByUid(targetUserId);
-        if (!userInfoList.isEmpty()) {
-            user.setUserName(userInfoList.get(0).getName());
+        UserInfo userInfo = userDao.findByUid(targetUserId);
+        if (userInfo != null) {
+            user.setUserName(userInfo.getName());
         }
         changedUserList.add(user);
         msg.setUsers(changedUserList);