Parcourir la source

会话列表更新

xuqm il y a 1 an
Parent
commit
7d47c17cc6

+ 1 - 1
src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java

@@ -35,7 +35,7 @@ public class UserV1Controller {
             ApplicationEntity app = applicationRepository.findFirstByAppId(appid);
             if (null == app) return new HttpResult<>(201, "appId不存在", new LoginData());
 
-            UserInfo userInfo = userRepository.findUserInfoByUserIdAndOsTypeAndAppId(userid, ostype, appid);
+            UserInfo userInfo = userRepository.findFirstByUserIdAndOsTypeAndAppId(userid, ostype, appid);
             if (null == userInfo) {
                 System.out.println("-----------------用户不存在------------------");
                 userInfo = new UserInfo();

+ 27 - 0
src/main/java/cn/org/bjca/trust/java/imserver/entitys/Conversation.java

@@ -0,0 +1,27 @@
+package cn.org.bjca.trust.java.imserver.entitys;
+
+import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity;
+import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToOne;
+import lombok.Data;
+
+@Entity
+@Data
+public class Conversation extends AbstractBaseTimeEntity {
+    private boolean isSender;
+    private boolean isGroup;
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @JoinColumn
+    private SZYXMessage message;
+
+    @OneToOne
+    @JoinColumn
+    private GroupEntity groupEntity;
+    @OneToOne
+    @JoinColumn
+    private UserInfo userInfo;
+}

+ 4 - 0
src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java

@@ -2,9 +2,12 @@ package cn.org.bjca.trust.java.imserver.entitys;
 
 
 import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity;
+import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntityNoKey;
 import cn.org.bjca.trust.java.imserver.entitys.converter.StringListConverter;
+import jakarta.persistence.Column;
 import jakarta.persistence.Convert;
 import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
 import lombok.Data;
 
 import java.util.List;
@@ -15,6 +18,7 @@ public class GroupEntity extends AbstractBaseTimeEntity {
     private String appId;
     private String adminId;
     private String userId;
+
     private String groupId;
     private String groupName;
     private String faceUrl;

+ 31 - 20
src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java

@@ -3,17 +3,16 @@ package cn.org.bjca.trust.java.imserver.im;
 
 import cn.org.bjca.trust.java.imserver.common.SpringUtilsAuTo;
 import cn.org.bjca.trust.java.imserver.common.json.GsonImplHelp;
+import cn.org.bjca.trust.java.imserver.entitys.Conversation;
 import cn.org.bjca.trust.java.imserver.entitys.GroupEntity;
+import cn.org.bjca.trust.java.imserver.entitys.UserInfo;
 import cn.org.bjca.trust.java.imserver.enums.PacketType;
 import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage;
 import cn.org.bjca.trust.java.imserver.im.msg.ConnectMessage;
 import cn.org.bjca.trust.java.imserver.im.msg.ConnectedMessage;
 import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage;
 import cn.org.bjca.trust.java.imserver.im.msg.msg.SendAckMessage;
-import cn.org.bjca.trust.java.imserver.repository.ConnectRepository;
-import cn.org.bjca.trust.java.imserver.repository.GroupRepository;
-import cn.org.bjca.trust.java.imserver.repository.MessageRepository;
-import cn.org.bjca.trust.java.imserver.repository.UserRepository;
+import cn.org.bjca.trust.java.imserver.repository.*;
 import cn.org.bjca.trust.java.imserver.request.RequestManager;
 import org.eclipse.paho.client.mqttv3.*;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
@@ -24,6 +23,7 @@ public class ImManager {
 
     private final UserRepository userRepository = SpringUtilsAuTo.getBean(UserRepository.class);
     private final MessageRepository messageRepository = SpringUtilsAuTo.getBean(MessageRepository.class);
+    private final ConversationRepository conversationRepository = SpringUtilsAuTo.getBean(ConversationRepository.class);
     private final GroupRepository groupRepository = SpringUtilsAuTo.getBean(GroupRepository.class);
     private final ConnectRepository connectRepository = SpringUtilsAuTo.getBean(ConnectRepository.class);
 
@@ -80,34 +80,21 @@ public class ImManager {
                         SZYXMessage szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class);
                         szyxMessage.setStatus(0);
                         szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId());
-                        try {
-                            messageRepository.save(szyxMessage.copy());
-                        } catch (Exception e) {
-                            System.out.println("--------------" + e.getMessage());
-                        }
+                        saveConversation(szyxMessage);
 
                         SZYXMessage message1 = szyxMessage.copy();
                         message1.setArrive(true);
                         message1.setStatus(1);
                         if (szyxMessage.isGroup()) {
                             for (GroupEntity groupEntity : groupRepository.findAllByAppIdAndGroupIdAndUserIdNot(message1.getAppId(), message1.getGroupID(), message1.getFromClientId())) {
-
                                 SZYXMessage message2 = message1.copy();
                                 message2.setUserName(groupEntity.getUserId());
-                                try {
-                                    messageRepository.save(message2);
-                                } catch (Exception e) {
-                                    System.out.println("--------------" + e.getMessage());
-                                }
+                                saveConversation(message2);
                                 sendPacketMessage(szyxMessage.getPacketType(), message2);
                             }
                         } else {
                             message1.setUserName(message1.getToClientId());
-                            try {
-                                messageRepository.save(message1);
-                            } catch (Exception e) {
-                                System.out.println("--------------" + e.getMessage());
-                            }
+                            saveConversation(message1);
                             sendPacketMessage(szyxMessage.getPacketType(), message1);
                         }
                         // TODO: 这里应该有计时器,判断转发消息是否送达,如果没送达则ack返回失败状态
@@ -131,6 +118,30 @@ public class ImManager {
 
     }
 
+    private void saveConversation(SZYXMessage szyxMessage) {
+        try {
+            Conversation conversation = new Conversation();
+            conversation.setGroup(szyxMessage.isGroup());
+            conversation.setSender(!szyxMessage.isArrive());
+            conversation.setMessage(szyxMessage);
+            if (szyxMessage.isGroup()) {
+                conversation.setGroupEntity(groupRepository.findFirstByAppIdAndGroupId(szyxMessage.getAppId(), szyxMessage.getGroupID()));
+            } else {
+                UserInfo userInfo;
+                if (szyxMessage.isArrive()) {
+                    userInfo = userRepository.findFirstByUserIdAndOsTypeAndAppId(szyxMessage.getFromClientId(), szyxMessage.getOsType(), szyxMessage.getAppId());
+                } else {
+                    userInfo = userRepository.findFirstByUserIdAndOsTypeAndAppId(szyxMessage.getToClientId(), szyxMessage.getOsType(), szyxMessage.getAppId());
+                }
+                conversation.setUserInfo(userInfo);
+            }
+
+            conversationRepository.save(conversation);
+        } catch (Exception e) {
+            System.out.println("--------------" + e.getMessage());
+        }
+    }
+
     public void connect() {
         new Thread(() -> {
             try {

+ 1 - 0
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java

@@ -33,6 +33,7 @@ public class ConnectMessage extends PacketMessage {
         connectMessage.setTimestamp(this.getTimestamp());
         connectMessage.setUserName(this.getUserName());
         connectMessage.setAppId(this.getAppId());
+        connectMessage.setOsType(this.getOsType());
         connectMessage.setToken(this.getToken());
         DeviceEntity deviceEntity = new DeviceEntity();
 

+ 1 - 0
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java

@@ -70,6 +70,7 @@ public class SZYXMessage extends PacketMessage {
         szyxMessage.setTimestamp(this.getTimestamp());
         szyxMessage.setUserName(this.getUserName());
         szyxMessage.setAppId(this.getAppId());
+        szyxMessage.setOsType(this.getOsType());
         szyxMessage.setToken(this.getToken());
 
         szyxMessage.setFromClientId(this.getFromClientId());

+ 11 - 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/ConversationRepository.java

@@ -0,0 +1,11 @@
+package cn.org.bjca.trust.java.imserver.repository;
+
+import cn.org.bjca.trust.java.imserver.entitys.Conversation;
+import cn.org.bjca.trust.java.imserver.entitys.UserInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ConversationRepository extends JpaRepository<Conversation, String> {
+
+}

+ 1 - 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java

@@ -11,4 +11,5 @@ import java.util.List;
 public interface GroupRepository extends JpaRepository<GroupEntity, Long> {
 
     List<GroupEntity> findAllByAppIdAndGroupIdAndUserIdNot(String appId, String groupId, String userId);
+    GroupEntity findFirstByAppIdAndGroupId(String appId, String groupId);
 }

+ 1 - 1
src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java

@@ -9,7 +9,7 @@ import java.util.List;
 @Repository
 public interface UserRepository extends JpaRepository<UserInfo, String> {
 
-    UserInfo findUserInfoByUserIdAndOsTypeAndAppId(String userId, String osType, String appId);
+    UserInfo findFirstByUserIdAndOsTypeAndAppId(String userId, String osType, String appId);
 
     List<UserInfo> findAllByUserIdAndAppId(String userId, String appId);