patrolData($start1, $end1, $type); $this->assign('type', $type); $this->assign('list', $list); $this->assign('start', $start); $this->assign('end', $end); return $this->fetch(); } public function patrolData($start1, $end1, $type) { $map1[] = ['create_time', '>=', $start1]; $map1[] = ['create_time', '<=', $end1]; $map1[] = ['org_id', '=', $this->orgId]; $list = Db::name('patrol_record') ->where($map1) ->where('patrol_mode', $type) ->group('patrol_addr_id') ->distinct(true) ->select(); foreach ($list as $k => $v) { $list[$k]['title'] = Db::name('address') ->where('id', $v['patrol_addr_id']) ->value('title'); $c = Db::name('patrol_record') ->where($map1) ->where('is_normal', 0) ->where('patrol_addr_id', $v['patrol_addr_id']) ->where('patrol_mode', $type) ->count(); $list[$k]['count'] = $c ? $c : 0; $normal = Db::name('patrol_record') ->where($map1) ->where('is_normal', 1) ->where('patrol_addr_id', $v['patrol_addr_id']) ->where('patrol_mode', $type) ->count(); $list[$k]['normal'] = $normal ? $normal : 0; } return $list; } public function patrolExport() { $cur = date('Y-m-d'); $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week'))); $end = input('end', date('Y-m-d')); $start1 = $start . ' 00:00:00'; $end1 = $end . ' 23:59:59'; $type = input('type', 1); $ret = $this->patrolData($start1, $end1, $type); include_once env('root_path') . '/extend/phpexcel/Classes/PHPExcel.php'; //实例化PHPExcel类 $objPHPExcel = new \PHPExcel(); //激活当前的sheet表 $objPHPExcel->setActiveSheetIndex(0); //设置表格头(即excel表格的第一行) $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '智慧点') ->setCellValue('B1', '总数') ->setCellValue('C1', '总数(异常)'); // 设置表格头水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置列水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置单元格宽度 $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20); //循环刚取出来的数组,将数据逐一添加到excel表格。 for ($i = 0; $i < count($ret); $i++) { $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['title']); $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['count']); $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $ret[$i]['normal']); } $n = Db::name('patrol_mode') ->where('id', $type) ->value('name'); //设置保存的Excel表格名称 $filename = $n . '工作量统计分析_' . date('YmdHis', time()) . '.xls'; //设置当前激活的sheet表格名称 $objPHPExcel->getActiveSheet()->setTitle($n . '工作量统计分析'); //设置浏览器窗口下载表格 ob_end_clean(); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="' . $filename); //生成excel文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //下载文件在浏览器窗口 return $objWriter->save('php://output'); } public function work() { $cur = date('Y-m-d'); $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week'))); $end = input('end', date('Y-m-d')); $start1 = $start . ' 00:00:00'; $end1 = $end . ' 23:59:59'; $type = input('type', 1); $list = $this->workData($start1, $end1, $type); $this->assign('type', $type); $this->assign('list', $list); $this->assign('start', $start); $this->assign('end', $end); return $this->fetch(); } public function workData($start1, $end1, $type) { $map1[] = ['create_time', '>=', $start1]; $map1[] = ['create_time', '<=', $end1]; $map1[] = ['org_id', '=', $this->orgId]; $list = Db::name('patrol_record') ->where($map1) ->where('patrol_mode', $type) ->group('user_id') ->distinct(true) ->select(); foreach ($list as $k => $v) { $list[$k]['title'] = Db::name('user') ->where('id', $v['user_id']) ->value('real_name'); $c = Db::name('patrol_record') ->where($map1) ->where('user_id', $v['user_id']) ->where('patrol_mode', $type) ->count(); $list[$k]['count'] = $c ? $c : 0; $c1 = Db::name('patrol_record') ->where($map1) ->where('user_id', $v['user_id']) ->where('patrol_mode', $type) ->where('is_normal', 0) ->count(); $list[$k]['count1'] = $c1 ? $c1 : 0; $c2 = Db::name('patrol_record') ->where($map1) ->where('user_id', $v['user_id']) ->where('patrol_mode', $type) ->where('is_normal', 1) ->count(); $list[$k]['count2'] = $c2 ? $c2 : 0; $taskCount = Db::name('patrol_task_user') ->alias('a') ->join('patrol_task b','a.patrol_task_id=b.id') ->where('a.user_id',$v['user_id']) ->where('b.org_id',$this->orgId) ->where('b.status','<>',6) ->where('b.start_time','>=',$start1) ->where('b.end_time','<=',$end1) ->where('b.patrol_mode','=',$type) ->count(); $ywcCount = Db::name('patrol_task_user') ->alias('a') ->join('patrol_task b','a.patrol_task_id=b.id') ->where('a.user_id',$v['user_id']) ->where('b.org_id',$this->orgId) ->where('b.status','=',2) ->where('b.start_time','>=',$start1) ->where('b.end_time','<=',$end1) ->where('b.patrol_mode','=',$type) ->count(); $wcl = $taskCount>0?round($ywcCount/$taskCount,2)*100:0; $wcl = $wcl.'%'; $list[$k]['wcl'] = $wcl; $list[$k]['count3'] = $ywcCount; $list[$k]['count4'] = $taskCount; } return $list; } public function workList(){ $user_id = input('user_id','','trim'); if($user_id!=''){ $map[] = ['user_id','=',$user_id]; } $is_normal = input('is_normal','','trim'); if($is_normal!==''){ $map[] = ['is_normal','=',$is_normal]; } $type = input('type','','trim'); if($type != ''){ $map[] = ['patrol_mode','=',$type]; } $start = input('start',date('Y-m-d', strtotime('' . date('Y-m-d') . ' -1 week'))); if($start != ''){ $map[] = ['create_time','>=',$start.' 00:00:00']; } $end = input('end', date('Y-m-d')); if($end != ''){ $map[] = ['create_time','<=',$end.' 23:59:59']; } if(request()->isAjax()){ //分页参数 $length = input('rows',10,'intval'); //每页条数 $page = input('page',1,'intval'); //第几页 $start = ($page - 1) * $length; //分页开始位置 //排序 $sortRow = input('sidx','sort','trim'); //排序列 $sort = input('sord','asc','trim'); //排序方式 $order = $sortRow.' '.$sort.' ,id desc'; $map[] = ['org_id','=',$this->orgId]; $map= empty($map) ? true: $map; //数据查询 $lists = Db::name('patrol_record') ->where($map) ->limit($start,$length) ->order($order) ->select(); foreach ($lists as $k=>$v){ $lists[$k]['address_title'] = Db::name('address') ->where('id', $v['patrol_addr_id']) ->value('title'); $lists[$k]['task_user'] = Db::name('user') ->where('id', $v['user_id'])->value('real_name'); $lists[$k]['task_title'] = Db::name('patrol_task') ->where('id', $v['patrol_task_id']) ->value('title'); } //数据返回 $totalCount = Db::name('patrol_record')->where($map)->count(); $totalPage = ceil($totalCount/$length); $result['page'] = $page; $result['total'] = $totalPage; $result['records'] = $totalCount; $result['rows'] = $lists; return json($result); }else{ $type = input('type',1); $t = Db::name('patrol_mode') ->where('id',$type) ->value('name'); $this->assign('is_normal',$is_normal); $this->assign('type',$type); $this->assign('start',$start); $this->assign('end',$end); $this->assign('user_id',$user_id); $this->assign('meta_title',$t.'人员工作量统计'); return $this->fetch(); } } public function workList1(){ $user_id = input('user_id','','trim'); if($user_id!=''){ $map[] = ['a.user_id','=',$user_id]; } $is_normal = input('is_normal','','trim'); if($is_normal!==''){ if($is_normal==1){//总数 $map[] = ['b.status','<>',6]; } if($is_normal==2){//已完成 $map[] = ['b.status','=',2]; } } $type = input('type','','trim'); if($type != ''){ $map[] = ['b.patrol_mode','=',$type]; } $start = input('start',date('Y-m-d', strtotime('' . date('Y-m-d') . ' -1 week'))); if($start != ''){ $map[] = ['b.start_time','>=',$start.' 00:00:00']; } $end = input('end', date('Y-m-d')); if($end != ''){ $map[] = ['b.end_time','<=',$end.' 23:59:59']; } if(request()->isAjax()){ //分页参数 $length = input('rows',10,'intval'); //每页条数 $page = input('page',1,'intval'); //第几页 $start = ($page - 1) * $length; //分页开始位置 $map[] = ['b.org_id','=',$this->orgId]; $map= empty($map) ? true: $map; //数据查询 $lists = Db::name('patrol_task_user') ->alias('a') ->join('patrol_task b','a.patrol_task_id=b.id') ->field('b.*,a.user_id') ->where($map) ->limit($start,$length) ->order('b.id','desc') ->select(); foreach ($lists as $k=>$v){ $lists[$k]['task_user'] = Db::name('user') ->where('id', $v['user_id'])->value('real_name'); } //数据返回 $totalCount = Db::name('patrol_task_user') ->alias('a') ->join('patrol_task b','a.patrol_task_id=b.id')->where($map)->count(); $totalPage = ceil($totalCount/$length); $result['page'] = $page; $result['total'] = $totalPage; $result['records'] = $totalCount; $result['rows'] = $lists; return json($result); }else{ $type = input('type',1); $t = Db::name('patrol_mode') ->where('id',$type) ->value('name'); $this->assign('is_normal',$is_normal); $this->assign('type',$type); $this->assign('start',$start); $this->assign('end',$end); $this->assign('user_id',$user_id); $this->assign('meta_title',$t.'人员工作量统计'); return $this->fetch(); } } public function workExport() { $cur = date('Y-m-d'); $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week'))); $end = input('end', date('Y-m-d')); $start1 = $start . ' 00:00:00'; $end1 = $end . ' 23:59:59'; $type = input('type', 1); $ret = $this->workData($start1, $end1, $type); include_once env('root_path') . '/extend/phpexcel/Classes/PHPExcel.php'; //实例化PHPExcel类 $objPHPExcel = new \PHPExcel(); //激活当前的sheet表 $objPHPExcel->setActiveSheetIndex(0); //设置表格头(即excel表格的第一行) $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'ID') ->setCellValue('B1', '姓名') ->setCellValue('C1', '工作记录(总数)') ->setCellValue('D1', '工作记录(正常)') ->setCellValue('E1', '工作记录(异常)') ->setCellValue('F1', '完成率') ->setCellValue('G1', '需要完成') ->setCellValue('H1', '已完成'); // 设置表格头水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置列水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置单元格宽度 $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20); //循环刚取出来的数组,将数据逐一添加到excel表格。 for ($i = 0; $i < count($ret); $i++) { $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['id']); $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['title']); $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $ret[$i]['count']); $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $ret[$i]['count1']); $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $ret[$i]['count2']); $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $ret[$i]['wcl']); $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $ret[$i]['count4']); $objPHPExcel->getActiveSheet()->setCellValue('H' . ($i + 2), $ret[$i]['count3']); } $n = Db::name('patrol_mode') ->where('id', $type) ->value('name'); //设置保存的Excel表格名称 $filename = $n . '人员工作量统计_' . date('YmdHis', time()) . '.xls'; //设置当前激活的sheet表格名称 $objPHPExcel->getActiveSheet()->setTitle($n . '人员工作量统计'); //设置浏览器窗口下载表格 ob_end_clean(); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="' . $filename); //生成excel文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //下载文件在浏览器窗口 return $objWriter->save('php://output'); } public function patrolList(){ $patrol_addr_id = input('patrol_addr_id','','trim'); if($patrol_addr_id!=''){ $map[] = ['patrol_addr_id','=',$patrol_addr_id]; } $is_normal = input('is_normal','','trim'); if($is_normal!==''){ $map[] = ['is_normal','=',$is_normal]; } $type = input('type','','trim'); if($type != ''){ $map[] = ['patrol_mode','=',$type]; } $start = input('start',date('Y-m-d', strtotime('' . date('Y-m-d') . ' -1 week'))); if($start != ''){ $map[] = ['create_time','>=',$start.' 00:00:00']; } $end = input('end', date('Y-m-d')); if($end != ''){ $map[] = ['create_time','<=',$end.' 23:59:59']; } if(request()->isAjax()){ //分页参数 $length = input('rows',10,'intval'); //每页条数 $page = input('page',1,'intval'); //第几页 $start = ($page - 1) * $length; //分页开始位置 //排序 $sortRow = input('sidx','sort','trim'); //排序列 $sort = input('sord','asc','trim'); //排序方式 $order = $sortRow.' '.$sort.' ,id desc'; $map[] = ['org_id','=',$this->orgId]; $map= empty($map) ? true: $map; //数据查询 $lists = Db::name('patrol_record') ->where($map) ->limit($start,$length) ->order($order) ->select(); foreach ($lists as $k=>$v){ $lists[$k]['address_title'] = Db::name('address') ->where('id', $v['patrol_addr_id']) ->value('title'); $lists[$k]['task_user'] = Db::name('user') ->where('id', $v['user_id'])->value('real_name'); $lists[$k]['task_title'] = Db::name('patrol_task') ->where('id', $v['patrol_task_id']) ->value('title'); } //数据返回 $totalCount = Db::name('patrol_record')->where($map)->count(); $totalPage = ceil($totalCount/$length); $result['page'] = $page; $result['total'] = $totalPage; $result['records'] = $totalCount; $result['rows'] = $lists; return json($result); }else{ $type = input('type',1); $t = Db::name('patrol_mode') ->where('id',$type) ->value('name'); $this->assign('is_normal',$is_normal); $this->assign('type',$type); $this->assign('start',$start); $this->assign('end',$end); $this->assign('patrol_addr_id',$patrol_addr_id); $this->assign('meta_title',$t.'检查记录'); return $this->fetch(); } } public function orgList(){ $sday = input('sday',date('Y-m-d',strtotime('-7 day'))); $day = input('day',date('Y-m-d')); $patrolMode = input('patrolMode',2); $title = input('title','','trim'); $lists = $this->orgListData($sday,$day,$patrolMode,$title); $this->assign('lists',$lists); $modeList = Db::name('patrol_mode')->select(); foreach ($modeList as $k=>$v){ if($v['id'] == 1){ $modeList[$k]['name'] = '安保巡更'; }elseif($v['id'] == 2){ $modeList[$k]['name'] = '保洁巡视'; }elseif($v['id'] == 3){ $modeList[$k]['name'] = '总部巡查'; }elseif($v['id'] == 4){ $modeList[$k]['name'] = '设备巡检'; } } $this->assign('modeList',$modeList); $this->assign('patrolMode',$patrolMode); $this->assign('title',$title); $this->assign('day',$day); $this->assign('sday',$sday); return $this->fetch(); } public function orgListData($sday,$day,$patrolMode,$title){ if($title !=''){ $map[] = ['name','like','%'.$title.'%']; } $map[] = ['del','=',0]; $lists = Db::name('org') ->where('type',1) ->where('enable',1) ->where($map) ->where('parent_id',1) ->field('id,name') ->select(); $data = []; foreach ($lists as $k=>$v){ $orgs = model('org')->getAllNextId($v['id']); $orgList = Db::name('org') ->where('del',0) ->where('enable',1) ->where('type',2) ->whereIn('id',$orgs) ->field('id,name') ->select(); foreach ($orgList as $kk=>$vv){ $count = Db::name('patrol_task') ->where('org_id',$vv['id']) ->where('create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('del',0) ->where('patrol_mode',$patrolMode) ->count(); $status0 = Db::name('patrol_task') ->where('org_id',$vv['id']) ->where('create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('del',0) ->where('patrol_mode',$patrolMode) ->where('status',0) ->count(); $status1 = Db::name('patrol_task') ->where('org_id',$vv['id']) ->where('create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('del',0) ->where('patrol_mode',$patrolMode) ->where('status',1) ->count(); $status2 = Db::name('patrol_task') ->where('org_id',$vv['id']) ->where('create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('del',0) ->where('patrol_mode',$patrolMode) ->where('status',2) ->count(); $status3 = Db::name('patrol_task') ->where('org_id',$vv['id']) ->where('create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('del',0) ->where('patrol_mode',$patrolMode) ->where('status','=',3) ->count(); $prInfo = Db::name('patrol_record') ->alias('pr') ->join('patrol_task pt','pt.id=pr.patrol_task_id') ->join('user u','u.id=pr.user_id') ->where('pt.org_id',$vv['id']) ->where('pt.create_yyyymmdd','>=',date('Ymd',strtotime($sday))) ->where('pt.create_yyyymmdd','<=',date('Ymd',strtotime($day))) ->where('pt.del',0) ->where('pt.patrol_mode',$patrolMode) ->where('pt.status','=',2) ->field('u.real_name,pr.create_time') ->order('pr.id desc') ->find(); $endTaskTime = $prInfo?$prInfo['create_time']:''; $user = $prInfo?$prInfo['real_name'] :''; $data[] = [ 'area_name'=> $kk==0 ?$v['name']:'', 'org_name'=>$vv['name'], 'org_num'=>count($orgList), 'count'=>$count, 'status0'=>$status0, 'status1'=>$status1, 'status2'=>$status2, 'status3'=>$status3, 'mode'=>$patrolMode, 'sday'=>$sday, 'day'=>$day, 'end_task_time'=>$endTaskTime, 'user_name'=>$user, 'org_id'=>$vv['id'], ]; } } return $data; } public function orgListExport(){ $sday = input('sday',date('Y-m-d',strtotime('-7 day'))); $day = input('day',date('Y-m-d')); $patrolMode = input('patrolMode',1); $title = input('title','','trim'); $lists = $this->orgListData($sday,$day,$patrolMode,$title); set_time_limit(0); ini_set("memory_limit", "1024M"); $n = Db::name('patrol_mode') ->where('id', $patrolMode) ->value('name'); $title = $day.'-'. $n.'各项目统计'; header("Content-type: application/vnd.ms-excel"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=".$title.".xls"); header('Expires:0'); header('Pragma:public'); $res = ''; $res.='
区域名称 | '; $res.='项目名称 | '; $res.='任务数 | '; $res.='未执行 | '; $res.='执行中 | '; $res.='已完成 | '; $res.='未完成 | '; $res.='最近任务完成时间 | '; $res.='完成人员 | '; $res.='
---|---|---|---|---|---|---|---|---|
'.$v['area_name'].' | '; } $res.=''.$v['org_name'].' | '; $res.=''.$v['count'].' | '; $res.=''.$v['status0'].' | '; $res.=''.$v['status1'].' | '; $res.=''.$v['status2'].' | '; $res.=''.$v['status3'].' | '; $res.=''.$v['end_task_time'].' | '; $res.=''.$v['user_name'].' | '; $res.='