diff --git a/app/models/issue.rb b/app/models/issue.rb index f96bac8f..b580d699 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -99,9 +99,20 @@ class Issue < ApplicationRecord scope :closed, ->{where(status_id: 5)} scope :opened, ->{where.not(status_id: 5)} after_create :incre_project_common, :incre_user_statistic, :incre_platform_statistic - after_save :change_versions_count, :send_update_message_to_notice_system, :associate_attachment_container + after_save :incre_or_decre_closed_issues_count, :change_versions_count, :send_update_message_to_notice_system, :associate_attachment_container after_destroy :update_closed_issues_count_in_project!, :decre_project_common, :decre_user_statistic, :decre_platform_statistic + def incre_or_decre_closed_issues_count + if previous_changes[:status_id].present? + if previous_changes[:status_id][1] == 5 + CacheAsyncSetJob.perform_later("project_common_service", {closed_issues: 1}, self.project_id) + end + if previous_changes[:status_id][0] == 5 + CacheAsyncSetJob.perform_later("project_common_service", {closed_issues: -1}, self.project_id) + end + end + end + def incre_project_common CacheAsyncSetJob.perform_later("project_common_service", {issues: 1}, self.project_id) end diff --git a/app/services/cache/v2/project_common_service.rb b/app/services/cache/v2/project_common_service.rb index 0d167c2a..1e85f3e0 100644 --- a/app/services/cache/v2/project_common_service.rb +++ b/app/services/cache/v2/project_common_service.rb @@ -1,5 +1,5 @@ class Cache::V2::ProjectCommonService < ApplicationService - attr_reader :project_id, :owner_id, :name, :identifier, :description, :visits, :watchers, :praises, :forks, :issues, :pullrequests, :commits + attr_reader :project_id, :owner_id, :name, :identifier, :description, :visits, :watchers, :praises, :forks, :issues, :closed_issues, :pullrequests, :commits attr_accessor :project def initialize(project_id, params={}) @@ -13,6 +13,7 @@ class Cache::V2::ProjectCommonService < ApplicationService @praises = params[:praises] @forks = params[:forks] @issues = params[:issues] + @closed_issues = params[:closed_issues] @pullrequests = params[:pullrequests] @commits = params[:commits] end @@ -78,6 +79,10 @@ class Cache::V2::ProjectCommonService < ApplicationService "issues" end + def closed_issues_key + "closed_issues" + end + def pullrequests_key "pullrequests" end @@ -151,6 +156,10 @@ class Cache::V2::ProjectCommonService < ApplicationService Cache::V2::ProjectRankService.call(@project_id, {issues: @issues}) Cache::V2::ProjectDateRankService.call(@project_id, Date.today, {issues: @issues}) end + if @closed_issues.present? + $redis_cache.hincrby(project_common_key, closed_issues_key, @closed_issues) + Cache::V2::ProjectDateRankService.call(@project_id, Date.today, {closed_issues: @closed_issues}) + end if @pullrequests.present? $redis_cache.hincrby(project_common_key, pullrequests_key, @pullrequests) Cache::V2::ProjectRankService.call(@project_id, {pullrequests: @pullrequests}) @@ -202,6 +211,10 @@ class Cache::V2::ProjectCommonService < ApplicationService $redis_cache.hset(project_common_key, issues_key, Issue.issue_issue.where(project_id: @project_id).count) end + def reset_project_closed_issues + $redis_cache.hset(project_common_key, closed_issues_key, Issue.issue_issue.closed.where(project_id: @project_id).count) + end + def reset_project_pullrequests $redis_cache.hset(project_common_key, pullrequests_key, PullRequest.where(project_id: @project_id).count) end @@ -224,6 +237,7 @@ class Cache::V2::ProjectCommonService < ApplicationService reset_project_praises reset_project_forks reset_project_issues + reset_project_closed_issues reset_project_pullrequests reset_project_commits diff --git a/app/services/cache/v2/project_date_rank_service.rb b/app/services/cache/v2/project_date_rank_service.rb index 9df69bbb..bf661f0a 100644 --- a/app/services/cache/v2/project_date_rank_service.rb +++ b/app/services/cache/v2/project_date_rank_service.rb @@ -1,6 +1,6 @@ # 项目日活跃度计算存储 class Cache::V2::ProjectDateRankService < ApplicationService - attr_reader :project_id, :rank_date, :visits, :praises, :forks, :issues, :pullrequests, :commits + attr_reader :project_id, :rank_date, :visits, :praises, :forks, :issues, :closed_issues, :pullrequests, :commits attr_accessor :project_common def initialize(project_id, rank_date=Date.today, params={}) @@ -11,6 +11,7 @@ class Cache::V2::ProjectDateRankService < ApplicationService @praises = params[:praises] @forks = params[:forks] @issues = params[:issues] + @closed_issues = params[:closed_issues] @pullrequests = params[:pullrequests] @commits = params[:commits] end @@ -57,6 +58,9 @@ class Cache::V2::ProjectDateRankService < ApplicationService $redis_cache.zincrby(project_rank_key, @issues.to_i * 5, @project_id) $redis_cache.hincrby(project_rank_statistic_key, "issues", @issues.to_i) end + if @closed_issues.present? + $redis_cache.hincrby(project_rank_statistic_key, "closed_issues", @closed_issues.to_i) + end if @pullrequests.present? $redis_cache.zincrby(project_rank_key, @pullrequests.to_i * 10, @project_id) $redis_cache.hincrby(project_rank_statistic_key, "pullrequests", @pullrequests.to_i)