diff --git a/app/controllers/api/pm/dashboards_controller.rb b/app/controllers/api/pm/dashboards_controller.rb index 25ebcc6d1..8acff2fe8 100644 --- a/app/controllers/api/pm/dashboards_controller.rb +++ b/app/controllers/api/pm/dashboards_controller.rb @@ -14,10 +14,11 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController def my_issues return render_error('请输入正确的pm_project_ids.') if params[:pm_project_ids].blank? + return render_error('请输入正确的pm_issue_types.') if params[:pm_issue_types].blank? pm_project_ids = params[:pm_project_ids].split(",") rescue [] - @all_issues = Issue.where(pm_project_id: pm_project_ids) + pm_issue_types = params[:pm_issue_types].split(",") rescue [] + @all_issues = Issue.where(pm_project_id: pm_project_ids, pm_issue_type: pm_issue_types) @issues = @all_issues.joins(:issue_participants).where(issue_participants: {participant_id: current_user.id}) - @issues = @issues.where(pm_issue_type: params[:pm_issue_type].to_i) if params[:pm_issue_type].present? @issues = kaminari_paginate(@issues.distinct.pm_includes) @my_assign_requirements_count = @all_issues.where(pm_issue_type: 1).joins(:issue_participants).where(issue_participants: {participant_id: current_user.id, participant_type: 'assigned'}).size @@ -36,12 +37,15 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController @before_last_week_close_issue_count = @all_issues.where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 14.days, time_now - 7.days).size @compare_last_week_close_issues = @before_last_week_close_issue_count.zero? ? 0 :(@last_week_close_issues_count - @before_last_week_close_issue_count).to_f / @before_last_week_close_issue_count rescue 0 @all_requirement_issues_count = @all_issues.where(pm_issue_type: 1).size + @open_requirement_issues_count = @all_issues.where(pm_issue_type: 1).where.not(status_id: 5).size @last_week_close_requirement_issues_count = @all_issues.where(pm_issue_type: 1).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 7.days, time_now).size @last_month_close_requirement_issues_count = @all_issues.where(pm_issue_type: 1).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 30.days, time_now).size @all_task_issues_count = @all_issues.where(pm_issue_type: 2).size + @open_task_issues_count = @all_issues.where(pm_issue_type: 2).where.not(status_id: 5).size @last_week_close_tast_issues_count = @all_issues.where(pm_issue_type: 2).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 7.days, time_now).size @last_month_close_task_issues_count = @all_issues.where(pm_issue_type: 2).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 30.days, time_now).size @all_bug_issues_count = @all_issues.where(pm_issue_type: 3).size + @open_bug_issues_count = @all_issues.where(pm_issue_type: 3).where.not(status_id: 5).size @last_week_close_bug_issues_count = @all_issues.where(pm_issue_type: 3).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 7.days, time_now).size @last_month_close_bug_issues_count = @all_issues.where(pm_issue_type: 3).where(status_id: 5).where("updated_on > ? and updated_on < ?", time_now - 30.days, time_now).size @@ -59,8 +63,7 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController end @close_trend = {requirement: @requirement_close_trend, task: @task_close_trend, bug: @bug_close_trend} - - render :json => { + render_ok(data={ last_week_close_issues_count: @last_week_close_issues_count, before_last_week_close_issue_count: @before_last_week_close_issue_count, compare_last_week_close_issues: @compare_last_week_close_issues, @@ -68,16 +71,19 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController before_last_week_create_issue_count: @before_last_week_create_issue_count, compare_last_week_create_issues: @compare_last_week_create_issues, all_requirement_issues_count: @all_requirement_issues_count, + open_requirement_issues_count: @open_requirement_issues_count, last_week_close_requirement_issues_count: @last_week_close_requirement_issues_count, last_month_close_requirement_issues_count: @last_month_close_requirement_issues_count, all_task_issues_count: @all_task_issues_count, + open_task_issues_count: @open_task_issues_count, last_week_close_tast_issues_count: @last_week_close_tast_issues_count, last_month_close_task_issues_count: @last_month_close_task_issues_count, all_bug_issues_count: @all_bug_issues_count, + open_bug_issues_count: @open_bug_issues_count, last_week_close_bug_issues_count: @last_week_close_bug_issues_count, last_month_close_bug_issues_count: @last_month_close_bug_issues_count, close_trend: @close_trend - } + }) end def my_projects @@ -98,7 +104,7 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController @last_week_commits_count = @project.commit_logs.where("created_at > ? and created_at < ?", time_now - 7.days, time_now).size @last_month_commits_count = @project.commit_logs.where("created_at > ? and created_at < ?", time_now - 30.days, time_now).size - render :json => { + render_ok(data={ branch_count: branch_tag_result["branch_count"].to_i, tag_count: branch_tag_result["tag_count"].to_i, license_name: @project.license&.name, @@ -109,7 +115,14 @@ class Api::Pm::DashboardsController < Api::Pm::BaseController last_week_commits_count: @last_week_commits_count, last_month_commits_count: @last_month_commits_count, language: hash_transform_precentagable(languages_result), - } + }) + end + + def my_operate_journals + return render_error('请输入正确的pm_project_id.') if params[:pm_project_id].blank? + @journals = Journal.operate_journals.joins(:issue).where(issues: {pm_project_id: params[:pm_project_id], pm_issue_type: [1,2,3]}) + + @journals = kaminari_paginate(@journals.order(updated_on: :desc)) end private diff --git a/app/controllers/api/pm/projects_controller.rb b/app/controllers/api/pm/projects_controller.rb index 8d808bf99..82b931f05 100644 --- a/app/controllers/api/pm/projects_controller.rb +++ b/app/controllers/api/pm/projects_controller.rb @@ -56,6 +56,8 @@ class Api::Pm::ProjectsController < Api::Pm::BaseController def statistics return tip_exception '参数错误' if params[:pm_project_id].blank? @issues = Issue.where(pm_project_id: params[:pm_project_id], pm_issue_type:[1, 2, 3]) + @last_week_close_issues = @issues.where(status_id: 5).where("updated_on > ? and updated_on < ?", Time.now - 7.days, Time.now) + last_week_close_type_count_data = @last_week_close_issues.group(:pm_issue_type).count type_count_data = @issues.group(:pm_issue_type).count type_status = @issues.group(:pm_issue_type,:status_id).count type_status_data = {} @@ -81,17 +83,24 @@ class Api::Pm::ProjectsController < Api::Pm::BaseController type_count_data[e] = 0 } end + if last_week_close_type_count_data.keys.size < 3 + nedd_add = [1,2,3] - last_week_close_type_count_data.keys + nedd_add.map{ |e| + last_week_close_type_count_data[e] = 0 + } + end data = { pie_chart: type_count_data, bar_chart: type_status_data, - open_data: open_data + open_data: open_data, + last_week_close_data: last_week_close_type_count_data, } 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 + time_line = (Time.current.beginning_of_day - 29.day) .. Time.current @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],status_id:[3,5],due_date: time_line) @create_issues_count = @create_issues.group(:pm_issue_type,"DATE(created_on)").count @@ -100,7 +109,7 @@ class Api::Pm::ProjectsController < Api::Pm::BaseController create_issues: {}, due_issues: {} } - 7.times do |time| + 30.times do |time| current_time = Date.current - time.day if @create_issues_count.present? data[:create_issues][current_time] = { diff --git a/app/models/journal.rb b/app/models/journal.rb index 77c806ca8..fe077ae66 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -52,6 +52,7 @@ class Journal < ApplicationRecord scope :journal_includes, ->{includes(:user, :journal_details, :attachments)} scope :parent_journals, ->{where(parent_id: nil)} scope :children_journals, lambda{|journal_id| where(parent_id: journal_id)} + scope :operate_journals, ->{where(notes: nil)} enum state: {opened: 0, resolved: 1, disabled: 2} @@ -103,6 +104,21 @@ class Journal < ApplicationRecord end end + def pm_dashboard_operate_content + content = self.pm_operate_content + if content.start_with?('创建了') + content += "#{self.issue.subject}" + else + prefix = '将' + prefix += "计划" if self.issue.pm_issue_type == 1 + prefix += "任务" if self.issue.pm_issue_type == 2 + prefix += "缺陷" if self.issue.pm_issue_type == 3 + prefix += "#{self.issue.subject}" + content = prefix + content + end + content + end + def pm_operate_content content = "#{operate_by_content}" detail = self.journal_details.take diff --git a/app/views/api/pm/dashboards/my_issues.json.jbuilder b/app/views/api/pm/dashboards/my_issues.json.jbuilder index fd4193e1c..d9ebf754a 100644 --- a/app/views/api/pm/dashboards/my_issues.json.jbuilder +++ b/app/views/api/pm/dashboards/my_issues.json.jbuilder @@ -1,3 +1,5 @@ +json.status 0 +json.message "success" json.total_count @issues.total_count json.my_assign_requirements_count @my_assign_requirements_count json.my_assign_tasks_count @my_assign_tasks_count diff --git a/app/views/api/pm/dashboards/my_operate_journals.json.jbuilder b/app/views/api/pm/dashboards/my_operate_journals.json.jbuilder new file mode 100644 index 000000000..76ec90f97 --- /dev/null +++ b/app/views/api/pm/dashboards/my_operate_journals.json.jbuilder @@ -0,0 +1,21 @@ +json.status 0 +json.message "success" +json.total_count @journals.total_count +json.journals @journals do |journal| + journal.associate_attachment_container + json.id journal.id + json.is_journal_detail journal.is_journal_detail? + json.created_at journal.created_on.strftime("%Y-%m-%d %H:%M") + json.updated_at journal.updated_on.strftime("%Y-%m-%d %H:%M") + json.user do + if journal.user.present? + json.partial! "api/v1/users/simple_user", user: journal.user + else + json.nil! + end + end + detail = journal.journal_details.take + json.operate_category journal.pm_operate_category + json.operate_content journal.is_journal_detail? ? journal.pm_dashboard_operate_content : nil + +end \ No newline at end of file diff --git a/app/views/api/pm/dashboards/todo.json.jbuilder b/app/views/api/pm/dashboards/todo.json.jbuilder index 852a36390..bea1ec07f 100644 --- a/app/views/api/pm/dashboards/todo.json.jbuilder +++ b/app/views/api/pm/dashboards/todo.json.jbuilder @@ -1,3 +1,5 @@ +json.status 0 +json.message "success" json.total_count @issues.total_count json.issues @issues.each do |issue| diff --git a/config/routes/api.rb b/config/routes/api.rb index 6d652f31e..242037e09 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -7,10 +7,7 @@ defaults format: :json do get :my_issues get :my_pm_projects get :my_projects - end - end - namespace :projects do - resources :dashboards, only: [:index] do + get :my_operate_journals end end resources :issues do