diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb index e32844994..fbdea6d10 100644 --- a/app/controllers/commit_logs_controller.rb +++ b/app/controllers/commit_logs_controller.rb @@ -32,9 +32,9 @@ class CommitLogsController < ApplicationController # 触发变更issue状态的job close_issue_content = message.to_s.scan(/\b(Close|Closes|Closed|Closing|close|closes|closed|closing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, commit_user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(commit_id, project, commit_user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? solve_issue_content = message.to_s.scan(/\b(Fix|Fixes|Fixed|Fixing|fix|fixes|fixed|fixing|Resolve|Resolves|Resolved|Resolving|resolve|resolves|resolved|resolving|Implement|Implements|Implemented|Implementing|implement|implements|implemented|implementing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, commit_user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(commit_id, project, commit_user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? end end diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 0e456b7cb..7db38a4dc 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -7,7 +7,7 @@ class ChangeIssueStatusByMessageJob < ApplicationJob # Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing # 以上关键词后接 issue_id 例如:Closes #234 Closes #123, #245, #992 - def perform(project, user, tag_issue_id_content, status_id=1) + def perform(commitsha, project, user, tag_issue_id_content, status_id=1) Rails.logger.info "需要操作的issue_id内容为 #{tag_issue_id_content}" tag_issue_id_content = tag_issue_id_content.gsub(/\s+/, '') tag_issue_id_content.to_s.split(",").each do |tag_issue| @@ -18,9 +18,9 @@ class ChangeIssueStatusByMessageJob < ApplicationJob next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? - Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") else - Api::V1::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + Api::V1::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") end end end diff --git a/app/models/journal.rb b/app/models/journal.rb index 377ca1331..b3a699c8f 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -22,6 +22,7 @@ # resolveer_id :integer # need_respond :boolean default("0") # updated_on :datetime +# operate_by :string(255) default("Issue") # # Indexes # diff --git a/app/services/api/pm/issues/update_service.rb b/app/services/api/pm/issues/update_service.rb index 661bd211f..21119ca9b 100644 --- a/app/services/api/pm/issues/update_service.rb +++ b/app/services/api/pm/issues/update_service.rb @@ -3,7 +3,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService include Api::V1::Issues::Concerns::Checkable include Api::V1::Issues::Concerns::Loadable - attr_reader :project, :issue, :current_user + attr_reader :project, :issue, :current_user, :operate_by attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num attr_reader :target_pm_project_id, :pm_sprint_id, :pm_issue_type, :root_id, :time_scale attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id @@ -12,10 +12,11 @@ class Api::Pm::Issues::UpdateService < ApplicationService validates :project, :issue, :current_user, presence: true validates :blockchain_token_num, numericality: {greater_than: 0}, allow_blank: true - def initialize(project, issue, params, current_user = nil) + def initialize(project, issue, params, current_user = nil, operate_by='Issue') @project = project @issue = issue @current_user = current_user + @operate_by = operate_by @status_id = params[:status_id] @priority_id = params[:priority_id] @milestone_id = params[:milestone_id] @@ -183,91 +184,91 @@ class Api::Pm::Issues::UpdateService < ApplicationService begin # 更改标题 if @updated_issue.previous_changes["subject"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "subject", old_value: @updated_issue.previous_changes["subject"][0], value: @updated_issue.previous_changes["subject"][1]}) end # 更改描述 if @updated_issue.previous_changes["description"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "description", old_value: @updated_issue.previous_changes["description"][0], value: @updated_issue.previous_changes["description"][1]}) end # 修改状态 if @updated_issue.previous_changes["status_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "status_id", old_value: @updated_issue.previous_changes["status_id"][0], value: @updated_issue.previous_changes["status_id"][1]}) end # 修改优先级 if @updated_issue.previous_changes["priority_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "priority_id", old_value: @updated_issue.previous_changes["priority_id"][0], value: @updated_issue.previous_changes["priority_id"][1]}) end # 修改工作项类型 if @updated_issue.previous_changes["pm_issue_type"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "pm_issue_type", old_value: @updated_issue.previous_changes["pm_issue_type"][0], value: @updated_issue.previous_changes["pm_issue_type"][1]}) end # 修改迭代 if @updated_issue.previous_changes["pm_sprint_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "pm_sprint_id", old_value: @updated_issue.previous_changes["pm_sprint_id"][0], value: @updated_issue.previous_changes["pm_sprint_id"][1]}) end # 修改代码库 if @updated_issue.previous_changes["project_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "project_id", old_value: @updated_issue.previous_changes["project_id"][0], value: @updated_issue.previous_changes["project_id"][1]}) end # 修改里程碑 if @updated_issue.previous_changes["fixed_version_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "fixed_version_id", old_value: @updated_issue.previous_changes["fixed_version_id"][0], value: @updated_issue.previous_changes["fixed_version_id"][1]}) end # 更改分支 if @updated_issue.previous_changes["branch_name"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "branch_name", old_value: @updated_issue.previous_changes["branch_name"][0], value: @updated_issue.previous_changes["branch_name"][1]}) end # 更改开始时间 if @updated_issue.previous_changes["start_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "start_date", old_value: @updated_issue.previous_changes["start_date"][0], value: @updated_issue.previous_changes["start_date"][1]}) end # 更改结束时间 if @updated_issue.previous_changes["due_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "due_date", old_value: @updated_issue.previous_changes["due_date"][0], value: @updated_issue.previous_changes["due_date"][1]}) end # 更改预估工时 if @updated_issue.previous_changes["time_scale"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "time_scale", old_value: @updated_issue.previous_changes["time_scale"][0], value: @updated_issue.previous_changes["time_scale"][1]}) end # 更改父工作项 if @updated_issue.previous_changes["root_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "root_id", old_value: @updated_issue.previous_changes["root_id"][0], value: @updated_issue.previous_changes["root_id"][1]}) # 更改子工作项 before_parent_issue = Issue.find_by_id(@updated_issue.previous_changes["root_id"][0]) if before_parent_issue.present? - journal = before_parent_issue.journals.create!({user_id: current_user.id}) + journal = before_parent_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "tag_leaf_issue", old_value: @updated_issue.id.to_s}) end after_parent_issue = Issue.find_by_id(@updated_issue.previous_changes["root_id"][1]) if after_parent_issue.present? - journal = after_parent_issue.journals.create!({user_id: current_user.id}) + journal = after_parent_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "tag_leaf_issue", value: @updated_issue.id.to_s}) end end @@ -283,7 +284,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_assigner_ids = [] if @assigner_ids.nil? now_assigner_ids = @updated_issue.assigners.pluck(:id) if !(now_assigner_ids.sort == new_assigner_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "assigner", prop_key: "#{new_assigner_ids.size}", old_value: now_assigner_ids.join(","), value: new_assigner_ids.join(",")}) end @@ -299,7 +300,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_issue_tag_ids = [] if @issue_tag_ids.nil? now_issue_tag_ids = @updated_issue.issue_tags.pluck(:id) if !(now_issue_tag_ids.sort == new_issue_tag_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "issue_tag", prop_key: "#{new_issue_tag_ids.size}", old_value: now_issue_tag_ids.join(","), value: new_issue_tag_ids.join(",")}) end rescue @@ -315,7 +316,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_attachment_ids = [] if @attachment_ids.nil? now_attachment_ids = @updated_issue.attachments.pluck(:id) if !(now_attachment_ids.sort == new_attachment_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attachment", prop_key: "#{new_attachment_ids.size}", old_value: now_attachment_ids.join(","), value: new_attachment_ids.join(",")}) end rescue diff --git a/app/services/api/v1/issues/update_service.rb b/app/services/api/v1/issues/update_service.rb index 10f814300..21f2b9267 100644 --- a/app/services/api/v1/issues/update_service.rb +++ b/app/services/api/v1/issues/update_service.rb @@ -3,7 +3,7 @@ class Api::V1::Issues::UpdateService < ApplicationService include Api::V1::Issues::Concerns::Checkable include Api::V1::Issues::Concerns::Loadable - attr_reader :project, :issue, :current_user + attr_reader :project, :issue, :current_user, :operate_by attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num attr_reader :target_pm_project_id, :pm_sprint_id, :pm_issue_type, :root_id, :time_scale attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id @@ -12,10 +12,11 @@ class Api::V1::Issues::UpdateService < ApplicationService validates :project, :issue, :current_user, presence: true validates :blockchain_token_num, numericality: {greater_than: 0}, allow_blank: true - def initialize(project, issue, params, current_user = nil) + def initialize(project, issue, params, current_user = nil, operate_by='Issue') @project = project @issue = issue @current_user = current_user + @operate_by = operate_by @status_id = params[:status_id] @priority_id = params[:priority_id] @milestone_id = params[:milestone_id] @@ -183,49 +184,49 @@ class Api::V1::Issues::UpdateService < ApplicationService begin # 更改标题 if @updated_issue.previous_changes["subject"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "subject", old_value: @updated_issue.previous_changes["subject"][0], value: @updated_issue.previous_changes["subject"][1]}) end # 更改描述 if @updated_issue.previous_changes["description"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "description", old_value: @updated_issue.previous_changes["description"][0], value: @updated_issue.previous_changes["description"][1]}) end # 修改状态 if @updated_issue.previous_changes["status_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "status_id", old_value: @updated_issue.previous_changes["status_id"][0], value: @updated_issue.previous_changes["status_id"][1]}) end # 修改优先级 if @updated_issue.previous_changes["priority_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "priority_id", old_value: @updated_issue.previous_changes["priority_id"][0], value: @updated_issue.previous_changes["priority_id"][1]}) end # 修改里程碑 if @updated_issue.previous_changes["fixed_version_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "fixed_version_id", old_value: @updated_issue.previous_changes["fixed_version_id"][0], value: @updated_issue.previous_changes["fixed_version_id"][1]}) end # 更改分支 if @updated_issue.previous_changes["branch_name"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "branch_name", old_value: @updated_issue.previous_changes["branch_name"][0], value: @updated_issue.previous_changes["branch_name"][1]}) end # 更改开始时间 if @updated_issue.previous_changes["start_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "start_date", old_value: @updated_issue.previous_changes["start_date"][0], value: @updated_issue.previous_changes["start_date"][1]}) end # 更改结束时间 if @updated_issue.previous_changes["due_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "due_date", old_value: @updated_issue.previous_changes["due_date"][0], value: @updated_issue.previous_changes["due_date"][1]}) end rescue @@ -240,7 +241,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_assigner_ids = [] if @assigner_ids.nil? now_assigner_ids = @updated_issue.assigners.pluck(:id) if !(now_assigner_ids & assigner_ids).empty? || !(now_assigner_ids.empty? && new_assigner_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "assigner", prop_key: "#{new_assigner_ids.size}", old_value: now_assigner_ids.join(","), value: new_assigner_ids.join(",")}) end @@ -256,7 +257,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_issue_tag_ids = [] if @issue_tag_ids.nil? now_issue_tag_ids = @updated_issue.issue_tags.pluck(:id) if !(now_issue_tag_ids & new_issue_tag_ids).empty? || !(now_issue_tag_ids.empty? && new_issue_tag_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "issue_tag", prop_key: "#{new_issue_tag_ids.size}", old_value: now_issue_tag_ids.join(","), value: new_issue_tag_ids.join(",")}) end rescue @@ -272,7 +273,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_attachment_ids = [] if @attachment_ids.nil? now_attachment_ids = @updated_issue.attachments.pluck(:id) if !(now_attachment_ids & new_attachment_ids).empty? || !(now_attachment_ids.empty? && new_attachment_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attachment", prop_key: "#{new_attachment_ids.size}", old_value: now_attachment_ids.join(","), value: new_attachment_ids.join(",")}) end rescue diff --git a/db/migrate/202410926031030_add_operate_by_to_journals.rb b/db/migrate/202410926031030_add_operate_by_to_journals.rb new file mode 100644 index 000000000..cfe6590c6 --- /dev/null +++ b/db/migrate/202410926031030_add_operate_by_to_journals.rb @@ -0,0 +1,5 @@ +class AddOperateByToJournals < ActiveRecord::Migration[5.2] + def change + add_column :journals, :operate_by, :string, default: 'Issue' + end +end