@ -26,17 +26,19 @@ class CoursesController < ApplicationController
:base_info , :get_historical_courses , :create_group_by_importing_file ,
:attahcment_category_list , :export_member_scores_excel , :duplicate_course ,
:switch_to_teacher , :switch_to_assistant , :switch_to_student , :exit_course ,
:informs , :update_informs , :online_learning , :update_task_position , :tasks_list , :join_excellent_course ]
:informs , :update_informs , :online_learning , :update_task_position , :tasks_list ,
:join_excellent_course , :export_couser_info , :export_member_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 ,
:transfer_to_course_group , :delete_from_course ,
:search_users , :add_students_by_search , :get_historical_courses , :add_teacher_popup , :add_teacher ]
:transfer_to_course_group , :delete_from_course , :export_member_scores_excel ,
:search_users , :add_students_by_search , :get_historical_courses , :add_teacher_popup ,
:add_teacher , :export_couser_info , :export_member_act_score ]
before_action :admin_allowed , only : [ :set_invite_code_halt , :set_public_or_private , :change_course_admin ,
:set_course_group , :create_group_by_importing_file , :update_informs ,
:update_task_position , :tasks_list ]
before_action :teacher_or_admin_allowed , only : [ :graduation_group_list , :create_graduation_group , :join_graduation_group ,
:change_course_teacher , : export_member_scores_excel, : course_group_list,
:change_course_teacher , : course_group_list,
:teacher_application_review , :apply_teachers , :delete_course_teacher ]
before_action :validate_course_name , only : [ :create , :update ]
before_action :find_board , only : :board_list
@ -1074,44 +1076,64 @@ class CoursesController < ApplicationController
@courses = @courses . page ( @page ) . per ( @page_size )
end
# 导出课堂信息
def export_couser_info
set_export_cookies
course_info_to_xlsx @course
filename_ = " #{ current_user . real_name } _ #{ @course . name } _课堂信息_ #{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
render xlsx : " #{ format_sheet_name filename_ . strip } " , template : " courses/export_course_info.xlsx.axlsx " ,
locals : { course_info : @course_info }
end
# 导出活跃度
def export_member_act_score
search = params [ :search ] ? " #{ params [ :search ] . strip } " : " " #用户名或学生学号id搜索
group_id = params [ :group_id ] #分班的班级id
@all_members = student_act_score group_id , search
if @all_members . size == 0
normal_status ( - 1 , " 课堂暂时没有学生 " )
elsif params [ :export ] . present? && params [ :export ]
normal_status ( 0 , " 正在下载中 " )
else
set_export_cookies
act_score_to_xlsx ( @all_members )
filename_ = " #{ current_user . real_name } _ #{ @course . name } _活跃度_ #{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
render xlsx : " #{ format_sheet_name filename_ . strip } " , template : " courses/export_member_act_score.xlsx.axlsx " ,
locals : { activity_level : @user_activity_level }
end
end
# 导出学生成绩
def export_member_scores_excel
ActiveRecord :: Base . transaction do
begin
@all_members = @course . students
search = params [ :search ] ? " #{ params [ :search ] . strip } " : " " #用户名或学生学号id搜索
group_id = params [ :group_id ] #分班的班级id
# if group_id && group_id != "0" && group_id != "-1"
# @all_members = @course.students.course_find_by_ids("course_group_id",group_id)
# elsif group_id && group_id == "0" # 未分班
# @all_members = @course.course_members.ungroup_students
# else
# @all_members = @course.students
# end
# if name.present?
# @all_members = @all_members.joins(user: [:user_extension]).where('concat(users.lastname, users.firstname) like ? or user_extensions.student_id like ?',"%#{name}%","%#{name}%")
# end
@all_members = student_act_score group_id , search
@all_members = @all_members . where ( course_group_id : group_id ) unless group_id . blank?
unless search . blank?
@all_members = @all_members . joins ( user : [ :user_extension ] ) . where ( 'concat(users.lastname, users.firstname) like ? or user_extensions.student_id like ?' , " % #{ search } % " , " % #{ search } % " )
end
@c_homeworks = @course . homework_commons . homework_published . order ( " homework_commons.publish_time asc, homework_commons.created_at asc " )
@c_exercises = @course . exercises . is_exercise_published . order ( " exercises.publish_time asc, exercises.created_at asc " )
# @c_polls = @course.polls.publish_or_not.order("polls.publish_time asc, polls.created_at asc")
@c_tasks = @course . graduation_tasks . task_published . order ( " graduation_tasks.publish_time asc, graduation_tasks.created_at asc " )
if @user_course_identity > Course :: ASSISTANT_PROFESSOR
tip_exception ( 403 , " 无权限操作 " )
elsif @all_members . size == 0
if @all_members . length == 0
normal_status ( - 1 , " 课堂暂时没有学生 " )
elsif params [ :export ] . present? && params [ :export ]
normal_status ( 0 , " 正在下载中 " )
normal_status ( 0 , " 正在下载中 " )
else
@c_homeworks = @course . homework_commons . homework_published . order ( " homework_commons.publish_time asc, homework_commons.created_at asc " )
@c_exercises = @course . exercises . is_exercise_published . order ( " exercises.publish_time asc, exercises.created_at asc " )
# @c_polls = @course.polls.publish_or_not.order("polls.publish_time asc, polls.created_at asc")
@c_tasks = @course . graduation_tasks . task_published . order ( " graduation_tasks.publish_time asc, graduation_tasks.created_at asc " )
set_export_cookies
member_to_xlsx ( @course , @all_members , @c_homeworks , @c_exercises , @c_tasks )
filename_ = " #{ current_user . real_name } _ #{ @course . name } _全部成绩_ #{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
filename_ = " #{ current_user . real_name } _ #{ @course . name } _ 总 成绩_#{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
render xlsx : " #{ format_sheet_name filename_ . strip } " , template : " courses/export_member_scores_excel.xlsx.axlsx " ,
locals : { course_info : @course_info , activity_level : @user_activity_level ,
course_scores : @course_user_scores , shixun_works : @shixun_work_arrays ,
locals : { course_scores : @course_user_scores , shixun_works : @shixun_work_arrays ,
common_works : @common_work_arrays , group_works : @group_work_arrays , task_works : @task_work_arrays ,
exercise_works : @exercise_work_arrays }
end
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( e . message )
@ -1279,13 +1301,7 @@ class CoursesController < ApplicationController
# end
def student_act_score group_id , search
sql_select = %Q{ SELECT cm.*,(
SELECT SUM ( student_works . work_score )
FROM student_works , homework_commons
WHERE student_works . homework_common_id = homework_commons . id
AND homework_commons . course_id = #{@course.id}
AND student_works . user_id = cm . user_id
) AS score ,
sql_select = %Q{ SELECT cm.*,
( 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 ,
@ -1306,52 +1322,25 @@ class CoursesController < ApplicationController
FROM course_members cm }
if search . present? && group_id . present?
sql_select += %Q{ join users on cm.user_id = users.id
join s user_extensions ue on ue . user_id = users . id
join user_extensions ue on ue . user_id = users . id
WHERE cm . role = 4 and cm . course_id = #{@course.id} and cm.course_group_id = #{group_id} and
( concat ( users . lastname , users . firstname ) like '%#{search}%' or ue . student_id like '%#{search}%' ) ORDER BY score desc }
( concat ( users . lastname , users . firstname ) like '%#{search}%' or ue . student_id like '%#{search}%' ) }
elsif search . present?
sql_select += %Q{ join users on cm.user_id = users.id
join s user_extensions ue on ue . user_id = users . id
join user_extensions ue on ue . user_id = users . id
WHERE cm . role = 4 and
( concat ( users . lastname , users . firstname ) like '%#{search}%' or ue . student_id like '%#{search}%' ) ORDER BY score desc }
( concat ( users . lastname , users . firstname ) like '%#{search}%' or ue . student_id like '%#{search}%' ) }
elsif group_id . present?
sql_select += %Q{ WHERE cm.role = 4 and cm.course_id = #{ @course . id } and cm.course_group_id = #{ group_id } ORDER BY score desc }
sql_select += %Q{ WHERE cm.role = 4 and cm.course_id = #{ @course . id } and cm.course_group_id = #{ group_id } }
else
sql_select += %Q{ WHERE cm.role = 4 and cm.course_id = #{ @course . id } ORDER BY score desc }
sql_select += %Q{ WHERE cm.role = 4 and cm.course_id = #{ @course . id } }
end
act_scores = CourseMember . find_by_sql ( sql_select )
act_scores
end
def member_to_xlsx ( course , all_members , homeworks , exercises , tasks )
#课堂的作业信息
shixun_homeworks = homeworks . search_homework_type ( 4 ) #全部实训作业
shixun_titles = shixun_homeworks . pluck ( :name ) + [ " 总得分 " ]
# 更新实训作业成绩
shixun_homeworks . includes ( :homework_challenge_settings , :published_settings , :homework_commons_shixun ) . each do | homework |
homework . update_homework_work_score
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 = [ ] #学生总成绩集合
def course_info_to_xlsx course
#课堂信息
@course_info = [ ]
course_info_title = " 课堂信息概要 "
@ -1399,7 +1388,9 @@ class CoursesController < ApplicationController
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 = [ ]
@ -1414,8 +1405,6 @@ class CoursesController < ApplicationController
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_info_array = [ user_login , user_name , user_mail , user_stu_id , user_school , user_course_group ] #用户的信息集合
user_work_scores = [ ]
#课堂活跃度统计
user_homeworks_num = u . homework_num . to_i #完成的作业数
@ -1434,23 +1423,69 @@ class CoursesController < ApplicationController
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
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 ) + [ " 总得分 " ]
# 更新实训作业成绩
shixun_homeworks . includes ( :homework_challenge_settings , :published_settings , :homework_commons_shixun ) . each do | homework |
homework . update_homework_work_score
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 #普通作业的总分
@ -1548,10 +1583,6 @@ class CoursesController < ApplicationController
total_user_score_array . push ( user_work_scores ) # 全部成员的集合
end
#1.课堂活跃度统计的集合
course_user_level = course_user_level . sort_by { | k | k [ :u_12 ] } . reverse
@user_activity_level = [ course_activity_title , user_cell_head , course_user_level ]
#2.学生总成绩的集合
## 作业标题的集合
course_user_score_title = " 学生总成绩 "