群组成员表添加成员索引和获取2个人共同群组的接口
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
alter table `t_group_member` add INDEX `group_member_mid_index` (`_mid`);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
alter table `t_group_member` add INDEX `group_member_mid_index` (`_mid`);
|
||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.xiaoleilu.loServer.action.admin;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.InputUserId;
|
||||||
|
import cn.wildfirechat.pojos.OutputGroupIds;
|
||||||
|
import cn.wildfirechat.pojos.StringPairPojo;
|
||||||
|
import com.xiaoleilu.loServer.RestResult;
|
||||||
|
import com.xiaoleilu.loServer.annotation.HttpMethod;
|
||||||
|
import com.xiaoleilu.loServer.annotation.Route;
|
||||||
|
import com.xiaoleilu.loServer.handler.Request;
|
||||||
|
import com.xiaoleilu.loServer.handler.Response;
|
||||||
|
import io.netty.handler.codec.http.FullHttpRequest;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Route(APIPath.Get_Common_Groups)
|
||||||
|
@HttpMethod("POST")
|
||||||
|
public class GetCommonGroupsAction extends AdminAction {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransactionAction() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Request request, Response response) {
|
||||||
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
|
StringPairPojo input = getRequestBody(request.getNettyRequest(), StringPairPojo.class);
|
||||||
|
if (input != null
|
||||||
|
&& (!StringUtil.isNullOrEmpty(input.getFirst())) && (!StringUtil.isNullOrEmpty(input.getSecond()))) {
|
||||||
|
|
||||||
|
Set<String> groupIds = messagesStore.getCommonGroupIds(input.getFirst(), input.getSecond());
|
||||||
|
OutputGroupIds outputGroupIds = new OutputGroupIds();
|
||||||
|
outputGroupIds.setGroupIds(new ArrayList<>(groupIds));
|
||||||
|
RestResult result = RestResult.ok(outputGroupIds);
|
||||||
|
setResponseContent(result, response);
|
||||||
|
} else {
|
||||||
|
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.moquette.imhandler;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import io.moquette.spi.impl.Qos1PublishHandler;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import win.liyufan.im.IMTopic;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
|
|
||||||
|
@Handler(IMTopic.GetCommonGroupsTopic)
|
||||||
|
public class GetCommonGroupsHandler extends IMHandler<WFCMessage.IDBuf> {
|
||||||
|
@Override
|
||||||
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.IDBuf request, Qos1PublishHandler.IMCallback callback) {
|
||||||
|
WFCMessage.PullUserResult.Builder resultBuilder = WFCMessage.PullUserResult.newBuilder();
|
||||||
|
Set<String> strings = m_messagesStore.getCommonGroupIds(fromUser, request.getId());
|
||||||
|
WFCMessage.IDListBuf idListBuf = WFCMessage.IDListBuf.newBuilder().addAllId(strings).build();
|
||||||
|
byte[] data = idListBuf.toByteArray();
|
||||||
|
ackPayload.ensureWritable(data.length).writeBytes(data);
|
||||||
|
return ERROR_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.moquette.imhandler;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import io.moquette.spi.impl.Qos1PublishHandler;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import win.liyufan.im.IMTopic;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.wildfirechat.common.ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
|
|
||||||
|
@Handler(IMTopic.GetMyGroupsTopic)
|
||||||
|
public class GetMyGroupsHandler extends IMHandler<Void> {
|
||||||
|
@Override
|
||||||
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, Void request, Qos1PublishHandler.IMCallback callback) {
|
||||||
|
WFCMessage.PullUserResult.Builder resultBuilder = WFCMessage.PullUserResult.newBuilder();
|
||||||
|
Set<String> strings = m_messagesStore.getUserGroupIds(fromUser);
|
||||||
|
WFCMessage.IDListBuf idListBuf = WFCMessage.IDListBuf.newBuilder().addAllId(strings).build();
|
||||||
|
byte[] data = idListBuf.toByteArray();
|
||||||
|
ackPayload.ensureWritable(data.length).writeBytes(data);
|
||||||
|
return ERROR_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1712,6 +1712,35 @@ public class DatabaseStore {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<String> getCommonGroupIds(String userId1, String userId2) {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try {
|
||||||
|
connection = DBUtil.getConnection();
|
||||||
|
String sql = "select t1._gid from t_group_member t1, t_group_member t2 where t1._mid = ? and t2._mid = ? and t1._type <> 4 and t2._type <> 4 and t1._gid = t2._gid";
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
|
||||||
|
statement.setString(1, userId1);
|
||||||
|
statement.setString(2, userId2);
|
||||||
|
|
||||||
|
rs = statement.executeQuery();
|
||||||
|
Set<String> out = new HashSet<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
String uid = rs.getString(1);
|
||||||
|
out.add(uid);
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
Utility.printExecption(LOG, e, RDBS_Exception);
|
||||||
|
} finally {
|
||||||
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
void updateGroupMemberDt(final String groupId, final long dt) {
|
void updateGroupMemberDt(final String groupId, final long dt) {
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
|
|||||||
@@ -1831,6 +1831,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return databaseStore.getUserGroupIds(userId);
|
return databaseStore.getUserGroupIds(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getCommonGroupIds(String userId1, String userId2) {
|
||||||
|
return databaseStore.getCommonGroupIds(userId1, userId2);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members) {
|
public ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members) {
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ public interface IMessagesStore {
|
|||||||
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests);
|
List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests);
|
||||||
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
WFCMessage.GroupInfo getGroupInfo(String groupId);
|
||||||
Set<String> getUserGroupIds(String userId);
|
Set<String> getUserGroupIds(String userId);
|
||||||
|
Set<String> getCommonGroupIds(String userId1, String userId2);
|
||||||
ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members);
|
ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt, List<WFCMessage.GroupMember> members);
|
||||||
WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
|
WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
|
||||||
ErrorCode transferGroup(String operator, String groupId, String newOwner, boolean isAdmin);
|
ErrorCode transferGroup(String operator, String groupId, String newOwner, boolean isAdmin);
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ public interface IMTopic {
|
|||||||
String GetGroupMemberTopic = "GPGM";
|
String GetGroupMemberTopic = "GPGM";
|
||||||
String TransferGroupTopic = "GTG";
|
String TransferGroupTopic = "GTG";
|
||||||
String SetGroupManagerTopic = "GSM";
|
String SetGroupManagerTopic = "GSM";
|
||||||
|
String GetMyGroupsTopic = "GMGS";
|
||||||
|
String GetCommonGroupsTopic = "GCGS";
|
||||||
|
|
||||||
String GetUserInfoTopic = "UPUI";
|
String GetUserInfoTopic = "UPUI";
|
||||||
String ModifyMyInfoTopic = "MMI";
|
String ModifyMyInfoTopic = "MMI";
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public interface APIPath {
|
|||||||
String Get_User_Groups = "/admin/group/of_user";
|
String Get_User_Groups = "/admin/group/of_user";
|
||||||
String Group_Set_Member_Alias = "/admin/group/member/set_alias";
|
String Group_Set_Member_Alias = "/admin/group/member/set_alias";
|
||||||
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
||||||
|
String Get_Common_Groups = "/admin/group/common_group";
|
||||||
|
|
||||||
String Create_Channel = "/admin/channel/create";
|
String Create_Channel = "/admin/channel/create";
|
||||||
String Destroy_Channel = "/admin/channel/destroy";
|
String Destroy_Channel = "/admin/channel/destroy";
|
||||||
|
|||||||
@@ -170,4 +170,10 @@ public class GroupAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class);
|
return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputGroupIds> getCommonGroups(String user1, String user2) throws Exception {
|
||||||
|
String path = APIPath.Get_Common_Groups;
|
||||||
|
StringPairPojo intput = new StringPairPojo(user1, user2);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, intput, OutputGroupIds.class);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -617,6 +617,13 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
groupIdsIMResult = GroupAdmin.getCommonGroups("user1", "user2");
|
||||||
|
if (groupIdsIMResult != null && groupIdsIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("get user common groups success");
|
||||||
|
} else {
|
||||||
|
System.out.println("get user common groups failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
//仅专业版支持
|
//仅专业版支持
|
||||||
if (commercialServer) {
|
if (commercialServer) {
|
||||||
|
|||||||
Reference in New Issue
Block a user