deviceTypeRule($data,false); if(!$status) return [$status,$msg]; $model = DeviceType::where('id',$data['id'])->first(); $model->title = $data['title'] ?? ''; $model->remark = $data['code'] ?? ''; $model->save(); return [true,'保存成功!']; } public function deviceTypeAdd($data){ list($status,$msg) = $this->deviceTypeRule($data); if(!$status) return [$status,$msg]; $model = new Device(); $model->code = $data['code'] ?? ''; $model->title = $data['title'] ?? ''; $model->save(); return [true,'保存成功!']; } public function deviceTypeDel($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; $bool = Device::where('del_time',0)->where('device_type_id',$data['id'])->exists(); if($bool) return [false,'设备类型已绑定设备']; DeviceType::where('id',$data['id'])->update([ 'del_time' => time() ]); return [true,'删除成功']; } public function deviceTypeList($data){ $model = DeviceType::select('id','code','title') ->where('del_time',0) ->orderBy('id','DESC');; $list = $this->limit($model,'',$data); return [true,$list]; } public function equipmentEdit($data){ list($status,$msg) = $this->equipmentRule($data,false); if(!$status) return [$status,$msg]; $model = Device::where('id',$data['id'])->first(); $model->title = $data['title'] ?? ''; $model->code = $data['code'] ?? ''; $model->remark = $data['remark'] ?? ''; $model->size = $data['size']; $model->gateway_id = $data['gateway_id'] ?? 0; $model->device_type_id = $data['device_type_id'] ?? 0; $model->unit = $data['unit'] ?? ""; $model->save(); return [true,'保存成功!']; } public function equipmentAdd($data){ list($status,$msg) = $this->equipmentRule($data); if(!$status) return [$status,$msg]; $model = new Device(); $model->code = $data['code'] ?? ''; $model->title = $data['title'] ?? ''; $model->remark = $data['remark'] ?? ''; $model->size = $data['size']; $model->gateway_id = $data['gateway_id'] ?? 0; $model->device_type_id = $data['device_type_id'] ?? 0; $model->unit = $data['unit'] ?? ""; $model->save(); return [true,'保存成功!']; } public function equipmentDel($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; $bool = ScreenDevice::whereIn('del_time',0) ->whereIn('device_id',$data['id']) ->exists(); if($bool) return [false,'设备已经绑定仓!']; Device::whereIn('id',$data['id'])->update([ 'del_time' => time() ]); ScreenDevice::whereIn('device_id',$data['id'])->update([ 'del_time' => time() ]); return [true,'删除成功']; } public function equipmentList($data){ $device_map = SystemlService::getLastData(); $model = Device::where('del_time',0) ->select('*') ->orderBy('id','DESC'); if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%'); if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%'); if(! empty($data['gateway_id'])) $model->where('gateway_id', $data['gateway_id']); if(! empty($data['device_type_id'])) $model->where('device_type_id', $data['device_type_id']); if(! empty($data['remark'])) $model->where('remark', 'LIKE', '%'.$data['remark'].'%'); if(! empty($data['screen_id']) || ! empty($data['is_add_to_screen'])){ $id = ScreenDevice::where('del_time',0) ->select('device_id') ->get()->toArray(); if(! empty($data['screen_id'])){ $model->whereIn('id',array_column($id,'device_id')); }else{ $model->whereNotIn('id',array_column($id,'device_id')); } } if(isset($data['is_online'])){ $search = []; foreach ($device_map as $device_no => $value){ if($data['is_online'] && ! empty($value)){ $search[] = $device_no; }elseif(! $data['is_online'] && empty($value)){ $search[] = $device_no; } } $model->whereIn('code',$search); } if(isset($data['is_exception'])){ $search = []; foreach ($device_map as $device_no => $value){ if($data['is_exception'] && ! empty($value)){ if(in_array($value['device_type_id'],DeviceType::$node_two)){ //传感器类 if(in_array($value['data_point_name'],DeviceType::$normal)) $search[] = $device_no; }else{ $search[] = $device_no; } }elseif(! $data['is_exception']){ if(empty($value)){ $search[] = $device_no; }else{ if(in_array($value['device_type_id'],DeviceType::$node_two)){ //传感器类 if(in_array($value['data_point_name'],DeviceType::$abnormal)) $search[] = $device_no; } } } } $model->whereIn('code',$search); } $list = $this->limit($model,'',$data); $list = $this->fillData($list,$device_map); return [true,$list]; } public function fillData($data,$device_map){ if(empty($data['data'])) return $data; $gatewayMap = Gateway::whereIn('id',array_unique(array_column($data['data'],'gateway_id'))) ->pluck('code','id') ->toArray(); $deviceTypeMap = DeviceType::whereIn('id',array_unique(array_column($data['data'],'device_type_id'))) ->pluck('title','id') ->toArray(); $message = $device_map; foreach ($data['data'] as $key => $value){ $data['data'][$key]['gateway'] = $gatewayMap[$value['gateway_id']] ?? ''; $data['data'][$key]['device_type'] = $deviceTypeMap[$value['device_type_id']] ?? ''; $is_online = $is_exception = 0; if(! empty($message[$value['code']])){ $is_online = 1; $tmp = $message[$value['code']]; if(in_array($value['device_type_id'],DeviceType::$node_two)){ //传感器类 if(in_array($tmp['data_point_name'],DeviceType::$normal)) $is_exception = 1; }else{ $is_exception = 1; } } $data['data'][$key]['is_online'] = $is_online; $data['data'][$key]['is_exception'] = $is_exception; } return $data; } public function equipmentRule($data,$is_add = true){ if(empty($data['title'])) return [false,'设备名称不能为空']; if(empty($data['code'])) return [false,'设备编码不能为空']; if(empty($data['device_type_id'])) return [false,'设备类型不能为空']; if(empty($data['gateway_id'])) return [false,'网关不能为空']; if($is_add){ $bool = Device::whereRaw("(code = '{$data['code']}' OR title = '{$data['title']}')") ->where('del_time',0) ->exists(); }else{ if(empty($data['id'])) return [false,'id不能为空!']; $bool = Device::whereRaw("(code = '{$data['code']}' OR title = '{$data['title']}')") ->where('id','<>',$data['id']) ->where('del_time',0) ->exists(); } if($bool) return [false,'设备编码或名称不能重复']; return [true,'']; } public function deviceTypeRule($data,$is_add = true){ if(empty($data['title'])) return [false,'设备类型名称不能为空']; if(empty($data['code'])) return [false,'设备类型编码不能为空']; if($is_add){ $bool = Device::whereRaw("code = '{$data['code']}' OR title = '{$data['title']}'") ->where('del_time',0) ->exists(); }else{ if(empty($data['id'])) return [false,'id不能为空!']; $bool = Device::whereRaw("code = '{$data['code']}' OR title = '{$data['title']}'") ->where('id','<>',$data['id']) ->where('del_time',0) ->exists(); } if($bool) return [false,'设备类型编码或名称不能重复']; return [true,'']; } }