From 840af7a73cc770b952bde029efb4f62776605a69 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 6 Dec 2024 10:41:15 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=20issue?= =?UTF-8?q?=E6=89=80=E6=9C=89=E5=AD=90=E5=B7=A5=E4=BD=9C=E9=A1=B9=E5=8F=8A?= =?UTF-8?q?=E5=85=B3=E8=81=94=E5=B7=A5=E4=BD=9C=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/pm/issues_controller.rb | 40 ++++++++++++++++++- .../api/pm/issues/link_issues.json.jbuilder | 11 +++++ config/routes/api.rb | 1 + 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 app/views/api/pm/issues/link_issues.json.jbuilder diff --git a/app/controllers/api/pm/issues_controller.rb b/app/controllers/api/pm/issues_controller.rb index a10a70bce..281b41ecb 100644 --- a/app/controllers/api/pm/issues_controller.rb +++ b/app/controllers/api/pm/issues_controller.rb @@ -237,15 +237,51 @@ class Api::Pm::IssuesController < Api::Pm::BaseController end end + def link_issues + children_issues = Issue.joins(:parent_issue).where(issues: {id: @issue.id}) + linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: @issue.id)) + belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: @issue.id)) + + full_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) + compare_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) + i = compare_link_issues_ids.count + while i > 0 do + children_issues = Issue.joins(:parent_issue).where(issues: {id: compare_link_issues_ids}) + linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: compare_link_issues_ids)) + belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: compare_link_issues_ids)) + + compare_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) + full_link_issues_ids = full_link_issues_ids | compare_link_issues_ids + i = compare_link_issues_ids.count + end + + @requirement_issues = Issue.where(id:full_link_issues_ids, pm_issue_type:1) + @task_issues = Issue.where(id:full_link_issues_ids, pm_issue_type:2) + @bug_issues = Issue.where(id:full_link_issues_ids, pm_issue_type:3) + end + private + def circle_link_issues(issue_ids) + if issue_ids.present? + children_issues = Issue.joins(:parent_issue).where(issues: {id: issue_ids}) + linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: issue_ids)) + belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: issue_ids)) + + return circle_link_issues(children_issues.pluck(:id)) + else + return [] + end + end + def check_issue_operate_permission return if params[:project_id].to_i.zero? render_forbidden('您没有操作权限!') unless @project.member?(current_user) || current_user.admin? || @issue.user == current_user end def load_issue - return render_parameter_missing if params[:pm_project_id].blank? - @issue = Issue.issue_issue.where(pm_project_id: params[:pm_project_id]).find_by_id(params[:id]) + @issue = Issue.find_by_id params[:id] + # return render_parameter_missing if params[:pm_project_id].blank? + # @issue = Issue.issue_issue.where(pm_project_id: params[:pm_project_id]).find_by_id(params[:id]) render_not_found('疑修不存在!') if @issue.blank? end diff --git a/app/views/api/pm/issues/link_issues.json.jbuilder b/app/views/api/pm/issues/link_issues.json.jbuilder new file mode 100644 index 000000000..f20208bf6 --- /dev/null +++ b/app/views/api/pm/issues/link_issues.json.jbuilder @@ -0,0 +1,11 @@ +json.requirement_issues @requirement_issues.each do |issue| + json.partial! "api/v1/issues/simple_detail", locals: {issue: issue} +end + +json.task_issues @task_issues.each do |issue| + json.partial! "api/v1/issues/simple_detail", locals: {issue: issue} +end + +json.bug_issues @bug_issues.each do |issue| + json.partial! "api/v1/issues/simple_detail", locals: {issue: issue} +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 4aaa4beab..3f75a3b22 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -14,6 +14,7 @@ defaults format: :json do member do get :link_index get :parent_issues + get :link_issues end resources :issue_links From 46604c1010bbc822df1c5dbfce29a273aebb7d10 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 6 Dec 2024 10:43:39 +0800 Subject: [PATCH 2/3] load_issues --- app/controllers/api/pm/issues_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/pm/issues_controller.rb b/app/controllers/api/pm/issues_controller.rb index 281b41ecb..cf55fa9eb 100644 --- a/app/controllers/api/pm/issues_controller.rb +++ b/app/controllers/api/pm/issues_controller.rb @@ -279,9 +279,8 @@ class Api::Pm::IssuesController < Api::Pm::BaseController end def load_issue - @issue = Issue.find_by_id params[:id] - # return render_parameter_missing if params[:pm_project_id].blank? - # @issue = Issue.issue_issue.where(pm_project_id: params[:pm_project_id]).find_by_id(params[:id]) + return render_parameter_missing if params[:pm_project_id].blank? + @issue = Issue.issue_issue.where(pm_project_id: params[:pm_project_id]).find_by_id(params[:id]) render_not_found('疑修不存在!') if @issue.blank? end From 1681b144d66b8303d6917feaf2f83f905326ed83 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 6 Dec 2024 10:59:10 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=94=B9:=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=85=B3=E8=81=94=E6=9F=A5=E8=AF=A2=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/pm/issues_controller.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/pm/issues_controller.rb b/app/controllers/api/pm/issues_controller.rb index cf55fa9eb..687fa986e 100644 --- a/app/controllers/api/pm/issues_controller.rb +++ b/app/controllers/api/pm/issues_controller.rb @@ -238,17 +238,17 @@ class Api::Pm::IssuesController < Api::Pm::BaseController end def link_issues - children_issues = Issue.joins(:parent_issue).where(issues: {id: @issue.id}) - linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: @issue.id)) - belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: @issue.id)) + children_issues = Issue.where(root_id: @issue.id) + linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: @issue.id).pluck(:be_linkable_id)) + belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: @issue.id).pluck(:linkable_id)) full_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) compare_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) i = compare_link_issues_ids.count while i > 0 do - children_issues = Issue.joins(:parent_issue).where(issues: {id: compare_link_issues_ids}) - linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: compare_link_issues_ids)) - belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: compare_link_issues_ids)) + children_issues = Issue.where(root_id: compare_link_issues_ids) + linkable_issues = Issue.where(id: PmLink.where(linkable_type: "Issue", linkable_id: compare_link_issues_ids).pluck(:be_linkable_id)) + belinkable_issues = Issue.where(id: PmLink.where(be_linkable_type: "Issue", be_linkable_id: compare_link_issues_ids).pluck(:linkable_id)) compare_link_issues_ids = children_issues.pluck(:id) | linkable_issues.pluck(:id) | belinkable_issues.pluck(:id) full_link_issues_ids = full_link_issues_ids | compare_link_issues_ids