# 按天获取百度统计数据,pv,访问,ip和来源分类占比 # 其他统计:前一周用户留存率 class DailyPlatformStatisticsJob < ApplicationJob queue_as :default def perform(*args) Rails.logger.info("*********开始统计*********") tongji_service = Baidu::TongjiService.new access_token = tongji_service.access_token Rails.logger.info "job baidu_tongji_auth access_token ===== #{access_token}" ActiveJob::Base.logger.info "job baidu_tongji_auth access_token ===== #{access_token}" # 从最后一个记录日期开始,如果遗漏日期数据可以补充数据 last_date = DailyPlatformStatistic.order(:date).last start_date = last_date.date end_date = Time.now if access_token.present? tongji_service.overview_batch_add(start_date, end_date) # 本周访问来源占比,每天记录一次,如果遗漏日期数据可以补充数据 tongji_service.source_from_batch_add(start_date, end_date) end # 周用户留存率 pre_week_user_ids = User.where(created_on: pre_week).pluck(:id).uniq weekly_keep_user_count = User.where(id: pre_week_user_ids).where(last_login_on: current_week).count weekly_keep_rate = format("%.2f", pre_week_user_ids.size > 0 ? weekly_keep_user_count.to_f / pre_week_user_ids.size : 0) job_date = 1.days.ago daily_statistic = DailyPlatformStatistic.find_or_initialize_by(date: job_date) daily_statistic.weekly_keep_rate = weekly_keep_rate daily_statistic.save end private def current_week Time.now.beginning_of_week..Time.now.end_of_day end def pre_week # 7.days.ago.beginning_of_week..7.days.ago.beginning_of_week.end_of_week Time.now.prev_week..Time.now.prev_week.end_of_week end end