From e037d174fc941679a66ac72bb2197686ec7aede7 Mon Sep 17 00:00:00 2001 From: xuqm Date: Thu, 1 Jun 2023 18:41:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=BE=A4=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/imserver/bean/group/GroupCreateData.java | 12 +++ .../trust/java/imserver/common/RequestManager.java | 16 --- .../controller/group/v1/GroupV1Controller.java | 22 +++++ .../imserver/entitys/AbstractBaseTimeEntity.java | 33 ------- .../entitys/AbstractBaseTimeEntityNoKey.java | 30 ------ .../trust/java/imserver/entitys/DeviceEntity.java | 2 +- .../trust/java/imserver/entitys/GroupEntity.java | 33 +++++++ .../bjca/trust/java/imserver/entitys/UserInfo.java | 1 + .../entitys/converter/AbstractBaseTimeEntity.java | 33 +++++++ .../converter/AbstractBaseTimeEntityNoKey.java | 30 ++++++ .../entitys/converter/StringListConverter.java | 25 +++++ .../imserver/entitys/sys/ApplicationEntity.java | 2 +- .../java/imserver/entitys/sys/TenantEntity.java | 2 +- .../org/bjca/trust/java/imserver/im/ImManager.java | 36 +++---- .../trust/java/imserver/im/bean/PacketMessage.java | 3 +- .../trust/java/imserver/im/msg/ConnectMessage.java | 2 +- .../trust/java/imserver/im/msg/RequestMessage.java | 3 +- .../trust/java/imserver/im/msg/ResultMessage.java | 18 ++++ .../java/imserver/im/msg/msg/SZYXMessage.java | 6 +- .../im/msg/msg/message/SZYXTextMessage.java | 2 +- .../java/imserver/repository/GroupRepository.java | 15 +++ .../imserver/repository/MessageRepository.java | 3 + .../java/imserver/repository/UserRepository.java | 2 + .../repository/tenant/ApplicationRepository.java | 1 + .../java/imserver/request/RequestConstant.java | 5 + .../java/imserver/request/RequestManager.java | 110 +++++++++++++++++++++ 26 files changed, 342 insertions(+), 105 deletions(-) create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java delete mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java delete mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java delete mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntityNoKey.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java create mode 100644 src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java b/src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java new file mode 100644 index 0000000..fdce2ee --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java @@ -0,0 +1,12 @@ +package cn.org.bjca.trust.java.imserver.bean.group; + +import lombok.Data; + +import java.util.List; + +@Data +public class GroupCreateData { + private String groupName; + private String faceUrl; + private List userIdList; +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java b/src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java deleted file mode 100644 index 1592ab1..0000000 --- a/src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.org.bjca.trust.java.imserver.common; - -public class RequestManager { - private static final class RequestManagerHolder { - static final RequestManager instance = new RequestManager(); - } - - public static RequestManager getInstance() { - return RequestManagerHolder.instance; - } - - public void getHistoryForMsg(String appId, String userId, int pageSize, long timestamp){ - - } - -} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java b/src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java new file mode 100644 index 0000000..acb9569 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java @@ -0,0 +1,22 @@ +package cn.org.bjca.trust.java.imserver.controller.group.v1; + +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.common.json.GsonImplHelp; +import cn.org.bjca.trust.java.imserver.request.RequestManager; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.*; + +import static cn.org.bjca.trust.java.imserver.request.RequestConstant.Group_create_v1; + +@RestController +@RequestMapping("group/v1") +public class GroupV1Controller { + + @PostMapping("/create") + public HttpResult create(@RequestBody GroupCreateData groupCreateData, @RequestHeader HttpHeaders headers) throws Exception { + System.out.println(GsonImplHelp.get().toJson(groupCreateData)); + return RequestManager.getInstance().request(Group_create_v1, groupCreateData, headers); + } + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java deleted file mode 100644 index 39673e3..0000000 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.org.bjca.trust.java.imserver.entitys; - -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; - -/** - * 所有类的超类 - * 自动更新创建时间和更新时间 - * - * @author peter - **/ -@MappedSuperclass -@EntityListeners(value = AuditingEntityListener.class) -@Getter -@Setter -public abstract class AbstractBaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long _id; - - @CreatedDate - @Column(nullable = false, updatable = false) - private LocalDateTime createTime; - @LastModifiedDate - @Column() - private LocalDateTime updateTime; -} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntityNoKey.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntityNoKey.java deleted file mode 100644 index 36a732e..0000000 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntityNoKey.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.org.bjca.trust.java.imserver.entitys; - -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; - -/** - * 所有类的超类 - * 自动更新创建时间和更新时间 - * - * @author peter - **/ -@MappedSuperclass -@EntityListeners(value = AuditingEntityListener.class) -@Getter -@Setter -public abstract class AbstractBaseTimeEntityNoKey { - - @CreatedDate - @Column(nullable = false, updatable = false) - private LocalDateTime createTime; - @LastModifiedDate - @Column() - private LocalDateTime updateTime; -} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java index 1b62676..8f86b70 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java @@ -1,9 +1,9 @@ package cn.org.bjca.trust.java.imserver.entitys; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity; import jakarta.persistence.Entity; import lombok.Data; -import org.springframework.lang.NonNull; @Entity @Data diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java new file mode 100644 index 0000000..bebcb14 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java @@ -0,0 +1,33 @@ +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.StringListConverter; +import jakarta.persistence.Convert; +import jakarta.persistence.Entity; +import lombok.Data; + +import java.util.List; + +@Entity +@Data +public class GroupEntity extends AbstractBaseTimeEntity { + private String appId; + private String adminId; + private String userId; + private String groupId; + private String groupName; + private String faceUrl; + + public GroupEntity() { + } + + public GroupEntity(String appId, String adminId, String userId, String groupId, String groupName, String faceUrl) { + this.appId = appId; + this.adminId = adminId; + this.userId = userId; + this.groupId = groupId; + this.groupName = groupName; + this.faceUrl = faceUrl; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java index 7499d4e..e19d773 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java @@ -1,6 +1,7 @@ package cn.org.bjca.trust.java.imserver.entitys; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntityNoKey; import jakarta.persistence.*; import lombok.Data; diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java new file mode 100644 index 0000000..0a5f30e --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java @@ -0,0 +1,33 @@ +package cn.org.bjca.trust.java.imserver.entitys.converter; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +/** + * 所有类的超类 + * 自动更新创建时间和更新时间 + * + * @author peter + **/ +@MappedSuperclass +@EntityListeners(value = AuditingEntityListener.class) +@Getter +@Setter +public abstract class AbstractBaseTimeEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long _id; + + @CreatedDate + @Column(nullable = false, updatable = false) + private LocalDateTime createTime; + @LastModifiedDate + @Column() + private LocalDateTime updateTime; +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java new file mode 100644 index 0000000..55b5b8d --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java @@ -0,0 +1,30 @@ +package cn.org.bjca.trust.java.imserver.entitys.converter; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +/** + * 所有类的超类 + * 自动更新创建时间和更新时间 + * + * @author peter + **/ +@MappedSuperclass +@EntityListeners(value = AuditingEntityListener.class) +@Getter +@Setter +public abstract class AbstractBaseTimeEntityNoKey { + + @CreatedDate + @Column(nullable = false, updatable = false) + private LocalDateTime createTime; + @LastModifiedDate + @Column() + private LocalDateTime updateTime; +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java new file mode 100644 index 0000000..5a8361b --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java @@ -0,0 +1,25 @@ +package cn.org.bjca.trust.java.imserver.entitys.converter; + +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +import java.util.Arrays; +import java.util.List; + + +import static java.util.Collections.*; + +@Converter +public class StringListConverter implements AttributeConverter, String> { + private static final String SPLIT_CHAR = "-><-"; + + @Override + public String convertToDatabaseColumn(List stringList) { + return stringList != null ? String.join(SPLIT_CHAR, stringList) : ""; + } + + @Override + public List convertToEntityAttribute(String string) { + return string != null ? Arrays.asList(string.split(SPLIT_CHAR)) : emptyList(); + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java index 22f611e..c000bde 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java @@ -1,6 +1,6 @@ package cn.org.bjca.trust.java.imserver.entitys.sys; -import cn.org.bjca.trust.java.imserver.entitys.AbstractBaseTimeEntity; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity; import jakarta.persistence.Entity; import jakarta.persistence.Table; import lombok.Data; diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java index d152342..f1d7054 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java @@ -1,6 +1,6 @@ package cn.org.bjca.trust.java.imserver.entitys.sys; -import cn.org.bjca.trust.java.imserver.entitys.AbstractBaseTimeEntity; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity; import jakarta.persistence.Entity; import jakarta.persistence.Table; import lombok.Data; diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java index 58ae137..5768053 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java @@ -7,11 +7,13 @@ 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.RequestMessage; 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.MessageRepository; import cn.org.bjca.trust.java.imserver.repository.UserRepository; +import cn.org.bjca.trust.java.imserver.request.RequestManager; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; @@ -69,28 +71,30 @@ public class ImManager { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { String msg = new String(message.getPayload()); + System.out.println("======>messageArrived:\n" + topic + "::" + msg); if (topic.equals("server" + PacketType.CONNECT)) { sendConnectedMsg(GsonImplHelp.get().toObject(msg, ConnectMessage.class)); } else if (topic.equals("server" + PacketType.SEND)) { SZYXMessage szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class); - - SZYXMessage message1 = szyxMessage.copy(); + szyxMessage.setStatus(0); + szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId()); try { - messageRepository.save(message1); + messageRepository.save(szyxMessage.copy()); } catch (Exception e) { System.out.println("--------------" + e.getMessage()); } - if (!szyxMessage.isGroup()) { -// List userInfoList = userRepository.findAllByUserIdAndAppId(szyxMessage.getToClientId(), szyxMessage.getAppId()); - -// for (UserInfo userInfo : userInfoList) { - - message1.setUserName(szyxMessage.getToClientId()); - message1.setArrive(true); - message1.setStatus(0); -// sendPacketMessage(szyxMessage.getPacketType(), message1); -// } + SZYXMessage message1 = szyxMessage.copy(); + message1.setArrive(true); + message1.setStatus(1); + if (szyxMessage.isGroup()) { + } else { + message1.setUserName(message1.getToClientId()); + try { + messageRepository.save(message1); + } catch (Exception e) { + System.out.println("--------------" + e.getMessage()); + } sendPacketMessage(szyxMessage.getPacketType(), message1); } // TODO: 这里应该有计时器,判断转发消息是否送达,如果没送达则ack返回失败状态 @@ -98,9 +102,8 @@ public class ImManager { }// 数据请求 else if (topic.equals("server" + PacketType.REQUEST)) { - - } else - System.out.println("======>messageArrived:\n" + topic + "::" + msg); + sendPacketMessage(PacketType.RESULT, RequestManager.getInstance().request(msg)); + } } @@ -140,7 +143,6 @@ public class ImManager { message.setAppId(connectMessage.getAppId()); message.setUserName(connectMessage.getUserName()); sendPacketMessage(PacketType.CONNECTED, message); - System.out.println("======>登录成功\n" + GsonImplHelp.get().toJson(message)); } private void sendAckMsg(SZYXMessage szyxMessage) { diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java index 980919a..1b81037 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java @@ -1,7 +1,7 @@ package cn.org.bjca.trust.java.imserver.im.bean; -import cn.org.bjca.trust.java.imserver.entitys.AbstractBaseTimeEntity; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity; import cn.org.bjca.trust.java.imserver.enums.PacketType; import jakarta.persistence.MappedSuperclass; import lombok.Data; @@ -22,6 +22,7 @@ public abstract class PacketMessage extends AbstractBaseTimeEntity { private long timestamp = System.currentTimeMillis(); private String appId; private String userName; + private String osType; private String token; public PacketMessage(PacketType packetType) { diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java index 01f71dd..bc4cad8 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java @@ -18,7 +18,7 @@ public class ConnectMessage extends PacketMessage { } @OneToOne(cascade = CascadeType.ALL) - @JoinColumn(referencedColumnName = "_id") + @JoinColumn private DeviceEntity device; public ConnectMessage(DeviceEntity device) { diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java index db5ddcd..5237fbd 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java @@ -7,12 +7,13 @@ import jakarta.persistence.Entity; import lombok.Data; @Data +@Entity public class RequestMessage extends PacketMessage { public RequestMessage() { super(PacketType.REQUEST); } private String path; - private Object requestBody; + private String body; } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java new file mode 100644 index 0000000..c559346 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java @@ -0,0 +1,18 @@ +package cn.org.bjca.trust.java.imserver.im.msg; + + +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; +import lombok.Data; + +@Data +public class ResultMessage extends PacketMessage { + public ResultMessage() { + super(PacketType.RESULT); + } + + private String path; + private String body; + private String ackId; + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java index eaf2cfe..594e9c1 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java @@ -26,8 +26,9 @@ public class SZYXMessage extends PacketMessage { * 发送者信息 */ @OneToOne - @JoinColumn(referencedColumnName = "token") + @JoinColumn private UserInfo fromClient; + private String fromClientId; /** * 接收者信息 */ @@ -59,7 +60,7 @@ public class SZYXMessage extends PacketMessage { private MsgType msgType; @OneToOne(cascade = CascadeType.ALL) - @JoinColumn(name = "text_id", referencedColumnName = "_id") + @JoinColumn private SZYXTextMessage textMessage; public SZYXMessage copy() { @@ -71,6 +72,7 @@ public class SZYXMessage extends PacketMessage { szyxMessage.setAppId(this.getAppId()); szyxMessage.setToken(this.getToken()); + szyxMessage.setFromClientId(this.getFromClientId()); szyxMessage.setArrive(this.isArrive()); szyxMessage.setDescribe(this.getDescribe()); szyxMessage.setMsgType(this.getMsgType()); diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java index 2b0aa8d..4854244 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java @@ -1,6 +1,6 @@ package cn.org.bjca.trust.java.imserver.im.msg.msg.message; -import cn.org.bjca.trust.java.imserver.entitys.AbstractBaseTimeEntity; +import cn.org.bjca.trust.java.imserver.entitys.converter.AbstractBaseTimeEntity; import jakarta.persistence.Entity; import lombok.Data; diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java new file mode 100644 index 0000000..e97610b --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java @@ -0,0 +1,15 @@ +package cn.org.bjca.trust.java.imserver.repository; + +import cn.org.bjca.trust.java.imserver.entitys.GroupEntity; +import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface GroupRepository extends JpaRepository { + + GroupEntity getGroupEntityByGroupIdAndAppId(String groupId, String appId); + boolean existsByGroupIdAndAppId(String groupId, String appId); +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java index 7d17fa3..10f5ea8 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java @@ -4,7 +4,10 @@ import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface MessageRepository extends JpaRepository { + List getAllByAppIdAndUserName(String appId, String userName); } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java index a12afa0..6a5c816 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java @@ -12,4 +12,6 @@ public interface UserRepository extends JpaRepository { UserInfo findUserInfoByUserIdAndOsTypeAndAppId(String userId, String osType, String appId); List findAllByUserIdAndAppId(String userId, String appId); + + boolean existsByAppIdAndUserId(String appId, String userId); } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java index 8405ec5..b6ae606 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java @@ -8,4 +8,5 @@ import org.springframework.stereotype.Repository; public interface ApplicationRepository extends JpaRepository { ApplicationEntity findFirstByAppNameAndTenantNo(String appName, String tenantNo); ApplicationEntity findFirstByAppId(String appId); + boolean existsByAppId(String appId); } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java b/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java new file mode 100644 index 0000000..5d9158b --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java @@ -0,0 +1,5 @@ +package cn.org.bjca.trust.java.imserver.request; + +public class RequestConstant { + public static final String Group_create_v1 = "/group/v1/create"; +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java b/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java new file mode 100644 index 0000000..b7f0dc0 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java @@ -0,0 +1,110 @@ +package cn.org.bjca.trust.java.imserver.request; + +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.common.SpringUtilsAuTo; +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.entitys.GroupEntity; +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.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.tenant.ApplicationRepository; +import org.springframework.http.HttpHeaders; + +import java.util.UUID; + +import static cn.org.bjca.trust.java.imserver.request.RequestConstant.Group_create_v1; + +public class RequestManager { + private static final class RequestManagerHolder { + static final RequestManager instance = new RequestManager(); + } + + public static RequestManager getInstance() { + return RequestManagerHolder.instance; + } + + public ResultMessage request(String msg) { + try { + RequestMessage requestMessage = GsonImplHelp.get().toObject(msg, RequestMessage.class); + ResultMessage resultMessage = new ResultMessage(); + resultMessage.setPath(requestMessage.getPath()); + resultMessage.setAckId(requestMessage.getMsgId()); + resultMessage.setAppId(requestMessage.getAppId()); + resultMessage.setUserName(requestMessage.getUserName()); + String body = GsonImplHelp.get().toJson(this.request(requestMessage.getAppId(), + requestMessage.getUserName(), + requestMessage.getOsType(), + requestMessage.getPath(), + requestMessage.getBody())); + resultMessage.setBody(body); + return resultMessage; + } catch (Exception e) { + return new ResultMessage(); + } + } + + public HttpResult request(String path, Object data, HttpHeaders headers) { + + return this.request(headers.getFirst("appid"), headers.getFirst("userid"), headers.getFirst("ostype"), path, data); + } + + @SuppressWarnings("unchecked") + private HttpResult request(String appId, String userId, String osType, String path, Object data) { + + if (null != appId && null != userId && null != osType) { + if (!applicationRepository.existsByAppId(appId)) return new HttpResult<>(201, "appId不存在", null); + if (!userRepository.existsByAppIdAndUserId(appId, userId)) + return new HttpResult<>(201, "当前用户不存在", null); + switch (path) { + case Group_create_v1: + return (HttpResult) this.groupCreate(data instanceof String ? + GsonImplHelp.get().toObject((String) data, GroupCreateData.class) + : (GroupCreateData) data, appId, userId); + default: + return new HttpResult<>(201, "路径错误", null); + } + + } else return new HttpResult<>(201, "参数错误", null); + + } + + + private final UserRepository userRepository = SpringUtilsAuTo.getBean(UserRepository.class); + private final GroupRepository groupRepository = SpringUtilsAuTo.getBean(GroupRepository.class); + private final ApplicationRepository applicationRepository = SpringUtilsAuTo.getBean(ApplicationRepository.class); + private final MessageRepository messageRepository = SpringUtilsAuTo.getBean(MessageRepository.class); + + + public HttpResult groupCreate(GroupCreateData data, String appid, String userid) { + if (null == data.getUserIdList() || data.getUserIdList().isEmpty() || data.getUserIdList().size() < 2) { + return new HttpResult<>(201, "群组成员需要大于一", ""); + } else { + String groupId = UUID.randomUUID().toString(); + String groupName = data.getGroupName(); + if (null == groupName || groupName.equals("")) groupName = TimeHelper.getTimeString("yyyyMMddHHmm"); + if (!data.getUserIdList().contains(userid)) { + addGroup(appid, groupId, groupName, data.getFaceUrl(), userid, userid); + } + for (String userId : data.getUserIdList()) { + if (userRepository.existsByAppIdAndUserId(appid, userId)) { + addGroup(appid, groupId, groupName, data.getFaceUrl(), userId, userid); + } + } + return new HttpResult<>(200, "成功", groupId); + } + } + + private void addGroup(String appId, String groupId, String groupName, String faceUrl, String userId, String adminId) { + GroupEntity groupEntity = new GroupEntity(appId, adminId, userId, groupId, groupName, faceUrl); + groupRepository.save(groupEntity); + } + + public void getHistoryForMsg(String appId, String userId, int pageSize, long timestamp) { + + } + +}