57 lines
2.4 KiB
Ruby
57 lines
2.4 KiB
Ruby
class Admins::ProjectsRankController < Admins::BaseController
|
|
before_action :require_admin
|
|
|
|
def index
|
|
@statistics = DailyProjectStatistic.where("date >= ? AND date <= ?", begin_date, end_date)
|
|
@statistics = @statistics.group(:project_id).select("project_id,
|
|
sum(score) as score,
|
|
sum(visits) as visits,
|
|
sum(watchers) as watchers,
|
|
sum(praises) as praises,
|
|
sum(forks) as forks,
|
|
sum(issues) as issues,
|
|
sum(pullrequests) as pullrequests,
|
|
sum(commits) as commits").includes(:project)
|
|
@statistics = paginate @statistics.order("#{sort_by} #{sort_direction}")
|
|
export_excel(@statistics.limit(50))
|
|
end
|
|
|
|
private
|
|
|
|
def begin_date
|
|
params.fetch(:begin_date, (Date.yesterday-7.days).to_s)
|
|
end
|
|
|
|
def end_date
|
|
params.fetch(:end_date, Date.yesterday.to_s)
|
|
end
|
|
|
|
def sort_by
|
|
DailyProjectStatistic.column_names.include?(params.fetch(:sort_by, "score")) ? params.fetch(:sort_by, "score") : "score"
|
|
end
|
|
|
|
def sort_direction
|
|
%w(desc asc).include?(params.fetch(:sort_direction, "desc")) ? params.fetch(:sort_direction, "desc") : "desc"
|
|
end
|
|
|
|
def export_excel(data)
|
|
book = Spreadsheet::Workbook.new
|
|
sheet = book.create_worksheet :name => "项目活跃度排行"
|
|
sheet.row(0).concat %w(排名 项目全称 项目地址 得分 访问数 关注数 点赞数 fork数 疑修数 合并请求数 提交数)
|
|
data.each_with_index do |d, index|
|
|
sheet[index+1,0] = index+1
|
|
sheet[index+1,1] = "#{d&.project&.owner&.real_name}/#{d&.project&.name}"
|
|
sheet[index+1,2] = "#{Rails.application.config_for(:configuration)['platform_url']}/#{d&.project&.owner&.login}/#{d&.project&.identifier}"
|
|
sheet[index+1,3] = d.score
|
|
sheet[index+1,4] = d.visits
|
|
sheet[index+1,5] = d.watchers
|
|
sheet[index+1,6] = d.praises
|
|
sheet[index+1,7] = d.forks
|
|
sheet[index+1,8] = d.issues
|
|
sheet[index+1,9] = d.pullrequests
|
|
sheet[index+1,10] = d.commits
|
|
end
|
|
book.write "#{Rails.root}/public/项目活跃度排行.xls"
|
|
end
|
|
|
|
end |