175 lines
4.8 KiB
PHP
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();
|
|
}
|
|
|
|
}
|