From 3826f93534e8b1d711775e63625b79986ff728a6 Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Tue, 29 Aug 2023 17:27:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=97=E5=8A=9B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComputingPowerController.class.php | 52 ++++++++++++------ webapp/models/CrystalRecord.php | 9 ++++ webapp/services/HashRateService.php | 53 +++++++++++++------ 3 files changed, 82 insertions(+), 32 deletions(-) diff --git a/webapp/controller/ComputingPowerController.class.php b/webapp/controller/ComputingPowerController.class.php index d0240ffe..29db0b7b 100644 --- a/webapp/controller/ComputingPowerController.class.php +++ b/webapp/controller/ComputingPowerController.class.php @@ -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; } diff --git a/webapp/models/CrystalRecord.php b/webapp/models/CrystalRecord.php index 5764d1db..04ffe6e0 100644 --- a/webapp/models/CrystalRecord.php +++ b/webapp/models/CrystalRecord.php @@ -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(); + } + } \ No newline at end of file diff --git a/webapp/services/HashRateService.php b/webapp/services/HashRateService.php index 8ba7eebf..f6c7d38b 100644 --- a/webapp/services/HashRateService.php +++ b/webapp/services/HashRateService.php @@ -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; }