public function actionStats() { $memberId = $this->getQuery('memberId'); if (empty($memberId)) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } $accountId = $this->getAccountId(); $memberOrderStats = StatsMemberOrder::getByConsumerId($accountId, $memberId); $order = Order::getLastByConsumerId($accountId, $memberId); if (empty($order)) { $result = ['lastOperateTime' => '', 'operateInterval' => null]; } else { $lastDate = MongodbUtil::MongoDate2String($order->operateTime, 'Y-m-d'); $result = ['lastOperateTime' => $lastDate, 'operateInterval' => abs((strtotime(date('Y-m-d')) - strtotime($lastDate)) / 86400)]; } if (empty($memberOrderStats)) { $result['consumptionAmount'] = $result['recentConsumption'] = $result['consumption'] = $result['memberMaxConsumption'] = 0; } else { $result['consumptionAmount'] = round($memberOrderStats->consumptionAmount); $result['recentConsumption'] = $memberOrderStats->recentTransactionCount; $result['consumption'] = round($memberOrderStats->consumptionAmount / $memberOrderStats->transactionCount); $result['memberMaxConsumption'] = round($memberOrderStats->maxConsumption); } $orderStats = StatsOrder::getLatestByAccount($accountId); if (empty($orderStats)) { $result['consumptionAmountAvg'] = $result['recentConsumptionAvg'] = $result['consumptionAvg'] = $result['maxConsumption'] = 0; } else { $result['consumptionAmountAvg'] = round($orderStats->consumptionAmount / $orderStats->consumerCount); $result['recentConsumptionAvg'] = round($orderStats->recentTransactionTotal / $orderStats->consumerCount); $result['consumptionAvg'] = round($orderStats->consumptionAmount / $orderStats->transactionCount); $result['maxConsumption'] = round($orderStats->maxConsumptionTotal / $orderStats->consumerCount); } return $result; }
/** * Stats member order * @param MongoId $accountId * @param MongoDate $operateTimeFrom * @param MongoDate $operateTimeTo */ private function statsMemberOrder($accountId, $operateTimeFrom, $operateTimeTo) { $memberStats = Order::getMemberStats($accountId, $operateTimeFrom, $operateTimeTo); $memberStatsRows = []; foreach ($memberStats as $stat) { $consumerId = $stat['consumer.id']; $memberStats = ModelStatsMemberOrder::getByConsumerId($accountId, $consumerId); if (empty($memberStats)) { $memberStatsRows[] = ['consumerId' => $consumerId, 'consumptionAmount' => $stat['consumptionAmount'], 'transactionCount' => $stat['transactionCount'], 'maxConsumption' => $stat['maxConsumption'], 'accountId' => $accountId]; } else { $memberStats->consumptionAmount += $stat['consumptionAmount']; $memberStats->transactionCount += $stat['transactionCount']; $memberStats->maxConsumption = $memberStats->maxConsumption > $stat['maxConsumption'] ? $memberStats->maxConsumption : $stat['maxConsumption']; if (!$memberStats->save(true, ['consumptionAmount', 'transactionCount', 'maxConsumption'])) { LogUtil::error(['message' => 'Stats member order', 'date' => $dateStr, 'memberStats' => $memberStats], 'resque'); } } } $batchInsertResult = ModelStatsMemberOrder::batchInsert($memberStatsRows); if (!$batchInsertResult) { LogUtil::error(['message' => 'Stats member order', 'date' => $dateStr, 'memberStats' => $memberStatsRows], 'resque'); } }