From f32f33b5529d796063dcff52dc6a184ecbf9a29b Mon Sep 17 00:00:00 2001 From: udieudie Date: Mon, 16 Jun 2025 11:12:10 +0800 Subject: [PATCH 1/6] =?UTF-8?q?david/feat:=E6=94=B9=E5=9B=9E=E7=AB=AF?= =?UTF-8?q?=E5=8F=A3=E4=BB=8E8011=E5=88=B08001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/config.yaml b/configs/config.yaml index 1f93de6..9c9ad49 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -1,7 +1,7 @@ app: # dev, prod env: "prod" - port: 8011 + port: 8001 name: "BlazeRiderBackend" #database: -- Gitee From f537ae60c97ca239a1c8bf34666b3aa94daba313 Mon Sep 17 00:00:00 2001 From: udieudie Date: Tue, 24 Jun 2025 11:00:32 +0800 Subject: [PATCH 2/6] =?UTF-8?q?david/feat:=E5=A2=9E=E5=8A=A0=E5=88=B0?= =?UTF-8?q?=E5=85=B13=E4=B8=AA=E6=A8=A1=E5=BC=8F=EF=BC=8C=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E6=A8=A1=E5=BC=8F=E7=8B=AC=E7=AB=8B=E8=AE=A1=E7=AE=97?= =?UTF-8?q?finish=5Ftime=EF=BC=8C=E6=A8=A1=E5=BC=8F=E4=BB=8E1=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=EF=BC=8Cfinish=5Ftime=EF=BC=8Cfinish=5Ftime1=EF=BC=8C?= =?UTF-8?q?finish=5Ftime2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/manager/gift_manager.go | 1 + app/manager/live_room_mamanger.go | 2 + app/manager/live_room_mysql_storage.go | 8 ++-- app/manager/user_mysql_storage.go | 52 +++++++++++++++++++++++--- app/models/models.go | 6 ++- app/service/live_room_service.go | 13 ++++++- templates/index.html | 20 +++++++--- 7 files changed, 86 insertions(+), 16 deletions(-) diff --git a/app/manager/gift_manager.go b/app/manager/gift_manager.go index a22109e..f711de6 100644 --- a/app/manager/gift_manager.go +++ b/app/manager/gift_manager.go @@ -21,6 +21,7 @@ var giftList = []Gift{ {ID: "1", Name: "点赞", Value: 0, Score: 1, UpgradeLimit: 999999}, {ID: "2", Name: "加入粉丝团", Value: 10, Score: 75, UpgradeLimit: 999999}, {ID: "3", Name: "粉丝团升级", Value: 100, Score: 750, UpgradeLimit: 999999}, + {ID: "4", Name: "666", Value: 0, Score: 2, UpgradeLimit: 999999}, {ID: "n1/Dg1905sj1FyoBlQBvmbaDZFBNaKuKZH6zxHkv8Lg5x2cRfrKUTb8gzMs=", Name: "仙女棒", Value: 10, Score: 75, UpgradeLimit: 66}, {ID: "eplFUy7i0B0fiv0Iym1MpOZa5XmUE8g/WUAyJ6Tc+UJJDpcs7pzclNOz/WM=", Name: "黄色仙女棒", Value: 10, Score: 75, UpgradeLimit: 66}, {ID: "4I66OIE1HKWfM7PNvAHtAgYUSNlggSEgcpo3ai8GYQXAWqjrDuH8NtjsWEQ=", Name: "蓝色仙女棒", Value: 10, Score: 75, UpgradeLimit: 66}, diff --git a/app/manager/live_room_mamanger.go b/app/manager/live_room_mamanger.go index eac9293..168b9d4 100644 --- a/app/manager/live_room_mamanger.go +++ b/app/manager/live_room_mamanger.go @@ -310,6 +310,8 @@ func (lrm *LiveRoomManager) BatchInsertLiveRoomResults(results []models.LiveRoom Mileage: result.Mileage, JumpHeight: result.JumpHeight, FinishTime: result.FinishTime, + FinishTime1: result.FinishTime1, + FinishTime2: result.FinishTime2, FastestSpeed: result.FastestSpeed, AttackPower: result.AttackPower, ExpireAt: result.ExpireAt, diff --git a/app/manager/live_room_mysql_storage.go b/app/manager/live_room_mysql_storage.go index 6258c84..2221b1e 100644 --- a/app/manager/live_room_mysql_storage.go +++ b/app/manager/live_room_mysql_storage.go @@ -73,6 +73,8 @@ type LiveRoomResultMysqlInfo struct { Mileage int `db:"mileage"` JumpHeight float32 `db:"jump_height"` FinishTime int `db:"jump_height"` + FinishTime1 int `db:"jump_height1"` + FinishTime2 int `db:"jump_height2"` FastestSpeed int `db:"jump_height"` AttackPower int `db:"attack_power"` ExpireAt sql.NullTime `db:"expire_at"` @@ -402,9 +404,9 @@ func (lrm *LiveRoomMysqlStorage) BatchInsertLiveRoomResults(results []LiveRoomRe stmt, err := db.GetDB().Prepare(`INSERT INTO live_room_result ( live_room_id, times, user_id, game_score, track, job, is_champion, is_finish, is_biggest, gift_value, gift_score, get_score, has_done, user_name, head_img, user_level, user_score, target_level, target_score, - mileage, jump_height, finish_time, fastest_speed, attack_power, + mileage, jump_height, finish_time, finish_time1, finish_time2, fastest_speed, attack_power, expire_at, create_at, update_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`) + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`) if err != nil { return fmt.Errorf("prepare statement error: %v", err) } @@ -416,7 +418,7 @@ func (lrm *LiveRoomMysqlStorage) BatchInsertLiveRoomResults(results []LiveRoomRe result.IsChampion, result.IsFinish, result.IsBiggest, result.GiftValue, result.GiftScore, result.GetScore, result.HasDone, result.UserName, result.HeadImg, result.UserLevel, result.UserScore, result.TargetLevel, result.TargetScore, result.Mileage, result.JumpHeight, - result.FinishTime, result.FastestSpeed, result.AttackPower, + result.FinishTime, result.FinishTime1, result.FinishTime2, result.FastestSpeed, result.AttackPower, result.ExpireAt, ) if err != nil { diff --git a/app/manager/user_mysql_storage.go b/app/manager/user_mysql_storage.go index 05a90b6..8472b50 100644 --- a/app/manager/user_mysql_storage.go +++ b/app/manager/user_mysql_storage.go @@ -333,7 +333,7 @@ func (um *userMySQLStorage) GetRanks() (*models.RankInfos, error) { // 获取用户信息 func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) { - var fastestSpeed, finishTime, jumpHeight, attackPower = 0, 0, float32(0.0), 0 + var fastestSpeed, finishTime, finishTime1, finishTime2, jumpHeight, attackPower = 0, 0, 0, 0, float32(0.0), 0 // 获取最快速度 err := db.GetDB().QueryRow(` select MAX(fastest_speed) from live_room_result @@ -345,11 +345,12 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) { if err == sql.ErrNoRows { } else { // 记录日志 - return nil, err + fmt.Println("GetWorldRecords fastestSpeed sql error : ", err) + //return nil, err } } - // 获取最短完成时间 + // 获取最短完成时间 模式1 err = db.GetDB().QueryRow(` select Min(finish_time) from live_room_result where finish_time > 0 @@ -361,7 +362,42 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) { if err == sql.ErrNoRows { } else { // 记录日志 - return nil, err + fmt.Println("GetWorldRecords finishTime sql error : ", err) + //return nil, err + } + } + + // 获取最短完成时间 模式2 + err = db.GetDB().QueryRow(` + select Min(finish_time1) from live_room_result + where finish_time1 > 0 + `).Scan( + &finishTime1, + ) + + if err != nil { + if err == sql.ErrNoRows { + } else { + // 记录日志 + fmt.Println("GetWorldRecords finishTime1 sql error : ", err) + //return nil, err + } + } + + // 获取最短完成时间 模式3 + err = db.GetDB().QueryRow(` + select Min(finish_time2) from live_room_result + where finish_time2 > 0 + `).Scan( + &finishTime2, + ) + + if err != nil { + if err == sql.ErrNoRows { + } else { + // 记录日志 + fmt.Println("GetWorldRecords finish_time2 sql error : ", err) + //return nil, err } } @@ -377,7 +413,8 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) { return nil, err } // 记录日志 - return nil, err + fmt.Println("GetWorldRecords jumpHeight sql error : ", err) + //return nil, err } // 最强攻击 @@ -392,12 +429,15 @@ func (um *userMySQLStorage) GetWorldRecords() (*models.WorldRecods, error) { return nil, err } // 记录日志 - return nil, err + fmt.Println("GetWorldRecords attackPower sql error : ", err) + //return nil, err } worldRecods := models.WorldRecods{ FastestSpeed: fastestSpeed, FinishTime: finishTime, + FinishTime1: finishTime1, + FinishTime2: finishTime2, JumpHeight: jumpHeight, AttackPower: attackPower, } diff --git a/app/models/models.go b/app/models/models.go index 91c8833..2062a1a 100644 --- a/app/models/models.go +++ b/app/models/models.go @@ -49,7 +49,7 @@ type FinishTrackInfo struct { FinishTime int `json:"finish_time"` //完成时间(s) FastestSpeed int `json:"fastest_speed"` //最快速度 AttackPower int `json:"attack_power"` //当局的导弹次数 - + GameMode int `json:"game_mode"` //当局的游戏类型,从1开始 } // LiveRoomResult 表示 live_room_result 表的结构 @@ -76,6 +76,8 @@ type LiveRoomResult struct { Mileage int `json:"mileage"` JumpHeight float32 `json:"jump_height"` FinishTime int `json:"finish_time"` + FinishTime1 int `json:"finish_time1"` + FinishTime2 int `json:"finish_time2"` FastestSpeed int `json:"fastest_speed"` AttackPower int `json:"attack_power"` ExpireAt sql.NullTime `json:"expire_at"` @@ -101,6 +103,8 @@ type RankInfos struct { type WorldRecods struct { FastestSpeed int `json:"fastest_speed"` FinishTime int `json:"finish_time"` + FinishTime1 int `json:"finish_time1"` + FinishTime2 int `json:"finish_time2"` JumpHeight float32 `json:"jump_height"` AttackPower int `json:"attack_power"` } diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go index 3a8394d..bf45f25 100644 --- a/app/service/live_room_service.go +++ b/app/service/live_room_service.go @@ -574,12 +574,21 @@ func (ls LiveRoomService) FinishGame(msgID string, liveRoomId string, finishTrac mileage := 0 jumpHeight := float32(0) finishTime := 0 + finishTime1 := 0 + finishTime2 := 0 fastestSpeed := 0 attackPower := 0 for _, info := range finishTrackInfos { if scoreRecord.Track == info.Track { mileage = info.Mileage - finishTime = info.FinishTime + if info.GameMode == 1 || info.GameMode == 0 { + finishTime = info.FinishTime + } else if info.GameMode == 2 { + finishTime1 = info.FinishTime + } else if info.GameMode == 3 { + finishTime2 = info.FinishTime + } + fastestSpeed = info.FastestSpeed attackPower = info.AttackPower } @@ -611,6 +620,8 @@ func (ls LiveRoomService) FinishGame(msgID string, liveRoomId string, finishTrac Mileage: mileage, JumpHeight: jumpHeight, FinishTime: finishTime, + FinishTime1: finishTime1, + FinishTime2: finishTime2, FastestSpeed: fastestSpeed, AttackPower: attackPower, ExpireAt: sql.NullTime{ diff --git a/templates/index.html b/templates/index.html index 39c0cd6..6b047cb 100644 --- a/templates/index.html +++ b/templates/index.html @@ -98,6 +98,11 @@

