<?php
namespace app\api\controller\screen;

use app\common\model\User;
use app\hander\HelpHander;
use app\api\controller\screen\Index;

use think\Db;

class Patrol extends Index
{

    public function patrolNums(){
        $mode = input('mode');
        if(!in_array($mode,[1,2,3,4])){
            HelpHander::error('参数错误');
        }
        if($mode == 1){
            $c = 3;
        }elseif ($mode == 2){
            $c = 4;
        }elseif ($mode == 3){
            $c = 5;
        }elseif ($mode == 4){
            $c = 6;
        }
        $addr = Db::name('address')
            ->where('del',0)
            ->where('enable',1)
            ->where('org_id',$this->orgId)
            ->where('','exp',Db::raw("FIND_IN_SET($c,types)"))
            ->count('id');

        $user = Db::name('patrol_task_user')
            ->alias('ptu')
            ->join('patrol_task pt','pt.id=ptu.patrol_task_id')
            ->join('user u','u.id=ptu.user_id')
            ->where('pt.del',0)
            ->where('pt.org_id',$this->orgId)
            ->where('pt.patrol_mode',$mode)
            ->where('pt.status','in',[0,1,2,3])
            ->where('u.del',0)
            ->group('ptu.user_id')
            ->count();


        $task = Db::name('patrol_task')->where('org_id',$this->orgId)->where('del',0)->where('patrol_mode',$mode)->count();
        $data = [
           'addrCount'=>$addr,
           'userCount'=>$user,
           'taskCount'=>$task,
        ];
        HelpHander::success($data);
    }

    //最新的一条巡更内容
    public function patrolPath(){
        $mode = input('mode');
        if(!in_array($mode,[1,2,3,4])){
            HelpHander::error('参数错误');
        }
        $record = Db::name('patrol_record')
            ->alias('pr')
            ->field('pr.*')
            ->join('patrol_task pt','pt.id=pr.patrol_task_id')
            ->where('pr.org_id',$this->orgId)
            ->where('pt.patrol_mode',$mode)
            ->where('pt.del',0)
            ->where('pt.status',1)
            ->order('pr.id desc')
            ->find();
        if(isset($record) && !empty($record)){
            $record['addr'] = Db::name('address')->where('id',$record['patrol_addr_id'])->value('title');

            $record['user'] = Db::name('user')->where('id',$record['user_id'])->value('real_name');

            $record['task'] = Db::name('patrol_task')->where('id',$record['patrol_task_id'])->value('title');

        }

        $addrList = Db::name('patrol_task_addr')
            ->alias('pta')
            ->field('a.id,a.title')
            ->join('patrol_addr_form paf','paf.id=pta.patrol_form_id')
            ->join('address a','a.id=paf.patrol_addr_id')
            ->where('pta.patrol_task_id',$record['patrol_task_id'])
            ->where('a.del',0)
            ->select();

        foreach ($addrList as $k=>$v){
            $addrList[$k]['nums'] = Db::name('patrol_record')
                ->where('org_id',$this->orgId)
                ->where('patrol_addr_id',$v['id'])
                ->count();
            $active = 0;
            if($v['id'] == $record['patrol_addr_id']){
                $active = 1;
            }
            $addrList[$k]['active'] = $active;
            $times = Db::name('patrol_record')
                ->field('create_time')
                ->where('org_id',$this->orgId)
                ->where('patrol_addr_id',$v['id'])
                ->select();
            $eDate = '无';
            foreach ($times as $kk=>$vv){
                $date = isset($times[1]['create_time'])&&!empty($times[1]['create_time'])?$times[1]['create_time']:'';
                $eDate = !empty($date)?date('H:i',strtotime($date)):'无';
            }
            $addrList[$k]['time'] = $eDate;
         }
        $data = [
            'record' => $record,
            'addrList' => $addrList,
        ];

        HelpHander::success($data);
    }

