You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/lib/tasks/homework_publishtime.rake

253 lines
14 KiB

#coding=utf-8
namespace :homework_publishtime do
desc "start publish homework and end homework"
# 作业的分班设置时间
def homework_group_setting homework, group_id
setting = nil
if homework.homework_group_settings.where(course_group_id: group_id).first
setting = homework.homework_group_settings.where(course_group_id: group_id).first
else
setting = homework
end
setting
end
task :publish => :environment do
Rails.logger.info("log--------------------------------homework_publish start")
homework_commons = HomeworkCommon.includes(:homework_detail_manual).where(homework_detail_manuals: {comment_status: 0})
.where("publish_time is not null and publish_time <= '#{Time.now}'")
homework_commons.each do |homework|
homework_detail_manual = homework.homework_detail_manual
homework_detail_manual.update_column('comment_status', 1)
# 统一设置的作业在这发消息,非统一设置的只给有全部分班权限的老师发
if homework.unified_setting
HomeworkPublishUpdateWorkStatusJob.perform_later(nil, homework.id)
HomeworkCommonPushNotifyJob.perform_later(homework.id, nil)
else
course = homework.course
teachers = course.teachers.where.not(id: course.teacher_course_groups.select(:course_member_id))
tid_str = ""
teachers.find_each do |member|
tid_str += "," if tid_str != ""
tid_str += "(#{member.user_id}, #{homework.user_id}, #{homework.id}, 'HomeworkCommon', #{homework.id}, 'HomeworkPublish',
#{course.id}, 'Course', 0, 'HomeworkCommon', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}',
'#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
end
if tid_str != ""
tid_sql = "insert into tidings (user_id, trigger_user_id, container_id, container_type, parent_container_id,
parent_container_type, belong_container_id, belong_container_type, viewed, tiding_type, created_at,
updated_at) values" + tid_str
ActiveRecord::Base.connection.execute tid_sql
end
end
homework.course_acts << CourseActivity.new(user_id: homework.user_id, course_id: homework.course_id) if homework.course_acts.exists?
end
# 分组设置发布时间的作业
homework_group_settings = HomeworkGroupSetting.where("publish_time < ? and publish_time > ?", Time.now + 900, Time.now - 900)
homework_group_settings.each do |homework_group|
homework = homework_group.homework_common
if homework.present?
HomeworkPublishUpdateWorkStatusJob.perform_now([homework_group.id], homework.id)
HomeworkCommonPushNotifyJob.perform_later(homework.id, [homework_group.id])
end
end
Rails.logger.info("log--------------------------------homework_publish end")
end
task :end => :environment do
Rails.logger.info("log--------------------------------homework_publish_end start")
homework_commons = HomeworkCommon.includes(:homework_detail_manual).where(homework_detail_manuals: {comment_status: 1})
.where("homework_type = 4 and end_time <= '#{Time.now}'")
homework_commons.each do |homework|
# homework_challenge_settings = homework.homework_challenge_settings
homework.homework_detail_manual.update_column("comment_status", 2)
if homework.allow_late
if homework.unified_setting
student_works = homework.student_works.where("work_status != 0")
# none_student_works = homework.student_works.where("work_status = 0")
else
setting = homework.homework_group_settings.where(end_time: homework.end_time)
unless setting.blank?
users = homework.course.students.where(course_group_id: setting.pluck(:course_group_id))
student_works = homework.student_works.where("work_status != 0").where(user_id: users.pluck(:user_id))
# none_student_works = homework.student_works.where("work_status = 0 and user_id in #{user_ids}")
end
end
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
end
=begin
student_works.each do |student_work|
member = Member.find_by_sql("select course_group_id from members where course_id = #{homework.course_id} and
user_id = #{student_work.user_id}").first
setting_time = homework_group_setting homework, member.try(:course_group_id)
games = student_work.myshixun.games.where(:challenge_id => homework_challenge_settings.map(&:challenge_id))
unless games.select{|game| game.status == 2}.size == games.size
student_work.work_status = 2
student_work.late_penalty = homework.late_penalty
score = student_work.final_score.to_i - student_work.late_penalty
student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f)
student_work.cost_time = homework.allow_late ? student_work.cost_time : (Time.now.to_i - setting_time.publish_time.to_i)
sql = "update student_works set late_penalty = #{student_work.late_penalty}, work_status = 2, work_score =
#{student_work.work_score}, cost_time = #{student_work.cost_time} where id = #{student_work.id}"
ActiveRecord::Base.connection.execute sql
end
# myshixun = student_work.myshixun
# final_score = 0
# homework_challenge_settings.each do |setting|
# game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
# unless game.nil?
# final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ?
# setting.score : 0)
# end
# end
end
=end
=begin
none_student_works.each do |student_work|
myshixun = Myshixun.where(:shixun_id => homework.homework_commons_shixuns.shixun_id, :user_id => student_work.user_id).first
if myshixun
student_work.update_attributes(:work_status => myshixun.is_complete? ? 1 : 2, :late_penalty => myshixun.is_complete? ? 0 :
homework.late_penalty, :commit_time => myshixun.created_at, :update_time => myshixun.updated_at, :myshixun_id => myshixun.id)
student_work.late_penalty = myshixun.is_complete? ? 0 : homework.late_penalty
final_score = 0
homework_challenge_settings.each do |setting|
game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
unless game.nil?
final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ?
setting.score : 0)
end
end
student_work.update_column("final_score", format("%.2f",final_score.to_f))
score = student_work.final_score - student_work.late_penalty
student_work.update_column("work_score", format("%.2f",(score < 0 ? 0 : score).to_f)) if score
end
end
=end
end
all_homework_commons = HomeworkCommon.includes(:homework_detail_manual).where(homework_detail_manuals: {comment_status: 1})
.where("homework_type = 4 and end_time > '#{Time.now}'")
homework_ids = all_homework_commons.blank? ? "(-1)" : "(" + all_homework_commons.map(&:id).join(",") + ")"
HomeworkGroupSetting.where("end_time <= '#{Time.now}' and homework_common_id in #{homework_ids}").each do |homework_setting|
homework = homework_setting.homework_common
if homework.allow_late
# homework_challenge_settings = homework.homework_challenge_settings
users = homework.course.students.where(:course_group_id => homework_setting.course_group_id)
student_works = homework.student_works.where("work_status != 0").where(user_id: users.pluck(:user_id))
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 # 分班设置的不需要另外算效率分
end
# none_student_works = homework.student_works.where("work_status = 0 and user_id in #{user_ids}")
=begin
student_works.each do |student_work|
games = student_work.myshixun.games.where(:challenge_id => homework_challenge_settings.map(&:challenge_id))
unless games.select{|game| game.status == 2}.size == games.size
student_work.late_penalty = homework.late_penalty
student_work.work_status = 2
score = student_work.final_score.to_i - student_work.late_penalty
student_work.work_score = format("%.2f",(score < 0 ? 0 : score).to_f)
student_work.cost_time = homework.allow_late ? student_work.cost_time : (Time.now.to_i - homework_setting.publish_time.to_i)
sql = "update student_works set late_penalty = #{student_work.late_penalty}, work_status = 2, work_score =
#{student_work.work_score} where id = #{student_work.id}"
ActiveRecord::Base.connection.execute sql
end
# myshixun = student_work.myshixun
# final_score = 0
# homework_challenge_settings.each do |setting|
# game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
# unless game.nil?
# final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ?
# setting.score : 0)
# end
# end
end
=end
=begin
none_student_works.each do |student_work|
myshixun = Myshixun.where(:shixun_id => homework.homework_commons_shixuns.shixun_id, :user_id => student_work.user_id).first
if myshixun
student_work.update_attributes(:work_status => myshixun.is_complete? ? 1 : 2, :late_penalty => myshixun.is_complete? ? 0 : homework.late_penalty, :commit_time => myshixun.created_at, :update_time => myshixun.updated_at, :myshixun_id => myshixun.id)
student_work.late_penalty = myshixun.is_complete? ? 0 : homework.late_penalty
final_score = 0
homework_challenge_settings.each do |setting|
game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
unless game.nil?
final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ? setting.score : 0)
end
end
student_work.update_column("final_score", format("%.2f",final_score.to_f))
score = student_work.final_score - student_work.late_penalty
student_work.update_column("work_score", format("%.2f",(score < 0 ? 0 : score).to_f)) if score
end
end
=end
end
Rails.logger.info("log--------------------------------homework_publish_end end")
end
task :archive => :environment do
Rails.logger.info("log--------------------------------homework_archive start")
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
=begin
homework_detail_manual = homework.homework_detail_manual
homework_detail_manual.update_column('comment_status', 6)
if homework.homework_type == 4 && homework.allow_late
homework_challenge_settings = homework.homework_challenge_settings
homework.student_works.where("work_status != 0").each do |student_work|
myshixun = student_work.myshixun
final_score = 0
homework_challenge_settings.each do |setting|
game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
unless game.nil?
final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ? setting.score : 0)
end
end
student_work.update_column("final_score", format("%.2f",final_score.to_f))
score = student_work.final_score - student_work.late_penalty
student_work.update_column("work_score", format("%.2f",(score < 0 ? 0 : score).to_f))
end
homework.student_works.where("work_status = 0").each do |student_work|
myshixun = Myshixun.where(:shixun_id => homework.homework_commons_shixuns.shixun_id, :user_id => student_work.user_id).first
if myshixun
student_work.update_attributes(:work_status => 2, :late_penalty => homework.late_penalty, :commit_time => myshixun.created_at, :update_time => myshixun.updated_at, :myshixun_id => myshixun.id)
student_work.late_penalty = homework.late_penalty
final_score = 0
homework_challenge_settings.each do |setting|
game = myshixun.games.where(:challenge_id => setting.challenge_id, :status => 2).first
unless game.nil?
final_score += homework.homework_detail_manual.answer_open_evaluation ? setting.score : (game.final_score >= 0 ? setting.score : 0)
end
end
student_work.update_column("final_score", format("%.2f",final_score.to_f))
score = student_work.final_score - student_work.late_penalty
student_work.update_column("work_score", format("%.2f",(score < 0 ? 0 : score).to_f)) if score
end
end
end
=end
end
Rails.logger.info("log--------------------------------homework_archive end")
end
end