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.
|
|
|
|
class Subjects::CourseUsedInfoService < ApplicationService
|
|
|
|
|
attr_reader :subject
|
|
|
|
|
def initialize(subject)
|
|
|
|
|
@subject = subject
|
|
|
|
|
@shixun_ids = subject.shixuns.pluck(:id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def call
|
|
|
|
|
return if subject.blank?
|
|
|
|
|
homework_commons =
|
|
|
|
|
HomeworkCommon.joins(:homework_commons_shixun)
|
|
|
|
|
.where(homework_type: %i[practice])
|
|
|
|
|
.where(homework_commons_shixuns: {shixun_id: @shixun_ids})
|
|
|
|
|
course_ids = homework_commons.pluck(:course_id)
|
|
|
|
|
homework_common_ids = homework_commons.pluck("homework_commons.id")
|
|
|
|
|
schools = School.joins(:courses).where(courses: {id: course_ids}).group("schools.id").select("schools.*, count(courses.id) course_count")
|
|
|
|
|
|
|
|
|
|
# name:将该课程使用到课堂的单位
|
|
|
|
|
# course_count: 将该课程使用到课堂的数量
|
|
|
|
|
# student_count: 课堂的学生总数(去掉重复)
|
|
|
|
|
# choice_shixun_num: 选用该课程实训的个数(去重)
|
|
|
|
|
# choice_shixun_frequency: 选用该课程实训的次数
|
|
|
|
|
course_info = []
|
|
|
|
|
schools.find_in_batches do |s|
|
|
|
|
|
s.each do |school|
|
|
|
|
|
name = school.name
|
|
|
|
|
course_count = school.course_count
|
|
|
|
|
student_count = school.courses.joins(:course_members).where(course_members: {role: 4, course_id: course_ids}).size
|
|
|
|
|
shixun_ids = school.courses.joins(homework_commons: :homework_commons_shixun)
|
|
|
|
|
.where(homework_commons: {id: homework_common_ids})
|
|
|
|
|
.pluck("homework_commons_shixuns.shixun_id")
|
|
|
|
|
choice_shixun_frequency = shixun_ids.size
|
|
|
|
|
choice_shixun_num = shixun_ids.uniq.size
|
|
|
|
|
course_info << {school_id: school.id, school_name: name, course_count: course_count, student_count: student_count,
|
|
|
|
|
choice_shixun_num: choice_shixun_num, choice_shixun_frequency: choice_shixun_frequency}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
course_info
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|