    //实时信息总览
    public function patrolRealTime(){
        $mode = input('mode');
        if(!in_array($mode,[1,2,3,4])){
            HelpHander::error('参数错误');
        }
        $lists = Db::name('patrol_record')
            ->where('patrol_mode',$mode)
            ->where('org_id',$this->orgId)
            ->order('id desc')
            ->limit(20)
            ->select();

        $data = [];
        foreach ($lists as $k=>$v){
            $addrForm = Db::name('patrol_addr_form')
                ->alias('a')
                ->join('patrol_task_addr b','b.patrol_form_id = a.id')
                ->where('b.id',$v['patrol_addr_form_id'])
                ->value('a.title');
            $mode = Db::name('patrol_mode')
                ->where('id',$v['patrol_mode'])
                ->value('name');
            $user = Db::name('user')->where('id',$v['user_id'])->value('real_name');
            $is_normal = '无异常' ;
//            if($v['is_normal'] == 1){
//                $is_normal = '有异常' ;
//            }
            $isno = 1;
            $checkJson = json_decode($v['check_json'],true);
            foreach ($checkJson as $kk=>$vv) {
                if (isset($vv['forms'])) {
                    foreach ($vv['forms'] as $kkk => $vvv) {
                        if (isset($vvv['status']) && $vvv['status'] == 0 && $isno == 1) {
                            $is_normal = '有异常';
                            $isno = 0;
                            break;
                        }
                    }
                }
            }
            $time = date('Y-m-d H:i',strtotime($v['create_time']));
            $content = '员工-'.$user.'完成'.$addrForm.$mode.','.$is_normal;

            $data[$k][] = $time;
            $data[$k][] = $content;
        }
        HelpHander::success($data);
    }
    //异常地点数据总览
    public function patrolNormalAddr(){
        $mode = input('mode');
        if(!in_array($mode,[1,2,3,4])){
            HelpHander::error('参数错误');
        }
        $lists = Db::name('patrol_record')
            ->where('org_id',$this->orgId)
           // ->where('is_normal',1)
            ->where('patrol_mode',$mode)
            ->order('id desc')
            ->limit(20)
            ->select();
        $data = [];
        foreach ($lists as $k=>$v){
            $addr = Db::name('address')->where('id',$v['patrol_addr_id'])
                ->value('title');

            $user = Db::name('user')->where('id',$v['user_id'])->value('real_name');
            $is_normal = '正常' ;
//            if($v['is_normal'] == 1){
//                $is_normal = '异常' ;
//            }
            $isno = 1;
            $checkJson = json_decode($v['check_json'],true);
            foreach ($checkJson as $kk=>$vv) {
                if (isset($vv['forms'])) {
                    foreach ($vv['forms'] as $kkk => $vvv) {
                        if (isset($vvv['status']) && $vvv['status'] == 0 && $isno == 1) {
                            $is_normal = '异常';
                            $isno = 0;
                            break;
                        }
                    }
                }
            }
            $data[$k][] = $addr;
            $data[$k][] = $user;
            $data[$k][] = $v['create_time'];
            $data[$k][] = $is_normal;
            $data[$k][] = $v['content'];
        }
        HelpHander::success($data);
    }

    //获取今天最新一条巡更记录
    public function newestRecord(){
        $info = Db::name('patrol_record')
            ->alias('a')
            ->join('patrol_task t','a.patrol_task_id = t.id')
            ->join('address b','a.patrol_addr_id = b.id')
            ->join('user c','a.user_id = c.id')
            ->where('a.create_yyyymmdd',date('Ymd'))
            ->where('a.org_id',$this->orgId)
            ->field('a.images,a.create_time,b.title as address,c.real_name as name,t.title as content')
            ->order('a.id desc')
            ->find();

        $img = $info['images']?(explode(',',$info['images']))[0]:'';
        if(!$info){
            HelpHander::error('错误');
        }
        $info['img'] = $img;
        HelpHander::success($info);
    }

    // 可视化轨迹展示
    public function patrolRecord(){
        $lists = Db::name('patrol_record')
            ->alias('a')
            ->join('patrol_task t','a.patrol_task_id = t.id')
            ->join('address b','a.patrol_addr_id = b.id')
            ->join('user c','a.user_id = c.id')
//            ->where('a.create_yyyymmdd',date('Ymd'))
            ->where('a.org_id',$this->orgId)
            ->field('a.images,a.create_time,b.title as address,c.real_name as name,a.content')
            ->order('a.id desc')
            ->limit(20)
            ->select();
        $lists = $lists?$lists:[];
        $imgs = [];
        $record = [];
        foreach ($lists as $k=>$v){
            $img = $v['images']?(explode(',',$v['images']))[0]:'';
            if($img && count($imgs) < 3){
                $imgs[] = [
                    'title' => $v['address'],
                    'img' => $img
                ];
            }

            $record[] = [$v['address'],$v['create_time'],$v['name'],$v['content']];
        }
        HelpHander::success(['imgs' => $imgs,'lists' => $record]);
    }

