dev_cxt2
cxt 6 years ago
parent de89189641
commit ce27926bf1

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

Loading…
Cancel
Save