正在显示
9 个修改的文件
包含
742 行增加
和
298 行删除
@@ -1779,6 +1779,8 @@ class CommonController extends RestBaseController | @@ -1779,6 +1779,8 @@ class CommonController extends RestBaseController | ||
1779 | $user = $this->getUserById(['id'=>$res['uid']]); | 1779 | $user = $this->getUserById(['id'=>$res['uid']]); |
1780 | if($user){ | 1780 | if($user){ |
1781 | $arr['user_login'] = $user['user_login']; | 1781 | $arr['user_login'] = $user['user_login']; |
1782 | + }else{ | ||
1783 | + $arr['user_login'] = ''; | ||
1782 | } | 1784 | } |
1783 | 1785 | ||
1784 | //甲方领导确认人 | 1786 | //甲方领导确认人 |
@@ -106,4 +106,44 @@ class AdminCheckController extends AdminBaseController | @@ -106,4 +106,44 @@ class AdminCheckController extends AdminBaseController | ||
106 | ->find(); | 106 | ->find(); |
107 | return $res; | 107 | return $res; |
108 | } | 108 | } |
109 | + | ||
110 | + //导出数据 | ||
111 | + public function exportData(){ | ||
112 | + $param = $this->request->param(); | ||
113 | + | ||
114 | + $adminCommon = new AdminCommonController(); | ||
115 | + $adminExcel = new AdminExcelDataController(); | ||
116 | + | ||
117 | + $res_ins = $adminCommon->exportCheckList('check',$param,'t.*'); | ||
118 | + | ||
119 | + $arr_url = []; | ||
120 | + $arr_time = []; | ||
121 | + foreach($res_ins as $key=>$value){ | ||
122 | + $arr = $adminCommon->checkExportData($value); | ||
123 | + $arr['status'] = $this->getStatus()[$value['status']]; | ||
124 | + //获取文件路径 | ||
125 | + $url = $adminExcel->checkExcelData($arr); | ||
126 | + //按日导出 | ||
127 | + $arr_url[$key] = $url; | ||
128 | + $arr_time[$key] = $arr['time'].'报表.xls'; | ||
129 | + } | ||
130 | + | ||
131 | + $xlsName = '月检报表'; | ||
132 | + //解决zip中文文件名 | ||
133 | + $xlsName = $adminCommon->iconv_to_utf8($xlsName); | ||
134 | + $filename = ROOT_PATH . 'public/upload/export/' . $xlsName . '.zip'; | ||
135 | + $adminCommon->zip($arr_url,$filename,$arr_time); | ||
136 | + } | ||
137 | + | ||
138 | + //检查是否有数据 | ||
139 | + public function checkData(){ | ||
140 | + $param = $this->request->param(); | ||
141 | + $adminCommon = new AdminCommonController(); | ||
142 | + $res_ins = $adminCommon->exportCheckList('check',$param,'t.id'); | ||
143 | + if($res_ins){ | ||
144 | + $adminCommon->apiResponse(1); | ||
145 | + }else{ | ||
146 | + $adminCommon->apiResponse(0,'暂无数据'); | ||
147 | + } | ||
148 | + } | ||
109 | } | 149 | } |
@@ -11,15 +11,12 @@ | @@ -11,15 +11,12 @@ | ||
11 | 11 | ||
12 | namespace app\portal\controller; | 12 | namespace app\portal\controller; |
13 | 13 | ||
14 | -use api\home\controller\CommonController; | ||
15 | use cmf\controller\AdminBaseController; | 14 | use cmf\controller\AdminBaseController; |
16 | -use app\portal\model\InspectModel; | ||
17 | use think\Db; | 15 | use think\Db; |
18 | use think\db\Query; | 16 | use think\db\Query; |
19 | use PhpOffice\PhpSpreadsheet\Spreadsheet; | 17 | use PhpOffice\PhpSpreadsheet\Spreadsheet; |
20 | use PhpOffice\PhpSpreadsheet\IOFactory; | 18 | use PhpOffice\PhpSpreadsheet\IOFactory; |
21 | use ZipArchive; | 19 | use ZipArchive; |
22 | -use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; | ||
23 | //甲方巡检列表 | 20 | //甲方巡检列表 |
24 | class AdminCommonController extends AdminBaseController | 21 | class AdminCommonController extends AdminBaseController |
25 | { | 22 | { |
@@ -242,270 +239,6 @@ class AdminCommonController extends AdminBaseController | @@ -242,270 +239,6 @@ class AdminCommonController extends AdminBaseController | ||
242 | } | 239 | } |
243 | 240 | ||
244 | /* | 241 | /* |
245 | - * 导出表格适用于报表绘制表格 | ||
246 | - */ | ||
247 | - public function send_export($arr){ | ||
248 | - $spreadsheet = new Spreadsheet(); | ||
249 | - $sheet = $spreadsheet->getActiveSheet(); | ||
250 | - $xlsName = $arr['time']; | ||
251 | - //设置sheet名称 | ||
252 | - $name = '报表'; | ||
253 | - $name = $this->iconv_to_utf8($name); | ||
254 | - | ||
255 | - $sheet->setTitle($xlsName.$name); | ||
256 | - //合并单元格 | ||
257 | - $sheet->mergeCells('B1:J1'); | ||
258 | - $sheet->mergeCells('B3:B4'); | ||
259 | - $sheet->mergeCells('B6:D6'); | ||
260 | - $sheet->mergeCells('B7:D7'); | ||
261 | - $sheet->mergeCells('C3:D3'); | ||
262 | - $sheet->mergeCells('C4:D4'); | ||
263 | - $sheet->mergeCells('F3:F4'); | ||
264 | - $sheet->mergeCells('G3:I3'); | ||
265 | - $sheet->mergeCells('G4:I4'); | ||
266 | - | ||
267 | - $spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑');//字体 | ||
268 | - | ||
269 | - //设置默认宽 | ||
270 | - $sheet->getDefaultColumnDimension()->setWidth(8); | ||
271 | - //设置高度 | ||
272 | - $sheet->getRowDimension(1)->setRowHeight(45); | ||
273 | -// $sheet->getRowDimension(2)->setRowHeight(55); | ||
274 | - | ||
275 | - | ||
276 | - //***********************画出单元格边框***************************** | ||
277 | -// $styleArray = [ | ||
278 | -// 'borders' => [ | ||
279 | -// 'outline' => [ | ||
280 | -// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK, | ||
281 | -// 'color' => ['argb' => 'FFFF0000'], | ||
282 | -// ], | ||
283 | -// ], | ||
284 | -// ]; | ||
285 | -// $sheet->getStyle('A1:M26')->applyFromArray($styleArray); | ||
286 | - //***********************画出单元格边框结束***************************** | ||
287 | - | ||
288 | - //***********************背景填充颜色***************************** | ||
289 | - $sheet->getStyle( 'A1:M8')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
290 | - $sheet->getStyle( 'A1:M8')->getFill()->getStartColor()->setRGB('222B35');//背景颜色 | ||
291 | - //***********************画出单元格边框结束***************************** | ||
292 | - | ||
293 | - //标题 | ||
294 | - $sheet->setCellValue('B1', $arr['title']); | ||
295 | - $sheet->getStyle('B1')->getFont()->setSize(18);//字体大小 | ||
296 | - $sheet->getStyle('B1')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
297 | - $sheet->getStyle('B1')->getFont()->setBold(true);//字体加粗 | ||
298 | - | ||
299 | - //甲方logo | ||
300 | - $imageA = $arr['a_company']['logo']; | ||
301 | - if(@fopen($imageA , 'r' ) ) { | ||
302 | - //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
303 | - $imageADrawing = new Drawing(); | ||
304 | - $imageADrawing->setPath($imageA); | ||
305 | - // 设置图片的宽度 | ||
306 | - $imageADrawing->setResizeProportional(false); | ||
307 | - $imageADrawing->setWidthAndHeight(40,40); | ||
308 | - //图片显示在B3 | ||
309 | - $imageADrawing->setCoordinates('B3'); | ||
310 | - $imageADrawing->setWorksheet($sheet); | ||
311 | - } | ||
312 | - | ||
313 | - $sheet->getStyle('B3:G7')->getFont()->setSize(8);//字体大小 | ||
314 | - $sheet->getStyle('C3:G3')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
315 | - $sheet->getStyle('B6:G6')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
316 | - $sheet->getStyle('C4:G4')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
317 | - $sheet->getStyle('B7:G7')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
318 | - | ||
319 | - //甲方公司 | ||
320 | - $sheet->setCellValue('C3', '甲方公司'); | ||
321 | - //甲方公司名称 | ||
322 | - $sheet->setCellValue('C4', $arr['a_company']['company_name']); | ||
323 | - | ||
324 | - //乙方logo | ||
325 | - $imageB = $arr['b_company']['logo']; | ||
326 | - if(@fopen($imageB , 'r' ) ) { | ||
327 | - //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
328 | - $objDrawing = new Drawing(); | ||
329 | - $objDrawing->setPath($imageB); | ||
330 | - // 设置图片的宽度 | ||
331 | - $objDrawing->setResizeProportional(false); | ||
332 | - $objDrawing->setWidthAndHeight(40,40); | ||
333 | - //图片显示在F3 | ||
334 | - $objDrawing->setCoordinates('F3'); | ||
335 | - $objDrawing->setWorksheet($sheet); | ||
336 | - } | ||
337 | - | ||
338 | - //乙方公司 | ||
339 | - $sheet->setCellValue('G3', '乙方公司'); | ||
340 | - //乙方公司名称 | ||
341 | - $sheet->setCellValue('G4', $arr['b_company']['company_name']); | ||
342 | - | ||
343 | - //项目组 | ||
344 | - $sheet->setCellValue('B6', '项目组'); | ||
345 | - //项目组名称 | ||
346 | - $sheet->setCellValue('B7', $arr['group_name']); | ||
347 | - | ||
348 | - //巡检日期 | ||
349 | - $sheet->setCellValue('E6', '巡检日期'); | ||
350 | - //巡检日期名称 | ||
351 | - $sheet->setCellValue('E7', $arr['create_time']); | ||
352 | - | ||
353 | - //巡检状态 | ||
354 | - $sheet->setCellValue('G6', '巡检状态'); | ||
355 | - //巡检状态名称 | ||
356 | - $sheet->setCellValue('G7', $arr['inspect_status']); | ||
357 | - | ||
358 | - //循环开始 | ||
359 | - | ||
360 | - $cols = 10; | ||
361 | - $cells = ['C','E','G','I','K']; | ||
362 | - foreach($arr['point'] as $value){ | ||
363 | - $cols += 0; | ||
364 | - //巡检点名称 | ||
365 | - $sheet->setCellValue('B'.$cols, $value['point_name']); | ||
366 | - $sheet->getStyle('B'.$cols)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中 | ||
367 | - //获取图片个数 | ||
368 | - $length = count($value['images']); | ||
369 | - $col = ceil($length/5); | ||
370 | - for($i=0;$i<$col;$i++){ | ||
371 | - $col_i = $cols+$i; | ||
372 | - $sheet->getRowDimension($col_i)->setRowHeight(105); | ||
373 | - $sheet->mergeCells('C'.$col_i.':D'.$col_i); | ||
374 | - $sheet->mergeCells('E'.$col_i.':F'.$col_i); | ||
375 | - $sheet->mergeCells('G'.$col_i.':H'.$col_i); | ||
376 | - $sheet->mergeCells('I'.$col_i.':J'.$col_i); | ||
377 | - $sheet->mergeCells('K'.$col_i.':L'.$col_i); | ||
378 | - $key = 0; | ||
379 | - foreach($value['images'] as $k=>$image_value){ | ||
380 | - $pre = $i+4*$i; | ||
381 | - $next = $i+1+4*($i+1); | ||
382 | - if($k>=$pre && $k<$next){ | ||
383 | - //巡检图片 | ||
384 | - $image = $image_value['image_url']; | ||
385 | - if(@fopen($image , 'r' ) ) { | ||
386 | - //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
387 | - $obj = new Drawing(); | ||
388 | - $obj->setPath($image); | ||
389 | - // 设置图片的宽度 | ||
390 | - $obj->setResizeProportional(false); | ||
391 | - $obj->setWidthAndHeight(105,130); | ||
392 | - //图片显示在F3 | ||
393 | - $obj->setCoordinates($cells[$key].$col_i); | ||
394 | - $obj->setWorksheet($sheet); | ||
395 | - } | ||
396 | - $key++; | ||
397 | - } | ||
398 | - } | ||
399 | - } | ||
400 | - | ||
401 | - $cols += $col+1; | ||
402 | - } | ||
403 | - $sheet->getStyle( 'A9:M'.$cols)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
404 | - $sheet->getStyle( 'A9:M'.$cols)->getFill()->getStartColor()->setRGB('F3F3F4');//背景颜色浅灰色 | ||
405 | - | ||
406 | - | ||
407 | - $objWrite = IOFactory::createWriter($spreadsheet, 'Xls'); | ||
408 | - | ||
409 | - //直接从浏览器中输出star | ||
410 | -// header('pragma:public'); | ||
411 | -// header("Content-Disposition:attachment;filename=出货装箱单.xls"); | ||
412 | -// $objWrite->save('php://output'); | ||
413 | -// exit; | ||
414 | - //直接从浏览器中输出end | ||
415 | - | ||
416 | - $file_name = $xlsName.'.xls'; | ||
417 | - | ||
418 | - $files_url = ROOT_PATH . '/public/upload/export'; | ||
419 | - if(!is_dir($files_url)){ | ||
420 | - mkdir($files_url); | ||
421 | - } | ||
422 | - $file_url = ROOT_PATH . '/public/upload/export/'.$file_name; | ||
423 | - $objWrite->save($file_url); | ||
424 | - | ||
425 | - $sys = $this->getOperateSys(); | ||
426 | - if($sys == 'Linux'){ | ||
427 | - chmod($file_url, 0777);//适用于linux | ||
428 | - } | ||
429 | - //相对路径 | ||
430 | - $url = 'upload/export/'.$file_name; | ||
431 | - return $url; | ||
432 | - } | ||
433 | - | ||
434 | - /* | ||
435 | - * 导出表格适用于普通有规律的数据 | ||
436 | - * param xlsName:title名称 | ||
437 | - * param xlsCell:二维数据xlsCell = array( | ||
438 | - array('id','序号'), | ||
439 | - array('user_nickname','昵称'), | ||
440 | - array('mobile','手机号'), | ||
441 | - array('create_time','注册时间'), | ||
442 | - array('last_login_time','最后登录时间'), | ||
443 | - array('user_status','状态'), | ||
444 | - ); | ||
445 | - * param xlsData:数据库数据 | ||
446 | - */ | ||
447 | - public function exportExcel($xlsName,$xlsCell,$xlsData){ | ||
448 | - $topNumber = 1;//表头有几行占用 | ||
449 | - $starData = $topNumber+1;//数据开始行起 | ||
450 | - $cellKey = [ | ||
451 | - 'A','B','C','D','E','F','G','H','I','J','K','L','M', | ||
452 | - 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', | ||
453 | - 'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM', | ||
454 | - 'AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ' | ||
455 | - ]; | ||
456 | - vendor("PHPExcel"); | ||
457 | - | ||
458 | - $spreadsheet = new Spreadsheet(); | ||
459 | - $sheet = $spreadsheet->getActiveSheet(); | ||
460 | - $sheet->setTitle($xlsName); | ||
461 | - //处理表头 | ||
462 | - foreach ($xlsCell as $k=>$v) { | ||
463 | - $sheet->setCellValue($cellKey[$k].$topNumber, $v[1]);//设置表头数据 | ||
464 | - $sheet->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//设置是否加粗 | ||
465 | - } | ||
466 | - //设置单元格居中显示 | ||
467 | - $styleArray = [ | ||
468 | - 'alignment' => [ | ||
469 | - 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, | ||
470 | - ], | ||
471 | - ]; | ||
472 | - //表头居中 | ||
473 | - foreach ($xlsCell as $k2=>$v2) { | ||
474 | - $sheet->getStyle($cellKey[$k2].'1')->applyFromArray($styleArray); | ||
475 | - } | ||
476 | - //处理数据 | ||
477 | - foreach ($xlsData as $k=>$v) { | ||
478 | - foreach ($xlsCell as $k1=>$v1) { | ||
479 | - //设置每列数据 | ||
480 | - $sheet->setCellValue($cellKey[$k1].($k+$starData), $v[$v1[0]]); | ||
481 | - //每列宽度 | ||
482 | - $sheet->getColumnDimension($cellKey[$k1])->setWidth(30); | ||
483 | - //设置居中显示 | ||
484 | - $sheet->getStyle($cellKey[$k1].($k+$starData))->applyFromArray($styleArray); | ||
485 | - } | ||
486 | - } | ||
487 | - $file_name = $xlsName.'.xls'; | ||
488 | -// ob_end_clean();//清除缓冲区,避免乱码 | ||
489 | -// header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件 | ||
490 | -// header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件 | ||
491 | -// header('Content-Disposition: attachment;filename='.$file_name); | ||
492 | -// header('Cache-Control: max-age=0'); | ||
493 | -// $writer = new Xlsx($spreadsheet); | ||
494 | - $writer = IOFactory::createWriter($spreadsheet, 'Xls'); //按照指定格式生成Excel文件 | ||
495 | -// $writer->save('php://output');直接输入到浏览器下载 | ||
496 | - //绝对路径,不存在则创建目录 | ||
497 | - $files_url = ROOT_PATH . '/public/upload/export'; | ||
498 | - if(!is_dir($files_url)){ | ||
499 | - mkdir($files_url); | ||
500 | - } | ||
501 | - $file_url = ROOT_PATH . '/public/upload/export/'.$file_name; | ||
502 | - $writer->save($file_url); | ||
503 | - //相对路径 | ||
504 | - $url = 'upload/export/'.$file_name; | ||
505 | - return $url; | ||
506 | - } | ||
507 | - | ||
508 | - /* | ||
509 | * 添加文件路径到压缩包中 | 242 | * 添加文件路径到压缩包中 |
510 | * param files:可以为二维数组 | 243 | * param files:可以为二维数组 |
511 | * array=>[ | 244 | * array=>[ |
@@ -602,6 +335,7 @@ class AdminCommonController extends AdminBaseController | @@ -602,6 +335,7 @@ class AdminCommonController extends AdminBaseController | ||
602 | $zipName=iconv('UTF-8','GB2312',$zipName); | 335 | $zipName=iconv('UTF-8','GB2312',$zipName); |
603 | } | 336 | } |
604 | 337 | ||
338 | + //下载zip | ||
605 | header("Cache-Control: public");//任何情况下都可以得到资源参考:https://blog.csdn.net/u012375924/article/details/82806617 | 339 | header("Cache-Control: public");//任何情况下都可以得到资源参考:https://blog.csdn.net/u012375924/article/details/82806617 |
606 | header("Content-Description: File Transfer"); | 340 | header("Content-Description: File Transfer"); |
607 | header('Content-disposition: attachment; filename='.basename($zipName)); //文件名 | 341 | header('Content-disposition: attachment; filename='.basename($zipName)); //文件名 |
@@ -838,4 +572,158 @@ class AdminCommonController extends AdminBaseController | @@ -838,4 +572,158 @@ class AdminCommonController extends AdminBaseController | ||
838 | return $os_str; | 572 | return $os_str; |
839 | } | 573 | } |
840 | 574 | ||
575 | + //获取导出(月检,培训,演习)列表 | ||
576 | + public function exportCheckList($table,$param,$field){ | ||
577 | + $res_ins = Db::name($table) | ||
578 | + ->alias('t') | ||
579 | + ->join('project p','t.project_id = p.id','LEFT') | ||
580 | + ->where(function (Query $query) use ($param,$table){ | ||
581 | + if (!empty($param['name'])) { | ||
582 | + $keyword = $param['name']; | ||
583 | + $query->where('p.name', 'like', "%$keyword%"); | ||
584 | + } | ||
585 | + $startTime = empty($param['start_time']) ? 0 : strtotime($param['start_time']); | ||
586 | + $endTime = empty($param['end_time']) ? 0 : strtotime($param['end_time']); | ||
587 | + if (!empty($startTime)) { | ||
588 | + if($table == 'check'){ | ||
589 | + $query->where('t.ins_m_time', '>=', $startTime); | ||
590 | + }else if($table == 'train'){ | ||
591 | + $query->where('t.train_time', '>=', $startTime); | ||
592 | + }else{ | ||
593 | + $query->where('t.exercise_time', '>=', $startTime); | ||
594 | + } | ||
595 | + } | ||
596 | + if (!empty($endTime)) { | ||
597 | + if($table == 'check'){ | ||
598 | + $query->where('t.ins_m_time', '<=', $endTime); | ||
599 | + }else if($table == 'train'){ | ||
600 | + $query->where('t.train_time', '<=', $endTime); | ||
601 | + }else{ | ||
602 | + $query->where('t.exercise_time', '<=', $endTime); | ||
603 | + } | ||
604 | + } | ||
605 | + | ||
606 | + }) | ||
607 | + ->field($field) | ||
608 | + ->select()->toArray(); | ||
609 | + return $res_ins; | ||
610 | + } | ||
611 | + | ||
612 | + //导出月检报表详情 | ||
613 | + public function checkExportData($res){ | ||
614 | + $arr = []; | ||
615 | + //甲乙方logo,名称,报表名称 | ||
616 | + $company = $this->getCompanyName($res['project_id']); | ||
617 | + if($company){ | ||
618 | + $arr['a_company'] = $company['a_company']; | ||
619 | + $arr['b_company'] = $company['b_company']; | ||
620 | + $arr['title'] = $company['title']; | ||
621 | + } | ||
622 | + | ||
623 | + //月检人员(乙方项目组) | ||
624 | + $arr['group_name'] = $this->getBUserByProject($res['project_id'],'id,b_sid',1); | ||
625 | + | ||
626 | + //月检时间 | ||
627 | + $arr['ins_m_time'] = date('Y/m/d',$res['ins_m_time']); | ||
628 | + $arr['time'] = date('Y-m-d',$res['ins_m_time']); | ||
629 | + //月检地点 | ||
630 | + $arr['address'] = $res['address']; | ||
631 | + | ||
632 | + //月检备注 | ||
633 | + $arr['remark'] = $res['remark']; | ||
634 | + | ||
635 | + //月检(乙方发起人) | ||
636 | + $user = $this->getUserById(['id'=>$res['uid']]); | ||
637 | + if($user){ | ||
638 | + $arr['user_login'] = $user['user_login']; | ||
639 | + }else{ | ||
640 | + $arr['user_login'] = ''; | ||
641 | + } | ||
642 | + | ||
643 | + //甲方领导确认人 | ||
644 | + $leader_user = $this->getUserById(['id'=>$res['a_leader']]); | ||
645 | + if($leader_user){ | ||
646 | + $arr['a_leader_user'] = $leader_user['user_login']; | ||
647 | + }else{ | ||
648 | + $arr['a_leader_user'] = ''; | ||
649 | + } | ||
650 | + | ||
651 | + //乙方确认完成人 | ||
652 | + $finish_user = $this->getUserById(['id'=>$res['finish_uid']]); | ||
653 | + if($finish_user){ | ||
654 | + $arr['confirm_user'] = $finish_user['user_login']; | ||
655 | + }else{ | ||
656 | + $arr['confirm_user'] = ''; | ||
657 | + } | ||
658 | + | ||
659 | + //月检工期及验收完成时间 | ||
660 | + if($res['finish_time']){ | ||
661 | + $arr['finish_time'] = $res['finish_time']; | ||
662 | + //培训 | ||
663 | + $arr['check_period'] = $this->getPeriod($res['finish_time'],$res['ins_m_time']); | ||
664 | + }else{ | ||
665 | + //验收完成时间 | ||
666 | + $arr['finish_time'] = ''; | ||
667 | + //月检工期 | ||
668 | + $arr['check_period'] = ''; | ||
669 | + } | ||
670 | + | ||
671 | + //月检图片 | ||
672 | + if($res['images']){ | ||
673 | + $images = $this->exportUrl($res['images']); | ||
674 | + $arr1 = $this->getDayImages($images); | ||
675 | + $arr['images'] = $arr1; | ||
676 | + }else{ | ||
677 | + $arr['images'] = []; | ||
678 | + } | ||
679 | + | ||
680 | + //确认图片 | ||
681 | + if($res['confirm_images']){ | ||
682 | + $images = $this->exportUrl($res['confirm_images']); | ||
683 | + $arr1 = $this->getDayImages($images); | ||
684 | + $arr['confirm_images'] = $arr1; | ||
685 | + }else{ | ||
686 | + $arr['confirm_images'] = []; | ||
687 | + } | ||
688 | + return $arr; | ||
689 | + } | ||
690 | + | ||
691 | + //根据uid查询用户 | ||
692 | + public function getUserById($where){ | ||
693 | + $res = Db::name('user') | ||
694 | + ->where($where) | ||
695 | + ->field('id,user_login,identity') | ||
696 | + ->find(); | ||
697 | + return $res; | ||
698 | + } | ||
699 | + | ||
700 | + //获取项目完成工期 | ||
701 | + public function getPeriod($finishTime,$time){ | ||
702 | + $cnt = $finishTime-strtotime(date('Y-m-d',$time)); | ||
703 | + $days = floor($cnt/(3600*24))+1;//算出天数 | ||
704 | + return $days; | ||
705 | + } | ||
706 | + | ||
707 | + //按照日期进行排序 | ||
708 | + public function getDayImages($images){ | ||
709 | + $arr1 = []; | ||
710 | + foreach($images as &$value){ | ||
711 | + $value['file_time'] = date('Y/m/d',$value['file_time']); | ||
712 | + } | ||
713 | + //去重后的日期 | ||
714 | + $res = array_values(array_unique(array_column($images,'file_time')));//array_values键名从0开始 | ||
715 | + foreach($res as $key1=>$value1){ | ||
716 | + $k = 0; | ||
717 | + foreach($images as $value2){ | ||
718 | + if($value1 == $value2['file_time']){ | ||
719 | + $k+=0; | ||
720 | + $arr1[$key1]['day'] = $value2['file_time']; | ||
721 | + $arr1[$key1]['image'][$k]['image_url'] = $value2['image_url']; | ||
722 | + $k++; | ||
723 | + } | ||
724 | + } | ||
725 | + } | ||
726 | + return $arr1; | ||
727 | + } | ||
728 | + | ||
841 | } | 729 | } |
1 | +<?php | ||
2 | +// +---------------------------------------------------------------------- | ||
3 | +// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ] | ||
4 | +// +---------------------------------------------------------------------- | ||
5 | +// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved. | ||
6 | +// +---------------------------------------------------------------------- | ||
7 | +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) | ||
8 | +// +---------------------------------------------------------------------- | ||
9 | +// | Author: Powerless < wzxaini9@gmail.com> | ||
10 | +// +---------------------------------------------------------------------- | ||
11 | + | ||
12 | +namespace app\portal\controller; | ||
13 | + | ||
14 | +use cmf\controller\AdminBaseController; | ||
15 | +use PhpOffice\PhpSpreadsheet\Spreadsheet; | ||
16 | +use PhpOffice\PhpSpreadsheet\IOFactory; | ||
17 | +use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; | ||
18 | +//渲染数据到excel | ||
19 | +class AdminExcelDataController extends AdminBaseController | ||
20 | +{ | ||
21 | + | ||
22 | + //巡检,日检渲染数据到表格上 | ||
23 | + public function inspectExcelData($arr){ | ||
24 | + $spreadsheet = new Spreadsheet(); | ||
25 | + $adminCommon = new AdminCommonController(); | ||
26 | + $sheet = $spreadsheet->getActiveSheet(); | ||
27 | + $xlsName = $arr['time']; | ||
28 | + //设置sheet名称 | ||
29 | + $name = '报表'; | ||
30 | + $name = $adminCommon->iconv_to_utf8($name); | ||
31 | + | ||
32 | + $sheet->setTitle($xlsName.$name); | ||
33 | + //合并单元格 | ||
34 | + $sheet->mergeCells('B1:J1'); | ||
35 | + $sheet->mergeCells('B3:B4'); | ||
36 | + $sheet->mergeCells('B6:D6'); | ||
37 | + $sheet->mergeCells('B7:D7'); | ||
38 | + $sheet->mergeCells('C3:D3'); | ||
39 | + $sheet->mergeCells('C4:D4'); | ||
40 | + $sheet->mergeCells('F3:F4'); | ||
41 | + $sheet->mergeCells('G3:I3'); | ||
42 | + $sheet->mergeCells('G4:I4'); | ||
43 | + | ||
44 | + $spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑');//字体 | ||
45 | + | ||
46 | + //设置默认宽 | ||
47 | + $sheet->getDefaultColumnDimension()->setWidth(8); | ||
48 | + //设置高度 | ||
49 | + $sheet->getRowDimension(1)->setRowHeight(45); | ||
50 | +// $sheet->getRowDimension(2)->setRowHeight(55); | ||
51 | + | ||
52 | + | ||
53 | + //***********************画出单元格边框***************************** | ||
54 | +// $styleArray = [ | ||
55 | +// 'borders' => [ | ||
56 | +// 'outline' => [ | ||
57 | +// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK, | ||
58 | +// 'color' => ['argb' => 'FFFF0000'], | ||
59 | +// ], | ||
60 | +// ], | ||
61 | +// ]; | ||
62 | +// $sheet->getStyle('A1:M26')->applyFromArray($styleArray); | ||
63 | + //***********************画出单元格边框结束***************************** | ||
64 | + | ||
65 | + //***********************背景填充颜色***************************** | ||
66 | + $sheet->getStyle( 'A1:M8')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
67 | + $sheet->getStyle( 'A1:M8')->getFill()->getStartColor()->setRGB('222B35');//背景颜色 | ||
68 | + //***********************画出单元格边框结束***************************** | ||
69 | + | ||
70 | + //标题 | ||
71 | + $sheet->setCellValue('B1', $arr['title']); | ||
72 | + $sheet->getStyle('B1')->getFont()->setSize(18);//字体大小 | ||
73 | + $sheet->getStyle('B1')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
74 | + $sheet->getStyle('B1')->getFont()->setBold(true);//字体加粗 | ||
75 | + | ||
76 | + //甲方logo | ||
77 | + $imageA = $arr['a_company']['logo']; | ||
78 | + if(@fopen($imageA , 'r' ) ) { | ||
79 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
80 | + $imageADrawing = new Drawing(); | ||
81 | + $imageADrawing->setPath($imageA); | ||
82 | + // 设置图片的宽度 | ||
83 | + $imageADrawing->setResizeProportional(false); | ||
84 | + $imageADrawing->setWidthAndHeight(40,40); | ||
85 | + //图片显示在B3 | ||
86 | + $imageADrawing->setCoordinates('B3'); | ||
87 | + $imageADrawing->setWorksheet($sheet); | ||
88 | + } | ||
89 | + | ||
90 | + $sheet->getStyle('B3:G7')->getFont()->setSize(8);//字体大小 | ||
91 | + $sheet->getStyle('C3:G3')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
92 | + $sheet->getStyle('B6:G6')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
93 | + $sheet->getStyle('C4:G4')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
94 | + $sheet->getStyle('B7:G7')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
95 | + | ||
96 | + //甲方公司 | ||
97 | + $sheet->setCellValue('C3', '甲方公司'); | ||
98 | + //甲方公司名称 | ||
99 | + $sheet->setCellValue('C4', $arr['a_company']['company_name']); | ||
100 | + | ||
101 | + //乙方logo | ||
102 | + $imageB = $arr['b_company']['logo']; | ||
103 | + if(@fopen($imageB , 'r' ) ) { | ||
104 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
105 | + $objDrawing = new Drawing(); | ||
106 | + $objDrawing->setPath($imageB); | ||
107 | + // 设置图片的宽度 | ||
108 | + $objDrawing->setResizeProportional(false); | ||
109 | + $objDrawing->setWidthAndHeight(40,40); | ||
110 | + //图片显示在F3 | ||
111 | + $objDrawing->setCoordinates('F3'); | ||
112 | + $objDrawing->setWorksheet($sheet); | ||
113 | + } | ||
114 | + | ||
115 | + //乙方公司 | ||
116 | + $sheet->setCellValue('G3', '乙方公司'); | ||
117 | + //乙方公司名称 | ||
118 | + $sheet->setCellValue('G4', $arr['b_company']['company_name']); | ||
119 | + | ||
120 | + //项目组 | ||
121 | + $sheet->setCellValue('B6', '项目组'); | ||
122 | + //项目组名称 | ||
123 | + $sheet->setCellValue('B7', $arr['group_name']); | ||
124 | + | ||
125 | + //巡检日期 | ||
126 | + $sheet->setCellValue('E6', '巡检日期'); | ||
127 | + //巡检日期名称 | ||
128 | + $sheet->setCellValue('E7', $arr['create_time']); | ||
129 | + | ||
130 | + //巡检状态 | ||
131 | + $sheet->setCellValue('G6', '巡检状态'); | ||
132 | + //巡检状态名称 | ||
133 | + $sheet->setCellValue('G7', $arr['inspect_status']); | ||
134 | + | ||
135 | + //循环开始 | ||
136 | + | ||
137 | + $cols = 10; | ||
138 | + $cells = ['C','E','G','I','K']; | ||
139 | + foreach($arr['point'] as $value){ | ||
140 | + $cols += 0; | ||
141 | + //巡检点名称 | ||
142 | + $sheet->setCellValue('B'.$cols, $value['point_name']); | ||
143 | + $sheet->getStyle('B'.$cols)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中 | ||
144 | + //获取图片个数 | ||
145 | + $length = count($value['images']); | ||
146 | + $col = ceil($length/5); | ||
147 | + for($i=0;$i<$col;$i++){ | ||
148 | + $col_i = $cols+$i; | ||
149 | + $sheet->getRowDimension($col_i)->setRowHeight(105); | ||
150 | + $sheet->mergeCells('C'.$col_i.':D'.$col_i); | ||
151 | + $sheet->mergeCells('E'.$col_i.':F'.$col_i); | ||
152 | + $sheet->mergeCells('G'.$col_i.':H'.$col_i); | ||
153 | + $sheet->mergeCells('I'.$col_i.':J'.$col_i); | ||
154 | + $sheet->mergeCells('K'.$col_i.':L'.$col_i); | ||
155 | + $key = 0; | ||
156 | + foreach($value['images'] as $k=>$image_value){ | ||
157 | + $pre = $i+4*$i; | ||
158 | + $next = $i+1+4*($i+1); | ||
159 | + if($k>=$pre && $k<$next){ | ||
160 | + //巡检图片 | ||
161 | + $image = $image_value['image_url']; | ||
162 | + if(@fopen($image , 'r' ) ) { | ||
163 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
164 | + $obj = new Drawing(); | ||
165 | + $obj->setPath($image); | ||
166 | + // 设置图片的宽度 | ||
167 | + $obj->setResizeProportional(false); | ||
168 | + $obj->setWidthAndHeight(105,130); | ||
169 | + //图片显示在F3 | ||
170 | + $obj->setCoordinates($cells[$key].$col_i); | ||
171 | + $obj->setWorksheet($sheet); | ||
172 | + } | ||
173 | + $key++; | ||
174 | + } | ||
175 | + } | ||
176 | + } | ||
177 | + | ||
178 | + $cols += $col+1; | ||
179 | + } | ||
180 | + $sheet->getStyle( 'A9:M'.$cols)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
181 | + $sheet->getStyle( 'A9:M'.$cols)->getFill()->getStartColor()->setRGB('F3F3F4');//背景颜色浅灰色 | ||
182 | + | ||
183 | + | ||
184 | + $objWrite = IOFactory::createWriter($spreadsheet, 'Xls'); | ||
185 | + | ||
186 | + //直接从浏览器中输出star | ||
187 | +// header('pragma:public'); | ||
188 | +// header("Content-Disposition:attachment;filename=出货装箱单.xls"); | ||
189 | +// $objWrite->save('php://output'); | ||
190 | +// exit; | ||
191 | + //直接从浏览器中输出end | ||
192 | + | ||
193 | + $file_name = $xlsName.'.xls'; | ||
194 | + | ||
195 | + $files_url = ROOT_PATH . '/public/upload/export'; | ||
196 | + if(!is_dir($files_url)){ | ||
197 | + mkdir($files_url); | ||
198 | + } | ||
199 | + $file_url = ROOT_PATH . '/public/upload/export/'.$file_name; | ||
200 | + $objWrite->save($file_url); | ||
201 | + | ||
202 | + $sys = $adminCommon->getOperateSys(); | ||
203 | + if($sys == 'Linux'){ | ||
204 | + chmod($file_url, 0777);//适用于linux | ||
205 | + } | ||
206 | + //相对路径 | ||
207 | + $url = 'upload/export/'.$file_name; | ||
208 | + return $url; | ||
209 | + } | ||
210 | + | ||
211 | + /* | ||
212 | + * 导出表格适用于普通有规律的数据 | ||
213 | + * param xlsName:title名称 | ||
214 | + * param xlsCell:二维数据xlsCell = array( | ||
215 | + array('id','序号'), | ||
216 | + array('user_nickname','昵称'), | ||
217 | + array('mobile','手机号'), | ||
218 | + array('create_time','注册时间'), | ||
219 | + array('last_login_time','最后登录时间'), | ||
220 | + array('user_status','状态'), | ||
221 | + ); | ||
222 | + * param xlsData:数据库数据 | ||
223 | + */ | ||
224 | + public function exportExcel($xlsName,$xlsCell,$xlsData){ | ||
225 | + $topNumber = 1;//表头有几行占用 | ||
226 | + $starData = $topNumber+1;//数据开始行起 | ||
227 | + $cellKey = [ | ||
228 | + 'A','B','C','D','E','F','G','H','I','J','K','L','M', | ||
229 | + 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', | ||
230 | + 'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM', | ||
231 | + 'AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ' | ||
232 | + ]; | ||
233 | + vendor("PHPExcel"); | ||
234 | + | ||
235 | + $spreadsheet = new Spreadsheet(); | ||
236 | + $sheet = $spreadsheet->getActiveSheet(); | ||
237 | + $sheet->setTitle($xlsName); | ||
238 | + //处理表头 | ||
239 | + foreach ($xlsCell as $k=>$v) { | ||
240 | + $sheet->setCellValue($cellKey[$k].$topNumber, $v[1]);//设置表头数据 | ||
241 | + $sheet->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//设置是否加粗 | ||
242 | + } | ||
243 | + //设置单元格居中显示 | ||
244 | + $styleArray = [ | ||
245 | + 'alignment' => [ | ||
246 | + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, | ||
247 | + ], | ||
248 | + ]; | ||
249 | + //表头居中 | ||
250 | + foreach ($xlsCell as $k2=>$v2) { | ||
251 | + $sheet->getStyle($cellKey[$k2].'1')->applyFromArray($styleArray); | ||
252 | + } | ||
253 | + //处理数据 | ||
254 | + foreach ($xlsData as $k=>$v) { | ||
255 | + foreach ($xlsCell as $k1=>$v1) { | ||
256 | + //设置每列数据 | ||
257 | + $sheet->setCellValue($cellKey[$k1].($k+$starData), $v[$v1[0]]); | ||
258 | + //每列宽度 | ||
259 | + $sheet->getColumnDimension($cellKey[$k1])->setWidth(30); | ||
260 | + //设置居中显示 | ||
261 | + $sheet->getStyle($cellKey[$k1].($k+$starData))->applyFromArray($styleArray); | ||
262 | + } | ||
263 | + } | ||
264 | + $file_name = $xlsName.'.xls'; | ||
265 | +// ob_end_clean();//清除缓冲区,避免乱码 | ||
266 | +// header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件 | ||
267 | +// header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件 | ||
268 | +// header('Content-Disposition: attachment;filename='.$file_name); | ||
269 | +// header('Cache-Control: max-age=0'); | ||
270 | +// $writer = new Xlsx($spreadsheet); | ||
271 | + $writer = IOFactory::createWriter($spreadsheet, 'Xls'); //按照指定格式生成Excel文件 | ||
272 | +// $writer->save('php://output');直接输入到浏览器下载 | ||
273 | + //绝对路径,不存在则创建目录 | ||
274 | + $files_url = ROOT_PATH . '/public/upload/export'; | ||
275 | + if(!is_dir($files_url)){ | ||
276 | + mkdir($files_url); | ||
277 | + } | ||
278 | + $file_url = ROOT_PATH . '/public/upload/export/'.$file_name; | ||
279 | + $writer->save($file_url); | ||
280 | + //相对路径 | ||
281 | + $url = 'upload/export/'.$file_name; | ||
282 | + return $url; | ||
283 | + } | ||
284 | + | ||
285 | + //月检渲染数据到表格上 | ||
286 | + public function checkExcelData($arr){ | ||
287 | + $spreadsheet = new Spreadsheet(); | ||
288 | + $adminCommon = new AdminCommonController(); | ||
289 | + $sheet = $spreadsheet->getActiveSheet(); | ||
290 | + $xlsName = $arr['time']; | ||
291 | + //设置sheet名称 | ||
292 | + $name = '报表'; | ||
293 | + $name = $adminCommon->iconv_to_utf8($name); | ||
294 | + | ||
295 | + $sheet->setTitle($xlsName.$name); | ||
296 | + //合并单元格 | ||
297 | + $sheet->mergeCells('B1:J1'); | ||
298 | + $sheet->mergeCells('B3:B4'); | ||
299 | + $sheet->mergeCells('B6:D6'); | ||
300 | + $sheet->mergeCells('B7:D7'); | ||
301 | + $sheet->mergeCells('C3:D3'); | ||
302 | + $sheet->mergeCells('C4:D4'); | ||
303 | + $sheet->mergeCells('F3:F4'); | ||
304 | + $sheet->mergeCells('G3:I3'); | ||
305 | + $sheet->mergeCells('G4:I4'); | ||
306 | + | ||
307 | + $spreadsheet->getDefaultStyle()->getFont()->setName('微软雅黑');//字体 | ||
308 | + | ||
309 | + //设置默认宽 | ||
310 | + $sheet->getDefaultColumnDimension()->setWidth(8); | ||
311 | + //设置高度 | ||
312 | + $sheet->getRowDimension(1)->setRowHeight(45); | ||
313 | +// $sheet->getRowDimension(2)->setRowHeight(55); | ||
314 | + | ||
315 | + //***********************背景填充颜色***************************** | ||
316 | + $sheet->getStyle( 'A1:M8')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
317 | + $sheet->getStyle( 'A1:M8')->getFill()->getStartColor()->setRGB('222B35');//背景颜色 | ||
318 | + //***********************画出单元格边框结束***************************** | ||
319 | + | ||
320 | + //标题 | ||
321 | + $sheet->setCellValue('B1', $arr['title']); | ||
322 | + $sheet->getStyle('B1')->getFont()->setSize(18);//字体大小 | ||
323 | + $sheet->getStyle('B1')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
324 | + $sheet->getStyle('B1')->getFont()->setBold(true);//字体加粗 | ||
325 | + | ||
326 | + //甲方logo | ||
327 | + $imageA = $arr['a_company']['logo']; | ||
328 | + if(@fopen($imageA , 'r' ) ) { | ||
329 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
330 | + $imageADrawing = new Drawing(); | ||
331 | + $imageADrawing->setPath($imageA); | ||
332 | + // 设置图片的宽度 | ||
333 | + $imageADrawing->setResizeProportional(false); | ||
334 | + $imageADrawing->setWidthAndHeight(40,40); | ||
335 | + //图片显示在B3 | ||
336 | + $imageADrawing->setCoordinates('B3'); | ||
337 | + $imageADrawing->setWorksheet($sheet); | ||
338 | + } | ||
339 | + | ||
340 | + $sheet->getStyle('B3:G7')->getFont()->setSize(8);//字体大小 | ||
341 | + $sheet->getStyle('C3:G3')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
342 | + $sheet->getStyle('B6:G6')->getFont()->getColor()->setRGB('949494');//设置颜色为灰色 | ||
343 | + $sheet->getStyle('C4:G4')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
344 | + $sheet->getStyle('B7:G7')->getFont()->getColor()->setRGB('FFFFFF');//设置颜色为白色 | ||
345 | + | ||
346 | + //甲方公司 | ||
347 | + $sheet->setCellValue('C3', '甲方公司'); | ||
348 | + //甲方公司名称 | ||
349 | + $sheet->setCellValue('C4', $arr['a_company']['company_name']); | ||
350 | + | ||
351 | + //乙方logo | ||
352 | + $imageB = $arr['b_company']['logo']; | ||
353 | + if(@fopen($imageB , 'r' ) ) { | ||
354 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
355 | + $objDrawing = new Drawing(); | ||
356 | + $objDrawing->setPath($imageB); | ||
357 | + // 设置图片的宽度 | ||
358 | + $objDrawing->setResizeProportional(false); | ||
359 | + $objDrawing->setWidthAndHeight(40,40); | ||
360 | + //图片显示在F3 | ||
361 | + $objDrawing->setCoordinates('F3'); | ||
362 | + $objDrawing->setWorksheet($sheet); | ||
363 | + } | ||
364 | + | ||
365 | + //乙方公司 | ||
366 | + $sheet->setCellValue('G3', '乙方公司'); | ||
367 | + //乙方公司名称 | ||
368 | + $sheet->setCellValue('G4', $arr['b_company']['company_name']); | ||
369 | + | ||
370 | + //项目组 | ||
371 | + $sheet->setCellValue('B6', '项目组'); | ||
372 | + //项目组名称 | ||
373 | + $sheet->setCellValue('B7', $arr['group_name']); | ||
374 | + | ||
375 | + //巡检日期 | ||
376 | + $sheet->setCellValue('E6', '巡检日期'); | ||
377 | + //巡检日期名称 | ||
378 | + $sheet->setCellValue('E7', $arr['create_time']); | ||
379 | + | ||
380 | + //巡检状态 | ||
381 | + $sheet->setCellValue('G6', '巡检状态'); | ||
382 | + //巡检状态名称 | ||
383 | + $sheet->setCellValue('G7', $arr['inspect_status']); | ||
384 | + | ||
385 | + //循环开始 | ||
386 | + | ||
387 | + $cols = 10; | ||
388 | + $cells = ['C','E','G','I','K']; | ||
389 | + foreach($arr['point'] as $value){ | ||
390 | + $cols += 0; | ||
391 | + //巡检点名称 | ||
392 | + $sheet->setCellValue('B'.$cols, $value['point_name']); | ||
393 | + $sheet->getStyle('B'.$cols)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中 | ||
394 | + //获取图片个数 | ||
395 | + $length = count($value['images']); | ||
396 | + $col = ceil($length/5); | ||
397 | + for($i=0;$i<$col;$i++){ | ||
398 | + $col_i = $cols+$i; | ||
399 | + $sheet->getRowDimension($col_i)->setRowHeight(105); | ||
400 | + $sheet->mergeCells('C'.$col_i.':D'.$col_i); | ||
401 | + $sheet->mergeCells('E'.$col_i.':F'.$col_i); | ||
402 | + $sheet->mergeCells('G'.$col_i.':H'.$col_i); | ||
403 | + $sheet->mergeCells('I'.$col_i.':J'.$col_i); | ||
404 | + $sheet->mergeCells('K'.$col_i.':L'.$col_i); | ||
405 | + $key = 0; | ||
406 | + foreach($value['images'] as $k=>$image_value){ | ||
407 | + $pre = $i+4*$i; | ||
408 | + $next = $i+1+4*($i+1); | ||
409 | + if($k>=$pre && $k<$next){ | ||
410 | + //巡检图片 | ||
411 | + $image = $image_value['image_url']; | ||
412 | + if(@fopen($image , 'r' ) ) { | ||
413 | + //这是一个坑,刚开始我把实例化图片类放在了循环外面,但是失败了,也就是每个图片都要实例化一次 | ||
414 | + $obj = new Drawing(); | ||
415 | + $obj->setPath($image); | ||
416 | + // 设置图片的宽度 | ||
417 | + $obj->setResizeProportional(false); | ||
418 | + $obj->setWidthAndHeight(105,130); | ||
419 | + //图片显示在F3 | ||
420 | + $obj->setCoordinates($cells[$key].$col_i); | ||
421 | + $obj->setWorksheet($sheet); | ||
422 | + } | ||
423 | + $key++; | ||
424 | + } | ||
425 | + } | ||
426 | + } | ||
427 | + | ||
428 | + $cols += $col+1; | ||
429 | + } | ||
430 | + $sheet->getStyle( 'A9:M'.$cols)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); | ||
431 | + $sheet->getStyle( 'A9:M'.$cols)->getFill()->getStartColor()->setRGB('F3F3F4');//背景颜色浅灰色 | ||
432 | + | ||
433 | + | ||
434 | + $objWrite = IOFactory::createWriter($spreadsheet, 'Xls'); | ||
435 | + | ||
436 | + //直接从浏览器中输出star | ||
437 | +// header('pragma:public'); | ||
438 | +// header("Content-Disposition:attachment;filename=出货装箱单.xls"); | ||
439 | +// $objWrite->save('php://output'); | ||
440 | +// exit; | ||
441 | + //直接从浏览器中输出end | ||
442 | + | ||
443 | + $file_name = $xlsName.'.xls'; | ||
444 | + | ||
445 | + $files_url = ROOT_PATH . '/public/upload/export'; | ||
446 | + if(!is_dir($files_url)){ | ||
447 | + mkdir($files_url); | ||
448 | + } | ||
449 | + $file_url = ROOT_PATH . '/public/upload/export/'.$file_name; | ||
450 | + $objWrite->save($file_url); | ||
451 | + | ||
452 | + $sys = $adminCommon->getOperateSys(); | ||
453 | + if($sys == 'Linux'){ | ||
454 | + chmod($file_url, 0777);//适用于linux | ||
455 | + } | ||
456 | + //相对路径 | ||
457 | + $url = 'upload/export/'.$file_name; | ||
458 | + return $url; | ||
459 | + } | ||
460 | + | ||
461 | +} |
@@ -185,6 +185,7 @@ class AdminInspectAController extends AdminBaseController | @@ -185,6 +185,7 @@ class AdminInspectAController extends AdminBaseController | ||
185 | $mark = $this->request->param('mark'); | 185 | $mark = $this->request->param('mark'); |
186 | 186 | ||
187 | $adminCommon = new AdminCommonController(); | 187 | $adminCommon = new AdminCommonController(); |
188 | + $adminExcel = new AdminExcelDataController(); | ||
188 | $res_ins = $adminCommon->inspectList(0,$param); | 189 | $res_ins = $adminCommon->inspectList(0,$param); |
189 | 190 | ||
190 | $arr_url = []; | 191 | $arr_url = []; |
@@ -217,7 +218,7 @@ class AdminInspectAController extends AdminBaseController | @@ -217,7 +218,7 @@ class AdminInspectAController extends AdminBaseController | ||
217 | $arr['point'] = $point; | 218 | $arr['point'] = $point; |
218 | 219 | ||
219 | //获取文件路径 | 220 | //获取文件路径 |
220 | - $url = $adminCommon->send_export($arr); | 221 | + $url = $adminExcel->inspectExcelData($arr); |
221 | $month = date('Y-m',$value['create_time']); | 222 | $month = date('Y-m',$value['create_time']); |
222 | $year = date('Y',$value['create_time']); | 223 | $year = date('Y',$value['create_time']); |
223 | if($mark == 'day'){ | 224 | if($mark == 'day'){ |
@@ -130,6 +130,7 @@ class AdminInspectBController extends AdminBaseController | @@ -130,6 +130,7 @@ class AdminInspectBController extends AdminBaseController | ||
130 | $mark = $this->request->param('mark'); | 130 | $mark = $this->request->param('mark'); |
131 | 131 | ||
132 | $adminCommon = new AdminCommonController(); | 132 | $adminCommon = new AdminCommonController(); |
133 | + $adminExcel = new AdminExcelDataController(); | ||
133 | $res_ins = $adminCommon->inspectList(1,$param); | 134 | $res_ins = $adminCommon->inspectList(1,$param); |
134 | 135 | ||
135 | $arr_url = []; | 136 | $arr_url = []; |
@@ -162,7 +163,7 @@ class AdminInspectBController extends AdminBaseController | @@ -162,7 +163,7 @@ class AdminInspectBController extends AdminBaseController | ||
162 | $arr['point'] = $point; | 163 | $arr['point'] = $point; |
163 | 164 | ||
164 | //获取文件路径 | 165 | //获取文件路径 |
165 | - $url = $adminCommon->send_export($arr); | 166 | + $url = $adminExcel->inspectExcelData($arr); |
166 | $month = date('Y-m',$value['create_time']); | 167 | $month = date('Y-m',$value['create_time']); |
167 | $year = date('Y',$value['create_time']); | 168 | $year = date('Y',$value['create_time']); |
168 | if($mark == 'day'){ | 169 | if($mark == 'day'){ |
@@ -7,19 +7,18 @@ | @@ -7,19 +7,18 @@ | ||
7 | </ul> | 7 | </ul> |
8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminCheck/index')}"> | 8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminCheck/index')}"> |
9 | 项目名称: | 9 | 项目名称: |
10 | - <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" | ||
11 | - placeholder="请输入项目名称"> | 10 | + <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" id="project_name" placeholder="请输入项目名称"> |
12 | 11 | ||
13 | 月检时间: | 12 | 月检时间: |
14 | - <input type="text" class="form-control js-bootstrap-datetime" name="start_time" | ||
15 | - value="{$start_time|default=''}" | ||
16 | - style="width: 140px;" autocomplete="off">- | ||
17 | - <input type="text" class="form-control js-bootstrap-datetime" name="end_time" | ||
18 | - value="{$end_time|default=''}" | ||
19 | - style="width: 140px;" autocomplete="off"> | 13 | + <input type="text" class="form-control js-bootstrap-datetime" style="width:160px;" name="start_time" value="{$start_time|default=''}" autocomplete="off" id="start_time" placeholder="请输入开始时间">- |
14 | + <input type="text" class="form-control js-bootstrap-datetime" style="width:160px;" name="end_time" value="{$end_time|default=''}" autocomplete="off" id="end_time" placeholder="请输入结束时间"> | ||
20 | <input type="submit" class="btn btn-primary" value="搜索"/> | 15 | <input type="submit" class="btn btn-primary" value="搜索"/> |
16 | + | ||
21 | <a class="btn btn-danger" href="{:url('AdminCheck/index')}">清空</a> | 17 | <a class="btn btn-danger" href="{:url('AdminCheck/index')}">清空</a> |
22 | </form> | 18 | </form> |
19 | + | ||
20 | + <button class="btn btn-success" id="export_data">导出月检数据</button> | ||
21 | + | ||
23 | <form method="post" class="js-ajax-form"> | 22 | <form method="post" class="js-ajax-form"> |
24 | <table class="table table-hover table-bordered"> | 23 | <table class="table table-hover table-bordered"> |
25 | <thead> | 24 | <thead> |
@@ -63,4 +62,50 @@ | @@ -63,4 +62,50 @@ | ||
63 | </div> | 62 | </div> |
64 | <script src="__STATIC__/js/admin.js"></script> | 63 | <script src="__STATIC__/js/admin.js"></script> |
65 | </body> | 64 | </body> |
66 | -</html> | ||
65 | +</html> | ||
66 | + | ||
67 | +<script> | ||
68 | + $(function(){ | ||
69 | + //导出数据 | ||
70 | + $('#export_data').click(function(){ | ||
71 | + var project_name = $('#project_name').val(); | ||
72 | + var start_time = $('#start_time').val(); | ||
73 | + var end_time = $('#end_time').val(); | ||
74 | + var code = checkData(start_time,end_time,project_name); | ||
75 | + if(code == 1){ | ||
76 | + window.location.href = 'exportData?start_time='+start_time+'&end_time='+end_time+'&name='+project_name; | ||
77 | + } | ||
78 | + }); | ||
79 | + }); | ||
80 | + | ||
81 | + //检查是否有可导出的数据 | ||
82 | + function checkData(start_time,end_time,project_name){ | ||
83 | + if(start_time == ''){ | ||
84 | + alert('请输入月检开始时间'); | ||
85 | + return false; | ||
86 | + } | ||
87 | + if(end_time == ''){ | ||
88 | + alert('请输入月检结束时间'); | ||
89 | + return false; | ||
90 | + } | ||
91 | + var code = 1; | ||
92 | + $.ajax({ | ||
93 | + type:'GET', | ||
94 | + url:'checkData' , | ||
95 | + data:{ | ||
96 | + 'start_time':start_time, | ||
97 | + 'end_time':end_time, | ||
98 | + 'name':project_name | ||
99 | + }, | ||
100 | + dataType:'json', | ||
101 | + async:false,//同步 | ||
102 | + success:function(data){ | ||
103 | + if (data.code == 0) { | ||
104 | + alert(data.msg); | ||
105 | + code = 0; | ||
106 | + } | ||
107 | + } | ||
108 | + }); | ||
109 | + return code; | ||
110 | + } | ||
111 | +</script> |
@@ -7,8 +7,7 @@ | @@ -7,8 +7,7 @@ | ||
7 | </ul> | 7 | </ul> |
8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminInspectA/index')}"> | 8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminInspectA/index')}"> |
9 | 项目名称: | 9 | 项目名称: |
10 | - <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" | ||
11 | - placeholder="请输入项目名称"> | 10 | + <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" id="project_name" placeholder="请输入项目名称"> |
12 | 11 | ||
13 | 巡检时间: | 12 | 巡检时间: |
14 | <input type="text" class="form-control js-bootstrap-datetime" style="width:160px;" name="start_time" value="{$start_time|default=''}" autocomplete="off" id="start_time" placeholder="请输入开始时间">- | 13 | <input type="text" class="form-control js-bootstrap-datetime" style="width:160px;" name="start_time" value="{$start_time|default=''}" autocomplete="off" id="start_time" placeholder="请输入开始时间">- |
@@ -65,37 +64,40 @@ | @@ -65,37 +64,40 @@ | ||
65 | $(function(){ | 64 | $(function(){ |
66 | //按日导出 | 65 | //按日导出 |
67 | $('#export_day').click(function(){ | 66 | $('#export_day').click(function(){ |
67 | + var project_name = $('#project_name').val(); | ||
68 | var start_time = $('#start_time').val(); | 68 | var start_time = $('#start_time').val(); |
69 | var end_time = $('#end_time').val(); | 69 | var end_time = $('#end_time').val(); |
70 | - var code = checkData(start_time,end_time); | 70 | + var code = checkData(start_time,end_time,project_name); |
71 | if(code == 1){ | 71 | if(code == 1){ |
72 | - window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&mark=day'; | 72 | + window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=day'; |
73 | } | 73 | } |
74 | }); | 74 | }); |
75 | 75 | ||
76 | //按月导出 | 76 | //按月导出 |
77 | $('#export_month').click(function(){ | 77 | $('#export_month').click(function(){ |
78 | + var project_name = $('#project_name').val(); | ||
78 | var start_time = $('#start_time').val(); | 79 | var start_time = $('#start_time').val(); |
79 | var end_time = $('#end_time').val(); | 80 | var end_time = $('#end_time').val(); |
80 | - var code = checkData(start_time,end_time); | 81 | + var code = checkData(start_time,end_time,project_name); |
81 | if(code == 1){ | 82 | if(code == 1){ |
82 | - window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&mark=month'; | 83 | + window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=month'; |
83 | } | 84 | } |
84 | }); | 85 | }); |
85 | 86 | ||
86 | //按年导出 | 87 | //按年导出 |
87 | $('#export_year').click(function(){ | 88 | $('#export_year').click(function(){ |
89 | + var project_name = $('#project_name').val(); | ||
88 | var start_time = $('#start_time').val(); | 90 | var start_time = $('#start_time').val(); |
89 | var end_time = $('#end_time').val(); | 91 | var end_time = $('#end_time').val(); |
90 | - var code = checkData(start_time,end_time); | 92 | + var code = checkData(start_time,end_time,project_name); |
91 | if(code == 1){ | 93 | if(code == 1){ |
92 | - window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&mark=year'; | 94 | + window.location.href = 'exportInspectADay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=year'; |
93 | } | 95 | } |
94 | }); | 96 | }); |
95 | }); | 97 | }); |
96 | 98 | ||
97 | //检查是否有可导出的数据 | 99 | //检查是否有可导出的数据 |
98 | - function checkData(start_time,end_time){ | 100 | + function checkData(start_time,end_time,project_name){ |
99 | if(start_time == ''){ | 101 | if(start_time == ''){ |
100 | alert('请输入巡检开始时间'); | 102 | alert('请输入巡检开始时间'); |
101 | return false; | 103 | return false; |
@@ -110,7 +112,8 @@ | @@ -110,7 +112,8 @@ | ||
110 | url:'checkData' , | 112 | url:'checkData' , |
111 | data:{ | 113 | data:{ |
112 | 'start_time':start_time, | 114 | 'start_time':start_time, |
113 | - 'end_time':end_time | 115 | + 'end_time':end_time, |
116 | + 'name':project_name | ||
114 | }, | 117 | }, |
115 | dataType:'json', | 118 | dataType:'json', |
116 | async:false,//同步 | 119 | async:false,//同步 |
@@ -7,8 +7,7 @@ | @@ -7,8 +7,7 @@ | ||
7 | </ul> | 7 | </ul> |
8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminInspectB/index')}"> | 8 | <form class="well form-inline margin-top-20" method="post" action="{:url('AdminInspectB/index')}"> |
9 | 项目名称: | 9 | 项目名称: |
10 | - <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" | ||
11 | - placeholder="请输入项目名称"> | 10 | + <input class="form-control" type="text" name="name" style="width: 200px;" value="{:input('request.name')}" id="project_name" placeholder="请输入项目名称"> |
12 | 11 | ||
13 | 日检时间: | 12 | 日检时间: |
14 | <input type="text" class="form-control js-bootstrap-datetime" name="start_time" value="{$start_time|default=''}" id="start_time" style="width: 160px;" placeholder="请输入日检开始时间" autocomplete="off">- | 13 | <input type="text" class="form-control js-bootstrap-datetime" name="start_time" value="{$start_time|default=''}" id="start_time" style="width: 160px;" placeholder="请输入日检开始时间" autocomplete="off">- |
@@ -65,37 +64,40 @@ | @@ -65,37 +64,40 @@ | ||
65 | $(function(){ | 64 | $(function(){ |
66 | //按日导出 | 65 | //按日导出 |
67 | $('#export_day').click(function(){ | 66 | $('#export_day').click(function(){ |
67 | + var project_name = $('#project_name').val(); | ||
68 | var start_time = $('#start_time').val(); | 68 | var start_time = $('#start_time').val(); |
69 | var end_time = $('#end_time').val(); | 69 | var end_time = $('#end_time').val(); |
70 | - var code = checkData(start_time,end_time); | 70 | + var code = checkData(start_time,end_time,project_name); |
71 | if(code == 1){ | 71 | if(code == 1){ |
72 | - window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&mark=day'; | 72 | + window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=day'; |
73 | } | 73 | } |
74 | }); | 74 | }); |
75 | 75 | ||
76 | //按月导出 | 76 | //按月导出 |
77 | $('#export_month').click(function(){ | 77 | $('#export_month').click(function(){ |
78 | + var project_name = $('#project_name').val(); | ||
78 | var start_time = $('#start_time').val(); | 79 | var start_time = $('#start_time').val(); |
79 | var end_time = $('#end_time').val(); | 80 | var end_time = $('#end_time').val(); |
80 | - var code = checkData(start_time,end_time); | 81 | + var code = checkData(start_time,end_time,project_name); |
81 | if(code == 1){ | 82 | if(code == 1){ |
82 | - window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&mark=month'; | 83 | + window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=month'; |
83 | } | 84 | } |
84 | }); | 85 | }); |
85 | 86 | ||
86 | //按年导出 | 87 | //按年导出 |
87 | $('#export_year').click(function(){ | 88 | $('#export_year').click(function(){ |
89 | + var project_name = $('#project_name').val(); | ||
88 | var start_time = $('#start_time').val(); | 90 | var start_time = $('#start_time').val(); |
89 | var end_time = $('#end_time').val(); | 91 | var end_time = $('#end_time').val(); |
90 | - var code = checkData(start_time,end_time); | 92 | + var code = checkData(start_time,end_time,project_name); |
91 | if(code == 1){ | 93 | if(code == 1){ |
92 | - window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&mark=year'; | 94 | + window.location.href = 'exportInspectBDay?start_time='+start_time+'&end_time='+end_time+'&name='+project_name+'&mark=year'; |
93 | } | 95 | } |
94 | }); | 96 | }); |
95 | }); | 97 | }); |
96 | 98 | ||
97 | //检查是否有可导出的数据 | 99 | //检查是否有可导出的数据 |
98 | - function checkData(start_time,end_time){ | 100 | + function checkData(start_time,end_time,project_name){ |
99 | if(start_time == ''){ | 101 | if(start_time == ''){ |
100 | alert('请输入巡检开始时间'); | 102 | alert('请输入巡检开始时间'); |
101 | return false; | 103 | return false; |
@@ -110,7 +112,8 @@ | @@ -110,7 +112,8 @@ | ||
110 | url:'checkData' , | 112 | url:'checkData' , |
111 | data:{ | 113 | data:{ |
112 | 'start_time':start_time, | 114 | 'start_time':start_time, |
113 | - 'end_time':end_time | 115 | + 'end_time':end_time, |
116 | + 'name':project_name | ||
114 | }, | 117 | }, |
115 | dataType:'json', | 118 | dataType:'json', |
116 | async:false,//同步 | 119 | async:false,//同步 |
-
请 注册 或 登录 后发表评论