试卷的立即截止调整

dev_cxt2
cxt 6 years ago
parent 21fc99b8e2
commit de89189641

@ -107,7 +107,7 @@ class ExerciseAnswersController < ApplicationController
normal_status(-1,"已提交/已结束的试卷不允许修改!") normal_status(-1,"已提交/已结束的试卷不允许修改!")
else else
if (@exercise_user_status == Exercise::DEADLINE && @exercise_user.commit_status == 0) || (@exercise.time > 0 && @exercise_user.start_at.present? && ((@exercise_user.start_at + @exercise.time.to_i.minutes) < Time.now)) if (@exercise_user_status == Exercise::DEADLINE && @exercise_user.commit_status == 0) || (@exercise.time > 0 && @exercise_user.start_at.present? && ((@exercise_user.start_at + @exercise.time.to_i.minutes) < Time.now))
objective_score = calculate_student_score(@exercise,current_user)[:total_score] objective_score = calculate_student_score(@exercise,current_user,Time.now)[:total_score]
subjective_score = @exercise_user.subjective_score < 0.0 ? 0.0 : @exercise_user.subjective_score subjective_score = @exercise_user.subjective_score < 0.0 ? 0.0 : @exercise_user.subjective_score
total_score = objective_score + subjective_score total_score = objective_score + subjective_score
commit_option = { commit_option = {

@ -886,7 +886,7 @@ class ExercisesController < ApplicationController
ex_user_ids = exercise_users.pluck(:id) ex_user_ids = exercise_users.pluck(:id)
EndExerciseCalculateJob.perform_later(ex_user_ids,exercise) EndExerciseCalculateJob.perform_later(ex_user_ids,exercise,Time.now)
# exercise_users.each do |user| # exercise_users.each do |user|
# if user.commit_status == 0 && user.start_at.present? # if user.commit_status == 0 && user.start_at.present?
# objective_score = calculate_student_score(exercise,user.user)[:total_score] # objective_score = calculate_student_score(exercise,user.user)[:total_score]
@ -1141,7 +1141,7 @@ class ExercisesController < ApplicationController
can_commit_exercise = true can_commit_exercise = true
end end
if can_commit_exercise if can_commit_exercise
objective_score = calculate_student_score(@exercise,current_user)[:total_score] objective_score = calculate_student_score(@exercise,current_user,Time.now)[:total_score]
subjective_score = @answer_committed_user.subjective_score subjective_score = @answer_committed_user.subjective_score
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = objective_score + total_score_subjective_score total_score = objective_score + total_score_subjective_score

@ -412,12 +412,13 @@ module ExercisesHelper
end end
#计算试卷的总分和试卷的答题状态 #计算试卷的总分和试卷的答题状态
def calculate_student_score(exercise,user) def calculate_student_score(exercise,user,end_time)
score1 = 0.0 #选择题/判断题 score1 = 0.0 #选择题/判断题
score2 = 0.0 #填空题 score2 = 0.0 #填空题
score5 = 0.0 #实训题 score5 = 0.0 #实训题
ques_stand = [] #问题是否正确 ques_stand = [] #问题是否正确
exercise_questions = exercise.exercise_questions.includes(:exercise_answers,:exercise_shixun_answers,:exercise_standard_answers,:exercise_shixun_challenges) exercise_end_time = end_time || Time.now
exercise_questions = exercise.exercise_questions.includes(:exercise_standard_answers,:exercise_shixun_challenges)
exercise_questions&.each do |q| exercise_questions&.each do |q|
begin begin
if q.question_type != 5 if q.question_type != 5
@ -505,7 +506,7 @@ module ExercisesHelper
exercise_cha_score = 0.0 exercise_cha_score = 0.0
answer_status = 0 answer_status = 0
# if game.status == 2 && game.final_score >= 0 # if game.status == 2 && game.final_score >= 0
if game.final_score > 0 && game.end_time < exercise.end_time if game.final_score > 0 && game.end_time && game.end_time < exercise_end_time
exercise_cha_score = game.real_score(exercise_cha.question_score) exercise_cha_score = game.real_score(exercise_cha.question_score)
# exercise_cha_score = exercise_cha.question_score #每一关卡的得分 # exercise_cha_score = exercise_cha.question_score #每一关卡的得分
answer_status = 1 answer_status = 1

@ -5,11 +5,11 @@ class EndExerciseCalculateJob < ApplicationJob
queue_as :default queue_as :default
def perform(ex_user_ids,exercise) def perform(ex_user_ids,exercise,end_time)
exercise_users = ExerciseUser.where(id: ex_user_ids) exercise_users = ExerciseUser.where(id: ex_user_ids)
exercise_users.each do |user| exercise_users.each do |user|
if user.commit_status == 0 && user.start_at.present? if user.commit_status == 0 && user.start_at.present?
objective_score = calculate_student_score(exercise,user.user)[:total_score] objective_score = calculate_student_score(exercise,user.user,end_time)[:total_score]
user_sub_score = user.subjective_score user_sub_score = user.subjective_score
subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_score subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_score
total_score = objective_score + subjective_score total_score = objective_score + subjective_score

@ -70,7 +70,7 @@ class Exercise < ApplicationRecord
if unified_setting if unified_setting
self&.end_time self&.end_time
else else
user_course_group = course.course_members.find_by(user_id: user_id)&.course_group_id user_course_group = course.students.find_by(user_id: user_id)&.course_group_id
exercise_group_settings.find_by(course_group_id:user_course_group)&.end_time exercise_group_settings.find_by(course_group_id:user_course_group)&.end_time
end end
end end

@ -41,20 +41,21 @@ class ExercisePublishTask
puts "--------------------------------exercise_publish end" puts "--------------------------------exercise_publish end"
end end
def end def end
Rails.logger.info("log--------------------------------exercise_end start") Rails.logger.info("log--------------------------------exercise_end start")
puts "--------------------------------exercise_end start" puts "--------------------------------exercise_end start"
# 1。统一设置的试卷 # 1。统一设置的试卷
exercises = Exercise.includes(:exercise_users,:exercise_questions).where("exercise_status = 2 AND exercises = Exercise.includes(:exercise_questions).where("exercise_status = 2 AND end_time <= ?",Time.now + 900)
unified_setting = true AND end_time <= ?",Time.now + 900) exercises.each do |exercise|
exercises&.each do |exercise| Rails.logger.info("end_exercise_id: #{exercise.id}")
ex_type = exercise.exercise_questions.pluck(:question_type).uniq
exercise.update_column('exercise_status', 3) exercise.update_column('exercise_status', 3)
exercise.exercise_users&.each do |exercise_user| if exercise.unified_setting
begin ex_type = exercise.exercise_questions.pluck(:question_type).uniq
Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}") exercise.exercise_users.where("commit_status = 0 and start_at is not null").each do |exercise_user|
if (exercise_user&.commit_status == 0) && (exercise_user&.start_at.present?) begin
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
s_score = calculate_student_score(exercise, exercise_user.user, exercise.end_time)[:total_score]
if ex_type.include?(4) #是否包含主观题 if ex_type.include?(4) #是否包含主观题
subjective_score = exercise_user.subjective_score subjective_score = exercise_user.subjective_score
else else
@ -66,72 +67,61 @@ class ExercisePublishTask
Rails.logger.info("true: user_id:#{exercise_user.user_id}--s_score:#{s_score}") Rails.logger.info("true: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}") Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = { commit_option = {
:status => 1, :status => 1,
:commit_status => 1, :commit_status => 1,
:end_at => Time.now, :end_at => exercise.end_time,
:objective_score => s_score, :objective_score => s_score,
:score => total_score, :score => total_score,
:subjective_score => subjective_score, :subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3 :commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
} }
exercise_user.update_attributes(commit_option) exercise_user.update_attributes(commit_option)
rescue Exception => e
Rails.logger.info("rescue errors ___________________________#{e}")
next
end end
rescue Exception => e
Rails.logger.info("rescue errors ___________________________#{e}")
next
end end
end end
end end
# 2.非统一的试卷 ExerciseGroupSetting.where("end_time < ? and end_time > ?", Time.now + 900, Time.now - 900).each do |exercise_setting|
all_exercises = Exercise.includes(:exercise_group_settings,:exercise_users,:exercise_questions).where("unified_setting = false AND exercise_status = 2 AND end_time > ?",Time.now + 900)
exercise_ids = all_exercises.blank? ? "(-1)" : "(" + all_exercises.map(&:id).join(",") + ")"
ex_group_settings = ExerciseGroupSetting.where("end_time <= '#{Time.now}' and exercise_id in #{exercise_ids}")
ex_group_settings&.each do |exercise_setting|
exercise = exercise_setting.exercise exercise = exercise_setting.exercise
if exercise.end_time <= Time.now Rails.logger.info("exercise_group_setting: exercise_id:#{exercise.id}--group_settings_id:#{exercise_setting.id}")
exercise.update_column('exercise_status', 3)
end
users = exercise.course.course_members.where(:course_group_id => exercise_setting.course_group_id)
exercise_users = exercise.exercise_users.where(user_id: users.pluck(:user_id)).where("commit_status = 0 and start_at is not null")
ex_types = exercise.exercise_questions.pluck(:question_type).uniq ex_types = exercise.exercise_questions.pluck(:question_type).uniq
users = exercise.course.students.where(:course_group_id => exercise_setting.course_group_id) exercise_users.each do |exercise_user|
exercise_users = exercise.exercise_users.where(:user_id => users.pluck(:user_id)) Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
exercise_users&.each do |exercise_user|
begin begin
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}") if ex_types.include?(4) #是否包含主观题
if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? subjective_score = exercise_user.subjective_score
if ex_types.include?(4) #是否包含主观题 else
subjective_score = exercise_user.subjective_score subjective_score = -1.0
else
subjective_score = -1.0
end
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score]
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
Rails.logger.info("false: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
:end_at => Time.now,
:objective_score => s_score,
:score => total_score,
:subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
}
exercise_user.update_attributes(commit_option)
end end
s_score = calculate_student_score(exercise, exercise_user.user, exercise_setting.end_time)[:total_score]
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
Rails.logger.info("false: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
:end_at => exercise_setting.end_time,
:objective_score => s_score,
:score => total_score,
:subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
}
exercise_user.update_attributes(commit_option)
rescue Exception => e rescue Exception => e
Rails.logger.info("unified_setting_false_rescue errors ___________________________#{e}") Rails.logger.info("unified_setting_false_rescue errors ___________________________#{e}")
next next
end end
end end
end end
Rails.logger.info("log--------------------------------exercise_end end") Rails.logger.info("log--------------------------------exercise_end end")
puts "--------------------------------exercise_end end" puts "--------------------------------exercise_end end"
end end
end end

@ -110,7 +110,7 @@ namespace :poll_publish do
# # end # # end
# end # end
PollGroupSetting.where("end_time < ? and end_time > ?", Time.now + 1800, Time.now - 1800).each do |poll_setting| PollGroupSetting.where("end_time < ? and end_time > ?", Time.now + 900, Time.now - 900).each do |poll_setting|
poll = poll_setting.poll poll = poll_setting.poll
# poll.update_column('polls_status',3) # poll.update_column('polls_status',3)

Loading…
Cancel
Save