    // 巡更任务数据统计 当天及30天异常数量
    public function addrRecord(){
        //先取30内的巡更地点
        $curDay = date('Ymd');
        $start = date('Ymd',strtotime(date('Y-m-d')) - 29*24*60*60);
        $lists = Db::name('patrol_record')
            ->alias('pr')
            ->join('address a','a.id = pr.patrol_addr_id')
            ->where('pr.org_id',$this->orgId)
            ->where('pr.patrol_mode',1)
            ->where('pr.create_yyyymmdd','<=',$curDay)
            ->where('pr.create_yyyymmdd','>=',$start)
            ->field('a.id,a.title')
            ->group('pr.patrol_addr_id')
            ->distinct(true)
            ->select();
        $titles = [];
        $y1 = [];
        $y2 = [];
        foreach ($lists as $k=>$v){
            $titles[] = $v['title'];
            $count1 = Db::name('patrol_record')
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',1)
                ->where('create_yyyymmdd','=',$curDay)
                ->count();
            $y1[] = $count1;

            $count2 = Db::name('patrol_record')
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',1)
                ->where('is_normal',1)
                ->where('create_yyyymmdd','<=',$curDay)
                ->where('create_yyyymmdd','>=',$start)
                ->count();
            $y2[] = $count2;
        }
        HelpHander::success(['titles' => $titles,'y1' => $y1,'y2' => $y2]);
    }

    //巡*图片
    public function patrolImg(){
        $data = Db::name('patrol_record')
            ->field('images')
            ->where('images','<>','')
            ->where('org_id',$this->orgId)
            ->limit(30)
            ->order('id desc')
            ->select();

        foreach ($data as $k=>$v){
            $img = explode(',',$v['images']);
            if($img){
                $data[$k]['images'] = $img[0];
            }
        }
        if(count($data)>3){
            $key = array_rand($data,4);
            $list[] = $data[$key[0]];
            $list[] = $data[$key[1]];
            $list[] = $data[$key[2]];
            $list[] = $data[$key[3]];
        }
        $eList = isset($list)?$list:$data;
        HelpHander::success($eList);
    }
    //
    public function patrolRecordCount(){
        $dlist = [
            date('Y-m-d',strtotime('-6 days')),
            date('Y-m-d',strtotime('-5 days')),
            date('Y-m-d',strtotime('-4 days')),
            date('Y-m-d',strtotime('-3 days')),
            date('Y-m-d',strtotime('-2 days')),
            date('Y-m-d',strtotime('-1 days')),
            date('Y-m-d'),
        ];
        $date = [];
        $yCount = [];
        $y2Count = [];
        $y3Count = [];
        $y4Count = [];
        foreach ($dlist as $k=>$v){
            $tt = date('Ymd',strtotime($v));
            $count = Db::name('patrol_record')
                ->where('create_yyyymmdd',$tt)
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',4)
                ->count();
            $count2 =Db::name('patrol_record')
                ->where('create_yyyymmdd',$tt)
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',2)
                ->count();
            $count3 =Db::name('patrol_record')
                ->where('create_yyyymmdd',$tt)
                ->where('patrol_mode',3)
                ->where('org_id',$this->orgId)
                ->count();
            $count4 =Db::name('patrol_record')
                ->where('create_yyyymmdd',$tt)
                ->where('patrol_mode',1)
                ->count();
            $date[] =  date('m-d',strtotime($v));
            $yCount[] = $count;
            $y2Count[] = $count2;
            $y3Count[] = $count3;
            $y4Count[] = $count4;
        }
        $data = [
            'date'=>$date,
            'count1'=>$yCount,
            'count2'=>$y2Count,
            'count3'=>$y3Count,
            'count4'=>$y4Count,
        ];
        HelpHander::success($data);
    }

