<?php namespace App\Http\Controllers; use App\Http\Resources\PermissionResource; use App\Http\Requests\UsersRequest; use App\Http\Resources\UserResource; use App\Laravue\JsonResponse; use App\Laravue\Models\Device; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Redis; use Validator; class DevicesController extends Controller { //设备列表 /* * 设备类型 * type 不传默认是第一个 * @type 设备类型id * */ public function devicelist(Request $request) { $type = $request->input('type');//设备类型id $pagenNum = $request->input('page') - 1;//页数 $limit = $request->input('limit'); if ($pagenNum === '' || $limit == '') { return $this->jsonErrorData(105, '页数或limit不能为空'); } return $this->jsonSuccessData($this->whertype($type == '' ? '1' : $type, $pagenNum, $limit)); } //用户设备列表 /* * 设备类型 * type 不传默认是第一个 * @type 设备类型id * */ public function userdevicelist(Request $request) { $type = $request->input('type');//设备类型id $pagenNum = $request->input('page') - 1;//页数 $limit = $request->input('limit'); if ($pagenNum === '' || $limit == '') { return $this->jsonErrorData(105, '页数或limit不能为空'); } return $this->jsonSuccessData($this->userdevice($type == '' ? '1' : $type, $pagenNum, $limit)); } /* * 删除设备 * type 1==逻辑删除 * type 2== 物理删除 * */ public function deletedecice(Request $request) { $type = (int)$request->input('type'); $deviceid = (int)$request->input('deviceid');//设备id if ($type == '' || $deviceid == '') { return $this->jsonErrorData(105, '参数不能为空'); } if ($type == 1) {//逻辑删除 $dete = Device::where('id', '=', $deviceid) ->value('delete'); if ($dete != 1) { $update = Device::where('id', '=', $deviceid) ->update(['delete' => 1]); return $this->jsonSuccessData($update); } else { return $this->jsonErrorData(105, '数据异常'); } } else if ($type == 2) {//物理删除 $dete = Device::where('id', '=', $deviceid) ->value('delete'); if ($dete != 2) { $delete = Device::where('id', '=', $deviceid) ->delete(); return $this->jsonSuccessData($delete); } else { return $this->jsonErrorData(105, '数据异常'); } } } //返回逻辑删除的设备和修复设备 public function physicsdelete(Request $request) { $deviceid = $request->input('deviceid'); $databadevice = DB::table('device'); if ($_POST) { $up = $databadevice ->where('id', '=', $deviceid) ->update(['delete' => 2]); return $this->jsonSuccessData($up); } else { //返回物理删除设备列表 $type = (int)$request->input('type');//设备类型 $pagenNum = $request->input('page') - 1;//页数 $limit = $request->input('limit');//条数 if ($pagenNum === '' || $limit == '') { return $this->jsonErrorData(105, '页数或limit不能为空'); } $devicelist = $databadevice ->where('dtype', '=', $type == '' ? '1' : $type) ->where('delete', '=', '1')//设备逻辑删除状态 ->join('device_type as dy', "device.dtype", '=', 'dy.tid') ->join('gas as g', "device.status", '=', 'g.id') ->select('dy.tname', 'g.gas', 'device.*') ->orderBy('device.id', 'desc') ->offset($pagenNum) ->limit($limit) ->get()->toArray(); return $this->jsonSuccessData($devicelist); } } //添加设备 public function adddevice(Request $request) { //验证用户提交表单 $validator = Validator::make($request->all(), $this->getValidationRulesdevice(false)); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 403); } $type = new Device(); return $this->jsonSuccessData($type->adddevice($request->all())); } //编辑设备 public function updatedevice(Request $request) { $deid = $request->input('deid'); $data = $request->all(); if (is_null($deid)) { return $this->jsonErrorData(105, '设备ID不能为空'); } if ($_POST) { $validator = Validator::make($request->all(), $this->getValidationRulesupdevice(false)); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 403); } foreach ($data as $k => $v) { if ($k == 'deid') { unset($data[$k]); } } return $this->jsonSuccessData(Device::where('id', '=', $deid)->update($data)); } else { $devi = DB::table('device as de') ->where('de.id', '=', $deid) ->leftjoin('device_type as dt', 'de.dtype', '=', 'dt.tid') ->leftjoin('gas', 'de.status', '=', 'gas.id') ->leftjoin('danwei as da', 'de.devicemonad', '=', 'da.id') ->select('dt.*', 'gas.*', 'da.*', 'de.*') ->first(); return $this->jsonSuccessData($devi); } } //返回设备类型和单位和介质 public function devicetype() { $gas = DB::table('gas')->get(); $danwei = DB::table('danwei')->get(); $devicetypecount = DB::table('device_type as t') ->leftjoin('device as d', 'd.dtype', '=', 't.tid') ->selectRaw('t.*,count(d.id) as counnum') ->groupBy('t.tid') ->get(); return $this->jsonSuccessData(['devicetype' => $devicetypecount, 'gas' => $gas, 'danwei' => $danwei]); } //返回设备列表 private function whertype($type, $pagenNum, $limit): array { $databadevice = DB::table('device'); $devicelist = $databadevice ->where('dtype', '=', $type) //->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid') ->leftjoin('gas as g', "device.status", '=', 'g.id') ->leftjoin('status as p', "device.devicepolice", '=', 'p.id') ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name') ->orderBy('device.id', 'desc') ->offset($pagenNum) ->limit($limit) ->get()->toArray(); $count = $databadevice ->where('dtype', '=', $type) //->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->count(); return ['devicelist' => $devicelist, 'count' => $count]; } //返回用户设备列表 private function userdevice($type, $pagenNum, $limit): array { $databadevice = DB::table('device'); $devicelist = $databadevice ->where('dtype', '=', $type) ->where('uid', '=', Auth::id()) //->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid') ->leftjoin('gas as g', "device.status", '=', 'g.id') ->leftjoin('status as p', "device.devicepolice", '=', 'p.id') ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name') ->orderBy('device.id', 'desc') ->offset($pagenNum) ->limit($limit) ->get()->toArray(); $count = $databadevice ->where('dtype', '=', $type) ->where('uid', '=', Auth::id()) // ->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->count(); return ['devicelist' => $devicelist, 'count' => $count]; } private function deviceDataSearchData($devicenum, $pagenNum, $limit): array { $databadevice = DB::table('device'); $devicelist = $databadevice ->where('devicenum', '=', $devicenum) //->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid') ->leftjoin('gas as g', "device.status", '=', 'g.id') ->leftjoin('status as p', "device.devicepolice", '=', 'p.id') ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name') ->orderBy('device.id', 'desc') ->offset($pagenNum) ->limit($limit) ->get()->toArray(); $count = $databadevice ->where('dtype', '=', $devicenum) //->where('delete','=','2')//设备不是删除状态 //->where('devicestatus','=','1')// ->count(); return ['devicelist' => $devicelist, 'count' => $count]; } //批量上传设备 public function batchdevice() { } //获取设备详情信息 public function deviceDataInfo($id) { $devicedata = Device::where('device.id', '=', $id) ->leftjoin('contactsuser as c', 'c.contactsid', '=', 'device.contactsid') ->select('c.*', 'device.deviceuuid', 'device.devicelinkman', 'device.devicephone', 'device.devicecoord') ->get(); $devicedatainfo = Device::where('id', '=', $id) ->select('deviceuuid', 'devicelinkman', 'devicephone', 'devicecoord') ->get(); return $this->jsonSuccessData(['devicedata' => $devicedata, 'devicedatainfo' => $devicedatainfo]); } //搜索设备账号 public function deviceDataSearch(Request $request) { $data = $request->input('deviceName'); $pagenNum = $request->input('page') - 1;//页数 $limit = $request->input('limit'); if ($pagenNum === '' || $limit == '' || $data == '') { return $this->jsonErrorData(105, '请求参数不能为空'); } return $this->jsonSuccessData($this->deviceDataSearchData($data, $pagenNum, $limit)); } //推送获取数据监测数据 public function equipment() { $dalen = Redis::llen('Devicesdata');//返回队列长度 // $num = round($dalen / 2); $data = []; if ($dalen > 0) { for ($i = 0; $i < $dalen; $i++) { array_push($data, unserialize(Redis::lpop('Devicesdata'))); } } if ($data != []) { $this->devicemkdir($data); //写入文件 } $devicelistopen = $this->devicelistopen(); if($devicelistopen != 105){ return $this->jsonSuccessData($devicelistopen); }else{ return $this->jsonErrorData(105,'暂无数据'); } } //历史数据查询 public function detedevice(Request $request){ $dete = $request->input('dete'); $devicetime = $this->devicetime($dete); if($devicetime != 105){ return $this->jsonSuccessData($devicetime); }else{ return $this->jsonErrorData(105,'暂无数据'); } } //返回设备当前报警 public function police() { $data = DB::table('reportpolice as r') //->where('r.status', '=', '1') ->join('status as s', 'r.policestatus', '=', 's.id') ->select('r.*', 's.status_name') ->get(); return $this->jsonSuccessData($data); } //返回设备废纸篓数量 public function deviceBasket() { return $this->jsonSuccessData(DB::table('device')->where('delete', '=', '1')->count()); } //返回设备废纸篓和禁用设备 public function deviceBasketList() { $paper = DB::table('device')->where('delete', '=', '1')->get()->toArray(); return $this->jsonSuccessData($paper); } public function deviceDelete(Request $request) { $id = $request->input('id'); $type = $request->input('type'); if ($type == 1) {//丢弃废纸篓 return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 1, 'devicestatus' => 6])); } else { return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['devicestatus' => 6])); } } public function UpPaperBasket($id) { return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 2, 'devicestatus' => 1])); } public function addClassify($data) { //添加分类 return $this->jsonSuccessData(DB::table('device_type')->insertGetId(['tname' => $data])); } public function delteClassify($id) { //删除分类 return $this->jsonSuccessData(DB::table('device_type')->where('tid', '=', $id)->delete()); } /** * @param bool $isNew * @return array * 用户添加设备表单验证 */ private function getValidationRulesdevice($isNew = true) { return [ 'devicenum' => 'required|between:2,25|unique:device,devicenum',//设备编号 'username' => 'required|unique:device,username|max:40',//设备名称 'devicephone' => 'sometimes|required|regex:/^1[3465789]\d{9}$/|max:11',//联系人手机号 'devicelinkman' => 'sometimes|required|max:15', 'dtype' => 'required', 'status' => 'required', 'devicemonad' => 'required', 'deviceremark' => 'sometimes|required|max:15', 'devicecoord' => 'sometimes|required', 'contactsid' => 'sometimes|required',//绑定联系人id 'deviceinfo' => 'sometimes|required', 'devicenumber' => 'required|unique:device,devicenumber|max:40' ]; } //更新设备列表 private function getValidationRulesupdevice($isNew = true) { return [ 'username' => 'sometimes|required|unique:device,username|max:40',//设备名称 'devicephone' => 'sometimes|required|regex:/^1[3465789]\d{9}$/|max:11',//联系人手机号 'devicelinkman' => 'sometimes|required|max:15', 'dtype' => 'sometimes|required', 'status' => 'sometimes|required', 'devicemonad' => 'sometimes|required', 'deviceremark' => 'sometimes|required|max:15',//备注 'devicecoord' => 'sometimes|required', 'contactsid' => 'sometimes|required',//绑定联系人id 'deviceinfo' => 'sometimes|required', 'devicenumber' => 'sometimes|required|unique:device,devicenumber|max:40' ]; } private function devicemkdir($data) { $path = public_path().'/device/' . date('Y-m-d' . '/'); if (!is_dir($path)){ mkdir($path); } file_put_contents($path . "devicelistdata.text", json_encode($data) . PHP_EOL, FILE_APPEND); $this->devicelistopen($path); } private function devicelistopen() :array { $path = public_path().'/device/' . date('Y-m-d' . '/'); if (is_file( $path . 'devicelistdata.text')) { $myfile = file_get_contents($path . 'devicelistdata.text'); $exp = explode("\n", $myfile); $datadevice = []; foreach (array_filter($exp) as $key => $vel) { $newstring = str_replace('[', '', $vel); $newstring1 = str_replace(']', '', $newstring); array_push($datadevice, json_decode($newstring1, true)); } return $datadevice; }else{ return 105; } } private function devicetime($dete) { $path = public_path().'/device/' . $dete . '/'; if (is_file( $path . 'devicelistdata.text')) { $myfile = file_get_contents($path . 'devicelistdata.text'); $exp = explode("\n", $myfile); $datadevice = []; foreach (array_filter($exp) as $key => $vel) { $newstring = str_replace('[', '', $vel); $newstring1 = str_replace(']', '', $newstring); array_push($datadevice, json_decode($newstring1, true)); } return $datadevice; }else{ return 105; } } }