screenRule($data,false); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); $model = Screen::where('id',$data['id'])->first(); $model->code = $data['code']; $model->title = $data['title']; $model->area_id = $data['area_id']; $model->size = $data['size']; $model->type = $data['type']; $model->remark = $data['remark']; $model->save(); ScreenGateway::where('screen_id',$data['id'])->update(['del_time' => time()]); if(isset($data['gateway_id'])){ if(! is_array($data['gateway_id'])) $data['gateway_id'] = [$data['gateway_id']]; $insert = []; foreach ($data['gateway_id'] as $val){ $insert[] = [ 'screen_id' => $model->id, 'gateway_id' => $val, 'crt_time' => time() ]; } ScreenGateway::insert($insert); } DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'保存成功!']; } public function add($data){ list($status,$msg) = $this->screenRule($data); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); $model = new Screen(); $model->code = $data['code']; $model->title = $data['title']; $model->area_id = $data['area_id']; $model->size = $data['size']; $model->type = $data['type']; $model->remark = $data['remark']; $model->save(); if(isset($data['gateway_id'])){ if(! is_array($data['gateway_id'])) $data['gateway_id'] = [$data['gateway_id']]; $insert = []; foreach ($data['gateway_id'] as $val){ $insert[] = [ 'screen_id' => $model->id, 'gateway_id' => $val, 'crt_time' => time() ]; } ScreenGateway::insert($insert); } DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'保存成功!']; } public function del($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; $bool = ScreenDevice::where('del_time',0)->where('screen_id',$data['id'])->exists(); if($bool) return [false,'仓已绑定设备']; $bool = ScreenGateway::where('del_time',0)->where('screen_id',$data['id'])->exists(); if($bool) return [false,'仓已绑定网关']; Screen::where('id',$data['id'])->update([ 'del_time' => time() ]); return [true,'删除成功']; } public function orderList($data){ $model = Screen::where('del_time',0) ->select('*') ->orderBy('id','desc'); if(! empty($data['type'])) $model->where('type',$data['type']); if(! empty($data['area_id'])) $model->where('area_id', $data['area_id']); if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%'); if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%'); if(! empty($data['device_name'])) { $device = Device::where('title', 'LIKE', '%'.$data['title'].'%') ->where('del_time',0) ->select('id')->get()->toArray(); $screen = ScreenDevice::whereIn('device_id',array_column($device,'id')) ->where('del_time',0) ->select('screen_id')->get()->toArray(); $model->whereIn('id',array_column($screen,'screen_id')); } $list = $this->limit($model,'',$data); return [200,$list]; } public function screenRule($data,$is_add = true){ if(empty($data['title'])) return [false,'名称不能为空!']; if(empty($data['code'])) return [false,'编码不能为空!']; if(empty($data['area_id'])) return [false,'区域不能为空']; if(empty($data['type'])) return [false,'仓类型不能为空']; if($is_add){ $bool = Screen::whereRaw("(binary code = '{$data['code']}' OR title = '{$data['title']}')") ->where('del_time',0) ->exists(); }else{ if(empty($data['id'])) return [false,'id不能为空!']; $bool = Screen::whereRaw("(binary code = '{$data['code']}' OR title = '{$data['title']}')") ->where('id','<>',$data['id']) ->where('del_time',0) ->exists(); } if($bool) return [false,'编码或名称不能重复']; return [true,$data]; } public function screenDeviceList($data){ if(empty($data['screen_id'])) return [false,'仓ID不能为空']; $device = ScreenDevice::from('screen_device as a') ->leftJoin('device as b','b.id','a.device_id') ->where('a.screen_id',$data['screen_id']) ->select('a.id','b.id as device_id','b.title','b.code','b.gateway_id','b.device_type_id') ->get()->toArray(); return [true,$device]; } public function screenDevice($data){ list($status,$msg) = $this->screenDeviceRule($data); if(! $status) return [false,$msg]; $insert = []; foreach ($data['device_id'] as $val){ $insert[] = [ 'screen_id' => $data['screen_id'], 'device_id' => $val, 'crt_time' => time() ]; } ScreenDevice::insert($insert); return [true,'']; } public function screenDeviceRule($data){ if(empty($data['screen_id'])) return [false,'请选择仓']; if(empty($data['device_id'])) return [false,'请选择设备']; $bool = ScreenDevice::where('del_time',0) ->where('screen_id','<>',$data['screen_id']) ->whereIn('device_id',$data['device_id']) ->exists(); if($bool) return [false, '设备已经绑定其他仓!']; } public function screenRemoveDevice($data){ if(empty($data['id'])) return [false,'请选择移除的数据']; ScreenDevice::where('id',$data['id'])->update(['del_time' => time()]); return [true,'']; } public function screenDeviceDataRealTimeList($data){ if(empty($data['id'])) return [false,'请选择仓或台']; //获取仓或台的设备ID $device = ScreenDevice::where('del_time',0) ->where('screen_id',$data['id']) ->select('device_id') ->get()->toArray(); $device = array_column($device,'device_id'); //设备的分组信息 按照设备类型 $device = Device::whereIn('id',$device) ->select('code','device_type_id') ->get()->toArray(); $nodeOne = $nodeTwo = $nodeThree = []; foreach ($device as $value){ if($value['device_type_id'] == 3){ $nodeOne[] = $value['code']; }elseif(in_array($value['device_type_id'],[1,2,7])){ $nodeTwo[] = $value['code']; }else{ $nodeThree[] = $value['code']; } } $posts_a = SystemL::whereIn('device_no', $nodeOne) ->select('data_point_name','value') ->orderBy('id','desc') ->limit(10) ->get()->toArray(); $posts_b = SystemL::whereIn('device_no', $nodeTwo) ->select('data_point_name','value') ->orderBy('id','desc') ->limit(10) ->get()->toArray(); $posts_c = SystemL::whereIn('device_no', $nodeThree) ->select('data_point_name','value') ->orderBy('id','desc') ->limit(10) ->get()->toArray(); return [true,['node_one' => $posts_a,'node_two'=>$posts_b,'node_three'=>$posts_c]]; } }