forgeplus/app/controllers/api/pm/projects_controller.rb

116 lines
3.8 KiB
Ruby
Raw Normal View History

2023-11-02 15:04:43 +08:00
class Api::Pm::ProjectsController < Api::Pm::BaseController
2023-11-02 17:04:33 +08:00
before_action :require_login, except: [:convert]
2023-11-07 11:44:36 +08:00
before_action :load_project, only: [:convert]
2023-11-02 15:04:43 +08:00
def convert
data = {
owner: @project.owner.try(:login),
2024-01-13 08:26:15 +08:00
identifier: @project.identifier,
name: @project.name
2023-11-02 15:04:43 +08:00
}
render_ok(data: data)
end
2023-11-02 17:04:33 +08:00
2023-11-07 11:44:36 +08:00
def issues_count
return tip_exception '参数错误' unless params[:pm_project_id].present?
@issues = Issue.where(pm_project_id: params[:pm_project_id])
2023-11-07 11:44:36 +08:00
data = {}
@issues_count = @issues.group(:pm_project_id).count
# requirement 1 task 2 bug 3
@issues_type_count = @issues.group(:pm_project_id, :pm_issue_type).count
2023-11-16 14:15:37 +08:00
params[:pm_project_id].map(&:to_i).map do |project_id|
2023-11-07 11:44:36 +08:00
data[project_id] = {
total: @issues_count[project_id] || 0,
requirement: @issues_type_count[[project_id, 1]] || 0,
task: @issues_type_count[[project_id, 2]] || 0,
bug: @issues_type_count[[project_id, 3]] || 0
}
end
render_ok(data: data)
end
2024-01-25 14:28:00 +08:00
def statistics
return tip_exception '参数错误' if params[:pm_project_id].blank?
@issues = Issue.where(pm_project_id: params[:pm_project_id])
type_count_data = @issues.group(:pm_issue_type).count
type_status = @issues.group(:pm_issue_type,:status_id).count
type_status_data = {}
IssueStatus.all.map do |e|
type_count_data.keys.map{ |type|
type_status_data[type] = {} if type_status_data[type].nil?
if type_status[[type,e.id]].nil?
type_status_data[type][e.id] = 0
else
type_status_data[type][e.id] = type_status[[type,e.id]]
end
}
end
open_data = {
"1": type_status_data[1][1] + type_status_data[1][2],
"2": type_status_data[2][1] + type_status_data[2][2],
"3": type_status_data[3][1] + type_status_data[3][2],
}
2024-01-25 14:28:00 +08:00
data = {
pie_chart: type_count_data,
bar_chart: type_status_data,
open_data: open_data
2024-01-25 14:28:00 +08:00
}
render_ok(data: data)
end
def polyline
return tip_exception '参数错误' if params[:pm_project_id].blank?
time_line = (Time.current.beginning_of_day - 6.day) .. Time.current
2024-01-30 10:56:46 +08:00
@create_issues = Issue.where(pm_project_id: params[:pm_project_id],created_on: time_line)
@due_issues = Issue.where(pm_project_id: params[:pm_project_id],due_date: time_line)
2024-01-25 14:28:00 +08:00
@create_issues_count = @create_issues.group(:pm_issue_type,"DATE(created_on)").count
@due_issues_count = @due_issues.group(:pm_issue_type,"DATE(due_date)").count
data = {
create_issues: {},
due_issues: {}
}
7.times do |time|
current_time = Date.current - time.day
2024-01-30 10:56:46 +08:00
if @create_issues_count.present?
data[:create_issues][current_time] = {
"1": @create_issues_count[[1,current_time]] || 0,
"2": @create_issues_count[[2,current_time]] || 0,
"3": @create_issues_count[[3,current_time]] || 0
}
2024-01-30 14:03:34 +08:00
else
data[:create_issues][current_time] = {
"1": 0,
"2": 0,
"3": 0
}
2024-01-30 10:56:46 +08:00
end
if @due_issues_count.present?
data[:due_issues][current_time] = {
"1": @due_issues_count[[1,current_time]] || 0,
"2": @due_issues_count[[2,current_time]] || 0,
"3": @due_issues_count[[3,current_time]] || 0
}
2024-01-30 14:03:34 +08:00
else
data[:due_issues][current_time] = {
"1": 0,
"2": 0,
"3": 0
}
2024-01-30 10:56:46 +08:00
end
2024-01-25 14:28:00 +08:00
end
render_ok(data: data)
end
2023-11-02 17:04:33 +08:00
def bind_project
return render_forbidden('您没有操作权限!') unless @project.member?(current_user) || current_user.admin?
Issue.where(pm_project_id: params[:pm_project_id], user_id: current_user).update_all(project_id: params[:project_id])
end
private
def load_project
@project = Project.joins(:owner).find params[:project_id]
end
2023-11-07 11:44:36 +08:00
2023-11-16 14:15:37 +08:00
2023-11-02 15:04:43 +08:00
end