From 5fb1b220e570222d78f2d71f6544b1f8b16d0de7 Mon Sep 17 00:00:00 2001
From: sw <939547590@qq.com>
Date: Mon, 18 Aug 2014 16:46:34 +0800
Subject: [PATCH 01/15] =?UTF-8?q?#1369=20=E4=BF=AE=E5=A4=8D=E6=9F=A5?=
=?UTF-8?q?=E7=9C=8B=E4=BD=9C=E4=B8=9A=E5=88=97=E8=A1=A8=E9=94=99=E8=AF=AF?=
=?UTF-8?q?=E7=9A=84BUG?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/bids_controller.rb | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb
index be27a71ea..047f7103e 100644
--- a/app/controllers/bids_controller.rb
+++ b/app/controllers/bids_controller.rb
@@ -488,6 +488,11 @@ class BidsController < ApplicationController
if @bid.homework_type
@homework = HomeworkAttach.new
+ if @bid.proportion
+ teacher_proportion = @bid.proportion * 1.0 / 100
+ else
+ teacher_proportion = 1.0
+ end
#@homework_list = @bid.homeworks
#增加作业按评分排序,
#@homework_list = @bid.homeworks.eager_load(:rate_averages, :user, :attachments).order('seems_rateable_cached_ratings.avg DESC').order("#{HomeworkAttach.table_name}.created_at ASC")
@@ -495,7 +500,7 @@ class BidsController < ApplicationController
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{@bid.author_id}) AS t_score,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id <> #{@bid.author_id}) AS s_score
FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY
- (CASE WHEN t_score IS NULL THEN 0 ELSE t_score * #{@bid.proportion * 1.0 / 100} END + CASE WHEN s_score IS NULL THEN 0 ELSE s_score * #{1 - @bid.proportion * 1.0 / 100} END) DESC,created_at ASC")
+ (CASE WHEN t_score IS NULL THEN 0 ELSE t_score * #{teacher_proportion} END + CASE WHEN s_score IS NULL THEN 0 ELSE s_score * #{1 - teacher_proportion} END) DESC,created_at ASC")
if params[:student_id].present?
@temp = []
@homework_list.each do |pro|
From 1e234a9adfe4b7b3fa62889567269e42e54c4ae9 Mon Sep 17 00:00:00 2001
From: z9hang
Date: Tue, 19 Aug 2014 17:03:26 +0800
Subject: [PATCH 02/15] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A7=AF=E5=88=86?=
=?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=9F=E5=BA=A6=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/projects_controller.rb | 4 +-
app/helpers/user_score_helper.rb | 185 +++++++++++++++++++++----
lib/tasks/user_new_score.rake | 23 +++
3 files changed, 183 insertions(+), 29 deletions(-)
create mode 100644 lib/tasks/user_new_score.rake
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index ccbff8e50..1dba60a6d 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -683,8 +683,8 @@ class ProjectsController < ApplicationController
else # @project.project_type == Project::ProjectType_project
roles = Role.find_all_givable
@subPage_title = l :label_member_list
- @members = @project.member_principals.includes(:roles, :principal).all
- @members = sort_project_members(@project, @members)
+ @members = @project.member_principals.includes(:roles, :principal).joins("LEFT JOIN #{OptionNumber.table_name} ON #{OptionNumber.table_name}.user_id = #{Member.table_name}.user_id and #{OptionNumber.table_name}.score_type = 2").order("#{OptionNumber.table_name}.total_score DESC").all
+ #@members = sort_project_members(@project, @members)
@applied_members = appied_project_members(@project, @members)
end
@members = paginateHelper @members
diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb
index 1353f9a1c..37cffae05 100644
--- a/app/helpers/user_score_helper.rb
+++ b/app/helpers/user_score_helper.rb
@@ -418,11 +418,26 @@ module UserScoreHelper
#发帖数
def memo_num(user,project=nil)
if project.nil?
- Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count
-
+ #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count
+ users = User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) FROM `messages` JOIN `boards` ON boards.project_id != -1 AND messages.board_id = boards.id
+WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count
+FROM `users` where id = #{user.id}")
+ result = 0
+ users.each do |user|
+ result = user.m_count
+ end
+ result
#user.messages.where("parent_id IS NULL").count
else
- Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
+ #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
+ users = User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) FROM `messages` JOIN `boards` ON boards.project_id = '#{project.id}' AND messages.board_id = boards.id
+WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count
+FROM `users` where id = #{user.id}")
+ result = 0
+ users.each do |user|
+ result = user.m_count
+ end
+ result
end
end
@@ -448,9 +463,21 @@ FROM `users` where id = #{user.id}")
def messges_for_issue_num(user,project=nil)
if project.nil?
- Journal.includes(:user).where("user_id = '#{user.id}' and notes is not null and notes != ''").all.count
+ #Journal.includes(:user).where("user_id = '#{user.id}' and notes is not null and notes != ''").all.count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != '') AS m_count FROM users where id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Journal.includes(:user).joins(:issue).where("#{Journal.table_name}.user_id = '#{user.id}' and #{Issue.table_name}.project_id = '#{project.id}' and #{Journal.table_name}.notes != '' and #{Journal.table_name}.notes is not null").all.count
+ #Journal.includes(:user).joins(:issue).where("#{Journal.table_name}.user_id = '#{user.id}' and #{Issue.table_name}.project_id = '#{project.id}' and #{Journal.table_name}.notes != '' and #{Journal.table_name}.notes is not null").all.count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals join issues on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != ''and #{Issue.table_name}.project_id = '#{project.id}') AS m_count FROM users where id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -471,9 +498,21 @@ FROM `users` where id = #{user.id}")
def issues_status_num(user,project=nil)
if project.nil?
- Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
+ #Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
+ #Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
+ User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -481,10 +520,10 @@ FROM `users` where id = #{user.id}")
def issues_status_score(user,project=nil)
if project.nil?
#Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
- User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_score FROM users WHERE users.id = '#{user.id}'")
+ User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_count FROM users WHERE users.id = '#{user.id}'")
else
#Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
- User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_score FROM users WHERE users.id = '#{user.id}'")
+ User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_count FROM users WHERE users.id = '#{user.id}'")
end
end
@@ -497,9 +536,21 @@ FROM `users` where id = #{user.id}")
def replay_for_message_num(user,project=nil)
if project.nil?
- JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'").count
+ #JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'").count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project') as m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'").count
+ #JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'").count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -508,7 +559,7 @@ FROM `users` where id = #{user.id}")
if project.nil?
User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project') as m_score FROM users WHERE users.id = '#{user.id}'")
else
- User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_score FROM users WHERE users.id = '#{user.id}'")
+ User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_score FROM users WHERE users.id = '#{user.id}'")
end
end
@@ -521,9 +572,21 @@ FROM `users` where id = #{user.id}")
def replay_for_memo_num(user,project=nil)
if project.nil?
- Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count
+ #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = users.id AND boards.project_id != -1) as m_count FROM users WHERE users.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
+ #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
+ users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = users.id AND boards.project_id = #{project.id}) FROM users WHERE users.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -538,16 +601,21 @@ FROM `users` where id = #{user.id}")
#更新被关注的人数
def update_follow(user,type)
option_number = get_option_number(user,type)
- option_number.follow = Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count
+ option_number.follow = follow_num(user)#Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count
update_score(option_number)
end
def follow_num(user)
- Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count
+ #Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count
+ users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = users.id) as m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
end
def follow_score(user)
- User.find_by_sql("SELECT users.id, (SELECT COUNT(*) * 2 FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = '#{user.id}') FROM users WHERE users.id = '#{user.id}'")
+ User.find_by_sql("SELECT users.id, (SELECT COUNT(*) * 2 FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = users.id) FROM users WHERE users.id = '#{user.id}'")
end
#更新帖子踩各项数量
@@ -689,9 +757,21 @@ FROM `users` where id = #{user.id}")
def changeset_num(user,project=nil)
if project.nil?
- Changeset.includes(:user).where("user_id = '#{user.id}'").all.count
+ #Changeset.includes(:user).where("user_id = '#{user.id}'").all.count
+ users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Changeset.table_name} WHERE user_id = users.id) as m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Changeset.includes(:user).joins(:repository).where("#{Changeset.table_name}.user_id = '#{user.id}' and #{Repository.table_name}.project_id = #{project.id}").all.count
+ #Changeset.includes(:user).joins(:repository).where("#{Changeset.table_name}.user_id = '#{user.id}' and #{Repository.table_name}.project_id = #{project.id}").all.count
+ users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Changeset.table_name} JOIN #{Repository.table_name} ON #{Changeset.table_name}.repository_id = #{Repository.table_name}.id WHERE #{Changeset.table_name}.user_id = users.id and #{Repository.table_name}.project_id = #{project.id}) as m_count FROM users WHERE users.id = '#{user.id}'")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -705,9 +785,21 @@ FROM `users` where id = #{user.id}")
def document_num(user,project=nil)
if project.nil?
- Document.includes(:user).where("user_id = '#{user.id}'").all.count
+ #Document.includes(:user).where("user_id = '#{user.id}'").all.count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{User.table_name}.id) as m_count FROM #{User.table_name} where #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Document.includes(:user,:project).where("user_id = '#{user.id}' and project_id = '#{project.id}'").all.count
+ #Document.includes(:user,:project).where("user_id = '#{user.id}' and project_id = '#{project.id}'").all.count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{User.table_name}.id and #{Document.table_name}.project_id = '#{project.id}') as m_count FROM #{User.table_name} where #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -721,9 +813,21 @@ FROM `users` where id = #{user.id}")
def attachment_num(user,project=nil)
if project.nil?
- Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project'").all.count
+ #Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project'").all.count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project') as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}").all.count
+ #Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}").all.count
+ User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_coumt
+ end
+ result
end
end
@@ -736,9 +840,21 @@ FROM `users` where id = #{user.id}")
def issue_done_ratio_num(user,project=nil)
if project.nil?
- Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
+ #Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{User.table_name}.id) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
+ #Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{User.table_name}.id and #{Issue.table_name}.project_id = '#{project.id}') as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -752,9 +868,21 @@ FROM `users` where id = #{user.id}")
def post_issue_num(user,project=nil)
if project.nil?
- Issue.includes(:author).where("author_id = '#{user.id}'").all.count
+ #Issue.includes(:author).where("author_id = '#{user.id}'").all.count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Issue.table_name} WHERE author_id = #{User.table_name}.id ) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
else
- Issue.includes(:author).where("author_id = '#{user.id}' and project_id = '#{project.id}'").all.count
+ #Issue.includes(:author).where("author_id = '#{user.id}' and project_id = '#{project.id}'").all.count
+ users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Issue.table_name} WHERE author_id = #{User.table_name}.id and project_id = '#{project.id}' ) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ result = 0
+ if users.count > 0
+ result = users.first.m_count
+ end
+ result
end
end
@@ -778,6 +906,9 @@ FROM `users` where id = #{user.id}")
update_attachment(user,type,project)
update_issue_done_ratio(user,type,project)
update_post_issue(user,type,project)
+ if project.nil?
+ update_follow(user,type)
+ end
update_score(ooption_num)
ooption_num
end
diff --git a/lib/tasks/user_new_score.rake b/lib/tasks/user_new_score.rake
new file mode 100644
index 000000000..32a43e07a
--- /dev/null
+++ b/lib/tasks/user_new_score.rake
@@ -0,0 +1,23 @@
+desc "User New Score description"
+task :user_new_score do
+ puts "user_score sync."
+end
+
+namespace :user_new_score do
+ desc "calculating user score"
+ task :calculate => :environment do
+ include UserScoreHelper
+ User.all.each do |user|
+ result = user_scores(user,1)
+ puts "score of #{user.login} is #{result}"
+ end
+
+ Project.where("project_type != 1").all.each do |project|
+ project.member_principals.includes(:roles, :principal).all.each do |member|
+ result = user_scores(member.user,2,project)
+ puts "#{user.login}/'s score in #{project.name} is #{result}"
+ end
+ end
+ puts "calculate completed"
+ end
+end
\ No newline at end of file
From c13eeee56d81b3b60d84e258c269c4892d95cf7e Mon Sep 17 00:00:00 2001
From: sw <939547590@qq.com>
Date: Wed, 20 Aug 2014 15:51:35 +0800
Subject: [PATCH 03/15] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=E6=8F=8F=E8=BF=B0=E9=94=99=E8=AF=AF=202.=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/views/news/_course_form.html.erb | 2 +-
app/views/news/_form.html.erb | 5 ++---
app/views/news/_news.html.erb | 10 +++++-----
app/views/news/new.html.erb | 2 +-
4 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/app/views/news/_course_form.html.erb b/app/views/news/_course_form.html.erb
index 1f2198a3b..ad2c7835c 100644
--- a/app/views/news/_course_form.html.erb
+++ b/app/views/news/_course_form.html.erb
@@ -5,7 +5,7 @@
<%= labelled_form_for :news, @news, :url => news_path(@news),
:html => { :id => 'news-form', :multipart => true, :method => :put } do |f| %>
- <%= render :partial => 'course_form', :locals => { :f => f } %>
+ <%= render :partial => 'course_form', :locals => { :f => f, :is_new => false } %>
<%= submit_tag l(:button_save) %>
<%= preview_link preview_news_path(:course_id => @course, :id => @news), 'news-form',target='preview',{:class => ''} %> |
<%= link_to l(:button_cancel), "#", :onclick => '$("#edit-news").hide(); return false;' %>
From 5482ba3207630623a9f3a51c7b27fab6450681fe Mon Sep 17 00:00:00 2001
From: z9hang
Date: Thu, 21 Aug 2014 14:56:44 +0800
Subject: [PATCH 13/15] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E7=BB=9F=E8=AE=A1?=
=?UTF-8?q?=E6=89=80=E6=9C=89=E7=94=A8=E6=88=B7=E5=88=86=E6=95=B0=E7=AE=97?=
=?UTF-8?q?=E6=B3=95=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/helpers/user_score_helper.rb | 89 ++++--
lib/tasks/user_new_score.rake | 6 +-
lib/tasks/user_score_new.rake | 453 +++++++++++++++++++++++++++++++
3 files changed, 520 insertions(+), 28 deletions(-)
create mode 100644 lib/tasks/user_score_new.rake
diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb
index 37cffae05..376f676b7 100644
--- a/app/helpers/user_score_helper.rb
+++ b/app/helpers/user_score_helper.rb
@@ -381,6 +381,46 @@ module UserScoreHelper
result
end
+ def get_option_num_by_id(user_id,type,project_id=nil)
+ if project_id.nil?
+ option_number = OptionNumber.where("user_id = '#{user_id}' and score_type = '#{type}'");
+ else
+ option_number = OptionNumber.where("user_id = '#{user_id}' and score_type = '#{type}' and project_id = '#{project_id}'");
+ end
+
+ result = nil
+ if option_number.nil? || option_number.count == 0
+ result = OptionNumber.new
+ result.user_id = user_id
+ result.memo = 0
+ result.messages_for_issues = 0
+ result.issues_status = 0
+ result.replay_for_message = 0
+ result.replay_for_memo = 0
+ result.follow = 0
+ result.tread = 0
+ result.praise_by_one = 0
+ result.praise_by_two = 0
+ result.praise_by_three = 0
+ result.tread_by_one = 0
+ result.tread_by_two = 0
+ result.tread_by_three = 0
+ result.changeset = 0
+ result.document = 0
+ result.attachment = 0
+ result.issue_done_ratio = 0
+ result.post_issue = 0
+ result.total_score = 0
+ result.score_type =type
+ unless project_id.nil?
+ result.project_id = project_id
+ end
+ else
+ result = option_number.first
+ end
+ result
+ end
+
#更新分数
def update_score(option_number)
option_number.total_score = collaboration(option_number) + influence(option_number) + skill(option_number) + active(option_number)
@@ -419,9 +459,8 @@ module UserScoreHelper
def memo_num(user,project=nil)
if project.nil?
#Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count
- users = User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) FROM `messages` JOIN `boards` ON boards.project_id != -1 AND messages.board_id = boards.id
-WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count
-FROM `users` where id = #{user.id}")
+ users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM `messages` JOIN `boards` ON boards.project_id != -1 AND messages.board_id = boards.id
+WHERE messages.parent_id IS NULL AND messages.author_id = #{user.id}")
result = 0
users.each do |user|
result = user.m_count
@@ -430,9 +469,8 @@ FROM `users` where id = #{user.id}")
#user.messages.where("parent_id IS NULL").count
else
#Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
- users = User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) FROM `messages` JOIN `boards` ON boards.project_id = '#{project.id}' AND messages.board_id = boards.id
-WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count
-FROM `users` where id = #{user.id}")
+ users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM `messages` JOIN `boards` ON boards.project_id = '#{project.id}' AND messages.board_id = boards.id
+WHERE messages.parent_id IS NULL AND messages.author_id = #{user.id}")
result = 0
users.each do |user|
result = user.m_count
@@ -464,7 +502,7 @@ FROM `users` where id = #{user.id}")
def messges_for_issue_num(user,project=nil)
if project.nil?
#Journal.includes(:user).where("user_id = '#{user.id}' and notes is not null and notes != ''").all.count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != '') AS m_count FROM users where id = #{user.id}")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals WHERE journals.user_id = #{user.id} AND journals.notes IS NOT NULL AND journals.notes != ''")
result = 0
if users.count > 0
result = users.first.m_count
@@ -472,7 +510,7 @@ FROM `users` where id = #{user.id}")
result
else
#Journal.includes(:user).joins(:issue).where("#{Journal.table_name}.user_id = '#{user.id}' and #{Issue.table_name}.project_id = '#{project.id}' and #{Journal.table_name}.notes != '' and #{Journal.table_name}.notes is not null").all.count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals join issues on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != ''and #{Issue.table_name}.project_id = '#{project.id}') AS m_count FROM users where id = #{user.id}")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals join issues on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.user_id = #{user.id} AND journals.notes IS NOT NULL AND journals.notes != ''and #{Issue.table_name}.project_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -499,7 +537,7 @@ FROM `users` where id = #{user.id}")
def issues_status_num(user,project=nil)
if project.nil?
#Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_count FROM users WHERE users.id = '#{user.id}'")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -507,7 +545,7 @@ FROM `users` where id = #{user.id}")
result
else
#Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count
- User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_count FROM users WHERE users.id = '#{user.id}'")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = #{user.id} and issues.project_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -537,7 +575,7 @@ FROM `users` where id = #{user.id}")
def replay_for_message_num(user,project=nil)
if project.nil?
#JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'").count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project') as m_count FROM users WHERE users.id = '#{user.id}'")
+ users = JournalsForMessage.find_by_sql("SELECT COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -545,7 +583,7 @@ FROM `users` where id = #{user.id}")
result
else
#JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'").count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_count FROM users WHERE users.id = '#{user.id}'")
+ users = JournalsForMessage.find_by_sql("SELECT COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -573,7 +611,7 @@ FROM `users` where id = #{user.id}")
def replay_for_memo_num(user,project=nil)
if project.nil?
#Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = users.id AND boards.project_id != -1) as m_count FROM users WHERE users.id = #{user.id}")
+ users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = #{user.id} AND boards.project_id != -1")
result = 0
if users.count > 0
result = users.first.m_count
@@ -581,7 +619,7 @@ FROM `users` where id = #{user.id}")
result
else
#Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count
- users = User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = users.id AND boards.project_id = #{project.id}) FROM users WHERE users.id = #{user.id}")
+ users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = #{user.id} AND boards.project_id = #{project.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -607,11 +645,12 @@ FROM `users` where id = #{user.id}")
def follow_num(user)
#Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count
- users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = users.id) as m_count FROM users WHERE users.id = '#{user.id}'")
+ users = Watcher.find_by_sql("SELECT COUNT(*) as m_count FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
end
+ result
end
def follow_score(user)
@@ -758,7 +797,7 @@ FROM `users` where id = #{user.id}")
def changeset_num(user,project=nil)
if project.nil?
#Changeset.includes(:user).where("user_id = '#{user.id}'").all.count
- users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Changeset.table_name} WHERE user_id = users.id) as m_count FROM users WHERE users.id = '#{user.id}'")
+ users = Changeset.find_by_sql("SELECT COUNT(*) as m_count FROM #{Changeset.table_name} WHERE user_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -766,7 +805,7 @@ FROM `users` where id = #{user.id}")
result
else
#Changeset.includes(:user).joins(:repository).where("#{Changeset.table_name}.user_id = '#{user.id}' and #{Repository.table_name}.project_id = #{project.id}").all.count
- users = User.find_by_sql("SELECT users.id, (SELECT COUNT(*) FROM #{Changeset.table_name} JOIN #{Repository.table_name} ON #{Changeset.table_name}.repository_id = #{Repository.table_name}.id WHERE #{Changeset.table_name}.user_id = users.id and #{Repository.table_name}.project_id = #{project.id}) as m_count FROM users WHERE users.id = '#{user.id}'")
+ users = Changeset.find_by_sql("SELECT COUNT(*) as m_count FROM #{Changeset.table_name} JOIN #{Repository.table_name} ON #{Changeset.table_name}.repository_id = #{Repository.table_name}.id WHERE #{Changeset.table_name}.user_id = #{user.id} and #{Repository.table_name}.project_id = #{project.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -786,7 +825,7 @@ FROM `users` where id = #{user.id}")
def document_num(user,project=nil)
if project.nil?
#Document.includes(:user).where("user_id = '#{user.id}'").all.count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{User.table_name}.id) as m_count FROM #{User.table_name} where #{User.table_name}.id = #{user.id}")
+ users = Document.find_by_sql("SELECT COUNT(*) as m_count FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -794,7 +833,7 @@ FROM `users` where id = #{user.id}")
result
else
#Document.includes(:user,:project).where("user_id = '#{user.id}' and project_id = '#{project.id}'").all.count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{User.table_name}.id and #{Document.table_name}.project_id = '#{project.id}') as m_count FROM #{User.table_name} where #{User.table_name}.id = #{user.id}")
+ users = Document.find_by_sql("SELECT COUNT(*) as m_count FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{user.id} and #{Document.table_name}.project_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -814,7 +853,7 @@ FROM `users` where id = #{user.id}")
def attachment_num(user,project=nil)
if project.nil?
#Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project'").all.count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project') as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Attachment.find_by_sql("SELECT COUNT(*) as m_count FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -822,7 +861,7 @@ FROM `users` where id = #{user.id}")
result
else
#Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}").all.count
- User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Attachment.find_by_sql("SELECT COUNT(*) as m_count FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}")
result = 0
if users.count > 0
result = users.first.m_coumt
@@ -841,7 +880,7 @@ FROM `users` where id = #{user.id}")
def issue_done_ratio_num(user,project=nil)
if project.nil?
#Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{User.table_name}.id) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -849,7 +888,7 @@ FROM `users` where id = #{user.id}")
result
else
#Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{User.table_name}.id and #{Issue.table_name}.project_id = '#{project.id}') as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{user.id} and #{Issue.table_name}.project_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
@@ -869,7 +908,7 @@ FROM `users` where id = #{user.id}")
def post_issue_num(user,project=nil)
if project.nil?
#Issue.includes(:author).where("author_id = '#{user.id}'").all.count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Issue.table_name} WHERE author_id = #{User.table_name}.id ) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Issue.find_by_sql("SELECT COUNT(*) as m_count FROM #{Issue.table_name} WHERE author_id = #{user.id}")
result = 0
if users.count > 0
result = users.first.m_count
@@ -877,7 +916,7 @@ FROM `users` where id = #{user.id}")
result
else
#Issue.includes(:author).where("author_id = '#{user.id}' and project_id = '#{project.id}'").all.count
- users = User.find_by_sql("SELECT #{User.table_name}.id,(SELECT COUNT(*) FROM #{Issue.table_name} WHERE author_id = #{User.table_name}.id and project_id = '#{project.id}' ) as m_count FROM #{User.table_name} WHERE #{User.table_name}.id = #{user.id}")
+ users = Issue.find_by_sql("SELECT COUNT(*) as m_count FROM #{Issue.table_name} WHERE author_id = #{user.id} and project_id = '#{project.id}'")
result = 0
if users.count > 0
result = users.first.m_count
diff --git a/lib/tasks/user_new_score.rake b/lib/tasks/user_new_score.rake
index 32a43e07a..19f003f4d 100644
--- a/lib/tasks/user_new_score.rake
+++ b/lib/tasks/user_new_score.rake
@@ -5,16 +5,16 @@ end
namespace :user_new_score do
desc "calculating user score"
- task :calculate => :environment do
+ task :calculating => :environment do
include UserScoreHelper
User.all.each do |user|
- result = user_scores(user,1)
+ result = user_scores(user,1).total_score
puts "score of #{user.login} is #{result}"
end
Project.where("project_type != 1").all.each do |project|
project.member_principals.includes(:roles, :principal).all.each do |member|
- result = user_scores(member.user,2,project)
+ result = user_scores(member.user,2,project).total_score
puts "#{user.login}/'s score in #{project.name} is #{result}"
end
end
diff --git a/lib/tasks/user_score_new.rake b/lib/tasks/user_score_new.rake
new file mode 100644
index 000000000..cb0e7ef52
--- /dev/null
+++ b/lib/tasks/user_score_new.rake
@@ -0,0 +1,453 @@
+desc "User Score description"
+task :user_score_new do
+ puts "user_score sync."
+end
+
+namespace :user_score_new do
+ desc "calculating user score"
+ task :calculated => :environment do
+ include UserScoreHelper
+ puts "truncating table...#{Rails.env}"
+ puts "loading..."
+ # collaboration 协同得分
+ users = {}
+ grades = {}
+ # 发帖
+ Message.find_by_sql("SELECT `messages`.author_id AS u_id,`boards`.project_id AS p_id, COUNT(*) AS memo_number FROM `messages` JOIN `boards` ON `messages`.board_id = `boards`.id WHERE `messages`.parent_id IS NULL AND `boards`.project_id != -1 GROUP BY `messages`.author_id,`boards`.project_id ").each do|message|
+ option_num = get_option_num_by_id(message.u_id,2,message.p_id)
+ option_num.memo = message.memo_number
+ option_num.save
+ update_score(option_num)
+ puts "#{message.u_id}'s memo number in project #{message.p_id}: #{message.memo_number}"
+ end
+
+ Message.find_by_sql("SELECT `messages`.author_id AS u_id, COUNT(*) AS memo_number FROM `messages` JOIN `boards` ON `messages`.board_id = `boards`.id WHERE `messages`.parent_id IS NULL AND `boards`.project_id != -1 GROUP BY `messages`.author_id").each do|message|
+ option_num = get_option_num_by_id(message.u_id,1)
+ option_num.memo = message.memo_number
+ option_num.save
+ update_score(option_num)
+ puts "#{message.u_id}'s memo number: #{message.memo_number}"
+ end
+
+
+ puts "post_message calculate Completed."
+ #
+ ## 对缺陷的留言
+ Journal.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM journals WHERE journals.notes IS NOT NULL AND journals.notes != '' GROUP BY u_id").each do |journal|
+ option_num = get_option_num_by_id(journal.u_id,1)
+ option_num.messages_for_issues = journal.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{journal.u_id}'s messages_for_issues number: #{journal.m_count}"
+ end
+
+ Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, #{Issue.table_name}.project_id AS p_id ,COUNT(*) as m_count FROM journals join #{Issue.table_name} on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.notes IS NOT NULL AND journals.notes != '' GROUP BY u_id,p_id").each do |journal|
+ option_num = get_option_num_by_id(journal.u_id,2,journal.p_id)
+ option_num.messages_for_issues = journal.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{journal.u_id}'s messages_for_issues number in project #{journal.p_id}: #{journal.m_count}"
+ end
+
+ puts ":post_issue_message calculate Completed"
+ #
+ ## 更改一次缺陷状态
+ Journal.find_by_sql("SELECT journals.user_id AS u_id, COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' GROUP BY u_id").each do |journal|
+ option_num = get_option_num_by_id(journal.u_id,1)
+ option_num.issues_status = journal.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{journal.u_id}'s issues_status number: #{journal.m_count}"
+ end
+
+ Journal.find_by_sql("SELECT journals.user_id AS u_id,issues.project_id AS p_id,COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' GROUP BY u_id,p_id").each do |journal|
+ option_num = get_option_num_by_id(journal.u_id,2,journal.p_id)
+ option_num.issues_status = journal.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{journal.u_id}'s issues_status number in project #{journal.p_id}: #{journal.m_count}"
+ end
+
+ puts ":change_issue_status calculate Completed"
+ #
+ ## 对留言的回复
+ JournalsForMessage.find_by_sql("SELECT user_id AS u_id,COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and jour_type = 'Project' GROUP BY u_id").each do |jfm|
+ option_num = get_option_num_by_id(jfm.u_id,1)
+ option_num.replay_for_message = jfm.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{jfm.u_id}'s replay_for_message number: #{jfm.m_count}"
+ end
+
+ JournalsForMessage.find_by_sql("SELECT user_id AS u_id,jour_id AS p_id,COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and jour_type = 'Project' GROUP BY u_id,p_id").each do |jfm|
+ option_num = get_option_num_by_id(jfm.u_id,2,jfm.p_id)
+ option_num.replay_for_message = jfm.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{jfm.u_id}'s replay_for_message number in project #{jfm.p_id}: #{jfm.m_count}"
+ end
+
+ puts ":reply_message calculate Completed"
+ #
+ ## 对帖子的回复
+ Message.find_by_sql("SELECT messages.author_id AS u_id, COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND boards.project_id != -1 GROUP BY u_id").each do |message|
+ option_num = get_option_num_by_id(message.u_id,1)
+ option_num.replay_for_memo = message.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{message.u_id}'s replay_for_memo number: #{message.m_count}"
+ end
+
+ Message.find_by_sql("SELECT messages.author_id AS u_id,boards.project_id AS p_id,COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND boards.project_id != -1 GROUP BY u_id,p_id").each do |message|
+ option_num = get_option_num_by_id(message.u_id,2,message.p_id)
+ option_num.replay_for_memo = message.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{message.u_id}'s replay_for_memo number in project #{message.p_id}: #{message.m_count}"
+ end
+
+ puts ":reply_posting calculate Completed."
+ #
+ #UserScore.transaction do
+ # users.each do |user_id, score|
+ # UserScore.find_or_create_by_user_id(user_id).update_attribute(:collaboration, score)
+ # end
+ #end
+ #puts "=== UserScore#collaboration calculate Completed. collaboration users count: #{users.count}"
+ #puts ""
+ #
+ #users.clear
+ #
+ ## influence 影响力得分
+ ##关注
+ Watcher.find_by_sql("SELECT watchable_id AS u_id ,COUNT(*) as m_count FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' GROUP BY u_id").each do |watcher|
+ option_num = get_option_num_by_id(watcher.u_id,1)
+ option_num.follow = watcher.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{watcher.u_id}'s follow number: #{watcher.m_count}"
+ end
+ puts ":followed_by calculate Completed."
+ #
+ #UserScore.transaction do
+ # users_influence.each do |user_id, score|
+ # UserScore.find_or_create_by_user_id(user_id).update_attribute(:influence, score)
+ # end
+ #end
+ #puts "=== UserScore#influence calculate Completed. influence users count: #{users_influence.count}"
+ #puts ""
+ ## skill 技术得分
+
+ #计算相关user的等级
+ PraiseTread.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM `praise_treads` WHERE praise_tread_object_type IN ( 'Issue','Message') GROUP BY u_id").each do |pt|
+ user = User.find(pt.u_id)
+ level = UserLevels.get_level(user)
+ puts "user #{user.login}'s level is #{level}"
+ end
+ ## 踩帖
+ PraiseTread.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM `praise_treads` WHERE praise_tread_object_type IN ( 'Issue','Message') AND praise_or_tread = 0 GROUP BY u_id").each do |pt|
+ #踩别人扣分
+ option_num = get_option_num_by_id(pt.u_id,1)
+ option_num.tread = pt.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{pt.u_id}'s tread number: #{pt.m_count}"
+ end
+
+
+ #SELECT AS u_id,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id = `praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id
+ PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,u_level").each do |pt|
+ #缺陷被人踩的次数
+ option_num = get_option_num_by_id(pt.target_u_id,1)
+ if pt.u_level == 1
+ option_num.tread_by_one = pt.m_count
+ puts "user #{pt.target_u_id} tread by one-level member #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.tread_by_two = pt.m_count
+ puts "user #{pt.target_u_id} tread by two-level member #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.tread_by_three = pt.m_count
+ puts "user #{pt.target_u_id} tread by three-level member #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ PraiseTread.find_by_sql("SELECT `praise_treads`.user_id AS u_id,`issues`.project_id AS p_id, COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id,p_id").each do |pt|
+ #项目中踩别人缺陷的次数
+ option_num = get_option_num_by_id(pt.u_id,2,pt.p_id)
+ option_num.tread = pt.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{pt.u_id}'s tread number: #{pt.m_count}"
+ end
+
+ #项目中被人踩缺陷的次数
+ PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`issues`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,p_id,u_level").each do |pt|
+ option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id)
+ if pt.u_level == 1
+ option_num.tread_by_one = pt.m_count
+ puts "user #{pt.target_u_id} tread by one-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.tread_by_two = pt.m_count
+ puts "user #{pt.target_u_id} tread by two-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.tread_by_three = pt.m_count
+ puts "user #{pt.target_u_id} tread by three-level member in project #{pt.p_id} #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,u_level").each do |pt|
+ #讨论区被人踩的次数
+ option_num = get_option_num_by_id(pt.target_u_id,1)
+ if pt.u_level == 1
+ option_num.tread_by_one += pt.m_count
+ puts "user #{pt.target_u_id} tread by one-level member #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.tread_by_two += pt.m_count
+ puts "user #{pt.target_u_id} tread by two-level member #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.tread_by_three += pt.m_count
+ puts "user #{pt.target_u_id} tread by three-level member #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ PraiseTread.find_by_sql("SELECT `praise_treads`.user_id AS u_id,`boards`.project_id AS p_id, COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 0 GROUP BY u_id , p_id").each do |pt|
+ #项目讨论区中踩别人的次数
+ option_num = get_option_num_by_id(pt.u_id,2,pt.p_id)
+ option_num.tread += pt.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{pt.u_id}'s tread number: #{pt.m_count}"
+ end
+
+ #项目中被人踩的次数
+ PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`boards`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 0 GROUP BY target_u_id,p_id,u_level").each do |pt|
+ option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id)
+ if pt.u_level == 1
+ option_num.tread_by_one += pt.m_count
+ puts "user #{pt.target_u_id} tread by one-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.tread_by_two += pt.m_count
+ puts "user #{pt.target_u_id} tread by two-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.tread_by_three += pt.m_count
+ puts "user #{pt.target_u_id} tread by three-level member in project #{pt.p_id} #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ #顶贴
+ #SELECT AS u_id,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id = `praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id
+ PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,u_level").each do |pt|
+ #缺陷被人顶的次数
+ option_num = get_option_num_by_id(pt.target_u_id,1)
+ if pt.u_level == 1
+ option_num.praise_by_one = pt.m_count
+ puts "user #{pt.target_u_id} praise by one-level member #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.praise_by_two = pt.m_count
+ puts "user #{pt.target_u_id} praise by two-level member #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.praise_by_three = pt.m_count
+ puts "user #{pt.target_u_id} praise by three-level member #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ #项目中被人顶缺陷的次数
+ PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`issues`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,p_id,u_level").each do |pt|
+ option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id)
+ if pt.u_level == 1
+ option_num.praise_by_one = pt.m_count
+ puts "user #{pt.target_u_id} praise by one-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.praise_by_two = pt.m_count
+ puts "user #{pt.target_u_id} praise by two-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.praise_by_three = pt.m_count
+ puts "user #{pt.target_u_id} praise by three-level member in project #{pt.p_id} #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,u_level").each do |pt|
+ #讨论区被人顶的次数
+ option_num = get_option_num_by_id(pt.target_u_id,1)
+ if pt.u_level == 1
+ option_num.praise_by_one += pt.m_count
+ puts "user #{pt.target_u_id} praise by one-level member #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.praise_by_two += pt.m_count
+ puts "user #{pt.target_u_id} praise by two-level member #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.praise_by_three += pt.m_count
+ puts "user #{pt.target_u_id} praise by three-level member #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ #项目中被人踩的次数
+ PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`boards`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 1 GROUP BY target_u_id,p_id,u_level").each do |pt|
+ option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id)
+ if pt.u_level == 1
+ option_num.praise_by_one += pt.m_count
+ puts "user #{pt.target_u_id} praise by one-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 2
+ option_num.praise_by_two += pt.m_count
+ puts "user #{pt.target_u_id} praise by two-level member in project #{pt.p_id} #{pt.m_count} times "
+ elsif pt.u_level == 3
+ option_num.praise_by_three += pt.m_count
+ puts "user #{pt.target_u_id} praise by three-level member in project #{pt.p_id} #{pt.m_count} times "
+ else
+ puts "level error!:#{pt.u_level}"
+ next
+ end
+ option_num.save
+ update_score(option_num)
+ end
+
+ puts "UserScore#skill calculate Completed."
+ #puts ""
+ #
+ ## active 项目贡献得分
+ ## 提交代码
+ Changeset.find_by_sql("SELECT user_id AS u_id, COUNT(*) AS m_count FROM `changesets` GROUP BY u_id").each do |changeset|
+ unless changeset.u_id.nil?
+ option_num = get_option_num_by_id(changeset.u_id,1)
+ option_num.changeset = changeset.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{changeset.u_id}'s changeset number: #{changeset.m_count}"
+ end
+ end
+
+ Changeset.find_by_sql("SELECT `changesets`.user_id AS u_id, `repositories`.project_id AS p_id,COUNT(*) AS m_count FROM `changesets` JOIN `repositories` ON `repositories`.id = `changesets`.repository_id GROUP BY u_id,p_id ").each do |changeset|
+ unless changeset.nil?
+ option_num = get_option_num_by_id(changeset.u_id,2,changeset.p_id)
+ option_num.changeset = changeset.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{changeset.u_id}'s changeset number in project #{changeset.p_id}: #{changeset.m_count}"
+ end
+ end
+
+ puts ":push_code calculate Completed."
+ ##提交文档
+ Document.find_by_sql("SELECT user_id AS u_id ,COUNT(*) AS m_count FROM `documents` GROUP BY user_id").each do |document|
+ option_num = get_option_num_by_id(document.u_id,1)
+ option_num.document = document.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{document.u_id}'s document number: #{document.m_count}"
+ end
+
+ Document.find_by_sql("SELECT user_id AS u_id , project_id AS p_id, COUNT(*) AS m_count FROM `documents` GROUP BY u_id,p_id").each do |document|
+ option_num = get_option_num_by_id(document.u_id,2,document.p_id)
+ option_num.document = document.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{document.u_id}'s document number in project #{document.p_id}: #{document.m_count}"
+ end
+
+ puts ":push_document calculate Completed."
+ ##提交附件
+ Attachment.find_by_sql("SELECT author_id AS u_id,COUNT(*) as m_count FROM #{Attachment.table_name} WHERE container_type = 'Project' GROUP By u_id").each do |attachment|
+ option_num = get_option_num_by_id(attachment.u_id,1)
+ option_num.attachment = attachment.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{attachment.u_id}'s attachment number: #{attachment.m_count}"
+ end
+
+ Attachment.find_by_sql("SELECT author_id AS u_id,container_id AS p_id,COUNT(*) as m_count FROM #{Attachment.table_name} WHERE container_type = 'Project' GROUP By u_id,p_id").each do |attachment|
+ option_num = get_option_num_by_id(attachment.u_id,2,attachment.p_id)
+ option_num.attachment = attachment.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{attachment.u_id}'s attachment number in project #{attachment.p_id}: #{attachment.m_count}"
+ end
+
+ puts ":push_file calculate Completed."
+ ##更新完成度
+ Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' GROUP BY u_id ").each do |j|
+ option_num = get_option_num_by_id(j.u_id,1)
+ option_num.issue_done_ratio = j.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{j.u_id}'s issue_done_ratio number: #{j.m_count}"
+ end
+
+ Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, #{Issue.table_name}.project_id AS p_id,COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' GROUP BY u_id,p_id ").each do |j|
+ option_num = get_option_num_by_id(j.u_id,2,j.p_id)
+ option_num.issue_done_ratio = j.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{j.u_id}'s issue_done_ratio number in project #{j.p_id}: #{j.m_count}"
+ end
+
+ puts ":update_issue_ratio calculate Completed."
+ ##发布缺陷
+ Issue.find_by_sql("SELECT author_id AS u_id,COUNT(*) as m_count FROM #{Issue.table_name} GROUP BY u_id").each do |issues|
+ option_num = get_option_num_by_id(issues.u_id,1)
+ option_num.post_issue = issues.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{issues.u_id}'s issues number: #{issues.m_count}"
+ end
+
+ Issue.find_by_sql("SELECT author_id AS u_id,project_id AS p_id,COUNT(*) as m_count FROM #{Issue.table_name} GROUP BY u_id,p_id").each do |issues|
+ option_num = get_option_num_by_id(issues.u_id,2,issues.p_id)
+ option_num.post_issue = issues.m_count
+ option_num.save
+ update_score(option_num)
+ puts "#{issues.u_id}'s issues number in project #{issues.p_id}: #{issues.m_count}"
+ end
+ puts ":post_issue calculate Completed."
+ #
+ #
+ #UserScore.transaction do
+ # users_active.each do |user_id, score|
+ # UserScore.find_or_create_by_user_id(user_id).update_attribute(:active, score)
+ # end
+ #end
+ #puts "=== UserScore#active calculate Completed. active users count: #{users_active.count}"
+ #UserGrade.transaction do
+ # grades.each do |grade_id,score|
+ # grade = UserGrade.find(grade_id)
+ # grade.grade = score
+ # grade.save
+ # end
+ #end
+ #puts "=== UserGrid calculate Completed. UserGrids count: #{grades.count}"
+ end
+end
\ No newline at end of file
From 644cfe6c211a626ae19d0867c7c4a38b1679fe93 Mon Sep 17 00:00:00 2001
From: z9hang
Date: Thu, 21 Aug 2014 15:22:29 +0800
Subject: [PATCH 14/15] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=88=90=E5=91=98?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8C=89=E5=BE=97=E5=88=86=E6=8E=92=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/projects_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 1c78c54a1..1893224f8 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -697,7 +697,7 @@ class ProjectsController < ApplicationController
else # @project.project_type == Project::ProjectType_project
roles = Role.find_all_givable
@subPage_title = l :label_member_list
- @members = @project.member_principals.includes(:roles, :principal).joins("LEFT JOIN #{OptionNumber.table_name} ON #{OptionNumber.table_name}.user_id = #{Member.table_name}.user_id and #{OptionNumber.table_name}.score_type = 2").order("#{OptionNumber.table_name}.total_score DESC").all
+ @members = @project.member_principals.includes(:roles, :principal).joins("LEFT JOIN #{OptionNumber.table_name} ON #{OptionNumber.table_name}.user_id = #{Member.table_name}.user_id and #{OptionNumber.table_name}.score_type = 2 AND #{Member.table_name}.project_id = #{OptionNumber.table_name}.project_id").order("#{OptionNumber.table_name}.total_score DESC").all
#@members = sort_project_members(@project, @members)
@applied_members = appied_project_members(@project, @members)
end
From 4e49da836e69fd3d267271c66edba0e62bbf5969 Mon Sep 17 00:00:00 2001
From: sw <939547590@qq.com>
Date: Thu, 21 Aug 2014 15:40:21 +0800
Subject: [PATCH 15/15] =?UTF-8?q?1.=E8=AF=BE=E7=A8=8B=E9=80=9A=E7=9F=A5?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E3=80=81=E4=BF=AE=E6=94=B9=E5=A1=AB=E5=86=99?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=97=B6=E5=AD=97=E6=AE=B5=E9=99=90=E5=88=B6?=
=?UTF-8?q?=E5=AE=9E=E6=97=B6=E6=8F=90=E7=A4=BA=202.=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=97=B6=E5=A1=AB=E5=86=99=E5=AD=97=E6=AE=B5?=
=?UTF-8?q?=E8=B6=85=E5=87=BA=E9=99=90=E5=88=B6=E9=95=BF=E5=BA=A6=E6=8A=A5?=
=?UTF-8?q?=E9=94=99=E7=9A=84=E4=BF=AE=E5=A4=8D=203.=E6=B3=A8=E9=87=8A?=
=?UTF-8?q?=E6=97=A0=E6=95=88=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/news_controller.rb | 3 +-
app/views/contestnotifications/_news.html.erb | 10 ++--
app/views/news/_course_form.html.erb | 6 +-
app/views/news/_course_news.html.erb | 56 ++++++++++++++++++-
app/views/news/_course_show.html.erb | 56 ++++++++++++++++++-
5 files changed, 121 insertions(+), 10 deletions(-)
diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb
index 9437889b2..e564bc940 100644
--- a/app/controllers/news_controller.rb
+++ b/app/controllers/news_controller.rb
@@ -148,7 +148,8 @@ class NewsController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_to news_path(@news)
else
- render :action => 'edit'
+ #flash[:error] = l(:notice_successful_update)
+ redirect_to news_path(@news)
end
end
diff --git a/app/views/contestnotifications/_news.html.erb b/app/views/contestnotifications/_news.html.erb
index 301a193d8..fbac2557f 100644
--- a/app/views/contestnotifications/_news.html.erb
+++ b/app/views/contestnotifications/_news.html.erb
@@ -1,9 +1,9 @@
-
+ <%# unless news.summary.blank? %>