|
|
|
@ -28,7 +28,8 @@ class CoursesController < ApplicationController
|
|
|
|
|
:switch_to_teacher, :switch_to_assistant, :switch_to_student, :exit_course,
|
|
|
|
|
:informs, :update_informs, :online_learning, :update_task_position, :tasks_list,
|
|
|
|
|
:join_excellent_course, :export_couser_info, :export_member_act_score, :new_informs,
|
|
|
|
|
:delete_informs, :change_member_role, :course_groups, :join_course_group]
|
|
|
|
|
:delete_informs, :change_member_role, :course_groups, :join_course_group, :statistics,
|
|
|
|
|
:work_score, :act_score]
|
|
|
|
|
before_action :user_course_identity, except: [:join_excellent_course, :index, :create, :new, :apply_to_join_course,
|
|
|
|
|
:search_course_list, :get_historical_course_students, :mine, :search_slim, :board_list]
|
|
|
|
|
before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate,
|
|
|
|
@ -47,6 +48,7 @@ class CoursesController < ApplicationController
|
|
|
|
|
before_action :validate_page_size, only: :mine
|
|
|
|
|
before_action :course_tasks, only: [:tasks_list, :update_task_position]
|
|
|
|
|
before_action :validate_inform_params, only: [:update_informs, :new_informs]
|
|
|
|
|
before_action :course_member_allowed, only: [:statistics, :work_score, :act_score]
|
|
|
|
|
|
|
|
|
|
if RUBY_PLATFORM =~ /linux/
|
|
|
|
|
require 'simple_xlsx_reader'
|
|
|
|
@ -227,6 +229,29 @@ class CoursesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def statistics
|
|
|
|
|
max_exp = User.where(id: @course.students.pluck(:user_id)).pluck(:experience).max
|
|
|
|
|
limit = params[:limit] || 5
|
|
|
|
|
@top_scores = course_statistics(@course, max_exp, limit)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def work_score
|
|
|
|
|
sort = params[:sort] || "desc"
|
|
|
|
|
group_ids = params[:group_ids]
|
|
|
|
|
@course_members = course_work_scores @course, sort, group_ids
|
|
|
|
|
if @user_course_identity == Course::STUDENT
|
|
|
|
|
user_ids = @course_members.map(&:user_id)
|
|
|
|
|
@rank = user_ids.index(current_user.id).to_i + 1
|
|
|
|
|
@course_members = @course_members.select{|member| member.user_id == current_user.id}
|
|
|
|
|
else
|
|
|
|
|
@course_members = paginate @course_members
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def act_score
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def join_excellent_course
|
|
|
|
|
tip_exception("您已是课堂成员") if current_user.member_of_course?(@course)
|
|
|
|
|
tip_exception("请通过邀请码加入课堂") unless @course.excellent
|
|
|
|
@ -1379,6 +1404,10 @@ class CoursesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_member_allowed
|
|
|
|
|
tip_exception(403, "..") if @user_course_identity > Course::STUDENT
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_tasks
|
|
|
|
|
case params[:container_type]
|
|
|
|
|
when 'shixun_homework'
|
|
|
|
@ -1466,319 +1495,64 @@ class CoursesController < ApplicationController
|
|
|
|
|
act_scores
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_info_to_xlsx course
|
|
|
|
|
#课堂信息
|
|
|
|
|
@course_info = []
|
|
|
|
|
course_info_title = "课堂信息概要"
|
|
|
|
|
course_id = course.id
|
|
|
|
|
course_name = course.name
|
|
|
|
|
course_list_name = course.course_list.present? ? course.course_list.name : "--"
|
|
|
|
|
course_assistants = course.teachers
|
|
|
|
|
course_assistants_count = course_assistants&.size
|
|
|
|
|
course_assistants_name = course_assistants_count > 0 ? course_assistants.map{|m| m.user.real_name}.join('、') : "--"
|
|
|
|
|
course_teacher_member = course.course_members.course_user_role(%i[CREATOR])
|
|
|
|
|
course_teacher = course_teacher_member.present? ? course_teacher_member.first.user.real_name : "--"
|
|
|
|
|
course_class_counts = course.course_groups_count
|
|
|
|
|
course_students_count = course.students.size
|
|
|
|
|
course_1 = ["课堂编号",course_id]
|
|
|
|
|
course_2 = ["课程名称",course_list_name]
|
|
|
|
|
course_3 = ["课堂名称",course_name]
|
|
|
|
|
course_4 = ["教师团队(#{course_assistants_count})", course_assistants_name]
|
|
|
|
|
course_5 = ["主讲教师", course_teacher]
|
|
|
|
|
course_6 = ["分班",course_class_counts]
|
|
|
|
|
course_7 = ["学生", course_students_count]
|
|
|
|
|
course_main_info = [course_1,course_2,course_3,course_4,course_5,course_6,course_7]
|
|
|
|
|
course_group_info_head = %w(序号 分班名称 邀请码 学生数量)
|
|
|
|
|
course_group_info_body = []
|
|
|
|
|
none_group_counts = course.none_group_count
|
|
|
|
|
|
|
|
|
|
#当有未分班时,应该也做个统计
|
|
|
|
|
if none_group_counts > 0
|
|
|
|
|
none_group_index = 2
|
|
|
|
|
no_group_array = [1,"未分班",course.invite_code,none_group_counts]
|
|
|
|
|
course_group_info_body.push(no_group_array)
|
|
|
|
|
else
|
|
|
|
|
none_group_index = 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if course.course_groups.exists?
|
|
|
|
|
course.course_groups.each_with_index do |group, index|
|
|
|
|
|
group_index = (index+none_group_index)
|
|
|
|
|
group_name = group.name
|
|
|
|
|
group_code = group.invite_code
|
|
|
|
|
group_count = group.course_members_count
|
|
|
|
|
group_array = [group_index,group_name,group_code,group_count]
|
|
|
|
|
course_group_info_body.push(group_array)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
course_group_info = [course_group_info_head,course_group_info_body]
|
|
|
|
|
@course_info += [course_info_title,course_main_info,course_group_info]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def act_score_to_xlsx all_members
|
|
|
|
|
#课堂活跃度
|
|
|
|
|
@user_activity_level = []
|
|
|
|
|
course_user_level = []
|
|
|
|
|
course_activity_title = "课堂活跃度统计"
|
|
|
|
|
user_cell_head = %w(排名 真实姓名 登录名 邮箱 学号 学校 分班 作业完成数(*10) 试卷完成数(*10) 问卷完成数(*7) 资源发布数(*5) 帖子发布数(*2) 帖子回复数(*1) 作业回复数(*1) 活跃度)
|
|
|
|
|
all_members.each do |u|
|
|
|
|
|
#用户的基本信息
|
|
|
|
|
user = u.user
|
|
|
|
|
user_login = user.login
|
|
|
|
|
user_name = user.real_name
|
|
|
|
|
user_mail = user.mail
|
|
|
|
|
user_stu_id = u.student_id.present? ? (u.student_id.to_s + "\t") : "--"
|
|
|
|
|
user_school = user.school_name
|
|
|
|
|
user_course_group = u.course_group_name
|
|
|
|
|
|
|
|
|
|
#课堂活跃度统计
|
|
|
|
|
user_homeworks_num = u.homework_num.to_i #完成的作业数
|
|
|
|
|
user_graduate_num = u.graduation_num.to_i #毕业任务完成数
|
|
|
|
|
user_exercise_num = u.exercise_num.to_i #根据试卷的id来查找
|
|
|
|
|
user_poll_num = u.poll_num.to_i #已完成问卷
|
|
|
|
|
user_file_num = u.resource_num.to_i
|
|
|
|
|
user_messages_num = u.message_num.to_i #帖子发布数
|
|
|
|
|
user_reply_num = u.message_reply_num.to_i #帖子回复数
|
|
|
|
|
user_work_reply_num = u.homework_journal_num.to_i #作业回复数的数量
|
|
|
|
|
c_works_num = (user_homeworks_num + user_graduate_num)*10
|
|
|
|
|
c_exercise_num = user_exercise_num*10
|
|
|
|
|
c_poll_num = user_poll_num*7
|
|
|
|
|
c_file_num = user_file_num*5
|
|
|
|
|
c_message_num = user_messages_num*2
|
|
|
|
|
c_reply_num = user_reply_num
|
|
|
|
|
user_activity_levels = c_works_num + c_exercise_num + c_poll_num + c_file_num + c_message_num + c_reply_num + user_work_reply_num
|
|
|
|
|
user_ac_level = {
|
|
|
|
|
u_1: user_name,
|
|
|
|
|
u_2: user_login,
|
|
|
|
|
u_2_1: user_mail,
|
|
|
|
|
u_3: user_stu_id,
|
|
|
|
|
u_4: user_school,
|
|
|
|
|
u_5: user_course_group,
|
|
|
|
|
u_6: c_works_num,
|
|
|
|
|
u_7: c_exercise_num,
|
|
|
|
|
u_8: c_poll_num,
|
|
|
|
|
u_9: c_file_num,
|
|
|
|
|
u_10: c_message_num,
|
|
|
|
|
u_11: c_reply_num,
|
|
|
|
|
u_12: user_work_reply_num,
|
|
|
|
|
u_13: user_activity_levels
|
|
|
|
|
}
|
|
|
|
|
course_user_level.push(user_ac_level)
|
|
|
|
|
|
|
|
|
|
#.课堂活跃度统计的集合
|
|
|
|
|
course_user_level = course_user_level.sort_by {|k| k[:u_13]}.reverse
|
|
|
|
|
@user_activity_level = [course_activity_title,user_cell_head,course_user_level]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def member_to_xlsx(course,all_members,homeworks,exercises,tasks)
|
|
|
|
|
#课堂的作业信息
|
|
|
|
|
shixun_homeworks = homeworks.search_homework_type(4) #全部实训作业
|
|
|
|
|
shixun_titles = shixun_homeworks.pluck(:name) + ["总得分"]
|
|
|
|
|
|
|
|
|
|
# 更新实训作业成绩
|
|
|
|
|
unless course.is_end
|
|
|
|
|
shixun_homeworks.includes(:homework_challenge_settings, :published_settings, :homework_commons_shixun).each do |homework|
|
|
|
|
|
homework.update_homework_work_score
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
shixun_homeworks = shixun_homeworks&.includes(score_student_works: :user)
|
|
|
|
|
|
|
|
|
|
common_homeworks = homeworks.search_homework_type(1) #全部普通作业
|
|
|
|
|
common_titles = common_homeworks.pluck(:name)+ ["总得分"]
|
|
|
|
|
common_homeworks = common_homeworks&.includes(score_student_works: :user)
|
|
|
|
|
|
|
|
|
|
group_homeworks = homeworks.search_homework_type(3) #全部分组作业
|
|
|
|
|
group_titles = group_homeworks.pluck(:name)+ ["总得分"]
|
|
|
|
|
group_homeworks = group_homeworks&.includes(score_student_works: :user)
|
|
|
|
|
|
|
|
|
|
task_titles = tasks.pluck(:name) + ["总得分"]
|
|
|
|
|
tasks = tasks&.includes(user: :user_extension, score_graduation_works: :user)
|
|
|
|
|
|
|
|
|
|
exercise_titles = exercises.pluck(:exercise_name) + ["总得分"]
|
|
|
|
|
exercises = exercises&.includes(user: :user_extension, score_exercise_users: :user)
|
|
|
|
|
|
|
|
|
|
total_user_score_array = [] #学生总成绩集合
|
|
|
|
|
|
|
|
|
|
all_members.each do |u|
|
|
|
|
|
#用户的基本信息
|
|
|
|
|
user = u.user
|
|
|
|
|
user_login = user.login
|
|
|
|
|
user_name = user.real_name
|
|
|
|
|
user_mail = user.mail
|
|
|
|
|
user_stu_id = user.student_id.present? ? (user.student_id.to_s + "\t") : "--"
|
|
|
|
|
user_school = user.school_name
|
|
|
|
|
user_course_group = u.course_group_name
|
|
|
|
|
user_info_array = [user_name,user_login,user_mail,user_stu_id,user_school,user_course_group] #用户的信息集合
|
|
|
|
|
user_work_scores = []
|
|
|
|
|
|
|
|
|
|
#学生总成绩
|
|
|
|
|
shixun_score = 0.0 # 实训作业的总分
|
|
|
|
|
common_score = 0.0 #普通作业的总分
|
|
|
|
|
group_score = 0.0 #分组作业的总分
|
|
|
|
|
task_score = 0.0 # 毕业任务的总得分
|
|
|
|
|
exercise_score = 0.0 #试卷的总得分
|
|
|
|
|
shixun_score_array = []
|
|
|
|
|
common_score_array = []
|
|
|
|
|
group_score_array = []
|
|
|
|
|
task_score_array = []
|
|
|
|
|
exercise_score_array = []
|
|
|
|
|
|
|
|
|
|
#实训作业
|
|
|
|
|
if shixun_homeworks.size > 0
|
|
|
|
|
shixun_homeworks.each do |s|
|
|
|
|
|
user_student_work = s.score_student_works.select{|work| work.user_id == user.id}.first #当前用户的对该作业的回答
|
|
|
|
|
if user_student_work.nil?
|
|
|
|
|
h_score = 0.0 #该作业的得分为0
|
|
|
|
|
else
|
|
|
|
|
h_score = user_student_work.work_score.nil? ? 0.0 : user_student_work.work_score #用户对该作业的分数
|
|
|
|
|
end
|
|
|
|
|
shixun_score_array.push(h_score)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
shixun_score += shixun_score_array.sum
|
|
|
|
|
shixun_score_array.push(shixun_score) #shixun_score_array的最后一行为总分
|
|
|
|
|
user_work_scores += user_info_array + shixun_score_array #单个用户的实训作业得分信息
|
|
|
|
|
|
|
|
|
|
#普通作业
|
|
|
|
|
if common_homeworks.size > 0
|
|
|
|
|
common_homeworks.each do |c|
|
|
|
|
|
user_student_work_1 = c.score_student_works.select{|work| work.user_id == user.id}.first #当前用户的对该作业的回答
|
|
|
|
|
if user_student_work_1.nil?
|
|
|
|
|
h_score_1 = 0.0 #该作业的得分为0
|
|
|
|
|
else
|
|
|
|
|
h_score_1 = user_student_work_1.work_score.nil? ? 0.0 : user_student_work_1.work_score #用户对该作业的分数
|
|
|
|
|
end
|
|
|
|
|
common_score_array.push(h_score_1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
common_score += common_score_array.sum
|
|
|
|
|
common_score_array.push(common_score) #shixun_score_array的最后一行为总分
|
|
|
|
|
user_work_scores += common_score_array #单个用户的普通作业得分信息
|
|
|
|
|
|
|
|
|
|
#分组作业
|
|
|
|
|
if group_homeworks.size > 0
|
|
|
|
|
group_homeworks.each do |g|
|
|
|
|
|
user_student_work_3 = g.score_student_works.select{|work| work.user_id == user.id}.first #当前用户的对该作业的回答
|
|
|
|
|
if user_student_work_3.nil?
|
|
|
|
|
h_score_3 = 0.0 #该作业的得分为0
|
|
|
|
|
else
|
|
|
|
|
h_score_3 = user_student_work_3.work_score.nil? ? 0.0 : user_student_work_3.work_score #用户对该作业的分数
|
|
|
|
|
end
|
|
|
|
|
group_score_array.push(h_score_3)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
group_score += group_score_array.sum
|
|
|
|
|
group_score_array.push(group_score) #shixun_score_array的最后一行为总分
|
|
|
|
|
user_work_scores += group_score_array #单个用户的分组作业得分信息
|
|
|
|
|
|
|
|
|
|
#毕设作业
|
|
|
|
|
if tasks.size > 0
|
|
|
|
|
tasks.each do |task|
|
|
|
|
|
graduation_work = task.score_graduation_works.select{|work| work.user_id == user.id}.first
|
|
|
|
|
if graduation_work.nil?
|
|
|
|
|
t_score = 0.0
|
|
|
|
|
else
|
|
|
|
|
t_score = graduation_work.work_score.nil? ? 0.0 : graduation_work.work_score
|
|
|
|
|
end
|
|
|
|
|
task_score_array.push(t_score)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
task_score += task_score_array.sum
|
|
|
|
|
task_score_array.push(task_score)
|
|
|
|
|
user_work_scores += task_score_array #单个用户的分组作业得分信息
|
|
|
|
|
|
|
|
|
|
#试卷
|
|
|
|
|
if exercises.size > 0
|
|
|
|
|
exercises.each do |ex|
|
|
|
|
|
exercise_work = ex.score_exercise_users.select{|work| work.user_id == user.id}.first
|
|
|
|
|
if exercise_work.nil?
|
|
|
|
|
e_score = 0.0
|
|
|
|
|
else
|
|
|
|
|
e_score = exercise_work.score.nil? ? 0.0 : exercise_work.score
|
|
|
|
|
end
|
|
|
|
|
exercise_score_array.push(e_score)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
exercise_score += exercise_score_array.sum
|
|
|
|
|
exercise_score_array.push(exercise_score)
|
|
|
|
|
|
|
|
|
|
user_work_scores += exercise_score_array #单个用户的分组作业得分信息
|
|
|
|
|
total_user_scores = shixun_score + common_score + group_score + task_score + exercise_score
|
|
|
|
|
user_work_scores.push(total_user_scores) #个人的行内容添加总成绩
|
|
|
|
|
total_user_score_array.push(user_work_scores) # 全部成员的集合
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#2.学生总成绩的集合
|
|
|
|
|
## 作业标题的集合
|
|
|
|
|
course_user_score_title = "学生总成绩"
|
|
|
|
|
score_title_cells = shixun_titles + common_titles + group_titles + task_titles + exercise_titles
|
|
|
|
|
score_title_counts = [shixun_titles.count,common_titles.count,group_titles.count,task_titles.count,exercise_titles.count]
|
|
|
|
|
score_cell_head = %w(序号 真实姓名 登录名 邮箱 学号 学校 分班) + score_title_cells + ["个人总成绩"]
|
|
|
|
|
@course_user_scores = [course_user_score_title,score_cell_head,score_title_counts,total_user_score_array]
|
|
|
|
|
|
|
|
|
|
#作业的全部集合
|
|
|
|
|
@shixun_work_arrays = []
|
|
|
|
|
@group_work_arrays = []
|
|
|
|
|
@common_work_arrays = []
|
|
|
|
|
@task_work_arrays = []
|
|
|
|
|
@exercise_work_arrays = []
|
|
|
|
|
count_1 = shixun_homeworks.size
|
|
|
|
|
count_2 = common_homeworks.size
|
|
|
|
|
count_3 = group_homeworks.size
|
|
|
|
|
count_4 = tasks.size
|
|
|
|
|
#实训作业
|
|
|
|
|
shixun_homeworks.each_with_index do |s,index|
|
|
|
|
|
all_student_works = s.score_student_works #该实训题的全部用户回答
|
|
|
|
|
title_no = index.to_i + 1
|
|
|
|
|
student_work_to_xlsx(all_student_works,s)
|
|
|
|
|
shixun_work_display_name = format_sheet_name (title_no.to_s + "." + s.name).strip.first(30)
|
|
|
|
|
shixun_work_content = [shixun_work_display_name,@work_head_cells,@work_cells_column]
|
|
|
|
|
@shixun_work_arrays.push(shixun_work_content)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#普通作业
|
|
|
|
|
common_homeworks.each_with_index do |c,index|
|
|
|
|
|
all_student_works = c.score_student_works #当前用户的对该作业的回答
|
|
|
|
|
title_no = count_1 + index.to_i + 1
|
|
|
|
|
student_work_to_xlsx(all_student_works,c)
|
|
|
|
|
|
|
|
|
|
work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
|
|
|
|
|
work_content = [work_name,@work_head_cells,@work_cells_column]
|
|
|
|
|
@common_work_arrays.push(work_content)
|
|
|
|
|
title_no
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#分组作业
|
|
|
|
|
group_homeworks.each_with_index do |c,index|
|
|
|
|
|
all_student_works = c.score_student_works #当前用户的对该作业的回答
|
|
|
|
|
title_no = count_1 + count_2 + index.to_i + 1
|
|
|
|
|
student_work_to_xlsx(all_student_works,c)
|
|
|
|
|
work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
|
|
|
|
|
work_content = [work_name,@work_head_cells,@work_cells_column]
|
|
|
|
|
@group_work_arrays.push(work_content)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#毕设任务
|
|
|
|
|
tasks.each_with_index do |c,index|
|
|
|
|
|
all_student_works = c.score_graduation_works #当前用户的对该作业的回答
|
|
|
|
|
title_no = count_1 + count_2 + count_3 + index.to_i + 1
|
|
|
|
|
graduation_work_to_xlsx(all_student_works,c,current_user)
|
|
|
|
|
work_name = format_sheet_name (title_no.to_s + "." + c.name).strip.first(30)
|
|
|
|
|
work_content = [work_name,@head_cells_column,@task_cells_column]
|
|
|
|
|
@task_work_arrays.push(work_content)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#试卷的导出
|
|
|
|
|
exercises.each_with_index do |c,index|
|
|
|
|
|
all_student_works = c.score_exercise_users #当前用户的对该作业的回答
|
|
|
|
|
title_no = count_1 + count_2 + count_3 + count_4 + index.to_i + 1
|
|
|
|
|
get_export_users(c,course,all_student_works)
|
|
|
|
|
work_name = format_sheet_name (title_no.to_s + "." + c.exercise_name).strip.first(30)
|
|
|
|
|
work_content = [work_name,@table_columns,@user_columns]
|
|
|
|
|
@exercise_work_arrays.push(work_content)
|
|
|
|
|
end
|
|
|
|
|
def course_statistics course, max_exp, limit
|
|
|
|
|
max_rate = 20.0 / max_exp
|
|
|
|
|
|
|
|
|
|
sql_select = %Q{ SELECT a.*, (message_num*0.2 + message_reply_num*0.1 + resource_num*0.5 + homework_journal_num*0.1 + graduation_num +
|
|
|
|
|
homework_num + exercise_num + poll_num*0.7 + exercise_score * 0.7 + graduation_score * 0.7 + homework_score * 0.7 + exp*#{max_rate})
|
|
|
|
|
AS score from
|
|
|
|
|
(select cm.*, users.experience as exp, (SELECT max(student_id) FROM user_extensions WHERE user_extensions.user_id = cm.user_id) AS student_id,
|
|
|
|
|
(SELECT count(messages.id) FROM messages join boards on messages.board_id = boards.id WHERE boards.course_id = #{course.id}
|
|
|
|
|
AND messages.author_id = cm.user_id and messages.parent_id is null) AS message_num,
|
|
|
|
|
(SELECT count(messages.id) FROM messages join boards on messages.board_id = boards.id WHERE boards.course_id = #{course.id}
|
|
|
|
|
AND messages.author_id = cm.user_id and messages.parent_id is not null) AS message_reply_num,
|
|
|
|
|
(SELECT count(attachments.id) FROM attachments WHERE container_id = #{course.id} and container_type = "Course"
|
|
|
|
|
AND attachments.author_id = cm.user_id) AS resource_num,
|
|
|
|
|
(SELECT count(jfm.id) FROM journals_for_messages AS jfm, homework_commons hs WHERE jfm.jour_id = hs.id AND
|
|
|
|
|
jfm.user_id = cm.user_id and jfm.jour_type = "HomeworkCommon" and hs.course_id = #{course.id}) AS homework_journal_num,
|
|
|
|
|
(SELECT COUNT(gw.id) FROM graduation_works AS gw, graduation_tasks AS gt WHERE gw.graduation_task_id = gt.id AND
|
|
|
|
|
gt.course_id = #{course.id} AND gw.work_status != 0 AND gw.user_id = cm.user_id) AS graduation_num,
|
|
|
|
|
(SELECT IFNULL(sum(gw.work_score),0) FROM graduation_works AS gw, graduation_tasks AS gt WHERE gw.graduation_task_id = gt.id AND
|
|
|
|
|
gt.course_id = #{course.id} AND gw.work_status != 0 AND gw.user_id = cm.user_id) AS graduation_score,
|
|
|
|
|
(SELECT COUNT(ss.id) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND
|
|
|
|
|
hc.course_id = #{course.id} AND ss.work_status != 0 AND ss.user_id = cm.user_id) AS homework_num,
|
|
|
|
|
(SELECT IFNULL(sum(ss.work_score),0) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND
|
|
|
|
|
hc.course_id = #{course.id} AND ss.work_status != 0 AND ss.user_id = cm.user_id) AS homework_score,
|
|
|
|
|
(SELECT COUNT(eu.id) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{course.id}
|
|
|
|
|
AND eu.commit_status = 1 AND eu.user_id = cm.user_id) AS exercise_num,
|
|
|
|
|
(SELECT IFNULL(sum(eu.score),0) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{course.id}
|
|
|
|
|
AND eu.commit_status = 1 AND eu.user_id = cm.user_id) AS exercise_score,
|
|
|
|
|
(SELECT COUNT(pu.id) FROM poll_users AS pu, polls WHERE pu.poll_id = polls.id AND polls.course_id = #{course.id}
|
|
|
|
|
AND pu.commit_status = 1 AND pu.user_id = cm.user_id) AS poll_num
|
|
|
|
|
FROM course_members cm join users on cm.user_id = users.id
|
|
|
|
|
join user_extensions ue on ue.user_id = users.id
|
|
|
|
|
WHERE cm.role = 4 and cm.course_id = #{course.id}) a ORDER BY score desc limit #{limit};
|
|
|
|
|
}
|
|
|
|
|
CourseMember.find_by_sql(sql_select)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def course_work_scores course, sort, group_ids
|
|
|
|
|
sql_select = %Q{ SELECT a.*,
|
|
|
|
|
(exercise_score + graduation_score + common_score + practice_score + group_score) AS score from
|
|
|
|
|
(select cm.*,
|
|
|
|
|
(SELECT IFNULL(sum(gw.work_score),0) FROM graduation_works AS gw, graduation_tasks AS gt WHERE gw.graduation_task_id = gt.id AND
|
|
|
|
|
gt.course_id = #{course.id} AND gw.work_status != 0 AND gw.user_id = cm.user_id) AS graduation_score,
|
|
|
|
|
(SELECT IFNULL(sum(ss.work_score),0) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND
|
|
|
|
|
hc.course_id = #{course.id} AND ss.work_status != 0 AND ss.user_id = cm.user_id and hc.homework_type=1) AS common_score,
|
|
|
|
|
(SELECT IFNULL(sum(ss.work_score),0) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND
|
|
|
|
|
hc.course_id = #{course.id} AND ss.work_status != 0 AND ss.user_id = cm.user_id and hc.homework_type=3) AS group_score,
|
|
|
|
|
(SELECT IFNULL(sum(ss.work_score),0) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND
|
|
|
|
|
hc.course_id = #{course.id} AND ss.work_status != 0 AND ss.user_id = cm.user_id and hc.homework_type=4) AS practice_score,
|
|
|
|
|
(SELECT IFNULL(sum(eu.score),0) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{course.id}
|
|
|
|
|
AND eu.commit_status = 1 AND eu.user_id = cm.user_id) AS exercise_score
|
|
|
|
|
FROM course_members cm join users on cm.user_id = users.id
|
|
|
|
|
join user_extensions ue on ue.user_id = users.id
|
|
|
|
|
WHERE cm.role = 4 and cm.course_id = #{course.id})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql_select += %Q{ and cm.course_group_id in (#{group_ids.join(",")}) } if group_ids.present?
|
|
|
|
|
sql_select += %Q{ a ORDER BY score #{sort}; }
|
|
|
|
|
course_members = CourseMember.find_by_sql(sql_select)
|
|
|
|
|
course_members
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|