<?php

namespace app\admin\controller;
use think\App;
use think\Db;

class UserStatistics extends Auth {
    public function user() {
        $roles = Db::name('roles')
            ->where('type', 1)
            ->where('parent_id', 0)
            ->select();
        $all = 0;
        foreach ($roles as $k => $v) {
            $res = Db::name('user')
                ->alias('a')
                ->join('user_roles b', 'a.id=b.user_id')
                ->join('user_org c', 'a.id=c.user_id')
                ->join('roles d', 'b.roles_id=d.id')
                ->where('a.del', 0)
                ->where('a.enable', 1)
                ->where('d.parent_id', $v['id'])
                ->where('c.org_id', $this->orgId)
                ->count();
            $roles[$k]['value'] = $res ? $res : 0;
            $all += $res;
        }
        $this->assign('list', $roles);
        $this->assign('allCount', $all);
        return $this->fetch();
    }
    public function org_order() {
        $cur = date('Y-m-d');
        $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
        $end = input('end', date('Y-m-d'));
        $title = input('title','');
        $start1 = $start . ' 00:00:00';
        $end1 = $end . ' 23:59:59';
        $list = $this->orgOrderData($start1, $end1,$title);
        $this->assign('list', $list['list']);
        $this->assign('totalList', $list['dt']);
        $this->assign('start', $start);
        $this->assign('end', $end);
        $this->assign('title', $title);
        return $this->fetch();
    }
    public function orgOrderData($start1, $end1,$title) {


        $map[] = ['del','=',0];

        if($title !=''){
            $map[] = ['name','like','%'.$title.'%'];
        }

        $list = Db::name('org')
            ->where('type',1)
            ->where('enable',1)
            ->where($map)
            ->where('parent_id',1)
            ->field('id,name')
            ->select();

        $map1[] = ['create_time', '>=', $start1];
        $map1[] = ['create_time', '<=', $end1];

        $alist = [];
        foreach ($list as $k1 => $v1) {
            $orgs = model('org')->getAllNextId($v1['id']);

            $orgList = Db::name('org')
                ->where('del',0)
                ->where('enable',1)
                ->where('type',2)
                ->whereIn('id',$orgs)
                ->field('id,name')
                ->select();

            foreach ($orgList as $kk=>$vv){
                $count = Db::name('orders')
                    ->where('del', 0)
                    ->where('org_id', $vv['id'])
                    ->where($map1)
                    ->count();

                $bx = Db::name('orders')
                    ->where('del', 0)
                    ->where('org_id', $vv['id'])
                    ->where('work_type_mode', 1)
                    ->where($map1)
                    ->count();

                $bj = Db::name('orders')
                    ->where('del', 0)
                    ->where('org_id', $vv['id'])
                    ->where('work_type_mode', 2)
                    ->where($map1)
                    ->count();

                $ys = Db::name('orders')
                    ->where('del', 0)
                    ->where('org_id', $vv['id'])
                    ->where('work_type_mode', 3)
                    ->where($map1)
                    ->count();

                $yh = Db::name('orders')
                    ->where('del', 0)
                    ->where('org_id', $vv['id'])
                    ->where('work_type_mode', 4)
                    ->where($map1)
                    ->count();


                $alist[] = [
                    'area_name'=> $kk==0 ?$v1['name']:'',
                    'org_num'=>count($orgList),
                    'name'=>$vv['name'],
                    'count'=>$count,
                    'bx'=>$bx,
                    'bj'=>$bj,
                    'ys'=>$ys,
                    'yh'=>$yh,
                ];

            }

        }

        $totalList =[
            array_sum(array_column($alist,'count')),
            array_sum(array_column($alist,'bx')),
            array_sum(array_column($alist,'bj')),
            array_sum(array_column($alist,'ys')),
            array_sum(array_column($alist,'yh')),
        ];


        return ['list'=>$alist,'dt'=>$totalList];
    }
    public function orgOrderExport() {
        $cur = date('Y-m-d');
        $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
        $end = input('end', date('Y-m-d'));
        $start1 = $start . ' 00:00:00';
        $end1 = $end . ' 23:59:59';
        $title = input('title','');
        $list = $this->orgOrderData($start1, $end1,$title);

        $ret = $list['list'];
        $totalList = $list['dt'];


        set_time_limit(0);
        ini_set("memory_limit", "1024M");



        $title = '各项目订单统计';
        header("Content-type: application/vnd.ms-excel");
        header("Content-Type: application/force-download");
        header("Content-Disposition: attachment; filename=".$title.".xls");
        header('Expires:0');
        header('Pragma:public');
        $res = '';
        $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
        $res.='<tr style="background: #ffffff;">';

        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">区域名称</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">项目名称</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总数</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">报修</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">保洁</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">运送</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">应急</th>';
        $res.='</tr>';

        foreach ($ret as $k=>$v){
            $res.='<tr style="background: #ffffff;">';
            if($v['area_name']){
                $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['org_num'].'">'.$v['area_name'].'</td>';
            }
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['name'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['count'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['bx'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['bj'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['ys'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['yh'].'</td>';
            $res.='</tr>';
        }
        $res.='<tr style="background: #ffffff;">';
        $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">合计:</td>';
        foreach ($totalList as $k=>$v){
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" >'.$v.'</td>';
        }
        $res.='</tr>';

        echo $res;


    }
    public function org_user() {
        $title = input('title','');

        $list = $this->orgUserData($title);
        $this->assign('list', $list['list']);
        $this->assign('totalList', $list['totalList']);
        $this->assign('title',$title);
        return $this->fetch();
    }
    public function orgUserData($title) {


        $map[] = ['del','=',0];

        if($title !=''){
            $map[] = ['name','like','%'.$title.'%'];
        }

        $lists = Db::name('org')
            ->where('type',1)
            ->where('enable',1)
            ->where($map)
            ->where('parent_id',1)
            ->field('id,name')
            ->select();


        $alist = [];
        foreach ($lists as $k1 => $v1) {
            $orgs = model('org')->getAllNextId($v1['id']);

            $orgList = Db::name('org')
                ->where('del',0)
                ->where('enable',1)
                ->where('type',2)
                ->whereIn('id',$orgs)
                ->field('id,name')
                ->select();

            foreach ($orgList as $kk=>$vv){
                $res = Db::name('user')
                    ->alias('a')
                    ->field('a.id,d.parent_id')
                    ->join('user_roles b', 'a.id=b.user_id')
                    ->join('user_org c', 'a.id=c.user_id')
                    ->join('roles d', 'b.roles_id=d.id')
                    ->where('a.del', 0)
                    ->where('a.enable', 1)
                    ->where('d.parent_id', 'in',[3,4,5,6,7,8,9,10])
                    ->where('c.org_id', $vv['id'])
                    ->select();
                $a1 = $a2 = $a3= $a4= $a5= $a6= $a7 = $a8 =0;
                foreach ($res as $kkk=>$vvv){

                    if($vvv['parent_id'] == 3){
                        $a1 +=1;
                    }
                    if($vvv['parent_id'] == 4){
                        $a2 +=1;
                    }
                    if($vvv['parent_id'] == 5){
                        $a3 +=1;
                    }
                    if($vvv['parent_id'] == 6){
                        $a4 +=1;
                    }
                    if($vvv['parent_id'] == 7){
                        $a5 +=1;
                    }
                    if($vvv['parent_id'] == 8){
                        $a6 +=1;
                    }
                    if($vvv['parent_id'] == 9){
                        $a7 +=1;
                    }
                    if($vvv['parent_id'] == 10){
                        $a8 +=1;
                    }
                }

                $alist[] = [
                    'area_name'=> $kk==0 ?$v1['name']:'',
                    'org_num'=>count($orgList),
                    'name'=>$vv['name'],
                    'count'=>count($res),
                    'a1'=>$a1,
                    'a2'=>$a2,
                    'a3'=>$a3,
                    'a4'=>$a4,
                    'a5'=>$a5,
                    'a6'=>$a6,
                    'a7'=>$a7,
                    'a8'=>$a8,
                ];
            }
        }

        $totalList =[
            array_sum(array_column($alist,'count')),
            array_sum(array_column($alist,'a1')),
            array_sum(array_column($alist,'a2')),
            array_sum(array_column($alist,'a3')),
            array_sum(array_column($alist,'a4')),
            array_sum(array_column($alist,'a5')),
            array_sum(array_column($alist,'a6')),
            array_sum(array_column($alist,'a7')),
            array_sum(array_column($alist,'a8')),
        ];


        return ['list'=>$alist,'totalList'=>$totalList];
    }
    public function orgUserExport() {
        $title = input('title','');
        $list = $this->orgUserData($title);
        $ret = $list['list'];
        $totalList = $list['totalList'];


        set_time_limit(0);
        ini_set("memory_limit", "1024M");



        $title = '各项目人员统计';
        header("Content-type: application/vnd.ms-excel");
        header("Content-Type: application/force-download");
        header("Content-Disposition: attachment; filename=".$title.".xls");
        header('Expires:0');
        header('Pragma:public');
        $res = '';
        $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
        $res.='<tr style="background: #ffffff;">';

        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">区域名称</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">项目名称</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总数</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">客户</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">综合</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">保安</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">运送</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">维修</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">保洁</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">调度</th>';
        $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">管理层</th>';
        $res.='</tr>';

        foreach ($ret as $k=>$v){
            $res.='<tr style="background: #ffffff;">';
            if($v['area_name']){
                $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['org_num'].'">'.$v['area_name'].'</td>';
            }
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['name'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['count'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a1'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a2'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a3'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a4'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a5'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a6'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a7'].'</td>';
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['a8'].'</td>';
            $res.='</tr>';
        }
        $res.='<tr style="background: #ffffff;">';
        $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">合计:</td>';
        foreach ($totalList as $k=>$v){
            $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" >'.$v.'</td>';
        }
        $res.='</tr>';

        echo $res;
    }
}