/** * Tong hop du lieu theo thoi gian * * @param string $from_time * @param string $to_time * @param string $dateInterval P1D: từng ngày | P1W: từng tuần | P1M: từng tháng * @throws \yii\mongodb\Exception * * Use: php yii job-stats * php yii job-stats 2015/08/01 * php yii job-stats 2015/08/01 2015/08/30 */ public function actionIndex($from_time = '', $to_time = '', $dateInterval = 'P1D') { JobStats::deleteAll(); // if (empty($from_time) AND empty($to_time)) { // Chay ngay hom qua // $from_time = date('Y/m/d 00:00:00', strtotime("-1 days")); // $to_time = date('Y/m/d 23:59:59', strtotime("-1 days")); // } if (empty($from_time) and empty($to_time)) { // Chay ngay hien tai $from_time = date('Y/m/d 00:00:00'); $to_time = date('Y/m/d 23:59:59'); } elseif (empty($from_time)) { // Chay tu dau den $to_time $from_time = date('Y/m/d 00:00:00', JobStats::find()->min('date_time')->sec); $to_time = date('Y/m/d 23:59:59', strtotime($to_time)); } elseif (empty($to_time)) { // Chay tu $from_time den ngay hien tai $from_time = date('Y/m/d 00:00:00', strtotime($from_time)); $to_time = date('Y/m/d 23:59:59'); } else { // Chay trong khoang $from_time den $to_time $from_time = date('Y/m/d 00:00:00', strtotime($from_time)); $to_time = date('Y/m/d 23:59:59', strtotime($to_time)); } // Create range date $data = []; $interval = new DateInterval($dateInterval); $daterange = new DatePeriod(new DateTime($from_time), $interval, new DateTime($to_time)); foreach ($daterange as $key => $date) { // Update du lieu vao bang job_stats $currentDate = new MongoDate($date->getTimestamp()); $model = JobStats::find()->where(['date_time' => $currentDate])->one(); if (!$model) { $model = new JobStats(); $model->date_time = $currentDate; } // Tu danh sach ma loi, count xem trong ngay co bao nhieu tin nhan $count = Job::find()->where(['created_time' => ['$gte' => new MongoDate(strtotime($date->format("Y-m-d 00:00:00"))), '$lte' => new MongoDate(strtotime($date->format("Y-m-d 23:59:59")))]])->count('_id'); $data['job'] = $count; $model->data = $data; $model->save(); echo 'Tao bao cao thong ke Job ngay ' . $date->format("Y-m-d"); echo "\n"; } }
/** * Ham render gridview thong ke theo tung ngay, tuan, thang * @return gridview */ private function buildGridview() { // Colum mac dinh $columns = []; $searchModel = new JobStats(); array_push($columns, ['attribute' => 'date_time', 'filterType' => GridView::FILTER_DATE_RANGE, 'format' => 'raw', 'width' => '270px', 'filterWidgetOptions' => ['pluginOptions' => ['format' => 'Y-m-d', 'separator' => ' to ', 'opens' => 'left'], 'presetDropdown' => true, 'hideInput' => true, 'convertFormat' => true], 'value' => function ($model, $key, $index, $widget) { return date('d/m/Y', $model->date_time->sec); }]); $where = ['date_time' => ['$gte' => new MongoDate($this->from_time['timestamp']), '$lte' => new MongoDate($this->to_time['timestamp'])]]; foreach ($this->overall_statistics as $key => $count) { array_push($columns, ['attribute' => 'data.' . $key, 'header' => $key]); } $queryParams = Yii::$app->request->getQueryParams(); $searchModel->scenario = 'search'; $dataProvider = $searchModel->search($queryParams, 20, $where); $gridview = GridView::widget(['panel' => ['heading' => Yii::t('job', 'Job'), 'tableOptions' => ['id' => 'listDefault']], 'pjax' => TRUE, 'dataProvider' => $dataProvider, 'columns' => $columns]); return $gridview; }