Merge branch 'dev_chen' into dev_aliyun

schedule_job
cxt 5 years ago
commit e62d39094a

@ -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

@ -816,7 +816,7 @@ class ExercisesController < ApplicationController
ex_user_ids = exercise_users.pluck(:id)
EndExerciseCalculateJob.perform_later(ex_user_ids, exercise, Time.now.to_s)
EndExerciseCalculateJob.perform_later(ex_user_ids, exercise, Time.now.to_s, true, 4)
# exercise_users.each do |user|
# if user.commit_status == 0 && user.start_at.present?
# objective_score = calculate_student_score(exercise,user.user)[:total_score]
@ -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
@ -1197,10 +1190,19 @@ class ExercisesController < ApplicationController
@exercise_users_size = @exercise_users_list.size
if @exercise.time > 0
start_time = Time.current - @exercise.time * 60
ex_user_ids = @exercise_users_list.where("start_at <= '#{Time.at(start_time)}' and commit_status = 0").pluck(:user_id)
if ex_user_ids.size > 0
EndExerciseCalculateJob.perform_later(ex_user_ids, @exercise, Time.now.to_s, false, 2)
end
end
# 分页
@page = params[:page] || 1
@limit = params[:limit] || 20
@exercise_users_list = @exercise_users_list.page(@page).per(@limit)
else
@exercise_users_list = []
@export_ex_users = @exercise_users_list

@ -961,4 +961,36 @@ 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)
end_time = start_time > exercise_end_time ? exercise_end_time : start_time
commit_method = start_time > exercise_end_time ? 3 : 2
else
commit_method = 3
end_time = exercise_end_time
end
else
commit_method = 1
end
commit_time = commit_time.present? && end_time > commit_time ? commit_time : end_time
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

@ -5,10 +5,12 @@ class EndExerciseCalculateJob < ApplicationJob
queue_as :default
def perform(ex_user_ids,exercise,end_time)
def perform(ex_user_ids,exercise,end_time,work_time,commit_method)
exercise_users = ExerciseUser.where(id: ex_user_ids)
exercise_users.each do |user|
if user.commit_status == 0 && user.start_at.present?
end_at = work_time ? end_time : Time.at(user.start_at + exercise.time * 60)
objective_score = calculate_student_score(exercise,user.user,end_time.to_time)[:total_score]
user_sub_score = user.subjective_score
subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_score
@ -16,11 +18,11 @@ class EndExerciseCalculateJob < ApplicationJob
commit_option = {
:status => 1,
:commit_status => 1,
:end_at => Time.now,
:end_at => end_at,
:objective_score => objective_score,
:score => total_score,
:subjective_score => user_sub_score,
:commit_method => user&.commit_method.to_i > 0 ? user&.commit_method.to_i : 4
:commit_method => user&.commit_method.to_i > 0 ? user&.commit_method.to_i : commit_method
}
user.update_attributes(commit_option)
end

@ -0,0 +1,3 @@
class Collection < ApplicationRecord
belongs_to :user
end

@ -0,0 +1,13 @@
class CreateCollections < ActiveRecord::Migration[5.2]
def change
create_table :collections do |t|
t.references :user, index: true
t.integer :container_id
t.string :container_type
t.timestamps
end
add_index :collections, [:container_type, :container_id]
end
end

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe Collection, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
Loading…
Cancel
Save