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

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

use think\Db;

class Repair extends Index
{

    public function todoCountData(){
        $count = Db::name('todo')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',1)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('del',0)
            ->count();

        $count2 = Db::name('todo')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',1)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('del',0)
            ->where('todo_mode',3)
            ->count();
        $bl = 100;
        if($count > 0 ){
            $bl = round($count2/$count*100,1);
        }
        $user = model('WorkTypeMode')->getRolesUserApp(1,$this->orgId);
        $count3 = count($user);

        $count4 = Db::name('todo')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',1)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('del',0)
            ->where('todo_mode',3)
            ->avg('xy_time');

        $count5 = Db::name('todo')
            ->where('org_id',$this->orgId)
            ->where('work_type_mode',1)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('del',0)
            ->where('todo_mode',3)
            ->avg('wc_time');

        $data = [
          'count'=>$count,
          'count2'=>$count3,
          'count3'=>round($count4/3600,1),
          'count4'=>round($count5/3600,1),
          'bl'=>$bl,
        ];
        HelpHander::success($data);
    }

    //维修订单数据状态分析、
    public function wxOrderStatus(){
        $orderMode = [
            ['name'=>'待派工','value'=>1],
            ['name'=>'已取消','value'=>[2,3]],
            ['name'=>'进行中','value'=>4],
            ['name'=>'已完成','value'=>5],
            ['name'=>'已评价','value'=>6],
        ];
        $list = [];
        foreach ($orderMode as $k=>$v){
            $list[$k]['name'] = $v['name'];
            $list[$k]['value'] = Db::name('orders')
                ->where('work_type_mode',1)
                ->where('org_id',$this->orgId)
                ->where('del',0)
//                ->where('create_yyyymmdd',date('Ymd'))
                ->whereIn('order_mode',$v['value'])
                ->count();
        }
        HelpHander::success($list);

    }

    //维修工单周分析
    public function wxWeekTodo(){
        $dlist = [
            date('Ymd',strtotime('-6 days')),
            date('Ymd',strtotime('-5 days')),
            date('Ymd',strtotime('-4 days')),
            date('Ymd',strtotime('-3 days')),
            date('Ymd',strtotime('-2 days')),
            date('Ymd',strtotime('-1 days')),
            date('Ymd'),
        ];
        $title = $list = $list2 = [];

        foreach ($dlist as $k=>$v){
            $title[] = date('m-d',strtotime($v));
            $list[] = Db::name('todo')
                ->where('work_type_mode',1)
                ->where('org_id',$this->orgId)
                ->where('del',0)
                ->where('create_yyyymmdd',$v)
                ->count();
            $list2[] = Db::name('todo')
                ->where('work_type_mode',1)
                ->where('org_id',$this->orgId)
                ->where('del',0)
                ->where('create_yyyymmdd',$v)
                ->where('todo_mode',3)
                ->count();
        }
        $data = [
            'title'=>$title,
            'list'=>$list,
            'list2'=>$list2,
        ];
        HelpHander::success($data);
    }

