_rspErr(1, 'net_id error'); return; } if ($num < 1) { myself()->_rspErr(1, 'num error'); return; } $decimals = BlockChainService::getCurrencyDecimals(BlockChainService::CURRENCY_USDT); if ($decimals === false) { myself()->_rspErr(1, 'deciamls error'); return; } $ids = array(); $period = 1; $data = $this->load($period); { $rows = myself()->_getMarketMysql()->execQuery ( 'SELECT * FROM t_nft WHERE token_type=:token_type AND creator_address = owner_address AND token_id >= :begin_token_id AND token_id <= :end_token_id;', array( ':token_type' => Nft::PLANET_TYPE, ':begin_token_id' => 0, ':end_token_id' => 0 ) ); $nftList = array(); foreach ($rows as $row) { if (!array_key_exists($row['token_id'], $data)) { array_push($nftList, $row['token_id']); } } shuffle($nftList); if (count($nftList) < $num) { myself()->_rspErr(2, 'num error'); return; } for ($i = 0; $i < $num; ++$i) { array_push($ids, $nftList[$i]); $data[$nftList] = myself()->_getNowTime(); } } $price = BlockChainService::formatCurrencyEx(1 * count($ids), $decimals); $rspObj = BlockChainService::beNftMallTransBuyPlanet( Transaction::BUY_OUTAPP_PLANET_ACTION_TYPE, $address, $ids, BlockChainService::CURRENCY_USDT, $price ); $this->save($period, $data); $this->_rspData(array( 'trans_id' => $rspObj['trans_id'], 'params' => $rspObj['params'], )); } private function load($period) { $rawData = myself()->_getRedis('')->get(PLANET_BUY_KEY . $period); if (empty($rawData)) { return array(); } return json_decode($rawData, true); } private function save($period, $data) { myself()->_getRedis('')->get(PLANET_BUY_KEY . $period, json_encode($data)); } }