From e540aa155828cf6feecaeba8f22aa2b10a85b0a0 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 27 Sep 2019 15:14:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AB=8B=E5=8D=B3=E6=88=AA?= =?UTF-8?q?=E6=AD=A2=E5=90=8E=EF=BC=8C=E7=BB=9F=E8=AE=A1=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=BB=A9=E7=9A=84=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 38 ++++++++++++++----------- app/jobs/end_exercise_calculate_job.rb | 29 +++++++++++++++++++ 2 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 app/jobs/end_exercise_calculate_job.rb diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 3be35345e..8a02ba06f 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -844,23 +844,27 @@ class ExercisesController < ApplicationController exercise_users = exercise.exercise_users exercise.update_attributes(:exercise_status => 3, :end_time => Time.now,:unified_setting => true) end - exercise_users.each do |user| - if user.commit_status == 0 && user.start_at.present? - objective_score = calculate_student_score(exercise,user.user)[:total_score] - user_sub_score = user.subjective_score - subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_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 => user_sub_score - } - user.update_attributes(commit_option) - end - end + + ex_user_ids = exercise_users.pluck(:id) + + EndExerciseCalculateJob.perform_later(ex_user_ids,exercise) + # exercise_users.each do |user| + # if user.commit_status == 0 && user.start_at.present? + # objective_score = calculate_student_score(exercise,user.user)[:total_score] + # user_sub_score = user.subjective_score + # subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_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 => user_sub_score + # } + # user.update_attributes(commit_option) + # end + # end end end normal_status(0, "试卷截止成功!") diff --git a/app/jobs/end_exercise_calculate_job.rb b/app/jobs/end_exercise_calculate_job.rb new file mode 100644 index 000000000..39d8bb1db --- /dev/null +++ b/app/jobs/end_exercise_calculate_job.rb @@ -0,0 +1,29 @@ +class EndExerciseCalculateJob < ApplicationJob + + include ExercisesHelper + include GitHelper + + queue_as :default + + def perform(ex_user_ids,exercise) + exercise_users = ExerciseUser.where(id: ex_user_ids) + exercise_users.each do |user| + if user.commit_status == 0 && user.start_at.present? + objective_score = calculate_student_score(exercise,user.user)[:total_score] + user_sub_score = user.subjective_score + subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_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 => user_sub_score + } + user.update_attributes(commit_option) + end + end + end + +end