<?php
namespace app\common\model;
use app\common\util\AppAuth;
use app\hander\HelpHander;
use think\Db;

class GreenAddr extends Base {
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    public $table = 'green_addr';
    protected $validateName = 'greenAddr';

    public function updates(){
        $data = request()->post();
        $data['org_id'] =cur_org_id();
        $result = validate($this->validateName)->check($data,[],'');
        if(true !== $result){
            $this->error = validate($this->validateName)->getError();
            return false;
        }
        if(!$data['user_ids']){
            $this->error='执行人员不能为空';
            return false;
        }
        $post['user_ids'] = explode(',',$data['user_ids']);

        $id = $data['id'];
        unset($data['id']);
        unset($data['user_ids']);
        $this->startTrans();
        try{
            if($id > 0){
                $data['update_time'] = date('Y-m-d H:i:s');
                $ret = $this->allowField(true)->save($data,['id'=>$id]);
                if(!$ret){
                    exception('保存失败');
                }
                Db::name('green_user')
                    ->where('green_addr_id',$id)->delete();
                //添加检查人员
                $user = array();
                $post['user_ids'] = array_unique($post['user_ids']);
                foreach ($post['user_ids'] as $k=>$v){
                    $user[] = array(
                        'green_addr_id' => $id,
                        'user_id' => $v
                    );
                }
                $taskUser=Db::name('green_user')->insertAll($user);
                if(!$taskUser){
                    exception('工作人员保存失败');
                }
            }else{

                $data['create_time'] = date('Y-m-d H:i:s');
                $ret = $this->insertGetId($data);
                $id = $ret;
                if(!$id){
                    exception('保存失败');
                }
                //添加检查人员
                $user = array();
                $post['user_ids'] = array_unique($post['user_ids']);
                foreach ($post['user_ids'] as $k=>$v){
                    $user[] = array(
                        'green_addr_id' => $id,
                        'user_id' => $v
                    );
                }
                $taskUser=Db::name('green_user')->insertAll($user);
                if(!$taskUser){
                    exception('工作人员保存失败');
                }
            }
            $this->commit();
            return true;
        }catch (\Exception $e){
            // 回滚事务
            $this->error = $e->getMessage();
            $this->rollback();
            return false;
        }
    }
    public function getRoles($roles){
        $list = Db::name('roles')
            ->where('id','in',explode(',',$roles))
            ->column('name');
        return $list;
    }
    public function getRolesList(){
        $list = (new WorkTypeMode())->getRoles(9);
        $arr = [];
        if(!empty($list)){
            foreach ($list as $k=>$v){
                $arr[] = [
                    'id'=>$v['id'],
                    'title'=>$v['name'],
                ];
            }
        }
        return $arr;
    }
    public function list(){
        $list = $this
            ->where('del',0)
            ->where('enable',1)
            ->where('org_id',cur_org_id())
            ->select()
            ->toArray();
        return $list;
    }
    public function sweepCode($code,$orgId,$userId,$taskId=0,$greenAddrId=0)
    {
        $qrcode_arr = get_qrcode_arr($code);

        if(!$qrcode_arr){
            $this->error = '该地点不存在';
            return false;
        }

        if($qrcode_arr['type'] != 'green'){
            $this->error = '该任务不存在';
            return false;
        }

        if($taskId > 0 ){
            if($qrcode_arr['id'] != $greenAddrId){
                $this->error = '地点不正确';
                return false;
            }
            $task = Db::name('green_task')
                ->where('id',$taskId)
                ->where('del',0)
                ->where('org_id',$orgId)
                ->find();
            if($task['end_time'] < date('Y-m-d H:i:s') || $task['start_time'] > date('Y-m-d H:i:s')){
                $this->error = '不在时间范围内';
                return false;
            }

            $workerAuth = 1;
        }else{
            $green =Db::name('green_user')
                ->where('green_addr_id',$qrcode_arr['id'])
                ->where('user_id',$userId)
                ->find();
            $workerAuth = $green?1:0;
        }
        $green = $this->where([
            'org_id' => $orgId,
            'id' => $qrcode_arr['id'],
            'del' => 0,
            'enable' => 1
        ])->find();
        if (!$green) {
            $this->error = '该任务不存在';
            return false;
        }

        $lookAllAuth = (new Roles())->getAppAuth($userId,AppAuth::GREEN_LOOK_ALL_AUTH);
        $ret = [
            'green_addr_id' => $qrcode_arr['id'],
            'worker_auth' => $workerAuth,
            'look_all_auth' => $lookAllAuth?1:0,
        ];
        return $ret;
    }



