From f000dae73afce7c9954d532c435b6bf57237669e Mon Sep 17 00:00:00 2001 From: udieudie Date: Sun, 7 Dec 2025 01:21:12 +0800 Subject: [PATCH] =?UTF-8?q?david/feat:=E5=A4=84=E7=90=86=E5=AE=8C=E8=B5=9B?= =?UTF-8?q?=E5=92=8C=E8=8E=B7=E5=8F=96=E6=9C=80=E7=BB=88=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=AE=8C=E8=B5=9B=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/manager/prize_mamanger.go | 54 +++++++++++++++++-- app/manager/prize_mysql_storage.go | 67 ++++++++++++++++++++++- app/manager/user_mysql_storage.go | 85 ++++++++++++++++++------------ templates/index.html | 2 +- 4 files changed, 169 insertions(+), 39 deletions(-) diff --git a/app/manager/prize_mamanger.go b/app/manager/prize_mamanger.go index dec4c9a..be8b22c 100644 --- a/app/manager/prize_mamanger.go +++ b/app/manager/prize_mamanger.go @@ -243,6 +243,49 @@ func (pm *PrizeManager) GetTempPrizeRecordListByLiveRoomIdAndTimesAndTrack(liveR return nil, fmt.Errorf("GetTempPrizeRecordListByLiveRoomIdAndTimesAndTrack no mem logic") } +// GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack 查询某个直播间场次的永久领奖记录 +func (pm *PrizeManager) GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId string, times int) ([]PrizeRecordInfo, error) { + var prizeRecordInfoList []PrizeRecordInfo + if config.Get().Database.Enabled { + PrizeRecordMysqlInoList, err := pm.storage.GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId, times) + if err != nil { + return nil, err + } + + for _, recordInfo := range PrizeRecordMysqlInoList { + prizeSettingInfo := PrizeRecordInfo{ + Id: recordInfo.Id, + UserId: recordInfo.UserId, + PrizeId: recordInfo.PrizeId, + PrizeName: recordInfo.PrizeName, + Track: recordInfo.Track, + TrueLevel: recordInfo.TrueLevel, + PrizeLevel: recordInfo.PrizeLevel, + Num: recordInfo.Num, + ImgUrl: recordInfo.ImgUrl, + Equiped: recordInfo.Equiped, + Job: recordInfo.Job, + Pos: recordInfo.Pos, + JackpotId: recordInfo.JackpotId, + Odds: recordInfo.Odds, + GetType: recordInfo.GetType, + DateType: recordInfo.DateType, + FromTimes: recordInfo.FromTimes, + FromLiveRoomId: recordInfo.FromLiveRoomId, + HasExchanged: recordInfo.HasExchanged, + AboutNum: recordInfo.AboutNum, + NextLevelNeedNum: recordInfo.NextLevelNeedNum, + CreateAt: recordInfo.CreateAt, + UpdateAt: recordInfo.UpdateAt, + } + prizeRecordInfoList = append(prizeRecordInfoList, prizeSettingInfo) + } + return prizeRecordInfoList, nil + } + + return nil, fmt.Errorf("GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack no mem logic") +} + // GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack 查询某个直播间场次的永久领奖记录 func (pm *PrizeManager) GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack(liveRoomId string, times int, track int) ([]PrizeRecordInfo, error) { var prizeRecordInfoList []PrizeRecordInfo @@ -1338,7 +1381,7 @@ func (pm *PrizeManager) GetFinalPrize(mapId string, liveRoomId string, times int } } - finalPrizeRecordList, err := pm.GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack(liveRoomId, times, championTrack) + finalPrizeRecordList, err := pm.GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId, times) if err != nil { return nil, err } @@ -1366,14 +1409,17 @@ func (pm *PrizeManager) GetFinalPrize(mapId string, liveRoomId string, times int // 找到冠军赛道的 var championLiveRoomResult []models.LiveRoomResult var championUserIdList []string + var allUserIdList []string for _, result := range liveRoomResult { + allUserIdList = append(allUserIdList, result.UserID) if result.Track == championTrack { championLiveRoomResult = append(championLiveRoomResult, result) championUserIdList = append(championUserIdList, result.UserID) } } - longAndNotShardPrizeRecordListChanpionUser, err := pm.GetLongAndNotShardPrizeRecordListByPrizeIdList(championUserIdList) + //longAndNotShardPrizeRecordListChanpionUser, err := pm.GetLongAndNotShardPrizeRecordListByPrizeIdList(championUserIdList) + longAndNotShardPrizeRecordListChanpionUser, err := pm.GetLongAndNotShardPrizeRecordListByPrizeIdList(allUserIdList) if err != nil { return nil, err } @@ -1419,7 +1465,7 @@ func (pm *PrizeManager) GetFinalPrize(mapId string, liveRoomId string, times int } // 处理所有的当局获得的碎片 - longPrizeRecordList, err := pm.GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack(liveRoomId, times, championTrack) + longPrizeRecordList, err := pm.GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId, times) if err != nil { return nil, err } @@ -1519,7 +1565,7 @@ func (pm *PrizeManager) GetFinalPrize(mapId string, liveRoomId string, times int pm.SetPrizeRecordAboutNumAndNextLevelNum(info.UserId, info.ShardId, liveRoomId, times, shardNum, nextLevelConsumedNum) } - finalPrizeRecordList, err = pm.GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack(liveRoomId, times, championTrack) + finalPrizeRecordList, err = pm.GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId, times) if err != nil { return nil, err } diff --git a/app/manager/prize_mysql_storage.go b/app/manager/prize_mysql_storage.go index ba292f8..edff526 100644 --- a/app/manager/prize_mysql_storage.go +++ b/app/manager/prize_mysql_storage.go @@ -387,6 +387,69 @@ func (pms *PrizeMysqlStorage) GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack return giftRecordList, nil } +// GetLongPrizeRecordListByLiveRoomIdAndTimesAndTrack 查询直播间场次的永久获奖记录 +func (pms *PrizeMysqlStorage) GetLongPrizeRecordListByLiveRoomIdAndTimes(liveRoomId string, times int) ([]PrizeRecordMysqlInfo, error) { + // 构建查询语句 + query := fmt.Sprintf(` + SELECT id, user_id, prize_id, prize_name, track, true_level, prize_level, num, img_url, equiped, job, + pos, jackpot_id, odds, get_type, date_type, from_times, from_live_room_id, has_exchanged, about_num, next_level_need_num, + created_at, updated_at + FROM prize_record + WHERE from_live_room_id = ? and from_times = ? + and date_type = 'long' + `) + + // 准备查询参数 + args := make([]interface{}, 0, 2) + args = append(args, liveRoomId) + args = append(args, times) + + // 查询数据 + rows, err := db.GetDB().Query(query, args...) + if err != nil { + log.Printf("Error querying gift records: %v", err) + return nil, err + } + defer rows.Close() + + // 遍历查询结果 + var giftRecordList []PrizeRecordMysqlInfo + for rows.Next() { + var record PrizeRecordMysqlInfo + if err := rows.Scan( + &record.Id, + &record.UserId, + &record.PrizeId, + &record.PrizeName, + &record.Track, + &record.TrueLevel, + &record.PrizeLevel, + &record.Num, + &record.ImgUrl, + &record.Equiped, + &record.Job, + &record.Pos, + &record.JackpotId, + &record.Odds, + &record.GetType, + &record.DateType, + &record.FromTimes, + &record.FromLiveRoomId, + &record.HasExchanged, + &record.AboutNum, + &record.NextLevelNeedNum, + &record.CreateAt, + &record.UpdateAt, + ); err != nil { + log.Printf("Error scanning prize setting record: %v", err) + return nil, err + } + giftRecordList = append(giftRecordList, record) + } + + return giftRecordList, nil +} + // GetLongPrizeRecordListByUserId 用户userId查询所有永久抽奖 func (pms *PrizeMysqlStorage) GetLongPrizeRecordListByUserId(userId string) ([]PrizeRecordMysqlInfo, error) { // 构建查询语句 @@ -588,7 +651,9 @@ func (pms *PrizeMysqlStorage) GetLongPrizeRecordListByPrizeIdList(userId string, // GetLongAndNotShardPrizeRecordListByPrizeIdList 查询用户的非碎片的最终数据 func (pms *PrizeMysqlStorage) GetLongAndNotShardPrizeRecordListByPrizeIdList(userIdList []string) ([]PrizeRecordMysqlInfo, error) { - + if userIdList == nil || len(userIdList) <= 0 { + return nil, nil + } placeholders := strings.Repeat("?,", len(userIdList)-1) + "?" // 构建查询语句 diff --git a/app/manager/user_mysql_storage.go b/app/manager/user_mysql_storage.go index d166550..8b93423 100644 --- a/app/manager/user_mysql_storage.go +++ b/app/manager/user_mysql_storage.go @@ -99,41 +99,60 @@ func (um *userMySQLStorage) UpdateScore(userID string, delta int) error { func (um *userMySQLStorage) SetUserScoreByLiveRoomResult() error { // 更新用户积分 _, err := db.GetDB().Exec(` - INSERT INTO users (user_id, user_name, head_img, score, win_point, mileage, jump_height, user_rank) - SELECT - user_id, - user_name, - head_img, - total_score, - total_win_point, - total_mileage, - total_jump_height, - CASE - WHEN total_score > 0 - THEN RANK() OVER (ORDER BY total_score DESC) - ELSE NULL - END AS user_rank - FROM ( + INSERT INTO users ( user_id, user_name, head_img, score, win_point, mileage, jump_height, user_rank ) SELECT + user_id, + user_name, + head_img, + total_score, + total_win_point, + total_mileage, + total_jump_height, + CASE + WHEN total_score > 0 THEN + RANK() OVER ( ORDER BY total_score DESC ) + ELSE 99999999 + END AS user_rank + FROM + ( SELECT lrr.user_id, - ANY_VALUE(lrr.user_name) AS user_name, - ANY_VALUE(lrr.head_img) AS head_img, - SUM(IF(lrr.get_score > 0, COALESCE(lrr.get_score, 0), 0)) AS total_score, - SUM(COALESCE(lrr.change_win_point, 0)) + - COUNT(CASE WHEN lrr.is_champion = 1 THEN 1 END) AS total_win_point, - SUM(COALESCE(lrr.mileage, 0)) AS total_mileage, - SUM(COALESCE(lrr.jump_height, 0)) AS total_jump_height - FROM live_room_result lrr - GROUP BY lrr.user_id - ) AS aggregated_data - ON DUPLICATE KEY UPDATE - score = VALUES(score), - win_point = VALUES(win_point), - mileage = VALUES(mileage), - jump_height = VALUES(jump_height), - user_name = VALUES(user_name), - head_img = VALUES(head_img), - user_rank = VALUES(user_rank), + ANY_VALUE ( lrr.user_name ) AS user_name, + ANY_VALUE ( lrr.head_img ) AS head_img, + SUM( + IF + ( lrr.get_score > 0, COALESCE ( lrr.get_score, 0 ), 0 )) AS total_score, + SUM( + COALESCE ( lrr.change_win_point, 0 )) + COUNT( CASE WHEN lrr.is_champion = 1 THEN 1 END ) AS total_win_point, + SUM( + COALESCE ( lrr.mileage, 0 )) AS total_mileage, + SUM( + COALESCE ( lrr.jump_height, 0 )) AS total_jump_height + FROM + live_room_result lrr + GROUP BY + lrr.user_id + ) AS aggregated_data + ON DUPLICATE KEY UPDATE score = + VALUES + ( score ), + win_point = + VALUES + ( win_point ), + mileage = + VALUES + ( mileage ), + jump_height = + VALUES + ( jump_height ), + user_name = + VALUES + ( user_name ), + head_img = + VALUES + ( head_img ), + user_rank = + VALUES + ( user_rank ), updated_at = CURRENT_TIMESTAMP; `) if err != nil { diff --git a/templates/index.html b/templates/index.html index a610c2a..fd53e18 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1343,7 +1343,7 @@ { "track": 2, "is_champion": 0, - "is_finish": 1, + "is_finish": 0, "mileage": 100, "jump_height": 3.65, "finish_time": 0, //完成时间 -- Gitee