From 774d73010e6cf873d8e16f908d9f251a2038b04f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 26 Jan 2022 13:32:45 +0800 Subject: [PATCH] 1 --- webapp/controller/MarketController.class.php | 176 +++++++++++++------ 1 file changed, 119 insertions(+), 57 deletions(-) diff --git a/webapp/controller/MarketController.class.php b/webapp/controller/MarketController.class.php index f6951bcb..173668e6 100644 --- a/webapp/controller/MarketController.class.php +++ b/webapp/controller/MarketController.class.php @@ -7,22 +7,23 @@ require_once('mt/WhiteList.php'); require_once('mt/Currency.php'); require_once('mt/Hero.php'); +require_once('models/BoxOrder.php'); +require_once('models/Nft.php'); + use phpcommon\SqlHelper; +use models\BoxOrder; +use models\Nft; class MarketController extends BaseController { - private function getJob() + private function isTestMode() { - $jobs = array( - '1', - '2', - '3', - ); - return $jobs[rand() % count($jobs)]; + return true; } public function searchBox() { + $account = getReqVal('account', ''); $page = getReqVal('page', 1); $type = getReqVal('type', 0); $sort = getReqVal('sort', ''); @@ -33,23 +34,24 @@ class MarketController extends BaseController { return; } + $perPage = 10000; $rows = array(); $pageInfo = array( 'total' => 0, 'count' => 0, - 'per_page' => 10000, + 'per_page' => $perPage, 'current_page' => $page, 'total_pages' => 0 ); $presaleInfo = array( 'batch_id' => $currBatchMeta['batch_id'], 'countdown' => max(0, $currBatchMeta['_start_time_utc'] - myself()->_getNowTime()), - 'sold_num' => 0, + 'sold_num' => min(BoxOrder::getSoldNum($currBatchMeta['batch_id']), $currBatchMeta['number_of_props']), 'total_num' => $currBatchMeta['number_of_props'], 'state' => 2, 'title' => '', 'hint' => str_replace("\n", '\n', $currBatchMeta['hint']), - 'buyed' => rand() % 2 < 1 ? 0 : 1 + 'buyed' => $this->isTestMode() ? 0 : BoxOrder::isBuyed($account, $currBatchMeta['batch_id']) ); $batchMetas = mt\MarketGoods::getBatchMetas($currBatchMeta['batch_id']); @@ -60,7 +62,7 @@ class MarketController extends BaseController { 'box_id' => $meta['item_id'], 'item_id' => $meta['item_id'], 'name' => emptyReplace($heroMeta['name'], 'Hill'), - 'job' => $this->getJob(), + 'job' => emptyReplace($heroMeta['herotype'], '1'), 'currency_list' => array( array( 'name' => 'BNB', @@ -90,36 +92,82 @@ class MarketController extends BaseController { public function buyBox() { + $type = getReqVal('type', ''); + $buyerAddress = getReqVal('buyer_address', ''); + $price = getReqVal('price', ''); + $paymentTokenAddress = getReqVal('payment_token_address', ''); + $nonce = getReqVal('nonce', ''); + $signature = getReqVal('signature', ''); + + if (empty($type) || + empty($buyerAddress) || + empty($price) || + empty($paymentTokenAddress) || + empty($signature) || + empty($nonce)) { + myself()->_rspErr(2, 'parameter error'); + return; + } + + $currBatchMeta = mt\MarketBatch::getCurrentBatch(); + if (!$currBatchMeta) { + myself()->_rspErr(500, 'server internal error'); + return; + } + + if (!$this->isTestMode() && BoxOrder::isBuyed($buyerAddress, $currBatchMeta['batch_id'])) { + myself()->_rspErr(1, 'account can only choose 1 hero to purchase'); + return; + } + + if ($this->isTestMode()) { + $orderId = myself()->_getNowTime(); + $tokenId = $orderId; + $itemId = $type; + SqlHelper::insert + (myself()->_getMarketMysql(), + 't_box_order', + array( + 'batch_id' => $currBatchMeta['batch_id'], + 'order_id' => $orderId, + 'item_id' => $itemId, + 'state' => 1, + 'buyer_address' => $buyerAddress, + 'token_id' => $tokenId, + 'price' => $price, + 'payment_token_address' => $paymentTokenAddress, + 'nonce' => $nonce, + 'signature' => $signature, + 'expired' => 0, + 'done' => 1, + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + SqlHelper::insert + (myself()->_getMarketMysql(), + 't_nft', + array( + 'token_id' => $tokenId, + 'item_id' => $itemId, + 'owner_id' => $buyerAddress, + 'owner_address' => $buyerAddress, + 'owner_name' => '', + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + } myself()->_rspOk(); } public function getNftList() { $account = getReqVal('account', ''); + $nftDbList = Nft::getNftList($account); $nftList = array(); - for ($i = 0; $i < 10; ++$i) { - $nft = array( - 'token_id' => $i + 1, - 'owner_address' => $account, - 'owner_name' => '', - 'item_id' => 30100 + $i * 100, - 'currency_list' => array(), - 'transaction_recrod' => array(), - 'info' => array( - 'name' => 'hero' . $i, - 'job' => $this->getJob(), - 'level' => 1, - 'quality' => 1, - 'hp' => 100, - 'speed' => 100, - 'atk' => 1, - 'def' => 100, - 'advanced_count' => 0, - 'lucky' => 0, - 'success_rate' => 0 - ), - 'mint_time' => myself()->_getNowTime() - ); + foreach ($nftDbList as $nftDb) { + $nft = $this->toNftDto($nftDb); array_push($nftList, $nft); } myself()->_rspData(array( @@ -130,32 +178,46 @@ class MarketController extends BaseController { public function getNftDetail() { $account = getReqVal('account', ''); - $i = 0; - $nft = array( - 'token_id' => $i + 1, - 'owner_address' => $account, - 'owner_name' => '', - 'item_id' => 30100 + $i * 100, - 'currency_list' => array(), - 'transaction_recrod' => array(), - 'info' => array( - 'name' => 'hero' . $i, - 'job' => $this->getJob(), - 'level' => 1, - 'quality' => 1, - 'hp' => 100, - 'speed' => 100, - 'atk' => 1, - 'def' => 100, - 'advanced_count' => 0, - 'lucky' => 0, - 'success_rate' => 0 - ), - 'mint_time' => myself()->_getNowTime() - ); + $tokenId = getReqVal('token_id', ''); + $nftDb = Nft::getNft($tokenId); + if (!$nftDb) { + myself()->_rspErr(1, 'nft not exists'); + return; + } + $nft = $this->toNftDto($nftDb); myself()->_rspData(array( 'info' => $nft )); } + private function toNftDto($nftDb) + { + $nft = array( + 'token_id' => $nftDb['token_id'], + 'owner_address' => $nftDb['owner_address'], + 'owner_name' => $nftDb['owner_name'], + 'item_id' => $nftDb['item_id'], + 'currency_list' => array(), + 'transaction_recrod' => array(), + 'info' => array( + ), + 'mint_time' => $nftDb['createtime'] + ); + $heroMeta = mt\Hero::get($nftDb['item_id']); + if ($heroMeta) { + $nft['info']['name'] = $heroMeta['name']; + $nft['info']['job'] = $heroMeta['herotype']; + $nft['info']['level'] = 1; + $nft['info']['quality'] = 1; + $nft['info']['hp'] = $heroMeta['hp']; + $nft['info']['speed'] = $heroMeta['move_speed']; + $nft['info']['atk'] = $heroMeta['damage']; + $nft['info']['def'] = $heroMeta['defence']; + $nft['info']['advanced_count'] = 0; + $nft['info']['lucky'] = 0; + $nft['info']['success_rate'] = 0; + } + return $nft; + } + }