diff --git a/main.go b/main.go index 0da8243c939993eba91b081129a906e743274fdb..873770eb5e3599adb09d420347bd4d7d30541545 100644 --- a/main.go +++ b/main.go @@ -309,11 +309,18 @@ func (s *server) Levelcast(ctx context.Context, in *userCenter.LevelMessage) (*u uids = append(uids, uid) } } - // 处理分区用户 - levelUserIds := userManager.GetLevelUsers(uids, in.Level) + // 处理等级用户 + levelUserIds, userIds := userManager.GetLevelUsers(uids, in.Level) if len(levelUserIds) <= 0 { return &userCenter.LevelMessageRsp{FailedUids: failed}, nil } + if in.Area > 0 { + // 处理分区用户 + levelUserIds = userManager.GetAreaUsers(userIds, int8(in.Area)) + if len(levelUserIds) <= 0 { + return &userCenter.LevelMessageRsp{FailedUids: failed}, nil + } + } m := make(map[string][]uint64, 0) for uid := range levelUserIds { ok := false diff --git a/manager/userManager.go b/manager/userManager.go index 85cd6106e3daa87eb1741e1a288ed49086c2137c..6576dd973fdc6f0956f08a5d66877ce6f1e97f82 100644 --- a/manager/userManager.go +++ b/manager/userManager.go @@ -138,8 +138,9 @@ func (m *UserManager) GetAreaUsers(userIds []uint64, area int8) map[uint64]UserT // 获取财富等级大于某等级的用户 // 开区间 -func (m *UserManager) GetLevelUsers(userIds []uint64, wealthLevel int32) map[uint64]UserTinyArea { +func (m *UserManager) GetLevelUsers(userIds []uint64, wealthLevel int32) (map[uint64]UserTinyArea, []uint64) { res := make(map[uint64]UserTinyArea) + var resIds []uint64 // 从db中读,暂时不缓存(几千个) var users []UserTinyArea if err := m.MysqlDB.Table("user").Joins("JOIN match_wealth_user_score ON match_wealth_user_score.user_id = user.id"). @@ -148,7 +149,7 @@ func (m *UserManager) GetLevelUsers(userIds []uint64, wealthLevel int32) map[uin Where("match_wealth_user_score.grade > ?", wealthLevel). Find(&users).Error; err != nil { mylogrus.MyLog.Errorf("GetLevelUsers fail:%v", err) - return res + return res, resIds } for _, u := range users { a := m.GetArea(u.Country) @@ -161,6 +162,7 @@ func (m *UserManager) GetLevelUsers(userIds []uint64, wealthLevel int32) map[uin Area: a, Avatar: u.Avatar, } + resIds = append(resIds, u.ID) } - return res + return res, resIds } diff --git a/protocol/userCenter.proto b/protocol/userCenter.proto index 207a5d2cae91b7540dd4082b6941b4a171e5e550..acb6b1ad6da69021366726fc8482245d1c5b9efe 100644 --- a/protocol/userCenter.proto +++ b/protocol/userCenter.proto @@ -136,6 +136,7 @@ message LevelMessage { int32 level = 1; uint32 msgType = 2; bytes payLoad = 3; + int32 area = 4; } message LevelMessageRsp {