diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserRobotsAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserRobotsAction.java new file mode 100755 index 00000000..fc0abf7b --- /dev/null +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserRobotsAction.java @@ -0,0 +1,49 @@ +/* + * This file is part of the Wildfire Chat package. + * (c) Heavyrain2012 + * + * 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.InputRobotId; +import cn.wildfirechat.pojos.InputUserId; +import cn.wildfirechat.pojos.OutputRobot; +import cn.wildfirechat.pojos.OutputStringList; +import cn.wildfirechat.proto.WFCMessage; +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; + +@Route(APIPath.User_Get_User_Robots) +@HttpMethod("POST") +public class GetUserRobotsAction extends AdminAction { + + @Override + public boolean isTransactionAction() { + return true; + } + + @Override + public boolean action(Request request, Response response) { + if (request.getNettyRequest() instanceof FullHttpRequest) { + InputUserId inputUserId = getRequestBody(request.getNettyRequest(), InputUserId.class); + if (inputUserId != null + && (!StringUtil.isNullOrEmpty(inputUserId.getUserId()))) { + RestResult result = RestResult.ok(new OutputStringList(messagesStore.getUserRobotIds(inputUserId.getUserId()))); + setResponseContent(result, response); + } else { + setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response); + } + } + return true; + } +} diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 3ec27540..bee02851 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -3177,6 +3177,34 @@ public class DatabaseStore { return outList; } + List getUserRobotIds(String userId) { + Connection connection = null; + PreparedStatement statement = null; + ResultSet rs = null; + List outList = new ArrayList<>(); + try { + connection = DBUtil.getConnection(); + String sql = "select _uid from t_robot where _owner = ? and _state = 0"; + statement = connection.prepareStatement(sql); + + int index = 1; + statement.setString(1, userId); + + rs = statement.executeQuery(); + while (rs.next()) { + outList.add(rs.getString(1)); + } + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Utility.printExecption(LOG, e, RDBS_Exception); + } finally { + DBUtil.closeDB(connection, statement, rs); + } + return outList; + } + + Set getAllEnds(boolean fromUserTable) { Connection connection = null; PreparedStatement statement = null; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 76f17c0c..6654c648 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -3249,6 +3249,11 @@ public class MemoryMessagesStore implements IMessagesStore { return databaseStore.getAllUsers(count, offset); } + @Override + public List getUserRobotIds(String userId) { + return databaseStore.getUserRobotIds(userId); + } + // 电话号码校验正则表达式(支持中国大陆手机号和固话) private static final String PHONE_REGEX = "^\\s*" + // 允许开头空白 "(?:" + diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index f713fc9a..2b1da690 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -157,6 +157,7 @@ public interface IMessagesStore { ErrorCode searchUser(String userId, String keyword, int searchType, int userType, int page, List users); List getUserInfoList(int count, int offset); + List getUserRobotIds(String userId); boolean updateSystemSetting(int id, String value, String desc); SystemSettingPojo getSystemSetting(int id); diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index dfc3609f..60ffa517 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -179,6 +179,7 @@ public class MessagesPublisher { message = m_messagesStore.getMessage(messageId); } OutputMessageData outputMessageData = getOutputMessageWithExtraInfo(message, exceptClientId, m_messagesStore.isRobotCallbackWithClientInfo() , m_messagesStore.isRobotCallbackWithSenderInfo(), m_messagesStore.isRobotCallbackWithTargetInfo()); + outputMessageData.setToRobotId(robot.getUid()); Server.getServer().getCallbackScheduler().execute(() -> { try { HttpUtils.httpJsonPost(robot.getCallback(), GsonUtil.gson.toJson(outputMessageData, OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Robot_Message_Callback); diff --git a/common/src/main/java/cn/wildfirechat/common/APIPath.java b/common/src/main/java/cn/wildfirechat/common/APIPath.java index f043631f..03a31f83 100644 --- a/common/src/main/java/cn/wildfirechat/common/APIPath.java +++ b/common/src/main/java/cn/wildfirechat/common/APIPath.java @@ -38,6 +38,7 @@ public interface APIPath { String User_Get_Email_Info = "/admin/user/get_info_by_email"; String User_Get_All = "/admin/user/all"; String User_Get_Robot_Info = "/admin/user/get_robot_info"; + String User_Get_User_Robots = "/admin/user/get_user_robots"; String User_Get_Blocked_List = "/admin/user/get_blocked_list"; String User_Check_Block_Status = "/admin/user/check_block_status"; String User_Get_Online_Status = "/admin/user/onlinestatus"; @@ -95,6 +96,7 @@ public interface APIPath { String Group_Set_Manager = "/admin/group/manager/set"; String Group_Mute_Member = "/admin/group/manager/mute"; String Group_Allow_Member = "/admin/group/manager/allow"; + String Group_Join_Request_Add = "/admin/group/join_request/add"; String Get_User_Groups = "/admin/group/of_user"; String Get_User_Groups_By_Type = "/admin/group/of_user_by_type"; String Group_Set_Member_Alias = "/admin/group/member/set_alias"; diff --git a/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java b/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java index 400bbe65..1a557c6e 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java +++ b/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java @@ -27,6 +27,8 @@ public class OutputMessageData { private PojoGroupInfo targetGroupInfo; private OutputGetChannelInfo targetChannelInfo; + private String toRobotId; + public String getSender() { return sender; } @@ -119,6 +121,14 @@ public class OutputMessageData { return fromProtoMessage(protoMessage, null); } + public String getToRobotId() { + return toRobotId; + } + + public void setToRobotId(String toRobotId) { + this.toRobotId = toRobotId; + } + public static OutputMessageData fromProtoMessage(WFCMessage.Message protoMessage, OutputClient fromClient) { OutputMessageData data = new OutputMessageData(); data.messageId = protoMessage.getMessageId(); diff --git a/common/src/main/java/cn/wildfirechat/pojos/mesh/PojoAddJoinGroupRequest.java b/common/src/main/java/cn/wildfirechat/pojos/mesh/PojoAddJoinGroupRequest.java new file mode 100644 index 00000000..fb51be93 --- /dev/null +++ b/common/src/main/java/cn/wildfirechat/pojos/mesh/PojoAddJoinGroupRequest.java @@ -0,0 +1,12 @@ +package cn.wildfirechat.pojos.mesh; + +import java.util.List; + +public class PojoAddJoinGroupRequest { + public String domainId; + public String operator; + public String group_id; + public List userIds; + public String reason; + public String extra; +} diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java index a59d839c..32c53770 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java @@ -141,6 +141,17 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + public static IMResult addJoinGroupRequest(String operator, String groupId, List userIds, String reason, String extra) throws Exception { + String path = APIPath.Group_Join_Request_Add; + PojoAddJoinGroupRequest addGroupMember = new PojoAddJoinGroupRequest(); + addGroupMember.operator = operator; + addGroupMember.group_id = groupId; + addGroupMember.userIds = userIds; + addGroupMember.reason = reason; + addGroupMember.extra = extra; + return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); + } + public static IMResult batchGroupInfos(List groupIds) throws Exception { return GroupAdmin.batchGroupInfos(groupIds); } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java index 42234502..d8d918c5 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java @@ -81,6 +81,13 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, getRobotInfo, OutputRobot.class); } + public static IMResult getUserRobots(String userId) throws Exception { + String path = APIPath.User_Get_User_Robots; + InputUserId getRobotInfo = new InputUserId(); + getRobotInfo.setUserId(userId); + return AdminHttpUtils.httpJsonPost(path, getRobotInfo, OutputStringList.class); + } + public static IMResult getUserToken(String userId, String clientId, int platform) throws Exception { String path = APIPath.User_Get_Token; InputGetToken getToken = new InputGetToken(userId, clientId, platform);