diff --git a/cv/group_power_cv/group_rank.go b/cv/group_power_cv/group_rank.go index 746aeef19d8543e69a428e05486effb57f9e9986..0a3bef127dcaa6bbac0ec0e2a16da3785d85fe80 100644 --- a/cv/group_power_cv/group_rank.go +++ b/cv/group_power_cv/group_rank.go @@ -43,7 +43,8 @@ type CvGroupPowerRank struct { type CvGroupPowerRankData struct { CvGroupPowerBase `json:",inline"` CvGroupPowerGrade `json:",inline"` - Rank int `json:"rank"` // 排名 + Rank int `json:"rank"` // 排名 + StarList []*CvGroupPowerStarData `json:"starList"` // 家族贡献top10 } // 家族之星 @@ -108,6 +109,6 @@ var GroupPowerGradePrivilegeNum = map[groupPower_e.GroupPowerGrade][]CvPrivilege {groupPower_e.GroupPowerPrivilegeNameplate, 1, "https://image.whoisamy.shop/hilo/resource/family/nameplate_yellow.png"}, {groupPower_e.GroupPowerPrivilegeMedal, 1, "https://image.whoisamy.shop/hilo/resource/family/privilege_yellow.png"}, {groupPower_e.GroupPowerPrivilegeNameplateEdit, 1, "https://image.whoisamy.shop/hilo/resource/family/edit_yellow.png"}, - {groupPower_e.GroupPowerPrivilegeNameplateHeadwear, 1,"https://image.whoisamy.shop/hilo/resource/family/headwear_yellow.png"}, + {groupPower_e.GroupPowerPrivilegeNameplateHeadwear, 1, "https://image.whoisamy.shop/hilo/resource/family/headwear_yellow.png"}, }, } diff --git a/domain/service/group_power_s/group_power.go b/domain/service/group_power_s/group_power.go index cef26849b765bdd1d94609bf9cf243bf957ad761..ffca9d5672d70e45d484eb9d13717f4579d2a29e 100644 --- a/domain/service/group_power_s/group_power.go +++ b/domain/service/group_power_s/group_power.go @@ -4,8 +4,12 @@ import ( "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mycontext" "git.hilo.cn/hilo-common/resource/mysql" + "hilo-group/_const/enum/groupPower_e" + "hilo-group/cv/group_power_cv" + "hilo-group/cv/user_cv" "hilo-group/domain/event/group_power_ev" "hilo-group/domain/model/groupPower_m" + "hilo-group/domain/model/user_m" ) type GroupPowerService struct { @@ -66,3 +70,105 @@ func (s *GroupPowerService) GroupPowerUserLeave(groupPowerId mysql.ID, userId my }) return remainSeconds, err } + +func GetGroupPowerRankResp(model *domain.Model, beginDate, endDate string, userId uint64) (response group_power_cv.CvGroupPowerRank, err error) { + rank, err := groupPower_m.GetGroupPowerExpRank(model, beginDate, endDate, 30) + if err != nil { + return + } + var ids []mysql.ID + for _, g := range rank { + ids = append(ids, g.GroupPowerId) + } + myGroupPower, err := groupPower_m.GetGroupPowerUserOrNil(model, userId) + if err != nil { + return + } + if myGroupPower != nil { + ids = append(ids, myGroupPower.GroupPowerId) + } + grades, err := groupPower_m.MGetGroupPowerGrade(model, ids) + if err != nil { + return + } + groupPowers, err := groupPower_m.MGetGroupPowerInfoMap(model, ids) + if err != nil { + return + } + if myGroupPower != nil { + myGroupPowerRank, err := groupPower_m.GetMyGroupPowerExpRank(model, beginDate, endDate, myGroupPower.GroupPowerId) + if err != nil { + return response, err + } + response.MyGroupPower = &group_power_cv.CvGroupPowerRankData{ + CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ + Id: myGroupPower.GroupPowerId, + Icon: groupPowers[myGroupPower.GroupPowerId].Icon, + Name: groupPowers[myGroupPower.GroupPowerId].Name, + Nameplate: groupPowers[myGroupPower.GroupPowerId].Nameplate, + }, + CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ + Grade: grades[myGroupPower.GroupPowerId].Grade, + Exp: myGroupPowerRank.Exp, + }, + Rank: 0, + } + } + for _, v := range rank { + if response.MyGroupPower != nil && v.GroupPowerId == response.MyGroupPower.Id { + response.MyGroupPower.Rank = v.Rank + } + response.Items = append(response.Items, group_power_cv.CvGroupPowerRankData{ + CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ + Id: v.GroupPowerId, + Icon: groupPowers[v.GroupPowerId].Icon, + Name: groupPowers[v.GroupPowerId].Name, + Nameplate: groupPowers[v.GroupPowerId].Nameplate, + }, + CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ + Grade: grades[v.GroupPowerId].Grade, + Exp: v.Exp, + }, + Rank: v.Rank, + }) + } + if response.MyGroupPower != nil && response.MyGroupPower.Rank == 0 { + response.MyGroupPower.Rank = 31 // 客户端统一显示30+ + } + return response, nil +} + +func GetGroupPowerStar(model *domain.Model, groupPowerId mysql.ID, _type groupPower_e.GroupPowerStarType, offset, limit int) ([]*group_power_cv.CvGroupPowerStarData, error) { + rank, err := groupPower_m.GetGroupPowerMonthStarRank(model, groupPowerId, _type, offset, limit) + if err != nil { + return nil, err + } + //var response []group_power_cv.CvGroupPowerStarData + response := make([]*group_power_cv.CvGroupPowerStarData, 0) + var userIds []mysql.ID + for _, row := range rank { + userIds = append(userIds, row.UserId) + } + users, err := user_m.GetUserMapByIds(model, userIds) + for _, row := range rank { + user := users[row.UserId] + score := row.Score + if _type == groupPower_e.GroupPowerStarTypeActive { + score = score / 60 + } + if score <= 0 { + continue + } + response = append(response, &group_power_cv.CvGroupPowerStarData{ + User: user_cv.CvUserTiny{ + Id: user.ID, + ExternalId: user.ExternalId, + Code: user.Code, + Nick: user.Nick, + Avatar: user.Avatar, + }, + Score: score, + }) + } + return response, nil +} diff --git a/route/group_power_r/group_rank.go b/route/group_power_r/group_rank.go index 4705a24d1175db8918aea1f5004518998174023c..6eaa436e395821398fe9d27796dec9caf564e2ea 100644 --- a/route/group_power_r/group_rank.go +++ b/route/group_power_r/group_rank.go @@ -12,6 +12,7 @@ import ( "hilo-group/cv/user_cv" "hilo-group/domain/model/groupPower_m" "hilo-group/domain/model/user_m" + "hilo-group/domain/service/group_power_s" "hilo-group/myerr/bizerr" "hilo-group/req" "hilo-group/resp" @@ -46,69 +47,39 @@ func GroupPowerRank(c *gin.Context) (*mycontext.MyContext, error) { beginDate, endDate = now.BeginningOfMonth().Format("2006-01-02"), now.EndOfMonth().Format("2006-01-02") } var model = domain.CreateModelContext(myContext) - rank, err := groupPower_m.GetGroupPowerExpRank(model, beginDate, endDate, 30) + response, err := group_power_s.GetGroupPowerRankResp(model, beginDate, endDate, userId) if err != nil { return myContext, err } - var ids []mysql.ID - for _, g := range rank { - ids = append(ids, g.GroupPowerId) - } - response := group_power_cv.CvGroupPowerRank{} - myGroupPower, err := groupPower_m.GetGroupPowerUserOrNil(model, userId) + resp.ResponseOk(c, response) + return myContext, nil +} + +// @Tags 国家势力 +// @Summary 家族榜单-活动 +// @Success 200 {object} []group_power_cv.CvGroupPowerRank +// @Router /h5/groupPower/rank/month [get] +func GroupPowerMonthRankAct(c *gin.Context) (*mycontext.MyContext, error) { + myContext := mycontext.CreateMyContext(c.Keys) + userId, err := req.GetUserId(c) if err != nil { return myContext, err } - if myGroupPower != nil { - ids = append(ids, myGroupPower.GroupPowerId) - } - grades, err := groupPower_m.MGetGroupPowerGrade(model, ids) + beginDate, endDate := now.BeginningOfMonth().Format("2006-01-02"), now.EndOfMonth().Format("2006-01-02") + var model = domain.CreateModelContext(myContext) + response, err := group_power_s.GetGroupPowerRankResp(model, beginDate, endDate, userId) if err != nil { return myContext, err } - groupPowers, err := groupPower_m.MGetGroupPowerInfoMap(model, ids) + response.MyGroupPower.StarList, err = group_power_s.GetGroupPowerStar(model, response.MyGroupPower.Id, groupPower_e.GroupPowerStarTypeFamous, 0, 10) if err != nil { return myContext, err } - if myGroupPower != nil { - myGroupPowerRank, err := groupPower_m.GetMyGroupPowerExpRank(model, beginDate, endDate, myGroupPower.GroupPowerId) + for i, v := range response.Items { + response.Items[i].StarList, err = group_power_s.GetGroupPowerStar(model, v.Id, groupPower_e.GroupPowerStarTypeFamous, 0, 10) if err != nil { return myContext, err } - response.MyGroupPower = &group_power_cv.CvGroupPowerRankData{ - CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ - Id: myGroupPower.GroupPowerId, - Icon: groupPowers[myGroupPower.GroupPowerId].Icon, - Name: groupPowers[myGroupPower.GroupPowerId].Name, - Nameplate: groupPowers[myGroupPower.GroupPowerId].Nameplate, - }, - CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ - Grade: grades[myGroupPower.GroupPowerId].Grade, - Exp: myGroupPowerRank.Exp, - }, - Rank: 0, - } - } - for _, v := range rank { - if response.MyGroupPower != nil && v.GroupPowerId == response.MyGroupPower.Id { - response.MyGroupPower.Rank = v.Rank - } - response.Items = append(response.Items, group_power_cv.CvGroupPowerRankData{ - CvGroupPowerBase: group_power_cv.CvGroupPowerBase{ - Id: v.GroupPowerId, - Icon: groupPowers[v.GroupPowerId].Icon, - Name: groupPowers[v.GroupPowerId].Name, - Nameplate: groupPowers[v.GroupPowerId].Nameplate, - }, - CvGroupPowerGrade: group_power_cv.CvGroupPowerGrade{ - Grade: grades[v.GroupPowerId].Grade, - Exp: v.Exp, - }, - Rank: v.Rank, - }) - } - if response.MyGroupPower != nil && response.MyGroupPower.Rank == 0 { - response.MyGroupPower.Rank = 31 // 客户端统一显示30+ } resp.ResponseOk(c, response) return myContext, nil @@ -201,38 +172,12 @@ func GroupPowerStar(c *gin.Context) (*mycontext.MyContext, error) { if param.PageSize <= 0 { param.PageSize = 30 } - var model = domain.CreateModelContext(myContext) offset, limit := (param.PageIndex-1)*param.PageSize, param.PageSize - rank, err := groupPower_m.GetGroupPowerMonthStarRank(model, param.GroupPowerId, param.Type, offset, limit) + var model = domain.CreateModelContext(myContext) + response, err := group_power_s.GetGroupPowerStar(model, param.GroupPowerId, param.Type, offset, limit) if err != nil { return myContext, err } - var response []group_power_cv.CvGroupPowerStarData - var userIds []mysql.ID - for _, row := range rank { - userIds = append(userIds, row.UserId) - } - users, err := user_m.GetUserMapByIds(model, userIds) - for _, row := range rank { - user := users[row.UserId] - score := row.Score - if param.Type == groupPower_e.GroupPowerStarTypeActive { - score = score / 60 - } - if score <= 0 { - continue - } - response = append(response, group_power_cv.CvGroupPowerStarData{ - User: user_cv.CvUserTiny{ - Id: user.ID, - ExternalId: user.ExternalId, - Code: user.Code, - Nick: user.Nick, - Avatar: user.Avatar, - }, - Score: score, - }) - } resp.ResponsePageBaseOk(c, response, 0, false) return myContext, nil } diff --git a/route/router.go b/route/router.go index f0910f906e15eada46d8b6a6e15e2bc72a15f214..5d5831730f408d300acbd3e3aeb4e0d42942340f 100644 --- a/route/router.go +++ b/route/router.go @@ -146,6 +146,7 @@ func InitRouter() *gin.Engine { h5GroupPower := v1.Group("/h5/groupPower") { h5GroupPower.GET("/grade/detail", wrapper(group_power_r.GroupPowerGradeDetail)) + h5GroupPower.GET("/rank/month", wrapper(group_power_r.GroupPowerMonthRankAct)) } charge := v1.Group("/charge")