Merge branch 'hjb' of git.kingsome.cn:server/game2006api into hjb

This commit is contained in:
aozhiwei 2023-11-06 15:36:49 +08:00
commit 855c07b379
11 changed files with 5004 additions and 4473 deletions

View File

@ -1,123 +1,149 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import _common import _common
class ComputingPower(object): class ComputingPower(object):
def __init__(self): def __init__(self):
self.apis = [ self.apis = [
{ {
'name': 'info', 'name': 'info',
'desc': '获取算力信息', 'desc': '获取算力信息',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=info', 'url': 'webapp/index.php?c=ComputingPower&a=info',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['info', _common.ComputingPower(), '算力信息'] ['info', _common.ComputingPower(), '算力信息']
] ]
}, },
{ {
'name': 'getCrystalUi', 'name': 'getCrystalUi',
'desc': '获取晶体ui信息', 'desc': '获取晶体ui信息',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=getCrystalUi', 'url': 'webapp/index.php?c=ComputingPower&a=getCrystalUi',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['data', _common.CrystalUI(), '晶体的获取方式信息'] ['data', _common.CrystalUI(), '晶体的获取方式信息']
] ]
}, },
{ {
'name': 'exchangeCrystal', 'name': 'exchangeCrystal',
'desc': '兑换晶体', 'desc': '兑换晶体',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=exchangeCrystal', 'url': 'webapp/index.php?c=ComputingPower&a=exchangeCrystal',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
['item_id', 0, '晶体item'], ['item_id', 0, '晶体item'],
# ['item_num', 0, '晶体数量'], # ['item_num', 0, '晶体数量'],
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['property_chg', _common.PropertyChg(), '属性变更'], ['property_chg', _common.PropertyChg(), '属性变更'],
] ]
}, },
{ {
'name': 'getExchangeCrystalRecord', 'name': 'getExchangeCrystalRecord',
'desc': '获取兑换晶体记录', 'desc': '获取兑换晶体记录',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=getExchangeCrystalRecord', 'url': 'webapp/index.php?c=ComputingPower&a=getExchangeCrystalRecord',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['data', _common.ExchangeCrystalRecord(), '算力信息'] ['data', _common.ExchangeCrystalRecord(), '算力信息']
] ]
}, },
{ {
'name': 'exchangePower', 'name': 'exchangePower',
'desc': '晶体兑换算力', 'desc': '晶体兑换算力',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=exchangePower', 'url': 'webapp/index.php?c=ComputingPower&a=exchangePower',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
['num1', 0, '晶体260001兑换数'], ['num1', 0, '晶体260001兑换数'],
['num2', 0, '晶体260002兑换数'], ['num2', 0, '晶体260002兑换数'],
['num3', 0, '晶体260003兑换数'], ['num3', 0, '晶体260003兑换数'],
['num4', 0, '晶体260004兑换数'], ['num4', 0, '晶体260004兑换数'],
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['property_chg', _common.PropertyChg(), '属性变更'], ['property_chg', _common.PropertyChg(), '属性变更'],
] ]
}, },
{ {
'name': 'exchangeUplimit', 'name': 'exchangeUplimit',
'desc': '每周晶体兑换上限', 'desc': '每周晶体兑换上限',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=exchangeUplimit', 'url': 'webapp/index.php?c=ComputingPower&a=exchangeUplimit',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['data', _common.ExchangeCrystalNum(), '本周期晶体兑换信息'] ['data', _common.ExchangeCrystalNum(), '本周期晶体兑换信息']
] ]
}, },
{ {
'name': 'getRewardHistory', 'name': 'getRewardHistory',
'desc': '获取奖励历史', 'desc': '获取奖励历史',
'group': 'ComputingPower', 'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=getRewardHistory', 'url': 'webapp/index.php?c=ComputingPower&a=getRewardHistory',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
['star_time', 0, '开始时间,都没传查全部'], ['star_time', 0, '开始时间,都没传查全部'],
['end_time', 0, '结束时间,都没传查全部'], ['end_time', 0, '结束时间,都没传查全部'],
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),
['!data', [_common.CECRewardHistory()], '算力信息'], ['!data', [_common.CECRewardHistory()], '算力信息'],
['pending_rewards', '', '剩余总计'], ['pending_rewards', '', '剩余总计'],
] ]
}, },
# {
# { 'name': 'exchangeUplimitNew',
# 'name': 'getExchangePowerHistorys', 'desc': '晶体兑换上限',
# 'desc': '获取兑换算力历史', 'group': 'ComputingPower',
# 'group': 'ComputingPower', 'url': 'webapp/index.php?c=ComputingPower&a=exchangeUplimitNew',
# 'url': 'webapp/index.php?c=ComputingPower&a=getExchangePowerHistorys', 'params': [
# 'params': [ _common.ReqHead(),
# _common.ReqHead(), ],
# ], 'response': [
# 'response': [ _common.RspHead(),
# _common.RspHead(), ['totalNum', 0, '可领取的总晶体'],
# ['info', _common.ComputingPower(), '算力信息'] ['!playing', [Info()], '游戏行为'],
# ] ['!staking', [Info()], '质押行为'],
# }, ['!consuming', [Info()], '支出行为'],
] ]
},
{
'name': 'claimCrystal',
'desc': '一键领取晶体',
'group': 'ComputingPower',
'url': 'webapp/index.php?c=ComputingPower&a=claimCrystal',
'params': [
_common.ReqHead(),
],
'response': [
_common.RspHead(),
['award', _common.Award(), '奖励信息'],
['property_chg', _common.PropertyChg(), '属性变更'],
]
},
]
class Info(object):
def __init__(self):
self.fields = [
['task_id', 0, 'task_id'],
['uplimit', '', '上限数量 -1为无上限'],
['chaim_num', 0, '可领取数量'],
]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
begin;
CREATE TABLE `t_hash_rate_task` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)',
`task_id` int(11) NOT NULL COMMENT '配置表HashRateTask',
`season` int(11) NOT NULL DEFAULT '0' COMMENT 'taskId 为10003可用',
`record_total` int(64) NOT NULL DEFAULT '0' COMMENT '记录总数据',
`claim_day` int(64) NOT NULL DEFAULT '0' COMMENT '当天领取数据',
`claim_total` int(64) NOT NULL DEFAULT '0' COMMENT '领取总数据',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `account_task_id` (`account_id`, `task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into version (version) values(2023092001);
commit;

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@ require_once('models/User.php');
require_once('models/Parachute.php'); require_once('models/Parachute.php');
require_once('models/ChipPage.php'); require_once('models/ChipPage.php');
require_once('models/Battle.php'); require_once('models/Battle.php');
require_once('models/HashRateTask.php');
require_once('services/BattleDataService.php'); require_once('services/BattleDataService.php');
require_once('services/TameBattleDataService.php'); require_once('services/TameBattleDataService.php');
require_once('services/FormulaService.php'); require_once('services/FormulaService.php');
@ -29,6 +30,7 @@ use models\User;
use models\Parachute; use models\Parachute;
use models\ChipPage; use models\ChipPage;
use models\Battle; use models\Battle;
use models\HashRateTask;
class BattleController extends BaseAuthedController { class BattleController extends BaseAuthedController {
@ -124,6 +126,7 @@ class BattleController extends BaseAuthedController {
// $ranked = getReqVal('pvp_personal_rank', 0); // $ranked = getReqVal('pvp_personal_rank', 0);
$teamBattleDataService = new services\TameBattleDataService(); $teamBattleDataService = new services\TameBattleDataService();
$teamBattleDataService->calStarNum(); $teamBattleDataService->calStarNum();
HashRateTask::setRankedData();
} }
public function teamReport() public function teamReport()

View File

@ -1,387 +1,468 @@
<?php <?php
require_once('mt/HashRate.php'); require_once('mt/HashRate.php');
require_once('mt/HashRateCommon.php'); require_once('mt/HashRateCommon.php');
require_once('mt/Item.php'); require_once('mt/HashRateTask.php');
require_once('mt/Parameter.php'); require_once('mt/Item.php');
require_once('services/HashRateService.php'); require_once('mt/Parameter.php');
require_once('services/AwardService.php'); require_once('services/HashRateService.php');
require_once('services/PropertyChgService.php'); require_once('services/AwardService.php');
require_once('services/NumberService.php'); require_once('services/PropertyChgService.php');
require_once('services/NumberService.php');
require_once('models/ComputingPower.php');
require_once('models/CrystalRecord.php'); require_once('models/ComputingPower.php');
require_once('models/RewardsCec.php'); require_once('models/CrystalRecord.php');
require_once('models/Staking.php'); require_once('models/RewardsCec.php');
require_once('models/Staking.php');
use models\ComputingPower; require_once('models/HashRateTask.php');
use models\CrystalRecord;
use models\RewardsCec; use models\ComputingPower;
use models\Staking; use models\CrystalRecord;
use mt\HashRate; use models\RewardsCec;
use mt\Parameter; use models\Staking;
use phpcommon\SqlHelper; use models\HashRateTask;
class ComputingPowerController extends BaseAuthedController use mt\HashRate;
{ use mt\Parameter;
public function info(){ use phpcommon\SqlHelper;
$period_state = -1 ; //-1:算力周期未开始 0:正常周期 1:等待周期 2:维护周期 class ComputingPowerController extends BaseAuthedController
$curr_period = array( {
"period_begin" => 0, public function info(){
"period_end" => 0, $period_state = -1 ; //-1:算力周期未开始 0:正常周期 1:等待周期 2:维护周期
"await_time" => 0, $curr_period = array(
"assignable_cec" => 0, "period_begin" => 0,
"cec_pool" => 0, "period_end" => 0,
"total_exchange_hash_rate" => 0, "await_time" => 0,
"total_hash_rate" => 0, "assignable_cec" => 0,
"cec_pool" => 0,
); "total_exchange_hash_rate" => 0,
$reward = array( "total_hash_rate" => 0,
"cec" => 0,
"point" => 0, );
); $reward = array(
$last_period = array( "cec" => 0,
"period_begin" => 0, "point" => 0,
"period_end" => 0, );
"reward" => 0, $last_period = array(
); "period_begin" => 0,
"period_end" => 0,
$lastMeta = \mt\HashRateCommon::getLastPeriod(); "reward" => 0,
$currentMeta = \mt\HashRateCommon::getCurrentPeriod(); );
$nextMeta = \mt\HashRateCommon::getNextPeriod();
if (!$currentMeta && $lastMeta){ $lastMeta = \mt\HashRateCommon::getLastPeriod();
$ownerNum = ComputingPower::getOwnedBH($lastMeta['id']); $currentMeta = \mt\HashRateCommon::getCurrentPeriod();
$totalNum = ComputingPower::getTotalBH($lastMeta['id']); $nextMeta = \mt\HashRateCommon::getNextPeriod();
$target = \services\NumberService::ceilEx(min($totalNum / $lastMeta['cec_pool'] , 1),6); if (!$currentMeta && $lastMeta){
if ($totalNum == 0) { $ownerNum = ComputingPower::getOwnedBH($lastMeta['id']);
$ratio = 0; $totalNum = ComputingPower::getTotalBH($lastMeta['id']);
}else{ $target = \services\NumberService::ceilEx(min($totalNum / $lastMeta['cec_pool'] , 1),6);
$ratio = $ownerNum/$totalNum; if ($totalNum == 0) {
} $ratio = 0;
$reward['cec'] = \services\NumberService::ceilEx($currentMeta['cec_pool'] * $target * $ratio,2); }else{
if ($nextMeta){ $ratio = $ownerNum/$totalNum;
$period_state = 1; }
$curr_period['period_begin'] = strtotime($nextMeta['start_time']); $reward['cec'] = \services\NumberService::ceilEx($currentMeta['cec_pool'] * $target * $ratio,2);
$curr_period['period_end'] = strtotime($nextMeta['end_time']); if ($nextMeta){
$curr_period['await_time'] = strtotime($nextMeta['start_time']) - myself()->_getNowTime(); $period_state = 1;
}else{ $curr_period['period_begin'] = strtotime($nextMeta['start_time']);
$period_state = 2; $curr_period['period_end'] = strtotime($nextMeta['end_time']);
} $curr_period['await_time'] = strtotime($nextMeta['start_time']) - myself()->_getNowTime();
} }else{
if ($currentMeta){ $period_state = 2;
$period_state = 0; }
$ownerNum = ComputingPower::getOwnedBH($currentMeta['id']); }
$totalNum = ComputingPower::getTotalBH($currentMeta['id']); if ($currentMeta){
$curr_period['period_begin'] = strtotime($currentMeta['start_time']); $period_state = 0;
$curr_period['period_end'] = strtotime($currentMeta['end_time']); $ownerNum = ComputingPower::getOwnedBH($currentMeta['id']);
$curr_period['assignable_cec'] = min($currentMeta['cec_pool'],$totalNum); $totalNum = ComputingPower::getTotalBH($currentMeta['id']);
$curr_period['cec_pool'] = $currentMeta['cec_pool']; $curr_period['period_begin'] = strtotime($currentMeta['start_time']);
$curr_period['total_exchange_hash_rate'] = $ownerNum; $curr_period['period_end'] = strtotime($currentMeta['end_time']);
$curr_period['total_hash_rate'] = $totalNum; $curr_period['assignable_cec'] = min($currentMeta['cec_pool'],$totalNum);
$curr_period['await_time'] = strtotime($currentMeta['end_time']) - myself()->_getNowTime(); $curr_period['cec_pool'] = $currentMeta['cec_pool'];
$curr_period['total_exchange_hash_rate'] = $ownerNum;
$target = \services\NumberService::ceilEx(min($totalNum / $currentMeta['cec_pool'] , 1),6); $curr_period['total_hash_rate'] = $totalNum;
if ($totalNum == 0) { $curr_period['await_time'] = strtotime($currentMeta['end_time']) - myself()->_getNowTime();
$ratio = 0;
}else{ $target = \services\NumberService::ceilEx(min($totalNum / $currentMeta['cec_pool'] , 1),6);
$ratio = $ownerNum/$totalNum; if ($totalNum == 0) {
} $ratio = 0;
$reward['cec'] = \services\NumberService::ceilEx($currentMeta['cec_pool'] * $target * $ratio,2); }else{
$reward['point'] = $ownerNum; $ratio = $ownerNum/$totalNum;
} }
$reward['cec'] = \services\NumberService::ceilEx($currentMeta['cec_pool'] * $target * $ratio,2);
if ($lastMeta){ $reward['point'] = $ownerNum;
$last_period['period_begin'] = strtotime($lastMeta['start_time']); }
$last_period['period_end'] = strtotime($lastMeta['end_time']);
$cecDb = RewardsCec::findByAccount(myself()->_getAccountId(),$lastMeta['id']); if ($lastMeta){
$last_period['reward'] = $cecDb ? $cecDb['reward_cec'] : 0; $last_period['period_begin'] = strtotime($lastMeta['start_time']);
$last_period['last_hash_rate'] = ComputingPower::getOwnedBH($lastMeta['id']); $last_period['period_end'] = strtotime($lastMeta['end_time']);
} $cecDb = RewardsCec::findByAccount(myself()->_getAccountId(),$lastMeta['id']);
$last_period['reward'] = $cecDb ? $cecDb['reward_cec'] : 0;
$last_period['last_hash_rate'] = ComputingPower::getOwnedBH($lastMeta['id']);
}
$info = array(
'period_state' => $period_state,
'curr_period' => $curr_period,
'curr_reward' => $reward, $info = array(
'last_period' => $last_period, 'period_state' => $period_state,
'listing_state' => LISTING_SWITCH, 'curr_period' => $curr_period,
'owned_cec' => RewardsCec::getTotalCecNum(), 'curr_reward' => $reward,
'owned_total_hash_rate' =>ComputingPower::getMyTotalBH(), 'last_period' => $last_period,
); 'listing_state' => LISTING_SWITCH,
$this->_rspData(array( 'owned_cec' => RewardsCec::getTotalCecNum(),
'info' => $info 'owned_total_hash_rate' =>ComputingPower::getMyTotalBH(),
)); );
} $this->_rspData(array(
'info' => $info
public function getCrystalUi(){ ));
$crystalList = array(); }
$itemMetas = \mt\Item::getMetaListByType(\mt\Item::CRYSTAL_TYPE);
$hashRateService = new \services\HashRateService(); public function getCrystalUi(){
foreach ($itemMetas as $meta){ $crystalList = array();
$crystalDto = array(); $itemMetas = \mt\Item::getMetaListByType(\mt\Item::CRYSTAL_TYPE);
$hashRateService->getCrystalDto($meta,$crystalDto); $hashRateService = new \services\HashRateService();
array_push($crystalList,$crystalDto); foreach ($itemMetas as $meta){
} $crystalDto = array();
$this->_rspData(array( $hashRateService->getCrystalDto($meta,$crystalDto);
'data' => $crystalList array_push($crystalList,$crystalDto);
)); }
} $this->_rspData(array(
'data' => $crystalList
public function exchangeCrystal(){ ));
$itemId = getReqVal('item_id', 0); }
$itemMeta = \mt\Item::get($itemId);
if (!$itemMeta || $itemMeta['type'] != \mt\Item::CRYSTAL_TYPE ){ public function exchangeCrystal(){
$this->_rspErr(1, 'param error'); $itemId = getReqVal('item_id', 0);
return ; $itemMeta = \mt\Item::get($itemId);
} if (!$itemMeta || $itemMeta['type'] != \mt\Item::CRYSTAL_TYPE ){
$hashRateMeta = HashRate::findHash($itemId); $this->_rspErr(1, 'param error');
if (!$hashRateMeta){ return ;
$this->_rspErr(1, 'param error'); }
return ; $hashRateMeta = HashRate::findHash($itemId);
} if (!$hashRateMeta){
$param = explode('|',$hashRateMeta['parameter']); $this->_rspErr(1, 'param error');
$paramEd = explode(':',$param[0]); return ;
$paramEx = explode(':',$param[1]); }
$crystalNum = 0; $param = explode('|',$hashRateMeta['parameter']);
switch ($itemId){ $paramEd = explode(':',$param[0]);
case ComputingPower::CRYSTAL1 : { $paramEx = explode(':',$param[1]);
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0); $crystalNum = 0;
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1); switch ($itemId){
$killsNumEx = $killsNum - $killsNumEd; case ComputingPower::CRYSTAL1 : {
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0); $killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1); $killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
$starNumEx = $starNum - $starNumEd ; $killsNumEx = $killsNum - $killsNumEd;
$crystalNum = max(0,floor($killsNumEx / $paramEd[0]) * $paramEd[1] + $starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
floor($starNumEx / $paramEx[0]) * $paramEx[1] ); $starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
} $starNumEx = $starNum - $starNumEd ;
break; $crystalNum = max(0,floor($killsNumEx / $paramEd[0]) * $paramEd[1] +
case ComputingPower::CRYSTAL2 : { floor($starNumEx / $paramEx[0]) * $paramEx[1] );
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0); }
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1); break;
$consumeCostEx = $consumeCost - $consumeCostEd ; case ComputingPower::CRYSTAL2 : {
$crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $paramEd[0]) * $paramEd[1]); $consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
} $consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
break; $consumeCostEx = $consumeCost - $consumeCostEd ;
case ComputingPower::CRYSTAL3 : { $crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $paramEd[0]) * $paramEd[1]);
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0); }
$consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1); break;
$consumeCostEx = $consumeCost - $consumeCostEd; case ComputingPower::CRYSTAL3 : {
$crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $paramEd[0]) * $paramEd[1]); $consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
} $consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
break; $consumeCostEx = $consumeCost - $consumeCostEd;
case ComputingPower::CRYSTAL4 : { $crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $paramEd[0]) * $paramEd[1]);
$recordDb = CrystalRecord::getNewestRecordOne($itemId); }
error_log('exchangeCrystal:'.json_encode($recordDb)); break;
if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){ case ComputingPower::CRYSTAL4 : {
$this->_rspErr(1, 'There are no available crystals'); $recordDb = CrystalRecord::getNewestRecordOne($itemId);
return ; error_log('exchangeCrystal:'.json_encode($recordDb));
} if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){
// $rate = Parameter::getVal('cec_exchange_rate',10); $this->_rspErr(1, 'There are no available crystals');
$cecVal = Staking::getStakingTotalValue(); return ;
$crystalNum = max(0,floor($cecVal / $paramEd[0]) * $paramEd[1]); }
// $rate = Parameter::getVal('cec_exchange_rate',10);
} $cecVal = Staking::getStakingTotalValue();
} $crystalNum = max(0,floor($cecVal / $paramEd[0]) * $paramEd[1]);
if ($crystalNum < 1){ }
$this->_rspErr(1, 'There are no available crystals'); }
return ;
} if ($crystalNum < 1){
$this->_rspErr(1, 'There are no available crystals');
return ;
}
$items = array(
array(
'item_id' => $itemId,
'item_num' => $crystalNum, $items = array(
) array(
); 'item_id' => $itemId,
$propertyChgService = new services\PropertyChgService(); 'item_num' => $crystalNum,
$awardService = new services\AwardService(); )
$this->_addItems($items,$awardService,$propertyChgService); );
CrystalRecord::addCrystalRecord($itemId,$crystalNum); $propertyChgService = new services\PropertyChgService();
switch ($itemId) { $awardService = new services\AwardService();
case ComputingPower::CRYSTAL1 : { $this->_addItems($items,$awardService,$propertyChgService);
CrystalRecord::addCrystalRecord($itemId,$crystalNum);
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0); switch ($itemId) {
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1); case ComputingPower::CRYSTAL1 : {
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1); $killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
//floor($killsNumEx / $paramEd[0]) * $paramEd[1] 222 100:3 222/100=2 2*3=6 6/3=2 2*100 $killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
$newKillsNum = floor(($killsNum-$killsNumEd)/$paramEd[0]) * $paramEd[0]; $starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
myself()->_incV(TN_TOTAL_KILLS_NUM,-1,$newKillsNum); $starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
$newStarNum = floor(($starNum-$starNumEd)/$paramEx[0]) * $paramEx[0]; //floor($killsNumEx / $paramEd[0]) * $paramEd[1] 222 100:3 222/100=2 2*3=6 6/3=2 2*100
myself()->_incV(TN_TOTAL_STAR_NUM,-1,$newStarNum); $newKillsNum = floor(($killsNum-$killsNumEd)/$paramEd[0]) * $paramEd[0];
} myself()->_incV(TN_TOTAL_KILLS_NUM,-1,$newKillsNum);
break; $newStarNum = floor(($starNum-$starNumEd)/$paramEx[0]) * $paramEx[0];
case ComputingPower::CRYSTAL2 : { myself()->_incV(TN_TOTAL_STAR_NUM,-1,$newStarNum);
myself()->_incV(TN_TOTAL_DIAMOND_CONSUME,-1,$crystalNum / $paramEd[1] * $paramEd[0] * \services\HashRateService::EXCHANGE_RATE); }
} break;
break; case ComputingPower::CRYSTAL2 : {
case ComputingPower::CRYSTAL3 : { myself()->_incV(TN_TOTAL_DIAMOND_CONSUME,-1,$crystalNum / $paramEd[1] * $paramEd[0] * \services\HashRateService::EXCHANGE_RATE);
myself()->_incV(TN_TOTAL_CEG_CONSUME,-1,$crystalNum / $paramEd[1] * $paramEd[0] * \services\HashRateService::EXCHANGE_RATE); }
} break;
break; case ComputingPower::CRYSTAL3 : {
} myself()->_incV(TN_TOTAL_CEG_CONSUME,-1,$crystalNum / $paramEd[1] * $paramEd[0] * \services\HashRateService::EXCHANGE_RATE);
$this->_rspData(array( }
'award' => $awardService->toDto(), break;
'property_chg' => $propertyChgService->toDto(), }
)); $this->_rspData(array(
} 'award' => $awardService->toDto(),
'property_chg' => $propertyChgService->toDto(),
public function getExchangeCrystalRecord(){ ));
$crystalRecordList = array(); }
CrystalRecord::getCrystalRecordList(function ($row) use (&$crystalRecordList) {
array_push($crystalRecordList,array( public function getExchangeCrystalRecord(){
'item_id' => $row['item_id'], $crystalRecordList = array();
'item_num' => $row['item_num'], CrystalRecord::getCrystalRecordList(function ($row) use (&$crystalRecordList) {
'createtime' => $row['createtime'], array_push($crystalRecordList,array(
)); 'item_id' => $row['item_id'],
}); 'item_num' => $row['item_num'],
$this->_rspData(array( 'createtime' => $row['createtime'],
'data' => $crystalRecordList, ));
)); });
} $this->_rspData(array(
'data' => $crystalRecordList,
public function exchangeUplimit(){ ));
$currentMeta = \mt\HashRateCommon::getCurrentPeriod(); }
if (!$currentMeta){
$this->_rspErr(1, 'kindly await'); public function exchangeUplimit(){
return ; $currentMeta = \mt\HashRateCommon::getCurrentPeriod();
} if (!$currentMeta){
$list = ComputingPower::findByPeriod($currentMeta['id']); $this->_rspErr(1, 'kindly await');
$this->_rspData(array( return ;
'data' => $list, }
)); $list = ComputingPower::findByPeriod($currentMeta['id']);
} $this->_rspData(array(
'data' => $list,
public function exchangePower(){ ));
$num1 = getReqVal('num1', 0); }
$num2 = getReqVal('num2', 0);
$num3 = getReqVal('num3', 0); public function exchangePower(){
$num4 = getReqVal('num4', 0); $num1 = getReqVal('num1', 0);
$currentMeta = \mt\HashRateCommon::getCurrentPeriod(); $num2 = getReqVal('num2', 0);
if (!$currentMeta){ $num3 = getReqVal('num3', 0);
$this->_rspErr(1, 'kindly await'); $num4 = getReqVal('num4', 0);
return ; $currentMeta = \mt\HashRateCommon::getCurrentPeriod();
} if (!$currentMeta){
if (!$num1 && !$num2 && !$num3 && !$num4 ){ $this->_rspErr(1, 'kindly await');
$this->_rspErr(1, 'exchange none'); return ;
return ; }
} if (!$num1 && !$num2 && !$num3 && !$num4 ){
$BH = 0 ; $this->_rspErr(1, 'exchange none');
$costItems = array(); return ;
if ($num1 > 0){ }
$meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL1); $BH = 0 ;
$this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4); $costItems = array();
$BH += $num1 * $meta['amount_bh']; if ($num1 > 0){
array_push($costItems,array( $meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL1);
'item_id' => ComputingPower::CRYSTAL1, $this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4);
'item_num' => $num1 $BH += $num1 * $meta['amount_bh'];
)); array_push($costItems,array(
} 'item_id' => ComputingPower::CRYSTAL1,
if ($num2 > 0){ 'item_num' => $num1
$meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL2); ));
$this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4); }
$BH += $num2 * $meta['amount_bh']; if ($num2 > 0){
array_push($costItems,array( $meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL2);
'item_id' => ComputingPower::CRYSTAL2, $this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4);
'item_num' => $num2 $BH += $num2 * $meta['amount_bh'];
)); array_push($costItems,array(
} 'item_id' => ComputingPower::CRYSTAL2,
if ($num3 > 0){ 'item_num' => $num2
$meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL3); ));
$this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4); }
$BH += $num3 * $meta['amount_bh']; if ($num3 > 0){
array_push($costItems,array( $meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL3);
'item_id' => ComputingPower::CRYSTAL3, $this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4);
'item_num' => $num3 $BH += $num3 * $meta['amount_bh'];
)); array_push($costItems,array(
} 'item_id' => ComputingPower::CRYSTAL3,
if ($num4 > 0){ 'item_num' => $num3
$meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL4); ));
$this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4); }
$BH += $num4 * $meta['amount_bh']; if ($num4 > 0){
array_push($costItems,array( $meta = \mt\HashRate::findHash(ComputingPower::CRYSTAL4);
'item_id' => ComputingPower::CRYSTAL4, $this->_verificationCeiling($currentMeta['id'],$meta,$num1,$num2,$num3,$num4);
'item_num' => $num4 $BH += $num4 * $meta['amount_bh'];
)); array_push($costItems,array(
} 'item_id' => ComputingPower::CRYSTAL4,
$lackItem = null; 'item_num' => $num4
if (!$this->_hasEnoughItems($costItems, $lackItem)) { ));
$this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); }
return; $lackItem = null;
} if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_decItems($costItems); $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem));
$propertyChgService = new services\PropertyChgService(); return;
$propertyChgService->addBagChg(); }
ComputingPower::addPowerRecord( $this->_decItems($costItems);
array( $propertyChgService = new services\PropertyChgService();
'period' => $currentMeta['id'], $propertyChgService->addBagChg();
'item_num1' => $num1, ComputingPower::addPowerRecord(
'item_num2' => $num2, array(
'item_num3' => $num3, 'period' => $currentMeta['id'],
'item_num4' => $num4, 'item_num1' => $num1,
'total_num' => $BH, 'item_num2' => $num2,
) 'item_num3' => $num3,
); 'item_num4' => $num4,
$this->_rspData(array( 'total_num' => $BH,
'property_chg' => $propertyChgService->toDto(), )
)); );
$this->_rspData(array(
} 'property_chg' => $propertyChgService->toDto(),
));
public function getRewardHistory(){
$starTime = getReqVal('star_time', 0); }
$endTime = getReqVal('end_time', 0);
$historyDb = RewardsCec::getHistoryByTime($starTime,$endTime); public function getRewardHistory(){
$historyList = array(); $starTime = getReqVal('star_time', 0);
$pendingNum = 0; $endTime = getReqVal('end_time', 0);
foreach ($historyDb as $row){ $historyDb = RewardsCec::getHistoryByTime($starTime,$endTime);
$historyDto = RewardsCec::toDto($row); $historyList = array();
$pendingNum += $historyDto['pending_num']; $pendingNum = 0;
array_push($historyList,$historyDto); foreach ($historyDb as $row){
} $historyDto = RewardsCec::toDto($row);
$this->_rspData(array( $pendingNum += $historyDto['pending_num'];
'data' => $historyList, array_push($historyList,$historyDto);
'pending_rewards' => strval($pendingNum), }
)); $this->_rspData(array(
} 'data' => $historyList,
'pending_rewards' => strval($pendingNum),
private function _verificationCeiling($period,$meta,$num1,$num2,$num3,$num4){ ));
$list = ComputingPower::findByPeriod($period); }
switch ($meta['item_id']){
case ComputingPower::CRYSTAL1 : { public function exchangeUplimitNew(){
if ($list['num1'] + $num1 > $meta['week_max']){ $hashRateService = new \services\HashRateService();
$this->_rspErr(1, 'Micro crystal exchange ceiling'); $crystalInfo = $hashRateService->getCrystalValue();
die ; $this->_rspData(array(
} 'crystalInfo' => $crystalInfo
} ));
break; }
case ComputingPower::CRYSTAL2 : {
if ($list['num2'] + $num2 > $meta['week_max']){ public function claimCrystal(){
$this->_rspErr(1, 'Standard crystal exchange ceiling'); $hashRateService = new \services\HashRateService();
die ; $crystalInfo = $hashRateService->getCrystalValue();
} if ($crystalInfo['totalNum'] < 1){
} $this->_rspErr(1, 'No crystals available at this time');
break; return ;
case ComputingPower::CRYSTAL3 : { }
if ($list['num3'] + $num3 > $meta['week_max']){ foreach ($crystalInfo['playing'] as $val){
$this->_rspErr(1, 'Large crystal exchange ceiling'); if ($val['chaim_num'] < 1){
die ; continue;
} }
} $hashRateMt = \mt\HashRateTask::find($val['task_id']);
break; switch ($val['task_id']){
case ComputingPower::CRYSTAL4 : { case HashRateTask::RANK_TYPE :{
if ($list['num4'] + $num4 > $meta['week_max']){ $chaimUpTotal = $val['chaim_num'] / $hashRateMt['reward'];
$this->_rspErr(1, 'Giant crystal exchange ceiling'); HashRateTask::updateKv($val['task_id'],array(
die ; 'claim_total' => function () use($chaimUpTotal) {
} return "claim_total + ${chaimUpTotal}";
} },
break; 'modifytime' => myself()->_getNowTime()
} ));
} }
break;
default : {
if ($val['task_id'] == HashRateTask::BATTLE_TIME_TYPE){
$chaimTotal = $val['chaim_num'] / $hashRateMt['reward'] * $hashRateMt['target'] * 1000;
}else{
$chaimTotal = $val['chaim_num'] / $hashRateMt['reward'] * $hashRateMt['target'];
}
HashRateTask::incDailyReward($val['task_id'],$val['chaim_num'],$chaimTotal);
}
}
}
foreach ($crystalInfo['staking'] as $val){
if ($val['chaim_num'] > 0){
HashRateTask::updateKv($val['task_id'],array(
'claim_day' => 1,
'modifytime' => myself()->_getNowTime()
));
}
}
foreach ($crystalInfo['consuming'] as $val){
if ($val['chaim_num'] > 0){
$hashRateMt = \mt\HashRateTask::find($val['task_id']);
$chaimTotal = $val['chaim_num'] / $hashRateMt['reward'] * $hashRateMt['target'] * \services\HashRateService::EXCHANGE_RATE;
myself()->_incV(TN_TOTAL_DIAMOND_CONSUME,-1,$chaimTotal);
}
}
$items = array(
array(
'item_id' => ComputingPower::CRYSTAL_NEW,
'item_num' => $crystalInfo['totalNum'],
)
);
$propertyChgService = new services\PropertyChgService();
$awardService = new services\AwardService();
$this->_addItems($items,$awardService,$propertyChgService);
CrystalRecord::addCrystalRecord(ComputingPower::CRYSTAL_NEW,$crystalInfo['totalNum']);
$this->_rspData(array(
'award' => $awardService->toDto(),
'property_chg' => $propertyChgService->toDto(),
));
}
private function _verificationCeiling($period,$meta,$num1,$num2,$num3,$num4){
$list = ComputingPower::findByPeriod($period);
switch ($meta['item_id']){
case ComputingPower::CRYSTAL1 : {
if ($list['num1'] + $num1 > $meta['week_max']){
$this->_rspErr(1, 'Micro crystal exchange ceiling');
die ;
}
}
break;
case ComputingPower::CRYSTAL2 : {
if ($list['num2'] + $num2 > $meta['week_max']){
$this->_rspErr(1, 'Standard crystal exchange ceiling');
die ;
}
}
break;
case ComputingPower::CRYSTAL3 : {
if ($list['num3'] + $num3 > $meta['week_max']){
$this->_rspErr(1, 'Large crystal exchange ceiling');
die ;
}
}
break;
case ComputingPower::CRYSTAL4 : {
if ($list['num4'] + $num4 > $meta['week_max']){
$this->_rspErr(1, 'Giant crystal exchange ceiling');
die ;
}
}
break;
}
}
public function test(){
print_r(\mt\HashRateTask::getMetaList());
}
} }

View File

@ -1,137 +1,138 @@
<?php <?php
namespace models; namespace models;
require_once('services/NumberService.php'); require_once('services/NumberService.php');
use mt; use mt;
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
use services\NumberService; use services\NumberService;
class ComputingPower extends BaseModel class ComputingPower extends BaseModel
{ {
const CRYSTAL1 = 260001; const CRYSTAL1 = 260001;
const CRYSTAL2 = 260002; const CRYSTAL2 = 260002;
const CRYSTAL3 = 260003; const CRYSTAL3 = 260003;
const CRYSTAL4 = 260004; const CRYSTAL4 = 260004;
const CRYSTAL_NEW = 260010;
//获取我的算力
public static function getOwnedBH($period,$account = null){ //获取我的算力
if (!$account){ public static function getOwnedBH($period,$account = null){
$account = myself()->_getAccountId(); if (!$account){
} $account = myself()->_getAccountId();
$rows = SqlHelper::ormSelect( }
myself()->_getMysql($account), $rows = SqlHelper::ormSelect(
't_power_exchange_record', myself()->_getMysql($account),
array( 't_power_exchange_record',
'account_id'=>$account, array(
'period' => $period 'account_id'=>$account,
) 'period' => $period
); )
$my_total_num = 0; );
if ($rows){ $my_total_num = 0;
foreach ($rows as $row){ if ($rows){
$my_total_num += $row['total_num']; foreach ($rows as $row){
} $my_total_num += $row['total_num'];
} }
}
return NumberService::ceilEx($my_total_num,6);
} return NumberService::ceilEx($my_total_num,6);
}
//获取全服总算力
public static function getTotalBH($period){ //获取全服总算力
$rows = SqlHelper::select( public static function getTotalBH($period){
myself()->_getMysql(''), $rows = SqlHelper::select(
't_power_exchange_record', myself()->_getMysql(''),
array( 't_power_exchange_record',
"period", array(
"total_num" "period",
), "total_num"
array( ),
'period' => $period array(
) 'period' => $period
); )
$total_num = 0; );
if ($rows){ $total_num = 0;
foreach ($rows as $row){ if ($rows){
$total_num += $row['total_num']; foreach ($rows as $row){
} $total_num += $row['total_num'];
} }
return $total_num; }
} return $total_num;
}
//获取我的总算力
public static function getMyTotalBH(){ //获取我的总算力
$rows = SqlHelper::select( public static function getMyTotalBH(){
myself()->_getSelfMysql(), $rows = SqlHelper::select(
't_power_exchange_record', myself()->_getSelfMysql(),
array( 't_power_exchange_record',
"period", array(
"total_num" "period",
), "total_num"
array( ),
'account_id'=>myself()->_getAccountId(), array(
) 'account_id'=>myself()->_getAccountId(),
); )
$total_num = 0; );
if ($rows){ $total_num = 0;
foreach ($rows as $row){ if ($rows){
$total_num += $row['total_num']; foreach ($rows as $row){
} $total_num += $row['total_num'];
} }
return $total_num; }
} return $total_num;
}
public static function findByPeriod($period){
$rows = SqlHelper::ormSelect( public static function findByPeriod($period){
myself()->_getSelfMysql(), $rows = SqlHelper::ormSelect(
't_power_exchange_record', myself()->_getSelfMysql(),
array( 't_power_exchange_record',
'account_id'=>myself()->_getAccountId(), array(
'period' => $period 'account_id'=>myself()->_getAccountId(),
) 'period' => $period
); )
$list = array( );
'num1' => 0, $list = array(
'num2' => 0, 'num1' => 0,
'num3' => 0, 'num2' => 0,
'num4' => 0, 'num3' => 0,
); 'num4' => 0,
if ($rows){ );
foreach ($rows as $row){ if ($rows){
$list['num1'] += $row['item_num1']; foreach ($rows as $row){
$list['num2'] += $row['item_num2']; $list['num1'] += $row['item_num1'];
$list['num3'] += $row['item_num3']; $list['num2'] += $row['item_num2'];
$list['num4'] += $row['item_num4']; $list['num3'] += $row['item_num3'];
} $list['num4'] += $row['item_num4'];
} }
return $list; }
} return $list;
}
public static function addPowerRecord($fieldKv){
SqlHelper::insert( public static function addPowerRecord($fieldKv){
myself()->_getSelfMysql(), SqlHelper::insert(
't_power_exchange_record', myself()->_getSelfMysql(),
array( 't_power_exchange_record',
'account_id'=>myself()->_getAccountId(), array(
'address'=>myself()->_getAddress(), 'account_id'=>myself()->_getAccountId(),
'period'=>$fieldKv['period'], 'address'=>myself()->_getAddress(),
'item_num1'=>$fieldKv['item_num1'], 'period'=>$fieldKv['period'],
'item_num2' => $fieldKv['item_num2'], 'item_num1'=>$fieldKv['item_num1'],
'item_num3' => $fieldKv['item_num3'], 'item_num2' => $fieldKv['item_num2'],
'item_num4' => $fieldKv['item_num4'], 'item_num3' => $fieldKv['item_num3'],
'total_num' => $fieldKv['total_num'], 'item_num4' => $fieldKv['item_num4'],
'createtime'=>myself()->_getNowTime(), 'total_num' => $fieldKv['total_num'],
'modifytime'=>myself()->_getNowTime(), 'createtime'=>myself()->_getNowTime(),
) 'modifytime'=>myself()->_getNowTime(),
); )
} );
}
public static function getAccountGroup($period){
$sql = "select account_id,`period` from t_power_exchange_record where `period` = $period group by account_id"; public static function getAccountGroup($period){
$rows = myself()->_getMysql('')->execQuery($sql); $sql = "select account_id,`period` from t_power_exchange_record where `period` = $period group by account_id";
return $rows; $rows = myself()->_getMysql('')->execQuery($sql);
} return $rows;
}
} }

View File

@ -0,0 +1,175 @@
<?php
namespace models;
require_once('mt/Rank.php');
require_once('mt/RankSeason.php');
use mt\Rank;
use mt\RankSeason;
use phpcommon\SqlHelper;
class HashRateTask extends BaseModel
{
const KILL_TYPE = 10001;
const STAR_TYPE = 10002;
const RANK_TYPE = 10003;
const BATTLE_TIME_TYPE = 10004;
const BATTLE_WIN_TYPE = 10005;
const VS_FOUR_BATTLE_WIN_TYPE = 10006;
const DAMAGE_TYPE = 10007;
public static function find(){
$rows = SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
)
);
if (count($rows) < 1){
$rows = array();
}
return $rows;
}
public static function toDto($row){
array(
'task_id' => $row['task_id']
);
}
public static function findByTaskId($taskId){
return SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
)
);
}
public static function incRecordNum($taskId,$num){
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
),
array(
'record_total' => function () use($num) {
return "record_total + ${num}";
},
'modifytime' => myself()->_getNowTime()
),
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
'record_total' => $num,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
public static function getDailyReward($taskId){
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
)
);
$modifytime = $row ? $row['modifytime'] : myself()->_getNowTime();
$num = $row ? $row['claim_day'] : 0;
if (myself()->_getDaySeconds($modifytime) < myself()->_getNowDaySeconds()) {
$num = 0;
}
return $num;
}
public static function incDailyReward($taskId,$val,$total){
$oldVal = self::getDailyReward($taskId);
$val += $oldVal;
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
),
array(
'claim_day' => $val,
'claim_total' => function () use($total) {
return "claim_total + ${total}";
},
'modifytime' => myself()->_getNowTime()
),
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
'claim_day' => $val,
'claim_total' => $total,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
public static function updateKv($taskId,$fieldKv){
SqlHelper::update
(myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
),
$fieldKv
);
}
public static function setRankedData(){
$SeasonMeta = RankSeason::getCurrentSeason();
if (!$SeasonMeta){
error_log("当前赛季结束");
return;
}
if (! self::findByTaskIdOrSeason(self::RANK_TYPE,$SeasonMeta['id'])){
$userDb = myself()->_safeGetOrmUserInfo();
$rankMeta = Rank::getRankById($userDb['rank']);
SqlHelper::insert
(myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => self::RANK_TYPE,
'season' => $SeasonMeta['id'],
'record_total' => $rankMeta['rank_order2'],
'claim_total' => $rankMeta['rank_order2'],
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
}
}
public static function findByTaskIdOrSeason($taskId,$season){
return SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_hash_rate_task',
array(
'account_id' => myself()->_getAccountId(),
'task_id' => $taskId,
'season' => $season,
)
);
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace mt;
use phpcommon;
class HashRateTask {
const PLAYING = 1;
const STAKING = 2;
const TRADING = 3;
const CONSUMING = 4;
const COMMUNITY = 5;
const NFT = 6;
public static function find($id){
return getXVal(self::getMetaList(), $id, null);
}
public static function getListByType($type){
$mateList = array();
foreach (self::getMetaList() as $mate){
if ($mate['type'] == $type){
array_push($mateList,$mate);
}
}
return $mateList;
}
public static function getMetaList()
{
if (!self::$metaList) {
self::$metaList = getMetaTable('HashRateTask@HashRateTask.php');
}
return self::$metaList;
}
protected static $metaList;
}

View File

@ -1,103 +1,253 @@
<?php <?php
namespace services; namespace services;
require_once('mt/HashRate.php'); require_once('mt/HashRate.php');
require_once('mt/Parameter.php'); require_once('mt/Parameter.php');
require_once('models/Bag.php'); require_once('mt/HashRateTask.php');
require_once('models/CrystalRecord.php'); require_once('mt/Rank.php');
require_once('models/Staking.php'); require_once('mt/RankSeason.php');
require_once('models/Bag.php');
use models\Bag; require_once('models/CrystalRecord.php');
use models\CrystalRecord; require_once('models/Staking.php');
use models\Staking; require_once('models/HashRateTask.php');
use mt\HashRate;
use mt\Parameter; use models\Bag;
use models\CrystalRecord;
class HashRateService extends BaseService use models\Staking;
{ use models\HashRateTask;
const NONE_STATE = 0; use mt\HashRate;
const RECEIVED_STATE = 1; use mt\Parameter;
const EXCHANGE_RATE = 10; use mt\Rank;
public function getCrystalDto($crystalMeta,&$crystalDto){ use mt\RankSeason;
$crystalDto = array(
'item_id' => $crystalMeta['id'], class HashRateService extends BaseService
'pending' => 0, {
'total' => array(), const NONE_STATE = 0;
'claimed' => 0, const RECEIVED_STATE = 1;
'state' => self::NONE_STATE, const EXCHANGE_RATE = 10;
); public function getCrystalDto($crystalMeta,&$crystalDto){
$hashRateMeta = HashRate::findHash($crystalMeta['id']); $crystalDto = array(
$ownedNum = CrystalRecord::getCrystalNum($crystalMeta['id']); 'item_id' => $crystalMeta['id'],
$crystalDto['claimed'] = intval($ownedNum); 'pending' => 0,
switch ($crystalMeta['sub_type']){ 'total' => array(),
case 1 : { 'claimed' => 0,
$param = explode('|',$hashRateMeta['parameter']); 'state' => self::NONE_STATE,
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0); );
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1); $hashRateMeta = HashRate::findHash($crystalMeta['id']);
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0); $ownedNum = CrystalRecord::getCrystalNum($crystalMeta['id']);
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1); $crystalDto['claimed'] = intval($ownedNum);
$killsNumEx = $killsNum - $killsNumEd; switch ($crystalMeta['sub_type']){
$starNumEx = $starNum - $starNumEd ; case 1 : {
$crystalDto['total'] = array( $param = explode('|',$hashRateMeta['parameter']);
'param1' => floatval($killsNumEx), $killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
'param2' => floatval($starNumEx), $killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
); $starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
$paramKill = explode(':',$param[0]); $starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
$paramStar = explode(':',$param[1]); $killsNumEx = $killsNum - $killsNumEd;
$totalNum = max(0,floor($killsNumEx / $paramKill[0]) * $paramKill[1] + $starNumEx = $starNum - $starNumEd ;
floor($starNumEx / $paramStar[0]) * $paramStar[1] ); $crystalDto['total'] = array(
$crystalDto['pending'] = intval($totalNum); 'param1' => floatval($killsNumEx),
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE; 'param2' => floatval($starNumEx),
} );
break; $paramKill = explode(':',$param[0]);
case 2 : { $paramStar = explode(':',$param[1]);
// 游戏内消费总价值 $totalNum = max(0,floor($killsNumEx / $paramKill[0]) * $paramKill[1] +
$param = explode(':',$hashRateMeta['parameter']); floor($starNumEx / $paramStar[0]) * $paramStar[1] );
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0); $crystalDto['pending'] = intval($totalNum);
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1); $crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
$consumeCostEx = $consumeCost - $consumeCostEd ; }
$crystalDto['total'] = array( break;
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE), case 2 : {
); // 游戏内消费总价值
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]); $param = explode(':',$hashRateMeta['parameter']);
$crystalDto['pending'] = intval($totalNum); $consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE; $consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
} $consumeCostEx = $consumeCost - $consumeCostEd ;
break; $crystalDto['total'] = array(
case 3 : { 'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
// Market交易总价值 );
$param = explode(':',$hashRateMeta['parameter']); $totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]);
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0); $crystalDto['pending'] = intval($totalNum);
$consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1); $crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
$consumeCostEx = $consumeCost - $consumeCostEd ; }
$crystalDto['total'] = array( break;
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE), case 3 : {
); // Market交易总价值
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]); $param = explode(':',$hashRateMeta['parameter']);
$crystalDto['pending'] = intval($totalNum); $consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE; $consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
} $consumeCostEx = $consumeCost - $consumeCostEd ;
break; $crystalDto['total'] = array(
case 4 : { 'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
// 质压总价值 );
$param = explode(':',$hashRateMeta['parameter']); $totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]);
// $rate = Parameter::getVal('cec_exchange_rate',10); $crystalDto['pending'] = intval($totalNum);
$cecVal = Staking::getStakingTotalValue(); $crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
$crystalDto['total'] = array( }
'param1' => floatval($cecVal ), break;
); case 4 : {
$recordDb = CrystalRecord::getNewestRecordOne($crystalMeta['id']); // 质压总价值
if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){ $param = explode(':',$hashRateMeta['parameter']);
$crystalDto['pending'] = 0; // $rate = Parameter::getVal('cec_exchange_rate',10);
}else{ $cecVal = Staking::getStakingTotalValue();
$totalNum = max(0,floor($cecVal / $param[0]) * $param[1]); $crystalDto['total'] = array(
$crystalDto['pending'] = intval($totalNum); 'param1' => floatval($cecVal ),
} );
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE; $recordDb = CrystalRecord::getNewestRecordOne($crystalMeta['id']);
} if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){
break; $crystalDto['pending'] = 0;
} }else{
} $totalNum = max(0,floor($cecVal / $param[0]) * $param[1]);
$crystalDto['pending'] = intval($totalNum);
}
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
}
}
public function getCrystalValue(){
$chaimNum = 0;
$playing = array();
$staking = array();
$trading = array();
$consuming = array();
$nft = array();
// $hashRateMt = \mt\HashRateTask::getListByType(\mt\HashRateTask::PLAYING);
// foreach ($hashRateMt as $meta){
// $finalVal = 0;
// $uplimit = $meta['upperlimit'] ;
// if ($meta['id'] == HashRateTask::RANK_TYPE){
// $seasonMeta = RankSeason::getCurrentSeason();
// if (!$seasonMeta){
// $seasonMeta = RankSeason::getLastSeason();
// }
// $hashRateDb = HashRateTask::findByTaskIdOrSeason($meta['id'],$seasonMeta['id']);
// $userDb = myself()->_safeGetOrmUserInfo();
// $rankMeta = Rank::getRankById($userDb['rank']);
// if ($rankMeta['rank_order2'] > $hashRateDb['record_total']){
// $finalVal = ($rankMeta['rank_order2'] - $hashRateDb['claim_total']) * $meta['reward'];
// }
// } else {
// $hashRateDb = HashRateTask::findByTaskId($meta['id']);
// $targetVal = 0;
// if ($hashRateDb){
// $total = $hashRateDb['record_total'] - $hashRateDb['claim_total'];
// if ($hashRateDb['task_id'] == HashRateTask::BATTLE_TIME_TYPE){
// $targetVal = max(0,floor($total / 1000 / $meta['target'])) * $meta['reward'];
// }else{
// $targetVal = max(0,floor($total / $meta['target'])) * $meta['reward'];
// }
// }
//
//
// $claim_day = HashRateTask::getDailyReward($meta['id']);
// $uplimit = $meta['upperlimit'] - $claim_day;
// $finalVal = min($targetVal , $uplimit);
// }
// $chaimNum += $finalVal;
// array_push($detail,array(
// 'task_id' => $meta['id'],
// 'uplimit' => $uplimit,
// 'chaim_num' => $finalVal
// ));
// }
$hashRateTask = \mt\HashRateTask::getMetaList();
foreach ($hashRateTask as $metaTask){
$finalVal = 0;
$uplimit = $metaTask['upperlimit'] ;
switch ($metaTask['type']){
case \mt\HashRateTask::PLAYING :{
if ($metaTask['id'] == HashRateTask::RANK_TYPE){
$seasonMeta = RankSeason::getCurrentSeason();
if (!$seasonMeta){
$seasonMeta = RankSeason::getLastSeason();
}
$hashRateDb = HashRateTask::findByTaskIdOrSeason($metaTask['id'],$seasonMeta['id']);
$userDb = myself()->_safeGetOrmUserInfo();
$rankMeta = Rank::getRankById($userDb['rank']);
if ($rankMeta['rank_order2'] > $hashRateDb['record_total']){
$finalVal = ($rankMeta['rank_order2'] - $hashRateDb['claim_total']) * $metaTask['reward'];
}
} else {
$hashRateDb = HashRateTask::findByTaskId($metaTask['id']);
$targetVal = 0;
if ($hashRateDb){
$total = $hashRateDb['record_total'] - $hashRateDb['claim_total'];
if ($hashRateDb['task_id'] == HashRateTask::BATTLE_TIME_TYPE){
$targetVal = max(0,floor($total / 1000 / $metaTask['target'])) * $metaTask['reward'];
}else{
$targetVal = max(0,floor($total / $metaTask['target'])) * $metaTask['reward'];
}
}
$claim_day = HashRateTask::getDailyReward($metaTask['id']);
$uplimit = $metaTask['upperlimit'] - $claim_day;
$finalVal = min($targetVal , $uplimit);
}
$chaimNum += $finalVal;
array_push($playing,array(
'task_id' => $metaTask['id'],
'uplimit' => $uplimit,
'chaim_num' => $finalVal
));
}
break;
case \mt\HashRateTask::STAKING :{
//质押价值
$stakingVal = Staking::getStakingTotalValue();
$targetVal = max(0,floor($stakingVal / $metaTask['target']) * $metaTask['reward']);
$claim_day = HashRateTask::getDailyReward($metaTask['id']);
if ($claim_day){
$finalVal = 0;
}else{
$finalVal = $targetVal;
}
$chaimNum += $finalVal;
array_push($staking,array(
'task_id' => $metaTask['id'],
'uplimit' => $uplimit,
'chaim_num' => $finalVal
));
}
break;
// case \mt\HashRateTask::TRADING : {
// $consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
// $consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
// $total = $consumeCost - $consumeCostEd ;
// $finalVal = max(0,floor($total / self::EXCHANGE_RATE / $metaTask['target']) * $metaTask['reward']);
// $chaimNum += $finalVal;
// array_push($trading,array(
// 'task_id' => $metaTask['id'],
// 'uplimit' => $uplimit,
// 'chaim_num' => $finalVal
// ));
// }
// break;
case \mt\HashRateTask::CONSUMING : {
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
$total = $consumeCost - $consumeCostEd;
$finalVal = max(0,floor($total / self::EXCHANGE_RATE / $metaTask['target']) * $metaTask['reward']);
$chaimNum += $finalVal;
array_push($consuming,array(
'task_id' => $metaTask['id'],
'uplimit' => $uplimit,
'chaim_num' => $finalVal
));
}
}
}
return array(
'totalNum' => $chaimNum,
'playing'=>$playing,
'staking'=>$staking,
'consuming'=>$consuming,
'nft'=>$nft,
);
}
} }

File diff suppressed because it is too large Load Diff