会话列表与结构微调

这个提交包含在:
xuqm 2023-06-16 18:01:12 +08:00
父节点 df300774d0
当前提交 fb4f76c9e4
共有 10 个文件被更改,包括 89 次插入46 次删除

查看文件

@ -0,0 +1,8 @@
package cn.org.bjca.trust.java.imserver.bean.group;
import lombok.Data;
@Data
public class ConversationData {
private String userId;
}

查看文件

@ -0,0 +1,25 @@
package cn.org.bjca.trust.java.imserver.controller.conversation.v1;
import cn.org.bjca.trust.java.imserver.HttpResult;
import cn.org.bjca.trust.java.imserver.im.msg.ConversationMessage;
import cn.org.bjca.trust.java.imserver.request.RequestManager;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static cn.org.bjca.trust.java.imserver.request.RequestConstant.ConversationList;
@RestController
@RequestMapping("conversation/v1")
public class ConversationV1Controller {
@PostMapping("/getConversation")
public HttpResult<List<ConversationMessage>> getConversation(@RequestHeader HttpHeaders headers) throws Exception {
return RequestManager.getInstance().request(ConversationList, null, headers);
}
}

查看文件

@ -1,12 +1,14 @@
package cn.org.bjca.trust.java.imserver.controller.message.v1; package cn.org.bjca.trust.java.imserver.controller.message.v1;
import cn.org.bjca.trust.java.imserver.HttpResult; import cn.org.bjca.trust.java.imserver.HttpResult;
import cn.org.bjca.trust.java.imserver.bean.group.GroupCreateData;
import cn.org.bjca.trust.java.imserver.bean.group.MsgHistoryForCountData; import cn.org.bjca.trust.java.imserver.bean.group.MsgHistoryForCountData;
import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage;
import cn.org.bjca.trust.java.imserver.request.RequestManager; import cn.org.bjca.trust.java.imserver.request.RequestManager;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import static cn.org.bjca.trust.java.imserver.request.RequestConstant.MsgHistoryForCount; import static cn.org.bjca.trust.java.imserver.request.RequestConstant.MsgHistoryForCount;
@RestController @RestController
@ -14,7 +16,7 @@ import static cn.org.bjca.trust.java.imserver.request.RequestConstant.MsgHistory
public class MessageV1Controller { public class MessageV1Controller {
@PostMapping("/getHistoryForCount") @PostMapping("/getHistoryForCount")
public HttpResult<String> getHistoryForCount(@RequestBody MsgHistoryForCountData groupCreateData, @RequestHeader HttpHeaders headers) throws Exception { public HttpResult<List<SZYXMessage>> getHistoryForCount(@RequestBody MsgHistoryForCountData groupCreateData, @RequestHeader HttpHeaders headers) throws Exception {
return RequestManager.getInstance().request(MsgHistoryForCount, groupCreateData, headers); return RequestManager.getInstance().request(MsgHistoryForCount, groupCreateData, headers);
} }

查看文件

@ -2,16 +2,9 @@ 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 jakarta.persistence.Column;
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;
@Entity @Entity
@Data @Data
public class GroupEntity extends AbstractBaseTimeEntity { public class GroupEntity extends AbstractBaseTimeEntity {

查看文件

@ -4,7 +4,6 @@ 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.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;
@ -18,6 +17,7 @@ import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.List;
public class ImManager { public class ImManager {
@ -50,17 +50,17 @@ public class ImManager {
try { try {
mqttClient = new MqttClient("tcp://114.115.203.60:18883", mqttClient = new MqttClient("tcp://114.115.203.60:18883",
"server1" + System.currentTimeMillis(), new MemoryPersistence()); "server" + System.currentTimeMillis(), new MemoryPersistence());
mqttClient.setCallback(new MqttCallbackExtended() { mqttClient.setCallback(new MqttCallbackExtended() {
@Override @Override
public void connectComplete(boolean reconnect, String serverURI) { public void connectComplete(boolean reconnect, String serverURI) {
System.out.println("======>connectComplete:reconnect?" + reconnect + "::" + serverURI); System.out.println("======>connectComplete:reconnect?" + reconnect + "::" + serverURI);
if (reconnect) return; if (reconnect) return;
try { try {
mqttClient.subscribe("server1" + PacketType.CONNECT, 2); mqttClient.subscribe("server" + PacketType.CONNECT, 2);
mqttClient.subscribe("server1" + PacketType.SEND, 2); mqttClient.subscribe("server" + PacketType.SEND, 2);
mqttClient.subscribe("server1" + PacketType.PING, 2); mqttClient.subscribe("server" + PacketType.PING, 2);
mqttClient.subscribe("server1" + PacketType.REQUEST, 2); mqttClient.subscribe("server" + PacketType.REQUEST, 2);
} catch (MqttException ignored) { } catch (MqttException ignored) {
} }
} }
@ -74,12 +74,11 @@ public class ImManager {
public void messageArrived(String topic, MqttMessage message) throws Exception { public void messageArrived(String topic, MqttMessage message) throws Exception {
String msg = new String(message.getPayload()); String msg = new String(message.getPayload());
System.out.println("======>messageArrived:\n" + topic + "::" + msg); System.out.println("======>messageArrived:\n" + topic + "::" + msg);
if (topic.equals("server1" + PacketType.CONNECT)) { if (topic.equals("server" + PacketType.CONNECT)) {
sendConnectedMsg(GsonImplHelp.get().toObject(msg, ConnectMessage.class)); sendConnectedMsg(GsonImplHelp.get().toObject(msg, ConnectMessage.class));
} else if (topic.equals("server1" + PacketType.SEND)) { } else if (topic.equals("server" + PacketType.SEND)) {
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());
saveConversation(szyxMessage); saveConversation(szyxMessage);
SZYXMessage message1 = szyxMessage.copy(); SZYXMessage message1 = szyxMessage.copy();
@ -101,7 +100,7 @@ public class ImManager {
sendAckMsg(szyxMessage); sendAckMsg(szyxMessage);
}// 数据请求 }// 数据请求
else if (topic.equals("server1" + PacketType.REQUEST)) { else if (topic.equals("server" + PacketType.REQUEST)) {
sendPacketMessage(PacketType.RESULT, RequestManager.getInstance().request(msg)); sendPacketMessage(PacketType.RESULT, RequestManager.getInstance().request(msg));
} }
@ -120,11 +119,18 @@ public class ImManager {
private void saveConversation(SZYXMessage szyxMessage) { private void saveConversation(SZYXMessage szyxMessage) {
try { try {
ConversationMessage conversation = new ConversationMessage(); List<ConversationMessage> l = conversationRepository.getConversation(szyxMessage.getAppId(), szyxMessage.getUserName(),
szyxMessage.isArrive() ? szyxMessage.getFromClientId() : szyxMessage.getToClientId(), szyxMessage.getGroupID());
ConversationMessage conversation;
if (l.size() == 0) {
conversation = new ConversationMessage();
} else {
conversation = l.get(0);
}
// ConversationMessage conversation = new ConversationMessage();
conversation.setGroup(szyxMessage.isGroup()); conversation.setGroup(szyxMessage.isGroup());
conversation.setSender(!szyxMessage.isArrive()); conversation.setSender(!szyxMessage.isArrive());
conversation.setMessage(szyxMessage); conversation.setMessage(szyxMessage);
conversation.setSelf(userRepository.findFirstByUserIdAndOsTypeAndAppId(szyxMessage.getUserName(), szyxMessage.getOsType(), szyxMessage.getAppId()));
conversation.setAppId(szyxMessage.getAppId()); conversation.setAppId(szyxMessage.getAppId());
conversation.setUserName(szyxMessage.getUserName()); conversation.setUserName(szyxMessage.getUserName());
@ -134,18 +140,10 @@ public class ImManager {
if (szyxMessage.isGroup()) { if (szyxMessage.isGroup()) {
conversation.setGroupEntity(groupRepository.findFirstByAppIdAndGroupId(szyxMessage.getAppId(), szyxMessage.getGroupID())); conversation.setGroupEntity(groupRepository.findFirstByAppIdAndGroupId(szyxMessage.getAppId(), szyxMessage.getGroupID()));
} else { } else {
UserInfo userInfo; conversation.setUserId(szyxMessage.isArrive() ? szyxMessage.getFromClientId() : szyxMessage.getToClientId());
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); conversationRepository.save(conversation);
conversation.getSelf().setPassword("");
conversation.getUserInfo().setPassword("");
sendPacketMessage(PacketType.CONVERSATION, conversation); sendPacketMessage(PacketType.CONVERSATION, conversation);
} catch (Exception e) { } catch (Exception e) {
System.out.println("--------------" + e.getMessage()); System.out.println("--------------" + e.getMessage());
@ -155,7 +153,10 @@ public class ImManager {
public void connect() { public void connect() {
new Thread(() -> { new Thread(() -> {
try { try {
if (!mqttClient.isConnected()) { if (null != mqttClient) {
if (mqttClient.isConnected()) {
mqttClient.disconnect();
}
mqttClient.connect(connectOptions); mqttClient.connect(connectOptions);
} }
} catch (MqttException e) { } catch (MqttException e) {

查看文件

@ -29,10 +29,5 @@ public class ConversationMessage extends PacketMessage {
@OneToOne @OneToOne
@JoinColumn @JoinColumn
private GroupEntity groupEntity; private GroupEntity groupEntity;
@OneToOne private String userId;
@JoinColumn
private UserInfo userInfo;
@OneToOne
@JoinColumn
private UserInfo self;
} }

查看文件

@ -1,7 +1,6 @@
package cn.org.bjca.trust.java.imserver.im.msg.msg; package cn.org.bjca.trust.java.imserver.im.msg.msg;
import cn.org.bjca.trust.java.imserver.entitys.UserInfo;
import cn.org.bjca.trust.java.imserver.enums.MsgType; import cn.org.bjca.trust.java.imserver.enums.MsgType;
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;
@ -25,9 +24,6 @@ public class SZYXMessage extends PacketMessage {
/** /**
* 发送者信息 * 发送者信息
*/ */
@OneToOne
@JoinColumn
private UserInfo fromClient;
private String fromClientId; private String fromClientId;
/** /**
* 接收者信息 * 接收者信息
@ -82,8 +78,6 @@ public class SZYXMessage extends PacketMessage {
szyxMessage.setStatus(this.getStatus()); szyxMessage.setStatus(this.getStatus());
szyxMessage.setGroupID(this.getGroupID()); szyxMessage.setGroupID(this.getGroupID());
szyxMessage.setFromClient(this.getFromClient().copy());
SZYXTextMessage tm = new SZYXTextMessage(); SZYXTextMessage tm = new SZYXTextMessage();
tm.setText(this.getTextMessage().getText()); tm.setText(this.getTextMessage().getText());

查看文件

@ -2,9 +2,18 @@ package cn.org.bjca.trust.java.imserver.repository;
import cn.org.bjca.trust.java.imserver.im.msg.ConversationMessage; import cn.org.bjca.trust.java.imserver.im.msg.ConversationMessage;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface ConversationRepository extends JpaRepository<ConversationMessage, String> { public interface ConversationRepository extends JpaRepository<ConversationMessage, String> {
@Query(value = "select cs from ConversationMessage AS cs " +
"where cs.appId = ?1 and cs.userName = ?2 and (cs.userId = ?3 or cs.groupEntity._id = ?4)")
List<ConversationMessage> getConversation(String appId, String userName, String userId, String groupId);
List<ConversationMessage> findAllByAppIdAndUserName(String appId, String userName);
} }

查看文件

@ -8,4 +8,6 @@ public class RequestConstant {
public static final String MsgHistoryForCount = "/message/v1/getHistoryForCount"; public static final String MsgHistoryForCount = "/message/v1/getHistoryForCount";
public static final String MsgListForTime = "/message/v1/getListForTime"; public static final String MsgListForTime = "/message/v1/getListForTime";
public static final String MsgListForCount = "/message/v1/getListForCount"; public static final String MsgListForCount = "/message/v1/getListForCount";
public static final String ConversationList = "/conversation/v1/getConversation";
} }

查看文件

@ -7,9 +7,11 @@ import cn.org.bjca.trust.java.imserver.common.SpringUtilsAuTo;
import cn.org.bjca.trust.java.imserver.common.TimeHelper; import cn.org.bjca.trust.java.imserver.common.TimeHelper;
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.GroupEntity; import cn.org.bjca.trust.java.imserver.entitys.GroupEntity;
import cn.org.bjca.trust.java.imserver.im.msg.ConversationMessage;
import cn.org.bjca.trust.java.imserver.im.msg.RequestMessage; import cn.org.bjca.trust.java.imserver.im.msg.RequestMessage;
import cn.org.bjca.trust.java.imserver.im.msg.ResultMessage; import cn.org.bjca.trust.java.imserver.im.msg.ResultMessage;
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.repository.ConversationRepository;
import cn.org.bjca.trust.java.imserver.repository.GroupRepository; 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.MessageRepository;
import cn.org.bjca.trust.java.imserver.repository.UserRepository; import cn.org.bjca.trust.java.imserver.repository.UserRepository;
@ -19,12 +21,11 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import java.util.Comparator; import java.time.ZoneOffset;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import static cn.org.bjca.trust.java.imserver.request.RequestConstant.Group_create_v1; import static cn.org.bjca.trust.java.imserver.request.RequestConstant.*;
import static cn.org.bjca.trust.java.imserver.request.RequestConstant.MsgHistoryForCount;
public class RequestManager { public class RequestManager {
@ -33,6 +34,8 @@ public class RequestManager {
private final ApplicationRepository applicationRepository = SpringUtilsAuTo.getBean(ApplicationRepository.class); private final ApplicationRepository applicationRepository = SpringUtilsAuTo.getBean(ApplicationRepository.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 static final class RequestManagerHolder { private static final class RequestManagerHolder {
static final RequestManager instance = new RequestManager(); static final RequestManager instance = new RequestManager();
} }
@ -79,9 +82,12 @@ public class RequestManager {
GsonImplHelp.get().toObject((String) data, GroupCreateData.class) GsonImplHelp.get().toObject((String) data, GroupCreateData.class)
: (GroupCreateData) data, appId, userId); : (GroupCreateData) data, appId, userId);
case MsgHistoryForCount: case MsgHistoryForCount:
if(null == data) return new HttpResult<>(201, "参数为空", null);
return (HttpResult<T>) this.getHistoryForCount(data instanceof String ? return (HttpResult<T>) this.getHistoryForCount(data instanceof String ?
GsonImplHelp.get().toObject((String) data, MsgHistoryForCountData.class) GsonImplHelp.get().toObject((String) data, MsgHistoryForCountData.class)
: (MsgHistoryForCountData) data, appId, userId); : (MsgHistoryForCountData) data, appId, userId);
case ConversationList:
return (HttpResult<T>) this.getConversation(appId, userId);
default: default:
return new HttpResult<>(201, "路径错误" + path, null); return new HttpResult<>(201, "路径错误" + path, null);
} }
@ -91,6 +97,14 @@ public class RequestManager {
} }
private HttpResult<List<ConversationMessage>> getConversation(String appid, String userid) {
List<ConversationMessage> l = conversationRepository.findAllByAppIdAndUserName(appid, userid);
l.sort((o1, o2) -> (int) (o1.getUpdateTime().toEpochSecond(ZoneOffset.UTC) - o2.getUpdateTime().toEpochSecond(ZoneOffset.UTC)));
return new HttpResult<>(200, "查询成功", l);
}
private HttpResult<List<SZYXMessage>> getHistoryForCount(MsgHistoryForCountData data, String appid, String userid) { private HttpResult<List<SZYXMessage>> getHistoryForCount(MsgHistoryForCountData data, String appid, String userid) {
Pageable pageable = PageRequest.of(0, 10, Sort.by("_id").descending()); Pageable pageable = PageRequest.of(0, 10, Sort.by("_id").descending());