public function actionIndex() { //todo redis? $user = Yii::$app->session->get('user'); if (empty($user)) { $this->goHome(); } $user = User::findOne($user->id); if ($user->account < Yii::$app->params['auctionDeposit']) { $order = Order::find()->where(['type' => Order::TYPE_AUCTION, 'user_id' => $user->id, 'status' => Order::STATUS_CREATED])->one(); if (empty($order)) { $order = new Order(); $order->user_id = $user->id; $order->serial_no = Util::composeOrderNumber(Order::TYPE_AUCTION); $order->money = Yii::$app->params['auctionDeposit']; $auction = Auction::find()->where('end_time > NOW()')->orderBy('start_time, end_time')->limit(1)->one(); $order->auction_id = $auction->id; $order->status = Order::STATUS_CREATED; $order->type = Order::TYPE_AUCTION; $order->save(); } $this->redirect('/pay/index?order_id=' . $order->serial_no); } $auctions = Auction::find()->where('end_time > NOW()')->orderBy('start_time, type')->limit(3)->all(); $auctionIds = []; foreach ($auctions as $auction) { array_push($auctionIds, $auction->id); } $topOffers = $this->getTopOfferHash($auctionIds); $myOffers = $this->getMyTopOfferHash($user->id, $auctionIds); foreach ($topOffers as $tmpId => $tmpOffer) { if (!array_key_exists($tmpId, $myOffers)) { $myTmpOffer = []; $myTmpOffer['auction_id'] = $tmpId; $myTmpOffer['top'] = 0; $myOffers[$tmpId] = $myTmpOffer; } list($myOffers[$tmpId]['rank'], $myOffers[$tmpId]['class'], $myOffers[$tmpId]['message']) = $this->composeRankInfo($tmpId, $myOffers[$tmpId]['top']); } $isInAuction = $this->isInAuction(); $hasNextAuction = $this->hasNextAuction(); $startTime = isset($auctions[0]) ? $auctions[0]->start_time : ''; $endTime = isset($auctions[0]) ? $auctions[0]->end_time : ''; $countDownTime = str_replace(' ', 'T', $isInAuction ? $endTime : $startTime); $priceStep = Yii::$app->params['auctionStep']; $lang = Util::getLanguage(); $view = $lang == 'en' ? 'auction' : 'auction-cn'; Util::setLanguage($lang); return $this->render($view, compact('auctions', 'topOffers', 'myOffers', 'startTime', 'endTime', 'isInAuction', 'hasNextAuction', 'countDownTime', 'priceStep')); }