会话列表更新
这个提交包含在:
父节点
11789d598e
当前提交
7d47c17cc6
@ -35,7 +35,7 @@ public class UserV1Controller {
|
|||||||
ApplicationEntity app = applicationRepository.findFirstByAppId(appid);
|
ApplicationEntity app = applicationRepository.findFirstByAppId(appid);
|
||||||
if (null == app) return new HttpResult<>(201, "appId不存在", new LoginData());
|
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) {
|
if (null == userInfo) {
|
||||||
System.out.println("-----------------用户不存在------------------");
|
System.out.println("-----------------用户不存在------------------");
|
||||||
userInfo = new UserInfo();
|
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.AbstractBaseTimeEntity;
|
||||||
|
import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntityNoKey;
|
||||||
import cn.org.bjca.trust.java.imserver.entitys.converter.StringListConverter;
|
import cn.org.bjca.trust.java.imserver.entitys.converter.StringListConverter;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.Convert;
|
import jakarta.persistence.Convert;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -15,6 +18,7 @@ public class GroupEntity extends AbstractBaseTimeEntity {
|
|||||||
private String appId;
|
private String appId;
|
||||||
private String adminId;
|
private String adminId;
|
||||||
private String userId;
|
private String userId;
|
||||||
|
|
||||||
private String groupId;
|
private String groupId;
|
||||||
private String groupName;
|
private String groupName;
|
||||||
private String faceUrl;
|
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.SpringUtilsAuTo;
|
||||||
import cn.org.bjca.trust.java.imserver.common.json.GsonImplHelp;
|
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.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.enums.PacketType;
|
||||||
import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage;
|
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.ConnectMessage;
|
||||||
import cn.org.bjca.trust.java.imserver.im.msg.ConnectedMessage;
|
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.SZYXMessage;
|
||||||
import cn.org.bjca.trust.java.imserver.im.msg.msg.SendAckMessage;
|
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.*;
|
||||||
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.request.RequestManager;
|
import cn.org.bjca.trust.java.imserver.request.RequestManager;
|
||||||
import org.eclipse.paho.client.mqttv3.*;
|
import org.eclipse.paho.client.mqttv3.*;
|
||||||
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
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 UserRepository userRepository = SpringUtilsAuTo.getBean(UserRepository.class);
|
||||||
private final MessageRepository messageRepository = SpringUtilsAuTo.getBean(MessageRepository.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 GroupRepository groupRepository = SpringUtilsAuTo.getBean(GroupRepository.class);
|
||||||
private final ConnectRepository connectRepository = SpringUtilsAuTo.getBean(ConnectRepository.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 szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class);
|
||||||
szyxMessage.setStatus(0);
|
szyxMessage.setStatus(0);
|
||||||
szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId());
|
szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId());
|
||||||
try {
|
saveConversation(szyxMessage);
|
||||||
messageRepository.save(szyxMessage.copy());
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("--------------" + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
SZYXMessage message1 = szyxMessage.copy();
|
SZYXMessage message1 = szyxMessage.copy();
|
||||||
message1.setArrive(true);
|
message1.setArrive(true);
|
||||||
message1.setStatus(1);
|
message1.setStatus(1);
|
||||||
if (szyxMessage.isGroup()) {
|
if (szyxMessage.isGroup()) {
|
||||||
for (GroupEntity groupEntity : groupRepository.findAllByAppIdAndGroupIdAndUserIdNot(message1.getAppId(), message1.getGroupID(), message1.getFromClientId())) {
|
for (GroupEntity groupEntity : groupRepository.findAllByAppIdAndGroupIdAndUserIdNot(message1.getAppId(), message1.getGroupID(), message1.getFromClientId())) {
|
||||||
|
|
||||||
SZYXMessage message2 = message1.copy();
|
SZYXMessage message2 = message1.copy();
|
||||||
message2.setUserName(groupEntity.getUserId());
|
message2.setUserName(groupEntity.getUserId());
|
||||||
try {
|
saveConversation(message2);
|
||||||
messageRepository.save(message2);
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("--------------" + e.getMessage());
|
|
||||||
}
|
|
||||||
sendPacketMessage(szyxMessage.getPacketType(), message2);
|
sendPacketMessage(szyxMessage.getPacketType(), message2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
message1.setUserName(message1.getToClientId());
|
message1.setUserName(message1.getToClientId());
|
||||||
try {
|
saveConversation(message1);
|
||||||
messageRepository.save(message1);
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("--------------" + e.getMessage());
|
|
||||||
}
|
|
||||||
sendPacketMessage(szyxMessage.getPacketType(), message1);
|
sendPacketMessage(szyxMessage.getPacketType(), message1);
|
||||||
}
|
}
|
||||||
// TODO: 这里应该有计时器,判断转发消息是否送达,如果没送达则ack返回失败状态
|
// 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() {
|
public void connect() {
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -33,6 +33,7 @@ public class ConnectMessage extends PacketMessage {
|
|||||||
connectMessage.setTimestamp(this.getTimestamp());
|
connectMessage.setTimestamp(this.getTimestamp());
|
||||||
connectMessage.setUserName(this.getUserName());
|
connectMessage.setUserName(this.getUserName());
|
||||||
connectMessage.setAppId(this.getAppId());
|
connectMessage.setAppId(this.getAppId());
|
||||||
|
connectMessage.setOsType(this.getOsType());
|
||||||
connectMessage.setToken(this.getToken());
|
connectMessage.setToken(this.getToken());
|
||||||
DeviceEntity deviceEntity = new DeviceEntity();
|
DeviceEntity deviceEntity = new DeviceEntity();
|
||||||
|
|
||||||
|
|||||||
@ -70,6 +70,7 @@ public class SZYXMessage extends PacketMessage {
|
|||||||
szyxMessage.setTimestamp(this.getTimestamp());
|
szyxMessage.setTimestamp(this.getTimestamp());
|
||||||
szyxMessage.setUserName(this.getUserName());
|
szyxMessage.setUserName(this.getUserName());
|
||||||
szyxMessage.setAppId(this.getAppId());
|
szyxMessage.setAppId(this.getAppId());
|
||||||
|
szyxMessage.setOsType(this.getOsType());
|
||||||
szyxMessage.setToken(this.getToken());
|
szyxMessage.setToken(this.getToken());
|
||||||
|
|
||||||
szyxMessage.setFromClientId(this.getFromClientId());
|
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> {
|
public interface GroupRepository extends JpaRepository<GroupEntity, Long> {
|
||||||
|
|
||||||
List<GroupEntity> findAllByAppIdAndGroupIdAndUserIdNot(String appId, String groupId, String userId);
|
List<GroupEntity> findAllByAppIdAndGroupIdAndUserIdNot(String appId, String groupId, String userId);
|
||||||
|
GroupEntity findFirstByAppIdAndGroupId(String appId, String groupId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface UserRepository extends JpaRepository<UserInfo, String> {
|
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);
|
List<UserInfo> findAllByUserIdAndAppId(String userId, String appId);
|
||||||
|
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户