public static function &get_instance() { if (!self::$instance) { self::$instance = new self(); } return self::$instance; }
public function handle_request_internal() { $user = array(); $display = array(); $depart = 12; //12=>用户事业部 //前端:508 后台:599,600 602 移动:601,根据hroa的api //product = 50=>网站端,51=>mobile $type_key = array("mobile" => array('product' => '51', 'user' => array(508, 602, 601)), "pc" => array('product' => '50', 'user' => array(508, 599, 600, 602))); $tab_info = array('pc' => array('name' => 'Pc', 'click' => false), 'mobile' => array('name' => 'Mobile', 'click' => false)); $req = APF::get_instance()->get_request(); // $res = APF::get_instance()->get_response(); $params = $req->get_parameters(); $pro = $params['pro'] ? $params['pro'] : 'pc'; $time_type = $params['time'] ? $params['time'] : 'week'; $report_type = $params['report'] ? $params['report'] : 'week'; $tab_info[$pro]['click'] = true; $display['pro'] = $pro; $display['report_type'] = $report_type; /*获取开始时间,结束时间*/ $time_arr = $this->get_time_type($time_type); $from = $time_arr['begin']; $to = $time_arr['end']; $display['input_from'] = date("Y-m-d", strtotime($from)); $display['input_to'] = date("Y-m-d", strtotime($to)); /* 获取组信息*/ $departments = Bll_DdCommonBiz::get_instance()->get_departments_for_user_group(); $groups = Bll_UserGroupCustomBiz::get_instance()->get_all_groups(); $input_arr = array('type_key' => 'page', 'type_value' => $pro . '_project'); $page_bind_groups = Bll_ReportGroupSelectedBiz::get_instance()->get_group_ids_arr($input_arr); /*获取用户端的所有组*/ $groups_user = Bll_UserGroupCustomBiz::get_instance()->get_groups_by_department(10); //10=>用户端 foreach ($departments as $value) { if (intval($value->value) < 17 || intval($value->value) > 26) { $department[$value->value] = $value->name; } } foreach ($groups as $value) { $group[$value->department][] = array('name' => $value->group_name, 'id' => $value->id); } $req->set_attribute('department', $department); if ($group != null) { $req->set_attribute('group', $group); } if (!empty($page_bind_groups) || strlen($page_bind_groups[0]) > 0) { $req->set_attribute('page_bind_groups', $page_bind_groups); } /*获取项目延期信息*/ $begin = strtotime($from); $end = strtotime($to); $ss = new APi_DeployInfoController(); $delay_projects_all = $ss->get_deply_project($begin, $end); foreach ($delay_projects_all as $project) { // if($project->type != 4){ // $delay_projects[] = $project; // } if ($project->type == 1) { $delay_projects['pc'][] = $project; } elseif ($project->type == 2 || $project->type == 3) { $delay_projects['mobile'][] = $project; } } /* 获取组信息*/ $product_line = $type_key[$pro]['product']; $result_arr = $this->get_time_type('month'); $dev_summary = Bll_ReportMonthDevBiz::get_instance()->get_data_by_product_and_months($result_arr['nine_months'], 51, 'product_line', $pro); //获取前6个月的bug总览 $dev_bug_summary = array(); foreach ($dev_summary as $summary) { $dev_bug_summary['month'][] = $summary->month; $dev_bug_summary['workload'][] = $summary->dev_workload; $dev_bug_summary['bugs'][] = $summary->count; $dev_bug_summary['bug_workload'][] = $summary->dev_workload == 0 ? 0 : round($summary->count / $summary->dev_workload, 2); } /*获取user信息,通过hroa api*/ for ($c = 0; $c < count($type_key[$pro]['user']); $c++) { $user[] = $this->get_user_by_department($type_key[$pro]['user'][$c]); } $user = $this->merge_array($user); $projects = Bll_PMTProjectBiz::get_instance()->get_project_by_user_and_time($depart, $product_line, $from, $to); if (empty($projects)) { $req->set_attribute('tab_info', $tab_info); $req->set_attribute('display', $display); $req->set_attribute('table_project', array()); $req->set_attribute('project_tested', array()); $req->set_attribute('dev_bug_workload_rate', array()); $req->set_attribute('dev_bug_summary', array()); $req->set_attribute('top_three_projects', array()); //top 3项目 $req->set_attribute('delay_projects', array()); //延期项目 return 'NewReport_ProjectQuality'; } $pmt_ids_init = array(); $projects_pmtid = array(); foreach ($projects as $project) { $projects_pmtid[$project['id']] = $project; $pmt_ids_init[] = $project['id']; } $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids($pmt_ids_init); $tasks_pmtid = array(); $tasks_pmtid_person = array(); if ($tasks) { foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { //2=>前端开发,3=>后端开发,33=>开发 $tasks_pmtid[$task['project_id']]['dev'][] = $task; $tasks_pmtid_person[$task['project_id']]['dev'][$task['chinese_name']][] = $task['workload']; } elseif (in_array($task['task_type_id'], array(4))) { //4=>测试 $tasks_pmtid[$task['project_id']]['test'][] = $task; $tasks_pmtid_person[$task['project_id']]['test'][$task['chinese_name']][] = $task['workload']; } } } $pmt_ids = array(); $pmt_no_test_ids = array(); //项目无测试人员 foreach ($pmt_ids_init as $pmt_id) { if (!empty($tasks_pmtid[$pmt_id]['dev'])) { //task为开发的不为空则存pmt_id $pmt_ids[] = $pmt_id; if (empty($tasks_pmtid[$pmt_id]['test'])) { //开发不为空并且qa为空的为notesting项目; $pmt_no_test_ids[] = $pmt_id; } } else { //$pmt_ids[] = ''; } } if (empty($pmt_ids)) { $req->set_attribute('tab_info', $tab_info); $req->set_attribute('table_project', array()); $req->set_attribute('display', $display); $req->set_attribute('project_tested', array()); $req->set_attribute('dev_bug_workload_rate', array()); $req->set_attribute('dev_bug_summary', array()); //项目bug总览 $req->set_attribute('top_three_projects', array()); //top 3项目 $req->set_attribute('delay_projects', array()); //延期项目 return 'NewReport_ProjectQuality'; } $project_tested = array(); $count_all_project = isset($pmt_ids) ? count($pmt_ids) : 0; $count_notest_project = isset($pmt_no_test_ids) ? count($pmt_no_test_ids) : 0; $project_tested['all'] = $count_all_project; $project_tested['tested'] = $count_all_project - $count_notest_project; //有测试人员的项目数 $project_tested['notest'] = $count_notest_project; //no testing项目数 $bug_detail = Bll_TicketBiz::get_instance()->get_bugs_detail_by_pmtids($pmt_ids); //根据pmt_id获取bug数目 $bugs_pmtid = array(); foreach ($bug_detail as $bug) { $bugs_pmtid[$bug->pmt_id][] = $bug; //每个pmt项目获取的bug } $users = Bll_UserBiz::get_instance()->get_all_users(); $user_wc = array(); foreach ($users as $row) { $user_wc[$row->whole_name] = $row->chinese_name; } $bug_detail_dev = array(); $bug_detail_qa = array(); foreach ($bug_detail as $row) { $bug_detail_dev[$row->pmt_id][$user_wc[$row->owner]][] = $row; $bug_detail_qa[$row->pmt_id][$user_wc[$row->reporter]][] = $row; } $table_work_person = array(); $dev_bug_workload_rate = array(); foreach ($pmt_ids as $pmt_id) { $dev_p = array(); //开发者 $dev_t = array(); //开发工时 $test_p = array(); $test_t = array(); $dev_bug = array(); //开发bug $test_bug = array(); //测试bug $dev_bug_workload = array(); $test_bug_workload = array(); $table_work_person[$pmt_id]['php_bug'] = 0; $table_work_person[$pmt_id]['js_bug'] = 0; //前端bug $table_work_person[$pmt_id]['qa_bug'] = 0; //qa bug foreach ($tasks_pmtid_person[$pmt_id]['dev'] as $d_p => $task_dev) { $dev_p[$d_p] = $d_p; $dev_t[$d_p] = 0; $dev_bug[$d_p] = isset($bug_detail_dev[$pmt_id][$d_p]) ? count($bug_detail_dev[$pmt_id][$d_p]) : 0; foreach ($task_dev as $t) { $dev_t[$d_p] += intval($t); } $dev_bug_workload[$d_p] = $dev_t[$d_p] == 0 ? 0 : round(intval($dev_bug[$d_p]) / $dev_t[$d_p], 2); } foreach ($tasks_pmtid_person[$pmt_id]['test'] as $t_p => $task_test) { $test_p[$t_p] = $t_p; $test_t[$t_p] = 0; $test_bug[$t_p] = isset($bug_detail_qa[$pmt_id][$t_p]) ? count($bug_detail_qa[$pmt_id][$t_p]) : 0; foreach ($task_test as $t) { $test_t[$t_p] += intval($t); } $test_bug_workload[$t_p] = $test_t[$t_p] == 0 ? 0 : round(intval($test_bug[$t_p]) / $test_t[$t_p], 2); } foreach ($dev_t as $dev_key => $dev_value) { if (in_array($dev_key, $user)) { if (isset($dev_bug_workload_rate[$dev_key])) { $dev_bug_workload_rate[$dev_key][0] += $dev_bug[$dev_key]; $dev_bug_workload_rate[$dev_key][1] += $dev_value; } else { $dev_bug_workload_rate[$dev_key][0] = $dev_bug[$dev_key]; $dev_bug_workload_rate[$dev_key][1] = $dev_value; } } } //508=>前端,后台:599,600 602 移动:601 QA:603 foreach ($dev_p as $key => $value) { if (in_array($value, $this->get_user_by_department(508))) { $table_work_person[$pmt_id]['js_bug'] += $dev_bug[$key]; //判断是否是前端bug和PHP bug } else { $table_work_person[$pmt_id]['php_bug'] += $dev_bug[$key]; } } $table_work_person[$pmt_id]['dev_p'] = implode("<br />", $dev_p); //开发者 $table_work_person[$pmt_id]['dev_t'] = implode("<br />", $dev_t); //开发工时 $table_work_person[$pmt_id]['test_p'] = implode("<br />", $test_p); //测试者 $table_work_person[$pmt_id]['test_t'] = implode("<br />", $test_t); //测试工时 $table_work_person[$pmt_id]['dev_bug'] = implode("<br />", $dev_bug); //开发bug $table_work_person[$pmt_id]['test_bug'] = implode("<br />", $test_bug); //测试bug $table_work_person[$pmt_id]['dev_bug_workload'] = implode("<br />", $dev_bug_workload); $table_work_person[$pmt_id]['test_bug_workload'] = implode("<br />", $test_bug_workload); } $dev_bug_workload_rate = $this->process_rate($dev_bug_workload_rate); if ($params['ajax'] == 1) { if ($params['div'] == "#best_dev_group") { $group_rate = $this->process_group_info($params['group_id'], $dev_bug_workload_rate); $best = $this->get_best_group($group_rate); echo $best; return 0; } } //stage: 5-dev 6-test $table_workload = array(); $table_through = array(); foreach ($pmt_ids as $pmt_id) { if (empty($tasks_pmtid[$pmt_id]['dev'])) { $table_workload[$pmt_id]['dev_person'] = ''; $table_workload[$pmt_id]['dev_workload'] = 0; } else { $person = array(); $time = 0; $tasks_pmtid[$pmt_id]['groups'] = ''; $temp_group_selected = array(); foreach ($tasks_pmtid[$pmt_id]['dev'] as $row) { $person[] = $row['chinese_name']; $data = Bll_UserBiz::get_instance()->get_user_id_by_chinese_name($row['chinese_name']); foreach ($groups_user as $group) { $group_members = explode(',', $group->group_members); $group_members = array_filter($group_members); if (in_array($data->user_id, $group_members)) { $temp_group_selected[] = $group->group_name; } } $temp_group_selected = array_unique($temp_group_selected); $tasks_pmtid[$pmt_id]['groups'] = implode(',', $temp_group_selected); // 项目与组之间关系 $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['dev_person'] = $person_str; $table_workload[$pmt_id]['dev_workload'] = $time; $through_arr = array(); foreach ($person as $person_row) { $str = isset($rates_pmtid[$pmt_id][$person_row]) ? $rates_pmtid[$pmt_id][$person_row] : "-"; if ($str == "-") { $through_arr[] = $person_row . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . $person_row . ": " . $str . '%</span>'; } else { $through_arr[] = $person_row . ": " . $str . '%'; } } } $str = isset($rates_pmtid[$pmt_id]['all']) ? $rates_pmtid[$pmt_id]['all'] : "-"; if ($str == "-") { $through_arr[] = '整个项目' . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . '整个项目' . ": " . $str . '%</span>'; } else { $through_arr[] = '整个项目' . ": " . $str . '%'; } } $through_str = implode("<br />", $through_arr); $table_through[$pmt_id] = $through_str; } if (empty($tasks_pmtid[$pmt_id]['test'])) { $table_workload[$pmt_id]['test_person'] = ''; $table_workload[$pmt_id]['test_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['test'] as $row) { $person[] = $row['chinese_name']; $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['test_person'] = $person_str; $table_workload[$pmt_id]['test_workload'] = $time; } } $table_project = array(); foreach ($pmt_ids as $pmt_id) { $table_project[$pmt_id]['pmt_id'] = $pmt_id; $table_project[$pmt_id]['summary'] = $projects_pmtid[$pmt_id]['summary']; $table_project[$pmt_id]['release_date'] = date("Y-m-d", strtotime($projects_pmtid[$pmt_id]['date_release'])); $table_project[$pmt_id]['pro_set'] = empty($projects_pmtid[$pmt_id]['set_id']) ? '' : $projects_pmtid[$pmt_id]['set_id'] . ". " . $projects_pmtid[$pmt_id]['set_name']; $table_project[$pmt_id]['owner'] = $projects_pmtid[$pmt_id]['chinese_name']; $table_project[$pmt_id]['bugs_count'] = isset($bugs_pmtid[$pmt_id]) ? count($bugs_pmtid[$pmt_id]) : 0; $table_project[$pmt_id]['dev_person'] = $table_work_person[$pmt_id]['dev_p']; //开发者 $table_project[$pmt_id]['dev_workload'] = $table_work_person[$pmt_id]['dev_t']; //开发工时 $table_project[$pmt_id]['dev_bug'] = $table_work_person[$pmt_id]['dev_bug']; //开发bug $table_project[$pmt_id]['test_person'] = $table_work_person[$pmt_id]['test_p']; //测试者 $table_project[$pmt_id]['test_workload'] = $table_work_person[$pmt_id]['test_t']; //测试工时 $table_project[$pmt_id]['test_bug'] = $table_work_person[$pmt_id]['test_bug']; //测试发现的bug $table_project[$pmt_id]['dev_workload_all'] = $table_workload[$pmt_id]['dev_workload']; //总开发工时 $table_project[$pmt_id]['test_workload_all'] = $table_workload[$pmt_id]['test_workload']; //总测试工时 $table_project[$pmt_id]['bug_devload'] = $table_project[$pmt_id]['dev_workload_all'] == 0 ? 0 : round($table_project[$pmt_id]['bugs_count'] / $table_project[$pmt_id]['dev_workload_all'], 2); $table_project[$pmt_id]['bug_testload'] = $table_project[$pmt_id]['test_workload_all'] == 0 ? 0 : round($table_project[$pmt_id]['bugs_count'] / $table_project[$pmt_id]['test_workload_all'], 2); $table_project[$pmt_id]['php_bug'] = $table_work_person[$pmt_id]['php_bug']; $table_project[$pmt_id]['js_bug'] = $table_work_person[$pmt_id]['js_bug']; $table_project[$pmt_id]['others_bug'] = $table_project[$pmt_id]['bugs_count'] - ($table_work_person[$pmt_id]['js_bug'] + $table_work_person[$pmt_id]['php_bug']); //总bug数目-(php+js) bug $table_project[$pmt_id]['groups'] = $tasks_pmtid[$pmt_id]['groups']; } if ($params['ajax'] == 1) { if ($params['div'] == "#contrast_dev_group") { echo $this->group_quality($table_project, $params['group_id'], $from, $to, count($pmt_ids), $delay_projects[$display['pro']]); return 0; } } $dev_bug_workload_rate = array_values($dev_bug_workload_rate); $top_three_projects = array(); usort($table_project, "self::my_sort"); $top_three_projects['first'] = $table_project[0]; $top_three_projects['second'] = $table_project[1]; $top_three_projects['third'] = $table_project[2]; //top3项目 $req->set_attribute('tab_info', $tab_info); $req->set_attribute('table_project', $table_project); $req->set_attribute('dev_bug_workload_rate', $dev_bug_workload_rate); $req->set_attribute('project_tested', $project_tested); $req->set_attribute('display', $display); $req->set_attribute('dev_bug_summary', $dev_bug_summary); //项目bug总览 $req->set_attribute('top_three_projects', $top_three_projects); //top3项目 $req->set_attribute('delay_projects', $delay_projects); //延期项目 return 'NewReport_ProjectQuality'; }
//stage: 5-dev 6-test $table_workload = array(); foreach ($pmt_ids as $pmt_id) { if (empty($tasks_pmtid[$pmt_id]['dev'])) { $table_workload[$pmt_id]['dev_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['dev'] as $row) { $time += intval($row['workload']); } $table_workload[$pmt_id]['dev_workload'] = $time; } } $table_project['dev_workload_all'] = 0; foreach ($pmt_ids as $pmt_id) { $table_project['dev_workload_all'] += $table_workload[$pmt_id]['dev_workload']; //总开发工时 } $input_arr['month'] = $month; $input_arr['department'] = $depart_map_pmt[$depart]; $input_arr['type_key'] = 'product_line'; $input_arr['type_value'] = $key; $input_arr['dev_workload'] = $table_project['dev_workload_all']; $input_arr['count'] = $count; $input_arr['updated_time'] = $current_time; Bll_ReportMonthDevBiz::get_instance()->insert_count_data($input_arr); } } } echo date('c ') . " Count month dev bugs ok \n";