180 lines
4.4 KiB
Go
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)
|
|
}
|
|
},
|
|
)
|
|
}
|