    public function countData(){

        $task = Db::name('patrol_task')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('patrol_mode',2)
            ->where('create_yyyymmdd',date('Ymd'))
            ->count();

        $task1 = Db::name('patrol_task')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('patrol_mode',2)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',2)
            ->count();

        $task2 = Db::name('patrol_task')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('patrol_mode',2)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',0)
            ->count();
        $task3 = Db::name('patrol_task')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('patrol_mode',2)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',1)
            ->count();
        $bl = '0';
        if($task > 0 ){
            $bl = round($task1/$task*100,1);
        }
        //$addrCount = model('Address')->getListByTypeCount(4,$this->orgId);

        $addrCount = Db::name('patrol_task')
            ->alias('pr')
            ->leftJoin('patrol_task_addr b','pr.id=b.patrol_task_id')
            ->where('pr.org_id',$this->orgId)
            ->where('pr.del',0)
            ->where('pr.patrol_mode',2)
            ->where('pr.create_yyyymmdd',date('Ymd'))
            ->group('b.address_id')
            ->count();
        $fg = Db::name('patrol_record')
            ->alias('pr')
            ->join('address a','a.id=pr.patrol_addr_id')
            ->where('pr.org_id',$this->orgId)
            ->where('a.del',0)
            ->where('a.enable',1)
            ->where('pr.patrol_mode',2)
            ->where('pr.create_yyyymmdd',date('Ymd'))
            ->group('pr.patrol_addr_id')
            ->count();
        $fgbl = '0';
        if($addrCount > 0 ){
            $fgbl  = round($fg/$addrCount*100,1);
        }

        $data = [
            'task'=>$task,
            'task1'=>$task1,
            'task2'=>$task2,
            'task3'=>$task3,
            'bl'=>$bl,
            'addr'=>$addrCount,
            'addr1'=>$fg,
            'addrbl'=>$fgbl,
        ];

        HelpHander::success($data);
    }

    public function bjxsMonthData(){

        $mode = input('mode',2);

        $year = date('Y');

        $month = date('m');

        $t = date('t',time());

        $x = $dayList = [];

        for ($i=1;$i<=$t;$i++){
            $d = $i;
            if($i < 10){
                $d =  '0'.$i;
            }
            $dayList[] = $year.$month.$d;
            $x[] = $month.'-'.$d;
        }

        $y = $y1 = $y2 = [];
        foreach ($dayList as $k=>$v){

            $count = Db::name('patrol_task')
                ->where('del',0)
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',$mode)
                ->where('create_yyyymmdd',$v)
                ->count();

            $wc = Db::name('patrol_task')
                ->where('del',0)
                ->where('org_id',$this->orgId)
                ->where('patrol_mode',$mode)
                ->where('create_yyyymmdd',$v)
                ->where('status',2)
                ->count();

            $bl =  0 ;
            if($count > 0){
                $bl = round($wc/$count*100,1);
            }
            $y[] = $bl;
            $y1[] = $count;
            $y2[] = $wc;
        }

        HelpHander::success(['x'=>$x,'y'=>$y,'y1'=>$y1,'y2'=>$y2]);

    }

    public function bjxsTaskRecord(){

        $mode = input('mode',2);

        $record = Db::name('patrol_record')
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->where('create_yyyymmdd',date('Ymd'))
            ->order('id desc')
            ->limit(20)
            ->select();

        $rList = [];

        foreach ($record as $k=>$v){
            $task = Db::name('patrol_task')->where('id',$v['patrol_task_id'])->value('title');
            $addr = Db::name('address')->where('id',$v['patrol_addr_id'])->value('title');

            $status = $v['is_normal'] == 0 ? '正常':'异常';
            $user = Db::name('user')->where('id',$v['user_id'])->value('real_name');
            $time = date('H:i',strtotime($v['create_time']));
            $rList[] =[$v['id'],$task,$addr,$status,$user,$time];
        }


        $task = Db::name('patrol_task')
            ->where('del',0)
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status','in',[0,1,2,3])
            ->order('id desc')
            ->limit(20)
            ->select();
        $tList = [];
        foreach ($task as $k=>$v){
            $users = Db::name('patrol_task_user')
                ->alias('ptu')
                ->join('user u','u.id=ptu.user_id')
                ->where('ptu.patrol_task_id',$v['id'])
                ->where('u.del',0)
                ->column('u.real_name');
            $userNames = $users ? implode(',',$users):'';
            $st = date('H:i',strtotime($v['start_time']));
            $et = date('H:i',strtotime($v['end_time']));
            $statusTxt = $remark = '';
            if($v['status'] == 0){
                $statusTxt = '未执行';
                $etime = strtotime($v['end_time']);
                $time = time();
                $xctime = $etime - $time;
                $fz = round($xctime/60);
//                if($fz > 0 && $fz < 10){
//                    $remark =  '<span style="color:#FF3939 ">'.$fz.'分钟后超时</span>';
//                }
//                if($fz > 10 && $fz < 30){
//                    $remark =  '<span style="color:#FF9600 ">'.$fz.'分钟后超时</span>';
//                }
//                if($fz > 30){
//                    $remark =  '<span style="color:#FFFC1E ">'.$fz.'分钟后超时</span>';
//                }
//                if($fz <0){
//                    $remark =  '<span style="color: red">已超时</span>';
//                }

            }elseif ($v['status'] == 1){
                $statusTxt = '执行中';
            }elseif ($v['status'] == 2){
                $statusTxt = '已完成';
            }elseif ($v['status'] == 3){
                $statusTxt = '未完成';
            }
            $tList[] = [$v['id'],$v['title'],$userNames,$st,$et,$statusTxt];
        }

        $wzz = Db::name('patrol_task')
            ->where('del',0)
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',0)
            ->count();

        $zxz = Db::name('patrol_task')
            ->where('del',0)
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',1)
            ->count();

        $wwc = Db::name('patrol_task')
            ->where('del',0)
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('status',3)
            ->count();


        $data = [
            'rlist'=>$rList,
            'tlist'=>$tList,
            'wzz'=>$wzz,
            'zxz'=>$zxz,
            'wwc'=>$wwc,
        ];
        HelpHander::success($data);
    }
    public function patrolImg2(){

        $mode = input('mode',2);

        $data = Db::name('patrol_record')
            ->field('images,patrol_addr_id')
            ->where('images','<>','')
            ->where('org_id',$this->orgId)
            ->where('patrol_mode',$mode)
            ->limit(30)
            ->order('id desc')
            ->select();

        foreach ($data as $k=>$v){
            $img = explode(',',$v['images']);
            if($img){
                $data[$k]['images'] = $img[0];
            }
            $data[$k]['addr'] = Db::name('address')->where('id',$v['patrol_addr_id'])->value('title');
        }
        if(count($data)>6){
            $key = array_rand($data,6);
            $list[] = $data[$key[0]];
            $list[] = $data[$key[1]];
            $list[] = $data[$key[2]];
            $list[] = $data[$key[3]];
            $list[] = $data[$key[4]];
            $list[] = $data[$key[5]];
        }
        $eList = isset($list)?$list:$data;
        HelpHander::success($eList);
    }

