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); }