From 6b7a7f38b8be7c01243fc62c3b141580e0297af3 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 01:29:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=BF=90=E7=94=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8C=89=E7=85=A7=E7=94=A8=E6=88=B7=E6=95=B0?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user_schools_statistics_controller.rb | 2 +- .../admins/user_schools_statistic_query.rb | 66 ++++--------------- 2 files changed, 13 insertions(+), 55 deletions(-) diff --git a/app/controllers/admins/user_schools_statistics_controller.rb b/app/controllers/admins/user_schools_statistics_controller.rb index 4269804df..a4680d5a2 100644 --- a/app/controllers/admins/user_schools_statistics_controller.rb +++ b/app/controllers/admins/user_schools_statistics_controller.rb @@ -9,7 +9,7 @@ class Admins::UserSchoolsStatisticsController < Admins::BaseController end def index - default_sort('finish_challenge_count', 'desc') + default_sort('cnt', 'desc') total_count, schools = Admins::UserSchoolsStatisticQuery.call(params) @schools = paginate schools, total_count: total_count diff --git a/app/queries/admins/user_schools_statistic_query.rb b/app/queries/admins/user_schools_statistic_query.rb index a29f07afd..1427bbbcd 100644 --- a/app/queries/admins/user_schools_statistic_query.rb +++ b/app/queries/admins/user_schools_statistic_query.rb @@ -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 @@ -21,15 +21,15 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery end total = schools.count + Rails.logger.info("######:#{total}") # 根据排序字段进行查询 - #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) - + Rails.logger.info("######:#{total}") + Rails.logger.info("######:#{schools.inspect}") [total, schools] end @@ -83,56 +83,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 From 903f5d21a8ad813cb31ce9f9168b7a6efad76955 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 01:31:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/admins/user_schools_statistic_query.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/queries/admins/user_schools_statistic_query.rb b/app/queries/admins/user_schools_statistic_query.rb index 1427bbbcd..d68c0b825 100644 --- a/app/queries/admins/user_schools_statistic_query.rb +++ b/app/queries/admins/user_schools_statistic_query.rb @@ -21,15 +21,12 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery end total = schools.count - Rails.logger.info("######:#{total}") # 根据排序字段进行查询 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) - Rails.logger.info("######:#{total}") - Rails.logger.info("######:#{schools.inspect}") [total, schools] end