|
- 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
|