diff --git a/domain/model/cp_m/achievement.go b/domain/model/cp_m/achievement.go index 364dca5010cea3b4192bc5bb351ad7459df4194b..57bcbe93d122ce420dae8015baf4e70c248d5f36 100644 --- a/domain/model/cp_m/achievement.go +++ b/domain/model/cp_m/achievement.go @@ -41,10 +41,11 @@ func UpdateCpAchievement(model *domain.Model, cpId, userId1, userId2 mysql.ID, T return model.DB().Model(CpAchievement{}).Where("cp_id = ? AND `type` = ?", cpId, Type).Where("score < ?", score).UpdateColumn("score", score).Error } -// 获取用户cp成就 -func GetCpAchievements(model *domain.Model, cpId mysql.ID) []CpAchievement { +// 获取cp成就 +func GetCpAchievements(model *domain.Model) []CpAchievement { var achievements []CpAchievement - if err := model.DB().Model(CpAchievement{}).Where("cp_id = ?", cpId).Find(&achievements).Error; err != nil { + subQuery := model.DB().Table("cp_achievement a").Joins("JOIN cp_relation r ON a.cp_id = r.id").Select("type,MAX(score) AS max_score").Group("type") + if err := model.DB().Model(CpAchievement{}).Where("(type, score) IN (?)", subQuery).Find(&achievements).Error; err != nil { model.Log.Errorf("GetAchievements fail:%v", err) } return achievements diff --git a/domain/service/event_s/cp_level.go b/domain/service/event_s/cp_level.go index 38e1305aa2b8cd103b4410fb8ae72dc4657d9257..1b7ce58f8d7b7bf36aeb2ec9bce8842237d13192 100644 --- a/domain/service/event_s/cp_level.go +++ b/domain/service/event_s/cp_level.go @@ -2,7 +2,6 @@ package event_s import ( "git.hilo.cn/hilo-common/domain" - "git.hilo.cn/hilo-common/resource/mysql" "github.com/jinzhu/now" "hilo-user/_const/enum/cp_e" "hilo-user/domain/event/gift_ev" @@ -31,7 +30,8 @@ func CpGiftEvent() { } // 检查最新的等级 if cpLevel := cp_m.GetCpLevel(model, cpRelation.ID); cpLevel.CpId >= 0 { - if err := cp_m.UpdateCpAchievement(model, cpLevel.CpId, cpRelation.UserId1, cpRelation.UserId2, cp_e.CpAchievementLevel, mysql.Num(cpLevel.Level)); err != nil { + points := cpLevel.Points + cp_e.CpLevelPoints[cpLevel.Level] + if err := cp_m.UpdateCpAchievement(model, cpLevel.CpId, cpRelation.UserId1, cpRelation.UserId2, cp_e.CpAchievementLevel, points); err != nil { model.Log.Errorf("UpdateCpAchievement fail:%v", err) } } diff --git a/route/cp_r/rank.go b/route/cp_r/rank.go index da2f0f7217cab7ad4ff28a2a720907cfe005d139..08fda30503870eff740416e8ac6952951b32a94c 100644 --- a/route/cp_r/rank.go +++ b/route/cp_r/rank.go @@ -231,16 +231,13 @@ func CpMy(c *gin.Context) (*mycontext.MyContext, error) { // @Summary 成就页 // @Param token header string true "token" // @Param nonce header string true "随机数字" +// @Param pageIndex query int true "偏移值 默认:1" default(1) +// @Param pageSize query int true "请求数量 默认:10" default(10) // @Success 200 {object} []cp_cv.CvCpAchievement // @Router /v2/cp/achievement [get] func CpAchievement(c *gin.Context) (*mycontext.MyContext, error) { myCtx := mycontext.CreateMyContext(c.Keys) - userId, err := req.GetUserId(c) - if err != nil { - return myCtx, err - } model := domain.CreateModelContext(myCtx) - relation, exits := cp_m.GetCpRelation(model, userId) var response = make([]cp_cv.CvCpAchievement, 0) TypeDescMap := map[cp_e.CpAchievement]string{ // todo 翻译 cp_e.CpAchievementLevel: "等级分值最高", @@ -249,24 +246,26 @@ func CpAchievement(c *gin.Context) (*mycontext.MyContext, error) { cp_e.CpAchievementWeekRank: "周榜最高", cp_e.CpAchievementDayRank: "天榜最高", } - if exits { - users, err := user_m.GetUserMapByIds(model, []mysql.ID{relation.UserId1, relation.UserId2}) - if err != nil { - return myCtx, err - } - achievements := cp_m.GetCpAchievements(model, relation.ID) - for _, a := range achievements { - response = append(response, cp_cv.CvCpAchievement{ - CpId: a.CpId, - User1: user_cv.UserToTiny(users[a.UserId1]), - User2: user_cv.UserToTiny(users[a.UserId2]), - Type: a.Type, - TypeDesc: TypeDescMap[a.Type], - Score: a.Score, - TimeUnix: a.UpdatedTime.Unix(), - }) - } - } else { + achievements := cp_m.GetCpAchievements(model) + var userIds []uint64 + for _, v := range achievements { + userIds = append(userIds, v.UserId1) + userIds = append(userIds, v.UserId2) + } + users, err := user_m.GetUserMapByIds(model, userIds) + if err != nil { + return myCtx, err + } + for _, a := range achievements { + response = append(response, cp_cv.CvCpAchievement{ + CpId: a.CpId, + User1: user_cv.UserToTiny(users[a.UserId1]), + User2: user_cv.UserToTiny(users[a.UserId2]), + Type: a.Type, + TypeDesc: TypeDescMap[a.Type], + Score: a.Score, + TimeUnix: a.UpdatedTime.Unix(), + }) } resp.ResponsePageBaseOk(c, response, 0, false) return myCtx, nil