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