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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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