@ -18,6 +18,8 @@
class UserScore < ActiveRecord :: Base
belongs_to :user
before_save :correct_score
def self . find_max_file
self . maximum ( :file )
end
@ -33,4 +35,223 @@ class UserScore < ActiveRecord::Base
def self . find_min_issue
self . minimum ( :file )
end
# 以上类方法目测没用,反正也报错
# ===============================================================================
# 前略·协同得分
# operate - 更新操作 类型 symbol
# user - 计分用户
#
# Examples
#
# UserScore.joint(:post_message, User.current, nil)
# # => true #当前用户发帖计分操作成功
#
# Returns boolean. 返回积分保存结果
def self . joint ( operate , current_user , target_user , options = { } )
current_user , target_user = get_users ( current_user , target_user )
user_score = current_user . user_score_attr
case operate
when :post_message # current_user 发帖了 Add Message
user_score . collaboration = user_score . collaboration . to_i + 2
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } posting a message. options => ( #{ options . to_s } ) "
when :delete_message # current_user 发帖了 Delete Message
user_score . collaboration = user_score . collaboration . to_i - 2
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } deleting a message. options => ( #{ options . to_s } ) "
when :post_issue # current_user 对 target_user 的缺陷留言了 Add Journal
user_score . collaboration = user_score . collaboration . to_i + 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } posting a issue. options => ( #{ options . to_s } ) "
when :delete_issue # current_user 删除了 对 target_user 的缺陷留言了 Delete Journal
user_score . collaboration = user_score . collaboration . to_i - 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } deleting a issue. options => ( #{ options . to_s } ) "
when :change_issue_status # current_user 更改了缺陷的状态 Changed Issue
user_score . collaboration = user_score . collaboration . to_i + 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } change issue status. options => ( #{ options . to_s } ) "
when :reply_message # current_user 对 target_user 留言的回复 Add Journals_for_messages
user_score . collaboration = user_score . collaboration . to_i + 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } reply message. options => ( #{ options . to_s } ) "
when :reply_message_delete # current_user 删除了对 target_user 留言的回复 delete Journals_for_messages
user_score . collaboration = user_score . collaboration . to_i - 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } delete reply message. options => ( #{ options . to_s } ) "
when :reply_posting # current_user 对 target_user 帖子的回复 Add Message
user_score . collaboration = user_score . collaboration . to_i + 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } reply posting. options => ( #{ options . to_s } ) "
when :reply_deleting # current_user 删除了 对 target_user 帖子的回复 Delete Message
user_score . collaboration = user_score . collaboration . to_i - 1
user_score . save
Rails . logger . info " [UserScore # joint] ===> User: #{ current_user } reply deleting. options => ( #{ options . to_s } ) "
else
Rails . logger . error " [UserScore # joint] ===> #{ operate } is not define. "
return false
end
rescue = > e
Rails . logger . error " [UserScore # joint] ===> Exception: #{ e } . "
end
# 前略·影响力得分
# operate - 更新操作 类型 symbol
# user - 计分用户
#
# Examples
#
# UserScore.influence(:followed_by, user)
# # => true #当前被关注用户记分成功
#
# Returns boolean. 返回积分保存结果
def self . influence ( operate , current_user , target_user , options = { } )
current_user , target_user = get_users ( current_user , target_user )
user_score = target_user . user_score_attr
case operate
when :followed_by # current_user 关注了target_user
user_score . influence = user_score . influence . to_i + 2
user_score . save
Rails . logger . info " [UserScore # influence] ===> User: #{ current_user } be followed. options => ( #{ options . to_s } ) "
when :cancel_followed # current_uer 取消了对 target_user的关注
user_score . influence = user_score . influence . to_i - 2
user_score . save
Rails . logger . info " [UserScore # influence] ===> User: #{ current_user } canceled followed. options => ( #{ options . to_s } ) "
else
Rails . logger . error " [UserScore # influence] ===> #{ operate } is not define. "
return false
end
rescue = > e
Rails . logger . error " [UserScore # influence] ===> Exception: #{ e } . "
end
# 前略·技术得分
# operate - 更新操作 类型 symbol
# user - 计分用户
#
# Examples
#
# UserScore.skill(:followed_by, current_user, target_user)
# # => true #当前current_user对target_user用户帖子的记分成功
#
# Returns boolean. 返回积分保存结果
def self . skill ( operate , current_user , target_user , options = { } )
current_user , target_user = get_users ( current_user , target_user )
current_user_score = current_user . user_score_attr
target_user_score = target_user . user_score_attr
case operate
# when :treading # current_user 踩了 target_user 的帖子
# Rails.logger.info "[UserScore#skill] ===> User: #{current_user} treading #{target_user}'s posting. options => (#{options.to_s})"
when :treaded_by_user # current_user 踩了 target_user 的帖子
current_user_score . skill = current_user_score . skill . to_i - 2 #踩别人的帖子减2分
current_user_score . save
if current_user . id == target_user . id
target_user . reload
target_user_score = target_user . user_score_attr
end
level = current_user . get_level
if level == 1
target_user_score . skill = target_user_score . skill . to_i - 2 #帖子被一级会员踩-2分
target_user_score . save
elsif level == 2
target_user_score . skill = target_user_score . skill . to_i - 4 #帖子被二级会员踩-4分
target_user_score . save
elsif level == 3
target_user_score . skill = target_user_score . skill . to_i - 6 #帖子被三级会员踩-6分
target_user_score . save
end
Rails . logger . info " [UserScore # skill] ===> User: #{ current_user } treaded_by #{ target_user } . options => ( #{ options . to_s } ) "
when :praised_by_user # current_user 顶了 target_user 的帖子
level = current_user . get_level
if level == 1
target_user_score . skill = target_user_score . skill . to_i + 4 #帖子被一级会员顶+4分
target_user_score . save
elsif level == 2
target_user_score . skill = target_user_score . skill . to_i + 6 #帖子被二级会员顶+6分
target_user_score . save
elsif level == 3
target_user_score . skill = target_user_score . skill . to_i + 8 #帖子被三级会员顶+8分
target_user_score . save
end
Rails . logger . info " [UserScore # skill] ===> User: #{ current_user } praised_by #{ target_user } . options => ( #{ options . to_s } ) "
else
Rails . logger . error " [UserScore # skill] ===> #{ operate } is not define. "
return false
end
rescue = > e
Rails . logger . error " [UserScore # skill] ===> Exception: #{ e } . "
end
# 前略·项目得分
# operate - 更新操作 类型 symbol
# user - 计分用户
#
# Examples
#
# UserScore.project(:pull_code, current_user)
# # => true #当前current_user对项目贡献积分成功
#
# Returns boolean. 返回积分保存结果
def self . project ( operate , current_user , options = { } )
current_user , target_user = get_users ( current_user , nil )
user_score = current_user . try ( :user_score_attr )
return false if current_user . nil?
case operate
when :push_code # current_user 提交了代码
user_score = user_score . active . to_i + 4
user_score . save
Rails . logger . debug " [UserScore # project] ===> User: [ #{ current_user . id } , #{ current_user . name } ] pushed code one time. options => ( #{ options . to_s } ) "
when :push_document # current_user
user_score . active = user_score . active . to_i + 4
user_score . save
Rails . logger . debug " [UserScore # project] ===> User: [ #{ current_user . id } , #{ current_user . name } ] pushed a document. options => ( #{ options . to_s } ) "
when :push_file # current_user
user_score . active = user_score . active . to_i + 4
user_score . save
Rails . logger . debug " [UserScore # project] ===> User: [ #{ current_user . id } , #{ current_user . name } ] pushed a file. options => ( #{ options . to_s } ) "
when :update_issue_ratio # current_user
user_score . active = user_score . active . to_i + 2
user_score . save
Rails . logger . debug " [UserScore # project] ===> User: [ #{ current_user . id } , #{ current_user . name } ] updated issue ratio. options => ( #{ options . to_s } ) "
when :post_issue # current_user
user_score . active = user_score . active . to_i + 4
user_score . save
Rails . logger . debug " [UserScore # project] ===> User: [ #{ current_user . id } , #{ current_user . name } ] posting issue. options => ( #{ options . to_s } ) "
else
Rails . logger . error " [UserScore # project] ===> #{ operate } is not define. "
return false
end
rescue = > e
Rails . logger . error " [UserScore # project] ===> Exception: #{ e } . "
end
private
def self . get_users ( current_user , target_user )
cUser = ( current_user . kind_of? User ) ? current_user : User . find_by_id ( current_user )
tUser = ( target_user . kind_of? User ) ? target_user : User . find_by_id ( target_user )
[ cUser , tUser ]
end
#修正分数
#分数小于0时修正为0
#分数大于等于0时不修正 -by zjc
def correct_score
if ! self . collaboration . nil? && self . collaboration < 0
self . collaboration = 0
end
if ! self . influence . nil? && self . influence < 0
self . influence = 0
end
if ! self . skill . nil? && self . skill < 0
self . skill = 0
end
if ! self . active . nil? && self . active < 0
self . active = 0
end
end
end