@ -1019,59 +1019,57 @@ class ExercisesController < ApplicationController
#学生开始答题页面
def start_answer
ActiveRecord :: Base . transaction do
begin
ex_users_current = ExerciseUser . where ( user_id : @exercise_current_user_id , exercise_id : @exercise . id ) #不能用@exercise.exercise_users, 因为exercise_users删除时, 只是状态改变, 未删除
@exercise_user_current = ex_users_current & . first
if ex_users_current . exists?
if @exercise_user_current . start_at . blank?
@exercise_user_current . update_attribute ( " start_at " , Time . now )
end
else
if @user_course_identity > Course :: ASSISTANT_PROFESSOR #当为老师的时候, 不创建exercise_user表, 理论上老师是不能进入答题的
exercise_user_params = {
:user_id = > @exercise_current_user_id ,
:exercise_id = > @exercise . id ,
:start_at = > Time . now
}
exercise_user_current = ExerciseUser . new ( exercise_user_params )
exercise_user_current . save
end
begin
ex_users_current = ExerciseUser . where ( user_id : @exercise_current_user_id , exercise_id : @exercise . id ) #不能用@exercise.exercise_users, 因为exercise_users删除时, 只是状态改变, 未删除
@exercise_user_current = ex_users_current & . first
if ex_users_current . exists?
if @exercise_user_current . start_at . blank?
@exercise_user_current . update_attribute ( " start_at " , Time . now )
end
@t_user_exercise_status = @exercise . get_exercise_status ( current_user )
@user_left_time = nil
if @user_course_identity < Course :: STUDENT || ( @t_user_exercise_status == 3 ) ||
( ex_users_current . exists? && @exercise_user_current . commit_status == 1 )
@user_exercise_status = 1 #当前用户为老师/试卷已截止/试卷已提交不可编辑
else
@user_left_time = get_exercise_left_time ( @exercise , current_user )
@user_exercise_status = 0 #可编辑
else
if @user_course_identity > Course :: ASSISTANT_PROFESSOR #当为老师的时候, 不创建exercise_user表, 理论上老师是不能进入答题的
exercise_user_params = {
:user_id = > @exercise_current_user_id ,
:exercise_id = > @exercise . id ,
:start_at = > Time . now
}
exercise_user_current = ExerciseUser . new ( exercise_user_params )
exercise_user_current . save
end
end
@t_user_exercise_status = @exercise . get_exercise_status ( current_user )
@exercise_questions = @exercise . exercise_questions
if @exercise . question_random
@exercise_questions = @exercise_questions . order ( " RAND() " )
else
@exercise_questions = @exercise_questions . order ( " question_number ASC " )
end
# 判断问题是否已回答还是未回答
@exercise_questions = @exercise_questions . includes ( :exercise_shixun_challenges ,
:exercise_shixun_answers ,
:exercise_answers ,
:exercise_standard_answers )
@user_left_time = nil
if @user_course_identity < Course :: STUDENT || ( @t_user_exercise_status == 3 ) ||
( ex_users_current . exists? && @exercise_user_current . commit_status == 1 )
@user_exercise_status = 1 #当前用户为老师/试卷已截止/试卷已提交不可编辑
else
@user_left_time = get_exercise_left_time ( @exercise , current_user )
@user_exercise_status = 0 #可编辑
end
if @t_user_exercise_status == Exercise :: DEADLINE
get_each_student_exercise ( @exercise . id , @exercise_questions , @exercise_current_user_id )
end
get_user_answer_status ( @exercise_questions , @exercise_current_user_id , @exercise , @t_user_exercise_status )
@exercise_questions = @exercise . exercise_questions
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( " 页面调用失败! " )
raise ActiveRecord :: Rollback
if @exercise . question_random
@exercise_questions = @exercise_questions . order ( " RAND() " )
else
@exercise_questions = @exercise_questions . order ( " question_number ASC " )
end
# 判断问题是否已回答还是未回答
@exercise_questions = @exercise_questions . includes ( :exercise_shixun_challenges ,
:exercise_shixun_answers ,
:exercise_answers ,
:exercise_standard_answers )
if @t_user_exercise_status == Exercise :: DEADLINE
get_each_student_exercise ( @exercise . id , @exercise_questions , @exercise_current_user_id )
end
get_user_answer_status ( @exercise_questions , @exercise_current_user_id , @exercise , @t_user_exercise_status )
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( " 页面调用失败! " )
raise ActiveRecord :: Rollback
end
end
@ -1205,7 +1203,6 @@ class ExercisesController < ApplicationController
#答题列表
def exercise_lists
ActiveRecord :: Base . transaction do
begin
@current_user_id = current_user . id
exercise_ids = [ @exercise . id ]
@ -1279,81 +1276,80 @@ class ExercisesController < ApplicationController
if params [ :review ] . present?
review_type = params [ :review ] . first . to_i #已评, 则数据为1, 未评, 则数据为0,前端传过来的为数组
if review_type == 1
@exercise_users_list = teacher_reviews
else
@exercise_users_list = teacher_unreviews
end
@exercise_users_list = teacher_reviews
else
@exercise_users_list = teacher_unreviews
end
end
#答题状态的选择
if params [ :commit_status ] . present?
choose_type = params [ :commit_status ]
@exercise_users_list = @exercise_users_list . commit_exercise_by_status ( choose_type )
end
#答题状态的选择
if params [ :commit_status ] . present?
choose_type = params [ :commit_status ]
@exercise_users_list = @exercise_users_list . commit_exercise_by_status ( choose_type )
end
#班级的选择
if params [ :exercise_group_id ] . present?
group_id = params [ :exercise_group_id ]
exercise_students = @course_all_members . course_find_by_ids ( " course_group_id " , group_id ) #试卷所分班的全部人数
user_ids = exercise_students . pluck ( :user_id ) . reject ( & :blank? )
@exercise_users_list = @exercise_users_list . exercise_commit_users ( user_ids )
end
#班级的选择
if params [ :exercise_group_id ] . present?
group_id = params [ :exercise_group_id ]
exercise_students = @course_all_members . course_find_by_ids ( " course_group_id " , group_id ) #试卷所分班的全部人数
user_ids = exercise_students . pluck ( :user_id ) . reject ( & :blank? )
@exercise_users_list = @exercise_users_list . exercise_commit_users ( user_ids )
end
#搜索
if params [ :search ] . present?
@exercise_users_list = @exercise_users_list . joins ( user : :user_extension ) . where ( " CONCAT(lastname, firstname) like ? OR student_id like ? " , " % #{ params [ :search ] } % " , " % #{ params [ :search ] } % " )
end
#搜索
if params [ :search ] . present?
@exercise_users_list = @exercise_users_list . joins ( user : :user_extension ) . where ( " CONCAT(lastname, firstname) like ? OR student_id like ? " , " % #{ params [ :search ] } % " , " % #{ params [ :search ] } % " )
end
exercise_user_joins = @exercise_users_list . joins ( user : :user_extension )
exercise_user_joins = @exercise_users_list . joins ( user : :user_extension )
if order == " student_id "
@exercise_users_list = exercise_user_joins . order ( " user_extensions.student_id #{ order_type } " )
elsif order == " score "
@exercise_users_list = exercise_user_joins . order ( " #{ order } #{ order_type } " )
else
@exercise_users_list = exercise_user_joins . order ( " end_at #{ order_type } , start_at #{ order_type } " )
end
if order == " student_id "
@exercise_users_list = exercise_user_joins . order ( " user_extensions.student_id #{ order_type } " )
elsif order == " score "
@exercise_users_list = exercise_user_joins . order ( " #{ order } #{ order_type } " )
else
@exercise_users_list = exercise_user_joins . order ( " end_at #{ order_type } , start_at #{ order_type } " )
end
@export_ex_users = @exercise_users_list
@export_ex_users = @exercise_users_list
@exercise_users_size = @exercise_users_list . size
@exercise_users_size = @exercise_users_list . size
# 分页
@page = params [ :page ] || 1
@limit = params [ :limit ] || 20
@exercise_users_list = @exercise_users_list . page ( @page ) . per ( @limit )
else
@exercise_users_list = [ ]
@export_ex_users = @exercise_users_list
@exercise_users_size = 0
end
# 分页
@page = params [ :page ] || 1
@limit = params [ :limit ] || 20
@exercise_users_list = @exercise_users_list . page ( @page ) . per ( @limit )
else
@exercise_users_list = [ ]
@export_ex_users = @exercise_users_list
@exercise_users_size = 0
end
if params [ :format ] == " xlsx "
if @user_course_identity > Course :: ASSISTANT_PROFESSOR
tip_exception ( 403 , " 无权限操作 " )
elsif @exercise_status == Exercise :: UNPUBLISHED
normal_status ( - 1 , " 试卷未发布 " )
elsif ( @exercise_users_size == 0 ) || ( @export_ex_users & . exercise_user_committed . size == 0 )
normal_status ( - 1 , " 暂无用户提交 " )
elsif params [ :export ] . present? && params [ :export ]
normal_status ( 0 , " 正在下载中 " )
else
respond_to do | format |
format . xlsx {
set_export_cookies
get_export_users ( @exercise , @course , @export_ex_users )
exercise_export_name_ =
" #{ current_user . real_name } _ #{ @course . name } _ #{ @exercise . exercise_name } _ #{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
render xlsx : " #{ exercise_export_name_ . strip } " , template : " exercises/exercise_lists.xlsx.axlsx " , locals : { table_columns : @table_columns , exercise_users : @user_columns }
}
end
if params [ :format ] == " xlsx "
if @user_course_identity > Course :: ASSISTANT_PROFESSOR
tip_exception ( 403 , " 无权限操作 " )
elsif @exercise_status == Exercise :: UNPUBLISHED
normal_status ( - 1 , " 试卷未发布 " )
elsif ( @exercise_users_size == 0 ) || ( @export_ex_users & . exercise_user_committed . size == 0 )
normal_status ( - 1 , " 暂无用户提交 " )
elsif params [ :export ] . present? && params [ :export ]
normal_status ( 0 , " 正在下载中 " )
else
respond_to do | format |
format . xlsx {
set_export_cookies
get_export_users ( @exercise , @course , @export_ex_users )
exercise_export_name_ =
" #{ current_user . real_name } _ #{ @course . name } _ #{ @exercise . exercise_name } _ #{ Time . now . strftime ( '%Y%m%d_%H%M%S' ) } "
render xlsx : " #{ exercise_export_name_ . strip } " , template : " exercises/exercise_lists.xlsx.axlsx " , locals : { table_columns : @table_columns , exercise_users : @user_columns }
}
end
end
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( e . message )
raise ActiveRecord :: Rollback
end
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( e . message )
raise ActiveRecord :: Rollback
end
end
@ -1392,101 +1388,99 @@ class ExercisesController < ApplicationController
#学生的统计结果
def exercise_result
ActiveRecord :: Base . transaction do
begin
exercise_ids = [ @exercise . id ]
@exercise_publish_count = get_user_permission_course ( exercise_ids , Exercise :: PUBLISHED ) . size #判断是否有已发布的分班
@exercise_unpublish_count = get_user_permission_course ( exercise_ids , Exercise :: UNPUBLISHED ) . size #判断是否有未发布的分班
@course_all_members = @course . students #课堂的全部学生
@exercise_all_users = @exercise . exercise_users
ex_common_ids = @exercise . common_published_ids ( current_user . id )
@exercise_course_groups = @course . get_ex_published_course ( ex_common_ids )
#班级的选择
if params [ :exercise_group_id ] . present?
group_id = params [ :exercise_group_id ]
exercise_students = @course_all_members . course_find_by_ids ( " course_group_id " , group_id ) # 试卷所分班的全部人数
user_ids = exercise_students . pluck ( :user_id ) . reject ( & :blank? )
@exercise_all_users = @exercise . exercise_users . exercise_commit_users ( user_ids )
@course_all_members_count = @exercise_all_users . size
else
@exercise_users_list = @exercise . all_exercise_users ( current_user . id )
@course_all_members_count = @exercise_users_list . size
end
@exercise_commit_users = @exercise_all_users . commit_exercise_by_status ( 1 ) #试卷的已提交用户
@exercise_commit_user_ids = @exercise_commit_users . pluck ( :user_id ) . uniq #已提交试卷的全部用户id
@exercise_commit_user_counts = @exercise_commit_users . size #试卷的已提交用户人数
@exercise_status = @exercise . get_exercise_status ( current_user )
#提交率
if @course_all_members_count == 0
commit_percent = 0 . 00
min_score = 0 . 0
max_score = 0 . 0
average_score = 0 . 0
fail_counts = 0
pass_counts = 0
good_counts = 0
best_counts = 0
else
commit_percent = ( @exercise_commit_user_counts / @course_all_members_count . to_f ) . round ( 3 )
exercise_scores = @exercise_commit_users . pluck ( :score ) . reject ( & :blank? )
min_score = exercise_scores . min . present? ? exercise_scores . min : 0 . 0
max_score = exercise_scores . max . present? ? exercise_scores . max : 0 . 0
total_score = exercise_scores . sum . present? ? exercise_scores . sum : 0 . 0
average_score = @exercise_commit_user_counts > 0 ? ( total_score . round ( 1 ) / @exercise_commit_user_counts ) . round ( 1 ) : 0 . 0
question_scores = @exercise . question_scores
fail_score = question_scores * 0 . 6 . round ( 2 )
pass_score = question_scores * 0 . 7 . round ( 2 )
good_score = question_scores * 0 . 9 . round ( 2 )
fail_counts = exercise_scores . count { | a | a < fail_score }
pass_counts = exercise_scores . count { | a | a < pass_score && a > = fail_score }
good_counts = exercise_scores . count { | a | a < good_score && a > = pass_score }
best_counts = exercise_scores . count { | a | a > = good_score && a < = question_scores }
end
@counts_array = {
:commit_percent = > commit_percent ,
:min_score = > min_score . to_s ,
:max_score = > max_score . to_s ,
:average_score = > average_score . to_s ,
:fail_counts = > fail_counts ,
:pass_counts = > pass_counts ,
:good_counts = > good_counts ,
:best_counts = > best_counts ,
}
@exercise_questions = @exercise . exercise_questions & . includes ( :exercise_choices , :exercise_answers , :exercise_standard_answers , :exercise_shixun_challenges , :exercise_shixun_answers )
begin
exercise_ids = [ @exercise . id ]
@exercise_publish_count = get_user_permission_course ( exercise_ids , Exercise :: PUBLISHED ) . size #判断是否有已发布的分班
@exercise_unpublish_count = get_user_permission_course ( exercise_ids , Exercise :: UNPUBLISHED ) . size #判断是否有未发布的分班
@course_all_members = @course . students #课堂的全部学生
@exercise_all_users = @exercise . exercise_users
ex_common_ids = @exercise . common_published_ids ( current_user . id )
@exercise_course_groups = @course . get_ex_published_course ( ex_common_ids )
#班级的选择
if params [ :exercise_group_id ] . present?
group_id = params [ :exercise_group_id ]
exercise_students = @course_all_members . course_find_by_ids ( " course_group_id " , group_id ) # 试卷所分班的全部人数
user_ids = exercise_students . pluck ( :user_id ) . reject ( & :blank? )
@exercise_all_users = @exercise . exercise_users . exercise_commit_users ( user_ids )
@course_all_members_count = @exercise_all_users . size
else
@exercise_users_list = @exercise . all_exercise_users ( current_user . id )
@course_all_members_count = @exercise_users_list . size
end
@exercise_commit_users = @exercise_all_users . commit_exercise_by_status ( 1 ) #试卷的已提交用户
@exercise_commit_user_ids = @exercise_commit_users . pluck ( :user_id ) . uniq #已提交试卷的全部用户id
@exercise_commit_user_counts = @exercise_commit_users . size #试卷的已提交用户人数
@exercise_status = @exercise . get_exercise_status ( current_user )
#提交率
if @course_all_members_count == 0
commit_percent = 0 . 00
min_score = 0 . 0
max_score = 0 . 0
average_score = 0 . 0
fail_counts = 0
pass_counts = 0
good_counts = 0
best_counts = 0
else
commit_percent = ( @exercise_commit_user_counts / @course_all_members_count . to_f ) . round ( 3 )
exercise_scores = @exercise_commit_users . pluck ( :score ) . reject ( & :blank? )
min_score = exercise_scores . min . present? ? exercise_scores . min : 0 . 0
max_score = exercise_scores . max . present? ? exercise_scores . max : 0 . 0
total_score = exercise_scores . sum . present? ? exercise_scores . sum : 0 . 0
average_score = @exercise_commit_user_counts > 0 ? ( total_score . round ( 1 ) / @exercise_commit_user_counts ) . round ( 1 ) : 0 . 0
question_scores = @exercise . question_scores
fail_score = question_scores * 0 . 6 . round ( 2 )
pass_score = question_scores * 0 . 7 . round ( 2 )
good_score = question_scores * 0 . 9 . round ( 2 )
fail_counts = exercise_scores . count { | a | a < fail_score }
pass_counts = exercise_scores . count { | a | a < pass_score && a > = fail_score }
good_counts = exercise_scores . count { | a | a < good_score && a > = pass_score }
best_counts = exercise_scores . count { | a | a > = good_score && a < = question_scores }
end
@counts_array = {
:commit_percent = > commit_percent ,
:min_score = > min_score . to_s ,
:max_score = > max_score . to_s ,
:average_score = > average_score . to_s ,
:fail_counts = > fail_counts ,
:pass_counts = > pass_counts ,
:good_counts = > good_counts ,
:best_counts = > best_counts ,
}
percent_sort = " desc "
@exercise_questions = @exercise . exercise_questions & . includes ( :exercise_choices , :exercise_answers , :exercise_standard_answers , :exercise_shixun_challenges , :exercise_shixun_answers )
if params [ :sort ] . present?
percent_sort = params [ :sort ]
end
# @paging_type = "percent"
# # 按题型排序
# if params[:sort].present?
# @paging_type = params[:sort].to_s
# end
percent_sort = " desc "
ques_result_all = exercise_commit_result ( @exercise_questions , @exercise_commit_user_ids )
if params [ :sort ] . present?
percent_sort = params [ :sort ]
end
# @paging_type = "percent"
# # 按题型排序
# if params[:sort].present?
# @paging_type = params[:sort].to_s
# end
#默认降序排列
if percent_sort == " desc "
@question_result_hash = ques_result_all . sort_by { | s | s [ :percent ] } . reverse
else
@question_result_hash = ques_result_all . sort_by { | s | s [ :percent ] }
end
ques_result_all = exercise_commit_result ( @exercise_questions , @exercise_commit_user_ids )
@exercise_questions_count = @exercise_questions . size
@page = params [ :page ] || 1
@limit = params [ :limit ] || 10
@question_result_hash = Kaminari . paginate_array ( @question_result_hash ) . page ( @page ) . per ( @limit )
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( " 没有权限 " )
raise ActiveRecord :: Rollback
#默认降序排列
if percent_sort == " desc "
@question_result_hash = ques_result_all . sort_by { | s | s [ :percent ] } . reverse
else
@question_result_hash = ques_result_all . sort_by { | s | s [ :percent ] }
end
@exercise_questions_count = @exercise_questions . size
@page = params [ :page ] || 1
@limit = params [ :limit ] || 10
@question_result_hash = Kaminari . paginate_array ( @question_result_hash ) . page ( @page ) . per ( @limit )
rescue Exception = > e
uid_logger_error ( e . message )
tip_exception ( " 没有权限 " )
raise ActiveRecord :: Rollback
end
end