Browse Source

创建群组

master
徐勤民 1 year ago
parent
commit
e037d174fc
24 changed files with 281 additions and 44 deletions
  1. +12
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java
  2. +0
    -16
      src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java
  3. +22
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java
  4. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java
  5. +33
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java
  6. +1
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java
  7. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java
  8. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java
  9. +25
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java
  10. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java
  11. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java
  12. +19
    -17
      src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java
  13. +2
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java
  14. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java
  15. +2
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java
  16. +18
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java
  17. +4
    -2
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java
  18. +1
    -1
      src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java
  19. +15
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java
  20. +3
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java
  21. +2
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java
  22. +1
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java
  23. +5
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java
  24. +110
    -0
      src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java

+ 12
- 0
src/main/java/cn/org/bjca/trust/java/imserver/bean/group/GroupCreateData.java View File

@@ -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<String> userIdList;
}

+ 0
- 16
src/main/java/cn/org/bjca/trust/java/imserver/common/RequestManager.java View File

@@ -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){

}

}

+ 22
- 0
src/main/java/cn/org/bjca/trust/java/imserver/controller/group/v1/GroupV1Controller.java View File

@@ -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<String> 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);
}

}

+ 1
- 1
src/main/java/cn/org/bjca/trust/java/imserver/entitys/DeviceEntity.java View File

@@ -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


+ 33
- 0
src/main/java/cn/org/bjca/trust/java/imserver/entitys/GroupEntity.java View File

@@ -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;
}
}

+ 1
- 0
src/main/java/cn/org/bjca/trust/java/imserver/entitys/UserInfo.java View File

@@ -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;



src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java → src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntity.java View File

@@ -1,4 +1,4 @@
package cn.org.bjca.trust.java.imserver.entitys;
package cn.org.bjca.trust.java.imserver.entitys.converter;

import jakarta.persistence.*;
import lombok.Getter;

src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntityNoKey.java → src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/AbstractBaseTimeEntityNoKey.java View File

@@ -1,4 +1,4 @@
package cn.org.bjca.trust.java.imserver.entitys;
package cn.org.bjca.trust.java.imserver.entitys.converter;

import jakarta.persistence.*;
import lombok.Getter;

+ 25
- 0
src/main/java/cn/org/bjca/trust/java/imserver/entitys/converter/StringListConverter.java View File

@@ -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<List<String>, String> {
private static final String SPLIT_CHAR = "-><-";

@Override
public String convertToDatabaseColumn(List<String> stringList) {
return stringList != null ? String.join(SPLIT_CHAR, stringList) : "";
}

@Override
public List<String> convertToEntityAttribute(String string) {
return string != null ? Arrays.asList(string.split(SPLIT_CHAR)) : emptyList();
}
}

+ 1
- 1
src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/ApplicationEntity.java View File

@@ -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;


+ 1
- 1
src/main/java/cn/org/bjca/trust/java/imserver/entitys/sys/TenantEntity.java View File

@@ -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;


+ 19
- 17
src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java View File

@@ -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<UserInfo> 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) {


+ 2
- 1
src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java View File

@@ -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) {


+ 1
- 1
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java View File

@@ -18,7 +18,7 @@ public class ConnectMessage extends PacketMessage {
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(referencedColumnName = "_id")
@JoinColumn
private DeviceEntity device;

public ConnectMessage(DeviceEntity device) {


+ 2
- 1
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/RequestMessage.java View File

@@ -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;

}

+ 18
- 0
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ResultMessage.java View File

@@ -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;

}

+ 4
- 2
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java View File

@@ -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());


+ 1
- 1
src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java View File

@@ -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;



+ 15
- 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/GroupRepository.java View File

@@ -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, Long> {

GroupEntity getGroupEntityByGroupIdAndAppId(String groupId, String appId);
boolean existsByGroupIdAndAppId(String groupId, String appId);
}

+ 3
- 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/MessageRepository.java View File

@@ -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<SZYXMessage, Long> {

List<SZYXMessage> getAllByAppIdAndUserName(String appId, String userName);
}

+ 2
- 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java View File

@@ -12,4 +12,6 @@ public interface UserRepository extends JpaRepository<UserInfo, String> {
UserInfo findUserInfoByUserIdAndOsTypeAndAppId(String userId, String osType, String appId);

List<UserInfo> findAllByUserIdAndAppId(String userId, String appId);

boolean existsByAppIdAndUserId(String appId, String userId);
}

+ 1
- 0
src/main/java/cn/org/bjca/trust/java/imserver/repository/tenant/ApplicationRepository.java View File

@@ -8,4 +8,5 @@ import org.springframework.stereotype.Repository;
public interface ApplicationRepository extends JpaRepository<ApplicationEntity, Long> {
ApplicationEntity findFirstByAppNameAndTenantNo(String appName, String tenantNo);
ApplicationEntity findFirstByAppId(String appId);
boolean existsByAppId(String appId);
}

+ 5
- 0
src/main/java/cn/org/bjca/trust/java/imserver/request/RequestConstant.java View File

@@ -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";
}

+ 110
- 0
src/main/java/cn/org/bjca/trust/java/imserver/request/RequestManager.java View File

@@ -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 <T> HttpResult<T> request(String path, Object data, HttpHeaders headers) {

return this.request(headers.getFirst("appid"), headers.getFirst("userid"), headers.getFirst("ostype"), path, data);
}

@SuppressWarnings("unchecked")
private <T> HttpResult<T> 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<T>) 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<String> 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) {

}

}

Loading…
Cancel
Save