From 728aa97c861e1ebde25be547b25523d039023bb9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 29 Mar 2023 10:19:20 +0800 Subject: [PATCH] group --- pkg/common/db/cache/group.go | 10 +++++++++ pkg/common/db/controller/group.go | 34 +++++++++++++++++++++++-------- pkg/utils/utils_v2.go | 18 ++++++++++++++++ 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/pkg/common/db/cache/group.go b/pkg/common/db/cache/group.go index 8180ba0aa..ab5c3f9b2 100644 --- a/pkg/common/db/cache/group.go +++ b/pkg/common/db/cache/group.go @@ -50,6 +50,8 @@ type GroupCache interface { GetGroupMemberInfo(ctx context.Context, groupID, userID string) (groupMember *relationTb.GroupMemberModel, err error) GetGroupMembersInfo(ctx context.Context, groupID string, userID []string, roleLevel []int32) (groupMembers []*relationTb.GroupMemberModel, err error) GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error) + GetGroupMembersPage(ctx context.Context, groupID string, showNumber, pageNumber int32) (groupMembers []*relationTb.GroupMemberModel, err error) + DelGroupMembersInfo(groupID string, userID ...string) GroupCache GetGroupMemberNum(ctx context.Context, groupID string) (memberNum int64, err error) @@ -302,6 +304,14 @@ func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, groupID strin }) } +func (g *GroupCacheRedis) GetGroupMembersPage(ctx context.Context, groupID string, showNumber, pageNumber int32) (groupMembers []*relationTb.GroupMemberModel, err error) { + groupMemberIDs, err := g.GetGroupMemberIDs(ctx, groupID) + if err != nil { + return nil, err + } + return g.GetGroupMembersInfo(ctx, groupID, utils.Paginate(groupMemberIDs, int(showNumber), int(showNumber)), nil) +} + func (g *GroupCacheRedis) GetAllGroupMembersInfo(ctx context.Context, groupID string) (groupMembers []*relationTb.GroupMemberModel, err error) { groupMemberIDs, err := g.GetGroupMemberIDs(ctx, groupID) if err != nil { diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index fc399af12..c3ea40315 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -185,13 +185,23 @@ func (g *groupDatabase) FindGroupMember(ctx context.Context, groupIDs []string, } func (g *groupDatabase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (total uint32, totalGroupMembers []*relationTb.GroupMemberModel, err error) { - if roleLevels == nil && pageNumber == 0 && showNumber == 0 { - for _, groupID := range groupIDs { - groupMembers, err := g.cache.GetAllGroupMembersInfo(ctx, groupID) - if err != nil { - return 0, nil, err + if roleLevels == nil { + if pageNumber == 0 || showNumber == 0 { + for _, groupID := range groupIDs { + groupMembers, err := g.cache.GetAllGroupMembersInfo(ctx, groupID) + if err != nil { + return 0, nil, err + } + totalGroupMembers = append(totalGroupMembers, groupMembers...) + } + } else { + for _, groupID := range groupIDs { + groupMembers, err := g.cache.GetGroupMembersPage(ctx, groupID, pageNumber, showNumber) + if err != nil { + return 0, nil, err + } + totalGroupMembers = append(totalGroupMembers, groupMembers...) } - totalGroupMembers = append(totalGroupMembers, groupMembers...) } } @@ -230,8 +240,16 @@ func (g *groupDatabase) MapGroupMemberUserID(ctx context.Context, groupIDs []str return g.cache.GetGroupMemberHashMap(ctx, groupIDs) } -func (g *groupDatabase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) { - return g.groupMemberDB.MapGroupMemberNum(ctx, groupIDs) +func (g *groupDatabase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (m map[string]uint32, err error) { + m = make(map[string]uint32) + for _, groupID := range groupIDs { + num, err := g.cache.GetGroupMemberNum(ctx, groupID) + if err != nil { + return nil, err + } + m[groupID] = uint32(num) + } + return m, nil } func (g *groupDatabase) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error { diff --git a/pkg/utils/utils_v2.go b/pkg/utils/utils_v2.go index faf03869a..150a5eb59 100644 --- a/pkg/utils/utils_v2.go +++ b/pkg/utils/utils_v2.go @@ -246,6 +246,24 @@ func Max[E Ordered](e ...E) E { return v } +func Paginate[E any](es []E, pageNumber int, showNumber int) []E { + if pageNumber <= 0 { + return []E{} + } + if showNumber <= 0 { + return []E{} + } + start := (pageNumber - 1) * showNumber + end := start + showNumber + if start >= len(es) { + return []E{} + } + if end > len(es) { + end = len(es) + } + return es[start:end] +} + // BothExistAny 获取切片中共同存在的元素(交集) func BothExistAny[E any, K comparable](es [][]E, fn func(e E) K) []E { if len(es) == 0 {