diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java b/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java index a2b2ef7..e2d244a 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java +++ b/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(); diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/Conversation.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/Conversation.java new file mode 100644 index 0000000..d0b9087 --- /dev/null +++ b/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; +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java index bebcb14..33f3e10 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java +++ b/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; diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java index 5d36342..652c0ea 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java +++ b/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 { diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java index bc4cad8..3cc3ce1 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java +++ b/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(); diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java index 594e9c1..c10ee11 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java +++ b/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()); diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/ConversationRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/ConversationRepository.java new file mode 100644 index 0000000..3fafd22 --- /dev/null +++ b/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 { + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java index 62958a4..3cbaa6b 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java +++ b/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 { List findAllByAppIdAndGroupIdAndUserIdNot(String appId, String groupId, String userId); + GroupEntity findFirstByAppIdAndGroupId(String appId, String groupId); } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java index 6a5c816..9f0add5 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java +++ b/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 findUserInfoByUserIdAndOsTypeAndAppId(String userId, String osType, String appId); + UserInfo findFirstByUserIdAndOsTypeAndAppId(String userId, String osType, String appId); List findAllByUserIdAndAppId(String userId, String appId);