소스 검색

会话列表更新

master
徐勤民 1 년 전
부모
커밋
7d47c17cc6
9개의 변경된 파일78개의 추가작업 그리고 22개의 파일을 삭제
  1. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java
  2. +27
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/Conversation.java
  3. +4
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java
  4. +31
    -20
      src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java
  5. +1
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java
  6. +1
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java
  7. +11
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/ConversationRepository.java
  8. +1
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java
  9. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java

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



불러오는 중...
취소
저장