diff --git a/webapp/controller/HashRateShopController.class.php b/webapp/controller/HashRateShopController.class.php index bcc2a856..9a32f0da 100644 --- a/webapp/controller/HashRateShopController.class.php +++ b/webapp/controller/HashRateShopController.class.php @@ -1,7 +1,9 @@ _verifySwitch('hashrate.shop.buy'); + $goodsId = getReqVal('goods_id', 0); + $goodsNum = getReqVal('goods_num', 0); + if ($goodsNum < 1) { + myself()->_rspErr(1, "goods_num parameter error, goods_num: {$goodsNum}"); + return; + } + + $goodsMeta = mt\HashRateShop::find($goodsId); + if (!$goodsMeta) { + myself()->_rspErr(1, 'goods not found'); + return; + } + if ($goodsMeta['is_close']) { + myself()->_rspErr(1, 'no right to purchase'); + return; + } + if ($goodsNum > $goodsMeta['max_amount']) { + myself()->_rspErr(1, "goods_num parameter error, max_amount: {$goodsMeta['max_amount']}"); + return; + } + $itemMeta = mt\Item::get($goodsMeta['item_id']); + if (!$itemMeta) { + myself()->_rspErr(1, 'goods not found, goods_id: ' . $goodsMeta['goods_id']); + return; + } + $errCode = 0; + $errMsg = ''; + if (!ShopService::buyLimitCheck($goodsMeta, $errCode, $errMsg)) { + myself()->_rspErr($errCode, $errMsg); + return; + } + $propertyChgService = new services\PropertyChgService(); + $awardService = new services\AwardService(); + $tokenType = $goodsMeta['token_type']; + $price = $goodsMeta['price']; + if (!in_array( + $tokenType, + array( + mt\Shop::TOKEN_TYPE_GOLD, + mt\Shop::TOKEN_TYPE_DIAMOND + ) + )) { + myself()->_rspErr(1, "token_type is unsupport, {$tokenType}"); + return; + } + if ($price < 1) { + myself()->_rspErr(1, "config error"); + return; + } + $costItemId = myself()->getCostItemIdByTokenType($tokenType); + $costItems = array( + array( + 'item_id' => $costItemId, + 'item_num' => $goodsNum * $price + ) + ); + $lackItem = null; + if (!myself()->_hasEnoughItems($costItems, $lackItem)) { + myself()->_rspErr(2, myself()->_getLackItemErrMsg($lackItem)); + return; + } + ShopBuyRecord::add($goodsMeta['goods_id'], $goodsNum); + myself()->_decItems($costItems); + for ($i = 0; $i < $goodsNum; $i++) { + $this->internalAddItem($awardService, + $propertyChgService, + $itemMeta, + $goodsMeta['item_num'] + ); + } + $propertyChgService->addUserChg(); + $this->_rspData( + array( + 'award' => $awardService->toDto(), + 'property_chg' => $propertyChgService->toDto(), + ) + ); } }