game2006api/webapp/controller/MallController.class.php
aozhiwei de58d063ed 1
2023-08-07 13:03:54 +08:00

175 lines
4.8 KiB
PHP

<?php
require_once('mt/Item.php');
require_once('mt/Parameter.php');
require_once('models/BcOrder.php');
require_once('models/Mall.php');
require_once('services/BlockChainService.php');
require_once('services/LogService.php');
use phpcommon\SqlHelper;
use models\BcOrder;
use models\Mall;
use services\LogService;
use services\BlockChainService;
class MallController extends BaseAuthedController {
public function productList()
{
$page = getReqVal('page', 1);
$queryData = array();
$out = array(
'pagination' => array(),
'rows' => array()
);
SqlHelper::rawQueryPage(
myself()->_getMySql(''),
'SELECT * FROM t_mall WHERE status=:status',
array(
':status' => Mall::PENDING_STATE
),
array(
'page' => $page,
'perPage' => 10,
'filter' => array(
'data' => $queryData,
'fields' => array(
)
),
//'orderBy' => $orderBy,
'handle' => function ($row) {
array_push($out['rows'],
array(
'goods_uuid' => $row['goods_uuid'],
'seller' => $row['seller'],
'item_id' => $row['item_id'],
'item_num' => $row['item_num'],
'currency' => $row['currency'],
'price' => $row['price'],
));
}
),
$out['pagination']
);
myself()->_rspData($out);
}
public function sell()
{
$address = $this->_getAddress();
if (!$address) {
$this->_rspErr(1, 'address not found');
return;
}
$itemId = getReqVal('item_id', '');
$amount = getReqVal('amount', '');
$currency = getReqVal('currency', '');
$price = getReqVal('price', '');
if ($itemId != V_ITEM_GOLD) {
$this->_rspErr(1, 'only support gold');
return;
}
if (empty($price)) {
$this->_rspErr(1, 'price not found');
return;
}
if ($price <= 0) {
$this->_rspErr(1, 'price must > 0');
return;
}
if (empty($amount)) {
$this->_rspErr(1, 'amount not found');
return;
}
if (!is_numeric($amount)) {
$this->_rspErr(1, 'amount must be number');
return;
}
if ($amount <= 0) {
$this->_rspErr(1, 'amount must > 0');
return;
}
if (!in_array(
$currency,
array(
'CEG',
'USDC',
'USDT'
)
)) {
$this->_rspErr(1, 'paramater error currency');
return;
}
$costItems = array(
array(
'item_id' => $itemId,
'item_num' => $amount
)
);
$lackItem = null;
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_rspErr(2, $this->_getLackItemErrMsg($lackItem));
return;
}
$this->_decItems($costItems);
if ($itemId == V_ITEM_GOLD) {
//埋点
$event = [
'name' => LogService::MARKET_SELL_GOLD,
'val' => $amount
];
LogService::consumeGold($event);
}
$orderId = OrderId::gen();
Mall::Add(
$orderId,
$orderId,
$itemId,
$amount,
$currency,
$price
);
myself()->_rspOk();
}
public function cancel()
{
$goodsUuid = getReqVal('goods_uuid', '');
$goodsDb = Mall::findByGoodsUuid($goodsUuid);
if (!$goodsDb) {
myself()->_resErr(1, 'goods not found');
return;
}
if ($goodDb['seller'] != myself()->_getAccountId()) {
myself()->_resErr(1, 'goods not found');
return;
}
Mall::cancel($goodsDb['goods_uuid']);
myself()->_rspOk();
}
public function modifyPrice()
{
$goodsUuid = getReqVal('goods_uuid', '');
$price = getReqVal('price', '');
$goodsDb = Mall::findByGoodsUuid($goodsUuid);
if (!$goodsDb) {
myself()->_resErr(1, 'goods not found');
return;
}
if ($goodDb['seller'] != myself()->_getAccountId()) {
myself()->_resErr(1, 'goods not found');
return;
}
Mall::modifyPrice($goodsDb['goods_uuid'], $price);
$this->_rspOk();
}
}