This commit is contained in:
songliang 2023-07-14 16:36:27 +08:00
parent 6b4c8147cf
commit d68d106699

View File

@ -473,14 +473,12 @@ class MarketController extends BaseAuthedController
$this->_rspErr(1, 'address not found'); $this->_rspErr(1, 'address not found');
return; return;
} }
$account = $address;
$token = getReqVal('token', ''); // $nft_token = getReqVal('nft_token', '');
$nft_token = getReqVal('nft_token', '');
$item_id = getReqVal('item_id', ''); $item_id = getReqVal('item_id', '');
if (empty($item_id)) { $itemMeta = mt\Item::get($item_id);
if (!$itemMeta) {
$this->_rspErr(1, 'item_id not found'); $this->_rspErr(1, 'item_id not found');
return; return;
} }
@ -490,11 +488,20 @@ class MarketController extends BaseAuthedController
$this->_rspErr(1, 's_price not found'); $this->_rspErr(1, 's_price not found');
return; return;
} }
if ($s_price<=0) {
$this->_rspErr(1, 's_price must > 0');
return;
}
$amount = getReqVal('amount', 1); $amount = getReqVal('amount', 1);
if (empty($amount)) { if (empty($amount)) {
$this->_rspErr(1, 'amount not found'); $this->_rspErr(1, 'amount not found');
return; return;
} }
if ($amount<=0) {
$this->_rspErr(1, 'amount must > 0');
return;
}
$conn = myself()->_getSelfMysql(); $conn = myself()->_getSelfMysql();
@ -517,7 +524,6 @@ class MarketController extends BaseAuthedController
} }
$this->_decItems($costItems); $this->_decItems($costItems);
$itemMeta = mt\Item::get($item_id);
$c_name = $itemMeta['name']; $c_name = $itemMeta['name'];
$c_job = 0; $c_job = 0;
$c_lv = 0; $c_lv = 0;
@ -530,9 +536,9 @@ class MarketController extends BaseAuthedController
$conn, $conn,
't_market_store', 't_market_store',
array( array(
'token_id' => $nft_token, 'token_id' => '',
'item_id' => $item_id, 'item_id' => $item_id,
'owner_address' => $account, 'owner_address' => $address,
'token_type' => 0, 'token_type' => 0,
'amount' => $amount, 'amount' => $amount,
'createtime' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(),
@ -584,12 +590,11 @@ class MarketController extends BaseAuthedController
public function sellCancel() public function sellCancel()
{ {
$account = strtolower(getReqVal('account', ''));
$idx = getReqVal('idx', ''); $idx = getReqVal('idx', '');
$address = $this->_getAddress(); $address = $this->_getAddress();
if ($address != $account) { if (!$address) {
$this->_rspErr(1, 'not your goods, idx:' . $idx); $this->_rspErr(1, 'address not found');
return; return;
} }
@ -599,16 +604,11 @@ class MarketController extends BaseAuthedController
return; return;
} }
if ($goods['owner_address'] != $account) { if ($goods['owner_address'] != $address) {
$this->_rspErr(1, 'not your goods, idx:' . $idx); $this->_rspErr(1, 'not your goods, idx:' . $idx);
return; return;
} }
if (!$this->addItems($address, $goods['item_id'], $goods['amount'])) {
$this->_rspErr(1, "cancel failed, add item failed, idx:" . $idx);
return;
}
$conn = $this->_getSelfMysql(); $conn = $this->_getSelfMysql();
$r = SqlHelper::update( $r = SqlHelper::update(
$conn, $conn,
@ -621,18 +621,36 @@ class MarketController extends BaseAuthedController
'modifytime' => $this->_getNowTime(), 'modifytime' => $this->_getNowTime(),
) )
); );
$this->_rspOk(); if ($r) {
$items = array(
array(
'item_id' => $goods['item_id'],
'item_num' => $goods['amount'],
)
);
$awardService = new services\AwardService();
$propertyChgService = new services\PropertyChgService();
$this->_addItems($items, $awardService, $propertyChgService);
$this->_rspData(
array(
'idx' => $idx,
'property_chg' => $propertyChgService->toDto(),
)
);
} else {
$this->_rspErr(1, 'cancel failed');
}
} }
public function sellUpdatePrice() public function sellUpdatePrice()
{ {
$account = strtolower(getReqVal('account', ''));
$idx = getReqVal('idx', ''); $idx = getReqVal('idx', '');
$s_price = getReqVal('s_price', ''); $s_price = getReqVal('s_price', '');
$address = $this->_getAddress(); $address = $this->_getAddress();
if ($address != $account) { if (!$address) {
$this->_rspErr(1, 'not your goods, idx:' . $idx); $this->_rspErr(1, 'address not found');
return; return;
} }
@ -642,7 +660,7 @@ class MarketController extends BaseAuthedController
return; return;
} }
if ($goods['owner_address'] != $account) { if ($goods['owner_address'] != $address) {
$this->_rspErr(1, 'not your goods, idx:' . $idx); $this->_rspErr(1, 'not your goods, idx:' . $idx);
return; return;
} }
@ -659,6 +677,11 @@ class MarketController extends BaseAuthedController
'modifytime' => $this->_getNowTime(), 'modifytime' => $this->_getNowTime(),
) )
); );
if (!$r) {
$this->_rspErr(1, 'update price failed');
return;
}
$this->_rspOk(); $this->_rspOk();
} }
@ -677,7 +700,7 @@ class MarketController extends BaseAuthedController
$this->_rspErr(1, 'goods not found, idx:' . $idx); $this->_rspErr(1, 'goods not found, idx:' . $idx);
return; return;
} }
$response = services\BlockChainService::gameItemMarketBuy( $response = services\BlockChainService::gameItemMarketBuy(
Transaction::BUY_GOODS_FROM_MARKET_ACTION_TYPE, Transaction::BUY_GOODS_FROM_MARKET_ACTION_TYPE,
$goods['owner_address'], $goods['owner_address'],
@ -710,72 +733,13 @@ class MarketController extends BaseAuthedController
'block_chain' => $response, 'block_chain' => $response,
)); ));
} }
private function Web3PriceLowFormat($price) { private function Web3PriceLowFormat($price)
{
$bn2 = phpcommon\bnInit('1000000000000000000'); $bn2 = phpcommon\bnInit('1000000000000000000');
$ret_price = phpcommon\bnDiv($price, $bn2); $ret_price = phpcommon\bnDiv($price, $bn2);
return phpcommon\bnToStr($ret_price); return phpcommon\bnToStr($ret_price);
} }
private function sellMyNft()
{
$account = strtolower(getReqVal('account', ''));
$token = getReqVal('token', '');
$nft_token = getReqVal('nft_token', '');
$s_price = getReqVal('s_price', '');
$amount = getReqVal('amount', 1);
$payment_token_address = getReqVal('payment_token_address', '');
$nonce = getReqVal('nonce', '');
$signature = getReqVal('signature', '');
$net_id = getReqVal('net_id', '');
$conn = myself()->_getSelfMysql();
$nftDb = Nft::findNftByOwner($account, $nft_token);
$nftDetail = Nft::toDto($nftDb);
$detail = $this->getNftGameData($nftDb);
$r = SqlHelper::insert(
$conn,
't_market_store',
array(
'token_id' => $nft_token,
'owner_address' => $nftDetail['owner_address'],
'token_type' => $nftDetail['type'],
'amount' => $amount,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
's_price' => $s_price,
'c_name' => $nftDetail['info']['name'],
'c_job' => isset($nftDetail['info']['job']) ? $nftDetail['info']['job']
: (isset($detail['chip_type']) ? $detail['chip_type']
: (isset($detail['type']) ? $detail['type']
: 0)),
'c_lv' => @$detail['gun_lv'] | @$detail['hero_lv'] | @$detail['chip_grade'],
'c_quality' => isset($nftDetail['info']['quality']) ? $nftDetail['info']['quality'] : 0,
'c_durability' => isset($nftDetail['info']['durability']) ? $nftDetail['info']['durability'] : (isset($detail['hero_tili']) ? $detail['hero_tili'] : 0),
'c_type' => isset($detail['type']) ? $detail['type'] : 0,
'c_id' => $nftDetail['item_id'],
)
);
$this->_rspOk();
}
private function buyNft()
{
$account = strtolower(getReqVal('account', ''));
$token = getReqVal('token', '');
$nft_token = getReqVal('nft_token', '');
$payment_token_address = getReqVal('payment_token_address', '');
$nonce = getReqVal('nonce', '');
$signature = getReqVal('signature', '');
$net_id = getReqVal('net_id', '');
$conn = myself()->_getSelfMysql();
$conn->execScript('DELETE FROM t_market_store WHERE ' . 'token_id=\'' . $nft_token . '\'');
$this->_rspOk();
}
public function getSupportedCurrencyTypes() public function getSupportedCurrencyTypes()
{ {
$types = array(); $types = array();
@ -795,7 +759,7 @@ class MarketController extends BaseAuthedController
)); ));
} }
public function getTransactionRecord() private function getTransactionRecord()
{ {
$account = strtolower(getReqVal('account', '')); $account = strtolower(getReqVal('account', ''));
$type = getReqVal('type', 0); $type = getReqVal('type', 0);
@ -937,172 +901,6 @@ class MarketController extends BaseAuthedController
return $rows; return $rows;
} }
private function addItems($address, $item_id, $amount)
{
$r = $this->addItem($address, $item_id, $amount);
if (!$r) {
return false;
}
return true;
}
private function decItems($address, $item_id, $amount)
{
$userInfo = $this->getUserInfo($address, array('gold'));
$count = $this->getItemCount($item_id, $userInfo);
if ($count < $amount) {
return false;
}
$r = $this->decItem($address, $item_id, $amount);
if (!$r) {
return false;
}
return true;
}
private function addItem($address, $item_id, $amount)
{
switch ($item_id) {
case V_ITEM_GOLD: {
$r = $this->addGold($address, $amount);
if (!$r) {
return false;
}
}
break;
}
return true;
}
private function decItem($address, $item_id, $amount)
{
switch ($item_id) {
case V_ITEM_GOLD: {
$r = $this->decGold($address, $amount);
if (!$r) {
return false;
}
}
break;
}
return true;
}
private function addGold($address, $amount)
{
$r = $this->updateUserInfo($address, array(
'gold' => function () use ($amount) {
return "gold + ${amount}";
}
));
if (!$r) {
return false;
}
return true;
}
private function decGold($address, $amount)
{
$userInfo = $this->getUserInfo($address, array('gold'));
$count = $this->getItemCount(V_ITEM_GOLD, $userInfo);
if ($count < $amount) {
return false;
}
$r = $this->updateUserInfo($address, array(
'gold' => function () use ($amount) {
return "GREATEST(0, gold - ${amount})";
},
'consume_gold' => function () use ($amount) {
return "consume_gold + ${amount}";
}
));
if (!$r) {
return false;
}
return true;
}
private function updateUserInfo($address, $fieldKv)
{
$r = SqlHelper::update(
myself()->_getSelfMysql(),
't_user',
array(
'address' => $address,
),
$fieldKv
);
if (!$r) {
return false;
}
return true;
}
private function getCostItem($address, $item_id)
{
$userInfo = $this->getUserInfo($address, array('gold'));
$count = $this->getItemCount($item_id, $userInfo);
return array(
'item_id' => $item_id,
'item_amount' => $count
);
}
private function getItemCount($item_id, $userInfo)
{
switch ($item_id) {
case V_ITEM_GOLD: {
return $userInfo['gold'];
}
}
return "0";
}
private function getUserInfo($address, $fields)
{
// $account_id = $this->getAccountId($address);
// if (!$account_id) {
// return null;
// }
$conn = myself()->_getMysql($address);
$row = SqlHelper::selectOne(
$conn,
't_user',
$fields,
array(
'address' => $address
)
);
if (empty($row)) {
return null;
}
return $row;
}
private function getAccountId($address)
{
$row = SqlHelper::selectOne(
myself()->_getMysql($address),
't_user',
array('account_id'),
array(
'address' => $address
)
);
return $row['account_id'];
}
private function normalizeWeb3Price($price) private function normalizeWeb3Price($price)
{ {
$bn1 = phpcommon\bnInit($price * pow(10, 8)); $bn1 = phpcommon\bnInit($price * pow(10, 8));
@ -1152,5 +950,4 @@ class MarketController extends BaseAuthedController
return true; return true;
} }
} }