Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 /**
  * 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');
     }
 }