namespace App\Services\Statistics;
use League\Flysystem\Exception;
use App\Models\Demand\DemandModel;
use App\Services\Demand\DemandService;
use App\Services\Common\CommonService;
use App\Models\Task\TaskModel;
use App\Services\Task\TaskService;
require_once(base_path() . '/app/libs/PHPExcel.php');
use \PHPExcel;
class StatisticsService {
/**
* 导出需求
* @param Array $row 数据
* @return Array
*/
public static function exportDemand($row = array()) {
try {
if (empty($row['system_code'])) {
throw new Exception('系统标识不能为空!');
}
if (!empty($row['status'])) {
if ($row['status'] == 1) {
$row['status'] = 13;
}
if ($row['status'] == 2) {
unset($row['status']);
$row['status_not'] = 13;
}
}
$condition = array('demand.demand_id', 'demand.demand_name', 'demand.project_id', 'demand.demand_level', 'demand.demand_status', 'demand.demand_from', 'demand.demand_from_user', 'demand.demand_functional_satisfaction', 'demand.demand_communication_satisfaction', 'demand.demand_creater', 'demand.demand_dev_lead', 'demand.demand_side_test_time', 'demand.demand_uptime', 'demand.demand_side_adopt_time', 'demand.demand_plan_submit_time', 'demand.demand_type', 'task.task_coding_user', 'task.task_plan_start_date', 'task.task_coding_start_date', 'task.task_test_user', 'task.task_test_start_date', 'task.task_test_complete_date');
$demandIds = DemandModel::getByConditionDemandLeftJoinTask($row, $condition);
if (!$demandIds) {
throw new Exception('未查询到数据!');
}
$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
$headerName = array(
'需求ID',
'优先级',
'需求名称',
'所属模块',
'需求状态',
'备注',
'需求来源',
'需求提出人',
'功能评分',
'沟通评分',
'开发组长',
'需求分析师',
'程序员',
'测试员',
'计划开发时间',
'实际开发时间',
'测试开始时间',
'测试结束时间',
'提交验收时间',
'验收通过时间',
'上线时间',
'ETA时间',
'类别1',
'类别2',
);
// ASCII 码生成字母
$chrArr = array();
for ($i = 65; $i < 89; $i++) {
$chrArr[] = strtoupper(chr($i));
}
foreach ($headerName as $key => $value) {
// 输出大写字母
$sheet->setCellValue($chrArr[$key] . 1, $value);
// 宽度
$sheet->getColumnDimension($chrArr[$key])->setWidth(20);
if ($chrArr[$key] == 'C') {
$sheet->getColumnDimension($chrArr[$key])->setWidth(50);
}
}
$i = 2;
foreach ($demandIds as $val) {
$fromUserName = $devLeadName = $demandAnalystName = $programmerName = $testUserName = $remarks = '';
$condit = array_unique(array($val['demand_from_user'], $val['demand_dev_lead'], $val['demand_creater'], $val['task_coding_user'], $val['task_test_user']));
$userIds = CommonService::getUserInfomation($row['system_code'], $condit);
if (!empty($userIds)) {
foreach ($userIds as $v) {
if ($val['demand_from_user'] == $v['userId']) {
$fromUserName = $v['name'];
}
if ($val['demand_dev_lead'] == $v['userId']) {
$devLeadName = $v['name'];
}
if ($val['demand_creater'] == $v['userId']) {
$demandAnalystName = $v['name'];
}
if ($val['task_coding_user'] == $v['userId']) {
$programmerName = $v['name'];
}
if ($val['task_test_user'] == $v['userId']) {
$testUserName = $v['name'];
}
}
}
// if ($val['demand_status'] == 11) {
// $dlIds = DemandModel::getByConditionLog(array('project_id' => $val['project_id'], 'dl_type' => 1, 'remark' => '更新为:废弃;'), 'dl_remark');
// if (!empty($dlIds) && !empty($dlIds[0]['dl_remark'])) {
// $remarkArr = explode('原因:', $dlIds[0]['dl_remark']);
// $remarksArr = explode(';', end($remarkArr));
// $remarks = $remarksArr[0];
// }
// }
$sheet->setCellValue('A' . $i, $val['demand_id']);
$sheet->setCellValue('B' . $i, DemandService::$demandLevel[$val['demand_level']]);
$sheet->setCellValue('C' . $i, $val['demand_name']);
$projectIds = DemandModel::getByConditionProject(array('project_id' => $val['project_id']), 'project_name');
$projectName = isset($projectIds) && !empty($projectIds[0]['project_name']) ? $projectIds[0]['project_name'] : '';
$sheet->setCellValue('D' . $i, $projectName);
$sheet->setCellValue('E' . $i, DemandService::$demandStatus[$val['demand_status']]);
$sheet->setCellValue('F' . $i, $remarks);
$sheet->setCellValue('G' . $i, DemandService::$sourceOfDemand[$val['demand_from']]);
$sheet->setCellValue('H' . $i, $fromUserName);
$sheet->setCellValue('I' . $i, $val['demand_functional_satisfaction']);
$sheet->setCellValue('J' . $i, $val['demand_communication_satisfaction']);
$sheet->setCellValue('K' . $i, $devLeadName);
$sheet->setCellValue('L' . $i, $demandAnalystName);
$sheet->setCellValue('M' . $i, $programmerName);
$sheet->setCellValue('N' . $i, $testUserName);
$sheet->setCellValue('O' . $i, $val['task_plan_start_date']);
$sheet->setCellValue('P' . $i, $val['task_coding_start_date']);
$sheet->setCellValue('Q' . $i, $val['task_test_start_date']);
$sheet->setCellValue('R' . $i, $val['task_test_complete_date']);
$sheet->setCellValue('S' . $i, $val['demand_side_test_time']);
$sheet->setCellValue('T' . $i, $val['demand_side_adopt_time']);
$sheet->setCellValue('U' . $i, $val['demand_uptime']);
$sheet->setCellValue('V' . $i, $val['demand_plan_submit_time']);
$type = $val['demand_type'] == 1 ? '业务部门' : 'IT内部';
$sheet->setCellValue('W' . $i, $type);
$type2 = '正常需求';
if (DemandModel::getByConditionLog(array('demand_id' => $val['demand_id'], 'dl_type' => 6), 'count(*)')) {
$type2 = 'BUG转需求';
}
$sheet->setCellValue('X' . $i, $type2);
$i++;
}
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Disposition:attachment;filename=需求统计信息.xls");
header("Content-Transfer-Encoding:binary");
$objWriter->save('php://output');
$return = array('code' => '200', 'msg' => '成功!');
} catch (Exception $exc) {
$return = array('code' => '400', 'msg' => $exc->getMessage());
}
return $return;
}
}
注:/app/libs 目录下增加 PHPExcel
laravel Excel
最新推荐文章于 2024-04-07 10:39:48 发布