game2006api/webapp/services/HashRateService.php
hujiabin 5113f30ec4 1
2023-11-06 17:07:25 +08:00

255 lines
12 KiB
PHP

<?php
namespace services;
require_once('mt/HashRate.php');
require_once('mt/Parameter.php');
require_once('mt/HashRateTask.php');
require_once('mt/Rank.php');
require_once('mt/RankSeason.php');
require_once('models/Bag.php');
require_once('models/CrystalRecord.php');
require_once('models/Staking.php');
require_once('models/HashRateTask.php');
use models\Bag;
use models\CrystalRecord;
use models\Staking;
use models\HashRateTask;
use mt\HashRate;
use mt\Parameter;
use mt\Rank;
use mt\RankSeason;
class HashRateService extends BaseService
{
const NONE_STATE = 0;
const RECEIVED_STATE = 1;
const EXCHANGE_RATE = 10;
public function getCrystalDto($crystalMeta,&$crystalDto){
$crystalDto = array(
'item_id' => $crystalMeta['id'],
'pending' => 0,
'total' => array(),
'claimed' => 0,
'state' => self::NONE_STATE,
);
$hashRateMeta = HashRate::findHash($crystalMeta['id']);
$ownedNum = CrystalRecord::getCrystalNum($crystalMeta['id']);
$crystalDto['claimed'] = intval($ownedNum);
switch ($crystalMeta['sub_type']){
case 1 : {
$param = explode('|',$hashRateMeta['parameter']);
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
$killsNumEx = $killsNum - $killsNumEd;
$starNumEx = $starNum - $starNumEd ;
$crystalDto['total'] = array(
'param1' => floatval($killsNumEx),
'param2' => floatval($starNumEx),
);
$paramKill = explode(':',$param[0]);
$paramStar = explode(':',$param[1]);
$totalNum = max(0,floor($killsNumEx / $paramKill[0]) * $paramKill[1] +
floor($starNumEx / $paramStar[0]) * $paramStar[1] );
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
case 2 : {
// 游戏内消费总价值
$param = explode(':',$hashRateMeta['parameter']);
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd ;
$crystalDto['total'] = array(
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
);
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]);
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
case 3 : {
// Market交易总价值
$param = explode(':',$hashRateMeta['parameter']);
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
$consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd ;
$crystalDto['total'] = array(
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
);
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $param[0]) * $param[1]);
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
case 4 : {
// 质压总价值
$param = explode(':',$hashRateMeta['parameter']);
// $rate = Parameter::getVal('cec_exchange_rate',10);
$cecVal = Staking::getStakingTotalValue();
$crystalDto['total'] = array(
'param1' => floatval($cecVal ),
);
$recordDb = CrystalRecord::getNewestRecordOne($crystalMeta['id']);
if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){
$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 ($hashRateDb && $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,
);
}
}