• haoyanbin's avatar
    1 · 99c6f5ec
    haoyanbin authored
    99c6f5ec
org_match_evaluate.go 8.68 KB
package service

import (
	"errors"
	"github.com/go-admin-team/go-admin-core/sdk/service"
	cDto "go-admin/common/dto"
	"gorm.io/gorm"

	"go-admin/app/operate/models"
	"go-admin/app/operate/service/dto"
	"go-admin/common/actions"
)

type OrgMatchEvaluate struct {
	service.Service
}

// GetPage 获取OrgMatchEvaluate列表
func (e *OrgMatchEvaluate) GetPage(c *dto.OrgMatchEvaluateGetPageReq, p *actions.DataPermission, list *[]dto.OrgMatchEvaluateGetPageReply, count *int64) error {
	var err error

	err = e.Orm.Table("org_match_team_player as omtp").
		Select("omtp.id, ol.league_name, od.division_name, os.season_name, om.rounds, omtp.player_name, om.match_start_time, om.match_end_time, ome.mv_status, ome.status, ome.remark").
		Joins("left join org_match_evaluate as ome on omtp.player_id = ome.player_id").
		Joins("left join org_match as om on omtp.match_id = om.id").
		Joins("left join org_league as ol on ol.id = om.league_id").
		Joins("left join org_division as od on od.id = om.division_id").
		Joins("left join org_season as os on os.id = om.season_id").
		Scopes(
			cDto.MakeCondition(c.GetNeedSearch()),
			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
			actions.Permission("omtp", p),
		).
		Find(list).Limit(-1).Offset(-1).
		Count(count).Error
	if err != nil {
		e.Log.Errorf("OrgMatchService GetPage error:%s \r\n", err)
		return err
	}
	return nil
}

// GetPage 获取OrgMatchEvaluate列表
func (e *OrgMatchEvaluate) GetMatchInfo(id string, p *actions.DataPermission, data *cDto.PageMatchInfo) error {
	var err error

	err = e.Orm.Table("org_match_team_player as omtp").
		Select("omtp.id, ol.league_name, od.division_name, os.season_name, om.rounds,"+
			"oc.club_name, ot.team_name, omtp.player_name, omtp.player_number, omtp.position,"+
			"ome.wonderful_moment_img, ome.wonderful_moment_mv,ome.wonderful_moment_img_title,"+
			"ome.wonderful_moment_mv_title, omtp.player_id, om.season_id").
		Joins("left join org_match_evaluate as ome on omtp.player_id = ome.player_id").
		Joins("left join org_club as oc on omtp.club_id = oc.id").
		Joins("left join org_team as ot on omtp.team_id = ot.id").
		Joins("left join org_match as om on omtp.match_id = om.id").
		Joins("left join org_league as ol on ol.id = om.league_id").
		Joins("left join org_division as od on od.id = om.division_id").
		Joins("left join org_season as os on os.id = om.season_id").
		Scopes(
			actions.Permission("omtp", p),
		).
		First(data, id).Error
	if err != nil {
		e.Log.Errorf("OrgMatchService GetMatchInfo error:%s \r\n", err)
		return err
	}
	return nil
}

func (e *OrgMatchEvaluate) GetRoundsScoring(playerId string, rounds string, data *[]cDto.RoundsScoring) error {
	var err error

	err = e.Orm.Table("org_match_team_player as omtp").
		Select("omtp.id, om.match_start_time, om.rounds, om.grouping, ot.team_name as other_team, "+
			"omtp.scoring, omtp.scoring, omtp.rebound, omtp.assist, omtp.steal, omtp.free_throw, "+
			"omtp.block_shot, omtp.foul, omtp.two_point_shot, omtp.three_point_shot").
		Joins("left join org_match as om on omtp.match_id = om.id").
		Joins("left join org_team as ot on omtp.other_team_id = ot.id").
		Where("omtp.player_id = ?", playerId).
		Where("omtp.rounds = ?", rounds).
		Find(data).Error
	if err != nil {
		e.Log.Errorf("OrgMatchService GetRoundsScoring error:%s \r\n", err)
		return err
	}
	return nil
}

