Beispiel #1
0
 public function actionAccess($date = '')
 {
     $date = $date ? $date : date("Y-m-d");
     $date_now = date("Y-m-d H:i:s");
     if (!preg_match("/^\\d{4}-\\d{2}-\\d{2}\$/", $date)) {
         return $this->echoLog("date{$date} is illegal!!");
     }
     $this->echoLog("stat_access date is {$date}");
     $info = StatAccess::findOne(['date' => $date]);
     if ($info) {
         $model_stat_access = $info;
     } else {
         $model_stat_access = new StatAccess();
         $model_stat_access->date = $date;
         $model_stat_access->created_time = $date_now;
     }
     $stat_count = AccessLogs::find()->where(['>=', 'created_time', date("Y-m-d 00:00:00", strtotime($date))])->andWhere(['<=', 'created_time', date("Y-m-d 23:59:59", strtotime($date))])->count();
     $model_stat_access->total_number = $stat_count ? $stat_count : 0;
     $stat_ip_count = AccessLogs::find()->where(['>=', 'created_time', date("Y-m-d 00:00:00", strtotime($date))])->andWhere(['<=', 'created_time', date("Y-m-d 23:59:59", strtotime($date))])->groupBy("ip")->count();
     $model_stat_access->total_ip_number = $stat_ip_count ? $stat_ip_count : 0;
     $stat_uuid = AccessLogs::find()->select(['uuid'])->where(['>=', 'created_time', date("Y-m-d 00:00:00", strtotime($date))])->andWhere(['<=', 'created_time', date("Y-m-d 23:59:59", strtotime($date))])->groupBy("uuid")->asArray()->all();
     $model_stat_access->total_uv_number = $stat_uuid ? count($stat_uuid) : 0;
     if ($stat_uuid) {
         $stat_returned_user = StatDailyUuid::find()->select(['uuid'])->where(['uuid' => array_column($stat_uuid, 'uuid')])->andWhere(['<', 'date', date("Ymd", strtotime($date))])->groupBy(['uuid'])->all();
         $model_stat_access->total_returned_user_number = $stat_returned_user ? count($stat_returned_user) : 0;
         $model_stat_access->total_new_user_number = $model_stat_access->total_uv_number - $model_stat_access->total_returned_user_number;
     }
     if ($model_stat_access->total_number && $model_stat_access->total_uv_number) {
         $model_stat_access->avg_pv_per_uv = sprintf("%.2f", $model_stat_access->total_number / $model_stat_access->total_uv_number);
     }
     $model_stat_access->updated_time = $date_now;
     return $model_stat_access->save(0);
 }