diff --git a/app/services/schools/school_statistic_service.rb b/app/services/schools/school_statistic_service.rb new file mode 100644 index 000000000..a5082108d --- /dev/null +++ b/app/services/schools/school_statistic_service.rb @@ -0,0 +1,100 @@ +class Schools::SchoolStatisticService < ApplicationService + attr_reader :school + + def initialize(school) + @school = school.includes(:courses, user_extensions: :user) + @user_extensions = school.user_extensions + end + + # 学校老师数量 + def teacher_count + @user_extensions.map{|ue| ue.identity == 0 }.size + end + + # 学校学生数 + def student_count + @user_extensions.map{|ue| ue.identity == 1 }.size + end + + # 活跃用户(近1天有登录) + def acitve_user_1_day_count + @user_extensions.map{|ue| ue.user.last_login_on&.between?(1.days.ago, Time.now)}.size + end + + # 活跃用户(近1个周有登录) + def acitve_user_1_week_count + @user_extensions.map{|ue| ue.user.last_login_on&.between?(1.weeks.ago, Time.now)}.size + end + + # 活跃用户(近3个月有登录) + def acitve_user_1_months_count + @user_extensions.map{|ue| ue.user.last_login_on&.between?(1.months.ago, Time.now)}.size + end + + # 活跃用户(近3个月有登录) + def acitve_user_3_months_count + @user_extensions.map{|ue| ue.user.last_login_on&.between?(3.months.ago, Time.now)}.size + end + + # 活跃用户(进半年有登录记录) + def acitve_user_6_months_count + @user_extensions.map{|ue| ue.user.last_login_on&.between?(6.months.ago, Time.now)}.size + end + + # 课堂总数(上层记得Include) + def courses_count + @school.courses.size + end + + # 正在进行的课堂数 + def curr_courses_count + @school.courses.map{|c| c.is_end == false && c.is_delete != 0}.size + end + + # 实训作业数目 + def hom_shixuns_count + @school.courses.joins(:homework_commons).where(homework_commons: {homework_type: 'practice'}).size + end + + # 资源数 + def sources_count + @school.courses.joins(:attachments).size + end + + # 视频总数 + def videos_count + @school.courses.joins(:course_videos).size + end + + # 制作实训数 + def shixun_count + @user_extensions.joins(user: :shixuns).size + end + + # 挑战实训总数 + def myshixuns_count + @user_extensions.joins("join myshixuns on myshixuns.user_id = user_extensions.user_id").size + end + + # 通过的实训总数 + def pass_myshixun_count + @user_extensions.joins("join myshixuns on myshixuns.user_id = user_extensions.user_id").where(myshixuns: {status: 1}).size + end + + # 挑战的关卡数 + def games_count + @user_extensions.joins("join games on games.user_id = user_extensions.user_id").where(games: {status: 0..2}) + end + + # 通关的关卡数 + def pass_games_count + @user_extensions.joins("join games on games.user_id = user_extensions.user_id").where(games: {status: 2}) + end + + # 评测总数 + def evalute_count + @user_extensions.joins("join games on games.user_id = user_extensions.user_id").sum(:evalute_count) + end + + +end \ No newline at end of file diff --git a/app/tasks/statistic_school_report_task.rb b/app/tasks/statistic_school_report_task.rb index a72c57830..3371ce527 100644 --- a/app/tasks/statistic_school_report_task.rb +++ b/app/tasks/statistic_school_report_task.rb @@ -1,20 +1,20 @@ class StatisticSchoolReportTask def call - School.find_each do |school| - evaluate_count = Game.joins(:challenge) - .joins('LEFT JOIN course_members ON course_members.user_id = games.user_id') - .joins('LEFT JOIN homework_commons_shixuns hcs ON hcs.shixun_id = challenges.shixun_id') - .joins('LEFT JOIN homework_commons hc ON hcs.homework_common_id = hc.id AND hc.homework_type = 4') - .joins('LEFT JOIN courses ON hc.course_id = courses.id AND course_members.course_id = courses.id') - .where(courses: { school_id: school.id }) - .sum(:evaluate_count) - - report = SchoolReport.find_or_initialize_by(school_id: school.id) - - report.school_name = school.name - report.shixun_evaluate_count = evaluate_count - - report.save - end + # School.find_each do |school| + # evaluate_count = Game.joins(:challenge) + # .joins('LEFT JOIN course_members ON course_members.user_id = games.user_id') + # .joins('LEFT JOIN homework_commons_shixuns hcs ON hcs.shixun_id = challenges.shixun_id') + # .joins('LEFT JOIN homework_commons hc ON hcs.homework_common_id = hc.id AND hc.homework_type = 4') + # .joins('LEFT JOIN courses ON hc.course_id = courses.id AND course_members.course_id = courses.id') + # .where(courses: { school_id: school.id }) + # .sum(:evaluate_count) + # + # report = SchoolReport.find_or_initialize_by(school_id: school.id) + # + # report.school_name = school.name + # report.shixun_evaluate_count = evaluate_count + # + # report.save + # end end end diff --git a/app/views/admins/daily_school_statistics/shared/_list.html.erb b/app/views/admins/daily_school_statistics/shared/_list.html.erb index 2463b45ad..1ec80de21 100644 --- a/app/views/admins/daily_school_statistics/shared/_list.html.erb +++ b/app/views/admins/daily_school_statistics/shared/_list.html.erb @@ -11,7 +11,7 @@