|
|
|
@ -3,15 +3,15 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery
|
|
|
|
|
|
|
|
|
|
attr_reader :params
|
|
|
|
|
|
|
|
|
|
sort_columns :study_challenge_count, :finish_challenge_count, :study_shixun_count, :finish_shixun_count,
|
|
|
|
|
default_by: :finish_challenge_count, default_direction: :desc
|
|
|
|
|
sort_columns :cnt,
|
|
|
|
|
default_by: :cnt, default_direction: :desc
|
|
|
|
|
|
|
|
|
|
def initialize(params)
|
|
|
|
|
@params = params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def call
|
|
|
|
|
schools = School.all
|
|
|
|
|
schools = School
|
|
|
|
|
if params[:province].present?
|
|
|
|
|
schools = schools.where("province like ?", "%#{params[:province]}%")
|
|
|
|
|
end
|
|
|
|
@ -22,14 +22,11 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery
|
|
|
|
|
|
|
|
|
|
total = schools.count
|
|
|
|
|
# 根据排序字段进行查询
|
|
|
|
|
#schools = query_by_sort_column(schools, params[:sort_by])
|
|
|
|
|
schools = query_by_sort_column(schools.group(:id), params[:sort_by])
|
|
|
|
|
#schools = custom_sort(schools, params[:sort_by], params[:sort_direction])
|
|
|
|
|
#
|
|
|
|
|
schools = schools.limit(page_size).offset(offset).to_a
|
|
|
|
|
|
|
|
|
|
# 查询并组装其它数据
|
|
|
|
|
schools = package_other_data(schools)
|
|
|
|
|
|
|
|
|
|
[total, schools]
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
@ -83,56 +80,14 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery
|
|
|
|
|
schools
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def query_by_sort_column(users, sort_by_column)
|
|
|
|
|
base_query_column = 'users.*'
|
|
|
|
|
def query_by_sort_column(schools, sort_by_column)
|
|
|
|
|
#base_query_column = 'schools.*'
|
|
|
|
|
|
|
|
|
|
case sort_by_column.to_s
|
|
|
|
|
when 'study_shixun_count' then
|
|
|
|
|
users =
|
|
|
|
|
if time_range.present?
|
|
|
|
|
users.joins("LEFT JOIN myshixuns ON myshixuns.user_id = users.id "\
|
|
|
|
|
"AND myshixuns.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
|
|
|
|
|
else
|
|
|
|
|
users.left_joins(:myshixuns)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
users.select("#{base_query_column}, COUNT(*) study_shixun_count")
|
|
|
|
|
when 'finish_shixun_count' then
|
|
|
|
|
users =
|
|
|
|
|
if time_range.present?
|
|
|
|
|
users.joins("LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1 AND "\
|
|
|
|
|
"myshixuns.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
|
|
|
|
|
else
|
|
|
|
|
users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
users.select("#{base_query_column}, COUNT(*) finish_shixun_count")
|
|
|
|
|
when 'study_challenge_count' then
|
|
|
|
|
users =
|
|
|
|
|
if time_range.present?
|
|
|
|
|
users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
|
|
|
|
|
.joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id "\
|
|
|
|
|
"AND games.status IN (0,1,2) AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
|
|
|
|
|
else
|
|
|
|
|
users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
|
|
|
|
|
.joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id AND games.status IN (0,1,2)")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
users.select("#{base_query_column}, COUNT(*) study_challenge_count")
|
|
|
|
|
when 'finish_challenge_count' then
|
|
|
|
|
users =
|
|
|
|
|
if time_range.present?
|
|
|
|
|
users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
|
|
|
|
|
.joins("LEFT JOIN games ON games.user_id = users.id "\
|
|
|
|
|
"AND games.status = 2 AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
|
|
|
|
|
else
|
|
|
|
|
users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
|
|
|
|
|
.joins("LEFT JOIN games ON games.user_id = users.id AND games.status = 2")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
users.select("#{base_query_column}, COUNT(*) finish_challenge_count")
|
|
|
|
|
when 'cnt' then
|
|
|
|
|
schools.left_joins(:user_extensions).select("schools.*, count(*) cnt").order("cnt desc")
|
|
|
|
|
else
|
|
|
|
|
users
|
|
|
|
|
schools
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|