课堂使用情况

dev_daiao
daiao 5 years ago
parent 2949271f86
commit 024da3edf6

@ -0,0 +1,42 @@
class Subjects::CourseUsedInfoService < ApplicationService
attr_reader :subject, :user
def initialize(subject, user)
@subject = subject
@user = user
@shixuns = subject.shixuns
@shixun_ids = @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: [:course_members, :homework_commons])
# name将该课程使用到课堂的单位
# course_count: 将该课程使用到课堂的数量
# student_count: 课堂的学生总数(去掉重复)
# choice_shixun_num: 选用该课程实训的个数(去重)
# choice_shixun_frequency: 选用该课程实训的次数
course_info =
schools.map do |school|
name = school.name
course_count = school.where(courses: {id: course_ids}).count
student_count = school.where(course_members: {role: 4}).select("course_members.user_id").distinct.size
homework_commons = school.where(homework_commons: {id: homework_common_ids})
.select("homework_commons.id")
choice_shixun_num = homework_commons.distinct.size
choice_shixun_frequency = homework_commons.size
{name: name, course_count: course_count, student_count: student_count, choice_shixun_num: choice_shixun_num,
choice_shixun_frequency: choice_shixun_frequency}
end
# 默认按照选用实训的次数作为排序
course_info.sort{|x,y| y['choice_shixun_frequency'] <=> x['choice_shixun_frequency']}
end
end
Loading…
Cancel
Save