public function actionStatistics() { $startTime = $this->getQuery('startTime'); $endTime = $this->getQuery('endTime'); $accountId = $this->getAccountId(); $condition = ['accountId' => $accountId, 'isDeleted' => BaseModel::NOT_DELETED]; if (!empty($startTime) && !empty($endTime)) { $condition['createdAt'] = ['$gt' => new \MongoDate(TimeUtil::ms2sTime($startTime)), '$lt' => new \MongoDate(TimeUtil::ms2sTime($endTime))]; } //get the original statistics from db.(raw data) $clientCount = ChatConversation::getClientCount($condition); $conversationCount = ChatConversation::count($condition); $clientMessageCount = ChatMessage::countClientMessage($condition); $conversationDailyStatistics = ChatConversation::getDailyData($condition); $messageDailyStatistics = ChatMessage::getDailyData($condition); //format the statistics for chart $categories = []; $messageCountSeries = []; $clientCountSeries = []; $conversationCountSeries = []; foreach ($conversationDailyStatistics as $conversationDay) { foreach ($messageDailyStatistics as $messageDay) { if ($conversationDay['date'] == $messageDay['date']) { $conversationDay['messageCount'] = $messageDay['messageCount']; } } if (empty($conversationDay['messageCount'])) { $conversationDay['messageCount'] = 0; } $categories[] = $conversationDay['date']; $messageCountSeries[] = $conversationDay['messageCount']; $clientCountSeries[] = $conversationDay['clientCount']; $conversationCountSeries[] = $conversationDay['conversationCount']; } $statistics = ['categories' => $categories, 'series' => [['name' => 'helpdesk_users_count', 'data' => $clientCountSeries], ['name' => 'helpdesk_sessions_count', 'data' => $conversationCountSeries], ['name' => 'helpdesk_sent_message_count', 'data' => $messageCountSeries]]]; return ['clientCount' => $clientCount, 'conversationCount' => $conversationCount, 'clientMessageCount' => $clientMessageCount, 'statistics' => $statistics]; }