添加群组成员修改附加信息的功能

This commit is contained in:
heavyrain2012
2021-06-19 11:34:49 +08:00
parent ec03b4632a
commit 7e812a095f
16 changed files with 1602 additions and 82 deletions
@@ -1498,7 +1498,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public ErrorCode modifyGroupAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin) {
public ErrorCode modifyGroupMemberAlias(String operator, String groupId, String alias, String memberId, boolean isAdmin) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
@@ -1582,6 +1582,91 @@ public class MemoryMessagesStore implements IMessagesStore {
return ErrorCode.ERROR_CODE_SUCCESS;
}
@Override
public ErrorCode modifyGroupMemberExtra(String operator, String groupId, String extra, String memberId, boolean isAdmin) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
IMap<String, WFCMessage.GroupInfo> mIMap = hzInstance.getMap(GROUPS_MAP);
WFCMessage.GroupInfo groupInfo = mIMap.get(groupId);
if (groupInfo == null) {
groupInfo = databaseStore.getPersistGroupInfo(groupId);
if (groupInfo != null) {
mIMap.set(groupId, groupInfo);
} else {
return ErrorCode.ERROR_CODE_NOT_EXIST;
}
}
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
if (members == null || members.size() == 0) {
members = loadGroupMemberFromDB(hzInstance, groupId);
}
if (StringUtil.isNullOrEmpty(memberId)) {
memberId = operator;
} else {
if (!isAdmin && !operator.equals(groupInfo.getOwner())) {
WFCMessage.GroupMember operatorMember = null;
WFCMessage.GroupMember targetMember = null;
for (WFCMessage.GroupMember member : members) {
if (member.getMemberId().equals(operator)) {
operatorMember = member;
if (targetMember != null) {
break;
}
}
if ((member.getMemberId().equals(memberId))) {
targetMember = member;
if (operatorMember != null) {
break;
}
}
}
if (operatorMember == null) {
LOG.error("Modify group member extra error, the operator {} is not in group", operator);
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
}
if (targetMember == null) {
LOG.error("Modify group member extra error, the member {} is not in group", memberId);
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
}
if (operatorMember.getType() == GroupMemberType_Manager && targetMember.getType() != GroupMemberType_Manager) {
LOG.error("Modify group member extra error, the operator {} type is {} and the member {} type is {}", operator, operatorMember.getType(), memberId, targetMember.getType());
return ErrorCode.ERROR_CODE_NOT_RIGHT;
}
}
}
long updateDt = System.currentTimeMillis();
boolean inGroup = false;
for (WFCMessage.GroupMember member : members) {
if (member.getMemberId().equals(memberId)) {
groupMembers.remove(groupId, member);
member = member.toBuilder().setExtra(extra).setUpdateDt(updateDt).build();
databaseStore.persistGroupMember(groupId, Arrays.asList(member), false);
databaseStore.updateGroupMemberDt(groupId, updateDt);
groupMembers.put(groupId, member);
mIMap.set(groupId, groupInfo.toBuilder().setUpdateDt(updateDt).setMemberUpdateDt(updateDt).build());
inGroup = true;
break;
}
}
if (!inGroup) {
LOG.error("Modify group member extra error, the member {} is not in group", memberId);
return ErrorCode.ERROR_CODE_NOT_IN_GROUP;
}
callbackGroupMemberEvent(operator, groupId, Arrays.asList(memberId), ProtoConstants.GroupMemberUpdateEventType.Group_Member_Event_Alias, extra);
return ErrorCode.ERROR_CODE_SUCCESS;
}
@Override
public List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> requests) {
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();