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

use app\hander\HelpHander;
use app\api\controller\screen\Index;

use think\Controller;
use think\Db;

class Project extends Controller
{
    public function __construct()
    {
        parent::__construct();

        $this->orgId = input('orgid')?input('orgid'):0;
    }

    /**
     * 获取用户数
     * @param $orgid 组织id
     * @param $roles 角色id
     * @return mixed
     */
    private function get_user_count($orgid,$roles){
        $count = $this->db
            ->join('user_roles','user.USER_ID = user_roles.USER_ID')
            ->join('user_org','user.USER_ID = user_org.USER_ID')
            ->where_in('user_roles.ROLES_ID',$roles)
            ->where('user.DEL_REF',0)
            ->where('user.ENABLE',1)
            ->where('user_org.ORG_TYPE',0)
            ->where('user_org.ORG_ID',$orgid)
            ->from('user')
            ->count_all_results();
        return $count;
    }

    // 各类人员占比接口
    public function user(){
        $this->load->model(array('OrgModel','RolesModel'));
        $info = $this->OrgModel->show_one(array('ORG_ID'=>$this->orgId,'TYPE'=>'2'));
        if(!$info||$info->ENABLE != 1||$info->DEL_REF != 0){
            $this->error('项目不存在');
        }
        // 1=客户人员 2=综合人员 3=运送人员 4=维修人员 5=保洁人员 6=保安人员 7=调度人员 8=监管人员
        $arr = array(
            array('type' => 5),
            array('type' => 3),
            array('type' => 4),
            array('type' => 6),
        );
        $allcount = 0;
        foreach ($arr as $k=>$v){
            $roles = $this->RolesModel->get_roles_type($this->orgId,$v['type']);
            $arr[$k]['name'] = $roles['name'];
            $arr[$k]['value'] = $this->get_user_count($this->orgId,$roles['roles']);
            $allcount += $arr[$k]['value'];
        }

        $data = array(
            array('value'=>$arr[0]['value'],'name'=>'保洁人员','name2'=>'保洁','bl'=>$allcount>0?round($arr[0]['value']*100/$allcount):0),
            array('value'=>$arr[1]['value'],'name'=>'运送人员','name2'=>'运送','bl'=>$allcount>0?round($arr[1]['value']*100/$allcount):0),
            array('value'=>$arr[2]['value'],'name'=>'维修人员','name2'=>'维修','bl'=>$allcount>0?round($arr[2]['value']*100/$allcount):0),
            array('value'=>$arr[3]['value'],'name'=>'保安人员','name2'=>'保安','bl'=>$allcount>0?round($arr[3]['value']*100/$allcount):0),
        );
        $this->success('成功',['count' => $allcount,'list' => $data]);
    }

    public function todostis(){
        $count1 = Db::name('orders')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('work_type_mode',3)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('order_mode','in',[5,6])
            ->count();

        $count2 = Db::name('orders')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('work_type_mode',1)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('order_mode','in',[5,6])
            ->count();

        $count3 = Db::name('daily_record')
            ->where('org_id',$this->orgId)
            ->where('create_yyyymmdd',date('Ymd'))
            ->count();

        $arr = [
            [
                'name' => '运送任务',
                'count' => $count1
            ],
            [
                'name' => '维修任务',
                'count' => $count2
            ],
            [
                'name' => '日常任务',
                'count' => $count3
            ]
        ];
        HelpHander::success($arr,'成功');
    }

    public function ysuser(){
        $lists = model('User')->getYsUser($this->orgId,1);
        $nlists = [];
        if(count($lists) > 4){
            $arr = array_rand($lists,4);
            foreach ($arr as $k=>$v){
                $nlists[] = $lists[$v];
            }
        }else{
            $nlists = $lists;
        }
        foreach ($nlists as $k=>$v){
            $count = Db::name('todo')
                ->alias('a')
                ->join('orders b','a.order_id=b.id')
                ->where('a.create_yyyymmdd',date('Ymd'))
                ->where('a.to_user_id',$v['id'])
                ->where('a.todo_mode',3)
                ->where('a.del',0)
                ->where('a.org_id',$this->orgId)
                ->count();
            $nlists[$k]['count'] = $count;
//            $addr = Db::name('user_convey_addr')
//                ->alias('uca')
//                ->join('convey_addr ca','ca.id = uca.ADDR_ID')
//                ->where('uca.USER_ID',$v['USER_ID'])
//                ->order_by('uca.CREATE_TIME DESC')
//                ->select('ca.TITLE')
//                ->get('user_convey_addr as uca')
//                ->row_array();
            $addr = [];
            $nlists[$k]['addr_title'] = $addr?$addr['TITLE']:'';
        }
        HelpHander::success($nlists,'成功');
    }

    // 热点区域
    public function hotaddr(){
        //SELECT count(a.START) as COUNT,a.START FROM order_convey as a JOIN orders as o ON o.ORDER_ID = a.ORDER_ID GROUP BY a.`START` LIMIT 10
        $curDay = date('Ymd');
        $oldDay = date('Ymd',time() - 29*24*60*60);
        $lists = Db::name('order_convey')
            ->alias('oc')
            ->join('orders o','o.id = oc.order_id')
            ->where('o.org_id',$this->orgId)
            ->where('o.create_yyyymmdd',$curDay)
            ->where('o.work_type_mode',3)
            ->where('o.del',0)
            ->where('o.order_mode','in',[5,6])
            ->field('COUNT(oc.start) as count,oc.start')
            ->group('oc.start')
            ->order('count','desc')
            ->limit(10)
            ->select();
        $x = [];
        $y1 = [];
        $y2 = [];
        foreach ($lists as $k=>$v){
            $addr = Db::name('address')
                ->where('id',$v['start'])
                ->find();
            $x[] = $addr?$addr['title']:'';
            $y1[] = $v['count'];
            $count = Db::name('order_convey')
                ->alias('oc')
                ->join('orders o','o.id = oc.order_id')
                ->where('o.org_id',$this->orgId)
                ->where('o.work_type_mode',3)
                ->where('o.create_yyyymmdd','<=',$curDay)
                ->where('o.create_yyyymmdd','>=',$oldDay)
                ->where('o.order_mode','in',[5,6])
                ->where('oc.start',$v['start'])
                ->where('o.del',0)
                ->count();
            $y2[] = round($count/30,2);
        }
        $data = [
            'x' => $x,
            'y1' => $y1,
            'y2' => $y2
        ];
       HelpHander::success($data,'成功');
    }

    public function yscount(){
        $curDay = date('Ymd');

        $tcount = Db::name('orders')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',3)
            ->where('create_yyyymmdd',$curDay)
            ->where('order_mode','in',[5,6])
            ->where('del',0)
            ->count();

        $fcount = Db::name('order_convey')
            ->alias('oc')
            ->join('orders o','o.id = oc.order_id')
            ->where('o.org_id',$this->orgId)
            ->where('o.work_type_mode',3)
            ->where('o.create_yyyymmdd',$curDay)
            ->whereRaw("TIMESTAMPDIFF(second,o.finish_time,oc.ywc_time) >=0")
            ->where('o.order_mode','in',[5,6])
            ->where('o.del',0)
            ->count();
        $bl1 = $tcount>0?round($fcount/$tcount,3)*100:0;

        $wcount = Db::name('orders')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('work_type_mode',3)
            ->where('create_yyyymmdd',$curDay)
            ->where('order_mode','in',[1])
            ->count();

        $jxcount =  Db::name('orders')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('work_type_mode',3)
            ->where('create_yyyymmdd',$curDay)
            ->where('order_mode','in',[5])
            ->count();

        $bhcount = Db::name('todo')
            ->alias('a')
            ->join('todo b','a.order_id=b.id')
            ->where('a.org_id',$this->orgId)
            ->where('b.del',0)
            ->where('a.work_type_mode',3)
            ->where('a.create_yyyymmdd',$curDay)
            ->where('a.todo_mode','in',[4])
            ->count();


        $flist = Db::name('orders')
            ->field('(TIMESTAMPDIFF(minute,create_time,send_time)) as minute')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',3)
            ->where('create_yyyymmdd',$curDay)
            ->where('del',0)
            ->where('order_mode','in',[4,5,6])
            ->select();
        $flist = $flist?$flist:[];
        $c = count($flist);
        $minu = 0;
        foreach ($flist as $k=>$v){
            if($v['minute']){
                $minu += $v['minute'];
            }
        }
        $avg = $c > 0?round($minu/$c,1):0;


        $data = [
            'count1' => $bl1."%",
            'count2' => $avg,
            'count3' => $wcount,
            'count4' => $jxcount,
            'count5' => $tcount,
            'count6' => $bhcount
        ];

        HelpHander::success($data,'成功');
    }

    // 隐患预警数据统计
    public function yinhuan(){
        $list = [
            ['标题', '隐患数量', '转任务量'],
//            ['报修',  $bxwc, $bxxy],
//            ['保洁',  $bjwc, $bjxy],
//            ['运送',  $yswc, $ysxy],
//            ['隐患预警', $yhwc, $yhxy],
        ];

        $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'),
        ];
        foreach ($dlist as $v){
            $tt = date('Ymd',strtotime($v));
            $count = Db::name('orders')
                ->where('org_id',$this->orgId)
                ->where('create_yyyymmdd',$tt)
                ->where('del',0)
                ->where('work_type_mode',4)
                ->count();
            $count1 = Db::name('todo')
                ->alias('a')
                ->join('orders b','a.order_id=b.id')
                ->where('a.org_id',$this->orgId)
                ->where('a.create_yyyymmdd',$tt)
                ->where('a.del',0)
                ->where('a.work_type_mode',4)
                ->where('b.del',0)
                ->group('a.order_id')
                ->count();
            $list[] = [date('m-d',strtotime($v)),$count,$count1];
        }

        $data = [
            'list' => $list
        ];
        HelpHander::success($data,'成功');
    }

    // 运送数据统计
    public function yusong(){
        $list = [
            ['标题', '工单总量', '完成工单量'],
        ];

        $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'),
        ];
        foreach ($dlist as $v){
            $tt = date('Ymd',strtotime($v));
            $count = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('CREATE_YYYYMMDD',$tt)
                ->where('DEL_REF',0)
                ->where('WORK_TYPE_MODE',3)
                ->from('orders')
                ->count_all_results();

            $count1 = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('CREATE_YYYYMMDD',$tt)
                ->where('DEL_REF',0)
                ->where('WORK_TYPE_MODE',3)
                ->where_in('CURR_ORDER_MODE',[9,11])
                ->from('orders')
                ->count_all_results();
            $list[] = [date('m-d',strtotime($v)),$count,$count1];
        }

        $data = [
            'list' => $list
        ];
        $this->success('成功',$data);
    }

    // 今日运送完成工单总量
    public function yscounttoday(){
        $curDay = date('Ymd');

        $tcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('WORK_TYPE_MODE',3)
            ->where('CREATE_YYYYMMDD',$curDay)
            ->where_in('CURR_ORDER_MODE',[9,11])
            ->from('orders')
            ->count_all_results();

        $data = [
            'count' => $tcount
        ];
        $this->success('成功',$data);
    }

    // 医废
    public function waste(){

        $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'),
        ];
        $xdata = [];
        $ydata = [];
        foreach ($dlist as $v){
            $tt = date('Ymd',strtotime($v));
//            $count = $this->db
////                ->where('ORG_ID',$this->orgId)
////                ->where('CREATE_YYYYMMDD',$tt)
////                ->where('DEL_REF',0)
////                ->from('waste_record')
////                ->count_all_results();
///
            $ret = Db::name('waste_record')
                ->where('org_id',$this->orgId)
                ->where('create_yyyymmdd',$tt)
                ->where('del',0)
                ->select();
            $total = 0;
            foreach ($ret as $kk=>$vv){
                $total += $vv['weight'];
            }
            $ydata[] = $total/1000;
            $xdata[] = date('m-d',strtotime($v));
        }

        $data = [
            'xdata' => $xdata,
            'ydata' => $ydata
        ];
        HelpHander::success($data,'成功');
    }

    public function ystask(){
        $size = input('size')?input('size'):20;
        $data = model('Orders')->get_cur_day_lists($this->orgId,$size);
        foreach ($data as $k=>$v){
            $data[$k]['create_time'] = date('H:i',strtotime($v['create_time']));
            $data[$k]['send_time'] = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
            $data[$k]['confirm_time'] = $v['confirm_time']?date('H:i',strtotime($v['confirm_time'])):'';
        }
        HelpHander::success($data,'成功');
    }
    public function ystask_bak(){
        $size = input('size')?input('size'):5;
        $data = model('Orders')->get_cur_day_lists($this->orgId,$size);
        foreach ($data as $k=>$v){
            $data[$k]['xq_time'] = date('H:i',strtotime($v['xq_time']));
            $data[$k]['send_time'] = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
            $data[$k]['confirm_time'] = $v['confirm_time']?date('H:i',strtotime($v['confirm_time'])):'';
        }
        HelpHander::success($data,'成功');
    }

    public function ystaskcount(){
        $this->load->model('OrdersModel');
        $data = $this->OrdersModel->get_cur_day_count($this->orgId);
        $this->success('成功',['count' => $data]);
    }

    public function daily(){
        $lists = Db::name('daily_record')
            ->alias('dr')
            ->join('daily d','d.id = dr.daily_id')
            ->where('dr.org_id',$this->orgId)
            ->where('dr.create_yyyymmdd',date('Ymd'))
            ->limit(9)
            ->field('d.title,d.content,dr.user_id,dr.create_time')
            ->order('dr.id','desc')
            ->select();
        foreach ($lists as $k=>$v){
            $user = Db::name('user')
                ->where('id',$v['user_id'])
                ->find();
            $lists[$k]['real_name'] = $user?$user['real_name']:'';
            $lists[$k]['create_time'] = date('m-d H:i',strtotime($v['create_time']));
        }
       HelpHander::success($lists,'成功');
    }

    public function patrolList(){
        $lists = Db::name('patrol_record')
            ->alias('pr')
            ->join('address pa','pa.id = pr.patrol_addr_id')
            ->join('patrol_task pt','pt.id = pr.patrol_task_id')
            ->join('user u','u.id = pr.user_id')
            ->where('pr.org_id',$this->orgId)
            ->where('pr.create_yyyymmdd',date('Ymd'))
            ->limit(4)
            ->field('pa.title,pt.title as task_title,u.real_name,pr.create_time')
            ->order('pr.id','DESC')
            ->select();
        foreach ($lists as $k=>$v){
            $lists[$k]['create_time'] = date('m-d H:i',strtotime($v['create_time']));
        }
        HelpHander::success($lists,'成功');
    }

    public function patrolImg(){
        $lists = Db::name('patrol_record')
            ->alias('pr')
            ->join('patrol_task pt','pt.id = pr.patrol_task_id')
            ->where('pr.org_id',$this->orgId)
            ->where('pr.images','<>','null')
            ->where('pr.create_yyyymmdd',date('Ymd'))
            ->limit(9)
            ->field('pt.title as task_title,pr.images')
            ->order('pr.id','DESC')
            ->select();
        foreach ($lists as $k=>$v){
            $imgs = explode(',',$v['images']);
            $lists[$k]['images'] = $imgs[0];
        }
        HelpHander::success($lists?$lists:[],'成功');

    }

    // 评论,满意度
    public function comment(){
        $scores = [
            ['score'=>1,'name'=>'一星','value'=>0],
            ['score'=>2,'name'=>'二星','value'=>0],
            ['score'=>3,'name'=>'三星','value'=>0],
            ['score'=>4,'name'=>'四星','value'=>0],
            ['score'=>5,'name'=>'五星','value'=>0],
        ];

        foreach ($scores as $k=>$v){
            $count = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('SCORE',$v['score'])
                ->from('comment')
                ->count_all_results();
            $scores[$k]['value'] = $count?$count:0;
            unset($scores[$k]['score']);
        }

        $user = $this->db
            ->select('sum(SCORE) as SCORE,TO_USER_ID')
            ->where('ORG_ID',$this->orgId)
            ->group_by('TO_USER_ID')
            ->distinct()
            ->get('comment_reply')
            ->result_array();
        foreach ($user as $k=>$v){
            $count = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('TO_USER_ID',$v['TO_USER_ID'])
                ->from('comment_reply')
                ->count_all_results();
            $score = round($v['SCORE']/$count,1);
            $user[$k]['SCORE'] = $score;

            $info = $this->db
                ->join('user_org uo','uo.USER_ID = u.USER_ID')
                ->join('org o','uo.ORG_ID = o.ORG_ID')
                ->where('uo.ORG_TYPE',1)
                ->where('u.USER_ID',$v['TO_USER_ID'])
                ->select('u.REAL_NAME,o.NAME as DEP_NAME')
                ->get('user u')
                ->row_array();
            $user[$k]['REAL_NAME'] = $info['REAL_NAME'];
            $user[$k]['DEP_NAME'] = $info['DEP_NAME'];
        }

        // 获取排名前5的人
        $user = list_sort_by($user,'SCORE', 'desc');
        $lists = [];
        foreach ($user as $k=>$v){
            if($k >= 5){
                continue;
            }
            $lists[] = $v;
        }

        $this->success('成功',['count'=>$scores,'list' => $lists]);
    }

    // 工单统计
    public function todo(){
        $start = date('Y-m-d').' 00:00:00';
        $end = date('Y-m-d').' 23:59:59';
        $fininsh = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('DONE_TIME >=',$start)
            ->where('DONE_TIME <=',$end)
            ->from('todo')
            ->count_all_results();

        $unfininsh = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where_in('TODO_MODE',[1,2])
            ->where('DONE_TIME >=',$start)
            ->where('DONE_TIME <=',$end)
            ->from('todo')
            ->count_all_results();

        $undeal = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where_in('CURR_ORDER_MODE',1)
            ->where('CREATTE_TIME >=',$start)
            ->where('CREATTE_TIME <=',$end)
            ->from('orders')
            ->count_all_results();

        $total = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where_in('TODO_MODE',[1,2,3,4,5])
            ->from('todo')
            ->count_all_results();

        $today = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where_in('TODO_MODE',[1,2,3,4,5])
            ->where('CREATE_TIME >=',$start)
            ->where('CREATE_TIME <=',$end)
            ->from('todo')
            ->count_all_results();

        $commentcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->from('comment')
            ->count_all_results();
        $comment = $this->db
            ->where('ORG_ID',$this->orgId)
            ->select_sum('SCORE')
            ->get('comment')
            ->row_array();

        $data = [
            'total' => $total,
            'today' => $today,
            'finish' => $fininsh,
            'unfinish' => $unfininsh,
            'undeal' => $undeal,
            'comment' => $commentcount&&$comment?round($comment['SCORE']/$commentcount,1):0
        ];
        $this->success('成功',$data);

    }

    // 获取今日最新5条中的随机一条
    public function patrol(){
        $lists = $this->db
            ->select('u.REAL_NAME,pa.TITLE,pr.IMAGES,pt.TITLE as CONTENT,pr.CREATE_TIME')
            ->join('user u','u.USER_ID = pr.USER_ID')
            ->join('patrol_addr pa','pa.PATROL_ADDR_ID = pr.PATROL_ADDR_ID')
            ->join('patrol_task pt','pt.PATROL_TASK_ID = pr.PATROL_TASK_ID')
            ->where('pr.ORG_ID',$this->orgId)
            ->where('pr.CREATE_YYYYMMDD',date('Ymd'))
            ->limit(5)
            ->order_by('pr.PATROL_RECORD_ID DESC')
            ->get('patrol_record pr')
            ->result_array();
        $info = null;
        if($lists){
            $info = $lists[array_rand($lists,1)];
        }
        if($info){
            $imgs = $info['IMAGES']?explode(',',$info['IMAGES']):[];
            $info['IMAGES'] = $imgs?$imgs[0]:'';

            $info['CREATE_TIME'] = date('Y-m-d',strtotime($info['CREATE_TIME']));

            $this->success('成功',$info);
        }else{
            $this->error('失败');
        }
    }

    // 工单指数数据统计
    public function todotime(){
        $bxcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',1)
            ->from('todo')
            ->count_all_results();
        $bjcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',2)
            ->from('todo')
            ->count_all_results();
        $yscount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',3)
            ->from('todo')
            ->count_all_results();
        $yhcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',4)
            ->from('todo')
            ->count_all_results();

        $bxinfo = $this->db
            ->select_sum('XY_TIME')
            ->select_sum('WC_TIME')
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',1)
            ->get('todo')
            ->row_array();
        $bxinfo = $bxinfo?$bxinfo:['XY_TIME'=>0,'WC_TIME'=>0];
        $bjinfo = $this->db
            ->select_sum('XY_TIME')
            ->select_sum('WC_TIME')
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',2)
            ->get('todo')
            ->row_array();
        $bjinfo = $bjinfo?$bjinfo:['XY_TIME'=>0,'WC_TIME'=>0];
        $ysinfo = $this->db
            ->select_sum('XY_TIME')
            ->select_sum('WC_TIME')
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',3)
            ->get('todo')
            ->row_array();
        $ysinfo = $ysinfo?$ysinfo:['XY_TIME'=>0,'WC_TIME'=>0];
        $yhinfo = $this->db
            ->select_sum('XY_TIME')
            ->select_sum('WC_TIME')
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('TODO_MODE',3)
            ->where('WORK_TYPE_MODE',4)
            ->get('todo')
            ->row_array();
        $yhinfo = $yhinfo?$yhinfo:['XY_TIME'=>0,'WC_TIME'=>0];

        $bxwc = $bxcount?round($bxinfo['WC_TIME']/$bxcount/60,1):0;
        $bxxy = $bxcount?round($bxinfo['XY_TIME']/$bxcount/60,1):0;
        $bjwc = $bjcount?round($bjinfo['WC_TIME']/$bjcount/60,1):0;
        $bjxy = $bjcount?round($bjinfo['XY_TIME']/$bjcount/60,1):0;
        $yswc = $yscount?round($ysinfo['WC_TIME']/$yscount/60,1):0;
        $ysxy = $yscount?round($ysinfo['XY_TIME']/$yscount/60,1):0;
        $yhwc = $yhcount?round($yhinfo['WC_TIME']/$yhcount/60,1):0;
        $yhxy = $yhcount?round($yhinfo['XY_TIME']/$yhcount/60,1):0;

        $list = [
            ['标题', '平均完成时', '响应时长'],
            ['报修',  $bxwc, $bxxy],
            ['保洁',  $bjwc, $bjxy],
            ['运送',  $yswc, $ysxy],
            ['隐患预警', $yhwc, $yhxy],
        ];

        $data = [
            'bx' => $bxcount,
            'bj' => $bjcount,
            'ys' => $yscount,
            'yh' => $yhcount,
            'list' => $list
        ];
        $this->success('成功',$data);
    }

    // 设备维检
    public function device(){
        $dcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where('DEL_REF',0)
            ->where('ENABLE',1)
            ->from('device')
            ->count_all_results();
        $rcount = $this->db
            ->where('ORG_ID',$this->orgId)
            ->from('device_record')
            ->count_all_results();

        $cur = date('Y-m');
        $curTime = strtotime($cur.'-01');
        $month = [];
        for ($i=5;$i>0;$i--){
            $date = strtotime("-".$i." month",$curTime);
            $month[] = date('Y-m',$date);
        }
        $month[] = $cur;
        $list = [];
        foreach ($month as $k=>$v){
            $list[] = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('CREATE_YYYYMM',str_ireplace('-','',$v))
                ->from('device_record')
                ->count_all_results();
        }

        $data = [
            'dcount' => $dcount,
            'rcount' => $rcount,
            'list' => $list,
            'month' => $month
        ];
        $this->success('成功',$data);
    }

    // 24小时内记录
    public function patrolRecord(){
        $day = date('Ymd');
        $time = strtotime(date('Y-m-d'));
        $hours = [];
        $plist1 = $plist2 = $plist3 = $plist4 = [];
        for ($i=0;$i<24;$i++){
            $hours[] = $i;
            $stime = date('Y-m-d H:i:s',$time + $i*60*60);
            $etime = date('Y-m-d H:i:s',$time + ($i+1)*60*60);
            $plist1[] = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('PATROL_MODE',1)
                ->where('CREATE_TIME >=',$stime)
                ->where('CREATE_TIME <',$etime)
                ->where('CREATE_YYYYMMDD',$day)
                ->from('patrol_record')
                ->count_all_results();
            $plist2[] = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('PATROL_MODE',2)
                ->where('CREATE_TIME >=',$stime)
                ->where('CREATE_TIME <',$etime)
                ->where('CREATE_YYYYMMDD',$day)
                ->from('patrol_record')
                ->count_all_results();
            $plist3[] = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('PATROL_MODE',3)
                ->where('CREATE_TIME >=',$stime)
                ->where('CREATE_TIME <',$etime)
                ->where('CREATE_YYYYMMDD',$day)
                ->from('patrol_record')
                ->count_all_results();
            $plist4[] = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('PATROL_MODE',4)
                ->where('CREATE_TIME >=',$stime)
                ->where('CREATE_TIME <',$etime)
                ->where('CREATE_YYYYMMDD',$day)
                ->from('patrol_record')
                ->count_all_results();
        }

        $data = [
            'hour' => $hours,
            'plist1' => $plist1,
            'plist2' => $plist2,
            'plist3' => $plist3,
            'plist4' => $plist4
        ];
        $this->success('成功',$data);
    }

    // 报修工单
    public function repair(){
        $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'),
        ];

        $names = [];
        $counts = [];
        foreach ($dlist as $v){
            $names[] = date('m-d',strtotime($v));
            $tt = date('Ymd',strtotime($v));
            $count = Db::name('todo')
                ->alias('a')
                ->join('orders b','a.order_id=b.id')
                ->where('a.del',0)
                ->where('a.org_id',$this->orgId)
                ->where('a.todo_mode',3)
                ->where('a.work_type_mode',1)
                ->where('a.create_yyyymmdd',$tt)
                ->group('a.order_id')
                ->count();
            $counts[] = $count;
        }

        HelpHander::success(['names'=>$names,'counts' => $counts],'成功');
    }


    public function ystypeuser(){
        $this->load->model('UserModel');
        $lists = $this->UserModel->getYsUser($this->orgId,1);
        $lists = $lists?$lists:[];

        $curday = date('Ymd');
        $users = $this->db
            ->where('ORG_ID',$this->orgId)
            ->where_in('TODO_MODE',[1,2])
            ->where('DEL_REF',0)
            ->where('CREATE_YYYYMMDD',$curday)
            ->select('TO_USER_ID')
            ->group_by('TO_USER_ID')
            ->get('todo')
            ->result_array();
        $users = $users?$users:[];
        $userIds = [];
        foreach ($users as $k=>$v){
            $userIds[] = $v['TO_USER_ID'];
        }

        $data = [
            'list1' => [],
            'list2' => []
        ];

        $nlists = [];
        foreach ($lists as $k=>$v){
            if(!in_array($v['USER_ID'],$userIds)){
                $nlists[] = $v;
            }
        }
        $slist = [];
        if(count($nlists) > 10){
            $keys = array_rand($nlists,10);
            foreach ($nlists as $k=>$v){
                if(in_array($k,$keys)){
                    $slist[] = $v;
                }
            }
        }else{
            $slist = $nlists;
        }
        foreach ($slist as $k=>$v){
            $count = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('TO_USER_ID',$v['USER_ID'])
                ->where_in('TODO_MODE',[1,2,3])
                ->where('DEL_REF',0)
                ->where('CREATE_YYYYMMDD',$curday)
                ->from('todo')
                ->count_all_results();
            $slist[$k]['COUNT'] = $count;

            $addr = $this->db
                ->join('convey_addr ca','ca.CONVEY_ADDR_ID = cpr.ADDR_ID')
                ->select('ca.TITLE,cpr.CREATE_TIME')
                ->where('USER_ID',$v['USER_ID'])
                ->order_by('cpr.ID desc')
                ->get('convey_plan_record cpr')
                ->row_array();
            $slist[$k]['TITLE'] = $addr?$addr['TITLE']:'';;
        }

        $nlists2 = [];
        foreach ($lists as $k=>$v){
            if(in_array($v['USER_ID'],$userIds)){
                $nlists2[] = $v;
            }
        }
        $slist2 = [];
        if(count($nlists2) > 9){
            $keys2 = array_rand($nlists2,9);
            foreach ($nlists2 as $k=>$v){
                if(in_array($k,$keys2)){
                    $slist2[] = $v;
                }
            }
        }else{
            $slist2 = $nlists2;
        }
        foreach ($slist2 as $k=>$v){
            $count = $this->db
                ->where('ORG_ID',$this->orgId)
                ->where('TO_USER_ID',$v['USER_ID'])
                ->where_in('TODO_MODE',[1,2,3])
                ->where('DEL_REF',0)
                ->where('CREATE_YYYYMMDD',$curday)
                ->from('todo')
                ->count_all_results();
            $slist2[$k]['COUNT'] = $count;

            $addr = $this->db
                ->join('convey_addr ca','ca.CONVEY_ADDR_ID = cpr.ADDR_ID')
                ->select('ca.TITLE,cpr.CREATE_TIME')
                ->where('USER_ID',$v['USER_ID'])
                ->order_by('cpr.ID desc')
                ->get('convey_plan_record cpr')
                ->row_array();
            $slist2[$k]['TITLE'] = $addr?$addr['TITLE']:'';
        }

        $data['list1'] = $slist; // 待命人员
        $data['list2'] = $slist2; // 行动人员
        $this->success('成功',$data);

    }

}