You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

userscore.rake 6.7 kB

​
​
​
​
​
12 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
12 years ago
​
​
​
12 years ago
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
12 years ago
​
​
​
​
12 years ago
​
​
​
12 years ago
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
​
​
​
​
​
12 years ago
​
​
12 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
​
12 years ago
​
​
​
​
​
​
12 years ago
​
​
​
12 years ago
​
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. desc "User Score description"
  2. task :user_score do
  3. puts "user_score sync."
  4. end
  5. namespace :user_score do
  6. desc "calculating user score"
  7. task :calculate => :environment do
  8. puts "truncating table...#{Rails.env}"
  9. UserScore.destroy_all
  10. puts "loading..."
  11. # collaboration 协同得分
  12. users = {}
  13. # 发帖
  14. Message.includes(:author).where("parent_id IS NULL").all.each do |m|
  15. users[m.author.id] = users[m.author.id].to_i + 2
  16. end
  17. puts ":post_message calculate Completed. collaboration users count: #{users.count}"
  18. # 对缺陷的留言
  19. Journal.includes(:user).all.each do |j|
  20. users[j.user.id] = users[j.user.id].to_i + 1
  21. end
  22. puts ":post_issue calculate Completed. collaboration users count: #{users.count}"
  23. # 更改一次缺陷状态
  24. Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id'").each do |j|
  25. users[j.user.id] = users[j.user.id].to_i + 1
  26. end
  27. puts ":change_issue_status calculate Completed. collaboration users count: #{users.count}"
  28. # 对留言的回复
  29. JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL").each do |jfm|
  30. users[jfm.user.id] = users[jfm.user.id].to_i + 1
  31. end
  32. puts ":reply_message calculate Completed. collaboration users count: #{users.count}"
  33. # 对帖子的回复
  34. Message.includes(:author).where("parent_id IS NOT NULL").each do |m|
  35. users[m.author.id] = users[m.author.id].to_i + 1
  36. end
  37. puts ":reply_posting calculate Completed. collaboration users count: #{users.count}"
  38. UserScore.transaction do
  39. users.each do |user_id, score|
  40. UserScore.find_or_create_by_user_id(user_id).update_attribute(:collaboration, score)
  41. end
  42. end
  43. puts "=== UserScore#collaboration calculate Completed. collaboration users count: #{users.count}"
  44. puts ""
  45. users.clear
  46. # influence 影响力得分
  47. #关注
  48. users_influence = {}
  49. Watcher.includes(:watchable).where("watchable_type = 'Principal'").all.each do |w|
  50. users_influence[w.watchable.id] = users_influence[w.watchable.id].to_i + 2
  51. end
  52. puts ":followed_by calculate Completed. influence users count: #{users_influence.count}"
  53. UserScore.transaction do
  54. users_influence.each do |user_id, score|
  55. UserScore.find_or_create_by_user_id(user_id).update_attribute(:influence, score)
  56. end
  57. end
  58. puts "=== UserScore#influence calculate Completed. influence users count: #{users_influence.count}"
  59. puts ""
  60. # skill 技术得分
  61. # 顶踩帖
  62. users_skill = {}
  63. PraiseTread.where("praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message'").all.each do |pt|
  64. obj = PraiseTread.find_object_by_type_and_id(pt.praise_tread_object_type, pt.praise_tread_object_id)
  65. if obj.nil?
  66. next
  67. end
  68. target_user = obj.author
  69. level = pt.user.get_level
  70. if pt.praise_or_tread == 0
  71. #踩帖
  72. users_skill[pt.user.id] = users_skill[pt.user.id].to_i - 2 #踩别人帖-2分
  73. if level == 1
  74. users_skill[target_user.id] = users_skill[target_user.id].to_i - 2 #帖子被一级会员踩-2分 add praise_tread
  75. elsif level == 2
  76. users_skill[target_user.id] = users_skill[target_user.id].to_i - 4 #帖子被二级会员踩-4分 add praise_tread
  77. elsif level == 3
  78. users_skill[target_user.id] = users_skill[target_user.id].to_i - 6 #帖子被三级会员踩-6分 add praise_tread
  79. end
  80. elsif pt.praise_or_tread == 1
  81. #顶贴
  82. if level == 1
  83. users_skill[target_user.id] = users_skill[target_user.id].to_i + 4 #帖子被一级会员顶+4分 add praise_tread
  84. elsif level == 2
  85. users_skill[target_user.id] = users_skill[target_user.id].to_i + 6 #帖子被二级会员顶+6分 add praise_tread
  86. elsif level == 3
  87. users_skill[target_user.id] = users_skill[target_user.id].to_i + 8 #帖子被三级会员顶+8分 add praise_tread
  88. end
  89. end
  90. end
  91. puts ":praised_by_user and :treaded_by_user calculate Completed. skill users count: #{users_skill.count}"
  92. UserScore.transaction do
  93. users_skill.each do |user_id, score|
  94. UserScore.find_or_create_by_user_id(user_id).update_attribute(:skill, score)
  95. end
  96. end
  97. puts "=== UserScore#skill calculate Completed. skill users count: #{users_skill.count}"
  98. puts ""
  99. # active 项目贡献得分
  100. users_active = {}
  101. # 提交代码
  102. Changeset.includes(:user).all.each do |changeset|
  103. if changeset.user.nil?
  104. next
  105. end
  106. users_active[changeset.user.id] = users_active[changeset.user.id].to_i + 4
  107. end
  108. puts ":push_code calculate Completed. active users count: #{users_active.count}"
  109. #提交文档
  110. Document.includes(:user).all.each do |document|
  111. if document.user.nil?
  112. next
  113. end
  114. users_active[document.user.id] = users_active[document.user.id].to_i + 4
  115. end
  116. puts ":push_document calculate Completed. active users count: #{users_active.count}"
  117. #提交附件
  118. Attachment.includes(:author).all.each do |attachment|
  119. #if attachment.container_id_changed?
  120. # type = attachment.container_type
  121. # types = %w|Document News Version Project Issue Message WikiPage|
  122. # if types.include?(type)
  123. if attachment.author.nil?
  124. next
  125. end
  126. users_active[attachment.author.id] = users_active[attachment.author.id].to_i + 4
  127. # end
  128. #end
  129. end
  130. puts ":push_file calculate Completed. active users count: #{users_active.count}"
  131. #更新完成度
  132. Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio'").each do |j|
  133. users_active[j.user.id] = users_active[j.user.id].to_i + 2
  134. end
  135. puts ":update_issue_ratio calculate Completed. active users count: #{users_active.count}"
  136. #发布缺陷
  137. Issue.includes(:author).all.each do |issue|
  138. users_active[issue.author.id] = users_active[issue.author.id].to_i + 4
  139. end
  140. puts ":post_issue calculate Completed. active users count: #{users_active.count}"
  141. UserScore.transaction do
  142. users_active.each do |user_id, score|
  143. UserScore.find_or_create_by_user_id(user_id).update_attribute(:active, score)
  144. end
  145. end
  146. puts "=== UserScore#active calculate Completed. active users count: #{users_active.count}"
  147. puts ""
  148. end
  149. end
  150. desc "create tmp file, to test"
  151. file 'tmp/test.yml' do
  152. require 'yaml'
  153. var = {
  154. :name => "name",
  155. :age => "age",
  156. :agent => "agent"
  157. }
  158. File.open('tmp/test.yml', 'w') do |f|
  159. f.write YAML.dump({'conf' => var})
  160. end
  161. end

软件技术创新是当今国家整体创新能力的重要基础和发展引擎。近年来,大众参与的软件创新与创业活动已经成为网络时代软件开发和应用的新形态,正在快速改变着全球软件创新模式和软件产业格局。 ...