diff --git a/app/controllers/admins/projects_rank_controller.rb b/app/controllers/admins/projects_rank_controller.rb index c4f968da4..df7598728 100644 --- a/app/controllers/admins/projects_rank_controller.rb +++ b/app/controllers/admins/projects_rank_controller.rb @@ -1,16 +1,77 @@ class Admins::ProjectsRankController < Admins::BaseController - + before_action :get_timeable_key_names, only:[:index] def index - @rank_date = rank_date - deleted_data = $redis_cache.smembers("v2-project-rank-deleted") - $redis_cache.zrem("v2-project-rank-#{rank_date}", deleted_data) unless deleted_data.blank? - @date_rank = $redis_cache.zrevrange("v2-project-rank-#{rank_date}", 0, -1, withscores: true) + puts @names_array + unless @names_array.blank? + $redis_cache.zunionstore("admin-days-project-rank", @names_array) + deleted_data = $redis_cache.smembers("v2-project-rank-deleted") + $redis_cache.zrem("admin-days-project-rank", deleted_data) unless deleted_data.blank? + @date_rank = $redis_cache.zrevrange("admin-days-project-rank", 0, -1, withscores: true) + @date_rank = @date_rank.map do |i| + visits = 0 + watchers = 0 + praises = 0 + forks = 0 + issues = 0 + pullrequests = 0 + commits = 0 + (begin_date..end_date).to_a.each do |d| + result = $redis_cache.hgetall("v2-project-statistic:#{i[0]}-#{d}") + visits += result["visits"].to_i + watchers += result["watchers"].to_i + praises += result["praises"].to_i + forks += result["forks"].to_i + issues += result["issues"].to_i + pullrequests += result["pullrequests"].to_i + commits += result["commits"].to_i + end + i + [visits,watchers,praises,forks,issues,pullrequests,commits] + end + case params[:sort_by] + when 'visits' + @date_rank = @date_rank.sort{|i| i[2]} + when 'watchers' + @date_rank = @date_rank.sort{|i| i[3]} + when 'praises' + @date_rank = @date_rank.sort{|i| i[4]} + when 'forks' + @date_rank = @date_rank.sort{|i| i[5]} + when 'issues' + @date_rank = @date_rank.sort{|i| i[6]} + when 'pullrequests' + @date_rank = @date_rank.sort{|i| i[7]} + when 'commits' + @date_rank = @date_rank.sort{|i| i[8]} + else + @date_rank = @date_rank.sort{|i| i[1]} + end + if params[:sort_direction].blank? || params[:sort_direction].to_s.downcase == "desc" + @date_rank = @date_rank.reverse + end + else + @date_rank = [] + end end private - def rank_date - params.fetch(:date, Date.today.to_s) + def begin_date + params.fetch(:begin_date, Date.today.to_s) + end + + def end_date + params.fetch(:end_date, Date.today.to_s) + end + + def get_timeable_key_names + begin + @names_array = [] + (begin_date..end_date).to_a.each do |i| + @names_array << "v2-project-rank-#{i}" + end + rescue + @names_array = [] + end end end \ No newline at end of file diff --git a/app/views/admins/projects_rank/index.html.erb b/app/views/admins/projects_rank/index.html.erb index d3a7926b7..3ea7b8ae5 100644 --- a/app/views/admins/projects_rank/index.html.erb +++ b/app/views/admins/projects_rank/index.html.erb @@ -6,69 +6,27 @@
<%= form_tag(admins_projects_rank_index_path, method: :get, class: 'form-inline search-form flex-1', id: 'project-rank-date-form') do %>
- + <% dates_array = (0..30).to_a.map { |item| [(Date.today-item.days).to_s, (Date.today-item.days).to_s] } %> - <%= select_tag(:date, options_for_select(dates_array, params[:date]), class:"form-control",id: "project-rank-date-select")%> + <%= select_tag(:begin_date, options_for_select(dates_array, params[:begin_date]), class:"form-control",id: "project-rank-begin-date-select")%> +
+
+ + <% dates_array = (0..30).to_a.map { |item| [(Date.today-item.days).to_s, (Date.today-item.days).to_s] } %> + <%= select_tag(:end_date, options_for_select(dates_array, params[:end_date]), class:"form-control",id: "project-rank-end-date-select")%>
<% end %>
-
- - - - - - - - - - - - - - - - - <% @date_rank.each_with_index do |item, index| %> - - - <% project_common = $redis_cache.hgetall("v2-project-common:#{item[0]}") %> - <% owner_common = $redis_cache.hgetall("v2-owner-common:#{project_common["owner_id"]}")%> - - - - <% project_date_statistic_key = "v2-project-statistic:#{item[0]}-#{@rank_date}"%> - <% if $redis_cache.exists(project_date_statistic_key)%> - <% visits = $redis_cache.hget(project_date_statistic_key, "visits") %> - - <% watchers = $redis_cache.hget(project_date_statistic_key, "watchers") %> - - <% praises = $redis_cache.hget(project_date_statistic_key, "praises") %> - - <% forks = $redis_cache.hget(project_date_statistic_key, "forks") %> - - <% issues = $redis_cache.hget(project_date_statistic_key, "issues") %> - - <% pullrequests = $redis_cache.hget(project_date_statistic_key, "pullrequests") %> - - <% commits = $redis_cache.hget(project_date_statistic_key, "commits") %> - - <% else %> - - <% end %> - - <% end %> - -
排名项目得分访问数关注数点赞数fork数疑修数合并请求数提交数
<%= index + 1%> - /<%= project_common["identifier"]%>"> - <%= "#{owner_common["name"]}/#{project_common["name"]}" %> - - <%= item[1] %><%= visits || 0 %><%= watchers || 0 %><%= praises || 0 %><%= forks || 0 %><%= issues || 0 %><%= pullrequests || 0 %><%= commits || 0 %>暂无数据
+
+ <%= render partial: 'admins/projects_rank/shared/data_list', locals: { date_rank: @date_rank } %>
\ No newline at end of file diff --git a/app/views/admins/projects_rank/index.js.erb b/app/views/admins/projects_rank/index.js.erb new file mode 100644 index 000000000..7e0f0e5fa --- /dev/null +++ b/app/views/admins/projects_rank/index.js.erb @@ -0,0 +1 @@ +$('.project-rank-list-container').html("<%= j( render partial: 'admins/projects_rank/shared/data_list', locals: { date_rank: @date_rank } ) %>"); \ No newline at end of file diff --git a/app/views/admins/projects_rank/shared/_data_list.html.erb b/app/views/admins/projects_rank/shared/_data_list.html.erb new file mode 100644 index 000000000..06b41b45e --- /dev/null +++ b/app/views/admins/projects_rank/shared/_data_list.html.erb @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + <% date_rank.each_with_index do |item, index| %> + + + <% project_common = $redis_cache.hgetall("v2-project-common:#{item[0]}") %> + <% owner_common = $redis_cache.hgetall("v2-owner-common:#{project_common["owner_id"]}")%> + + + + + + + + + + + + <% end %> + +
排名项目得分<%= sort_tag('访问数', name: 'visits', path: admins_projects_rank_index_path) %><%= sort_tag('关注数', name: 'watchers', path: admins_projects_rank_index_path) %><%= sort_tag('点赞数', name: 'praises', path: admins_projects_rank_index_path) %><%= sort_tag('fork数', name: 'forks', path: admins_projects_rank_index_path) %><%= sort_tag('疑修数', name: 'issues', path: admins_projects_rank_index_path) %><%= sort_tag('合并请求数', name: 'pullrequests', path: admins_projects_rank_index_path) %><%= sort_tag('提交数', name: 'commits', path: admins_projects_rank_index_path) %>
<%= index + 1%> + /<%= project_common["identifier"]%>"> + <%= "#{owner_common["name"]}/#{project_common["name"]}" %> + + <%= item[1] %><%= item[2] %><%= item[3] %><%= item[4] %><%= item[5] %><%= item[6] %><%= item[7] %><%= item[8] %>
\ No newline at end of file