parent
d20ed3e4ee
commit
c1ad4c0585
@ -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
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe HomeworkEndUpdateScoreJob, type: :job do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in new issue