    public function wxUserStatus(){
        $lists = model('WorkTypeMode')->getRolesUserApp(1,$this->orgId);
        $curday = date('Ymd');
        $users = Db::name('todo')
            ->field('to_user_id')
            ->where('org_id',$this->orgId)
            ->whereIn('todo_mode',[1,2])
            ->where('work_type_mode',1)
            ->where('del',0)
            ->where('create_yyyymmdd',$curday)
            ->group('to_user_id')
            ->order('id desc')
            ->select();
        $users = $users?$users:[];
        $userIds = [];
        foreach ($users as $k=>$v){
            $userIds[] = $v['to_user_id'];
        }

        $nlists = $nlists2 = [];
        foreach ($lists as $k=>$v){
            if(!in_array($v['id'],$userIds)){
                $nlists[] = $v;
            }
        }

        $slist = $slist2 = [];
        foreach ($nlists as $k=>$v){
            $count = Db::name('todo')
                ->where('org_id',$this->orgId)
                ->where('to_user_id',$v['id'])
                ->whereIn('todo_mode',[1,2,3])
                ->where('del',0)
                ->where('create_yyyymmdd',$curday)
                ->where('work_type_mode',1)
                ->count();

            $addr = Db::name('todo')
                ->alias('t')
                ->join('order_repair or','t.order_id=or.order_id')
                ->join('address a','a.id=or.address_id')
                ->where('t.to_user_id',$v['id'])
                ->whereIn('t.todo_mode',[1,2,3])
                ->where('t.del',0)
                ->where('t.create_yyyymmdd',$curday)
                ->where('t.work_type_mode',1)
                ->order('t.id desc')
                ->value('a.title');


            $slist[$k][] = '<span style="color: #FFE400">'.$v['real_name'].'</span>';

            $slist[$k][] = '<span style="color: #FFE400">'.$count.'</span>';

            $slist[$k][] = '<span style="color: #FFE400">'.$addr.'</span>';

        }

        foreach ($lists as $k=>$v){
            if(in_array($v['id'],$userIds)){
                $nlists2[] = $v;
            }
        }

        foreach ($nlists2 as $k=>$v){
            $count = Db::name('todo')
                ->where('org_id',$this->orgId)
                ->where('to_user_id',$v['id'])
                ->whereIn('todo_mode',[1,2,3])
                ->where('del',0)
                ->where('create_yyyymmdd',$curday)
                ->count();

            $addr = Db::name('todo')
                ->alias('t')
                ->join('order_repair or','t.order_id=or.order_id')
                ->join('address a','a.id=or.address_id')
                ->where('t.to_user_id',$v['id'])
                ->whereIn('t.todo_mode',[1,2,3])
                ->where('t.del',0)
                ->where('t.create_yyyymmdd',$curday)
                ->where('t.work_type_mode',1)
                ->order('t.id desc')
                ->value('a.title');

            $slist2[$k][] = '<span style="color: #11E799">'.$v['real_name'].'</span>';

            $slist2[$k][] = '<span style="color: #11E799">'.$count.'</span>';

            $slist2[$k][] = '<span style="color: #11E799">'.$addr.'</span>';
        }

        $data = [
            'list'=>[
                'list'=>$slist,
                'count'=>count($slist),
            ],
            'list2'=>[
                'list'=>$slist2,
                'count'=>count($slist2),
            ],
        ];
        HelpHander::success($data);
    }

    public function wxTodoData(){
        $list = Db::name('todo')
            ->field('id,order_id,todo_mode,create_time,to_user_id')
            ->where('org_id',$this->orgId)
            ->whereIn('todo_mode',[1,2,3])
            ->where('del',0)
            ->where('create_yyyymmdd',date('Ymd'))
            ->where('work_type_mode',1)
            ->select();

        foreach ($list as $k=>$v){
            if($v['todo_mode'] == 1){
                $list[$k]['status'] = '新任务';
            }elseif ($v['todo_mode'] == 2){
                $list[$k]['status'] = '进行中';
            }elseif ($v['todo_mode'] == 3){
                $list[$k]['status'] = '已完成';
            }
            $repair = Db::name('order_type')
                ->alias('ot')
                ->field('ot.id,ot.title,ot.parent_id')
                ->join('order_repair or','or.type_id=ot.id')
                ->where('or.order_id',$v['order_id'])
                ->find();

            $list[$k]['cate_title'] = Db::name('order_type')->where('id',$repair['parent_id'])->value('title');

            $list[$k]['address'] = Db::name('address')
                ->alias('a')
                ->join('order_repair or','or.address_id=a.id')
                ->where('or.order_id',$v['order_id'])
                ->where('a.org_id',$this->orgId)
                ->value('a.title');

            $list[$k]['create_time'] = date('H:i',strtotime($v['create_time']));
            $list[$k]['user_name'] = Db::name('user')->where('id',$v['to_user_id'])->value('real_name');
        }

        $data = [];
        foreach ($list as $k=>$v){
            if($v['todo_mode'] == 1){
                $data[$k][] = $v['status'];
                $data[$k][] = $v['cate_title'];
                $data[$k][] = $v['address'];
                $data[$k][] = $v['create_time'];
                $data[$k][] = $v['user_name'];
            }elseif ($v['todo_mode'] == 2){
                $data[$k][] = '<span style="color:#0FC2DD;">'.$v['status'].'</span>';
                $data[$k][] = '<span style="color:#0FC2DD;">'.$v['cate_title'].'</span>';
                $data[$k][] = '<span style="color:#0FC2DD;">'.$v['address'].'</span>';
                $data[$k][] = '<span style="color:#0FC2DD;">'.$v['create_time'].'</span>';
                $data[$k][] = '<span style="color:#0FC2DD;">'.$v['user_name'].'</span>';
            }elseif ($v['todo_mode'] == 3){
                $data[$k][] = '<span style="color:#2E73D1 ;">'.$v['status'].'</span>';
                $data[$k][] = '<span style="color:#2E73D1;">'.$v['cate_title'].'</span>';
                $data[$k][] = '<span style="color:#2E73D1;">'.$v['address'].'</span>';
                $data[$k][] = '<span style="color:#2E73D1;">'.$v['create_time'].'</span>';
                $data[$k][] = '<span style="color:#2E73D1;">'.$v['user_name'].'</span>';
            }
        }
        HelpHander::success($data);
    }

