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.
25 lines
847 B
25 lines
847 B
class Subjects::DataStatisticService < ApplicationService
|
|
attr_reader :subject, :user
|
|
def initialize(subject, user)
|
|
@subject = subject
|
|
@user = user
|
|
@shixun_ids = subject.shixuns.pluck(:id)
|
|
end
|
|
|
|
# 学习总人数
|
|
def study_count
|
|
@shixuns.includes(:myshixuns).map{|shixun| shixun.myshixuns.pluck(:user_id)}.uniq
|
|
end
|
|
|
|
# 课堂学习人数
|
|
def course_study_count
|
|
# 实训作业
|
|
sw_user_ids = StudentWork.where.not(myshixun_id: nil).joins(homework_common: :homework_commons_shixuns)
|
|
.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")
|
|
end
|
|
|
|
end
|