作业截止时计算效率分的调整

dev_forum
cxt 5 years ago
parent d20ed3e4ee
commit c1ad4c0585

@ -1117,7 +1117,7 @@ class HomeworkCommonsController < ApplicationController
=end
# 更新所有学生的效率分(重新取homework确保是更新后的)
HomeworksService.new.update_student_eff_score HomeworkCommon.find_by(id: homework.id) if !homework.allow_late && homework.end_time <= time
HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time
end
end
homework.save!

@ -0,0 +1,32 @@
class HomeworkEndUpdateScoreJob < ApplicationJob
# 不允许补交的作业截止后,或者补交截止后需要重新计算一次作业成绩
queue_as :score
def perform(*args)
homework = HomeworkCommon.find_by(id: homework_id)
return if homework.blank?
course = homework.course
return if course.blank?
if homework.unified_setting
student_works = homework.student_works
user_ids = course.students.pluck(:user_id)
else
user_ids = course.students.where(course_group_id: homework.published_settings.pluck(:course_group_id)).pluck(:user_id)
student_works = homework.student_works.where(user_id: user_ids)
end
myshixuns = Myshixun.where(shixun_id: params[:shixun_id], user_id: user_ids).
includes(:games).where(games: {challenge_id: homework.homework_challenge_settings.pluck(:challenge_id)})
challenge_settings = homework.homework_challenge_settings
myshixuns.find_each(batch_size: 100) do |myshixun|
work = student_works.select{|work| work.user_id == myshixun.user_id}.first
if work && myshixun && (work.update_time.nil? || work.update_time < myshixun.updated_at)
games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id))
HomeworksService.new.update_myshixun_work_score work, myshixun, games, homework, challenge_settings
end
end
HomeworksService.new.update_student_eff_score homework
homework.update_attribute('calculation_time', Time.now)
end
end

@ -84,7 +84,8 @@ namespace :homework_publishtime do
student_works.joins(:myshixun).where("myshixuns.status != 1").update_all(late_penalty: homework.late_penalty) if student_works.present?
else
HomeworksService.new.update_student_eff_score homework
HomeworkEndUpdateScoreJob.perform_later(homework.id)
# HomeworksService.new.update_student_eff_score homework
end
=begin
@ -206,7 +207,8 @@ namespace :homework_publishtime do
homework_commons = HomeworkCommon.joins(:homework_detail_manual).where("homework_type = 4 and allow_late = 1 and
late_time <= ? and late_time > ? and homework_detail_manuals.comment_status != 6", Time.now, Time.now - 900)
homework_commons.each do |homework|
HomeworksService.new.update_student_eff_score homework
# HomeworksService.new.update_student_eff_score homework
HomeworkEndUpdateScoreJob.perform_later(homework.id)
=begin
homework_detail_manual = homework.homework_detail_manual

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