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_endtime.rake

110 lines
6.2 KiB

#coding=utf-8
namespace :homework_endtime do
desc "send a message for Job deadline"
task :message => :environment do
# 统一设置发布时间的作业
homeworks = HomeworkCommon.where("unified_setting = 1 and end_time <=? and end_time > ?", Time.now + 86400, Time.now + 82800)
homeworks.each do |homework|
if homework.tidings.where(:parent_container_type => "NearlyEnd").count == 0
course = homework.course
tid_str = ""
homework.student_works.where(:work_status => 0).find_each do |student|
tid_str += "," if tid_str != ""
tid_str += "(#{student.user_id}, #{homework.user_id}, #{homework.id}, 'HomeworkCommon', #{homework.id},
'NearlyEnd', #{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
end
# 分组设置发布时间的作业
homework_group_settings = HomeworkGroupSetting.where("end_time <=? and end_time > ?", Time.now + 86400, Time.now + 82800)
homework_group_settings.each do |homework_group|
homework = homework_group.homework_common
if homework.present?
course = homework.course
members = course.students.where(:course_group_id => homework_group.course_group_id)
if homework.tidings.where(:parent_container_type => "NearlyEnd", :user_id => members.pluck(:user_id)).count == 0
tid_str = ""
homework.student_works.where(:work_status => 0, :user_id => members.pluck(:user_id)).find_each do |member|
tid_str += "," if tid_str != ""
tid_str += "(#{member.user_id}, #{homework.user_id}, #{homework.id}, 'HomeworkCommon', #{homework.id},
'NearlyEnd', #{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
end
end
end
# 匿评截止时间快到了
task :evaluation_nearly_end => :environment do
homework_detail_manuals = HomeworkDetailManual.where("homework_detail_manuals.comment_status = 3 and evaluation_end <=?
and evaluation_end > ? ", Time.now + 86400, Time.now + 82800)
homework_detail_manuals.each do |homework_detail_manual|
homework_common = homework_detail_manual.homework_common
if homework_common.present?
# 取出分配匿评的[student_work_id,user_id]的二维数组
eva_distribution_ids = StudentWorksEvaluationDistribution.where(:student_work_id => homework_common.student_works.map(&:id)).
map{|a| [a.student_work_id, a.user_id]}
# 取出学生已评分的[student_work_id,user_id]的二维数组
work_score_ids = StudentWorksScore.where(:student_work_id => homework_common.student_works.map(&:id), :reviewer_role => 3).
map{|a| [a.student_work_id, a.user_id]}
tid_str = ""
# 已参与匿评但未完成全部匿评任务的user_id
user_ids = (eva_distribution_ids - work_score_ids).map{|a| a[1]}
user_ids.uniq.each do |user_id|
tid_str += "," if tid_str != ""
tid_str += "(#{user_id}, #{homework_common.user_id}, #{homework_common.id}, 'HomeworkCommon', #{homework_common.id},
'EvaluationNearlyEnd', #{homework_common.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
end
end
# 匿评申诉截止时间快到了
task :appeal_nearly_end => :environment do
homework_detail_manuals = HomeworkDetailManual.where("homework_detail_manuals.comment_status = 4 and appeal_time <=?
and appeal_time > ?", Time.now + 86400, Time.now + 82800)
homework_detail_manuals.each do |homework_detail_manual|
homework_common = homework_detail_manual.homework_common
if homework_common.present?
eva_distribution = StudentWorksEvaluationDistribution.where(:student_work_id => homework_common.student_works.map(&:id))
tid_str = ""
eva_distribution.pluck(:user_id).uniq.each do |user_id|
tid_str += "," if tid_str != ""
tid_str += "(#{user_id}, #{homework_common.user_id}, #{homework_common.id}, 'HomeworkCommon', #{homework_common.id},
'AppealNearlyEnd', #{homework_common.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
end
end
end