From 541b22b84d3cf3d54ccc286efd3af420e6d09301 Mon Sep 17 00:00:00 2001 From: yanxd Date: Tue, 10 Jun 2014 10:41:54 +0800 Subject: [PATCH] score statistics init --- app/controllers/documents_controller.rb | 1 + app/models/document.rb | 3 +- app/models/user.rb | 1 + ...20140609061903_add_user_id_to_documents.rb | 5 ++ db/schema.rb | 3 +- lib/tasks/userscore.rake | 72 +++++++++++++++++++ 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20140609061903_add_user_id_to_documents.rb create mode 100644 lib/tasks/userscore.rake diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 51486f25..464c4a2b 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -62,6 +62,7 @@ class DocumentsController < ApplicationController def create @document = @project.documents.build @document.safe_attributes = params[:document] + @document.user = User.current @document.save_attachments(params[:attachments]) if @document.save render_attachment_warning_if_needed(@document) diff --git a/app/models/document.rb b/app/models/document.rb index 5e3df4bf..3710e6eb 100644 --- a/app/models/document.rb +++ b/app/models/document.rb @@ -18,6 +18,7 @@ class Document < ActiveRecord::Base include Redmine::SafeAttributes belongs_to :project + belongs_to :user belongs_to :category, :class_name => "DocumentCategory", :foreign_key => "category_id" before_save :be_user_score # user_score @@ -62,7 +63,7 @@ class Document < ActiveRecord::Base # update user score def be_user_score if self.new_record? - UserScore.project(:push_document, User.current, { document_id: self.id }) + UserScore.project(:push_document, self.user, { document_id: self.id }) end end end diff --git a/app/models/user.rb b/app/models/user.rb index 331ff699..4255346b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -112,6 +112,7 @@ class User < Principal has_many :journals has_many :messages, :foreign_key => 'author_id' has_one :user_score, :dependent => :destroy + has_many :documents # 项目中关联的文档再次与人关联 # end ######added by nie diff --git a/db/migrate/20140609061903_add_user_id_to_documents.rb b/db/migrate/20140609061903_add_user_id_to_documents.rb new file mode 100644 index 00000000..7f3b31ef --- /dev/null +++ b/db/migrate/20140609061903_add_user_id_to_documents.rb @@ -0,0 +1,5 @@ +class AddUserIdToDocuments < ActiveRecord::Migration + def change + add_column :documents, :user_id, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 109ad65e..b37bc56e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20140605025247) do +ActiveRecord::Schema.define(:version => 20140609061903) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -288,6 +288,7 @@ ActiveRecord::Schema.define(:version => 20140605025247) do t.string "title", :limit => 60, :default => "", :null => false t.text "description" t.datetime "created_on" + t.integer "user_id", :default => 0 end add_index "documents", ["category_id"], :name => "index_documents_on_category_id" diff --git a/lib/tasks/userscore.rake b/lib/tasks/userscore.rake new file mode 100644 index 00000000..eefca6d7 --- /dev/null +++ b/lib/tasks/userscore.rake @@ -0,0 +1,72 @@ +desc "User Score description" +task :user_score do + puts "user_score sync." +end + +namespace :user_score do + desc "calculating user score" + # Rails.env = 'production' + task :calculate => :environment do + puts "loading..." + # collaboration 协同得分 + users = {} + # 发帖 + Message.includes(:author).where("parent_id IS NULL").all.each do |m| + users[m.author.id] = users[m.author.id].to_i + 2 + end + puts ":post_message calculate Completed. users count: #{users.count}" + + # 对缺陷的留言 + Journal.includes(:user).all.each do |j| + users[j.user.id] = users[j.user.id].to_i + 1 + end + puts ":post_issue calculate Completed. users count: #{users.count}" + + # 更改一次缺陷状态 + Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id'").each do |j| + users[j.user.id] = users[j.user.id].to_i + 1 + end + puts ":change_issue_status calculate Completed. users count: #{users.count}" + + # 对留言的回复 + JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL").each do |jfm| + users[jfm.user.id] = users[jfm.user.id].to_i + 1 + end + puts ":reply_message calculate Completed. users count: #{users.count}" + + # 对帖子的回复 + Message.includes(:author).where("parent_id IS NOT NULL").each do |m| + users[m.author.id] = users[m.author.id].to_i + 1 + end + puts ":reply_posting calculate Completed. users count: #{users.count}" + + users.each do |user_id, score| + UserScore.find_or_create_by_user_id(user_id).update_attribute(:collaboration, score) + end + puts "=== UserScore#collaboration calculate Completed. users count: #{users.count}" + + users.clear + + # influence 影响力得分 + # ... + + # skill 技术得分 + # ... + + # active 项目贡献得分 + # ... + end +end + +desc "create tmp file, to test" +file 'tmp/test.yml' do + require 'yaml' + var = { + :name => "name", + :age => "age", + :agent => "agent" + } + File.open('tmp/test.yml', 'w') do |f| + f.write YAML.dump({'conf' => var }) + end +end \ No newline at end of file