From 1c8811fda63db7176746e3af6f4815c08c5a6125 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 16 Jan 2024 10:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=96=91=E4=BF=AE=E6=8E=92=E8=A1=8C=E6=A6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admins/issues_rank_controller.rb | 29 +++++++++++++++ app/jobs/daily_project_statistics_job.rb | 2 + app/models/daily_project_statistic.rb | 26 +++++++------ app/views/admins/issues_rank/index.html.erb | 37 +++++++++++++++++++ app/views/admins/issues_rank/index.js.erb | 1 + .../issues_rank/shared/_data_list.html.erb | 26 +++++++++++++ app/views/admins/shared/_sidebar.html.erb | 1 + config/routes.rb | 1 + ...osed_issues_to_daily_project_statistics.rb | 5 +++ 9 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 app/controllers/admins/issues_rank_controller.rb create mode 100644 app/views/admins/issues_rank/index.html.erb create mode 100644 app/views/admins/issues_rank/index.js.erb create mode 100644 app/views/admins/issues_rank/shared/_data_list.html.erb create mode 100644 db/migrate/202401321314371_add_closed_issues_to_daily_project_statistics.rb diff --git a/app/controllers/admins/issues_rank_controller.rb b/app/controllers/admins/issues_rank_controller.rb new file mode 100644 index 000000000..530678ad5 --- /dev/null +++ b/app/controllers/admins/issues_rank_controller.rb @@ -0,0 +1,29 @@ +class Admins::IssuesRankController < Admins::BaseController + + def index + @statistics = DailyProjectStatistic.where('date >= ? AND date <= ?', begin_date, end_date) + @statistics = @statistics.group(:project_id).joins(:project).select("project_id, + sum(issues) as issues, + sum(closed_issues) as closed_issues, + projects.issues_count as issues_count") + @statistics = @statistics.order("#{sort_by} #{sort_direction}").limit(50) + end + + private + def begin_date + params.fetch(:begin_date, (Date.today-7.days).to_s) + end + + def end_date + params.fetch(:end_date, Date.today.to_s) + end + + def sort_by + DailyProjectStatistic.column_names.include?(params.fetch(:sort_by, "issues")) ? params.fetch(:sort_by, "issues") : "issues" + end + + def sort_direction + %w(desc asc).include?(params.fetch(:sort_direction, "desc")) ? params.fetch(:sort_direction, "desc") : "desc" + end + +end \ No newline at end of file diff --git a/app/jobs/daily_project_statistics_job.rb b/app/jobs/daily_project_statistics_job.rb index ad606f137..3672d1924 100644 --- a/app/jobs/daily_project_statistics_job.rb +++ b/app/jobs/daily_project_statistics_job.rb @@ -13,6 +13,7 @@ class DailyProjectStatisticsJob < ApplicationJob praises = result["praises"].to_i forks = result["forks"].to_i issues = result["issues"].to_i + closed_issues = result["closed_issues"].to_i pullrequests = result["pullrequests"].to_i commits = result["commits"].to_i score = visits *1 + watchers *5 + praises * 5 + forks * 10 + issues *5 + pullrequests * 10 + commits * 5 @@ -25,6 +26,7 @@ class DailyProjectStatisticsJob < ApplicationJob praises: praises, forks: forks, issues: issues, + closed_issues: closed_issues, pullrequests: pullrequests, commits: commits ) diff --git a/app/models/daily_project_statistic.rb b/app/models/daily_project_statistic.rb index f7fc0aad7..ffe51bdb3 100644 --- a/app/models/daily_project_statistic.rb +++ b/app/models/daily_project_statistic.rb @@ -2,18 +2,20 @@ # # Table name: daily_project_statistics # -# id :integer not null, primary key -# project_id :integer -# date :string(255) -# visits :integer default("0") -# watchers :integer default("0") -# praises :integer default("0") -# forks :integer default("0") -# issues :integer default("0") -# pullrequests :integer default("0") -# commits :integer default("0") -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# project_id :integer +# date :date +# score :integer default("0") +# visits :integer default("0") +# watchers :integer default("0") +# praises :integer default("0") +# forks :integer default("0") +# issues :integer default("0") +# pullrequests :integer default("0") +# commits :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# closed_issues :integer default("0") # # Indexes # diff --git a/app/views/admins/issues_rank/index.html.erb b/app/views/admins/issues_rank/index.html.erb new file mode 100644 index 000000000..b52076966 --- /dev/null +++ b/app/views/admins/issues_rank/index.html.erb @@ -0,0 +1,37 @@ +<% define_admin_breadcrumbs do %> + <% add_admin_breadcrumb('项目排行榜', admins_path) %> +<% end %> + + +
+ <%= form_tag(admins_issues_rank_index_path, method: :get, class: 'form-inline search-form flex-1', id: 'issue-rank-date-form') do %> +
+ 开始日期 + +
+
+ 截止日期 + +
+ <% end %> +
+ +
+ <%= render partial: 'admins/issues_rank/shared/data_list', locals: { statistics: @statistics } %> +
+ \ No newline at end of file diff --git a/app/views/admins/issues_rank/index.js.erb b/app/views/admins/issues_rank/index.js.erb new file mode 100644 index 000000000..189206df0 --- /dev/null +++ b/app/views/admins/issues_rank/index.js.erb @@ -0,0 +1 @@ +$('.issue-rank-list-container').html("<%= j( render partial: 'admins/issues_rank/shared/data_list', locals: { statistics: @statistics } ) %>"); \ No newline at end of file diff --git a/app/views/admins/issues_rank/shared/_data_list.html.erb b/app/views/admins/issues_rank/shared/_data_list.html.erb new file mode 100644 index 000000000..8e9068345 --- /dev/null +++ b/app/views/admins/issues_rank/shared/_data_list.html.erb @@ -0,0 +1,26 @@ + + + + + + + + + + + + <% statistics.each_with_index do |item, index| %> + + + + + + + + <% end %> + +
排名项目新增疑修数关闭疑修数当前疑修数量
<%= index + 1%> + "> + <%= "#{item&.project&.owner&.real_name}/#{item&.project&.name}" %> + + <%= item&.issues %><%= item&.closed_issues %><%= item&.issues_count %>
\ No newline at end of file diff --git a/app/views/admins/shared/_sidebar.html.erb b/app/views/admins/shared/_sidebar.html.erb index 4db545074..ac09e3732 100644 --- a/app/views/admins/shared/_sidebar.html.erb +++ b/app/views/admins/shared/_sidebar.html.erb @@ -81,6 +81,7 @@ <%= sidebar_item_group('#rank-submenu', '活跃度排行', icon: 'calendar') do %>
  • <%= sidebar_item(admins_users_rank_index_path, '用户活跃度排行', icon: 'user', controller: 'admins-users_rank') %>
  • <%= sidebar_item(admins_projects_rank_index_path, '项目活跃度排行', icon: 'database', controller: 'admins-projects_rank') %>
  • +
  • <%= sidebar_item(admins_issues_rank_index_path, '疑修活跃度排行', icon: 'database', controller: 'admins-issues_rank') %>
  • <% end %> diff --git a/config/routes.rb b/config/routes.rb index 6138028d5..a165a3d1e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -822,6 +822,7 @@ Rails.application.routes.draw do resources :identity_verifications resources :site_pages resources :page_themes + resources :issues_rank, only: [:index] resources :projects_rank, only: [:index] resources :sites resources :edu_settings diff --git a/db/migrate/202401321314371_add_closed_issues_to_daily_project_statistics.rb b/db/migrate/202401321314371_add_closed_issues_to_daily_project_statistics.rb new file mode 100644 index 000000000..2b38b18b0 --- /dev/null +++ b/db/migrate/202401321314371_add_closed_issues_to_daily_project_statistics.rb @@ -0,0 +1,5 @@ +class AddClosedIssuesToDailyProjectStatistics < ActiveRecord::Migration[5.2] + def change + add_column :daily_project_statistics, :closed_issues, :integer, default: 0 + end +end