nft task reward
This commit is contained in:
@@ -43,7 +43,7 @@ func (c *Cron) Run() {
|
||||
for _, tk := range o.TokenBalances {
|
||||
balance := cast.ToInt(tk.Balance)
|
||||
logx.Debugw("owner token", logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID), logx.Field("balance", tk.Balance))
|
||||
nft, err := c.svcCtx.NftHolderModel.FindOneByAddressTokenId(c.ctx, o.OwnerAddress, tk.TokenID)
|
||||
nft, err := c.svcCtx.NftHolderModel.FindOneByTokenId(c.ctx, tk.TokenID)
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) {
|
||||
nft = &model.NhNftHolder{
|
||||
|
||||
@@ -3,7 +3,10 @@ package stake_settle
|
||||
import (
|
||||
"context"
|
||||
"github.com/robfig/cron/v3"
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/spf13/cast"
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"nova_task/internal/pkg/utils"
|
||||
"nova_task/internal/svc"
|
||||
"time"
|
||||
)
|
||||
@@ -37,16 +40,63 @@ func (c *Cron) Run() {
|
||||
return
|
||||
}
|
||||
|
||||
taskConf, err := c.svcCtx.ConfigModel.GetNftStakeTaskConf(c.ctx)
|
||||
if err != nil {
|
||||
logx.Errorw("get nft stake task conf failed", logx.Field("err", err))
|
||||
return
|
||||
}
|
||||
|
||||
stakes, err := c.svcCtx.StakeNftModel.AllStakeNft(c.ctx)
|
||||
if err != nil {
|
||||
logx.Errorw("get all stake nft failed", logx.Field("err", err))
|
||||
return
|
||||
}
|
||||
|
||||
uid2tokens := map[uint]float64{}
|
||||
for _, s := range stakes {
|
||||
if s.State != 1 {
|
||||
continue
|
||||
}
|
||||
nftHolder, err := c.svcCtx.NftHolderModel.FindOneByTokenId(c.ctx, s.TokenId)
|
||||
if err != nil {
|
||||
logx.Errorw("find nft holder failed", logx.Field("err", err), logx.Field("tokenId", s.TokenId))
|
||||
continue
|
||||
}
|
||||
|
||||
uid, err := c.svcCtx.WalletModel.FindUidByAddress(c.ctx, nftHolder.Address)
|
||||
if err != nil {
|
||||
logx.Errorw("find uid by address failed", logx.Field("err", err), logx.Field("address", nftHolder.Address))
|
||||
continue
|
||||
}
|
||||
|
||||
if uid != s.Uid {
|
||||
logx.Errorw("uid not match", logx.Field("uid", s.Uid), logx.Field("nftHolderUid", uid))
|
||||
continue
|
||||
}
|
||||
|
||||
if utils.IsBigTarot(s.TokenId) {
|
||||
uid2tokens[s.Uid] += float64(taskConf.GreatTarot)
|
||||
} else {
|
||||
uid2tokens[s.Uid] += float64(taskConf.LittleTarot)
|
||||
}
|
||||
}
|
||||
awardSeq := cast.ToInt(time.Now().AddDate(0, 0, -1).Format("20060102"))
|
||||
for uid, tokens := range uid2tokens {
|
||||
coefficient, err := c.svcCtx.StakeRewardModel.GetRandomCoefficientByUid(c.ctx, uid, awardSeq, taskConf.MinCoefficient, taskConf.MaxCoefficient)
|
||||
if err != nil {
|
||||
logx.Errorw("get random coefficient failed", logx.Field("err", err), logx.Field("uid", uid), logx.Field("awardSeq", awardSeq))
|
||||
continue
|
||||
}
|
||||
tokensDecimal := decimal.NewFromFloat(tokens)
|
||||
reward := tokensDecimal.Mul(decimal.NewFromFloat(coefficient))
|
||||
err = c.svcCtx.StakeRewardModel.SetReward(c.ctx, uid, awardSeq, taskConf.OccupyPercent, tokensDecimal, reward)
|
||||
if err != nil {
|
||||
logx.Errorw("set reward failed", logx.Field("err", err), logx.Field("uid", uid), logx.Field("awardSeq", awardSeq), logx.Field("coefficient", coefficient), logx.Field("tokens", tokens), logx.Field("reward", reward))
|
||||
continue
|
||||
}
|
||||
|
||||
// todo: 增加资产
|
||||
//c.svcCtx.TaskAssetModel.AddUserPoint()
|
||||
}
|
||||
|
||||
logx.Debugw("run settle cron task")
|
||||
|
||||
Reference in New Issue
Block a user