From bef2d9de80cca234ba6f2ae76e7c2caedff7848b Mon Sep 17 00:00:00 2001 From: haoyanbin <605649647@qq.com> Date: Wed, 5 Jan 2022 18:20:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/operate/apis/org_match_evaluate.go | 14 +-- app/operate/service/org_match_evaluate.go | 147 +++++++++++++++++++--- 2 files changed, 136 insertions(+), 25 deletions(-) diff --git a/app/operate/apis/org_match_evaluate.go b/app/operate/apis/org_match_evaluate.go index 8310f4a..2fee068 100644 --- a/app/operate/apis/org_match_evaluate.go +++ b/app/operate/apis/org_match_evaluate.go @@ -89,13 +89,13 @@ func (e OrgMatchEvaluate) GetPageMatch(c *gin.Context) { } reply.MatchInfo = *replyGetMatchInfo - replyGetRoundsScoring := make([]cDto.RoundsScoring, 0) - err = s.GetRoundsScoring(replyGetMatchInfo.PlayerId, replyGetMatchInfo.Rounds, &replyGetRoundsScoring) - if err != nil { - e.Error(500, err, fmt.Sprintf("èŽ·å–æ¯”èµ›çƒå‘˜ä¿¡æ¯ 失败,\r\nå¤±è´¥ä¿¡æ¯ %s", err.Error())) - return - } - reply.RoundsScoring = replyGetRoundsScoring + //replyGetRoundsScoring := make([]cDto.RoundsScoring, 0) + //err = s.GetRoundsScoring(replyGetMatchInfo.PlayerId, replyGetMatchInfo.Rounds, &replyGetRoundsScoring) + //if err != nil { + // e.Error(500, err, fmt.Sprintf("èŽ·å–æ¯”èµ›çƒå‘˜ä¿¡æ¯ 失败,\r\nå¤±è´¥ä¿¡æ¯ %s", err.Error())) + // return + //} + //reply.RoundsScoring = replyGetRoundsScoring replyGetTotalScoring := make([]cDto.TotalScoring, 0) diff --git a/app/operate/service/org_match_evaluate.go b/app/operate/service/org_match_evaluate.go index 14fe9a3..a9dab88 100644 --- a/app/operate/service/org_match_evaluate.go +++ b/app/operate/service/org_match_evaluate.go @@ -5,6 +5,8 @@ import ( "github.com/go-admin-team/go-admin-core/sdk/service" cDto "go-admin/common/dto" "gorm.io/gorm" + "sort" + "strconv" "go-admin/app/operate/models" "go-admin/app/operate/service/dto" @@ -156,41 +158,150 @@ func (e *OrgMatchEvaluate) GetTotalScoring(playerId string, rounds string, seaso e.statisticsScoring(playerId, rounds, seasonId, "avg", replyGetTotalScoring4) *data = append(*data, *replyGetTotalScoring4) - //replyGetTotalScoring5 := new(cDto.TotalScoring) - //e.statisticsRankingList(playerId, seasonId, replyGetTotalScoring5) - //*data = append(*data, *replyGetTotalScoring5) + replyGetTotalScoring5 := new(cDto.TotalScoring) + e.statisticsRankingList(playerId, seasonId, replyGetTotalScoring5) + *data = append(*data, *replyGetTotalScoring5) return nil } func (e *OrgMatchEvaluate) statisticsRankingList(playerId string, seasonId string, scoring *cDto.TotalScoring) error { - scoring.Scoring = e.statisticsRanking(playerId, seasonId, "scoring") - scoring.Scoring = e.statisticsRanking(playerId, seasonId, "scoring") - scoring.Scoring = e.statisticsRanking(playerId, seasonId, "scoring") + replyGetPlayerRank := make([]models.OrgMatchTeamPlayer, 0) + err := e.statisticsRanking(playerId, seasonId, &replyGetPlayerRank) + if err != nil { + e.Log.Errorf("OrgMatchService GetTotalScoring error:%s \r\n", err) + return err + } + e.rankingScoring(replyGetPlayerRank, playerId, scoring) + e.rankingRebound(replyGetPlayerRank, playerId, scoring) + e.rankingAssist(replyGetPlayerRank, playerId, scoring) + e.rankingSteal(replyGetPlayerRank, playerId, scoring) + e.rankingFreeThrow(replyGetPlayerRank, playerId, scoring) + e.rankingBlockShot(replyGetPlayerRank, playerId, scoring) + e.rankingFoul(replyGetPlayerRank, playerId, scoring) + e.rankingTwoPointShot(replyGetPlayerRank, playerId, scoring) + e.rankingThreePointShot(replyGetPlayerRank, playerId, scoring) + return nil } -func (e *OrgMatchEvaluate) statisticsRanking(playerId string, seasonId string, queryV string) string { - var err error - field := "(@rowNum:=@rowNum+1) AS rank, sum(omtp." + queryV + ")as " + queryV - - var rankData struct { - rank string +func (e *OrgMatchEvaluate) rankingScoring(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].Scoring > replyGetPlayerRank[j].Scoring + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.Scoring = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingRebound(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].Rebound > replyGetPlayerRank[j].Rebound + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.Rebound = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingAssist(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].Assist > replyGetPlayerRank[j].Assist + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.Assist = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingSteal(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].Steal > replyGetPlayerRank[j].Steal + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.Steal = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingFreeThrow(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].FreeThrow > replyGetPlayerRank[j].FreeThrow + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.FreeThrow = strconv.Itoa(k + 1) + } } - e.Orm.Table("org_match_team_player as omtp"). +} +func (e *OrgMatchEvaluate) rankingBlockShot(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].BlockShot > replyGetPlayerRank[j].BlockShot + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.BlockShot = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingFoul(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].Foul > replyGetPlayerRank[j].Foul + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.Foul = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingTwoPointShot(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].TwoPointShot > replyGetPlayerRank[j].TwoPointShot + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.TwoPointShot = strconv.Itoa(k + 1) + } + } +} +func (e *OrgMatchEvaluate) rankingThreePointShot(replyGetPlayerRank []models.OrgMatchTeamPlayer, playerId string, scoring *cDto.TotalScoring) { + sort.Slice(replyGetPlayerRank, func(i, j int) bool { + return replyGetPlayerRank[i].ThreePointShot > replyGetPlayerRank[j].ThreePointShot + }) + for k, v := range replyGetPlayerRank { + if v.PlayerId == playerId { + scoring.ThreePointShot = strconv.Itoa(k + 1) + } + } +} + +func (e *OrgMatchEvaluate) statisticsRanking(playerId string, seasonId string, data *[]models.OrgMatchTeamPlayer) error { + var err error + field := "player_id," + + "sum(omtp.scoring)as scoring," + + "sum(omtp.rebound)as rebound," + + "sum(omtp.assist)as assist," + + "sum(omtp.steal)as steal," + + "sum(omtp.free_throw)as free_throw," + + "sum(omtp.block_shot)as block_shot," + + "sum(omtp.foul)as foul," + + "sum(omtp.two_point_shot)as two_point_shot," + + "sum(omtp.three_point_shot)as three_point_shot" + err = e.Orm.Table("org_match_team_player as omtp"). Select(field). Joins("left join org_match as om on omtp.match_id = om.id"). - Where("omtp.player_id = ?", playerId). Where("om.season_id = ?", seasonId). - Order(queryV + " DESC") - err = e.Orm.First(&rankData).Error + Order("player_id asc"). + Group("player_id"). + Find(&data).Error if err != nil { e.Log.Errorf("OrgMatchService GetTotalScoring error:%s \r\n", err) - return "0" + return err } - return rankData.rank + return nil } // Get 获å–OrgMatchEvaluate对象 -- 2.18.1