|
|
class Subjects::DataStatisticService < ApplicationService
|
|
|
attr_reader :subject
|
|
|
def initialize(subject)
|
|
|
@subject = subject
|
|
|
@shixuns = subject.shixuns
|
|
|
@shixun_ids = @shixuns.pluck(:id)
|
|
|
end
|
|
|
|
|
|
# 学习总人数:
|
|
|
# 文案解释:学习该课程的全部人数(学习总人数=课堂学习人数+自主学习人数)
|
|
|
# 开发备注:只要点击该课程的任何一个实训(生成了tpi),都算一个学习人数;(去重,一个人数计算1次)
|
|
|
def study_count
|
|
|
@shixuns.joins(:myshixuns).pluck("myshixuns.user_id").uniq.size
|
|
|
end
|
|
|
|
|
|
# 课堂学习人数:
|
|
|
# 文案解释:通过课堂学习该课程的人数
|
|
|
# 开发备注:只要通过课堂进入,并点击了实训(生成了tpi),则算一个可以学习人数;(去重,一个人数计算1次)
|
|
|
def course_study_count
|
|
|
# 实训作业
|
|
|
sw_user_ids = StudentWork.where.not(myshixun_id: 0).joins(homework_common: :homework_commons_shixun)
|
|
|
.where(homework_commons_shixuns: {shixun_id: @shixun_ids}).pluck("student_works.user_id")
|
|
|
# 试卷的实训题
|
|
|
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
|
|
|
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
|
|
|
|
|
|
|
|
|
end
|