@ -337,7 +337,202 @@ module UserScoreHelper
:activity = > activity , :file = > file , :issue = > issue , :level = > level )
end
#====================================================================================================
def get_option_number ( user , type , project_id = nil )
if project_id . nil?
option_number = OptionNumber . where ( " user_id = ' #{ user . id } ' and score_type = ' #{ type } ' " ) ;
else
option_number = OptionNumber . where ( " user_id = ' #{ user . id } ' and score_type = ' #{ type } ' and project_id = ' #{ project_id } ' " ) ;
end
result = nil
if option_number . nil? || option_number . count == 0
result = OptionNumber . new
result . user_id = user . id
result . memo = 0
result . messages_for_issues = 0
result . issues_status = 0
result . replay_for_message = 0
result . replay_for_memo = 0
result . follow = 0
result . tread = 0
result . praise_by_one = 0
result . praise_by_two = 0
result . praise_by_three = 0
result . tread_by_one = 0
result . tread_by_two = 0
result . tread_by_three = 0
result . changeset = 0
result . document = 0
result . attachment = 0
result . issue_done_ratio = 0
result . post_issue = 0
result . total_score = 0
result . score_type = type
unless project_id . nil?
result . project_id = project_id
end
else
result = option_number . first
end
result
end
#更新分数
def update_score ( option_number )
option_number . total_score = collaboration ( option_number ) + influence ( option_number ) + skill ( option_number ) + active ( option_number )
option_number . save
end
#协同得分
def collaboration ( option_number )
option_number . memo * 2 + option_number . messages_for_issues + option_number . issues_status + option_number . replay_for_message + option_number . replay_for_memo
end
#影响力得分
def influence ( option_number )
option_number . follow * 2
end
#技术得分
def skill ( option_number )
option_number . praise_by_one * 4 + option_number . praise_by_two * 6 + option_number . praise_by_three * 8 - option_number . tread * 2 - option_number . tread_by_one * 2 - option_number . tread_by_two * 4 - option_number . tread_by_three * 6
end
#项目贡献得分
def active ( option_number )
option_number . changeset * 4 + option_number . document * 4 + option_number . attachment * 4 + option_number . issue_done_ratio * 2 + option_number . post_issue * 4
end
#更新发帖数
def update_memo_number ( user , type )
option_number = get_option_number ( user , type )
option_number . memo = Message . includes ( :author ) . where ( " parent_id IS NULL and author_id = ' #{ user . id } ' " ) . all . count + Memo . includes ( :author ) . where ( " parent_id IS NULL and author_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
#更新对缺陷留言数
def update_messges_for_issue ( user , type )
option_number = get_option_number ( user , type )
option_number . messages_for_issues = Journal . includes ( :user ) . where ( " user_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
#更新更改缺陷状态状态次数
def update_issues_status ( user , type )
option_number = get_option_number ( user , type )
option_number . issues_status = Journal . joins ( :details , :user ) . where ( " #{ JournalDetail . table_name } .prop_key = 'status_id' and #{ User . table_name } .id = ' #{ user . id } ' " ) . count
update_score ( option_number )
end
#更新对留言的回复数量
def update_replay_for_message ( user , type )
option_number = get_option_number ( user , type )
option_number . replay_for_message = JournalsForMessage . includes ( :user ) . where ( " m_parent_id IS NOT NULL and user_id = #{ user . id } " ) . count
update_score ( option_number )
end
#更新对帖子的回复数量
def update_replay_for_memo ( user , type )
option_number = get_option_number ( user , type )
option_number . replay_for_memo = Message . includes ( :author ) . where ( " parent_id IS NOT NULL and author_id = #{ user . id } " ) . all . count + Memo . includes ( :author ) . where ( " parent_id IS NOT NULL and author_id = #{ user . id } " ) . all . count
update_score ( option_number )
end
#更新被关注的人数
def update_follow ( user , type )
option_number = get_option_number ( user , type )
option_number . follow = Watcher . includes ( :watchable ) . where ( " watchable_type = 'Principal' and watchable_id = ' #{ user . id } ' " ) . count
update_score ( option_number )
end
#更新帖子踩各项数量
def update_tread ( user , type )
option_number = get_option_number ( user , type )
option_number . tread = PraiseTread . where ( " praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 0 and user_id = ' #{ user . id } ' " ) . all . count
pts = PraiseTread . where ( " praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 0 " ) . all
result = [ ]
result1 = [ ]
result2 = [ ]
pts . 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
end
target_user = obj . author
level = UserLevels . get_level ( pt . user ) #pt.user.get_level
project = pt . project
if level == 1 && target_user . id = user . id
result << pt
elsif level == 2 && target_user . id = user . id
result1 << pt
elsif level == 3 && target_user . id = user . id
result2 << pt
end
end
option_number . tread_by_one = result . count
option_number . tread_by_two = result1 . count
option_number . tread_by_three = result2 . count
update_score ( option_number )
end
#更新帖子顶数量
def update_praise ( user , type )
option_number = get_option_number ( user , type )
pts = PraiseTread . where ( " praise_tread_object_type = 'Memo' || praise_tread_object_type = 'Message' and praise_or_tread = 1 " ) . all
result = [ ]
result1 = [ ]
result2 = [ ]
pts . 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
end
target_user = obj . author
level = UserLevels . get_level ( pt . user ) #pt.user.get_level
project = pt . project
if level == 1 && target_user . id = user . id
result << pt
elsif level == 2 && target_user . id = user . id
result1 << pt
elsif level == 3 && target_user . id = user . id
result2 << pt
end
end
option_number . praise_by_one = result . count
option_number . praise_by_two = result1 . count
option_number . praise_by_three = result2 . count
update_score ( option_number )
end
#更新提交代码次数
def update_changeset ( user , type )
option_number = get_option_number ( user , type )
option_number . changeset = Changeset . includes ( :user ) . where ( " user_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
#更新文档提交次数
def update_document ( user , type )
option_number = get_option_number ( user , type )
option_number . document = Document . includes ( :user ) . where ( " user_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
#更新附件提交数量
def update_attachment ( user , type )
option_number = get_option_number ( user , type )
option_number . attachment = Attachment . includes ( :author ) . where ( " author_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
#更新缺陷完成度次数
def update_issue_done_ratio ( user , type )
option_number = get_option_number ( user , type )
option_number . issue_done_ratio = Journal . joins ( :details , :user ) . where ( " #{ JournalDetail . table_name } .prop_key = 'done_ratio' and #{ User . table_name } .id = ' #{ user . id } ' " ) . count
update_score ( option_number )
end
#更新发布缺陷次数
def update_post_issue ( user , type )
option_number = get_option_number ( user , type )
option_number . post_issue = Issue . includes ( :author ) . where ( " author_id = ' #{ user . id } ' " ) . all . count
update_score ( option_number )
end
end