   public function zgImg(){

       $orders = Db::name('orders')
           ->alias('a')
           ->join('todo b','a.id=b.order_id')
           ->field('a.images as oImages,b.images as tImages,a.create_time,b.done_time')
           ->where('a.images','<>','')
           ->where('b.images','<>','')
           ->where('a.org_id',$this->orgId)
           ->where('a.del',0)
           ->where('a.work_type_mode',2)
           ->where('a.order_mode','in',[5,6])
           ->limit(30)
           ->order('a.id desc')
           ->select();

       $img = [];
       foreach ($orders as $k=>$v){
           $oImages = explode(',',$v['oImages']);
           $tImages = explode(',',$v['tImages']);
           $img[$k]= ['img'=>[$oImages[0],$tImages[0]],'time'=>[date('Y-m-d H:i',strtotime($v['create_time'])),date('Y-m-d H:i',strtotime($v['done_time']))]];
       }
       $list = [];
       if(count($img)>3){
           $key = array_rand($img,3);
           foreach ($key as $k=>$v){
               $list[] =['images'=>$img[$v]['img'],'time'=>$img[$v]['time']];
           }
       }else{
           foreach ($img as $k=>$v){
               $list[] =['images'=>$v['img'],'time'=>$v['time']];
           }
       }
       $eList = $list;
       HelpHander::success($eList);

   }
   public function zgImgbak(){

       $orders = Db::name('orders')
           ->field('images')
           ->where('images','<>','')
           ->where('org_id',$this->orgId)
           ->where('del',0)
           ->where('work_type_mode',2)
           ->limit(10)
           ->order('id desc')
           ->select();

       foreach ($orders as $k=>$v){
           $img = explode(',',$v['images']);
           if($img){
               $orders[$k]['images'] = $img[0];
           }
       }

       $todo = Db::name('todo')
           ->field('images')
           ->where('images','<>','')
           ->where('org_id',$this->orgId)
           ->where('del',0)
           ->where('work_type_mode',2)
           ->limit(10)
           ->order('id desc')
           ->select();

       foreach ($todo as $k=>$v){
           $img = explode(',',$v['images']);
           if($img){
               $todo[$k]['images'] = $img[0];
           }
       }
       $data = array_merge($orders,$todo);
       if(count($data)>3){
           $key = array_rand($data,3);
           $list[] = $data[$key[0]];
           $list[] = $data[$key[1]];
           $list[] = $data[$key[2]];
       }
       $eList = isset($list)?$list:$data;
       HelpHander::success($eList);

   }

}