AdminInspectController.php 8.7 KB
<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Powerless < wzxaini9@gmail.com>
// +----------------------------------------------------------------------

namespace app\portal\controller;

use cmf\controller\AdminBaseController;
use think\Db;
use think\db\Query;

//消防日检列表
class AdminInspectController extends AdminBaseController
{

    //列表页,显示巡检项目,巡检点个数,巡检日期
    public function index(){
        $param = $this->request->param();
        //查询项目id,项目巡检点个数
        $res_point = Db::name('point')
            ->field('p_id,count(id) count')
            ->group('p_id')
            ->select()
            ->toArray();
        $res_ins = Db::name('inspect')
            ->alias('i')
            ->join('project p','i.project_id = p.id','LEFT')
            ->where(function (Query $query) {
                $param = $this->request->param();
                //查询登录乙方账号的所有项目
                $common = new AdminCommonController();
                $p_ids = $common->getProjectByCompanyB();
                if(!empty($p_ids)){
                    $query->whereIn('i.project_id',$p_ids);
                }

                if (!empty($param['name'])) {
                    $keyword = $param['name'];
                    $query->where('p.name', 'like', "%$keyword%");
                }
                $startTime = empty($param['start_time']) ? 0 : strtotime($param['start_time']);
                $endTime   = empty($param['end_time']) ? 0 : strtotime($param['end_time'])+86400;
                if (!empty($startTime)) {
                    $query->where('i.create_time', '>=', $startTime);
                }
                if (!empty($endTime)) {
                    $query->where('i.create_time', '<=', $endTime);
                }

            })
            ->field('i.id,i.create_time,i.project_id,p.name project_name')
            ->group("i.project_id,DATE_FORMAT(FROM_UNIXTIME(i.create_time),'%Y-%m-%d')")
            ->order('i.id desc')
            ->paginate(10,false,['query'=>request()->param()]);

        $data = $res_ins->toArray();
        $data = $data['data'];
        foreach($data as &$value){
            foreach($res_point as $p_value){
                if($value['project_id'] == $p_value['p_id']){
                    $value['count'] = $p_value['count'];
                }
            }
        }
        $page = $res_ins->render();
        // 渲染模板输出
        $this->assign('start_time', isset($param['start_time']) ? $param['start_time'] : '');
        $this->assign('end_time', isset($param['end_time']) ? $param['end_time'] : '');
        $this->assign('list',$data);
        $this->assign('page',$page);
        return $this->fetch();
    }

    //编辑页面
    public function edit(){
        $project_id = $this->request->param('project_id');
        $create_time = $this->request->param('create_time');

        $common = new AdminCommonController();
        $time = $common->getDate($create_time);
        //查询巡检项目名称
        $project = $common->getProject(['id'=>$project_id],'id,name project_name');
        $arr['project_name'] = $project['project_name'];

        //查询所有巡检点
        $point = Db::name('point')
            ->where('p_id',$project_id)
            ->select()
            ->toArray();

        //查找以巡检的数据
        $inspect = Db::name('inspect')
            ->alias('i')
            ->join('user u','i.uid = u.id')
            ->where(['i.project_id'=>$project_id])
            ->whereTime('i.create_time', $time)
            ->field('u.user_login,i.id,i.status,i.point_id,i.images')
            ->select()
            ->toArray();
        //巡检名称,巡检人员,巡检图片
        $is_finish = 0;
        foreach ($point as &$value){
            $value['status'] = 2;
            $value['user_login'] = '';
            $value['images'] = '';
            foreach ($inspect as $ins_value){
                if($value['id'] == $ins_value['point_id']){
                    $value['status'] = $ins_value['status'];
                    $value['user_login'] = $ins_value['user_login'];
                    $value['images'] = $common->absolutionUrl($ins_value['images']);
                }
            }
            if($value['status'] == 2){
                $is_finish ++;
            }
        }
        $arr['is_finish'] = $is_finish;
        $arr['point'] = $point;
        $arr['status'] = $common->getStatus();
        $this->assign('post',$arr);
        return $this->fetch();
    }

    //按日导出巡检列表
    public function exportInspectBDay(){
        //根据时间查询
        $param = $this->request->param();
        //获取标识
        $mark = $this->request->param('mark');

        $adminCommon = new AdminCommonController();
        $adminExcel = new AdminExcelDataController();
        $res_ins = $adminCommon->inspectList($param);

        $arr_url = [];
        $arr_time = [];
        foreach($res_ins as $key=>$value){
            $arr = [];
            //甲乙方logo,名称,报表名称
            $company = $adminCommon->getCompanyName($value['project_id'],'日检');
            if($company){
                $arr['a_company'] = $company['a_company'];
                $arr['b_company'] = $company['b_company'];
                $arr['title'] = $company['title'];
            }

            //查找参与人员
            $ins_data = [
                'project_id'=>$value['project_id'],
                'create_time'=>$value['create_time']
            ];
            $user_login = $adminCommon->getUserNameByProjectId($ins_data);
            $arr['group_name'] = trim(implode(array_column($user_login,'user_login'),'、'),'、');

            //巡检日期
            $arr['create_time'] = date('Y/m/d',$value['create_time']);
            $arr['time'] = date('Y-m-d',$value['create_time']).'('.$value['id'].')';
            //查询巡检点状态
            $time = date('Y-m-d',$value['create_time']);
            $time1 = date('Y-m-d',$value['create_time']+86400);

            $status = $adminCommon->insStatus(['project_id'=>$value['project_id'],'status'=>0],$time,$time1);
            $arr['inspect_status'] = $status;

            //查询所有巡检点
            $point = $adminCommon->getPoint(['project_id'=>$value['project_id']],$time,$time1);
            $arr['point'] = $point;
            //获取文件路径
            $url = $adminExcel->inspectExcelData($arr);
            $month = date('Y-m',$value['create_time']);
            $year = date('Y',$value['create_time']);
            //excel名称
            $arr_table = $arr['time'].'报表.xls';

            if($mark == 'day'){
                //按日导出
                $arr_url[$key] = $url;
                $arr_time[$key] = $arr_table;

            }else if($mark == 'month'){
                //按月导出
                $arr_url[$month][$key] = $url;
                $arr_time[$month][$key] = $arr_table;

            }else{
                //按年导出
                $arr_url[$year][$month][$key] = $url;
                $arr_time[$year][$month][$key] = $arr_table;

            }
        }
        if($mark == 'day'){
            //按日
            $xlsName = '每日日检报表';
        }else if($mark == 'month'){
            //按月
            $xlsName = '每月日检报表';
        }else{
            //按年
            $xlsName = '每年日检报表';
        }
        //解决zip中文文件名
        $xlsName = $adminCommon->iconv_to_utf8($xlsName);
        $filename = ROOT_PATH . 'public/upload/export/' . $xlsName . '.zip';

        if($mark == 'day'){
            //按日
            $adminCommon->zip($arr_url,$filename,$arr_time);
        }else if($mark == 'month'){
            //按月
            $adminCommon->zip($arr_url,$filename,$arr_time,'month',$xlsName);
        }else{
            //按年
            $adminCommon->zip($arr_url,$filename,$arr_time,'year',$xlsName);
        }

    }

    //检查是否有数据
    public function checkData(){
        $param = $this->request->param();
        $adminCommon = new AdminCommonController();
        $res_ins = $adminCommon->inspectList($param);
        if($res_ins){
            $adminCommon->apiResponse(1);
        }else{
            $adminCommon->apiResponse(0,'暂无数据');
        }
    }
}