1
This commit is contained in:
commit
dc42e3b8d4
14
server/light_backtask/mt/StakingVip.go
Normal file
14
server/light_backtask/mt/StakingVip.go
Normal file
@ -0,0 +1,14 @@
|
||||
package mt
|
||||
|
||||
import (
|
||||
"f5"
|
||||
"main/mtb"
|
||||
)
|
||||
|
||||
type StakingVip struct {
|
||||
mtb.StakingVip
|
||||
}
|
||||
|
||||
type StakingVipTable struct {
|
||||
f5.IdMetaTable[StakingVip]
|
||||
}
|
@ -19,6 +19,7 @@ type table struct {
|
||||
HashRateCommon *HashRateCommonTable
|
||||
Contract *ContractTable
|
||||
BcCurrency *BcCurrencyTable
|
||||
StakingVip *StakingVipTable
|
||||
}
|
||||
|
||||
var Table = f5.New(func(this *table) {
|
||||
@ -86,4 +87,9 @@ var Table = f5.New(func(this *table) {
|
||||
this.PrimKey = "name"
|
||||
})
|
||||
|
||||
this.StakingVip = f5.New(func(this *StakingVipTable) {
|
||||
this.FileName = "../res/stakingVip@stakingVip.json"
|
||||
this.PrimKey = "rank"
|
||||
})
|
||||
|
||||
})
|
||||
|
@ -138,6 +138,21 @@ type HashRateCommon struct {
|
||||
_flags2_ uint64
|
||||
}
|
||||
|
||||
type StakingVip struct {
|
||||
rights string
|
||||
require int64
|
||||
thisPoint int64
|
||||
rank int32
|
||||
vip_name string
|
||||
rate float64
|
||||
vip_working_tips string
|
||||
vip_unworking_tips string
|
||||
id int32
|
||||
|
||||
_flags1_ uint64
|
||||
_flags2_ uint64
|
||||
}
|
||||
|
||||
func (this *BackTaskCluster) GetInstanceId() int32 {
|
||||
return this.instance_id
|
||||
}
|
||||
@ -634,6 +649,78 @@ func (this *HashRateCommon) HasCecPool() bool {
|
||||
return (this._flags1_ & (uint64(1) << 4)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetRights() string {
|
||||
return this.rights
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasRights() bool {
|
||||
return (this._flags1_ & (uint64(1) << 1)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetRequire() int64 {
|
||||
return this.require
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasRequire() bool {
|
||||
return (this._flags1_ & (uint64(1) << 2)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetThisPoint() int64 {
|
||||
return this.thisPoint
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasThisPoint() bool {
|
||||
return (this._flags1_ & (uint64(1) << 3)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetRank() int32 {
|
||||
return this.rank
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasRank() bool {
|
||||
return (this._flags1_ & (uint64(1) << 4)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetVipName() string {
|
||||
return this.vip_name
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasVipName() bool {
|
||||
return (this._flags1_ & (uint64(1) << 5)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetRate() float64 {
|
||||
return this.rate
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasRate() bool {
|
||||
return (this._flags1_ & (uint64(1) << 6)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetVipWorkingTips() string {
|
||||
return this.vip_working_tips
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasVipWorkingTips() bool {
|
||||
return (this._flags1_ & (uint64(1) << 7)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetVipUnworkingTips() string {
|
||||
return this.vip_unworking_tips
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasVipUnworkingTips() bool {
|
||||
return (this._flags1_ & (uint64(1) << 8)) > 0
|
||||
}
|
||||
|
||||
func (this *StakingVip) GetId() int32 {
|
||||
return this.id
|
||||
}
|
||||
|
||||
func (this *StakingVip) HasId() bool {
|
||||
return (this._flags1_ & (uint64(1) << 9)) > 0
|
||||
}
|
||||
|
||||
|
||||
func (this *BackTaskCluster) LoadFromKv(kv map[string]interface{}) {
|
||||
f5.ReadMetaTableField(&this.instance_id, "instance_id", &this._flags1_, 1, kv)
|
||||
@ -732,3 +819,15 @@ func (this *HashRateCommon) LoadFromKv(kv map[string]interface{}) {
|
||||
f5.ReadMetaTableField(&this.end_time, "end_time", &this._flags1_, 3, kv)
|
||||
f5.ReadMetaTableField(&this.cec_pool, "cec_pool", &this._flags1_, 4, kv)
|
||||
}
|
||||
|
||||
func (this *StakingVip) LoadFromKv(kv map[string]interface{}) {
|
||||
f5.ReadMetaTableField(&this.rights, "rights", &this._flags1_, 1, kv)
|
||||
f5.ReadMetaTableField(&this.require, "require", &this._flags1_, 2, kv)
|
||||
f5.ReadMetaTableField(&this.thisPoint, "thisPoint", &this._flags1_, 3, kv)
|
||||
f5.ReadMetaTableField(&this.rank, "rank", &this._flags1_, 4, kv)
|
||||
f5.ReadMetaTableField(&this.vip_name, "vip_name", &this._flags1_, 5, kv)
|
||||
f5.ReadMetaTableField(&this.rate, "rate", &this._flags1_, 6, kv)
|
||||
f5.ReadMetaTableField(&this.vip_working_tips, "vip_working_tips", &this._flags1_, 7, kv)
|
||||
f5.ReadMetaTableField(&this.vip_unworking_tips, "vip_unworking_tips", &this._flags1_, 8, kv)
|
||||
f5.ReadMetaTableField(&this.id, "id", &this._flags1_, 9, kv)
|
||||
}
|
||||
|
@ -110,4 +110,17 @@ message HashRateCommon
|
||||
optional string start_time = 2;
|
||||
optional string end_time = 3;
|
||||
optional int32 cec_pool = 4;
|
||||
}
|
||||
|
||||
message StakingVip
|
||||
{
|
||||
optional string rights = 1;
|
||||
optional int64 require = 2;
|
||||
optional int64 thisPoint = 3;
|
||||
optional int32 rank = 4;
|
||||
optional string vip_name = 5;
|
||||
optional double rate = 6;
|
||||
optional string vip_working_tips = 7;
|
||||
optional string vip_unworking_tips = 8;
|
||||
optional int32 id = 9;
|
||||
}
|
@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"f5"
|
||||
"main/constant"
|
||||
"main/mt"
|
||||
"math/big"
|
||||
"q5"
|
||||
"strings"
|
||||
@ -31,6 +32,8 @@ func (this *vip) Add(accountAddress string, val string, idx int64, valField stri
|
||||
defer this.lock.Unlock()
|
||||
|
||||
extKv := [][]string{}
|
||||
lvParams := map[string]string{}
|
||||
|
||||
accountAddress = strings.ToLower(accountAddress)
|
||||
err, ds := f5.GetGoStyleDb().NewOrmSelect(
|
||||
constant.BCNFT_DB,
|
||||
@ -66,6 +69,15 @@ func (this *vip) Add(accountAddress string, val string, idx int64, valField stri
|
||||
}
|
||||
bnNewVal := bnOldVal.Add(bnOldVal, bnVal)
|
||||
updateKv = append(updateKv, [][]string{{valField, bnNewVal.String()}}...)
|
||||
|
||||
lvParams["escec_balance"] = ds.GetByName("escec_balance")
|
||||
lvParams["escec_stacking"] = ds.GetByName("escec_stacking")
|
||||
lvParams["escec_convert"] = ds.GetByName("escec_convert")
|
||||
lvParams["last_convert_time"] = ds.GetByName("last_convert_time")
|
||||
lvParams[valField] = bnNewVal.String()
|
||||
|
||||
newlv := this.calcVipLv(lvParams)
|
||||
updateKv = append(updateKv, []string{"vip_lv", q5.SafeToString(newlv)})
|
||||
|
||||
err1, _, _ := f5.GetGoStyleDb().NewUpdate(
|
||||
constant.BCNFT_DB,
|
||||
@ -78,6 +90,10 @@ func (this *vip) Add(accountAddress string, val string, idx int64, valField stri
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
lvParams[valField] = val
|
||||
newlv := this.calcVipLv(lvParams)
|
||||
insertKv = append(insertKv, []string{"vip_lv", q5.SafeToString(newlv)})
|
||||
|
||||
err1, _, _ := f5.GetGoStyleDb().NewInsert(
|
||||
constant.BCNFT_DB,
|
||||
"t_vip_user",
|
||||
@ -104,6 +120,17 @@ func (this *vip) Replace(accountAddress string, val string, idx int64, valField
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
lvParams := map[string]string{}
|
||||
|
||||
replaceFields:= func() {
|
||||
lvParams[valField] = val
|
||||
for _, sli := range extKv {
|
||||
if len(sli) > 1 {
|
||||
lvParams[sli[0]] = sli[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nowTime := f5.GetApp().GetRealSeconds()
|
||||
updateKv := [][]string {
|
||||
{valField, val},
|
||||
@ -123,6 +150,16 @@ func (this *vip) Replace(accountAddress string, val string, idx int64, valField
|
||||
if q5.ToInt64(ds.GetByName(idxField)) >= idx {
|
||||
return true
|
||||
}
|
||||
|
||||
lvParams["escec_balance"] = ds.GetByName("escec_balance")
|
||||
lvParams["escec_stacking"] = ds.GetByName("escec_stacking")
|
||||
lvParams["escec_convert"] = ds.GetByName("escec_convert")
|
||||
lvParams["last_convert_time"] = ds.GetByName("last_convert_time")
|
||||
replaceFields()
|
||||
|
||||
newlv := this.calcVipLv(lvParams)
|
||||
updateKv = append(updateKv, []string{"vip_lv", q5.SafeToString(newlv)})
|
||||
|
||||
err1, _, _ := f5.GetGoStyleDb().NewUpdate(
|
||||
constant.BCNFT_DB,
|
||||
"t_vip_user",
|
||||
@ -134,6 +171,10 @@ func (this *vip) Replace(accountAddress string, val string, idx int64, valField
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
replaceFields()
|
||||
newlv := this.calcVipLv(lvParams)
|
||||
insertKv = append(insertKv, []string{"vip_lv", q5.SafeToString(newlv)})
|
||||
|
||||
err1, _, _ := f5.GetGoStyleDb().NewInsert(
|
||||
constant.BCNFT_DB,
|
||||
"t_vip_user",
|
||||
@ -234,3 +275,66 @@ func (this *vip) RecalcEsCecConvert(accountAddress string) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *vip) calcVipLv(params map[string]string) (lv int64) {
|
||||
balancestr := params["escec_balance"]
|
||||
if balancestr == "" {
|
||||
balancestr = "0"
|
||||
}
|
||||
escec_balance, ok := new(big.Int).SetString(balancestr, 10)
|
||||
if !ok {
|
||||
escec_balance = new(big.Int).SetInt64(0)
|
||||
}
|
||||
|
||||
stackingstr := params["escec_stacking"]
|
||||
if stackingstr == "" {
|
||||
stackingstr = "0"
|
||||
}
|
||||
escec_stacking, ok := new(big.Int).SetString(stackingstr, 10)
|
||||
if !ok {
|
||||
escec_stacking = new(big.Int).SetInt64(0)
|
||||
}
|
||||
|
||||
curExec := new(big.Int).Add(escec_balance, escec_stacking)
|
||||
|
||||
convertstr := params["escec_convert"]
|
||||
if convertstr == "" {
|
||||
convertstr = "0"
|
||||
}
|
||||
escec_convert, ok := new(big.Int).SetString(convertstr, 10)
|
||||
if !ok {
|
||||
escec_convert = new(big.Int).SetInt64(0)
|
||||
}
|
||||
|
||||
last_convert_time := q5.SafeToInt64(params["last_convert_time"])
|
||||
nowsecs := f5.GetApp().GetRealSeconds()
|
||||
diff := nowsecs - last_convert_time
|
||||
if diff < 0 {
|
||||
diff = 0
|
||||
}
|
||||
elapse := new(big.Int).SetInt64(diff)
|
||||
depositExec := new(big.Int).Mul(escec_convert, elapse)
|
||||
depositExec = depositExec.Div(depositExec, new(big.Int).SetInt64(365*24*3600))
|
||||
if depositExec.Cmp(escec_convert) < 0 {
|
||||
depositExec = new(big.Int).Sub(escec_convert, depositExec)
|
||||
} else {
|
||||
depositExec.SetInt64(0)
|
||||
}
|
||||
curExec = curExec.Add(curExec, depositExec)
|
||||
convercurExec := new(big.Int).Div(curExec, new(big.Int).SetInt64(1000*1000*1000*1000*1000*1000)).Int64()
|
||||
lv = 0
|
||||
for {
|
||||
cfg := mt.Table.StakingVip.GetById(lv)
|
||||
nextlvcfg := mt.Table.StakingVip.GetById(lv + 1)
|
||||
if cfg != nil && nextlvcfg != nil {
|
||||
if cfg.GetRequire() <= convercurExec && nextlvcfg.GetRequire() > convercurExec {
|
||||
return lv
|
||||
}
|
||||
} else {
|
||||
break
|
||||
}
|
||||
lv++
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user