From f381784a3cb28176343cc68ab19ee886dc3cc1bd Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 5 Mar 2016 03:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 18 ++++---- app/helpers/application_helper.rb | 12 +++++- app/models/comment.rb | 4 +- app/models/course_contributor_score.rb | 3 +- app/models/journals_for_message.rb | 2 +- app/models/message.rb | 16 +++---- ...d_news_num_to_course_contributor_scores.rb | 5 +++ ...304154643_update_contributor_for_course.rb | 43 +++++++++++++++++++ 8 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 db/migrate/20160304154005_add_news_num_to_course_contributor_scores.rb create mode 100644 db/migrate/20160304154643_update_contributor_for_course.rb diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index e615de002..a40b24fe2 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -629,16 +629,14 @@ class FilesController < ApplicationController end def update_contributor_score(course, file ) - unless file.author.allowed_to?(:as_teacher, course) - course_contributor_score = CourseContributorScore.where("course_id =? and user_id =?", course.id, file.author.id).first - if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course.id, :user_id => file.author.id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 5, :journal_num => 0, :journal_reply_num => 0, :total_score => 5) - else - score = course_contributor_score.resource_num + 5 - total_score = course_contributor_score.total_score + 5 - course_contributor_score.update_attributes(:resource_num => score, :total_score => total_score) - end + course_contributor_score = CourseContributorScore.where("course_id =? and user_id =?", course.id, file.author.id).first + if course_contributor_score.nil? + CourseContributorScore.create(:course_id => course.id, :user_id => file.author.id, :message_num => 0, :message_reply_num => 0, + :news_reply_num => 0, :resource_num => 5, :journal_num => 0, :journal_reply_num => 0, :total_score => 5) + else + score = course_contributor_score.resource_num + 5 + total_score = course_contributor_score.total_score + 5 + course_contributor_score.update_attributes(:resource_num => score, :total_score => total_score) end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c37d3ad55..48ee42234 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -110,8 +110,7 @@ module ApplicationHelper end end - # 更新课程英雄榜得分 - # user传过来必须是学生 + # 更新课程活跃度得分 def course_member_score(course_id,user_id,type) course_contributor_score = CourseContributorScore.where("course_id =? and user_id =?", course_id, user_id).first case type @@ -160,6 +159,15 @@ module ApplicationHelper total_score = course_contributor_score.total_score + 1 course_contributor_score.update_attributes(:news_reply_num => score, :total_score => total_score) end + when "News" + if course_contributor_score.nil? + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, + :news_reply_num => 0, :news_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0, :total_score => 1) + else + score = course_contributor_score.news_num + 1 + total_score = course_contributor_score.total_score + 1 + course_contributor_score.update_attributes(:news_num => score, :total_score => news_num) + end end end diff --git a/app/models/comment.rb b/app/models/comment.rb index 69753d81c..1125e168f 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -82,8 +82,10 @@ class Comment < ActiveRecord::Base # 课程成员得分(英雄榜) def act_as_student_score if self.commented.course - unless self.author.allowed_to?(:as_teacher, self.commented.course) + if self.author.allowed_to?(:as_teacher, self.commented.course) course_member_score(self.commented.course.id, self.author_id, "NewReply") + else + course_member_score(self.commented.course.id, self.author_id, "News") end end end diff --git a/app/models/course_contributor_score.rb b/app/models/course_contributor_score.rb index ca21ddb1c..4f3b3e187 100644 --- a/app/models/course_contributor_score.rb +++ b/app/models/course_contributor_score.rb @@ -1,5 +1,6 @@ class CourseContributorScore < ActiveRecord::Base - attr_accessible :course_id, :journal_num, :journal_reply_num, :message_num, :message_reply_num, :news_reply_num, :resource_num, :user_id, :total_score, :homework_journal_num + attr_accessible :course_id, :journal_num, :journal_reply_num, :message_num, :message_reply_num, :news_reply_num, + :resource_num, :user_id, :total_score, :homework_journal_num, :news_num belongs_to :course belongs_to :user end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 1c7a05cb1..7990979e4 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -283,7 +283,7 @@ class JournalsForMessage < ActiveRecord::Base end end - # 课程成员得分(英雄榜) + # 课程成员得分(活跃度) def act_as_student_score if self.jour_type == "Course" course_member_score(self.jour_id, self.user_id, "JournalForMessage") diff --git a/app/models/message.rb b/app/models/message.rb index 24bda5610..44f2d2c80 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -341,17 +341,15 @@ class Message < ActiveRecord::Base delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MESSAGE end - # 课程成员得分(英雄榜) + # 课程成员得分(活跃度) def act_as_student_score if self.course - unless self.author.allowed_to?(:as_teacher, self.course) - if self.parent_id.nil? - # 发帖 - course_member_score(self.course.id, self.author_id, "Message") - else - # 回帖 - course_member_score(self.course.id, self.author_id, "MessageReply") - end + if self.parent_id.nil? + # 发帖 + course_member_score(self.course.id, self.author_id, "Message") + else + # 回帖 + course_member_score(self.course.id, self.author_id, "MessageReply") end end end diff --git a/db/migrate/20160304154005_add_news_num_to_course_contributor_scores.rb b/db/migrate/20160304154005_add_news_num_to_course_contributor_scores.rb new file mode 100644 index 000000000..4cb1679f5 --- /dev/null +++ b/db/migrate/20160304154005_add_news_num_to_course_contributor_scores.rb @@ -0,0 +1,5 @@ +class AddNewsNumToCourseContributorScores < ActiveRecord::Migration + def change + add_column :course_contributor_scores, :news_num, :integer , :default => 0 + end +end diff --git a/db/migrate/20160304154643_update_contributor_for_course.rb b/db/migrate/20160304154643_update_contributor_for_course.rb new file mode 100644 index 000000000..be9ed3126 --- /dev/null +++ b/db/migrate/20160304154643_update_contributor_for_course.rb @@ -0,0 +1,43 @@ +class UpdateContributorForCourse < ActiveRecord::Migration + def up + Course.all.each do |course| + if course.course_activities.count > 1 + course.members.each do |s| + puts course.id + puts course.name + puts s.user_id + # board_count = CourseActivity.where("user_id =? and course_id =? and course_act_type =?",s.student_id, course.id, "Message").count * 2 + # 发帖数 + board_count = 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 = #{s.user_id} and me.parent_id is null;").count * 2 + # 回帖数 + message_reply_count = 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 = #{s.user_id} and me.parent_id is not null").count * 1 + # 新闻回复 + if s.user.allowed_to?(:as_teacher, course) + common_reply_count = Comment.find_by_sql("select cm.* from comments cm, news n where cm.author_id = #{s.user_id} and n.course_id = #{course.id} and cm.commented_id = n.id and cm.commented_type ='News'").count * 1 + else + common_count = Comment.find_by_sql("select cm.* from comments cm, news n where cm.author_id = #{s.user_id} and n.course_id = #{course.id} and cm.commented_id = n.id and cm.commented_type ='News'").count * 1 + end + # attachment_count = CourseActivity.where("user_id =? and course_id =? and course_act_type =?", s.student_id, course.id, "Attachment").count * 5 + # 附件数 + attachment_count = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{course.id} and author_id = #{s.user_id} and container_type ='Course'").count * 5 + # 课程留言数 + journal_count = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =? ", s.user_id, course.id, "Course").count * 1 + # 作业留言 + journal_homework_count = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =? ", s.user_id, course.id, "HomeworkCommon").count * 1 + # journal_count = CourseActivity.where("user_id =? and course_id =? and course_act_type =?", s.student_id, course.id, "JournalsForMessage").count * 1 + # journal_reply_count = JournalsForMessage.where("user_id =? and jour_id =? and jour_type =? and status =?", s.student_id, course.id, "Course",1).count * 1 + total = board_count + message_reply_count + common_reply_count + attachment_count + journal_count + if total !=0 + CourseContributorScore.create(:course_id => course.id, :user_id => s.student_id, :message_num => board_count, :message_reply_num => message_reply_count, + :news_reply_num => common_reply_count, :news_num => common_count, :resource_num => attachment_count, :journal_num => journal_count, + :homework_journal_num => journal_homework_count, :journal_reply_num => 0, :total_score => total) + end + + end + end + end + end + + def down + end +end