2015-09-23 17:25:38 +08:00
#coding=utf-8
namespace :homework_evaluation do
2015-09-23 17:33:06 +08:00
desc " start and end evaluation "
2015-09-23 17:25:38 +08:00
def get_assigned_homeworks ( student_works , n , index )
student_works += student_works
student_works [ index + 1 .. index + n ]
end
#自动开启匿评的任务
task :start_evaluation = > :environment do
homework_detail_manuals = HomeworkDetailManual . where ( " evaluation_start = ' #{ Date . today } ' " )
homework_detail_manuals . each do | homework_detail_manual |
homework_common = homework_detail_manual . homework_common
if homework_detail_manual . comment_status == 1 #新建状态才可开启匿评
student_works = homework_common . student_works
if student_works && student_works . size > = 2
student_works . each_with_index do | work , index |
user = work . user
n = homework_detail_manual . evaluation_num
n = n < student_works . size ? n : student_works . size - 1
assigned_homeworks = get_assigned_homeworks ( student_works , n , index )
assigned_homeworks . each do | h |
student_works_evaluation_distributions = StudentWorksEvaluationDistribution . new ( user_id : user . id , student_work_id : h . id )
student_works_evaluation_distributions . save
end
end
homework_detail_manual . update_column ( 'comment_status' , 2 )
2015-09-24 16:16:37 +08:00
# 匿评开启消息邮件通知,# 所有人
2015-09-29 10:25:37 +08:00
#send_message_anonymous_comment(homework_common, 2)
course = homework_common . course
course . members . each do | m |
homework_common . course_messages << CourseMessage . new ( :user_id = > m . user_id , :course_id = > course . id , :viewed = > false , :status = > 2 )
end
2015-09-24 16:16:37 +08:00
# 邮件通知
2015-09-29 15:59:48 +08:00
Mailer . send_mail_anonymous_comment_open ( homework_common ) . deliver
2015-09-23 17:25:38 +08:00
else
2015-09-24 16:16:37 +08:00
#作业数小于2, 启动失败, 只给老师发
# status==4 发送失败
# 匿评开启消息邮件通知,# 所有人
course = homework_common . course
course . members . each do | m |
if m . user . allowed_to? ( :as_teacher , course )
homework_common . course_messages << CourseMessage . new ( :user_id = > m . user_id , :course_id = > course . id , :viewed = > false , :status = > 4 )
end
end
# 邮件通知
2015-09-29 09:45:41 +08:00
Mailer . send_mail_anonymous_comment_fail ( homework_common ) . deliver
2015-09-23 17:25:38 +08:00
end
end
end
end
#自动关闭匿评的任务
task :end_evaluation = > :environment do
homework_detail_manuals = HomeworkDetailManual . where ( " evaluation_end = ' #{ Date . today } ' " )
homework_detail_manuals . each do | homework_detail_manual |
homework_common = homework_detail_manual . homework_common
if homework_detail_manual . comment_status == 2 #开启匿评状态才可关闭匿评
#计算缺评扣分
work_ids = " ( " + homework_common . student_works . map ( & :id ) . join ( " , " ) + " ) "
homework_common . student_works . each do | student_work |
absence_penalty_count = student_work . user . student_works_evaluation_distributions . where ( " student_work_id IN #{ work_ids } " ) . count - student_work . user . student_works_scores . where ( " student_work_id IN #{ work_ids } " ) . count
student_work . absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manuals . absence_penalty : 0
student_work . save
end
homework_detail_manual . update_column ( 'comment_status' , 3 )
2015-09-24 16:16:37 +08:00
# 匿评关闭消息通知 给所有人发
2015-09-29 15:59:48 +08:00
course = homework_common . course
course . members . each do | m |
homework_common . course_messages << CourseMessage . new ( :user_id = > m . user_id , :course_id = > course . id , :viewed = > false , :status = > 3 )
end
2015-09-24 16:16:37 +08:00
# 邮件通知
Mailer . send_mail_anonymous_comment_close ( homework_common ) . deliver
2015-09-23 17:25:38 +08:00
end
end
end
end