/** * Return question daily stats * @param string $id, questionnaireId */ public function actionView($id) { $params = $this->getQuery(); if (!isset($params['startTime']) || !isset($params['endTime'])) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } if ($params['startTime'] > $params['endTime']) { throw new BadRequestHttpException(Yii::t('common', 'data_error')); } //turn unix timestamp to string $startDateStr = TimeUtil::msTime2String($params['startTime'], 'Y-m-d'); $endDateStr = TimeUtil::msTime2String($params['endTime'], 'Y-m-d'); $stats = StatsQuestionnaireDaily::getByQuestionnaireIdAndDate(new \MongoId($id), $startDateStr, $endDateStr); $statsMap = ArrayHelper::map($stats, 'date', 'count'); //format result $dates = []; $counts = []; $dateTime = strtotime($startDateStr); $endTime = strtotime($endDateStr); while ($dateTime <= $endTime) { $date = date('Y-m-d', $dateTime); $dates[] = $date; $counts[] = empty($statsMap[$date]) ? 0 : $statsMap[$date]; $dateTime = strtotime('+1 day', $dateTime); } return ['date' => $dates, 'count' => $counts]; }
/** * @args {"description": "Delay: Stats of questionnaire"} */ public function perform() { $args = $this->args; //Get date from args or today $date = empty($args['date']) ? '' : $args['date']; $datetime = TimeUtil::getDatetime($date); $dateStr = date('Y-m-d', $datetime); $stats = QuestionnaireLog::getStats($dateStr); $statsRows = []; foreach ($stats as $stat) { $questionnaireId = $stat['_id']['questionnaireId']; $accountId = $stat['_id']['accountId']; //if $dailyStats exists, update it; else , create $dailyStats = ModelStatsQuestionnaireDaily::getByQuestionnaireAndDate($accountId, $questionnaireId, $dateStr); if (empty($dailyStats)) { $statsRows[] = ['accountId' => $accountId, 'questionnaireId' => $questionnaireId, 'date' => $dateStr, 'count' => $stat['count']]; } else { $dailyStats->count = $stat['count']; //catch exception to avoid block batch insert try { $dailyStats->save(true, ['count']); } catch (Exception $e) { LogUtil::error(['Update StatsQuestionnaireDaily error' => $e->getMessage(), 'StatsQuestionnaireDaily' => $dailyStats]); continue; } } } ModelStatsQuestionnaireDaily::batchInsert($statsRows); return true; }