+ +
+
+
+
@@ -1162,9 +1167,10 @@ "is_finish": 1, "mileage": 100, "jump_height": 8.5, - "finish_time": 52, //完成时间 + "finish_time": 105, //完成时间 "fastest_speed": 20, // 当局最快速度 "attack_power": 3, // 当局的导弹次数 + "game_mode": 3, // 当局的游戏类型,从1开始 }, { "track": 2, @@ -1172,9 +1178,10 @@ "is_finish": 1, "mileage": 100, "jump_height": 3.65, - "finish_time": 68, //完成时间 + "finish_time": 0, //完成时间 "fastest_speed": 22, // 当局最快速度 "attack_power": 1, // 当局的导弹次数 + "game_mode": 3, // 当局的游戏类型,从1开始 }, { "track": 3, @@ -1182,9 +1189,10 @@ "is_finish": 0, "mileage": 70, "jump_height": 5, - "finish_time": 0, //完成时间 + "finish_time": 180, //完成时间 "fastest_speed": 15, // 当局最快速度 "attack_power": 10, // 当局的导弹次数 + "game_mode": 3, // 当局的游戏类型,从1开始 }, ], // 阵营完成信息 "timestamp":1649068664, // 评论毫秒级时间戳 @@ -1266,10 +1274,12 @@ console.log("sendGetRanksRequest function res 222 : ", resdata.data, typeof resdata.data) let fastest_speed = resdata.data.records.fastest_speed let finish_time = resdata.data.records.finish_time + let finish_time1 = resdata.data.records.finish_time1 + let finish_time2 = resdata.data.records.finish_time2 let jump_height = resdata.data.records.jump_height let attack_power = resdata.data.records.attack_power - console.log("sendGetWorldRecordsRequest 4 num : ", fastest_speed - , finish_time, jump_height, attack_power + console.log("sendGetWorldRecordsRequest 6 num : ", fastest_speed + , finish_time, finish_time1, finish_time2, jump_height, attack_power ) }); } -- Gitee From 9c553b74074abf33dd73574e8f5a6b65d09f6ac6 Mon Sep 17 00:00:00 2001 From: udieudie Date: Tue, 24 Jun 2025 14:56:29 +0800 Subject: [PATCH 3/6] =?UTF-8?q?david/feat:=E5=A2=9E=E5=8A=A0=E8=AF=84?= =?UTF-8?q?=E8=AE=BA666=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/httpController.go | 58 ++++++++++++++++++++++++++++++-- templates/index.html | 6 ++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/app/controller/httpController.go b/app/controller/httpController.go index 26e5c69..ac8f7bb 100644 --- a/app/controller/httpController.go +++ b/app/controller/httpController.go @@ -10,6 +10,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "net/http" + "regexp" "strconv" "sync" "time" @@ -700,7 +701,7 @@ func (h *HttpController) GetPingLun(c *gin.Context) { /* 处理评论数据 */ // 筛选出加入赛道的数据 - matchStrArray := []string{"1", "2", "3"} + joinMatchStrArray := []string{"1", "2", "3"} // 用于存储最终筛选结果(保留最早时间的评论) // 定义一个新的切片,保持和原始结构相同的结构 @@ -726,7 +727,7 @@ func (h *HttpController) GetPingLun(c *gin.Context) { // 遍历 req.Arr,筛选符合条件的评论 for _, item := range req.Arr { // 检查 Content 是否在 matchStrArray 中 - for _, matchStr := range matchStrArray { + for _, matchStr := range joinMatchStrArray { if item.Content == matchStr { // 检查是否已经存在该 SecOpenID 的评论 if existingItem, exists := secOpenIDMap[item.SecOpenID]; !exists || item.Timestamp < existingItem.Timestamp { @@ -770,6 +771,59 @@ func (h *HttpController) GetPingLun(c *gin.Context) { } + // 处理除加入外的互动 + actRegexArray := []*regexp.Regexp{ + regexp.MustCompile(`^6+$`), // 匹配任意长度的全6字符串(如"6", "666"),代表加油 + } + + // finalComments = finalComments[:0] 后,切片可继续存储的元素数量​​上限为原容量值​​,超出时会按 Go 的规则自动扩容(无固定限制,但受内存约束)。复用切片时,此操作是​​高性能最佳实践 + finalComments = finalComments[:0] + + var actMsgList []struct { + MsgID string `json:"msg_id"` + SecOpenID string `json:"sec_openid"` + Content string `json:"content"` + AvatarURL string `json:"avatar_url"` + Nickname string `json:"nickname"` + Timestamp int64 `json:"timestamp"` + } + + // 遍历 req.Arr,筛选符合条件的评论 + for _, item := range req.Arr { + // 检查 Content 是否在 matchStrArray 中 + for _, reg := range actRegexArray { + if reg.MatchString(item.Content) { + // 检查是否已经存在该 SecOpenID 的评论 + actMsgList = append(actMsgList, struct { + MsgID string `json:"msg_id"` + SecOpenID string `json:"sec_openid"` + Content string `json:"content"` + AvatarURL string `json:"avatar_url"` + Nickname string `json:"nickname"` + Timestamp int64 `json:"timestamp"` + }{ + MsgID: item.MsgID, + SecOpenID: item.SecOpenID, + Content: item.Content, + AvatarURL: item.AvatarURL, + Nickname: item.Nickname, + Timestamp: item.Timestamp, + }) + break + } + } + } + + // 处理非加入轨道类互动评论 + for _, item := range actMsgList { + if actRegexArray[0].MatchString(item.Content) { + // 匹配并赠送666字符串的加速 + err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1) + if err != nil { + } + } + } + // 返回处理结果(根据业务需求调整返回结构) c.JSON(http.StatusOK, gin.H{ "code": 0, diff --git a/templates/index.html b/templates/index.html index 6b047cb..e6eb355 100644 --- a/templates/index.html +++ b/templates/index.html @@ -50,9 +50,11 @@
+ + - + @@ -243,7 +245,7 @@ value: 100, }, { - id: 11, + id: 13, giftId : "fJs8HKQ0xlPRixn8JAUiL2gFRiLD9S6IFCFdvZODSnhyo9YN8q7xUuVVyZI=", name: "魔法镜", value: 190, -- Gitee From 3bc8bf6550ee91afa1593d6887459433b53a8ac4 Mon Sep 17 00:00:00 2001 From: udieudie Date: Tue, 24 Jun 2025 17:41:27 +0800 Subject: [PATCH 4/6] =?UTF-8?q?david/feat:=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E7=94=A8=E6=88=B7=E6=B2=A1=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E9=98=B5=E8=90=A5=E5=B0=B1=E9=80=81=E7=A4=BC=E7=89=A9=E4=BA=92?= =?UTF-8?q?=E5=8A=A8=E7=9A=84=E8=AF=9D=EF=BC=8C=E5=B0=B1=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E7=BB=99=E4=BB=96=E5=8A=A0=E5=85=A5=E9=98=B5=E8=90=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/service/live_room_service.go | 13 ++++- app/utils/game.go | 85 ++++++++++++++++++++++++++++++++ config/config.go | 17 +++++++ configs/config.dev.yaml | 4 +- configs/config.prod.yaml | 4 +- 5 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 app/utils/game.go diff --git a/app/service/live_room_service.go b/app/service/live_room_service.go index bf45f25..5946cf7 100644 --- a/app/service/live_room_service.go +++ b/app/service/live_room_service.go @@ -171,7 +171,18 @@ 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, %v", err) + userInfo, err := manager.Get().UserManager().GetUser(userId) + if err != nil { + } + + track, _ := utils.GetRandomTeamId() + job, _ := utils.GetRandomJobId() + + ls.OneUserJoinTrack(liveRoomID, userId, userInfo.UserName, userInfo.HeadImg, track, job) + fmt.Printf("用户id : %s, 暂未加入直播间: %s, 阵营却送了礼物,自动加入阵营: %d, 职业: %d", + userId, liveRoomID, track, job) + + userLiveTrack, err = manager.Get().LiveRoomManager().GetLiveTrackByUserId(liveRoomID, userId) } track := userLiveTrack.Track diff --git a/app/utils/game.go b/app/utils/game.go new file mode 100644 index 0000000..9a13b4a --- /dev/null +++ b/app/utils/game.go @@ -0,0 +1,85 @@ +// app/utils/utils.go +package utils + +import ( + "BlazeRider-backend/config" + "fmt" + "math/rand" + "strconv" + "strings" + "time" +) + +// GetTeamArr 获取config配置中的team对应的数字 +func GetTeamArr() ([]int, error) { + teamSetString := config.Get().Game.Team + // 将字符串分割 + strArr := strings.Split(teamSetString, ",") // ["1", "2", "3"] + + // 将team字符串 转换为整型数组 + var intArr []int + + for _, s := range strArr { + num, err := strconv.Atoi(strings.TrimSpace(s)) // 去除空格并转换 + if err != nil { + fmt.Printf("转换失败: %s\n", s) + continue // 跳过无效值 + } + intArr = append(intArr, num) // 添加到整型数组 + } + return intArr, nil +} + +// GetRandomTeamId 获取config配置中的team中的随机一个id +func GetRandomTeamId() (int, error) { + teamArr, err := GetTeamArr() + if err != nil { + return 0, err + } + // 3. 随机选择一个数字 + if len(teamArr) == 0 { + fmt.Println("配置中的数组为空,无法选择队伍id") + } + + rand.Seed(time.Now().UnixNano()) // 初始化随机种子 + randomIndex := rand.Intn(len(teamArr)) // 生成随机索引 + track := teamArr[randomIndex] // 获取随机值 + return track, nil +} + +// GetJobArr 获取config配置中的GetJobArr对应的数字 +func GetJobArr() ([]int, error) { + teamSetString := config.Get().Game.Job + // 将字符串分割 + strArr := strings.Split(teamSetString, ",") // ["1", "2", "3"] + + // 将team字符串 转换为整型数组 + var intArr []int + + for _, s := range strArr { + num, err := strconv.Atoi(strings.TrimSpace(s)) // 去除空格并转换 + if err != nil { + fmt.Printf("转换失败: %s\n", s) + continue // 跳过无效值 + } + intArr = append(intArr, num) // 添加到整型数组 + } + return intArr, nil +} + +// GetRandomJobId 获取config配置中的job中的随机id +func GetRandomJobId() (int, error) { + jobArr, err := GetJobArr() + if err != nil { + return 0, err + } + // 3. 随机选择一个数字 + if len(jobArr) == 0 { + return 0, nil + } + + rand.Seed(time.Now().UnixNano()) // 初始化随机种子 + randomIndex := rand.Intn(len(jobArr)) // 生成随机索引 + track := jobArr[randomIndex] // 获取随机值 + return track, nil +} diff --git a/config/config.go b/config/config.go index 61033b0..46d73c3 100644 --- a/config/config.go +++ b/config/config.go @@ -33,10 +33,16 @@ type DouyinConfig struct { APIWebcastBaseURL string `yaml:"api_webcast_base_url"` } +type GameConfig struct { + Team string `yaml:"team"` + Job string `yaml:"job"` +} + type Config struct { App AppConfig `yaml:"app"` Database DatabaseConfig `yaml:"database"` Douyin DouyinConfig `yaml:"douyin"` + Game GameConfig `yaml:"game"` } var globalConfig *Config @@ -124,6 +130,7 @@ func mergeConfigs(base, override *Config) *Config { App: mergeAppConfig(base.App, override.App), Database: mergeDBConfig(base.Database, override.Database), Douyin: mergeDouyinConfig(base.Douyin, override.Douyin), + Game: mergeGameConfig(base.Game, override.Game), } } @@ -237,3 +244,13 @@ func mergeDouyinConfig(base, override DouyinConfig) DouyinConfig { } return base } + +func mergeGameConfig(base, override GameConfig) GameConfig { + if override.Team != "" { + base.Team = override.Team + } + if override.Job != "" { + base.Job = override.Job + } + return base +} diff --git a/configs/config.dev.yaml b/configs/config.dev.yaml index e4fee0a..c1c6f92 100644 --- a/configs/config.dev.yaml +++ b/configs/config.dev.yaml @@ -8,4 +8,6 @@ database: max_open_conns: 100 max_idle_conns: 20 -douyin: +game: + team: "1,2,3" + job: "" diff --git a/configs/config.prod.yaml b/configs/config.prod.yaml index 80e6e3e..4a9b1d2 100644 --- a/configs/config.prod.yaml +++ b/configs/config.prod.yaml @@ -12,4 +12,6 @@ database: max_open_conns: 100 max_idle_conns: 20 -douyin: +game: + team: "1,2,3" + job: "" \ No newline at end of file -- Gitee From bd054c86cf0067963b0bbaec17d973196ff8d363 Mon Sep 17 00:00:00 2001 From: udieudie Date: Tue, 24 Jun 2025 23:39:28 +0800 Subject: [PATCH 5/6] =?UTF-8?q?david/feat:=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E6=8A=96=E9=9F=B3=E6=8E=A8=E9=80=81=E7=9A=84=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=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 | 56 +++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go index 55e4d3e..fdb281f 100644 --- a/app/controller/dyPushController.go +++ b/app/controller/dyPushController.go @@ -10,6 +10,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "net/http" + "regexp" "strconv" ) @@ -130,7 +131,7 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { var req []models.CommentOneRequest if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format"}) + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request format " + err.Error()}) return } @@ -256,6 +257,59 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { } + // 处理除加入外的互动 + actRegexArray := []*regexp.Regexp{ + regexp.MustCompile(`^6+$`), // 匹配任意长度的全6字符串(如"6", "666"),代表加油 + } + + // finalComments = finalComments[:0] 后,切片可继续存储的元素数量​​上限为原容量值​​,超出时会按 Go 的规则自动扩容(无固定限制,但受内存约束)。复用切片时,此操作是​​高性能最佳实践 + finalComments = finalComments[:0] + + var actMsgList []struct { + MsgID string `json:"msg_id"` + SecOpenID string `json:"sec_openid"` + Content string `json:"content"` + AvatarURL string `json:"avatar_url"` + Nickname string `json:"nickname"` + Timestamp int64 `json:"timestamp"` + } + + // 遍历 req.Arr,筛选符合条件的评论 + for _, item := range req { + // 检查 Content 是否在 matchStrArray 中 + for _, reg := range actRegexArray { + if reg.MatchString(item.Content) { + // 检查是否已经存在该 SecOpenID 的评论 + actMsgList = append(actMsgList, struct { + MsgID string `json:"msg_id"` + SecOpenID string `json:"sec_openid"` + Content string `json:"content"` + AvatarURL string `json:"avatar_url"` + Nickname string `json:"nickname"` + Timestamp int64 `json:"timestamp"` + }{ + MsgID: item.MsgID, + SecOpenID: item.SecOpenID, + Content: item.Content, + AvatarURL: item.AvatarURL, + Nickname: item.Nickname, + Timestamp: item.Timestamp, + }) + break + } + } + } + + // 处理非加入轨道类互动评论 + for _, item := range actMsgList { + if actRegexArray[0].MatchString(item.Content) { + // 匹配并赠送666字符串的加速 + err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1) + if err != nil { + } + } + } + fmt.Println("dyPushPingLun 处理一批评论成功") // 返回处理结果(根据业务需求调整返回结构) -- Gitee From 111f090011cf71eb439aedd4429575e79c37d490 Mon Sep 17 00:00:00 2001 From: udieudie Date: Wed, 25 Jun 2025 00:00:21 +0800 Subject: [PATCH 6/6] =?UTF-8?q?david/feat:=E5=A2=9E=E5=8A=A0=E6=AF=8F?= =?UTF-8?q?=E6=AC=A1=E9=80=81=E7=A4=BC=E7=89=A9=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=94=A8=E6=88=B7=E7=9A=84=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E6=98=B5=E7=A7=B0=EF=BC=8C=E8=BF=99=E6=A0=B7=E6=89=8D=E8=83=BD?= =?UTF-8?q?=E4=BF=9D=E8=AF=81=E9=80=81=E7=A4=BC=E7=89=A9=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E6=AD=A3=E7=A1=AE=E7=9A=84=E5=8A=A0=E5=85=A5=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/dyPushController.go | 32 ++++++++++++++++++++++++++++++ app/controller/httpController.go | 24 ++++++++++++++++++++++ app/service/douyin_service.go | 8 ++++++++ 3 files changed, 64 insertions(+) diff --git a/app/controller/dyPushController.go b/app/controller/dyPushController.go index fdb281f..b77ef08 100644 --- a/app/controller/dyPushController.go +++ b/app/controller/dyPushController.go @@ -303,6 +303,14 @@ func (h *dyPushController) dyPushPingLun(c *gin.Context) { // 处理非加入轨道类互动评论 for _, item := range actMsgList { if actRegexArray[0].MatchString(item.Content) { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } // 匹配并赠送666字符串的加速 err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1) if err != nil { @@ -364,6 +372,14 @@ func (h *dyPushController) dyPushGift(c *gin.Context) { } for _, item := range req { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, item.SecGiftId, item.GiftNum) if err != nil { @@ -420,6 +436,14 @@ func (h *dyPushController) dyPushZan(c *gin.Context) { } for _, item := range req { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "1", item.LikeNum) if err != nil { @@ -486,6 +510,14 @@ func (h *dyPushController) dyPushFans(c *gin.Context) { // 代表加入粉丝团 + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, giftId, 1) if err != nil { diff --git a/app/controller/httpController.go b/app/controller/httpController.go index 4e08650..8083de9 100644 --- a/app/controller/httpController.go +++ b/app/controller/httpController.go @@ -825,6 +825,14 @@ func (h *HttpController) GetPingLun(c *gin.Context) { // 处理非加入轨道类互动评论 for _, item := range actMsgList { if actRegexArray[0].MatchString(item.Content) { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } // 匹配并赠送666字符串的加速 err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "4", 1) if err != nil { @@ -990,6 +998,14 @@ func (h *HttpController) GetLikeRequest(c *gin.Context) { } for _, item := range req.Arr { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, "1", item.LikeNum) if err != nil { @@ -1021,6 +1037,14 @@ func (h *HttpController) GetGiftRequest(c *gin.Context) { } for _, item := range req.Arr { + if err := manager.Get().UserManager().InitializeUser( + item.SecOpenID, + item.Nickname, + item.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err := service.LiveRoomService{}.OneUserSendGift(item.MsgID, roomId, item.SecOpenID, item.SecGiftId, item.GiftNum) if err != nil { diff --git a/app/service/douyin_service.go b/app/service/douyin_service.go index 3938e2b..82dfefe 100644 --- a/app/service/douyin_service.go +++ b/app/service/douyin_service.go @@ -373,6 +373,14 @@ func (ls DouYinService) DealDouYinAllGiftFailedData() error { // 处理新数据 for _, giftRecord := range newFailGiftRecodArr { + if err := manager.Get().UserManager().InitializeUser( + giftRecord.SecOpenID, + giftRecord.Nickname, + giftRecord.AvatarURL, + 1, // 初始等级 + ); err != nil { + + } err = LiveRoomService{}.OneUserSendGift(giftRecord.MsgID, info.LiveRoomId, giftRecord.SecOpenID, giftRecord.SecGiftId, giftRecord.GiftNum) // TODO 标记已经处理的数据 setStatus := "success" -- Gitee