From 90b53a7efbe3828ecee49592ebf8afc5fac2de58 Mon Sep 17 00:00:00 2001 From: Wen Date: Wed, 30 Apr 2014 13:51:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=88=86=E7=9A=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/user_score_helper.rb | 129 +++++++++++++++++++++++-------- app/views/test/index.html.erb | 9 +-- 2 files changed, 99 insertions(+), 39 deletions(-) diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb index 42b81fbdd..43ee05db8 100644 --- a/app/helpers/user_score_helper.rb +++ b/app/helpers/user_score_helper.rb @@ -54,57 +54,111 @@ module UserScoreHelper watcher_count = Watcher.where("watchable_type = 'principal' AND watchable_id = ?", user.id).count end + + + def calculate_skill_count(user) - praise_count = 0 - tread_count = 0 + praise_count_l0 = 0 + praise_count_l1 = 0 + praise_count_l2 = 0 + tread_count_l0 = 0 + tread_count_l1 = 0 + tread_count_l2 = 0 issues = Issue.where('author_id = ?', user.id) issues.each do |i| - ptcs = PraiseTreadCache.where('object_id = ?', i.id) - ptcs.each do |p| - praise_count = praise_count + p.praise_num.to_i - tread_count = tread_count + p.tread_num.to_i + pts = PraiseTread.where('praise_tread_object_id = ?', i.id) + pts.each do |p| + templevel = calculate_level(User.find(p.user_id)) + + if templevel.to_i == 0 + if p.praise_or_tread == 1 + praise_count_l0 = praise_count_l0 + 1 + else + tread_count_l0 = tread_count_l0 + 1 + end + end + if templevel.to_i == 1 + if p.praise_or_tread == 1 + praise_count_l1 = praise_count_l1 + 1 + else + tread_count_l1 = tread_count_l1 + 1 + end + end + if templevel.to_i == 2 + if p.praise_or_tread == 1 + praise_count_l2 = praise_count_l2 + 1 + else + tread_count_l2 + tread_count_l2 + 1 + end + end end end + + + bids = Bid.where('author_id = ?', user.id) bids.each do |b| - ptcs = PraiseTreadCache.where('object_id = ?', b.id) + ptcs = PraiseTread.where('praise_tread_object_id = ?', b.id) ptcs.each do |p| - praise_count = praise_count + p.praise_num.to_i - tread_count = tread_count + p.tread_num.to_i + templevel = calculate_level(User.find(p.user_id)) + + if templevel.to_i == 0 + if p.praise_or_tread == 1 + praise_count_l0 = praise_count_l0 + 1 + else + tread_count_l0 = tread_count_l0 + 1 + end + end + if templevel.to_i == 1 + if p.praise_or_tread == 1 + praise_count_l1 = praise_count_l1 + 1 + else + tread_count_l1 = tread_count_l1 + 1 + end + end + if templevel.to_i == 2 + if p.praise_or_tread == 1 + praise_count_l2 = praise_count_l2 + 1 + else + tread_count_l2 + tread_count_l2 + 1 + end + end end end contests = Contest.where('author_id = ?', user.id) contests.each do |c| - ptcs = PraiseTreadCache.where('object_id = ?', c.id) + ptcs = PraiseTread.where('praise_tread_object_id = ?', c.id) ptcs.each do |p| - praise_count = praise_count + p.praise_num.to_i - tread_count = tread_count + p.tread_num.to_i + templevel = calculate_level(User.find(p.user_id)) + + if templevel.to_i == 0 + if p.praise_or_tread == 1 + praise_count_l0 = praise_count_l0 + 1 + else + tread_count_l0 = tread_count_l0 + 1 + end + end + if templevel.to_i == 1 + if p.praise_or_tread == 1 + praise_count_l1 = praise_count_l1 + 1 + else + tread_count_l1 = tread_count_l1 + 1 + end + end + if templevel.to_i == 2 + if p.praise_or_tread == 1 + praise_count_l2 = praise_count_l2 + 1 + else + tread_count_l2 + tread_count_l2 + 1 + end + end end end - level = calculate_level(user) - - skill_score = 0 - - if level == 0 - skill_score = praise_count - 2.5 * tread_count - end - if level == 1 - skill_score = 2 * praise_count - 1.5 * tread_count - end - if level == 2 - skill_socre = 3 * praise_count - 2.5 * tread_count - end - if level == 3 - skill_socre = 4 * praise_count - 3.5 * tread_count - end - if level == 4 - skill_socre = 5 * praise_count - 4.5 * tread_count - end # case level # when 0 skill_score = praise_count - 0.5 * tread_count @@ -114,12 +168,19 @@ module UserScoreHelper # when 4 skill_socre = 5 * praise_count - 4.5 * tread_count # end - + skill_score = 2 * praise_count_l0.to_f + 3 * praise_count_l1.to_f + 4 * praise_count_l2.to_f + - 1 * tread_count_l0.to_f - 1.5 * tread_count_l1.to_f - 2 * tread_count_l2.to_f tread_user_count = PraiseTread.where('praise_or_tread = ? AND user_id = ?', 0, user.id).count - skill_score = skill_score - 0.5 * tread_user_count - + skill_score = skill_score.to_f - tread_user_count.to_f + + + + + + + return skill_score diff --git a/app/views/test/index.html.erb b/app/views/test/index.html.erb index 589412dda..eeef0f3da 100644 --- a/app/views/test/index.html.erb +++ b/app/views/test/index.html.erb @@ -12,14 +12,13 @@ <%= user.lastname %><%= user.firstname %> - + <%= calculate_file(user) %> + <%= calculate_issue(user) %> + <%= calculate_level(user) %> - <%= user.changesets.count %> <% end %>