会话列表更新

这个提交包含在:
xuqm 2023-06-02 17:34:14 +08:00
父节点 11789d598e
当前提交 7d47c17cc6
共有 9 个文件被更改,包括 78 次插入22 次删除

查看文件

@ -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();

查看文件

@ -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;
}

查看文件

@ -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;

查看文件

@ -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 {

查看文件

@ -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();

查看文件

@ -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());

查看文件

@ -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> {
}

查看文件

@ -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);
}

查看文件

@ -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);