diff --git a/app/controllers/exercise_answers_controller.rb b/app/controllers/exercise_answers_controller.rb index 31df2291e..12a18d0a0 100644 --- a/app/controllers/exercise_answers_controller.rb +++ b/app/controllers/exercise_answers_controller.rb @@ -102,18 +102,7 @@ class ExerciseAnswersController < ApplicationController normal_status(-1,"已提交/已结束的试卷不允许修改!") 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)) - 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 - total_score = objective_score + subjective_score - commit_option = { - :status => 1, - :commit_status => 1, - :end_at => Time.now, - :objective_score => objective_score, - :score => total_score, - :subjective_score => subjective_score - } - @exercise_user.update!(commit_option) + commit_exercise_user @exercise, @exercise_user normal_status(-1,"试卷提交时间已截止!") end end diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 73bd07954..3717ec18e 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -982,11 +982,17 @@ class ExercisesController < ApplicationController @shixun_undo = 0 @ques_undo = 0 ex_answer_time = @exercise.time.to_i + exercise_user = @exercise.exercise_users.find_by(user_id: current_user.id) if ex_answer_time > 0 #有剩余时间的时候 user_left_time = get_exercise_left_time(@exercise, current_user) @ex_end_time = Time.now + user_left_time.to_i.seconds + + # 提交用户试卷 + commit_exercise_user @exercise, exercise_user if user_left_time.nil? else @ex_end_time = @exercise.get_exercise_end_time(current_user.id) + + commit_exercise_user @exercise, exercise_user if @ex_end_time < Time.now end # @ex_end_time = @exercise.get_exercise_end_time(current_user.id) # if ex_answer_time > 0 @@ -1033,20 +1039,7 @@ class ExercisesController < ApplicationController can_commit_exercise = true end if can_commit_exercise - objective_score = calculate_student_score(@exercise, current_user, Time.now)[:total_score] - subjective_score = @answer_committed_user.subjective_score - total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score - total_score = objective_score + total_score_subjective_score - commit_option = { - :status => 1, - :commit_status => 1, - :end_at => Time.now, - :objective_score => objective_score, - :score => total_score, - :subjective_score => subjective_score, - :commit_method => @answer_committed_user&.commit_method.to_i > 0 ? @answer_committed_user&.commit_method.to_i : params[:commit_method].to_i - } - @answer_committed_user.update!(commit_option) + commit_exercise_user @exercise, @answer_committed_user, Time.now CommitExercsieNotifyJobJob.perform_later(@exercise.id, current_user.id) normal_status(0, "试卷提交成功!") else diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index 0ec1f6cb3..845aeb583 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -961,4 +961,35 @@ module ExercisesHelper def content_line(content) content.split(/\r?\n/).length + 1 end + + def commit_exercise_user exercise, exercise_user, commit_time = nil + exercise_end_time = exercise.get_exercise_end_time(exercise_user.user_id) #没有考虑分班的情况 + objective_score = calculate_student_score(exercise, exercise_user.user, exercise_end_time)[:total_score] + subjective_score = exercise_user.subjective_score < 0.0 ? 0.0 : exercise_user.subjective_score + total_score = objective_score + subjective_score + + if commit_time.nil? + if exercise.time > 0 + start_time = Time.at(exercise_user.start_at + exercise.time * 60) + commit_time = start_time > exercise_end_time ? exercise_end_time : start_time + commit_method = start_time > exercise_end_time ? 3 : 2 + else + commit_method = 3 + commit_time = exercise_end_time + end + else + commit_method = 1 + end + + commit_option = { + :status => 1, + :commit_status => 1, + :end_at => commit_time, + :objective_score => objective_score, + :score => total_score, + :subjective_score => subjective_score, + :commit_method => commit_method + } + exercise_user.update!(commit_option) + end end