|
|
|
@ -34,11 +34,123 @@ module UserScoreHelper
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def calculate_skill_count(user)
|
|
|
|
|
0
|
|
|
|
|
|
|
|
|
|
praise_count = 0
|
|
|
|
|
tread_count = 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
|
|
|
|
|
tread_count = tread_count + p.tread_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
bids = Bid.where('author_id = ?', user.id)
|
|
|
|
|
bids.each do |b|
|
|
|
|
|
ptcs = PraiseTreadCache.where('object_id = ?', b.id)
|
|
|
|
|
ptcs.each do |p|
|
|
|
|
|
praise_count = praise_count + p.praise_num
|
|
|
|
|
tread_count = tread_count + p.tread_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
contests = Contest.where('author_id = ?', user.id)
|
|
|
|
|
contests.each do |c|
|
|
|
|
|
ptcs = PraiseTreadCache.where('object_id = ?', c.id)
|
|
|
|
|
ptcs.each do |p|
|
|
|
|
|
praise_count = praise_count + p.praise_num
|
|
|
|
|
tread_count = tread_count + p.tread_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
level = calculate_level(user)
|
|
|
|
|
|
|
|
|
|
skill_score = 0
|
|
|
|
|
|
|
|
|
|
if level == 0
|
|
|
|
|
skill_score = praise_count - 0.5 * tread_count
|
|
|
|
|
elseif level == 1
|
|
|
|
|
skill_score = 2 * praise_count - 1.5 * tread_count
|
|
|
|
|
elseif level == 2
|
|
|
|
|
skill_socre = 3 * praise_count - 2.5 * tread_count
|
|
|
|
|
elseif level == 3
|
|
|
|
|
skill_socre = 4 * praise_count - 3.5 * tread_count
|
|
|
|
|
elseif level == 4
|
|
|
|
|
skill_socre = 5 * praise_count - 4.5 * tread_count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# case level
|
|
|
|
|
# when 0 skill_score = praise_count - 0.5 * tread_count
|
|
|
|
|
# when 1 skill_score = 2 * praise_count - 1.5 * tread_count
|
|
|
|
|
# when 2 skill_socre = 3 * praise_count - 2.5 * tread_count
|
|
|
|
|
# when 3 skill_socre = 4 * praise_count - 3.5 * tread_count
|
|
|
|
|
# when 4 skill_socre = 5 * praise_count - 4.5 * tread_count
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tread_user_count = PraiseTread.where('praise_or_tread = ?, user_id = ?', 0, user.id).count
|
|
|
|
|
|
|
|
|
|
skill_score = skill_score - 0.5 * tread_user_count
|
|
|
|
|
|
|
|
|
|
return skill_score
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def calculate_level(user)
|
|
|
|
|
1
|
|
|
|
|
commit_count = user.changesets.count
|
|
|
|
|
max_praise_num = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
issues = Issue.where('author_id = ?', user.id)
|
|
|
|
|
issues.each do |i|
|
|
|
|
|
ptcs = PraiseTreadCache.where('object_id = ?', i.id)
|
|
|
|
|
ptcs.each do |p|
|
|
|
|
|
if p.praise_num > max_praise_num
|
|
|
|
|
max_praise_num = p.praise_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
bids = Bid.where('author_id = ?', user.id)
|
|
|
|
|
bids.each do |b|
|
|
|
|
|
ptcs = PraiseTreadCache.where('object_id = ?', b.id)
|
|
|
|
|
ptcs.each do |p|
|
|
|
|
|
if p.praise_num > max_praise_num
|
|
|
|
|
max_praise_num = p.praise_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
contests = Contest.where('author_id = ?', user.id)
|
|
|
|
|
contests.each do |c|
|
|
|
|
|
ptcs = PraiseTreadCache.where('object_id = ?', c.id)
|
|
|
|
|
ptcs.each do |p|
|
|
|
|
|
if p.praise_num > max_praise_num
|
|
|
|
|
max_praise_num = p.praise_num
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
best_answer_num = 0
|
|
|
|
|
|
|
|
|
|
level = 0
|
|
|
|
|
|
|
|
|
|
if max_praise_num > 4
|
|
|
|
|
level = 1
|
|
|
|
|
elseif commit_count > 0 and commit_count < 101
|
|
|
|
|
level = 1
|
|
|
|
|
elseif commit_count > 100
|
|
|
|
|
level = 2
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return level
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def calculate_activity_count(user)
|
|
|
|
|