group member和friend request中添加extra字段

This commit is contained in:
imhao183
2021-05-17 19:42:49 +08:00
parent 40e9d108ad
commit d8670a0f66
15 changed files with 1038 additions and 186 deletions
@@ -0,0 +1,2 @@
alter table `t_group_member` add column `_extra` TEXT DEFAULT NULL;
alter table `t_friend_request` add column `_extra` TEXT DEFAULT NULL;
@@ -0,0 +1,2 @@
alter table `t_group_member` add column `_extra` TEXT DEFAULT NULL;
alter table `t_friend_request` add column `_extra` TEXT DEFAULT NULL;
@@ -62,6 +62,7 @@ public class GetGroupMembersAction extends AdminAction {
pm.setMember_id(member.getMemberId());
pm.setAlias(member.getAlias());
pm.setType(member.getType());
pm.setExtra(member.getExtra());
out.getMembers().add(pm);
}
result = RestResult.ok(out);
@@ -66,6 +66,7 @@ public class GetGroupMembersAction extends RobotAction {
pm.setMember_id(member.getMemberId());
pm.setAlias(member.getAlias());
pm.setType(member.getType());
pm.setExtra(member.getExtra());
out.getMembers().add(pm);
}
if(!isInGroup) {
@@ -22,7 +22,7 @@ public class AddGroupMember extends GroupHandler<WFCMessage.AddGroupMemberReques
@Override
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.AddGroupMemberRequest request, Qos1PublishHandler.IMCallback callback) {
ErrorCode errorCode = m_messagesStore.addGroupMembers(fromUser, isAdmin, request.getGroupId(), request.getAddedMemberList());
ErrorCode errorCode = m_messagesStore.addGroupMembers(fromUser, isAdmin, request.getGroupId(), request.getAddedMemberList(), request.getExtra());
if (errorCode == ERROR_CODE_SUCCESS) {
if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) {
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
@@ -32,7 +32,7 @@ public class CreateGroupHandler extends GroupHandler<WFCMessage.CreateGroupReque
return ErrorCode.ERROR_CODE_NOT_RIGHT;
}
WFCMessage.GroupInfo groupInfo = m_messagesStore.createGroup(fromUser, request.getGroup().getGroupInfo(), request.getGroup().getMembersList(), isAdmin);
WFCMessage.GroupInfo groupInfo = m_messagesStore.createGroup(fromUser, request.getGroup().getGroupInfo(), request.getGroup().getMembersList(), request.getMemberExtra(), isAdmin);
if (groupInfo != null) {
if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0 && (isAdmin || m_messagesStore.isAllowClientCustomGroupNotification())) {
@@ -332,7 +332,7 @@ public class DatabaseStore {
String sql = "select `_mid`" +
", `_alias`" +
", `_type`" +
", `_dt`, `_create_dt` from t_group_member where _gid = ?";
", `_dt`, `_create_dt`, `_extra` from t_group_member where _gid = ?";
statement = connection.prepareStatement(sql);
statement.setString(1, groupId);
@@ -362,6 +362,10 @@ public class DatabaseStore {
longValue = rs.getLong(index++);
builder.setCreateDt(longValue);
value = rs.getString(index++);
value = (value == null ? "" : value);
builder.setExtra(value);
WFCMessage.GroupMember member = builder.build();
groupMembers.put(groupId, member);
}
@@ -442,7 +446,7 @@ public class DatabaseStore {
try {
connection = DBUtil.getConnection();
String sql = "select `_uid`, `_friend_uid`, `_reason`, `_status`, `_dt`, `_from_read_status`, `_to_read_status` from t_friend_request";
String sql = "select `_uid`, `_friend_uid`, `_reason`, `_status`, `_dt`, `_from_read_status`, `_to_read_status`, `_extra` from t_friend_request";
statement = connection.prepareStatement(sql);
int index;
@@ -476,6 +480,9 @@ public class DatabaseStore {
intvalue = rs.getInt(index++);
builder.setToReadStatus(intvalue > 0);
value = rs.getString(index++);
value = (value == null ? "" : value);
builder.setExtra(value);
WFCMessage.FriendRequest request = builder.build();
requestMap.put(request.getFromUid(), request);
@@ -1713,11 +1720,12 @@ public class DatabaseStore {
", `_mid`" +
", `_alias`" +
", `_type`" +
", `_dt`, `_create_dt`) values(?, ?, ?, ?, ?, ?)" +
", `_dt`, `_create_dt`, `_extra`) values(?, ?, ?, ?, ?, ?,?)" +
" ON DUPLICATE KEY UPDATE " +
"`_alias` = ?," +
"`_type` = ?," +
"`_dt` = ?";
"`_dt` = ?," +
"`_extra` = ?";
if(updateCreateTime) {
sql += ", `_create_dt` = ?";
}
@@ -1738,9 +1746,11 @@ public class DatabaseStore {
statement.setInt(index++, member.getType());
statement.setLong(index++, dt);
statement.setLong(index++, member.getCreateDt());
statement.setString(index++, member.getExtra());
statement.setString(index++, member.getAlias());
statement.setInt(index++, member.getType());
statement.setLong(index++, dt);
statement.setString(index++, member.getExtra());
if(updateCreateTime) {
statement.setLong(index++, dt);
}
@@ -2680,14 +2690,14 @@ public class DatabaseStore {
", `_status`" +
", `_dt`" +
", `_from_read_status`" +
", `_to_read_status` from t_friend_request where `_uid` = ? UNION ALL " +
", `_to_read_status`, `_extra` from t_friend_request where `_uid` = ? UNION ALL " +
"select `_uid`" +
", `_friend_uid`" +
", `_reason`" +
", `_status`" +
", `_dt`" +
", `_from_read_status`" +
", `_to_read_status` from t_friend_request where `_friend_uid` = ?";
", `_to_read_status`, `_extra` from t_friend_request where `_friend_uid` = ?";
statement = connection.prepareStatement(sql);
int index = 1;
@@ -2725,6 +2735,10 @@ public class DatabaseStore {
b = rs.getBoolean(index++);
builder.setToReadStatus(b);
value = rs.getString(index++);
value = (value == null ? "" : value);
builder.setExtra(value);
out.add(builder.build());
}
return out;
@@ -2772,13 +2786,14 @@ public class DatabaseStore {
PreparedStatement statement = null;
try {
connection = DBUtil.getConnection();
String sql = "insert into t_friend_request (`_uid`, `_friend_uid`, `_reason`, `_status`, `_dt`, `_from_read_status`, `_to_read_status`) values(?, ?, ?, ?, ?, ?, ?)" +
String sql = "insert into t_friend_request (`_uid`, `_friend_uid`, `_reason`, `_status`, `_dt`, `_from_read_status`, `_to_read_status`, `_extra`) values(?, ?, ?, ?, ?, ?, ?, ?)" +
" ON DUPLICATE KEY UPDATE " +
"`_reason` = ?," +
"`_status` = ?," +
"`_dt` = ?," +
"`_from_read_status` = ?," +
"`_to_read_status` = ?";
"`_to_read_status` = ?," +
"`_extra` = ?";
statement = connection.prepareStatement(sql);
int index = 1;
@@ -2789,12 +2804,14 @@ public class DatabaseStore {
statement.setLong(index++, request.getUpdateDt());
statement.setInt(index++, request.getFromReadStatus() ? 1 : 0);
statement.setInt(index++, request.getToReadStatus() ? 1 : 0);
statement.setString(index++, request.getExtra());
statement.setString(index++, request.getReason());
statement.setInt(index++, request.getStatus());
statement.setLong(index++, request.getUpdateDt());
statement.setInt(index++, request.getFromReadStatus() ? 1 : 0);
statement.setInt(index++, request.getToReadStatus() ? 1 : 0);
statement.setString(index++, request.getExtra());
int count = statement.executeUpdate();
LOG.info("Update rows {}", count);
} catch (SQLException e) {
@@ -934,7 +934,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public WFCMessage.GroupInfo createGroup(String fromUser, WFCMessage.GroupInfo groupInfo, List<WFCMessage.GroupMember> memberList, boolean isAdmin) {
public WFCMessage.GroupInfo createGroup(String fromUser, WFCMessage.GroupInfo groupInfo, List<WFCMessage.GroupMember> memberList, String memberExtra, boolean isAdmin) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
@@ -956,19 +956,39 @@ public class MemoryMessagesStore implements IMessagesStore {
List<WFCMessage.GroupMember> updatedMemberList = new ArrayList<>();
boolean hasOwnerMember = false;
for (WFCMessage.GroupMember member : memberList) {
WFCMessage.GroupMember.Builder builder = member.toBuilder();
builder.setUpdateDt(dt).setCreateDt(dt);
if (member.getMemberId().equals(owner)) {
member = member.toBuilder().setUpdateDt(dt).setCreateDt(dt).setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner).build();
builder.setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner);
hasOwnerMember = true;
} else {
member = member.toBuilder().setUpdateDt(dt).setCreateDt(dt).build();
if (isAdmin) {
if (member.getType() == GroupMemberType_Owner) {
builder.setType(GroupMemberType_Normal);
LOG.error("group member conflicted, group info owner is {}, and group member {} type is owner, set the member to normal member", owner, member.getMemberId());
}
} else {
builder.setType(GroupMemberType_Normal);
}
}
if(!StringUtil.isNullOrEmpty(memberExtra)) {
builder.setExtra(memberExtra);
}
member = builder.build();
groupMembers.put(groupId, member);
updatedMemberList.add(member);
dt++;
}
if(!hasOwnerMember && !StringUtil.isNullOrEmpty(owner)) {
WFCMessage.GroupMember member = WFCMessage.GroupMember.newBuilder().setMemberId(owner).setUpdateDt(dt).setCreateDt(dt).setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner).build();
WFCMessage.GroupMember member;
if(!StringUtil.isNullOrEmpty(memberExtra)) {
member = WFCMessage.GroupMember.newBuilder().setMemberId(owner).setExtra(memberExtra).setUpdateDt(dt).setCreateDt(dt).setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner).build();
} else {
member = WFCMessage.GroupMember.newBuilder().setMemberId(owner).setUpdateDt(dt).setCreateDt(dt).setType(ProtoConstants.GroupMemberType.GroupMemberType_Owner).build();
}
groupMembers.put(groupId, member);
updatedMemberList.add(member);
}
@@ -1112,7 +1132,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List<WFCMessage.GroupMember> memberList) {
public ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List<WFCMessage.GroupMember> memberList, String extra) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
@@ -1169,18 +1189,24 @@ public class MemoryMessagesStore implements IMessagesStore {
List<WFCMessage.GroupMember> tmp = new ArrayList<>();
ArrayList<String> newInviteUsers = new ArrayList<>();
for (WFCMessage.GroupMember member : memberList) {
WFCMessage.GroupMember.Builder builder = member.toBuilder();
builder.setUpdateDt(updateDt).setCreateDt(updateDt);
if (member.getMemberId().equals(groupInfo.getOwner())) {
member = member.toBuilder().setType(GroupMemberType_Owner).setUpdateDt(updateDt).setCreateDt(updateDt).build();
builder.setType(GroupMemberType_Owner).build();
} else {
if (isAdmin) {
if (member.getType() != GroupMemberType_Owner)
member = member.toBuilder().setUpdateDt(updateDt).setCreateDt(updateDt).build();
else
return ErrorCode.INVALID_PARAMETER;
if (member.getType() == GroupMemberType_Owner) {
builder.setType(GroupMemberType_Normal);
LOG.error("group member conflicted, group info owner is {}, and group member {} type is owner, set the member to normal member", groupInfo.getOwner(), member.getMemberId());
}
} else {
member = member.toBuilder().setType(GroupMemberType_Normal).setUpdateDt(updateDt).setCreateDt(updateDt).build();
builder.setType(GroupMemberType_Normal);
}
}
if(!StringUtil.isNullOrEmpty(extra)) {
builder.setExtra(extra);
}
member = builder.build();
tmp.add(member);
newInviteUsers.add(member.getMemberId());
updateDt++;
@@ -2650,6 +2676,7 @@ public class MemoryMessagesStore implements IMessagesStore {
.setFromUid(userId)
.setToUid(request.getTargetUid())
.setReason(request.getReason())
.setExtra(request.getExtra())
.setStatus(ProtoConstants.FriendRequestStatus.RequestStatus_Sent)
.setToReadStatus(false)
.setUpdateDt(System.currentTimeMillis())
@@ -106,8 +106,8 @@ public interface IMessagesStore {
WFCMessage.PullMessageResult fetchMessage(String user, String exceptClientId, long fromMessageId, int pullType);
WFCMessage.PullMessageResult loadRemoteMessages(String user, WFCMessage.Conversation conversation, long beforeUid, int count);
long insertUserMessages(String sender, int conversationType, String target, int line, int messageContentType, String userId, long messageId);
WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo groupInfo, List<WFCMessage.GroupMember> memberList, boolean isAdmin);
ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List<WFCMessage.GroupMember> memberList);
WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo groupInfo, List<WFCMessage.GroupMember> memberList, String memberExtra, boolean isAdmin);
ErrorCode addGroupMembers(String operator, boolean isAdmin, String groupId, List<WFCMessage.GroupMember> memberList, String extra);
ErrorCode kickoffGroupMembers(String operator, boolean isAdmin, String groupId, List<String> memberList);
ErrorCode quitGroup(String operator, String groupId);
void clearUserGroups(String userId);
@@ -40,7 +40,8 @@ public enum ErrorCode {
ERROR_CODE_ALREADY_FRIENDS(23, "already friends"),
ERROR_CODE_RECALL_TIME_EXPIRED(24, "recall time expired"),
ERROR_CODE_RECALL_TIME_EXPIRED(24, "time expired"),
ERROR_CODE_CONFERENCE_ROOM_NOT_EXIST(60, "conference room not exist"),
ERROR_CODE_API_NOT_SIGNED(239, "api not signed or sign parameter not completion"),
ERROR_CODE_GROUP_EXCEED_MAX_MEMBER_COUNT(240, "group exceed max member count"),
@@ -47,6 +47,9 @@ public class InputAddGroupMember extends InputGroupBase {
groupMemberBuilder.setAlias(pojoGroupMember.getAlias());
}
groupMemberBuilder.setType(pojoGroupMember.getType());
if(!StringUtil.isNullOrEmpty(pojoGroupMember.getExtra())) {
groupMemberBuilder.setExtra(pojoGroupMember.getExtra());
}
addGroupBuilder.addAddedMember(groupMemberBuilder);
}
@@ -67,6 +67,9 @@ public class InputCreateGroup extends InputGroupBase {
groupMemberBuilder.setAlias(pojoGroupMember.getAlias());
}
groupMemberBuilder.setType(pojoGroupMember.getType());
if(!StringUtil.isNullOrEmpty(pojoGroupMember.getExtra())) {
groupMemberBuilder.setExtra(pojoGroupMember.extra);
}
groupBuilder.addMembers(groupMemberBuilder);
}
@@ -12,6 +12,7 @@ public class PojoGroupMember {
String member_id;
String alias;
int type;
String extra;
public String getMember_id() {
return member_id;
@@ -36,4 +37,12 @@ public class PojoGroupMember {
public void setType(int type) {
this.type = type;
}
public String getExtra() {
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
}
@@ -94,6 +94,10 @@ public class ProtoConstants {
int Modify_Group_JoinType = 4;
int Modify_Group_PrivateChat = 5;
int Modify_Group_Searchable = 6;
//仅专业版支持
int Modify_Group_History_Message = 7;
//仅专业版的server api支持
int Modify_Group_Max_Member_Count = 8;
}
//ModifyGroupInfoRequest -> type
File diff suppressed because it is too large Load Diff