    public function taskAddrAll($taskId){
        $info = Db::name('green_task')
            ->field('id,start_time,end_time,title,status,create_time')
            ->where('id',$taskId)
            ->where('del',0)
            ->find();

        $info['users'] = Db::name('user')
            ->alias('u')
            ->field('u.real_name')
            ->join('green_task_user dtu','dtu.user_id=u.id')
            ->where('dtu.task_id',$info['id'])
            ->where('u.del',0)
            ->where('u.enable',1)
            ->select();

        $info['green'] = Db::name('green')
            ->alias('d')
            ->field('d.id,d.title')
            ->join('green_task_addr dta','dta.green_id=d.id')
            ->where('dta.task_id',$info['id'])
            ->where('d.del',0)
            ->where('d.enable',1)
            ->select();

        foreach ($info['green'] as $k=>$v){
            $record = Db::name('green_record')
                ->where('task_id',$taskId)
                ->where('green_id',$v['id'])
                ->find();
            $info['green'][$k]['status'] = $record ? 1 : 0;
            $info['green'][$k]['green_record_id'] = $record ? $record['id'] : 0;
        }

        return $info;
    }

    public function myTaskRecord($page,$size,$userId,$orgId){
        $record = Db::name('green_task_user')
            ->alias('a')
            ->join('green_task b','a.task_id = b.id')
            ->where('b.del',0)
            ->whereIn('b.status',[2,3])
            ->where('a.user_id',$userId)
            ->where('b.org_id',$orgId)
            ->field('b.id,b.title,b.start_time,b.end_time,b.status')
            ->order('b.start_time desc,id desc')
            ->page($page,$size)
            ->select();

        return $record?$record:[];
    }

    /**
     *日常工作量统计
     *
     * @author wst
     * @date   2021/4/13 8:38
     */
    public function DailyWork($orgId){
        $list = $this
            ->field('id,title')
            ->where('enable',1)
            ->where('del',0)
            ->where('org_id',$orgId)
            ->select();
        $list = $list?$list:array();
        $count = $count1 = $count2 =$count3 = 0;

        foreach ($list as $k=>$v){
            $query = Db::name('green_record')
                ->where('org_id',$orgId)
                ->where('green_id',$v['id']);
            $list[$k]['count'] = $query
                ->count();
            $count += $list[$k]['count'];
            //本月
            $list[$k]['count1'] = $query
                ->where('create_yyyymm',date('Ym'))
                ->count();
            $count1 += $list[$k]['count1'];
            //本周
            $list[$k]['count2'] = $query
                ->whereIn('create_yyyymmdd',get_week_date())
                ->count();
            $count2 += $list[$k]['count2'];
            //今天
            $list[$k]['count3'] = $query
                ->where('create_yyyymmdd',date('Ymd'))
                ->count();
            $count3 += $list[$k]['count3'];
        }
        return array('list'=>$list,'count'=>$count,'count1'=>$count1,'count2'=>$count2,'count3'=>$count3);

    }

    // 获取网格化时间段
    public function getTimeDaily($orgId){
        $hour = model('Config')->getConfig('org_green_hour',$orgId);
        $hour = $hour?$hour:24; // 默认24小时刷新一次
        $cur = time();
        $s = strtotime(date('Y-m-d'));
        $n = $s + 86400;
        $start = 0;
        $end = 0;
        while (true){
            if($s > $cur){
                $start = $s - $hour*60*60;
                $end = $s;
                if($s > $n){
                    $end = $n;
                }
                break;
            }
            $s = $s + $hour*60*60;
        }
        return ['start' => date('Y-m-d H:i:s',$start),'end' => date('Y-m-d H:i:s',$end)];
    }

}