会话列表更新
这个提交包含在:
父节点
11789d598e
当前提交
7d47c17cc6
@ -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);
|
||||
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户