func (e *OrgMatchEvaluate) statisticsScoring(playerId string, rounds string, seasonId string, statistics string, data *cDto.TotalScoring) error {
	var err error
	field := ""

	if statistics == "sum" {
		field += "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"
	}

	if statistics == "avg" {
		field += "avg(omtp.scoring)as scoring," +
			"avg(omtp.rebound)as rebound," +
			"avg(omtp.assist)as assist," +
			"avg(omtp.steal)as steal," +
			"avg(omtp.free_throw)as free_throw," +
			"avg(omtp.block_shot)as block_shot," +
			"avg(omtp.foul)as foul," +
			"avg(omtp.two_point_shot)as two_point_shot," +
			"avg(omtp.three_point_shot)as three_point_shot"
	}

	err = e.Orm.Table("org_match_team_player as omtp").
		Joins("left join org_match as om on omtp.match_id = om.id").
		Select(field).
		Where("omtp.player_id = ?", playerId).
		Where("omtp.rounds = ?", rounds).
		Scopes(seasonIdWhere("om", seasonId)).
		First(data).Error

	if err != nil {
		e.Log.Errorf("OrgMatchService GetTotalScoring error:%s \r\n", err)
		return err
	}
	return nil
}

func seasonIdWhere(tableName string, seasonId string) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		if seasonId == "0" {
			return db
		}
		return db.Where(tableName+".season_id = ?", seasonId)
	}
}

// Get 获取OrgMatchEvaluate对象
func (e *OrgMatchEvaluate) GetTotalScoring(playerId string, rounds string, seasonId string, data *[]cDto.TotalScoring) error {
	replyGetTotalScoring1 := new(cDto.TotalScoring)
	e.statisticsScoring(playerId, rounds, "0", "sum", replyGetTotalScoring1)
	*data = append(*data, *replyGetTotalScoring1)

	replyGetTotalScoring2 := new(cDto.TotalScoring)
	e.statisticsScoring(playerId, rounds, "0", "avg", replyGetTotalScoring2)
	*data = append(*data, *replyGetTotalScoring2)

	replyGetTotalScoring3 := new(cDto.TotalScoring)
	e.statisticsScoring(playerId, rounds, seasonId, "sum", replyGetTotalScoring3)
	*data = append(*data, *replyGetTotalScoring3)

	replyGetTotalScoring4 := new(cDto.TotalScoring)
	e.statisticsScoring(playerId, rounds, seasonId, "avg", replyGetTotalScoring4)
	*data = append(*data, *replyGetTotalScoring4)

	//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")
	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
	}
	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

	if err != nil {
		e.Log.Errorf("OrgMatchService GetTotalScoring error:%s \r\n", err)
		return "0"
	}
	return rankData.rank
}

// Get 获取OrgMatchEvaluate对象
func (e *OrgMatchEvaluate) Get(d *dto.OrgMatchEvaluateGetReq, p *actions.DataPermission, model *models.OrgMatchEvaluate) error {
	var data models.OrgMatchEvaluate

	err := e.Orm.Model(&data).
		Scopes(
			actions.Permission(data.TableName(), p),
		).
		First(model, d.GetId()).Error
	if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
		err = errors.New("查看对象不存在或无权查看")
		e.Log.Errorf("Service GetOrgMatchEvaluate error:%s \r\n", err)
		return err
	}
	if err != nil {
		e.Log.Errorf("db error:%s", err)
		return err
	}
	return nil
}

// Insert 创建OrgMatchEvaluate对象
func (e *OrgMatchEvaluate) Insert(c *dto.OrgMatchEvaluateInsertReq) error {
	var err error
	var data models.OrgMatchEvaluate
	c.Generate(&data)
	err = e.Orm.Create(&data).Error
	if err != nil {
		e.Log.Errorf("OrgMatchEvaluateService Insert error:%s \r\n", err)
		return err
	}
	return nil
}

// Update 修改OrgMatchEvaluate对象
func (e *OrgMatchEvaluate) Update(c *dto.OrgMatchEvaluateUpdateReq, p *actions.DataPermission) error {
	var err error
	var data = models.OrgMatchEvaluate{}
	e.Orm.Scopes(
		actions.Permission(data.TableName(), p),
	).First(&data, c.GetId())
	c.Generate(&data)

	db := e.Orm.Save(&data)
	if db.Error != nil {
		e.Log.Errorf("OrgMatchEvaluateService Save error:%s \r\n", err)
		return err
	}
	if db.RowsAffected == 0 {
		return errors.New("无权更新该数据")
	}
	return nil
}

// Remove 删除OrgMatchEvaluate
func (e *OrgMatchEvaluate) Remove(d *dto.OrgMatchEvaluateDeleteReq, p *actions.DataPermission) error {
	var data models.OrgMatchEvaluate

	db := e.Orm.Model(&data).
		Scopes(
			actions.Permission(data.TableName(), p),
		).Delete(&data, d.GetId())
	if err := db.Error; err != nil {
		e.Log.Errorf("Service RemoveOrgMatchEvaluate error:%s \r\n", err)
		return err
	}
	if db.RowsAffected == 0 {
		return errors.New("无权删除该数据")
	}
	return nil
}