|  |  |  | @ -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,40 @@ 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].is_a?(Array) ? params[:group_ids] : params[:group_ids].split(",") if 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 | 
			
		
	
		
			
				
					|  |  |  |  |       @all_count = @course_members.size | 
			
		
	
		
			
				
					|  |  |  |  |       @course_members = paginate @course_members | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  |   end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def act_score | 
			
		
	
		
			
				
					|  |  |  |  |     group_ids = params[:group_ids].is_a?(Array) ? params[:group_ids] : params[:group_ids].split(",") if params[:group_ids] | 
			
		
	
		
			
				
					|  |  |  |  |     all_members = course_act_scores @course, group_ids | 
			
		
	
		
			
				
					|  |  |  |  |     @course_members = all_members[0 .. 9] | 
			
		
	
		
			
				
					|  |  |  |  |     if @user_course_identity == Course::STUDENT | 
			
		
	
		
			
				
					|  |  |  |  |       user_ids = all_members.map(&:user_id) | 
			
		
	
		
			
				
					|  |  |  |  |       rank = user_ids.index(current_user.id).to_i + 1 | 
			
		
	
		
			
				
					|  |  |  |  |       if rank > 10 | 
			
		
	
		
			
				
					|  |  |  |  |         current_member = all_members.select{|member| member.user_id == current_user.id} | 
			
		
	
		
			
				
					|  |  |  |  |         @course_members << current_member | 
			
		
	
		
			
				
					|  |  |  |  |       end | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  |   end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def join_excellent_course | 
			
		
	
		
			
				
					|  |  |  |  |     tip_exception("您已是课堂成员") if current_user.member_of_course?(@course) | 
			
		
	
		
			
				
					|  |  |  |  |     tip_exception("请通过邀请码加入课堂") unless @course.excellent | 
			
		
	
	
		
			
				
					|  |  |  | @ -1379,6 +1415,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 +1506,93 @@ 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 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 | 
			
		
	
		
			
				
					|  |  |  |  |                               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 | 
			
		
	
		
			
				
					|  |  |  |  |                   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 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   def course_act_scores course, group_ids | 
			
		
	
		
			
				
					|  |  |  |  |     sql_select = %Q{ SELECT a.*, | 
			
		
	
		
			
				
					|  |  |  |  |                   (message_num*2 + message_reply_num + resource_num*5 + homework_journal_num + graduation_num*10 + homework_num*10 + exercise_num*10 + poll_num*7) AS score from | 
			
		
	
		
			
				
					|  |  |  |  |                   (select cm.*, | 
			
		
	
		
			
				
					|  |  |  |  |                   (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 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 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 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} | 
			
		
	
		
			
				
					|  |  |  |  |                   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     sql_select += %Q{ and cm.course_group_id in (#{group_ids.join(",")}) } if group_ids.present? | 
			
		
	
		
			
				
					|  |  |  |  |     sql_select += %Q{ ) a ORDER BY score desc; } | 
			
		
	
		
			
				
					|  |  |  |  |     course_members = CourseMember.find_by_sql(sql_select) | 
			
		
	
		
			
				
					|  |  |  |  |     course_members | 
			
		
	
		
			
				
					|  |  |  |  |   end | 
			
		
	
		
			
				
					|  |  |  |  | end | 
			
		
	
	
		
			
				
					|  |  |  | 
 |