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
2016-10-15 16:09:21 +08:00
Rails . logger . info ( " log--------------------------------start_evaluation start " )
puts " --------------------------------start_evaluation start "
2015-09-23 17:25:38 +08:00
homework_detail_manuals = HomeworkDetailManual . where ( " evaluation_start = ' #{ Date . today } ' " )
homework_detail_manuals . each do | homework_detail_manual |
homework_common = homework_detail_manual . homework_common
2015-11-04 10:54:09 +08:00
if homework_common . anonymous_comment == 0 && homework_detail_manual . comment_status == 1 #新建状态才可开启匿评
2016-07-08 13:17:14 +08:00
student_works = homework_common . student_works . has_committed
2015-09-23 17:25:38 +08:00
if student_works && student_works . size > = 2
2016-11-02 16:46:47 +08:00
if homework_common . homework_type == 3
student_work_projects = homework_common . student_work_projects . where ( " student_work_id is not null " )
student_work_projects . each_with_index do | pro_work , pro_index |
n = homework_detail_manual . evaluation_num
2016-11-03 10:25:53 +08:00
n = ( n < student_works . size && n != - 1 ) ? n : student_works . size - 1
2016-11-02 16:46:47 +08:00
work_index = - 1
student_works . each_with_index do | stu_work , stu_index |
if stu_work . id . to_i == pro_work . student_work_id . to_i
work_index = stu_index
end
end
assigned_homeworks = get_assigned_homeworks ( student_works , n , work_index )
assigned_homeworks . each do | h |
student_works_evaluation_distributions = StudentWorksEvaluationDistribution . new ( user_id : pro_work . user_id , student_work_id : h . id )
student_works_evaluation_distributions . save
end
2017-02-10 14:35:43 +08:00
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics . find_by_course_id_and_user_id ( homework_common . course_id , pro_work . user_id )
course_statistics . update_attribute ( 'un_evaluation_work_num' , course_statistics . un_evaluation_work_num + n ) if course_statistics
2016-11-02 16:46:47 +08:00
end
else
2015-12-11 14:57:09 +08:00
student_works . each_with_index do | work , index |
user = work . user
n = homework_detail_manual . evaluation_num
2016-11-03 10:25:53 +08:00
n = ( n < student_works . size && n != - 1 ) ? n : student_works . size - 1
2015-12-11 14:57:09 +08:00
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
2017-02-10 14:35:43 +08:00
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics . find_by_course_id_and_user_id ( homework_common . course_id , user . id )
course_statistics . update_attribute ( 'un_evaluation_work_num' , course_statistics . un_evaluation_work_num + n ) if course_statistics
2015-09-23 17:25:38 +08:00
end
2016-11-02 16:46:47 +08:00
end
2015-09-23 17:25:38 +08:00
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
# 邮件通知
2016-12-23 14:29: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
# 邮件通知
2016-12-23 14:29:48 +08:00
# Mailer.send_mail_anonymous_comment_fail(homework_common).deliver
2015-09-23 17:25:38 +08:00
end
end
end
2016-10-15 16:09:21 +08:00
Rails . logger . info ( " log--------------------------------start_evaluation end " )
puts " --------------------------------start_evaluation end "
2015-09-23 17:25:38 +08:00
end
#自动关闭匿评的任务
task :end_evaluation = > :environment do
2015-12-01 09:22:01 +08:00
homework_detail_manuals = HomeworkDetailManual . where ( " evaluation_end = ' #{ Date . today } ' " )
2015-09-23 17:25:38 +08:00
homework_detail_manuals . each do | homework_detail_manual |
homework_common = homework_detail_manual . homework_common
2015-11-04 10:54:09 +08:00
if homework_common . anonymous_comment == 0 && homework_detail_manual . comment_status == 2 #开启匿评状态才可关闭匿评
2016-12-02 10:04:11 +08:00
#计算缺评扣分 参与匿评
2016-07-08 13:17:14 +08:00
work_ids = " ( " + homework_common . student_works . has_committed . map ( & :id ) . join ( " , " ) + " ) "
2016-12-02 10:04:11 +08:00
homework_common . student_works . where ( " work_status != 0 " ) . 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 } and reviewer_role = 3 " ) . count
student_work . absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manual . absence_penalty : 0
student_work . save
2017-02-10 14:35:43 +08:00
#更新CourseHomeworkStatistics中该学生的待匿评数和缺评数
course_statistics = CourseHomeworkStatistics . find_by_course_id_and_user_id ( homework_common . course_id , student_work . user_id )
course_statistics . update_attribute ( 'un_evaluation_work_num' , ( course_statistics . un_evaluation_work_num - absence_penalty_count ) < 0 ? 0 : ( course_statistics . un_evaluation_work_num - absence_penalty_count ) ) if course_statistics
course_statistics . update_attribute ( 'absence_evaluation_work_num' , course_statistics . absence_evaluation_work_num + absence_penalty_count ) if course_statistics
2016-12-02 10:04:11 +08:00
end
# 未参与匿评
if homework_common . homework_detail_manual . no_anon_penalty == 0
all_dis_eva = StudentWorksEvaluationDistribution . where ( " student_work_id IN #{ work_ids } " )
has_sw_count = all_dis_eva . select ( " distinct user_id " ) . count
anon_count = all_dis_eva . count / has_sw_count
homework_common . student_works . where ( " work_status != 0 " ) . each do | student_work |
if student_work . user . student_works_evaluation_distributions . where ( " student_work_id IN #{ work_ids } " ) . count == 0
student_work . absence_penalty = homework_detail_manual . absence_penalty * anon_count
student_work . save
2016-10-09 09:16:05 +08:00
end
end
2015-09-23 17:25:38 +08:00
end
2016-12-02 10:04:11 +08:00
2015-09-23 17:25:38 +08:00
homework_detail_manual . update_column ( 'comment_status' , 3 )
2015-09-24 16:16:37 +08:00
# 匿评关闭消息通知 给所有人发
2015-12-01 09:22:01 +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
# 邮件通知
2016-12-23 14:29:48 +08:00
# Mailer.send_mail_anonymous_comment_close(homework_common).deliver
2015-09-23 17:25:38 +08:00
end
end
end
end