dev_trainings
cxt 6 years ago
commit 928a392347

@ -56,9 +56,19 @@ class Management::SchoolDataContrastService
end end
def select_columns def select_columns
"schools.id school_id, schools.name school_name,"\ if contrast_column != 'active_user_count'
"(SUM(IF(date BETWEEN '#{format_date(params[:begin_date])}' AND '#{format_date(params[:end_date])}', #{contrast_column}, 0))) total,"\ "schools.id school_id, schools.name school_name,"\
"(SUM(IF(date BETWEEN '#{format_date(params[:other_begin_date])}' AND '#{format_date(params[:other_end_date])}', #{contrast_column}, 0))) other_total"\ "(SUM(IF(date BETWEEN '#{format_date(params[:begin_date])}' AND '#{format_date(params[:end_date])}', #{contrast_column}, 0))) total,"\
"(SUM(IF(date BETWEEN '#{format_date(params[:other_begin_date])}' AND '#{format_date(params[:other_end_date])}', #{contrast_column}, 0))) other_total"
else
# 活跃用户对比时处理方法不同
relations = SchoolDailyActiveUser.select('COUNT(distinct user_id)').joins(:school_daily_report)
.where('school_id = schools.id')
total_subquery = relations.where("date BETWEEN '#{format_date(params[:begin_date])}' AND '#{format_date(params[:end_date])}'").to_sql
other_total_subquery = relations.where("date BETWEEN '#{format_date(params[:other_begin_date])}' AND '#{format_date(params[:other_end_date])}'").to_sql
"schools.id school_id, schools.name school_name, (#{total_subquery}) AS total, (#{other_total_subquery}) AS other_total"
end
end end
def query_report_sql(from_sql) def query_report_sql(from_sql)
@ -67,4 +77,4 @@ class Management::SchoolDataContrastService
"SELECT reports.*, (other_total - total) increase, (IF(other_total - total = 0, 0.0, round((other_total - total) / IF(total = 0, 1, total), 5))) percentage "\ "SELECT reports.*, (other_total - total) increase, (IF(other_total - total = 0, 0.0, round((other_total - total) / IF(total = 0, 1, total), 5))) percentage "\
"FROM (#{from_sql}) reports ORDER BY #{order_by} LIMIT #{PAGE_SIZE} OFFSET #{offset}" "FROM (#{from_sql}) reports ORDER BY #{order_by} LIMIT #{PAGE_SIZE} OFFSET #{offset}"
end end
end end

@ -21,18 +21,19 @@ class Management::SchoolDataGrowService
count = reports.count count = reports.count
reports = reports.joins("LEFT JOIN (#{joins_school_daily_report_sql}) sdr ON sdr.school_id = schools.id") subquery = SchoolDailyActiveUser.select('COUNT(distinct(user_id))').joins(:school_daily_report)
.where(date_condition_sql).where("school_id is not null and school_id = schools.id").to_sql
reports = reports.joins("LEFT JOIN school_daily_reports sdr ON sdr.school_id = schools.id AND #{date_condition_sql}")
reports = reports.select( reports = reports.select(
'schools.id school_id, schools.name school_name,'\ 'schools.id school_id, schools.name school_name,'\
'sdr.teacher_increase_count,'\ 'SUM(teacher_increase_count) teacher_increase_count,'\
'sdr.student_increase_count,'\ 'SUM(student_increase_count) student_increase_count,'\
'sdr.course_increase_count,'\ 'SUM(course_increase_count) course_increase_count,'\
'sdr.shixun_increase_count,'\ 'SUM(shixun_increase_count) shixun_increase_count,'\
'sdr.shixun_homework_count,'\ 'SUM(shixun_homework_count) shixun_homework_count,'\
'sdr.shixun_evaluate_count,'\ 'SUM(shixun_evaluate_count) shixun_evaluate_count,'\
'sdr.uniq_active_user_count,'\ "(#{subquery}) uniq_active_user_count,"\
'sdr.active_user_count' 'SUM(active_user_count) active_user_count').group('schools.id')
).group('schools.id')
reports = custom_sort(reports, params[:sort_by], params[:sort_direction]) reports = custom_sort(reports, params[:sort_by], params[:sort_direction])
reports = reports.order('school_id asc').limit(PAGE_SIZE).offset(offset) reports = reports.order('school_id asc').limit(PAGE_SIZE).offset(offset)
@ -69,21 +70,6 @@ class Management::SchoolDataGrowService
relations relations
end end
def joins_school_daily_report_sql
subquery = 'select COUNT(distinct user_id) from school_daily_active_users sdau where sdau.school_daily_report_id = school_daily_reports.id'
SchoolDailyReport
.select('school_id, '\
'SUM(teacher_increase_count) teacher_increase_count,'\
'SUM(student_increase_count) student_increase_count,'\
'SUM(course_increase_count) course_increase_count,'\
'SUM(shixun_increase_count) shixun_increase_count,'\
'SUM(shixun_homework_count) shixun_homework_count,'\
'SUM(shixun_evaluate_count) shixun_evaluate_count,'\
"(#{subquery}) uniq_active_user_count,"\
'SUM(distinct active_user_count) active_user_count')
.where(date_condition_sql).group(:school_id).to_sql
end
def date_condition_sql def date_condition_sql
date = query_date date = query_date
if date.is_a?(Range) if date.is_a?(Range)

