创建群组
这个提交包含在:
父节点
3f18c6b7f6
当前提交
e037d174fc
@ -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;
|
||||
}
|
||||
@ -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){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -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,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
|
||||
|
||||
@ -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,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;
|
||||
|
||||
|
||||
@ -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;
|
||||
@ -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;
|
||||
@ -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,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,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;
|
||||
|
||||
@ -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.setStatus(0);
|
||||
szyxMessage.setFromClientId(szyxMessage.getFromClient().getUserId());
|
||||
try {
|
||||
messageRepository.save(szyxMessage.copy());
|
||||
} catch (Exception e) {
|
||||
System.out.println("--------------" + e.getMessage());
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
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);
|
||||
// }
|
||||
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) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -18,7 +18,7 @@ public class ConnectMessage extends PacketMessage {
|
||||
}
|
||||
|
||||
@OneToOne(cascade = CascadeType.ALL)
|
||||
@JoinColumn(referencedColumnName = "_id")
|
||||
@JoinColumn
|
||||
private DeviceEntity device;
|
||||
|
||||
public ConnectMessage(DeviceEntity device) {
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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,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;
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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";
|
||||
}
|
||||
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
正在加载...
在新工单中引用
屏蔽一个用户