From d0d42455602c1925722f016886357ffa3dd07ea6 Mon Sep 17 00:00:00 2001 From: udieudie Date: Sat, 14 Jun 2025 17:06:35 +0800 Subject: [PATCH 01/10] =?UTF-8?q?david/hotfix:=E4=B8=8D=E7=9F=A5=E9=81=93?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E5=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/indexController.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controller/indexController.go b/app/controller/indexController.go index 0c5b425..acf989e 100644 --- a/app/controller/indexController.go +++ b/app/controller/indexController.go @@ -13,6 +13,7 @@ import ( "github.com/gorilla/websocket" "math/rand" "net/http" + "reflect" "strconv" "sync" "time" @@ -154,7 +155,12 @@ func (i *IndexController) Regist(ctx *gin.Context) { backDataByTime := ctx.Query("backDataByTime") - fmt.Println("register backDataByTime backDataByTime : ", backDataByTime) + // 获取变量的反射对象 + value := reflect.ValueOf(backDataByTime) + // 获取变量的类型信息 + typ := value.Type() + + fmt.Println("register backDataByTime backDataByTime : ", backDataByTime, typ) if !(backDataByTime == "" || backDataByTime == "0") { fmt.Println("register backDataByTime backDataByTime into if : ", backDataByTime) -- Gitee From d4d1af11bfde838ded9bae963969024802ae0a71 Mon Sep 17 00:00:00 2001 From: udieudie Date: Sun, 15 Jun 2025 23:17:52 +0800 Subject: [PATCH 02/10] =?UTF-8?q?david/hotfix:=E5=A2=9E=E5=8A=A0=E6=88=98?= =?UTF-8?q?=E5=B1=80=E7=BB=93=E6=9D=9F=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/httpController.go | 2 + app/manager/douyin/dy_service_manager.go | 97 ++++++++++++++++++++++++ app/models/models.go | 12 ++- app/service/douyin_service.go | 94 +++++++++++++++++++++++ app/service/live_room_service.go | 4 +- app/utils/utils.go | 9 ++- 6 files changed, 214 insertions(+), 4 deletions(-) diff --git a/app/controller/httpController.go b/app/controller/httpController.go index 280a489..b9e8a56 100644 --- a/app/controller/httpController.go +++ b/app/controller/httpController.go @@ -431,6 +431,8 @@ func (h *HttpController) finishGame(c *gin.Context) { } } + service.DouYinService{}.DealUploadUserGameResultService(roomId) + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, diff --git a/app/manager/douyin/dy_service_manager.go b/app/manager/douyin/dy_service_manager.go index 07ff555..9ddd770 100644 --- a/app/manager/douyin/dy_service_manager.go +++ b/app/manager/douyin/dy_service_manager.go @@ -400,6 +400,103 @@ func SyncUserGroupToDouYin(accessToken string, liveRoomId string, times int, gro return nil } +// UploadUserGameResult 同步对局状态给抖音 +func UploadUserGameResult(accessToken string, anchorOpenId string, liveRoomId string, times int, userResultList []models.UploadUserGameResultUserBody) (err error) { + apiURL := config.Get().Douyin.APIWebcastBaseURL + "/api/gaming_con/round/upload_user_result" // 沙盒环境 + + // 构建请求参数 + requestBody := struct { + AnchorOpenId string `json:"anchor_open_id"` + Appid string `json:"app_id"` + RoomId string `json:"room_id"` + RoundId int64 `json:"round_id"` + UserList []models.UploadUserGameResultUserBody `json:"user_list"` + }{ + AnchorOpenId: anchorOpenId, + Appid: config.Get().Douyin.AppID, + RoomId: liveRoomId, + RoundId: int64(times), + UserList: userResultList, + } + + // 设置请求头 + headers := map[string]string{ + "content-type": "application/json", + "X-Token": accessToken, + } + + // 定义响应结构 + var response struct { + ErrNo int `json:"errcode"` + ErrMsg string `json:"errmsg"` + } + + // 发送请求 + if err := utils.Post(apiURL, requestBody, headers, &response); err != nil { + return fmt.Errorf("请求失败: %w", err) + } + + // 处理错误码 + if response.ErrNo != 0 { + return fmt.Errorf("抖音接口错误[%d]: %s, 请求url: %s, requstBody : %v, headers : %v ", response.ErrNo, response.ErrMsg, + apiURL, requestBody, headers, + ) + } + + fmt.Println("上传抖音对局用户数据 ", ",直播id : ", liveRoomId, " , 成功") + return nil +} + +// UploadUserGameResult 同步对局状态给抖音 +func UploadUserGameResultFinish(accessToken string, anchorOpenId string, liveRoomId string, times int, completeTimeStamp int64) (err error) { + apiURL := config.Get().Douyin.APIWebcastBaseURL + "/api/gaming_con/round/complete_upload_user_result" // 沙盒环境 + + // 构建请求参数 + requestBody := struct { + AnchorOpenId string `json:"anchor_open_id"` + Appid string `json:"app_id"` + RoomId string `json:"room_id"` + RoundId int64 `json:"round_id"` + CompleteTimeStamp int64 `json:"complete_time"` + }{ + AnchorOpenId: anchorOpenId, + Appid: config.Get().Douyin.AppID, + RoomId: liveRoomId, + RoundId: int64(times), + } + + if completeTimeStamp > 0 { + requestBody.CompleteTimeStamp = completeTimeStamp + } + + // 设置请求头 + headers := map[string]string{ + "content-type": "application/json", + "X-Token": accessToken, + } + + // 定义响应结构 + var response struct { + ErrNo int `json:"errcode"` + ErrMsg string `json:"errmsg"` + } + + // 发送请求 + if err := utils.Post(apiURL, requestBody, headers, &response); err != nil { + return fmt.Errorf("请求失败: %w", err) + } + + // 处理错误码 + if response.ErrNo != 0 { + return fmt.Errorf("抖音接口错误[%d]: %s, 请求url: %s, requstBody : %v, headers : %v ", response.ErrNo, response.ErrMsg, + apiURL, requestBody, headers, + ) + } + + fmt.Println("上传抖音对局用户数据完结标志 ", "直播id : ", liveRoomId, " , 成功") + return nil +} + func GetDouYinRoomInfo(accessToken, clientToken string) (*models.LiveRoomUserInfo, error) { apiURL := config.Get().Douyin.APIWebcastBaseURL + "/api/webcastmate/info" diff --git a/app/models/models.go b/app/models/models.go index 73782f5..fe71704 100644 --- a/app/models/models.go +++ b/app/models/models.go @@ -182,12 +182,22 @@ type FansRequest struct { Arr []FansOneRequest `json:"arr"` } -// 抖音推送数据的点赞元数据 +// 抖音推送数据的同步对局数据的元数据 type SyncGameGroupResultToDouYinBody struct { GroupId string `json:"group_id"` // 阵营id,red, green, yellow Result int `json:"result"` // 对局结果(1=胜利、2=失败、3=平局) } +// 抖音推送数据的用户对局的元数据 +type UploadUserGameResultUserBody struct { + OpenId string `json:"open_id"` // 用户Id + Rank int `json:"rank"` // 用户排名 + RoundResult int `json:"round_result"` // 对局结果(1=胜利、2=失败、3=平局) + Score int `json:"score"` // 用户积分的排名 + WinningPoints int `json:"winning_points"` // 用户的胜点,如果没有胜点记录传0 + WinningStreakCount int `json:"winning_streak_count"` // 用户的连胜次数,如果没有连胜记录传0 +} + // 抖音查询观众阵营的数据结构 type DouYinGetUserGroupRequest struct { AppId string `json:"app_id"` diff --git a/app/service/douyin_service.go b/app/service/douyin_service.go index d316cb7..60028bd 100644 --- a/app/service/douyin_service.go +++ b/app/service/douyin_service.go @@ -6,6 +6,7 @@ import ( "BlazeRider-backend/app/models" "BlazeRider-backend/app/utils" "fmt" + "sort" "time" ) @@ -115,6 +116,99 @@ func (ls DouYinService) SyncUserGroupToDouYinService(liveRoomId string, times in return nil } +func (ls DouYinService) DealUploadUserGameResultService(liveRoomId string) error { + if liveRoomId == utils.TestRoomId { + return fmt.Errorf("test room not DealUploadUserGameResultService") + } + // 获取直播间信息 + liveRoomInfo, err := manager.Get().LiveRoomManager().GetLiveInfo(liveRoomId) + + token, err := ls.GetToken() + if err != nil { + fmt.Println("DealUploadUserGameResultService GetToken err : ", err) + return err + } + + //[]models.LiveRoomResult + liveRoomResult, err := manager.Get().LiveRoomManager().GetLiveRoomResults(liveRoomId, liveRoomInfo.Times) + if err != nil { + fmt.Println("DealUploadUserGameResultService GetLiveRoomResults err : ", err) + return err + } + var userResultList []models.UploadUserGameResultUserBody + + maxTryTimes := 3 + + var results []models.LiveRoomResult + // 按 GetScore 降序排序 + sort.Slice(results, func(i, j int) bool { + return results[i].GetScore > results[j].GetScore + }) + + for _, result := range liveRoomResult { + gameResult := 2 // 1 胜利, 2 失败 3 平局 + if result.IsFinish == 1 && result.IsChampion == 1 { + gameResult = 1 + } else if result.IsFinish == 1 && result.IsChampion != 1 { + gameResult = 3 + } + + rank := 100 + + for i := 0; i < len(results); i++ { + if results[i].GetScore == result.GetScore { + rank = i + 1 + } + } + userResult := models.UploadUserGameResultUserBody{ + OpenId: result.UserID, + Rank: rank, + RoundResult: gameResult, + Score: result.GetScore, + WinningPoints: 0, + WinningStreakCount: 0, + } + userResultList = append(userResultList, userResult) + } + + // 计算需要上传的用户 数据批次,单批次最多上报50个用户对局数据 + batchSize := 50 + total := len(userResultList) + + // 遍历所有元素,按批次处理 + for start := 0; start < total; start += batchSize { + end := start + batchSize + if end > total { + end = total // 处理最后不足50个的批次 + } + + // 截取当前批次 + batchUserResultList := userResultList[start:end] + + err = douyin.UploadUserGameResult(token, liveRoomInfo.AnchorOpenId, liveRoomId, liveRoomInfo.Times, batchUserResultList) + if err != nil { + for tryTimes := 1; tryTimes <= maxTryTimes; tryTimes++ { + err = douyin.UploadUserGameResult(token, liveRoomInfo.AnchorOpenId, liveRoomId, liveRoomInfo.Times, batchUserResultList) + if err == nil { + break + } + } + } + } + + err = douyin.UploadUserGameResultFinish(token, liveRoomInfo.AnchorOpenId, liveRoomId, liveRoomInfo.Times, utils.ConvertNullTimeToTimestamp(liveRoomInfo.EndAt)) + if err != nil { + for tryTimes := 1; tryTimes <= maxTryTimes; tryTimes++ { + err = douyin.UploadUserGameResultFinish(token, liveRoomInfo.AnchorOpenId, liveRoomId, liveRoomInfo.Times, utils.ConvertNullTimeToTimestamp(liveRoomInfo.EndAt)) + if err == nil { + break + } + } + } + + return nil +} + func (ls DouYinService) RequestDouYinForLiveLogin(liveRoomToken string) (models.LiveRoomUserInfo, error) { if liveRoomToken == "this@is*Test" { return models.LiveRoomUserInfo{ diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go index 56e550f..76461e6 100644 --- a/app/service/live_room_service.go +++ b/app/service/live_room_service.go @@ -695,7 +695,7 @@ func DealBackDataByTime(conn *websocket.Conn, liveRoomId string, times int, time //处理对局数据 liveTrackUserInfoList, _ := manager.Get().LiveRoomManager().GetLiveTrackInfosWithUserInfoByTime(liveRoomId, times, timeStr) for _, info := range liveTrackUserInfoList { - createTimestamp, hasErr := utils.ToMillisTimStamp(info.CreateAt) + createTimestamp, hasErr := utils.ConvertNullTimeToMicroTimestamp(info.CreateAt) if hasErr { createTimestamp = time.Now().UnixMilli() } @@ -756,7 +756,7 @@ func DealBackDataByTime(conn *websocket.Conn, liveRoomId string, times int, time for i := 0; i < len(giftWithUserInfos); i++ { info := giftWithUserInfos[i] - createTimestamp, hasErr := utils.ToMillisTimStamp(info.CreateAt) + createTimestamp, hasErr := utils.ConvertNullTimeToMicroTimestamp(info.CreateAt) if hasErr { createTimestamp = time.Now().UnixMilli() } diff --git a/app/utils/utils.go b/app/utils/utils.go index afec125..d02f8f2 100644 --- a/app/utils/utils.go +++ b/app/utils/utils.go @@ -243,9 +243,16 @@ func StrExists(strIds []string, target string) bool { } // 带毫秒的转换函数 -func ToMillisTimStamp(nt sql.NullTime) (int64, bool) { +func ConvertNullTimeToMicroTimestamp(nt sql.NullTime) (int64, bool) { if !nt.Valid { return 0, false } return nt.Time.UnixNano() / 1e6, true } + +func ConvertNullTimeToTimestamp(nt sql.NullTime) int64 { + if !nt.Valid { + return 0 // 或返回错误/自定义默认值 + } + return nt.Time.Unix() // 返回秒级时间戳 +} -- Gitee From 554006def04dd303d97340bcb86d5e1ea51cf65c Mon Sep 17 00:00:00 2001 From: udieudie Date: Sun, 15 Jun 2025 23:31:51 +0800 Subject: [PATCH 03/10] =?UTF-8?q?daavid/hotfix:=E5=A2=9E=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/manager/douyin_fail_gift_record_mysql_storage.go | 12 ++++++------ app/manager/gift_record_mysql_storage.go | 8 ++++---- app/manager/live_room_mysql_storage.go | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/manager/douyin_fail_gift_record_mysql_storage.go b/app/manager/douyin_fail_gift_record_mysql_storage.go index 9927143..620f9ec 100644 --- a/app/manager/douyin_fail_gift_record_mysql_storage.go +++ b/app/manager/douyin_fail_gift_record_mysql_storage.go @@ -182,11 +182,11 @@ func (grm *DouYinFailGiftRecordMysqlStorage) GetLastPageNumAndCountByLiveRoomId( // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetLastPageNumAndCountByLiveRoomId 1 with ID: %s", liveRoomID) return nil, err // 没有找到数据,返回 ErrNoRows } - log.Printf("Error querying GetLastPageNumAndCountByLiveRoomId : %v", err) // 打印其他错误信息 - return nil, err // 返回其他错误 + log.Printf("Error querying GetLastPageNumAndCountByLiveRoomId 1 : %v", err) // 打印其他错误信息 + return nil, err // 返回其他错误 } // 执行 SQL 查询 @@ -203,11 +203,11 @@ func (grm *DouYinFailGiftRecordMysqlStorage) GetLastPageNumAndCountByLiveRoomId( // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room in GetLastPageNumAndCountByLiveRoomId 2 found with ID: %s", liveRoomID) return nil, err // 没有找到数据,返回 ErrNoRows } - log.Printf("Error querying live room: %v", err) // 打印其他错误信息 - return nil, err // 返回其他错误 + log.Printf("Error querying in GetLastPageNumAndCountByLiveRoomId 2 live room: %v", err) // 打印其他错误信息 + return nil, err // 返回其他错误 } douYinFailGiftMaxPageInfo.LiveRoomId = liveRoomID diff --git a/app/manager/gift_record_mysql_storage.go b/app/manager/gift_record_mysql_storage.go index 4290691..e8a18f7 100644 --- a/app/manager/gift_record_mysql_storage.go +++ b/app/manager/gift_record_mysql_storage.go @@ -162,7 +162,7 @@ func (grm *GiftRecordMysqlStorage) GetLastGiftRecordByUserIdAndGiftId(liveRoomID // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room in GetLastGiftRecordByUserIdAndGiftId found with ID: %s", liveRoomID) return nil, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetLastGiftRecordByUserIdAndGiftId : %v", err) // 打印其他错误信息 @@ -195,7 +195,7 @@ func (grm *GiftRecordMysqlStorage) GetGiftCountByUserAndGiftId(liveRoomID string // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetGiftCountByUserAndGiftId with ID: %s", liveRoomID) return 0, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetGiftCountByUserAndGiftId : %v", err) // 打印其他错误信息 @@ -224,7 +224,7 @@ func (grm *GiftRecordMysqlStorage) GetTotalScoreByRoomId(liveRoomID string, time // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetTotalScoreByRoomId with ID: %s", liveRoomID) return 0, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetTotalScoreByRoomId : %v, liveRoomID : %s, times : %d", @@ -255,7 +255,7 @@ func (grm *GiftRecordMysqlStorage) GetAccScoreByRoomIdAndUserId(liveRoomID strin // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetAccScoreByRoomIdAndUserId with ID: %s", liveRoomID) return 0, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetAccScoreByRoomIdAndUserId : %v, liveRoomID : %s, times : %d, userId : %s", diff --git a/app/manager/live_room_mysql_storage.go b/app/manager/live_room_mysql_storage.go index 7f55cc3..72f9f31 100644 --- a/app/manager/live_room_mysql_storage.go +++ b/app/manager/live_room_mysql_storage.go @@ -201,7 +201,7 @@ func (lrm *LiveRoomMysqlStorage) GetLiveRoom(liveRoomID string) (*LiveRoomMysqlI // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetLiveRoom with ID: %s", liveRoomID) return nil, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetLiveRoom: %v", err) // 打印其他错误信息 @@ -285,11 +285,11 @@ func (lrm *LiveRoomMysqlStorage) GetLiveTrackByUserId(liveRoomId string, userId // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s, user_id: %s, times: %d", liveRoomId, userId, times) + log.Printf("No live room found in GetLiveTrackByUserId with ID: %s, user_id: %s, times: %d", liveRoomId, userId, times) return nil, err // 没有找到数据,返回 ErrNoRows } - log.Printf("Error querying live track: %v", err) // 打印其他错误信息 - return nil, err // 返回其他错误 + log.Printf("Error querying in GetLiveTrackByUserId live track: %v", err) // 打印其他错误信息 + return nil, err // 返回其他错误 } // 查询成功,返回结果 @@ -620,7 +620,7 @@ func (lrm *LiveRoomMysqlStorage) GetGameDate(liveRoomID string, times int) (*Gam // 处理错误 if err != nil { if err == sql.ErrNoRows { - log.Printf("No live room found with ID: %s", liveRoomID) + log.Printf("No live room found in GetGameDate with ID: %s", liveRoomID) return nil, err // 没有找到数据,返回 ErrNoRows } log.Printf("Error querying GetGameDate : %v", err) // 打印其他错误信息 -- Gitee From 562fa212546558c849365b79b239ff759902d0dd Mon Sep 17 00:00:00 2001 From: udieudie Date: Sun, 15 Jun 2025 23:46:49 +0800 Subject: [PATCH 04/10] =?UTF-8?q?david/hotfix:=E4=BF=AE=E6=94=B9=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=94=A8=E6=88=B7=E9=98=B5=E8=90=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/manager/douyin/dy_service_manager.go | 4 ++-- app/service/live_room_service.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/manager/douyin/dy_service_manager.go b/app/manager/douyin/dy_service_manager.go index 9ddd770..125b5f1 100644 --- a/app/manager/douyin/dy_service_manager.go +++ b/app/manager/douyin/dy_service_manager.go @@ -361,10 +361,10 @@ func SyncUserGroupToDouYin(accessToken string, liveRoomId string, times int, gro // 构建请求参数 requestBody := struct { - Appid string `json:"appid"` + Appid string `json:"app_id"` GroupId string `json:"group_id"` OpenId string `json:"open_id"` - RoomId string `json:"roomid"` + RoomId string `json:"room_id"` RoundId int64 `json:"round_id"` }{ Appid: config.Get().Douyin.AppID, diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go index 76461e6..8f68e66 100644 --- a/app/service/live_room_service.go +++ b/app/service/live_room_service.go @@ -152,8 +152,8 @@ func (ls LiveRoomService) OneUserSendGift(msgID string, liveRoomID string, userI //liveStatus, hasErr := manager.Get().LiveRoomManager().GetLiveRoomStatus(liveRoomID) if err != nil { - fmt.Println("error: can not find liveRoomID from liveRoomManager") - return fmt.Errorf("error: can not find liveRoomID from liveRoomManager") + fmt.Println("error: can not find liveRoomID from liveRoomManager , err:", err) + return fmt.Errorf("error: can not find liveRoomID from liveRoomManager, %v", err) } if liveRoomInfo.State != "start" { return fmt.Errorf("send gift error liveRoomId is not start") @@ -161,7 +161,7 @@ func (ls LiveRoomService) OneUserSendGift(msgID string, liveRoomID string, userI userLiveTrack, err := manager.Get().LiveRoomManager().GetLiveTrackByUserId(liveRoomID, userId) if err != nil { - return fmt.Errorf("error: user does not join live room game") + return fmt.Errorf("error: user does not join live room game, %v", err) } track := userLiveTrack.Track -- Gitee From 73b6c5515891bcbe1c9c426be2399b0b28c44367 Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 00:09:24 +0800 Subject: [PATCH 05/10] =?UTF-8?q?david/hotfix:=E5=A2=9E=E5=8A=A0=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=8A=96=E9=9F=B3http=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/dyPushController.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go index 83fb0b7..75f95db 100644 --- a/app/controller/dyPushController.go +++ b/app/controller/dyPushController.go @@ -247,6 +247,8 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { } + fmt.Println("dyPushPingLun 处理一批评论成功") + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, @@ -299,6 +301,8 @@ func (h *dyPushController) dyPushGift(c *gin.Context) { } + fmt.Println("dyPushGift 处理一批礼物通知成功") + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, @@ -344,6 +348,8 @@ func (h *dyPushController) dyPushZan(c *gin.Context) { } + fmt.Println("dyPushZan 处理一批点赞通知成功") + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, @@ -400,6 +406,8 @@ func (h *dyPushController) dyPushFans(c *gin.Context) { } + fmt.Println("dyPushFans 处理一批加入粉丝团通知成功") + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, @@ -456,6 +464,12 @@ func (h *dyPushController) dyGetZhenYing(c *gin.Context) { userTrackInfo, err := manager.Get().LiveRoomManager().GetLiveTrackInfoByUserId(req.RoomId, req.OpenId) if err != nil { + fmt.Println("dyGetZhenYing 处理查询用户阵营 没有数据", + ", app_id : ", req.AppId, + ", room_id : ", req.RoomId, + ", openid : ", req.OpenId, + ) + c.JSON(http.StatusOK, gin.H{ "errcode": 0, "errmsg": "success", @@ -469,6 +483,12 @@ func (h *dyPushController) dyGetZhenYing(c *gin.Context) { return } + fmt.Println("dyGetZhenYing 处理查询用户阵营 有数据", + ", app_id : ", req.AppId, + ", room_id : ", req.RoomId, + ", openid : ", req.OpenId, + ) + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "errcode": 0, @@ -513,6 +533,14 @@ func (h *dyPushController) dyPushZhenYing(c *gin.Context) { return } + fmt.Println("dyPushZhenYing 加入阵营成功", "app_id : ", req.AppId, + "open_id : ", req.OpenId, + "room_id : ", req.RoomId, + "group_id : ", req.GroupId, + "avatar_url : ", req.AvatarUrl, + "nick_name : ", req.NickName, + ) + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, -- Gitee From 9fb05a63f718278a5ba16f3d02f11b616b2366be Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 00:21:32 +0800 Subject: [PATCH 06/10] =?UTF-8?q?david/hotfix:=E5=A2=9E=E5=8A=A0=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E9=98=B5=E8=90=A5=E6=97=B6=E7=94=A8=E6=88=B7=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E6=98=B5=E7=A7=B0=E9=87=8D=E6=96=B0=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/dyPushController.go | 4 ++-- app/controller/httpController.go | 4 ++-- app/controller/indexController.go | 22 ---------------------- app/service/live_room_service.go | 12 +++++++++++- 4 files changed, 15 insertions(+), 27 deletions(-) diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go index 75f95db..f185313 100644 --- a/app/controller/dyPushController.go +++ b/app/controller/dyPushController.go @@ -243,7 +243,7 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { for _, item := range finalComments { track, _ := strconv.Atoi(item.Content) - service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, track, 0) + service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, item.Nickname, item.AvatarURL, track, 0) } @@ -527,7 +527,7 @@ func (h *dyPushController) dyPushZhenYing(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"error": "params GroupId check error"}) return } - err = service.LiveRoomService{}.OneUserJoinTrack(req.RoomId, req.OpenId, trackNum, 0) + err = service.LiveRoomService{}.OneUserJoinTrack(req.RoomId, req.OpenId, req.NickName, req.AvatarUrl, trackNum, 0) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "dou yin push zhen ying but join error" + err.Error()}) return diff --git a/app/controller/httpController.go b/app/controller/httpController.go index b9e8a56..e7c269d 100644 --- a/app/controller/httpController.go +++ b/app/controller/httpController.go @@ -760,7 +760,7 @@ func (h *HttpController) GetPingLun(c *gin.Context) { for _, item := range finalComments { track, _ := strconv.Atoi(item.Content) - service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, track, 0) + service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, item.Nickname, item.AvatarURL, track, 0) } @@ -891,7 +891,7 @@ func (h *HttpController) getPingLunChuanQi(c *gin.Context) { if err != nil { continue } - service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, track, job) + service.LiveRoomService{}.OneUserJoinTrack(roomId, item.SecOpenID, item.Nickname, item.AvatarURL, track, job) } diff --git a/app/controller/indexController.go b/app/controller/indexController.go index acf989e..74bd116 100644 --- a/app/controller/indexController.go +++ b/app/controller/indexController.go @@ -426,25 +426,6 @@ func (i *IndexController) returnFailMsg(conn *websocket.Conn, msg Message, failM } } -func (i *IndexController) HandleJoinMessage(conn *websocket.Conn, msg Message) { - // 从conn获取LiveRoomID和ConnInfo - //connInfo, found := i.connManager.GetConnInfo(conn) - connInfo, found := manager.Get().ConnectionManager().GetConnInfo(conn) - if !found { - fmt.Println("error: connInfo not found for the given connection") - return - } - - liveRoomID := connInfo.ID - userId := connInfo.UserId - - track, _ := strconv.Atoi(msg.Data.Content) - - service.LiveRoomService{}.OneUserJoinTrack(liveRoomID, userId, track, 0) - - i.returnAckMsg(conn, msg) -} - func (i *IndexController) GenerateScoreMessage(currentScore int) models.LiveEventData { // 获取当前时间 @@ -554,9 +535,6 @@ func (i *IndexController) Do(conn *websocket.Conn, liveRoomID string) { case "send_gift": i.HandleGiftMessage(conn, msg) break - case "join_track": - i.HandleJoinMessage(conn, msg) - break case "start_game": i.HandleStartGameMessage(conn, msg) break diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go index 8f68e66..3a8394d 100644 --- a/app/service/live_room_service.go +++ b/app/service/live_room_service.go @@ -14,12 +14,22 @@ import ( type LiveRoomService struct{} -func (ls LiveRoomService) OneUserJoinTrack(liveRoomID string, userId string, track int, job int) error { +func (ls LiveRoomService) OneUserJoinTrack(liveRoomID string, userId string, nickName string, avatarUrl string, track int, job int) error { liveRoomInfo, err := manager.Get().LiveRoomManager().GetLiveInfo(liveRoomID) if err != nil { return fmt.Errorf("want join track but get live info error: %v, by no live room", err) } + // 用户不存在时进行初始化(示例值) + if err := manager.Get().UserManager().InitializeUser( + userId, + nickName, + avatarUrl, + 1, // 初始等级 + ); err != nil { + + } + err = manager.Get().LiveRoomManager().JoinLiveRoomCamp(liveRoomID, liveRoomInfo.Times, liveRoomInfo.State, userId, track, job) if err != nil { -- Gitee From 1995554ca95e14db68171ac8bb1d7e1d334ab4db Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 01:06:12 +0800 Subject: [PATCH 07/10] =?UTF-8?q?david/hotfix:=E8=B0=83=E6=95=B4=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E7=BB=93=E6=9D=9F=E4=B9=9F=E4=BC=9A=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=9A=84=E9=98=B5=E8=90=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/manager/live_room_mysql_storage.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/manager/live_room_mysql_storage.go b/app/manager/live_room_mysql_storage.go index 72f9f31..303871a 100644 --- a/app/manager/live_room_mysql_storage.go +++ b/app/manager/live_room_mysql_storage.go @@ -329,9 +329,9 @@ func (lrm *LiveRoomMysqlStorage) GetLiveRoomTrackMysql(liveRoomId string, userId return nil, fmt.Errorf("join live room track error : %v, by no live room", err) } - if liveRoomMysqlInfo.State == "end" { - return nil, fmt.Errorf("join live room track error : %v, by live room state is end", err) - } + //if liveRoomMysqlInfo.State == "end" { + // return nil, fmt.Errorf("join live room track error : %v, by live room state is end", err) + //} liveTrackUserMysqlInfo, err := lrm.GetLiveTrackByUserId(liveRoomId, userId, liveRoomMysqlInfo.Times) -- Gitee From cf74c457fd0cf3569e54d59685cb43759fd844a3 Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 10:11:36 +0800 Subject: [PATCH 08/10] =?UTF-8?q?david/hotfix:=E5=A2=9E=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=98=B5=E8=90=A5=E6=95=B0=E6=8D=AE=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/dyPushController.go | 55 +++++++++++++++++++++++++++++- configs/config.yaml | 21 ++++++------ 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go index f185313..df794ab 100644 --- a/app/controller/dyPushController.go +++ b/app/controller/dyPushController.go @@ -5,6 +5,7 @@ import ( "BlazeRider-backend/app/middleware" "BlazeRider-backend/app/models" "BlazeRider-backend/app/service" + "BlazeRider-backend/config" "BlazeRider-backend/routes" "fmt" "github.com/gin-gonic/gin" @@ -119,6 +120,14 @@ func (h *dyPushController) RegisterRoutes(router *gin.Engine) { // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyPushPingLun(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" && XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req []models.CommentOneRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format"}) @@ -262,6 +271,14 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyPushGift(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" && XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req []models.GiftRequestPayload if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ @@ -313,6 +330,14 @@ func (h *dyPushController) dyPushGift(c *gin.Context) { // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyPushZan(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" && XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req []models.LikeOneRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format"}) @@ -360,6 +385,14 @@ func (h *dyPushController) dyPushZan(c *gin.Context) { // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyPushFans(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" && XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req []models.FansOneRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format"}) @@ -418,12 +451,22 @@ func (h *dyPushController) dyPushFans(c *gin.Context) { // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyGetZhenYing(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" || XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req models.DouYinGetUserGroupRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"dyGetZhenYing error": "invalid request format"}) return } + fmt.Println("database now : ", config.Get().Database.DataBaseName) + // 检查 x-roomid 的值 xRoomId := c.GetHeader("x-roomid") if xRoomId == "" { @@ -489,6 +532,8 @@ func (h *dyPushController) dyGetZhenYing(c *gin.Context) { ", openid : ", req.OpenId, ) + groupId := strconv.Itoa(userTrackInfo.Track) + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "errcode": 0, @@ -497,13 +542,21 @@ func (h *dyPushController) dyGetZhenYing(c *gin.Context) { "round_id": GameTimes, "round_status": status, "user_group_status": 1, - "group_id": string(userTrackInfo.Track), + "group_id": groupId, }, }) } // 示例:获取用户信息的HTTP处理 func (h *dyPushController) dyPushZhenYing(c *gin.Context) { + // 检查 x-roomid 的值 + XSignature := c.GetHeader("X-Signature") + XTimestamp := c.GetHeader("X-Timestamp") + if XSignature == "" && XTimestamp == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "params not ready"}) + return + } + var req models.DouYinPushUserGroupRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"dyGetZhenYing error": "invalid request format"}) diff --git a/configs/config.yaml b/configs/config.yaml index 729b58a..1f93de6 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -1,16 +1,17 @@ app: - env: "dev" - port: 8001 +# dev, prod + env: "prod" + port: 8011 name: "BlazeRiderBackend" -database: - enabled: false - host: "localhost" - port: 3306 - user: "root" - database_name: "blazerider-test" - max_open_conns: 100 - max_idle_conns: 20 +#database: +# enabled: false +# host: "localhost" +# port: 3306 +# user: "root" +# database_name: "blazerider-test" +# max_open_conns: 100 +# max_idle_conns: 20 douyin: api_base_url: "https://developer.toutiao.com" -- Gitee From 9d958f7514485112cb4dd14bf41d500d4320b810 Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 10:48:15 +0800 Subject: [PATCH 09/10] =?UTF-8?q?david/hotfix:=E5=A4=84=E7=90=86=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E7=BB=93=E6=9D=9F=E4=B8=8A=E6=8A=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84rank=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/httpController.go | 8 +++++++- app/service/douyin_service.go | 14 +++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/controller/httpController.go b/app/controller/httpController.go index e7c269d..8ed9bdf 100644 --- a/app/controller/httpController.go +++ b/app/controller/httpController.go @@ -62,6 +62,12 @@ func (h *HttpController) RegisterRoutes(router *gin.Engine) { apiGroup.GET("/users/:userId", h.GetUserInfo) apiGroup.POST("/user", h.CreateUser) + // TODO 临时测试的接口 + apiGroup.POST("/testfinishGame", func(c *gin.Context) { + fmt.Println("[DEBUG] /testfinishGame") // 测试路由是否触发 + h.finishGame(c) + }) + //apiGroup.GET("/getPingLun", h.GetToken) apiGroup.POST("/getPingLun", func(c *gin.Context) { fmt.Println("[DEBUG] /api/v1/getPingLun hit") // 测试路由是否触发 @@ -416,7 +422,7 @@ func (h *HttpController) finishGame(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) - return + //return } if roomId != utils.TestRoomId { diff --git a/app/service/douyin_service.go b/app/service/douyin_service.go index 60028bd..02761f2 100644 --- a/app/service/douyin_service.go +++ b/app/service/douyin_service.go @@ -139,10 +139,14 @@ func (ls DouYinService) DealUploadUserGameResultService(liveRoomId string) error maxTryTimes := 3 - var results []models.LiveRoomResult + // 创建新切片,长度和容量与原数组相同 + sortResults := make([]models.LiveRoomResult, len(liveRoomResult)) + // 将原数组的内容复制到新切片 + copy(sortResults, liveRoomResult) + // 按 GetScore 降序排序 - sort.Slice(results, func(i, j int) bool { - return results[i].GetScore > results[j].GetScore + sort.Slice(sortResults, func(i, j int) bool { + return sortResults[i].GetScore > sortResults[j].GetScore }) for _, result := range liveRoomResult { @@ -155,8 +159,8 @@ func (ls DouYinService) DealUploadUserGameResultService(liveRoomId string) error rank := 100 - for i := 0; i < len(results); i++ { - if results[i].GetScore == result.GetScore { + for i := 0; i < len(sortResults); i++ { + if sortResults[i].GetScore == result.GetScore { rank = i + 1 } } -- Gitee From 1ed8941aefa3ac145d375001f059850719d236bd Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 10:53:15 +0800 Subject: [PATCH 10/10] =?UTF-8?q?david/hotfix:=E8=B0=83=E6=95=B4=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E7=94=A8=E6=88=B7=E5=AF=B9=E5=B1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E5=88=86=E6=95=B0=E4=B8=BA=E7=9B=AE=E6=A0=87=E6=80=BB?= =?UTF-8?q?=E5=88=86=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/service/douyin_service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/service/douyin_service.go b/app/service/douyin_service.go index 02761f2..6d43ff1 100644 --- a/app/service/douyin_service.go +++ b/app/service/douyin_service.go @@ -168,7 +168,7 @@ func (ls DouYinService) DealUploadUserGameResultService(liveRoomId string) error OpenId: result.UserID, Rank: rank, RoundResult: gameResult, - Score: result.GetScore, + Score: result.TargetScore, WinningPoints: 0, WinningStreakCount: 0, } -- Gitee