diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 0a3856c9b..5d4e62cf7 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -121,14 +121,22 @@ func (s *groupServer) NotificationUserInfoUpdate(ctx context.Context, req *pbgro if err != nil { return nil, err } + groupIDs := make([]string, 0, len(members)) for _, member := range members { if member.Nickname != "" && member.FaceURL != "" { continue } - if err := s.Notification.GroupMemberInfoSetNotification(ctx, member.GroupID, member.UserID); err != nil { - log.ZError(ctx, "setGroupMemberInfo notification failed", err, "member", member.UserID, "groupID", member.GroupID) + groupIDs = append(groupIDs, member.GroupID) + } + log.ZInfo(ctx, "NotificationUserInfoUpdate", "joinGroupNum", len(members), "updateNum", len(groupIDs), "updateGroupIDs", groupIDs) + for _, groupID := range groupIDs { + if err := s.Notification.GroupMemberInfoSetNotification(ctx, groupID, req.UserID); err != nil { + log.ZError(ctx, "NotificationUserInfoUpdate setGroupMemberInfo notification failed", err, "groupID", groupID) } } + if err := s.GroupDatabase.DeleteGroupMemberHash(ctx, groupIDs); err != nil { + log.ZError(ctx, "NotificationUserInfoUpdate DeleteGroupMemberHash", err, "groupID", groupIDs) + } return &pbgroup.NotificationUserInfoUpdateResp{}, nil } diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index f7ded8a2e..6e638193e 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -81,6 +81,7 @@ type GroupDatabase interface { CountTotal(ctx context.Context, before *time.Time) (count int64, err error) // 获取范围内群增量 CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) + DeleteGroupMemberHash(ctx context.Context, groupIDs []string) error } func NewGroupDatabase( @@ -556,3 +557,14 @@ func (g *groupDatabase) FindGroupRequests(ctx context.Context, groupID string, u func (g *groupDatabase) FindNotDismissedGroup(ctx context.Context, groupIDs []string) (groups []*relationtb.GroupModel, err error) { return g.groupDB.FindNotDismissedGroup(ctx, groupIDs) } + +func (g *groupDatabase) DeleteGroupMemberHash(ctx context.Context, groupIDs []string) error { + if len(groupIDs) == 0 { + return nil + } + c := g.cache.NewCache() + for _, groupID := range groupIDs { + c = c.DelGroupMembersHash(groupID) + } + return c.ExecDel(ctx) +}