/** * 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 user-job-stats * php yii user-job-stats 2015/08/01 * php yii user-job-stats 2015/08/01 2015/08/30 */ public function actionIndex($from_time = '', $to_time = '', $dateInterval = 'P1D') { // UserJobStats::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', UserJobStats::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)); $roleList = UserJob::$roleAllows; foreach ($daterange as $key => $date) { // Update du lieu vao bang user_job_stats $currentDate = new MongoDate($date->getTimestamp()); $model = UserJobStats::find()->where(['date_time' => $currentDate])->one(); if (!$model) { $model = new UserJobStats(); $model->date_time = $currentDate; } // Tu danh sach ma loi, count xem trong ngay co bao nhieu tin nhan foreach ($roleList as $role) { $count = UserJob::find()->where(['create_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")))], 'role' => $role])->count('role'); $data[$role] = $count; } $model->data = $data; $model->save(); echo 'Tao bao cao thong ke Member 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 UserJobStats(); 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'])]]; $userJob = new UserJob(); foreach ($this->overall_statistics as $role => $count) { array_push($columns, ['attribute' => 'data.' . $role, 'header' => $userJob->getRoleText($role)]); } $queryParams = Yii::$app->request->getQueryParams(); $searchModel->scenario = 'search'; $dataProvider = $searchModel->search($queryParams, 20, $where); $gridview = GridView::widget(['panel' => ['heading' => Yii::t('job', 'Member'), 'tableOptions' => ['id' => 'listDefault']], 'pjax' => TRUE, 'dataProvider' => $dataProvider, 'columns' => $columns]); return $gridview; }