From 6ccc53b089248693e9d4515d5f8aadc42d9bb832 Mon Sep 17 00:00:00 2001 From: cxt Date: Fri, 10 Feb 2017 17:04:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E7=BB=9F=E8=AE=A1=E4=B8=AD?= =?UTF-8?q?=E2=80=9C=E6=B4=BB=E8=B7=83=E5=BA=A6=E2=80=9D=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 2 +- app/models/students_for_course.rb | 23 ++++++++++++++++++- ...10082105_update_course_contribute_score.rb | 22 ++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20170210082105_update_course_contribute_score.rb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e27d8c026..2f47fb808 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1380,7 +1380,7 @@ class CoursesController < ApplicationController sql = "SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1) AS act_score, message_num, message_reply_num, news_reply_num, news_num, resource_num, journal_num, homework_journal_num, ccs.user_id FROM course_contributor_scores ccs JOIN students_for_courses ON students_for_courses.course_id = ccs.course_id AND students_for_courses.student_id = ccs.user_id - WHERE ccs.course_id = #{@course.id} HAVING act_score != 0 ORDER BY #{@type} #{@order}, act_score #{@order}" + WHERE ccs.course_id = #{@course.id} ORDER BY #{@type} #{@order}, act_score #{@order}" @members = CourseContributorScore.find_by_sql(sql) elsif params[:tab] == "2" diff --git a/app/models/students_for_course.rb b/app/models/students_for_course.rb index 4027cd7db..5ef2922b0 100644 --- a/app/models/students_for_course.rb +++ b/app/models/students_for_course.rb @@ -10,7 +10,7 @@ class StudentsForCourse < ActiveRecord::Base validates_uniqueness_of :student_id, :scope => :course_id after_destroy :delete_student_works, :delete_course_homework_statistic - after_create :recovery_student_works, :create_student_works, :create_course_homework_statistic + after_create :recovery_student_works, :create_student_works, :create_course_homework_statistic, :create_course_contribute_score #退出班级或删除学生时隐藏学生的作品 def delete_student_works @@ -72,4 +72,25 @@ class StudentsForCourse < ActiveRecord::Base def delete_course_homework_statistic CourseHomeworkStatistics.where(:user_id => self.student_id, :course_id => self.course_id).destroy_all end + + def create_course_contribute_score + ccs = CourseContributorScore.where("course_id =? and user_id =?", self.course_id, self.student_id).first + unless ccs + course = self.course + user_id = self.student_id + message_num = Message.find_by_sql("select DISTINCT me.* from messages me, boards b where b.id = me.board_id and b.course_id = #{course.id} and b.project_id = '-1' and me.author_id = #{user_id} and me.parent_id is null;").count + message_reply_num = Message.find_by_sql("select DISTINCT me.* from messages me, boards b where b.id = me.board_id and b.course_id = #{course.id} and b.project_id = '-1' and me.author_id = #{user_id} and me.parent_id is not null").count + news_reply_num = Comment.find_by_sql("select cm.* from comments cm, news n where cm.author_id = #{user_id} and n.course_id = #{course.id} and cm.commented_id = n.id and cm.commented_type ='News'").count + + resource_num = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{course.id} and author_id = #{user_id} and container_type ='Course'").count + journal_num = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =?", user_id, course.id, "Course").count + journal_reply_num = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =? and m_parent_id is not null", user_id, course.id, "Course").count + homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map(&:id).join(',') + ")" + homework_journal_num = JournalsForMessage.where("user_id =? and jour_id in #{homework_ids} and jour_type =?", user_id, "HomeworkCommon").count + news_num = News.where("author_id = #{user_id} and course_id =#{course.id}").count + total = message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1 + CourseContributorScore.create(:course_id => self.course_id, :user_id => self.student_id, :message_num => message_num, :message_reply_num => message_reply_num, :news_reply_num => news_reply_num, + :resource_num => resource_num, :journal_num => journal_num, :journal_reply_num => journal_reply_num, :total_score => total, :homework_journal_num => homework_journal_num, :news_num => news_num) + end + end end diff --git a/db/migrate/20170210082105_update_course_contribute_score.rb b/db/migrate/20170210082105_update_course_contribute_score.rb new file mode 100644 index 000000000..8f55b5fca --- /dev/null +++ b/db/migrate/20170210082105_update_course_contribute_score.rb @@ -0,0 +1,22 @@ +class UpdateCourseContributeScore < ActiveRecord::Migration + def up + count =Course.all.count / 30 + 2 + transaction do + for i in 1 ... count do i + Course.page(i).per(30).each do |course| + course.student.each do |student| + user = student.student + ccs = CourseContributorScore.where("course_id =? and user_id =?", course.id, user.id).first if user + if user && ccs.nil? + CourseContributorScore.create(:course_id => course.id, :user_id => user.id, :message_num => 0, :message_reply_num => 0, :news_reply_num => 0, + :resource_num => 0, :journal_num => 0, :journal_reply_num => 0, :total_score => 0, :homework_journal_num => 0, :news_num => 0) + end + end + end + end + end + end + + def down + end +end