|
- class Api::Pm::SprintIssuesController < Api::Pm::BaseController
-
- before_action :require_login, except: [:index]
-
- def index
- @issues = Api::Pm::SprintIssues::ListService.call(query_params, current_user)
- @issues = kaminari_paginate(@issues)
- render 'api/v1/issues/index'
- end
-
- def statistics
- pm_sprint_ids = params[:pm_sprint_ids].split(",") rescue []
- return tip_exception '参数错误' if pm_sprint_ids.blank?
- @issues = Issue.where(pm_sprint_id: pm_sprint_ids)
- data = {}
- # requirement 1 task 2 bug 3
- @issues_count = @issues.group(:pm_sprint_id).count
- @issues_type_count = @issues.group(:pm_sprint_id, :status_id).count
- @issues_pm_type_count = @issues.group(:pm_sprint_id, :pm_issue_type).count
- @issues_hour_count = @issues.group(:pm_sprint_id).sum(:time_scale)
- @issues_hour_type_count = @issues.group(:pm_sprint_id, :status_id).sum(:time_scale)
- pm_sprint_ids.map(&:to_i).map do |sprint_id|
- # count_closed 工作项已完成/已关闭数量,需排除已修复的缺陷数量
- count_closed = @issues_type_count[[sprint_id, 5]].to_i + @issues_type_count[[sprint_id, 3]].to_i - @issues.where(pm_sprint_id: sprint_id, pm_issue_type: 3, status_id: 3).size
- # hour_closed 已完成/已关闭 预估工时之和,需排除已修复的缺陷预估工时
- hour_closed = @issues_hour_type_count[[sprint_id, 5]].to_f + @issues_hour_type_count[[sprint_id, 3]].to_f - @issues.where(pm_sprint_id: sprint_id, pm_issue_type: 3, status_id: 3).sum(:time_scale).to_f
- data[sprint_id] = {
- count_total: @issues_count[sprint_id] || 0,
- count_closed: count_closed || 0,
- hour_total: @issues_hour_count[sprint_id].to_f || 0,
- hour_closed: hour_closed || 0,
- requirement: @issues_pm_type_count[[sprint_id, 1]] || 0,
- task: @issues_pm_type_count[[sprint_id, 2]] || 0,
- bug: @issues_pm_type_count[[sprint_id, 3]] || 0
- }
- end
- render_ok(data: data)
- end
-
- before_action :load_uncomplete_issues, only: [:complete]
-
- def complete
- begin
- case complete_params[:complete_type].to_i
- when 1
- @issues.update_all(status_id: 5)
- when 2
- @issues.update_all(pm_sprint_id: 0)
- when 3
- @issues.update_all(pm_sprint_id: complete_params[:target_pm_project_sprint_id])
- end
- render_ok
- rescue => e
- render_error(e.message)
- end
- end
-
- private
-
- def load_uncomplete_issues
- @issues = Issue.where(pm_sprint_id: complete_params[:pm_project_sprint_id]).where.not(status_id: 5)
- end
-
- def complete_params
- params.permit(:pm_project_sprint_id, :complete_type, :target_pm_project_sprint_id)
- end
-
- def query_params
- params.permit(
- :category,
- :pm_project_id,
- :pm_issue_type, #需求1 任务2 缺陷3
- :assigner_id,
- :priority_id,
- :status_id,
- :keyword, :status_ids, :pm_issue_types,
- :sort_by, :sort_direction
- )
- end
-
- end
|