| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 | <?phpnamespace app\common\model;use app\common\util\AppAuth;use think\Db;class Device extends Base {    public function updates(){        $data = request()->post();        $data['org_id'] = cur_org_id();        $validate = new \app\common\validate\Device();        $result = $validate->check($data,[]);        if(true !== $result){            $this->error = $validate->getError();            return false;        }        if(!$data['device_user']){            $this->error = '维修人员不能为空';            return false;        }        $data['imgs']=empty($data['imgs'])?"":implode(',',$data['imgs']);        //修改操作        if($data['id'] > 0){            Db::startTrans();            try {                $data['update_time'] = getTime();                $addDevice=$this::update($data,['id'=>$data['id']]);                if(!$addDevice){                    exception('编辑失败');                }                $newDeviceUser=explode(',',$data['device_user']);                $deviceUser=$this->findUser($data['id']);                $oldDeviceUser = [];                foreach ($deviceUser as $k=>$v){                    $oldDeviceUser[]=$v['user_id'];                }                $usernew = array_diff($newDeviceUser,$oldDeviceUser);                $userdef = array_diff($oldDeviceUser,$newDeviceUser);                if($userdef){                    $delDeviceUser=Db::name('device_user')->where('device_id',$data['id'])->whereIn('user_id',$userdef)->delete();                    if(!$delDeviceUser){                        exception('编辑维修人员失败');                    }                }                if($usernew){                    $buser = array();                    foreach ($usernew as $k=>$v){                        $buser[] = array(                            'device_id' => $data['id'],                            'user_id' => $v                        );                    }                    $saveDeviceUser=Db::name('device_user')->insertAll($buser);                    if(!$saveDeviceUser){                        exception('编辑维修人员失败');                    }                }                Db::commit();                return true;            } catch (\Exception $e) {                // 回滚事务                $this->error = $e->getMessage();                Db::rollback();                return false;            }        }else{            //添加操作            Db::startTrans();            try {                unset($data['id']);                $data['create_time'] = getTime();                $addres=$this->save($data);                if(!$addres){                    exception('操作失败');                }                $addDeviceID = $this->id;                $deviceUser=explode(',',$data['device_user']);                foreach ($deviceUser as $k=>$v){                    $data=[                        'user_id'=>$v,                        'device_id'=>$addDeviceID,                    ];                    $addDeviceUser=Db::name('device_user')->insert($data);                    if(!$addDeviceUser){                        exception('操作失败');                    }                }                Db::commit();                return true;            } catch (\Exception $e) {                // 回滚事务                $this->error = $e->getMessage();                Db::rollback();                return false;            }        }    }    //获取维护用户    public function findUser($deviceId){        $ret=Db::name('device_user')->where('device_id',$deviceId)->select();        return $ret;    }    public function sweepCode($code,$userId,$orgId,$taskId=0,$deviceId=0) {        $codeArr = get_qrcode_arr($code);        if(!$codeArr){            $this->error = '设备不存在';            return false;        }        if($codeArr['type'] != 'device'){            $this->error = '设备不存在';            return false;        }        if($codeArr['ucode'] != config('app.ucode')){            $this->error = '设备不存在';            return false;        }        if($taskId > 0 ){            if($codeArr['id'] != $deviceId){                $this->error = '设备不存在';                return false;            }            $task = Db::name('device_task')                ->where('id',$taskId)                ->where('del',0)                ->where('org_id',$orgId)                ->find();            if(!$task){                $this->error = '任务不存在';                return false;            }            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;            }//            $taskAddr = Db::name('device_task_addr')//                ->where('task_id',$task['id'])//                ->column('device_id');//            $taskAddr = $taskAddr?$taskAddr:[];//            if(!in_array($codeArr['id'],$taskAddr)){//                $this->error = '地点不正确';//                return false;//            }            $workerAuth =1;        }else{            $device =Db::name('device_user')                ->where('device_id',$codeArr['id'])                ->where('user_id',$userId)                ->find();            $workerAuth = $device?1:0;        }        $map[] = ['org_id','=',$orgId];        $map[] = ['id','=',$codeArr['id']];        $map[] = ['enable','=',1];        $map[] = ['del','=',0];        $device = Db::name('device')            ->field('del,enable',true)            ->where($map)            ->find();        if(!$device){            $this->error = '设备不存在';            return false;        }        $lookAllAuth = (new Roles())->getAppAuth($userId,AppAuth::DEVICE_LOOK_ALL_AUTH);        $ret['device_id'] = $codeArr['id'];        $ret['worker_auth'] = $workerAuth;        $ret['look_all_auth'] = $lookAllAuth?1:0;        return $ret;    }    public function deviceInfo($id,$orgId){        $map[] = ['org_id','=',$orgId];        $map[] = ['id','=',$id];        $map[] = ['enable','=',1];        $map[] = ['del','=',0];        $device = Db::name('device')            ->field('del,enable',true)            ->where($map)            ->find();        if(!$device){            $this->error = '设备不存在';            return false;        }        $formId=empty($device['device_form']) ? [] : explode(',',$device['device_form']);        $deviceForm = Db::name('device_form')            ->field('del,enable',true)            ->where('enable',1)            ->where('del',0)            ->whereIn('id',$formId)            ->select();        $device['device_form'] = $deviceForm;        return $device;    }    /**     * 设备台账工作量统计     *     * @author wst     * @date   2021/4/13 8:38     */    public function DeviceWork($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('device_record')                ->where('org_id',$orgId)                ->where('device_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);    }    /**     * 根据设备id获取维修人员列表     *     * @author wst     * @date   2021/9/6 11:27     * @return array     */    public function getDeviceUserList($id){        $list  = Db::name('device_user')            ->where('device_id',$id)            ->select();        $user = [];        foreach ($list as $k=>$v){            $user[]=(string)$v['user_id'];        }        return $user;    }    /**     * 根据设备id获取维修人员姓名     *     * @author wst     * @date   2021/9/6 11:27     * @return array     */    public function getByIdUserName($id){        $user_name=Db::name('device_user')            ->alias('du')            ->join('user u','u.id=du.user_id')            ->field('u.real_name')            ->where('du.device_id',$id)            ->select();        $name=[];        foreach ($user_name as $kk=>$vv){            $name[$kk]=$vv['real_name'];        }        return $name;    }    public function taskAddrAll($taskId){        $info = Db::name('device_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('device_task_user dtu','dtu.user_id=u.id')            ->where('dtu.task_id',$info['id'])            ->where('u.del',0)            ->where('u.enable',1)            ->select();        $info['device'] = Db::name('device')            ->alias('d')            ->field('d.id,d.title')            ->join('device_task_addr dta','dta.device_id=d.id')            ->where('dta.task_id',$info['id'])            ->where('d.del',0)            ->where('d.enable',1)            ->select();        foreach ($info['device'] as $k=>$v){            $record = Db::name('device_record')                ->where('task_id',$taskId)                ->where('device_id',$v['id'])                ->find();            $info['device'][$k]['status'] = $record ? 1 : 0;            $info['device'][$k]['device_record_id'] = $record ? $record['id'] : 0;        }        return $info;    }    public function myTaskRecord($type,$page,$size,$userId,$orgId,$status){//        $etime = date('Y-m-d H:i:s',time() + 12*60*60);        $record = [];        if($type == 1){            $record = Db::name('device_task_user')                ->alias('a')                ->join('device_task b','a.task_id = b.id')                ->join('task t','t.bus_id = b.id')                ->where('b.del',0)                ->where('t.type',4)//                ->where('b.start_time','<',$etime)                ->where('a.user_id',$userId)                ->where('b.org_id',$orgId)                ->where('b.status','in',[0,1])                ->field('b.id,b.title,b.start_time,b.end_time,b.status')                ->order('b.start_time desc,b.id desc')                ->distinct(true)                ->page($page,$size)                ->select();        }else if($type == 2){            if($status != ''){                $map[] = ['b.status','=',$status];            }else{                $map[] = ['b.status','in',[2,3]];            }            $record = Db::name('device_task_user')                ->alias('a')                ->join('device_task b','a.task_id = b.id')                ->where('b.del',0)//                ->where('b.start_time','<',$etime)                ->where('a.user_id',$userId)                ->where('b.org_id',$orgId)                ->where($map)                ->field('b.id,b.title,b.start_time,b.end_time,b.status')                ->order('b.status desc,b.start_time desc,b.id desc')                ->page($page,$size)                ->distinct(true)                ->select();        }        foreach ($record as $k=>$v){            $info = Db::name('device_task_delay')                ->where('task_id',$v['id'])                ->where('status',1)                ->field('end_time')                ->order('id desc')                ->find();            if($info){                $record[$k]['end_time'] = $info['end_time'];            }        }        return $record?$record:[];    }    public function taskCount($userId,$orgId){        $record = Db::name('device_task_user')            ->alias('a')            ->join('device_task b','a.task_id = b.id')            ->join('task t','t.bus_id = b.id')            ->where('b.del',0)            ->where('t.type',4)//                ->where('b.start_time','<',$etime)            ->where('a.user_id',$userId)            ->where('b.org_id',$orgId)            ->where('b.status','in',[0,1])            ->field('b.id,b.title,b.start_time,b.end_time,b.status')            ->order('b.start_time desc,b.id desc')            ->distinct(true)            ->count();        return $record?$record:0;    }}
 |