添加搜索类型
This commit is contained in:
@@ -20,7 +20,7 @@ import java.util.List;
|
|||||||
public class UserSearchHandler extends IMHandler<WFCMessage.SearchUserRequest> {
|
public class UserSearchHandler extends IMHandler<WFCMessage.SearchUserRequest> {
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) {
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.SearchUserRequest request, Qos1PublishHandler.IMCallback callback) {
|
||||||
List<WFCMessage.User> users = m_messagesStore.searchUser(request.getKeyword(), request.getFuzzy() > 0, request.getPage());
|
List<WFCMessage.User> users = m_messagesStore.searchUser(request.getKeyword(), request.getFuzzy(), request.getPage());
|
||||||
WFCMessage.SearchUserResult.Builder builder = WFCMessage.SearchUserResult.newBuilder();
|
WFCMessage.SearchUserResult.Builder builder = WFCMessage.SearchUserResult.newBuilder();
|
||||||
builder.addAllEntry(users);
|
builder.addAllEntry(users);
|
||||||
byte[] data = builder.build().toByteArray();
|
byte[] data = builder.build().toByteArray();
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import java.util.function.Function;
|
|||||||
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
||||||
import static io.moquette.persistence.MemoryMessagesStore.USER_STATUS;
|
import static io.moquette.persistence.MemoryMessagesStore.USER_STATUS;
|
||||||
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
||||||
|
import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*;
|
||||||
|
|
||||||
public class DatabaseStore {
|
public class DatabaseStore {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(DatabaseStore.class);
|
private static final Logger LOG = LoggerFactory.getLogger(DatabaseStore.class);
|
||||||
@@ -148,8 +149,12 @@ public class DatabaseStore {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
//searchType
|
||||||
List<WFCMessage.User> searchUserFromDB(String keyword, boolean buzzy, int page) {
|
// 0 模糊匹配displayName, 精确匹配账户名和电话号码
|
||||||
|
// 1 精确匹配账户名和电话号码
|
||||||
|
// 2 精确匹配账户名
|
||||||
|
// 3 精确匹配电话号码
|
||||||
|
List<WFCMessage.User> searchUserFromDB(String keyword, int searchType, int page) {
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
@@ -169,18 +174,29 @@ public class DatabaseStore {
|
|||||||
", `_social`" +
|
", `_social`" +
|
||||||
", `_extra`" +
|
", `_extra`" +
|
||||||
", `_dt` from t_user";
|
", `_dt` from t_user";
|
||||||
if (buzzy) {
|
switch (searchType) {
|
||||||
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
case SearchUserType_Name_Mobile:
|
||||||
} else {
|
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
||||||
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
break;
|
||||||
|
case SearchUserType_Name:
|
||||||
|
sql += " where `_name` = ? ";
|
||||||
|
break;
|
||||||
|
case SearchUserType_Mobile:
|
||||||
|
sql += " where `_mobile` = ? ";
|
||||||
|
break;
|
||||||
|
case SearchUserType_General:
|
||||||
|
default:
|
||||||
|
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sql += " and _type <> 2"; //can search normal user(0) and robot(1), can not search things
|
sql += " and _type <> 2"; //can search normal user(0) and robot(1), can not search things
|
||||||
|
|
||||||
if (buzzy) {
|
if (searchType == SearchUserType_Name_Mobile || searchType == SearchUserType_Name || searchType == SearchUserType_Mobile) {
|
||||||
sql += " limit 20";
|
|
||||||
} else {
|
|
||||||
sql += " limit 1";
|
sql += " limit 1";
|
||||||
|
} else {
|
||||||
|
sql += " limit 20";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page > 0) {
|
if (page > 0) {
|
||||||
@@ -190,12 +206,24 @@ public class DatabaseStore {
|
|||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
int index = 1;
|
int index = 1;
|
||||||
if (buzzy) {
|
|
||||||
statement.setString(index++, "%" + keyword + "%");
|
switch (searchType) {
|
||||||
|
case SearchUserType_Name_Mobile:
|
||||||
|
statement.setString(index++, keyword);
|
||||||
|
statement.setString(index++, keyword);
|
||||||
|
break;
|
||||||
|
case SearchUserType_Name:
|
||||||
|
case SearchUserType_Mobile:
|
||||||
|
statement.setString(index++, keyword);
|
||||||
|
break;
|
||||||
|
case SearchUserType_General:
|
||||||
|
default:
|
||||||
|
statement.setString(index++, "%" + keyword + "%");
|
||||||
|
statement.setString(index++, keyword);
|
||||||
|
statement.setString(index++, keyword);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
|
|
||||||
rs = statement.executeQuery();
|
rs = statement.executeQuery();
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
|
|||||||
@@ -1496,8 +1496,8 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return getUserInfo(userId);
|
return getUserInfo(userId);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public List<WFCMessage.User> searchUser(String keyword, boolean buzzy, int page) {
|
public List<WFCMessage.User> searchUser(String keyword, int searchType, int page) {
|
||||||
return databaseStore.searchUserFromDB(keyword, buzzy, page);
|
return databaseStore.searchUserFromDB(keyword, searchType, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public interface IMessagesStore {
|
|||||||
WFCMessage.User getUserInfo(String userId);
|
WFCMessage.User getUserInfo(String userId);
|
||||||
WFCMessage.User getUserInfoByName(String name);
|
WFCMessage.User getUserInfoByName(String name);
|
||||||
WFCMessage.User getUserInfoByMobile(String mobile);
|
WFCMessage.User getUserInfoByMobile(String mobile);
|
||||||
List<WFCMessage.User> searchUser(String keyword, boolean buzzy, int page);
|
List<WFCMessage.User> searchUser(String keyword, int searchType, int page);
|
||||||
|
|
||||||
boolean updateSystemSetting(int id, String value, String desc);
|
boolean updateSystemSetting(int id, String value, String desc);
|
||||||
SystemSettingPojo getSystemSetting(int id);
|
SystemSettingPojo getSystemSetting(int id);
|
||||||
|
|||||||
@@ -132,6 +132,12 @@ public class ProtoConstants {
|
|||||||
int Group_Max_Member_Count = 1;
|
int Group_Max_Member_Count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface SearchUserType {
|
||||||
|
int SearchUserType_General = 0;
|
||||||
|
int SearchUserType_Name_Mobile = 1;
|
||||||
|
int SearchUserType_Name = 2;
|
||||||
|
int SearchUserType_Mobile = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user