diff --git a/lib/tasks/userscore.rake b/lib/tasks/userscore.rake index 144b9c9b..9bc54f2c 100644 --- a/lib/tasks/userscore.rake +++ b/lib/tasks/userscore.rake @@ -4,9 +4,10 @@ task :user_score do end namespace :user_score do - desc "calculating user score" - # Rails.env = 'production' - task :calculate => :environment do + desc "calculating user score" + task :calculate => :environment do + puts "truncating table...#{Rails.env}" + UserScore.destroy_all puts "loading..." # collaboration 协同得分 users = {} @@ -40,10 +41,13 @@ namespace :user_score do end puts ":reply_posting calculate Completed. collaboration users count: #{users.count}" - users.each do |user_id, score| - UserScore.find_or_create_by_user_id(user_id).update_attribute(:collaboration, score) + 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 @@ -55,23 +59,26 @@ namespace :user_score do end puts ":followed_by calculate Completed. influence users count: #{users_influence.count}" - users_influence.each do |user_id, score| - UserScore.find_or_create_by_user_id(user_id).update_attribute(:influence, score) + 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 技术得分 # 顶踩帖 users_skill = {} PraiseTread.where("praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message'").all.each do |pt| obj = PraiseTread.find_object_by_type_and_id(pt.praise_tread_object_type, pt.praise_tread_object_id) if obj.nil? - next + next end target_user = obj.author level = pt.user.get_level if pt.praise_or_tread == 0 - #踩帖 - users_skill[pt.user.id] = users_skill[pt.user.id].to_i - 2 #踩别人帖-2分 + #踩帖 + users_skill[pt.user.id] = users_skill[pt.user.id].to_i - 2 #踩别人帖-2分 if level == 1 users_skill[target_user.id] = users_skill[target_user.id].to_i - 2 #帖子被一级会员踩-2分 add praise_tread elsif level == 2 @@ -80,7 +87,7 @@ namespace :user_score do users_skill[target_user.id] = users_skill[target_user.id].to_i - 6 #帖子被三级会员踩-6分 add praise_tread end elsif pt.praise_or_tread == 1 - #顶贴 + #顶贴 if level == 1 users_skill[target_user.id] = users_skill[target_user.id].to_i + 4 #帖子被一级会员顶+4分 add praise_tread elsif level == 2 @@ -91,11 +98,14 @@ namespace :user_score do end end puts ":praised_by_user and :treaded_by_user calculate Completed. skill users count: #{users_skill.count}" + UserScore.transaction do users_skill.each do |user_id, score| UserScore.find_or_create_by_user_id(user_id).update_attribute(:skill, score) end - puts "=== UserScore#skill calculate Completed. skill users count: #{users_skill.count}" - + end + puts "=== UserScore#skill calculate Completed. skill users count: #{users_skill.count}" + puts "" + # active 项目贡献得分 users_active = {} # 提交代码 @@ -115,20 +125,20 @@ namespace :user_score do end puts ":push_document calculate Completed. active users count: #{users_active.count}" #提交附件 - Attachment.includes(:author).all.each do |attachment| - #if attachment.container_id_changed? - # type = attachment.container_type - # types = %w|Document News Version Project Issue Message WikiPage| - # if types.include?(type) - if attachment.author.nil? - next - end - users_active[attachment.author.id] = users_active[attachment.author.id].to_i + 4 - # end - #end - end - puts ":push_file calculate Completed. active users count: #{users_active.count}" - #更新完成度 + Attachment.includes(:author).all.each do |attachment| + #if attachment.container_id_changed? + # type = attachment.container_type + # types = %w|Document News Version Project Issue Message WikiPage| + # if types.include?(type) + if attachment.author.nil? + next + end + users_active[attachment.author.id] = users_active[attachment.author.id].to_i + 4 + # end + #end + end + puts ":push_file calculate Completed. active users count: #{users_active.count}" + #更新完成度 Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio'").each do |j| users_active[j.user.id] = users_active[j.user.id].to_i + 2 end @@ -139,10 +149,14 @@ namespace :user_score do end puts ":post_issue calculate Completed. active users count: #{users_active.count}" - users_active.each do |user_id, score| - UserScore.find_or_create_by_user_id(user_id).update_attribute(:active, score) + + 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}" + puts "" end end @@ -151,11 +165,11 @@ desc "create tmp file, to test" file 'tmp/test.yml' do require 'yaml' var = { - :name => "name", - :age => "age", - :agent => "agent" + :name => "name", + :age => "age", + :agent => "agent" } File.open('tmp/test.yml', 'w') do |f| - f.write YAML.dump({'conf' => var }) + f.write YAML.dump({'conf' => var}) end end \ No newline at end of file