laravel Excel

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值