算力功能

This commit is contained in:
hujiabin 2023-08-29 17:27:35 +08:00
parent 85c7e3c166
commit 3826f93534
3 changed files with 82 additions and 32 deletions

View File

@ -2,6 +2,7 @@
require_once('mt/HashRate.php');
require_once('mt/HashRateCommon.php');
require_once('mt/Item.php');
require_once('mt/Parameter.php');
require_once('services/HashRateService.php');
require_once('services/AwardService.php');
require_once('services/PropertyChgService.php');
@ -9,11 +10,14 @@ require_once('services/PropertyChgService.php');
require_once('models/ComputingPower.php');
require_once('models/CrystalRecord.php');
require_once('models/RewardsCec.php');
require_once('models/Staking.php');
use models\ComputingPower;
use models\CrystalRecord;
use models\RewardsCec;
use models\Staking;
use mt\HashRate;
use mt\Parameter;
use phpcommon\SqlHelper;
class ComputingPowerController extends BaseAuthedController
{
@ -105,7 +109,6 @@ class ComputingPowerController extends BaseAuthedController
public function exchangeCrystal(){
$itemId = getReqVal('item_id', 0);
// $itemNum = getReqVal('item_num', 0);
$itemMeta = \mt\Item::get($itemId);
if (!$itemMeta || $itemMeta['type'] != \mt\Item::CRYSTAL_TYPE ){
$this->_rspErr(1, 'param error');
@ -121,22 +124,42 @@ class ComputingPowerController extends BaseAuthedController
switch ($itemId){
case ComputingPower::CRYSTAL1 : {
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
$killsNumEx = $killsNum - $killsNumEd;
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
$crystalNum = max(0,floor($killsNum/$param[0]) +
floor($starNum/$param[1]) );
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
$starNumEx = $starNum - $starNumEd ;
$crystalNum = max(0,floor($killsNumEx / $param[0]) +
floor($starNumEx / $param[1]) );
}
break;
case ComputingPower::CRYSTAL2 : {
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$crystalNum = max(0,floor($consumeCost/ \services\HashRateService::EXCHANGE_RATE/$param[0]));
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd ;
$crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $param[0]));
}
break;
case ComputingPower::CRYSTAL3 : {
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
$crystalNum = max(0,floor($consumeCost/ \services\HashRateService::EXCHANGE_RATE/$param[0]));
$consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd;
$crystalNum = max(0,floor($consumeCostEx / \services\HashRateService::EXCHANGE_RATE / $param[0]));
}
break;
case ComputingPower::CRYSTAL4 : {
$recordDb = CrystalRecord::getNewestRecordOne($itemId);
if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){
$this->_rspErr(1, 'There are no available crystals');
return ;
}
$rate = Parameter::getVal('cec_exchange_rate',10);
$cecVal = Staking::getStakingTotalValue();
$crystalNum = max(0,floor($cecVal / $rate / $param[0]));
}
}
if ($crystalNum < 1){
$this->_rspErr(1, 'There are no available crystals');
return ;
@ -156,24 +179,23 @@ class ComputingPowerController extends BaseAuthedController
CrystalRecord::addCrystalRecord($itemId,$crystalNum);
switch ($itemId) {
case ComputingPower::CRYSTAL1 : {
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
$killsNumEd = myself()->_getV(TN_TOTAL_KILLS_NUM,-1);
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
$newKillsNum = floor($killsNum/$param[0]) * $param[0];
myself()->_decV(TN_TOTAL_KILLS_NUM,0,$newKillsNum);
$newStarNum = floor($starNum/$param[1]) * $param[1];
myself()->_decV(TN_TOTAL_STAR_NUM,0,$newStarNum);
$starNumEd = myself()->_getV(TN_TOTAL_STAR_NUM,-1);
$newKillsNum = floor(($killsNum-$killsNumEd)/$param[0]) * $param[0];
myself()->_incV(TN_TOTAL_KILLS_NUM,-1,$newKillsNum);
$newStarNum = floor(($starNum-$starNumEd)/$param[1]) * $param[1];
myself()->_incV(TN_TOTAL_STAR_NUM,-1,$newStarNum);
}
break;
case ComputingPower::CRYSTAL2 : {
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$newConsumeCost = floor($consumeCost/$param[0]) * $param[0];
myself()->_decV(TN_TOTAL_DIAMOND_CONSUME,0,$newConsumeCost);
myself()->_incV(TN_TOTAL_DIAMOND_CONSUME,-1,$crystalNum * $param[0] * \services\HashRateService::EXCHANGE_RATE);
}
break;
case ComputingPower::CRYSTAL3 : {
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
$newConsumeCost = floor($consumeCost/$param[0]) * $param[0];
myself()->_decV(TN_TOTAL_CEG_CONSUME,0,$newConsumeCost);
myself()->_incV(TN_TOTAL_CEG_CONSUME,-1,$crystalNum * $param[0] * \services\HashRateService::EXCHANGE_RATE);
}
break;
}

View File

@ -54,4 +54,13 @@ class CrystalRecord extends BaseModel
);
}
public static function getNewestRecordOne($itemId){
$sql = "select * from t_crystal_exchange_record where `account_id` = :account_id and item_id = :item_id order by createtime desc limit 1";
$rows = myself()->_getMysql('')->execQuery($sql,array(
'account_id' =>myself()->_getAccountId(),
'item_id' =>$itemId,
));
return count($rows) > 0 ? $rows[0] : array();
}
}

