|  |  |  | @ -23,59 +23,11 @@ namespace :homework_evaluation do | 
			
		
	
		
			
				
					|  |  |  |  |           else | 
			
		
	
		
			
				
					|  |  |  |  |             student_works = homework_common.student_works.has_committed | 
			
		
	
		
			
				
					|  |  |  |  |           end | 
			
		
	
		
			
				
					|  |  |  |  |           if student_works.present? && student_works.length >= 2 | 
			
		
	
		
			
				
					|  |  |  |  |             if homework_common.homework_type == "group" | 
			
		
	
		
			
				
					|  |  |  |  |               student_work_projects = homework_common.student_works.where("work_status != 0").shuffle | 
			
		
	
		
			
				
					|  |  |  |  |               student_work_projects.each_with_index do |pro_work, pro_index| | 
			
		
	
		
			
				
					|  |  |  |  |                 n = homework_detail_manual.evaluation_num | 
			
		
	
		
			
				
					|  |  |  |  |                 n = (n < student_works.size && n != -1) ? n : student_works.size - 1 | 
			
		
	
		
			
				
					|  |  |  |  |                 work_index = -1 | 
			
		
	
		
			
				
					|  |  |  |  |                 student_works.each_with_index do |stu_work, stu_index| | 
			
		
	
		
			
				
					|  |  |  |  |                   if stu_work.group_id.to_i == pro_work.group_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 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 #更新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 | 
			
		
	
		
			
				
					|  |  |  |  |               end | 
			
		
	
		
			
				
					|  |  |  |  |             else | 
			
		
	
		
			
				
					|  |  |  |  |               student_works = student_works.shuffle | 
			
		
	
		
			
				
					|  |  |  |  |               student_works.each_with_index do |work, index| | 
			
		
	
		
			
				
					|  |  |  |  |                 user = work.user | 
			
		
	
		
			
				
					|  |  |  |  |                 n = homework_detail_manual.evaluation_num | 
			
		
	
		
			
				
					|  |  |  |  |                 n = (n < student_works.size && n != -1) ? 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 | 
			
		
	
		
			
				
					|  |  |  |  |           if student_works.size >= 2 | 
			
		
	
		
			
				
					|  |  |  |  |             HomeworkEvaluationCommentAssginJob.perform_later(homework_common.id) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 #更新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 | 
			
		
	
		
			
				
					|  |  |  |  |               end | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |             homework_detail_manual.update_column('comment_status', 3) | 
			
		
	
		
			
				
					|  |  |  |  |             # 匿评开启消息邮件通知,# 所有人 | 
			
		
	
		
			
				
					|  |  |  |  |             str = "" | 
			
		
	
		
			
				
					|  |  |  |  |             homework_common.course.course_members.pluck(:user_id).uniq.each do |user_id| | 
			
		
	
		
			
				
					|  |  |  |  |               str += "," if str != "" | 
			
		
	
		
			
				
					|  |  |  |  |               str += "('#{user_id}', '#{homework_common.user_id}', '#{homework_common.id}','HomeworkCommon','#{homework_common.id}', | 
			
		
	
		
			
				
					|  |  |  |  |                       'AnonymousComment',#{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 str != "" | 
			
		
	
		
			
				
					|  |  |  |  |               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" + str | 
			
		
	
		
			
				
					|  |  |  |  |               ActiveRecord::Base.connection.execute sql | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |           else | 
			
		
	
		
			
				
					|  |  |  |  |             #作业数小于2,启动失败, 只给老师和助教发 | 
			
		
	
		
			
				
					|  |  |  |  |             extra = "作品数量低于两个,无法开启匿评" | 
			
		
	
	
		
			
				
					|  |  |  | @ -83,20 +35,8 @@ namespace :homework_evaluation do | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |           extra = "存在尚未截止的分班,无法开启匿评" | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  |         HomeworkEvaluationStartNotifyJob.perform_later(homework_common.id, extra) | 
			
		
	
		
			
				
					|  |  |  |  |         if extra.present? | 
			
		
	
		
			
				
					|  |  |  |  |           str = '' | 
			
		
	
		
			
				
					|  |  |  |  |           homework_common.course.teachers.each do |mem| | 
			
		
	
		
			
				
					|  |  |  |  |             str += "," if str != "" | 
			
		
	
		
			
				
					|  |  |  |  |             str += "('#{mem.user.id}', '#{homework_common.user_id}', '#{homework_common.id}','HomeworkCommon','#{homework_common.id}', | 
			
		
	
		
			
				
					|  |  |  |  |                     'AnonymousCommentFail',#{homework_common.course_id},'Course',0,'System','#{extra}', | 
			
		
	
		
			
				
					|  |  |  |  |                     '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')" | 
			
		
	
		
			
				
					|  |  |  |  |           end | 
			
		
	
		
			
				
					|  |  |  |  |           if str != "" | 
			
		
	
		
			
				
					|  |  |  |  |             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, extra, created_at, | 
			
		
	
		
			
				
					|  |  |  |  |                    updated_at) values" + str | 
			
		
	
		
			
				
					|  |  |  |  |             ActiveRecord::Base.connection.execute sql | 
			
		
	
		
			
				
					|  |  |  |  |           end | 
			
		
	
		
			
				
					|  |  |  |  |           homework_detail_manual.update_attributes(:evaluation_start => nil, :evaluation_end => nil, :absence_penalty => 0, | 
			
		
	
		
			
				
					|  |  |  |  |                                                    :evaluation_num => 0, :appeal_time => nil, :appeal_penalty => 0) | 
			
		
	
		
			
				
					|  |  |  |  |           homework_common.update_attributes(:anonymous_comment => 0, :anonymous_appeal => 0) | 
			
		
	
	
		
			
				
					|  |  |  | @ -114,63 +54,15 @@ namespace :homework_evaluation do | 
			
		
	
		
			
				
					|  |  |  |  |     homework_detail_manuals.each do |homework_detail_manual| | 
			
		
	
		
			
				
					|  |  |  |  |       homework_common = homework_detail_manual.homework_common | 
			
		
	
		
			
				
					|  |  |  |  |       if homework_common.anonymous_comment #开启匿评状态才可关闭匿评 | 
			
		
	
		
			
				
					|  |  |  |  |         #计算缺评扣分 参与匿评 | 
			
		
	
		
			
				
					|  |  |  |  |         work_ids = "(" + homework_common.student_works.has_committed.map(&:id).join(",") + ")" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         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 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           #更新CourseHomeworkStatistics中该学生的待匿评数和缺评数 | 
			
		
	
		
			
				
					|  |  |  |  |           # absence_penalty_count = absence_penalty_count > 0 ? absence_penalty_count : 0 | 
			
		
	
		
			
				
					|  |  |  |  |           # 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 | 
			
		
	
		
			
				
					|  |  |  |  |         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 | 
			
		
	
		
			
				
					|  |  |  |  |             end | 
			
		
	
		
			
				
					|  |  |  |  |           end | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if homework_common.anonymous_appeal | 
			
		
	
		
			
				
					|  |  |  |  |           homework_detail_manual.update_column('comment_status', 4) | 
			
		
	
		
			
				
					|  |  |  |  |           # 申诉开启 | 
			
		
	
		
			
				
					|  |  |  |  |           eva_distribution = StudentWorksEvaluationDistribution.where(:student_work_id => homework_common.student_works.pluck(:id)) | 
			
		
	
		
			
				
					|  |  |  |  |           str = "" | 
			
		
	
		
			
				
					|  |  |  |  |           eva_distribution.pluck(:user_id).uniq.each do |user_id| | 
			
		
	
		
			
				
					|  |  |  |  |             str += "," if str != "" | 
			
		
	
		
			
				
					|  |  |  |  |             str += "(#{user_id}, #{homework_common.user_id}, #{homework_common.id}, 'HomeworkCommon', #{homework_common.id}, | 
			
		
	
		
			
				
					|  |  |  |  |                     'AnonymousAppeal', #{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 str != "" | 
			
		
	
		
			
				
					|  |  |  |  |             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" + str | 
			
		
	
		
			
				
					|  |  |  |  |             ActiveRecord::Base.connection.execute sql | 
			
		
	
		
			
				
					|  |  |  |  |           end | 
			
		
	
		
			
				
					|  |  |  |  |           # 申诉开启发送消息 | 
			
		
	
		
			
				
					|  |  |  |  |           HomeworkAnonymousAppealStartNotifyJob.perform_later(homework_common.id) | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |           homework_detail_manual.update_column('comment_status', 5) | 
			
		
	
		
			
				
					|  |  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |  |         # 匿评关闭消息通知 给所有人发 | 
			
		
	
		
			
				
					|  |  |  |  |         # 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 | 
			
		
	
		
			
				
					|  |  |  |  |         # 邮件通知 | 
			
		
	
		
			
				
					|  |  |  |  |         # Mailer.send_mail_anonymous_comment_close(homework_common).deliver | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         HomeworkAbsencePenaltyCalculationJob.perform_later(homework_common.id) | 
			
		
	
		
			
				
					|  |  |  |  |       end | 
			
		
	
		
			
				
					|  |  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |  |   end | 
			
		
	
	
		
			
				
					|  |  |  | 
 |