fix: 修复礼物配置问题。
parent
18e676c28d
commit
b05ea363b3
@ -0,0 +1,154 @@
|
|||||||
|
package gift_collect
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"git.noahlan.cn/northlan/ntools-go/gorm-zero/gormx"
|
||||||
|
"git.noahlan.cn/northlan/ntools-go/uuid"
|
||||||
|
jsoniter "github.com/json-iterator/go"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"io"
|
||||||
|
pbVars "live-service/app/pb/vars"
|
||||||
|
"live-service/app/user_center/model"
|
||||||
|
"live-service/app/user_center/rpc/internal/svc"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
giftTypeYuChi = "YUCHI"
|
||||||
|
giftTypeYuWan = "YUWAN"
|
||||||
|
)
|
||||||
|
|
||||||
|
func isDouyuPaidGift(giftType string) bool {
|
||||||
|
if giftType == giftTypeYuChi {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if giftType == giftTypeYuWan {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func GiftCollectorDouyu(ctx context.Context, svcCtx *svc.ServiceContext) (map[int64]GiftData, error) {
|
||||||
|
platform := pbVars.Platform_name[int32(pbVars.Platform_Douyu)]
|
||||||
|
cfg := svcCtx.GameConfig.GiftCollector.Douyu
|
||||||
|
if !cfg.Enabled {
|
||||||
|
return nil, errors.New("未开启")
|
||||||
|
}
|
||||||
|
radio, _ := svcCtx.GameConfig.GiftToRMB[platform]
|
||||||
|
ret := make(map[int64]GiftData)
|
||||||
|
|
||||||
|
// bagGiftData
|
||||||
|
{
|
||||||
|
httpResp, err := http.Get("https://webconf.douyucdn.cn/resource/common/prop_gift_list/prop_gift_config.json")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
httpBodyResp, err := io.ReadAll(httpResp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
httpBodyResp = httpBodyResp[len("DYConfigCallback("):]
|
||||||
|
httpBodyResp = httpBodyResp[:len(httpBodyResp)-2]
|
||||||
|
|
||||||
|
var gf struct {
|
||||||
|
Data map[string]struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Price int64 `json:"pc"`
|
||||||
|
Pic string `json:"bimg"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
err = jsoniter.Unmarshal(httpBodyResp, &gf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for id, g := range gf.Data {
|
||||||
|
idInt, err := strconv.ParseInt(id, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
gfCfg := GiftData{
|
||||||
|
ID: idInt,
|
||||||
|
Name: g.Name,
|
||||||
|
IsPaid: true,
|
||||||
|
Price: float64(g.Price) * radio,
|
||||||
|
Pic: g.Pic,
|
||||||
|
}
|
||||||
|
ret[gfCfg.ID] = gfCfg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// roomGiftData
|
||||||
|
{
|
||||||
|
httpResp, err := http.Get(fmt.Sprintf("https://gift.douyucdn.cn/api/gift/v3/web/list?rid=%d", cfg.RoomId))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
httpBodyResp, err := io.ReadAll(httpResp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
type GiftPriceInfo struct {
|
||||||
|
Price int64 `json:"price"`
|
||||||
|
PriceType string `json:"priceType"`
|
||||||
|
}
|
||||||
|
type BasicInfo struct {
|
||||||
|
GiftPic string `json:"giftPic"`
|
||||||
|
}
|
||||||
|
var gf struct {
|
||||||
|
Data struct {
|
||||||
|
GiftList []struct {
|
||||||
|
ID int64 `json:"id"` // 礼物ID
|
||||||
|
Name string `json:"name"` // 礼物名
|
||||||
|
PicUrlPrefix string `json:"picUrlPrefix"` // 礼物图前缀
|
||||||
|
BasicInfo `json:"basicInfo"` // 基础信息
|
||||||
|
GiftPriceInfo `json:"priceInfo"` // 价格参数
|
||||||
|
} `json:"giftList"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
err = jsoniter.Unmarshal(httpBodyResp, &gf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, g := range gf.Data.GiftList {
|
||||||
|
gfCfg := GiftData{
|
||||||
|
ID: g.ID,
|
||||||
|
Name: g.Name,
|
||||||
|
IsPaid: isDouyuPaidGift(g.PriceType),
|
||||||
|
Price: float64(g.Price),
|
||||||
|
Pic: g.PicUrlPrefix + g.BasicInfo.GiftPic,
|
||||||
|
}
|
||||||
|
ret[gfCfg.ID] = gfCfg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ = svcCtx.GiftModel.TransactCtx(ctx, nil, func(tx *gorm.DB) error {
|
||||||
|
for _, data := range ret {
|
||||||
|
dbGift := &model.Gift{
|
||||||
|
Id: uuid.NextId(),
|
||||||
|
GiftId: strconv.FormatInt(data.ID, 10),
|
||||||
|
GiftName: data.Name,
|
||||||
|
Platform: platform,
|
||||||
|
PPriceFree: 0,
|
||||||
|
Price: 0,
|
||||||
|
Pic: data.Pic,
|
||||||
|
PPricePaid: 0,
|
||||||
|
}
|
||||||
|
if data.IsPaid {
|
||||||
|
dbGift.PPricePaid = int64(data.Price)
|
||||||
|
dbGift.Price = data.Price * radio
|
||||||
|
data.Price = dbGift.Price
|
||||||
|
} else {
|
||||||
|
dbGift.PPriceFree = int64(data.Price)
|
||||||
|
}
|
||||||
|
if err := svcCtx.GiftModel.Update(ctx, tx, dbGift); err != nil {
|
||||||
|
if errors.Is(err, gormx.ErrRowsAffectedZero) {
|
||||||
|
err = nil
|
||||||
|
_ = svcCtx.GiftModel.Insert(ctx, tx, dbGift)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
return ret, nil
|
||||||
|
}
|
Loading…
Reference in New Issue