diff --git a/webapp/controller/MallController.class.php b/webapp/controller/MallController.class.php index 89b1bfc8..821c03c1 100644 --- a/webapp/controller/MallController.class.php +++ b/webapp/controller/MallController.class.php @@ -62,7 +62,80 @@ class MallController extends BaseAuthedController { 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() diff --git a/webapp/models/Mall.php b/webapp/models/Mall.php index 0287dacc..fcc9e7a0 100644 --- a/webapp/models/Mall.php +++ b/webapp/models/Mall.php @@ -32,19 +32,18 @@ class Mall extends BaseModel { return $row; } - public static function add($orderId, $tokenId, $seller, $nftToken, - $amount, $currency, $pirce) { + public static function add($orderId, $goodsUuid, $itemId, $itemNum, + $currency, $pirce) { self::internalUpdate( $orderId, array( - 'token_id' => $tokenId, - 'seller' => $seller, - 'nft_token' => $nftToken, - 'amount' => $amount, + 'order_id' => $orderId, + 'goods_uuid' => $goodsUuid, + 'seller' => myself()->_getAccountId(), + 'item_id' => $itemId, + 'item_num' => $amount, 'currency' => $currency, 'price' => $price, - 'activated' => 1, - 'selltime' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ));