| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000 | <?phpnamespace 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);    }}
 |