@ -76,21 +76,30 @@ class Management::SchoolReportService
case sort_by_column.to_s case sort_by_column.to_s
when 'teacher_count' then when 'teacher_count' then
schools.joins(:teacher_extensions).select("#{base_query_column}, COUNT(*) teacher_count") schools.joins('LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 0')
.select("#{base_query_column}, COUNT(*) teacher_count")
when 'student_count' then when 'student_count' then
schools.joins(:student_extensions).select("#{base_query_column}, COUNT(*) student_count") schools.joins('LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 1')
.select("#{base_query_column}, COUNT(*) student_count")
when 'homework_count' then when 'homework_count' then
schools.joins(courses: :shixun_homework_commons).select("#{base_query_column}, COUNT(*) homework_count") schools.joins('LEFT JOIN courses ON courses.school_id = schools.id')
.joins('LEFT JOIN homework_commons hc ON shc.course_id = courses.id AND hc.homework_type = 4')
.select("#{base_query_column}, COUNT(*) homework_count")
when 'other_homework_count' then when 'other_homework_count' then
schools.joins(courses: :other_homework_commons).select("#{base_query_column}, COUNT(*) other_homework_count") schools.joins('LEFT JOIN courses ON courses.school_id = schools.id')
.joins('LEFT JOIN homework_commons hc ON shc.course_id = courses.id AND hc.homework_type IN (1, 3)')
.select("#{base_query_column}, COUNT(*) other_homework_count")
when 'course_count' then when 'course_count' then
schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0') schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0')
.select("#{base_query_column}, COUNT(*) course_count") .select("#{base_query_column}, COUNT(*) course_count")
when 'shixun_count' then when 'shixun_count' then
schools.joins(teacher_extensions: :user).joins('INNER JOIN shixuns sx ON sx.user_id = users.id AND sx.fork_from IS NULL') schools.joins('LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 0')
.joins('LEFT JOIN users ON users.id = ue.user_id')
.joins('LEFT JOIN shixuns sx ON sx.user_id = users.id AND sx.fork_from IS NULL')
.select("#{base_query_column}, COUNT(*) shixun_count") .select("#{base_query_column}, COUNT(*) shixun_count")
when 'shixun_evaluate_count' then when 'shixun_evaluate_count' then
schools.joins(:school_report).select("#{base_query_column}, shixun_evaluate_count") schools.joins('LEFT JOIN school_reports ON school_reports.school_id = schools.id')
.select("#{base_query_column}, shixun_evaluate_count")
when 'nearly_course_time' then when 'nearly_course_time' then
schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0') schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0')
.joins('LEFT JOIN course_activities acs ON acs.course_id = cs.id') .joins('LEFT JOIN course_activities acs ON acs.course_id = cs.id')
@ -99,7 +108,8 @@ class Management::SchoolReportService
schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0 AND cs.is_end = false') schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0 AND cs.is_end = false')
.select("#{base_query_column}, COUNT(*) active_course_count") .select("#{base_query_column}, COUNT(*) active_course_count")
else else
schools.joins(:teacher_extensions).select("#{base_query_column}, COUNT(*) teacher_count") schools.joins('LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 0')
.select("#{base_query_column}, COUNT(*) teacher_count")
end end
end end

@ -5,7 +5,7 @@
<%= Time.zone.parse(params[:grow_begin_date]).beginning_of_day.strftime('%Y-%m-%d') %> 05:00至 <%= Time.zone.parse(params[:grow_begin_date]).beginning_of_day.strftime('%Y-%m-%d') %> 05:00至
<%= (Time.zone.parse(params[:grow_begin_date]).beginning_of_day + 1.days).strftime('%Y-%m-%d') %> 05:00 <%= (Time.zone.parse(params[:grow_begin_date]).beginning_of_day + 1.days).strftime('%Y-%m-%d') %> 05:00
<% else %> <% else %>
<%= params[:grow_begin_date] %> 05:00至<%= params[:grow_end_date] %> 05:00 <%= params[:grow_begin_date] %> 05:00至<%= (Time.zone.parse(params[:grow_end_date]) + 1.days).strftime('%Y-%m-%d') %> 05:00
<% end %> <% end %>
<% else %> <% else %>
<%= (Time.current - 5.hour).beginning_of_day.ago(1.days).strftime('%Y-%m-%d') %> 05:00至 <%= (Time.current - 5.hour).beginning_of_day.ago(1.days).strftime('%Y-%m-%d') %> 05:00至

Loading…
Cancel
Save