by Robin at 20240820
This commit is contained in:
parent
5abd6883d4
commit
58e5c6ab1d
|
@ -49,6 +49,8 @@ type OpFilterReq struct {
|
||||||
Fans *util.Int64Filter `json:"fans"`
|
Fans *util.Int64Filter `json:"fans"`
|
||||||
Height *util.Int64Filter `json:"height"`
|
Height *util.Int64Filter `json:"height"`
|
||||||
Weight *util.Int64Filter `json:"weight"`
|
Weight *util.Int64Filter `json:"weight"`
|
||||||
|
WechatCoinPrice *util.Int64Filter `json:"wechat_coin_price"`
|
||||||
|
ZoneAdmissionPrice *util.Int64Filter `json:"zone_admission_price"`
|
||||||
City *string `json:"city"`
|
City *string `json:"city"`
|
||||||
Constellation *string `json:"constellation"`
|
Constellation *string `json:"constellation"`
|
||||||
IsActiveWithinAWeek *int64 `json:"is_active_within_a_week"`
|
IsActiveWithinAWeek *int64 `json:"is_active_within_a_week"`
|
||||||
|
|
|
@ -9,6 +9,12 @@ import (
|
||||||
type OpCreateReq struct {
|
type OpCreateReq struct {
|
||||||
base.BaseRequest
|
base.BaseRequest
|
||||||
*dbstruct.Zone
|
*dbstruct.Zone
|
||||||
|
AdmissionPrice int64 `json:"admission_price"` // 空间解锁价格, 单位: 分
|
||||||
|
IronfanshipPrice int64 `json:"ironfanship_price"` // 铁粉解锁价格, 单位: 分
|
||||||
|
IsSuperfanshipEnabled int `json:"is_superfanship_enabled"` // 是否开启超粉空间 0: 关闭, 1: 开启
|
||||||
|
SuperfanshipPrice int64 `json:"superfanship_price"` // 超粉价格, 单位: 分
|
||||||
|
SuperfanshipValidPeriod int `json:"superfanship_valid_period"` // 超粉有效期类型, SuperfanshipValidPeriod*
|
||||||
|
IsSuperfanshipGiveWechat int `json:"is_superfanship_give_wechat"` // 是否开启超粉空间赠送微信 0: 不赠送, 1: 赠送
|
||||||
}
|
}
|
||||||
|
|
||||||
type OpCreateData struct {
|
type OpCreateData struct {
|
||||||
|
|
|
@ -7,6 +7,8 @@ type StreamerFilterCfg struct {
|
||||||
Fans *util.Int64Filter `json:"fans"`
|
Fans *util.Int64Filter `json:"fans"`
|
||||||
Height *util.Int64Filter `json:"height"`
|
Height *util.Int64Filter `json:"height"`
|
||||||
Weight *util.Int64Filter `json:"weight"`
|
Weight *util.Int64Filter `json:"weight"`
|
||||||
|
WechatCoinPrice *util.Int64Filter `json:"wechat_coin_price"`
|
||||||
|
ZoneAdmissionPrice *util.Int64Filter `json:"zone_admission_price"`
|
||||||
CityWeight float64 `json:"city_weight"`
|
CityWeight float64 `json:"city_weight"`
|
||||||
ConstellationWeight float64 `json:"constellation_weight"`
|
ConstellationWeight float64 `json:"constellation_weight"`
|
||||||
IsActiveWithinAWeekWeight float64 `json:"is_active_within_a_week_weight"`
|
IsActiveWithinAWeekWeight float64 `json:"is_active_within_a_week_weight"`
|
||||||
|
|
|
@ -193,12 +193,14 @@ func (es *ElasticSearch) FilterStreamerAcctList(ctx *gin.Context, req *streamera
|
||||||
funcScoreQuery.MaxBoost(3.4028235e38)
|
funcScoreQuery.MaxBoost(3.4028235e38)
|
||||||
funcScoreQuery.Boost(1.0)
|
funcScoreQuery.Boost(1.0)
|
||||||
|
|
||||||
// 写入关于年龄、粉丝量、身高、体重的高斯衰减打分
|
// 写入关于年龄、粉丝量、身高、体重、微信价格、空间价格的高斯衰减打分
|
||||||
matchall := elastic.NewMatchAllQuery().Boost(1.0)
|
matchall := elastic.NewMatchAllQuery().Boost(1.0)
|
||||||
agefunc := util.CreateGaussDecayFunction("age", req.Age, req.RefStreamerFilter.Age)
|
agefunc := util.CreateGaussDecayFunction("age", req.Age, req.RefStreamerFilter.Age)
|
||||||
fansfunc := util.CreateGaussDecayFunction("fans", req.Fans, req.RefStreamerFilter.Fans)
|
fansfunc := util.CreateGaussDecayFunction("fans", req.Fans, req.RefStreamerFilter.Fans)
|
||||||
heightfunc := util.CreateGaussDecayFunction("height", req.Height, req.RefStreamerFilter.Height)
|
heightfunc := util.CreateGaussDecayFunction("height", req.Height, req.RefStreamerFilter.Height)
|
||||||
weightfunc := util.CreateGaussDecayFunction("weight", req.Weight, req.RefStreamerFilter.Weight)
|
weightfunc := util.CreateGaussDecayFunction("weight", req.Weight, req.RefStreamerFilter.Weight)
|
||||||
|
wechatcoinpricefunc := util.CreateGaussDecayFunction("wechat_coin_price", req.WechatCoinPrice, req.RefStreamerFilter.WechatCoinPrice)
|
||||||
|
zoneadmissionpricefunc := util.CreateGaussDecayFunction("zone_admission_price", req.ZoneAdmissionPrice, req.RefStreamerFilter.ZoneAdmissionPrice)
|
||||||
|
|
||||||
if agefunc != nil {
|
if agefunc != nil {
|
||||||
funcScoreQuery.Add(matchall, agefunc)
|
funcScoreQuery.Add(matchall, agefunc)
|
||||||
|
@ -216,6 +218,14 @@ func (es *ElasticSearch) FilterStreamerAcctList(ctx *gin.Context, req *streamera
|
||||||
funcScoreQuery.Add(matchall, weightfunc)
|
funcScoreQuery.Add(matchall, weightfunc)
|
||||||
fullscore += 1.0
|
fullscore += 1.0
|
||||||
}
|
}
|
||||||
|
if wechatcoinpricefunc != nil {
|
||||||
|
funcScoreQuery.Add(matchall, wechatcoinpricefunc)
|
||||||
|
fullscore += 1.0
|
||||||
|
}
|
||||||
|
if zoneadmissionpricefunc != nil {
|
||||||
|
funcScoreQuery.Add(matchall, zoneadmissionpricefunc)
|
||||||
|
fullscore += 1.0
|
||||||
|
}
|
||||||
|
|
||||||
// 写入关于城市、星座的脚本打分
|
// 写入关于城市、星座的脚本打分
|
||||||
if req.City != nil {
|
if req.City != nil {
|
||||||
|
|
|
@ -2645,8 +2645,9 @@ func (s *Service) ApiCreateZone(ctx *gin.Context, req *zoneproto.ApiCreateReq) (
|
||||||
req.Zone.VideoCount = goproto.Int64(0)
|
req.Zone.VideoCount = goproto.Int64(0)
|
||||||
req.Zone.IsZoneThirdPartnerHided = goproto.Int64(consts.IsHided_No)
|
req.Zone.IsZoneThirdPartnerHided = goproto.Int64(consts.IsHided_No)
|
||||||
req.Zone.Profile = goproto.String(defaultZoneText)
|
req.Zone.Profile = goproto.String(defaultZoneText)
|
||||||
err, zid := _DefaultZone.OpCreate(ctx, &zoneproto.OpCreateReq{
|
err, zid := _DefaultZoneDecrtByEs.OpCreate(ctx, &zoneproto.OpCreateReq{
|
||||||
Zone: req.Zone,
|
Zone: req.Zone,
|
||||||
|
AdmissionPrice: req.AdmissionPrice,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("OpCreate fail, req: %v, err: %v", util.ToJson(req), err)
|
logger.Error("OpCreate fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
@ -2725,8 +2726,9 @@ func (s *Service) ApiUpdateZone(ctx *gin.Context, req *zoneproto.ApiUpdateReq) (
|
||||||
|
|
||||||
profile := req.Zone.GetProfile()
|
profile := req.Zone.GetProfile()
|
||||||
req.Zone.Profile = nil
|
req.Zone.Profile = nil
|
||||||
err = _DefaultZone.OpUpdate(ctx, &zoneproto.OpUpdateReq{
|
err = _DefaultZoneDecrtByEs.OpUpdate(ctx, &zoneproto.OpUpdateReq{
|
||||||
Zone: req.Zone,
|
Zone: req.Zone,
|
||||||
|
AdmissionPrice: req.AdmissionPrice,
|
||||||
})
|
})
|
||||||
if err == qmgo.ErrNoSuchDocuments {
|
if err == qmgo.ErrNoSuchDocuments {
|
||||||
ec = errcode.ErrCodeZoneNotExist
|
ec = errcode.ErrCodeZoneNotExist
|
||||||
|
@ -2767,7 +2769,7 @@ func (s *Service) ApiUpdateZone(ctx *gin.Context, req *zoneproto.ApiUpdateReq) (
|
||||||
|
|
||||||
func (s *Service) ApiDeleteZone(ctx *gin.Context, id int64) (ec errcode.ErrCode) {
|
func (s *Service) ApiDeleteZone(ctx *gin.Context, id int64) (ec errcode.ErrCode) {
|
||||||
ec = errcode.ErrCodeZoneSrvOk
|
ec = errcode.ErrCodeZoneSrvOk
|
||||||
err := _DefaultZone.OpDelete(ctx, id)
|
err := _DefaultZoneDecrtByEs.OpDelete(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("OpDelete fail, id: %v, err: %v", id, err)
|
logger.Error("OpDelete fail, id: %v, err: %v", id, err)
|
||||||
ec = errcode.ErrCodeZoneSrvFail
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
|
|
@ -38,6 +38,7 @@ func (p *StreamerDecrtByEs) OpUpdate(ctx *gin.Context, req *streamerproto.OpUpda
|
||||||
Weight: req.Streamer.Weight,
|
Weight: req.Streamer.Weight,
|
||||||
City: req.Streamer.City,
|
City: req.Streamer.City,
|
||||||
Constellation: req.Streamer.Constellation,
|
Constellation: req.Streamer.Constellation,
|
||||||
|
WechatCoinPrice: req.Streamer.WechatCoinPrice,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
logger.Error("OpUpdateSelectively fail, req: %v, err: %v", util.ToJson(req), err)
|
logger.Error("OpUpdateSelectively fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
return err
|
return err
|
||||||
|
@ -57,6 +58,67 @@ func NewZoneDecrtByEs(streamerAcct *StreamerAcct, zone *Zone) *ZoneDecrtByEs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *ZoneDecrtByEs) OpCreate(ctx *gin.Context, req *zoneproto.OpCreateReq) (error, int64) {
|
||||||
|
err, id := p.Zone.OpCreate(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("CreateZone fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
return err, id
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新es
|
||||||
|
if err := p.StreamerAcct.OpUpdateSelectively(ctx, &dbstruct.EsStreamerAcctUpdater{
|
||||||
|
Mid: req.Zone.Mid,
|
||||||
|
ZoneAdmissionPrice: goproto.Int64(req.AdmissionPrice),
|
||||||
|
}); err != nil {
|
||||||
|
logger.Error("OpUpdateSelectively fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
return err, id
|
||||||
|
}
|
||||||
|
return nil, id
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ZoneDecrtByEs) OpUpdate(ctx *gin.Context, req *zoneproto.OpUpdateReq) error {
|
||||||
|
err := p.Zone.OpUpdate(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("UpdateZone fail, err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新es
|
||||||
|
if err := p.StreamerAcct.OpUpdateSelectively(ctx, &dbstruct.EsStreamerAcctUpdater{
|
||||||
|
Mid: goproto.Int64(req.BaseRequest.Mid),
|
||||||
|
ZoneAdmissionPrice: goproto.Int64(req.AdmissionPrice),
|
||||||
|
}); err != nil {
|
||||||
|
logger.Error("OpUpdateSelectively fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ZoneDecrtByEs) OpDelete(ctx *gin.Context, id int64) error {
|
||||||
|
|
||||||
|
zone, err := p.Zone.GetById(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Zone GetById fail, err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = p.Zone.OpDelete(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("DeleteZone fail, err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新es
|
||||||
|
if err := p.StreamerAcct.OpUpdateSelectively(ctx, &dbstruct.EsStreamerAcctUpdater{
|
||||||
|
Mid: zone.Mid,
|
||||||
|
ZoneAdmissionPrice: goproto.Int64(-1),
|
||||||
|
}); err != nil {
|
||||||
|
logger.Error("OpUpdateSelectively fail, err: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (p *ZoneDecrtByEs) OpUpdateByIds(ctx *gin.Context, req *zoneproto.OpUpdateReq, ids []int64) error {
|
func (p *ZoneDecrtByEs) OpUpdateByIds(ctx *gin.Context, req *zoneproto.OpUpdateReq, ids []int64) error {
|
||||||
err := p.Zone.OpUpdateByIds(ctx, req, ids)
|
err := p.Zone.OpUpdateByIds(ctx, req, ids)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1891,7 +1891,7 @@ func (s *Service) OpApproveStreamerAuthApproval(ctx *gin.Context, req *streamera
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
streamerAccts := make([]*dbstruct.EsStreamerAcct, 0)
|
streamerAccts := make([]*dbstruct.EsStreamerAcct, 0)
|
||||||
for _, streamer := range streamerList {
|
for i, streamer := range streamerList {
|
||||||
acct := accountMp[streamer.GetMid()]
|
acct := accountMp[streamer.GetMid()]
|
||||||
streamerAccts = append(streamerAccts, &dbstruct.EsStreamerAcct{
|
streamerAccts = append(streamerAccts, &dbstruct.EsStreamerAcct{
|
||||||
Mid: acct.GetMid(),
|
Mid: acct.GetMid(),
|
||||||
|
@ -1904,6 +1904,8 @@ func (s *Service) OpApproveStreamerAuthApproval(ctx *gin.Context, req *streamera
|
||||||
City: streamer.GetCity(),
|
City: streamer.GetCity(),
|
||||||
Constellation: streamer.GetConstellation(),
|
Constellation: streamer.GetConstellation(),
|
||||||
LastZoneMomentCreateDayStart: 0,
|
LastZoneMomentCreateDayStart: 0,
|
||||||
|
WechatCoinPrice: util.DerefInt64(list[i].WechatCoinPrice),
|
||||||
|
ZoneAdmissionPrice: -1, // es只用于过滤搜索,设置为-1不影响付款
|
||||||
Ct: acct.GetCt(),
|
Ct: acct.GetCt(),
|
||||||
Ut: acct.GetUt(),
|
Ut: acct.GetUt(),
|
||||||
DelFlag: acct.GetDelFlag(),
|
DelFlag: acct.GetDelFlag(),
|
||||||
|
@ -2264,6 +2266,8 @@ func (s *Service) OpApproveStreamerAuthApprovalDetails(ctx *gin.Context, req *st
|
||||||
City: streamer.GetCity(),
|
City: streamer.GetCity(),
|
||||||
Constellation: streamer.GetConstellation(),
|
Constellation: streamer.GetConstellation(),
|
||||||
LastZoneMomentCreateDayStart: 0,
|
LastZoneMomentCreateDayStart: 0,
|
||||||
|
WechatCoinPrice: util.DerefInt64(streamerAuthApprovalDetails.WechatCoinPrice),
|
||||||
|
ZoneAdmissionPrice: -1, // es只用于过滤搜索,设置为-1不影响付款
|
||||||
Ct: acct.GetCt(),
|
Ct: acct.GetCt(),
|
||||||
Ut: acct.GetUt(),
|
Ut: acct.GetUt(),
|
||||||
DelFlag: acct.GetDelFlag(),
|
DelFlag: acct.GetDelFlag(),
|
||||||
|
@ -3877,7 +3881,7 @@ func (s *Service) OpGetAccountCancellationList(ctx *gin.Context, req *account_ca
|
||||||
func (s *Service) OpCreateZone(ctx *gin.Context, req *zoneproto.OpCreateReq) (ec errcode.ErrCode) {
|
func (s *Service) OpCreateZone(ctx *gin.Context, req *zoneproto.OpCreateReq) (ec errcode.ErrCode) {
|
||||||
ec = errcode.ErrCodeZoneSrvOk
|
ec = errcode.ErrCodeZoneSrvOk
|
||||||
req.Zone.IsZoneThirdPartnerHided = goproto.Int64(consts.IsHided_No)
|
req.Zone.IsZoneThirdPartnerHided = goproto.Int64(consts.IsHided_No)
|
||||||
err, _ := _DefaultZone.OpCreate(ctx, req)
|
err, _ := _DefaultZoneDecrtByEs.OpCreate(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("OpCreate fail, req: %v, err: %v", util.ToJson(req), err)
|
logger.Error("OpCreate fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
ec = errcode.ErrCodeZoneSrvFail
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
@ -3888,7 +3892,32 @@ func (s *Service) OpCreateZone(ctx *gin.Context, req *zoneproto.OpCreateReq) (ec
|
||||||
|
|
||||||
func (s *Service) OpUpdateZone(ctx *gin.Context, req *zoneproto.OpUpdateReq) (ec errcode.ErrCode) {
|
func (s *Service) OpUpdateZone(ctx *gin.Context, req *zoneproto.OpUpdateReq) (ec errcode.ErrCode) {
|
||||||
ec = errcode.ErrCodeZoneSrvOk
|
ec = errcode.ErrCodeZoneSrvOk
|
||||||
err := _DefaultZone.OpUpdate(ctx, req)
|
|
||||||
|
// 转为更新自己空间请求
|
||||||
|
selfReq := &zoneproto.OpUpdateReq{
|
||||||
|
BaseRequest: req.BaseRequest,
|
||||||
|
Zone: req.Zone,
|
||||||
|
AdmissionPrice: req.AdmissionPrice,
|
||||||
|
IronfanshipPrice: req.IronfanshipPrice,
|
||||||
|
IsSuperfanshipEnabled: req.IsSuperfanshipEnabled,
|
||||||
|
SuperfanshipPrice: req.SuperfanshipPrice,
|
||||||
|
SuperfanshipValidPeriod: req.SuperfanshipValidPeriod,
|
||||||
|
IsSuperfanshipGiveWechat: req.IsSuperfanshipGiveWechat,
|
||||||
|
}
|
||||||
|
zone, err := _DefaultZone.GetById(ctx, req.Zone.GetId())
|
||||||
|
if err == qmgo.ErrNoSuchDocuments {
|
||||||
|
ec = errcode.ErrCodeZoneNotExist
|
||||||
|
err = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Zone GetById fail, err: %v", err)
|
||||||
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
return
|
||||||
|
}
|
||||||
|
selfReq.BaseRequest.Mid = zone.GetMid()
|
||||||
|
|
||||||
|
err = _DefaultZoneDecrtByEs.OpUpdate(ctx, selfReq)
|
||||||
if err == qmgo.ErrNoSuchDocuments {
|
if err == qmgo.ErrNoSuchDocuments {
|
||||||
ec = errcode.ErrCodeZoneNotExist
|
ec = errcode.ErrCodeZoneNotExist
|
||||||
err = nil
|
err = nil
|
||||||
|
@ -3924,7 +3953,7 @@ func (s *Service) OpUpdateZone(ctx *gin.Context, req *zoneproto.OpUpdateReq) (ec
|
||||||
|
|
||||||
func (s *Service) OpDeleteZone(ctx *gin.Context, id int64) (ec errcode.ErrCode) {
|
func (s *Service) OpDeleteZone(ctx *gin.Context, id int64) (ec errcode.ErrCode) {
|
||||||
ec = errcode.ErrCodeZoneSrvOk
|
ec = errcode.ErrCodeZoneSrvOk
|
||||||
err := _DefaultZone.OpDelete(ctx, id)
|
err := _DefaultZoneDecrtByEs.OpDelete(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("OpDelete fail, id: %v, err: %v", id, err)
|
logger.Error("OpDelete fail, id: %v, err: %v", id, err)
|
||||||
ec = errcode.ErrCodeZoneSrvFail
|
ec = errcode.ErrCodeZoneSrvFail
|
||||||
|
|
|
@ -11,6 +11,8 @@ type EsStreamerAcct struct {
|
||||||
City string `json:"city"` // 所在城市
|
City string `json:"city"` // 所在城市
|
||||||
Constellation string `json:"constellation"` // 星座
|
Constellation string `json:"constellation"` // 星座
|
||||||
LastZoneMomentCreateDayStart int64 `json:"last_zone_moment_create_day_start"` // 最后空间动态创建日始整点
|
LastZoneMomentCreateDayStart int64 `json:"last_zone_moment_create_day_start"` // 最后空间动态创建日始整点
|
||||||
|
WechatCoinPrice int64 `json:"wechat_coin_price"` // 微信金币价格
|
||||||
|
ZoneAdmissionPrice int64 `json:"zone_admission_price"` // 空间解锁价格, 单位: 分
|
||||||
Ct int64 `json:"ct"` // 创建时间
|
Ct int64 `json:"ct"` // 创建时间
|
||||||
Ut int64 `json:"ut"` // 更新时间
|
Ut int64 `json:"ut"` // 更新时间
|
||||||
DelFlag int64 `json:"del_flag"` // 删除标记,0-否,1-是
|
DelFlag int64 `json:"del_flag"` // 删除标记,0-否,1-是
|
||||||
|
@ -27,6 +29,8 @@ type EsStreamerAcctUpdater struct {
|
||||||
City *string `json:"city" bson:"city"` // 所在城市
|
City *string `json:"city" bson:"city"` // 所在城市
|
||||||
Constellation *string `json:"constellation" bson:"constellation"` // 星座
|
Constellation *string `json:"constellation" bson:"constellation"` // 星座
|
||||||
LastZoneMomentCreateDayStart *int64 `json:"last_zone_moment_create_day_start" bson:"last_zone_moment_create_day_start"` // 最后空间动态创建日始整点
|
LastZoneMomentCreateDayStart *int64 `json:"last_zone_moment_create_day_start" bson:"last_zone_moment_create_day_start"` // 最后空间动态创建日始整点
|
||||||
|
WechatCoinPrice *int64 `json:"wechat_coin_price"` // 微信金币价格
|
||||||
|
ZoneAdmissionPrice *int64 `json:"zone_admission_price"` // 空间解锁价格, 单位: 分
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *EsStreamerAcctUpdater) GetMid() int64 {
|
func (p *EsStreamerAcctUpdater) GetMid() int64 {
|
||||||
|
|
Loading…
Reference in New Issue