View File

@ -3,12 +3,16 @@
namespace services;
require_once('mt/HashRate.php');
require_once('mt/Parameter.php');
require_once('models/Bag.php');
require_once('models/CrystalRecord.php');
require_once('models/Staking.php');
use models\Bag;
use models\CrystalRecord;
use models\Staking;
use mt\HashRate;
use mt\Parameter;
class HashRateService extends BaseService
{
@ -28,19 +32,19 @@ class HashRateService extends BaseService
$crystalDto['claimed'] = intval($ownedNum);
switch ($crystalMeta['sub_type']){
case 1 : {
$killsNum = myself()->_getV(TN_TOTAL_KILLS_NUM,0);
$starNum = myself()->_getV(TN_TOTAL_STAR_NUM,0);
// $rankNum = myself()->_getV(TN_TOTAL_RANK_NUM,0);
$crystalDto['total'] = array(
'param1' => intval($killsNum),
'param2' => intval($starNum),
// 'param3' => intval($rankNum),
);
$param = explode('|',$hashRateMeta['parameter']);
$totalNum = max(0,floor($killsNum/$param[0]) +
floor($starNum/$param[1]) );
// $crystalDto['pending'] = intval(max(0,$totalNum - $ownedNum));
$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),
);
$totalNum = max(0,floor($killsNumEx / $param[0]) +
floor($starNumEx / $param[1]) );
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
@ -48,10 +52,12 @@ class HashRateService extends BaseService
case 2 : {
// 游戏内消费总价值
$consumeCost = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,0);
$consumeCostEd = myself()->_getV(TN_TOTAL_DIAMOND_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd ;
$crystalDto['total'] = array(
'param1' => intval($consumeCost/self::EXCHANGE_RATE),
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
);
$totalNum = max(0,floor($consumeCost/self::EXCHANGE_RATE/$hashRateMeta['parameter']));
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $hashRateMeta['parameter']));
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
@ -59,19 +65,32 @@ class HashRateService extends BaseService
case 3 : {
// Market交易总价值
$consumeCost = myself()->_getV(TN_TOTAL_CEG_CONSUME,0);
$consumeCostEd = myself()->_getV(TN_TOTAL_CEG_CONSUME,-1);
$consumeCostEx = $consumeCost - $consumeCostEd ;
$crystalDto['total'] = array(
'param1' => intval($consumeCost/self::EXCHANGE_RATE),
'param1' => floatval($consumeCostEx / self::EXCHANGE_RATE),
);
$totalNum = max(0,floor($consumeCost/self::EXCHANGE_RATE/$hashRateMeta['parameter']));
$totalNum = max(0,floor($consumeCostEx / self::EXCHANGE_RATE / $hashRateMeta['parameter']));
$crystalDto['pending'] = intval($totalNum);
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
case 4 : {
// 质压总价值
$rate = Parameter::getVal('cec_exchange_rate',10);
$cecVal = Staking::getStakingTotalValue();
$crystalDto['total'] = array(
'param1' => 0,
'param1' => floatval($cecVal / $rate),
);
$recordDb = CrystalRecord::getNewestRecordOne($crystalMeta['id']);
if ($recordDb && myself()->_getNowDaySeconds() == myself()->_getDaySeconds($recordDb['createtime'])){
$crystalDto['pending'] = 0;
}else{
$totalNum = max(0,floor($cecVal / $rate / $hashRateMeta['parameter']));
$crystalDto['pending'] = intval($totalNum);
}
$crystalDto['state'] = $crystalDto['pending'] > 0 ? self::RECEIVED_STATE : self::NONE_STATE;
}
break;
}