From 94852128f519468448c4c1eb22bff8b2520c9c39 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 11 Oct 2019 11:29:52 +0800 Subject: [PATCH 1/2] add_commit_method_to exercise_user --- app/controllers/admins/shixun_settings_controller.rb | 2 +- app/controllers/exercises_controller.rb | 3 ++- app/jobs/end_exercise_calculate_job.rb | 3 ++- app/models/exercise_user.rb | 1 + app/models/shixun.rb | 1 + app/tasks/exercise_publish_task.rb | 6 ++++-- app/views/exercises/_exercise_user.json.jbuilder | 1 + app/views/exercises/_user_exercise_info.json.jbuilder | 1 + .../20191011030441_add_commit_method_to_exercise_user.rb | 5 +++++ 9 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20191011030441_add_commit_method_to_exercise_user.rb diff --git a/app/controllers/admins/shixun_settings_controller.rb b/app/controllers/admins/shixun_settings_controller.rb index 0ccd5725d..9202ccce6 100644 --- a/app/controllers/admins/shixun_settings_controller.rb +++ b/app/controllers/admins/shixun_settings_controller.rb @@ -92,6 +92,6 @@ class Admins::ShixunSettingsController < Admins::BaseController end def setting_params - params.permit(:use_scope,:excute_time,:close,:status,:can_copy,:webssh,:hidden,:homepage_show,:task_pass,:code_hidden,:id,tag_repertoires:[]) + params.permit(:use_scope,:excute_time,:close,:status,:can_copy,:webssh,:hidden,:homepage_show,:task_pass,:code_hidden,:page_no, :id,tag_repertoires:[]) end end diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index f2e8508f0..30f09cc64 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1088,7 +1088,8 @@ class ExercisesController < ApplicationController :end_at => Time.now, :objective_score => objective_score, :score => total_score, - :subjective_score => subjective_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_attributes(commit_option) CommitExercsieNotifyJobJob.perform_later(@exercise.id, current_user.id) diff --git a/app/jobs/end_exercise_calculate_job.rb b/app/jobs/end_exercise_calculate_job.rb index 39d8bb1db..b6d8e491e 100644 --- a/app/jobs/end_exercise_calculate_job.rb +++ b/app/jobs/end_exercise_calculate_job.rb @@ -19,7 +19,8 @@ class EndExerciseCalculateJob < ApplicationJob :end_at => Time.now, :objective_score => objective_score, :score => total_score, - :subjective_score => user_sub_score + :subjective_score => user_sub_score, + :commit_method => user&.commit_method.to_i > 0 ? user&.commit_method.to_i : 4 } user.update_attributes(commit_option) end diff --git a/app/models/exercise_user.rb b/app/models/exercise_user.rb index 84f042b25..0f2e8456e 100644 --- a/app/models/exercise_user.rb +++ b/app/models/exercise_user.rb @@ -1,4 +1,5 @@ class ExerciseUser < ApplicationRecord + # commit_method 0 为默认, 1为学生的手动提交,2为倒计时结束后自动提交,3为试卷定时截止的自动提交, 4为教师手动的立即截止 belongs_to :user belongs_to :exercise diff --git a/app/models/shixun.rb b/app/models/shixun.rb index 4912ea15a..0cdb2e82b 100644 --- a/app/models/shixun.rb +++ b/app/models/shixun.rb @@ -1,5 +1,6 @@ class Shixun < ApplicationRecord include Searchable::Shixun + attr_accessor :page_no #管理员页面 实训配置更新状态时,需要接受page_no参数 # status: 0:编辑 1:申请发布 2:正式发布 3:关闭 -1:软删除 # hide_code: 隐藏代码窗口 diff --git a/app/tasks/exercise_publish_task.rb b/app/tasks/exercise_publish_task.rb index 220512664..a7b533d05 100644 --- a/app/tasks/exercise_publish_task.rb +++ b/app/tasks/exercise_publish_task.rb @@ -66,7 +66,8 @@ class ExercisePublishTask :end_at => Time.now, :objective_score => s_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 } exercise_user.update_attributes(commit_option) end @@ -108,7 +109,8 @@ class ExercisePublishTask :end_at => Time.now, :objective_score => s_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 } exercise_user.update_attributes(commit_option) end diff --git a/app/views/exercises/_exercise_user.json.jbuilder b/app/views/exercises/_exercise_user.json.jbuilder index d41fb9e20..5f00bbd70 100644 --- a/app/views/exercises/_exercise_user.json.jbuilder +++ b/app/views/exercises/_exercise_user.json.jbuilder @@ -8,6 +8,7 @@ json.user_group_name ex_user_info[:user_group_name] json.student_id ex_user_info[:student_id] json.commit_status ex_user_info[:commit_status] json.end_at ex_user_info[:end_at] +json.commit_method exercise_user&.commit_method.to_i if subjective_type == 1 json.objective_score ex_user_info[:ex_object_score] json.subjective_score ex_user_info[:ex_subject_score] diff --git a/app/views/exercises/_user_exercise_info.json.jbuilder b/app/views/exercises/_user_exercise_info.json.jbuilder index 0d21cc593..bdac3a985 100644 --- a/app/views/exercises/_user_exercise_info.json.jbuilder +++ b/app/views/exercises/_user_exercise_info.json.jbuilder @@ -9,6 +9,7 @@ json.exercise_answer_user do json.user_id ex_answerer.id json.login ex_answerer.login if exercise_user.present? + json.commit_method exercise_user&.commit_method.to_i json.start_at exercise_user.start_at json.score exercise_user.score.present? ? exercise_user.score.round(1).to_s : "0.0" end diff --git a/db/migrate/20191011030441_add_commit_method_to_exercise_user.rb b/db/migrate/20191011030441_add_commit_method_to_exercise_user.rb new file mode 100644 index 000000000..060e5eb5f --- /dev/null +++ b/db/migrate/20191011030441_add_commit_method_to_exercise_user.rb @@ -0,0 +1,5 @@ +class AddCommitMethodToExerciseUser < ActiveRecord::Migration[5.2] + def change + add_column :exercise_users, :commit_method, :integer, :default => 0 + end +end From 0629bc15af5cf4801e873f9bca2b052d248a81d7 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 11 Oct 2019 13:49:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=AF=95=E5=8D=B7=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercises_controller.rb | 35 ++++++++++++++++++------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 8f7d43196..e76148f20 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1077,12 +1077,22 @@ class ExercisesController < ApplicationController def commit_exercise ActiveRecord::Base.transaction do begin - if @user_course_identity > Course::ASSISTANT_PROFESSOR #为学生时 - objective_score = calculate_student_score(@exercise,current_user)[: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 = { + can_commit_exercise = false + if (@user_course_identity > Course::ASSISTANT_PROFESSOR) && params[:commit_method].present? #为学生时 + if params[:commit_method].to_i == 2 #自动提交时 + user_left_time = get_exercise_left_time(@exercise,current_user) + if user_left_time.to_i <= 0 + can_commit_exercise = true + end + else + can_commit_exercise = true + end + if can_commit_exercise + objective_score = calculate_student_score(@exercise,current_user)[: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, @@ -1090,10 +1100,15 @@ class ExercisesController < ApplicationController :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_attributes(commit_option) - CommitExercsieNotifyJobJob.perform_later(@exercise.id, current_user.id) - normal_status(0,"试卷提交成功!") + } + @answer_committed_user.update_attributes(commit_option) + CommitExercsieNotifyJobJob.perform_later(@exercise.id, current_user.id) + normal_status(0,"试卷提交成功!") + else + normal_status(-1,"提交失败,请重试!") + end + else + normal_status(-1,"提交失败,请重试!") end rescue Exception => e uid_logger_error(e.message)