aozhiwei a62220e3b9 1
2024-06-21 14:59:34 +08:00

180 lines
4.4 KiB
Go

package task
import (
"f5"
"fmt"
"main/constant"
"mt"
"q5"
)
type HashRateMgr struct {
totalPowerNumber float64
period int32
hashRateMate *mt.HashRateCommon
}
func (this *HashRateMgr) CalPowerByCECReward() {
this.hashRateMate = mt.Table.HashRateCommon.GetLatestPeriod()
this.period = this.hashRateMate.GetId()
var totalPower float64 = 0
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
sql := fmt.Sprintf("SELECT * FROM t_power_exchange_record WHERE period = %d",
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error1:%v \n", err)
return
}
for rows.Next() {
totalPower += q5.ToFloat64(rows.GetByName("total_num"))
}
if rows.NumOfReaded() <= 0 {
task.SetFail()
} else {
task.SetSucc()
}
},
)
},
).OnSucc(
func(task *f5.AsyncTask) {
if totalPower != 0 {
this.totalPowerNumber = totalPower
this.getAccountGroup()
}
}).OnFail(
func(task *f5.AsyncTask) {
fmt.Printf("Cal Fail")
})
}
func (this *HashRateMgr) getAccountGroup() {
accountIds := []string{}
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
sql := fmt.Sprintf("SELECT account_id,`period` FROM t_power_exchange_record WHERE period = %d group by account_id",
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error2:%v \n", err)
return
}
for rows.Next() {
accountId := rows.GetByName("account_id")
accountIds = append(accountIds, accountId)
}
task.SetSucc()
},
)
}).OnSucc(
func(task *f5.AsyncTask) {
this.checkAccountIsSettle(accountIds)
}).OnFail(
func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) checkAccountIsSettle(param []string) {
var index = 0
f5.NewAsyncTask(
func(task *f5.AsyncTask) {
if index >= len(param) {
task.SetSucc()
return
}
f5.GetJsStyleDb().OrmSelectOne(
constant.GAME_DB,
"t_hash_rate_reward",
[][]string{
{"account_id", q5.ToString(param[index])},
{"period", q5.ToString(this.period)},
},
func(err error, row *f5.DataSet) {
if err != nil {
f5.GetSysLog().Error("HashRateMgr Error3:%v \n", err)
task.SetFail()
return
}
if row.Next() {
index += 1
task.Continue()
} else {
//结算操作
this.getOwnerPower(param[index], func(ownerPower float64) {
target := ceilEx(q5.Min(this.totalPowerNumber/q5.ToFloat64(this.hashRateMate.GetCecPool()), 1), 6)
ratio := ownerPower / this.totalPowerNumber
cecNUm := ceilEx(q5.ToFloat64(this.hashRateMate.GetCecPool())*target*ratio, 2)
this.pushHashRateReward(param[index], cecNUm)
index += 1
task.Continue()
})
}
})
}).OnSucc(
func(task *f5.AsyncTask) {
}).OnFail(
func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) getOwnerPower(account string, cb func(param float64)) {
var ownerPower float64 = 0
f5.NewAsyncTask(func(task *f5.AsyncTask) {
sql1 := fmt.Sprintf("SELECT * FROM t_power_exchange_record WHERE account_id = '%s' AND period = %d",
account,
this.period)
f5.GetJsStyleDb().SelectCustomQuery(
constant.GAME_DB,
sql1,
func(err error, rows *f5.DataSet) {
if err != nil {
task.SetFail()
f5.GetSysLog().Error("HashRateMgr Error4:%v \n", err)
return
}
for rows.Next() {
ownerPower += q5.ToFloat64(rows.GetByName("total_num"))
}
task.SetSucc()
},
)
}).OnSucc(func(task *f5.AsyncTask) {
cb(ownerPower)
}).OnFail(func(task *f5.AsyncTask) {
})
}
func (this *HashRateMgr) pushHashRateReward(account string, num float64) {
fields := [][]string{
{"account_id", account},
//q5.GenFieldKvEmptyAsNull("address", v.address),
{"address", q5.ToString("test123456789")},
{"period", q5.ToString(this.period)},
{"reward_cec", q5.ToString(num)},
{"createtime", q5.ToString(f5.GetApp().GetNowSeconds())},
{"modifytime", q5.ToString(f5.GetApp().GetNowSeconds())},
}
f5.GetJsStyleDb().Insert(
constant.GAME_DB,
"t_hash_rate_reward",
fields,
func(err error, id int64, affectedRows int64) {
if err != nil || affectedRows != 1 {
// 插入失败,处理错误逻辑
f5.GetSysLog().Error("HashRateMgr Error5:%v \n", err)
}
},
)
}