    public function wxCateData(){
        $type = Db::name('order_type')
            ->field('id,title as name')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('enable',1)
            ->where('parent_id',0)
            ->select();

        foreach ($type as $k=>$v){
            //获取类型下的报修事项
            $cc = Db::name('order_type')
                ->where('parent_id',$v['id'])
                ->where('del',0)
                ->where('enable',1)
                ->column('id');

            $type[$k]['value'] = Db::name('todo')
                ->alias('t')
                ->join('order_repair or','or.order_id=t.order_id')
                ->whereIn('or.type_id',$cc)
                ->where('t.del',0)
                ->where('t.org_id',$this->orgId)
                ->where('t.todo_mode',3)
                ->where('t.work_type_mode',1)
                ->where('t.create_yyyymmdd',date('Ymd'))
                ->count();
            unset($type[$k]['id']);
        }

        $list = array_slice(list_sort_by($type,'value','desc'),0,6);
        HelpHander::success($list);
    }

    public function wxMateItemData(){
        $type = input('type',1); // 1=月
        if($type == 1){
            $where[] = ['create_time','>=',date('Y-m').'-01 00:00:00'];
            $where[] = ['create_time','<=',date('Y-m').'-31 00:00:00'];
        }else{
            $where[] = ['create_time','>=',date('Y').'-01-01 00:00:00'];
            $where[] = ['create_time','<=',date('Y').'-12-31 00:00:00'];
        }
        $list = Db::name('mate_goods')
            ->field('id,title')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('enable',1)
            ->limit(6)
            ->select();
        $title = $count = [];
        foreach ($list as $k=>$v){
            $title[]= $v['title'];
            $nums = Db::name('todo_mate_item')
                ->where('items_id',$v['id'])
                ->where($where)
                ->sum('total');
            $count[] = $nums;
        }

        $data = [
            'list'=>$count,
            'title'=>$title,
        ];

        HelpHander::success($data);
    }

    public function wxDepData(){
        $date = date('Ymd');
        $edate = date('Ymd',strtotime("-1 months",strtotime($date)));
        $dep = Db::name('dep')
            ->field('id,title')
            ->where('org_id',$this->orgId)
            ->where('del',0)
            ->where('enable',1)
            ->limit(6)
            ->select();

        $title = $count = $count2 = [];
        foreach ($dep as $k=>$v){
            $title[] =$v['title'];
            $count[] = Db::name('orders')
                ->alias('o')
                ->join('todo t','t.order_id=o.id')
                ->where('o.dep_id',$v['id'])
                ->where('t.work_type_mode',1)
                ->where('t.create_yyyymmdd',$date)
                ->where('t.del',0)
                ->where('t.org_id',$this->orgId)
                ->count();

            $nums= Db::name('orders')
                ->alias('o')
                ->join('todo t','t.order_id=o.id')
                ->where('o.dep_id',$v['id'])
                ->where('t.work_type_mode',1)
                ->where('t.create_yyyymmdd','<=',$date)
                ->where('t.create_yyyymmdd','>=',$edate)
                ->where('t.del',0)
                ->where('t.org_id',$this->orgId)
                ->count();
            $count2[] = round($nums/30,1);
        }

        $data =[
            'title' =>$title,
            'list' =>$count,
            'list2' =>$count2,
        ];
        HelpHander::success($data);


    }


}