You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/services/subjects/data_statistic_service.rb

73 lines
2.9 KiB

5 years ago
class Subjects::DataStatisticService < ApplicationService
attr_reader :subject
def initialize(subject)
5 years ago
@subject = subject
@shixuns = subject.shixuns
@shixun_ids = @shixuns.pluck(:id)
5 years ago
end
# 学习总人数:
# 文案解释:学习该课程的全部人数(学习总人数=课堂学习人数+自主学习人数)
# 开发备注只要点击该课程的任何一个实训生成了tpi都算一个学习人数去重一个人数计算1次
5 years ago
def study_count
@shixuns.joins(:myshixuns).pluck("myshixuns.user_id").uniq.size
5 years ago
end
# 课堂学习人数:
# 文案解释:通过课堂学习该课程的人数
# 开发备注只要通过课堂进入并点击了实训生成了tpi则算一个可以学习人数去重一个人数计算1次
5 years ago
def course_study_count
# 实训作业
5 years ago
sw_user_ids = StudentWork.where.not(myshixun_id: 0).joins(homework_common: :homework_commons_shixun)
5 years ago
.where(homework_commons_shixuns: {shixun_id: @shixun_ids}).pluck("student_works.user_id")
5 years ago
# 试卷的实训题
5 years ago
esa_user_ids = ExerciseShixunAnswer.joins(exercise_shixun_challenge: :shixun)
.where(shixuns: {id: @shixun_ids}).pluck("exercise_shixun_answers.user_id")
(sw_user_ids + esa_user_ids).uniq.size
5 years ago
end
# 自主学习人数:
# 文案解释:通过自主学习该课程的人数
# 开发备注非课程进入生成了实训的tpi去重。一个人数计算1次
def initiative_study
study_count - course_study_count
end
# 通关总人数:
# 文案解释:
# 通关该课程所有实训的人数去重。一个人数计算1次
def passed_count
@shixuns.includes(:myshixuns).where(myshixuns: {status: 1}).pluck("myshixuns.user_id").uniq.size
end
# 使用课堂数:
# 文案解释:使用该课程的课堂数量
# 开发备注课堂加入该课程的实训到自己课堂则算一个使用课堂数。去重一个课堂计算1次
def course_used_count
hc_course_ids =
HomeworkCommon.joins(:homework_commons_shixun)
.where(homework_type: %i[practice])
.where(homework_commons_shixuns: {shixun_id: @shixun_ids}).pluck("homework_commons.course_id").uniq
ex_course_ids =
Exercise.joins(:exercise_questions)
.where(exercise_questions: {question_type: 5, shixun_id: @shixun_ids}).pluck("exercises.course_id").uniq
(hc_course_ids + ex_course_ids).uniq.size
end
# 使用单位数:
# 文案解释:使用该课程的单位数量(包括自主学习者所在单位)
# 开发备注:凡事该单位有使用该课程的实训(自主学习+课堂使用)都算;(去重,一个单位计算一次)
def school_used_count
school_ids.size
end
private
def school_ids
@shixuns.joins(myshixuns: :user_extension).pluck("user_extensions.school_id").uniq
end
5 years ago
end