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