DevicesController.php 29.1 KB
Newer Older
冯超鹏's avatar
冯超鹏 committed
1 2 3 4 5 6 7 8 9 10 11 12
<?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;
冯超鹏's avatar
冯超鹏 committed
13
use Illuminate\Support\Facades\Auth;
14
use Illuminate\Support\Facades\Config;
冯超鹏's avatar
冯超鹏 committed
15 16 17 18
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Redis;
use Validator;
冯超鹏's avatar
冯超鹏 committed
19

冯超鹏's avatar
冯超鹏 committed
20 21 22 23 24 25 26 27
class DevicesController extends Controller
{
    //设备列表
    /*
     * 设备类型
     * type 不传默认是第一个
     * @type 设备类型id
     * */
冯超鹏's avatar
冯超鹏 committed
28 29
    public function devicelist(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
30 31
        $type = $request->input('type');//设备类型id
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
32
        $pagenNum = $limit * ($request->input('page') - 1);//页数
冯超鹏's avatar
冯超鹏 committed
33 34
        if ($pagenNum === '' || $limit == '') {
            return $this->jsonErrorData(105, '页数或limit不能为空');
冯超鹏's avatar
冯超鹏 committed
35
        }
冯超鹏's avatar
冯超鹏 committed
36
        return $this->jsonSuccessData($this->whertype($type == '' ? '1' : $type, $pagenNum, $limit));
冯超鹏's avatar
冯超鹏 committed
37
    }
冯超鹏's avatar
冯超鹏 committed
38 39 40 41 42 43 44

    //用户设备列表
    /*
     * 设备类型
     * type 不传默认是第一个
     * @type 设备类型id
     * */
冯超鹏's avatar
冯超鹏 committed
45 46
    public function userdevicelist(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
47 48
        $type = $request->input('type');//设备类型id
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
49
        $pagenNum = $limit * ($request->input('page') - 1);//页数
冯超鹏's avatar
冯超鹏 committed
50 51
        if ($pagenNum === '' || $limit == '') {
            return $this->jsonErrorData(105, '页数或limit不能为空');
冯超鹏's avatar
冯超鹏 committed
52
        }
冯超鹏's avatar
冯超鹏 committed
53
        return $this->jsonSuccessData($this->userdevice($type == '' ? '1' : $type, $pagenNum, $limit));
冯超鹏's avatar
冯超鹏 committed
54
    }
冯超鹏's avatar
冯超鹏 committed
55

冯超鹏's avatar
冯超鹏 committed
56 57 58 59 60
    /*
     * 删除设备
     * type 1==逻辑删除
     * type 2== 物理删除
     * */
冯超鹏's avatar
冯超鹏 committed
61 62 63
    public function deletedecice(Request $request)
    {
        $type = (int)$request->input('type');
冯超鹏's avatar
冯超鹏 committed
64
        $deviceid = (int)$request->input('deviceid');//设备id
冯超鹏's avatar
冯超鹏 committed
65 66
        if ($type == '' || $deviceid == '') {
            return $this->jsonErrorData(105, '参数不能为空');
冯超鹏's avatar
冯超鹏 committed
67
        }
冯超鹏's avatar
冯超鹏 committed
68 69
        if ($type == 1) {//逻辑删除
            $dete = Device::where('id', '=', $deviceid)
冯超鹏's avatar
冯超鹏 committed
70
                ->value('delete');
冯超鹏's avatar
冯超鹏 committed
71
            if ($dete != 1) {
72
                $this->timeline('设备放到废纸篓[设备id' . $deviceid . ']');
冯超鹏's avatar
冯超鹏 committed
73 74
                $update = Device::where('id', '=', $deviceid)
                    ->update(['delete' => 1]);
冯超鹏's avatar
冯超鹏 committed
75
                return $this->jsonSuccessData($update);
冯超鹏's avatar
冯超鹏 committed
76 77
            } else {
                return $this->jsonErrorData(105, '数据异常');
冯超鹏's avatar
冯超鹏 committed
78 79
            }

冯超鹏's avatar
冯超鹏 committed
80 81
        } else if ($type == 2) {//物理删除
            $dete = Device::where('id', '=', $deviceid)
冯超鹏's avatar
冯超鹏 committed
82
                ->value('delete');
冯超鹏's avatar
冯超鹏 committed
83
            if ($dete != 2) {
84
                $this->timeline('删除了设备');
冯超鹏's avatar
冯超鹏 committed
85
                $delete = Device::where('id', '=', $deviceid)
冯超鹏's avatar
冯超鹏 committed
86 87
                    ->delete();
                return $this->jsonSuccessData($delete);
冯超鹏's avatar
冯超鹏 committed
88 89
            } else {
                return $this->jsonErrorData(105, '数据异常');
冯超鹏's avatar
冯超鹏 committed
90 91 92 93
            }
        }
    }

冯超鹏's avatar
冯超鹏 committed
94
    //返回逻辑删除的设备和修复设备
冯超鹏's avatar
冯超鹏 committed
95 96
    public function physicsdelete(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
97
        $deviceid = $request->input('deviceid');
冯超鹏's avatar
冯超鹏 committed
98
        if ($_POST) {
冯超鹏's avatar
冯超鹏 committed
99
            $up = DB::table('devicepoliceinfo')
冯超鹏's avatar
冯超鹏 committed
100 101
                ->where('id', '=', $deviceid)
                ->update(['delete' => 2]);
冯超鹏's avatar
冯超鹏 committed
102
            return $this->jsonSuccessData($up);
冯超鹏's avatar
冯超鹏 committed
103
        } else {
冯超鹏's avatar
冯超鹏 committed
104
            //返回物理删除设备列表
冯超鹏's avatar
冯超鹏 committed
105
            $type = (int)$request->input('type');//设备类型
冯超鹏's avatar
冯超鹏 committed
106
            $limit = $request->input('limit');//条数
Administrator's avatar
Administrator committed
107
            $pagenNum = $limit * ($request->input('page') - 1);//页数
冯超鹏's avatar
冯超鹏 committed
108 109
            if ($pagenNum === '' || $limit == '') {
                return $this->jsonErrorData(105, '页数或limit不能为空');
冯超鹏's avatar
冯超鹏 committed
110
            }
Administrator's avatar
Administrator committed
111
            $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
112 113 114 115 116
                ->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.*')
冯超鹏's avatar
冯超鹏 committed
117 118 119 120 121 122 123 124 125
                ->orderBy('device.id', 'desc')
                ->offset($pagenNum)
                ->limit($limit)
                ->get()->toArray();
            return $this->jsonSuccessData($devicelist);
        }

    }

冯超鹏's avatar
冯超鹏 committed
126
    //添加设备
冯超鹏's avatar
冯超鹏 committed
127 128
    public function adddevice(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
129
        //验证用户提交表单
Administrator's avatar
Administrator committed
130 131
        $addDeviceData = $request->all();
        $validator = Validator::make($addDeviceData, $this->getValidationRulesdevice(false));
冯超鹏's avatar
冯超鹏 committed
132 133 134
        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 403);
        }
Administrator's avatar
Administrator committed
135 136 137 138 139
        foreach ($addDeviceData as $k => $v) {
            if ($k == 'isadmin') {
                unset($addDeviceData[$k]);
            }
        }
冯超鹏's avatar
冯超鹏 committed
140
        $type = new Device();
141 142
        $this->timeline($this->isadmin() == 1 ? '管理员添加设备[设备号' . $request->input('devicenum') . ']' : '用户添加设备[设备编号' . $request->input('devicenum') . ']');
        return $this->jsonSuccessData($type->adddevice($addDeviceData, $this->isadmin() == 1 ? 1 : 2));
Administrator's avatar
Administrator committed
143

冯超鹏's avatar
冯超鹏 committed
144
    }
冯超鹏's avatar
冯超鹏 committed
145 146


冯超鹏's avatar
冯超鹏 committed
147 148 149
    //编辑设备
    public function updatedevice(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
150 151
        $deid = $request->input('deid');
        $data = $request->all();
冯超鹏's avatar
冯超鹏 committed
152 153
        if (is_null($deid)) {
            return $this->jsonErrorData(105, '设备ID不能为空');
冯超鹏's avatar
冯超鹏 committed
154
        }
冯超鹏's avatar
冯超鹏 committed
155 156
        if ($request->isMethod('post')) {
            $data['dtype'] = $request->input('tid');
冯超鹏's avatar
冯超鹏 committed
157
            foreach ($data as $k => $v) {
冯超鹏's avatar
冯超鹏 committed
158 159 160
                if ($k == 'deid') {
                    unset($data[$k]);
                }
冯超鹏's avatar
冯超鹏 committed
161 162 163 164 165 166 167 168 169
                if ($k == 'tid') {
                    unset($data[$k]);
                }
                if ($k == 'name') {
                    unset($data[$k]);
                }
                if ($k == 'devicenum') {
                    unset($data[$k]);
                }
冯超鹏's avatar
冯超鹏 committed
170
            }
冯超鹏's avatar
冯超鹏 committed
171

172
            $this->timeline('编辑了设备[设备id' . $deid . ']');
冯超鹏's avatar
冯超鹏 committed
173 174
            return $this->jsonSuccessData(Device::where('id', '=', $deid)->update($data));
        } else {
冯超鹏's avatar
冯超鹏 committed
175
            $devi = DB::table('device as de')
冯超鹏's avatar
冯超鹏 committed
176 177 178 179
                ->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')
冯超鹏's avatar
冯超鹏 committed
180
                ->leftjoin('users as ud', 'de.uid', '=', 'ud.id')
冯超鹏's avatar
冯超鹏 committed
181
                ->select('dt.tid','ud.name', 'de.username','de.deviceremark','de.devicelinkman','de.devicephone','de.deviceinfo','de.devicecoord','de.uid','de.devicenum','de.devicemonad','de.status')
冯超鹏's avatar
冯超鹏 committed
182 183 184 185
                ->first();
            return $this->jsonSuccessData($devi);
        }
    }
冯超鹏's avatar
冯超鹏 committed
186

冯超鹏's avatar
冯超鹏 committed
187
    //返回设备类型和单位和介质
冯超鹏's avatar
冯超鹏 committed
188 189
    public function devicetype()
    {
冯超鹏's avatar
冯超鹏 committed
190 191
        $gas = DB::table('gas')->get();
        $danwei = DB::table('danwei')->get();
192
        $devicetypecount = DB::table('device_type as t')
冯超鹏's avatar
冯超鹏 committed
193
            ->leftjoin('device as d', 'd.dtype', '=', 't.tid')
194 195 196
            ->selectRaw('t.*,count(d.id) as counnum')
            ->groupBy('t.tid')
            ->get();
冯超鹏's avatar
冯超鹏 committed
197
        return $this->jsonSuccessData(['devicetype' => $devicetypecount, 'gas' => $gas, 'danwei' => $danwei]);
冯超鹏's avatar
冯超鹏 committed
198
    }
冯超鹏's avatar
冯超鹏 committed
199

冯超鹏's avatar
冯超鹏 committed
200
    //返回设备列表
冯超鹏's avatar
冯超鹏 committed
201 202
    private function whertype($type, $pagenNum, $limit): array
    {
Administrator's avatar
Administrator committed
203
        $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
204 205 206
            ->where('dtype', '=', $type)
            ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
            ->leftjoin('gas as g', "device.status", '=', 'g.id')
207
            ->leftjoin('users as u', "device.uid", '=', 'u.id')
冯超鹏's avatar
冯超鹏 committed
208
            ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
209
            ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
冯超鹏's avatar
冯超鹏 committed
210 211 212 213
            ->orderBy('device.id', 'desc')
            ->offset($pagenNum)
            ->limit($limit)
            ->get()->toArray();
Administrator's avatar
Administrator committed
214
        $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
215
            ->where('dtype', '=', $type)
冯超鹏's avatar
冯超鹏 committed
216
            ->count();
冯超鹏's avatar
冯超鹏 committed
217
        return ['devicelist' => $devicelist, 'count' => $count];
冯超鹏's avatar
冯超鹏 committed
218 219 220
    }

    //返回用户设备列表
冯超鹏's avatar
冯超鹏 committed
221 222
    private function userdevice($type, $pagenNum, $limit): array
    {
Administrator's avatar
Administrator committed
223
        $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
224 225 226 227
            ->where('dtype', '=', $type)
            ->where('uid', '=', Auth::id())
            ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
            ->leftjoin('gas as g', "device.status", '=', 'g.id')
228
            ->leftjoin('users as u', "device.uid", '=', 'u.id')
冯超鹏's avatar
冯超鹏 committed
229
            ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
230
            ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
冯超鹏's avatar
冯超鹏 committed
231 232 233 234
            ->orderBy('device.id', 'desc')
            ->offset($pagenNum)
            ->limit($limit)
            ->get()->toArray();
Administrator's avatar
Administrator committed
235
        $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
236 237
            ->where('dtype', '=', $type)
            ->where('uid', '=', Auth::id())
冯超鹏's avatar
冯超鹏 committed
238
            ->count();
冯超鹏's avatar
冯超鹏 committed
239
        return ['devicelist' => $devicelist, 'count' => $count];
冯超鹏's avatar
冯超鹏 committed
240
    }
冯超鹏's avatar
冯超鹏 committed
241

242
    private function deviceDataSearchData($devicenum, $pagenNum, $limit, $isuser): array
冯超鹏's avatar
冯超鹏 committed
243
    {
244
        if ($isuser != '') {
Administrator's avatar
Administrator committed
245
            $devicelist = DB::table('device')
246 247 248 249 250 251 252 253 254 255 256
                ->where('devicenum', '=', $devicenum)
                ->where('uid', '=', Auth::id())
                ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
                ->leftjoin('gas as g', "device.status", '=', 'g.id')
                ->leftjoin('users as u', "device.uid", '=', 'u.id')
                ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
                ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
                ->orderBy('device.id', 'desc')
                ->offset($pagenNum)
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
257
            $count = DB::table('device')
258 259 260 261 262
                ->where('dtype', '=', $devicenum)
                ->where('uid', '=', Auth::id())
                ->count();
            return ['devicelist' => $devicelist, 'count' => $count];
        } else {
Administrator's avatar
Administrator committed
263
            $devicelist = DB::table('device')
264 265 266 267 268 269 270 271 272 273
                ->where('devicenum', '=', $devicenum)
                ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
                ->leftjoin('gas as g', "device.status", '=', 'g.id')
                ->leftjoin('users as u', "device.uid", '=', 'u.id')
                ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
                ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
                ->orderBy('device.id', 'desc')
                ->offset($pagenNum)
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
274
            $count = DB::table('device')
275 276 277 278
                ->where('dtype', '=', $devicenum)
                ->count();
            return ['devicelist' => $devicelist, 'count' => $count];
        }
冯超鹏's avatar
冯超鹏 committed
279
    }
冯超鹏's avatar
冯超鹏 committed
280

冯超鹏's avatar
冯超鹏 committed
281
    //批量上传设备
冯超鹏's avatar
冯超鹏 committed
282 283
    public function batchdevice()
    {
冯超鹏's avatar
冯超鹏 committed
284
    }
冯超鹏's avatar
冯超鹏 committed
285

冯超鹏's avatar
冯超鹏 committed
286
    //获取设备详情信息
冯超鹏's avatar
冯超鹏 committed
287 288 289
    public function deviceDataInfo($id)
    {
        $devicedata = Device::where('device.id', '=', $id)
Administrator's avatar
Administrator committed
290
            ->leftjoin('contactsuser as c', 'c.contactsid', '=', 'device.id')
冯超鹏's avatar
冯超鹏 committed
291 292 293 294
            ->select('c.*', 'device.deviceuuid', 'device.devicelinkman', 'device.devicephone', 'device.devicecoord')
            ->get();
        $devicedatainfo = Device::where('id', '=', $id)
            ->select('deviceuuid', 'devicelinkman', 'devicephone', 'devicecoord')
冯超鹏's avatar
冯超鹏 committed
295
            ->get();
冯超鹏's avatar
冯超鹏 committed
296
        return $this->jsonSuccessData(['devicedata' => $devicedata, 'devicedatainfo' => $devicedatainfo]);
冯超鹏's avatar
冯超鹏 committed
297
    }
Administrator's avatar
Administrator committed
298

冯超鹏's avatar
冯超鹏 committed
299
//    返回设备地图详情信息
Administrator's avatar
Administrator committed
300 301
    public function device_info($id)
    {
冯超鹏's avatar
冯超鹏 committed
302 303 304
        $devicedata = Device::where('device.id', '=', $id)
            ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
            ->leftjoin('gas as g', "device.status", '=', 'g.id')
305
            ->leftjoin('users as u', "device.uid", '=', 'u.id')
冯超鹏's avatar
冯超鹏 committed
306
            ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
307
            ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
冯超鹏's avatar
冯超鹏 committed
308 309 310
            ->first();
        return $this->jsonSuccessData($devicedata);
    }
Administrator's avatar
Administrator committed
311

冯超鹏's avatar
冯超鹏 committed
312
    //搜索设备账号
冯超鹏's avatar
冯超鹏 committed
313 314
    public function deviceDataSearch(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
315 316
        $data = $request->input('deviceName');
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
317
        $pagenNum = $limit * ($request->input('page') - 1);
318
        $isuser = $request->input('isuser');
冯超鹏's avatar
冯超鹏 committed
319 320
        if ($pagenNum === '' || $limit == '' || $data == '') {
            return $this->jsonErrorData(105, '请求参数不能为空');
冯超鹏's avatar
冯超鹏 committed
321
        }
322
        return $this->jsonSuccessData($this->deviceDataSearchData($data, $pagenNum, $limit, $isuser == '' ? '' : $isuser));
冯超鹏's avatar
冯超鹏 committed
323
    }
冯超鹏's avatar
冯超鹏 committed
324

冯超鹏's avatar
冯超鹏 committed
325
    //推送获取数据监测数据
冯超鹏's avatar
冯超鹏 committed
326 327
    public function equipment()
    {
冯超鹏's avatar
冯超鹏 committed
328 329 330
        /*
         * 将写入文件改为时序数据库!
         * */
冯超鹏's avatar
冯超鹏 committed
331
        $dalen = Redis::llen('Devicesdata');//返回队列长度
Administrator's avatar
Administrator committed
332 333 334 335
        $data = [];
        if ($dalen > 0) {
            for ($i = 0; $i < $dalen; $i++) {
                array_push($data, unserialize(Redis::lpop('Devicesdata')));
冯超鹏's avatar
冯超鹏 committed
336
            }
Administrator's avatar
Administrator committed
337 338 339 340 341 342 343 344 345 346
        }
        if ($data != []) {
            $this->devicemkdir($data); //写入文件
        }
        $devicelistopen = $this->devicelistopen();
        if ($devicelistopen != 105) {
            return $this->jsonSuccessData($devicelistopen);
        } else {
            return $this->jsonErrorData(105, '暂无数据');
        }
冯超鹏's avatar
冯超鹏 committed
347 348

    }
Administrator's avatar
Administrator committed
349

冯超鹏's avatar
冯超鹏 committed
350
    //历史数据查询
Administrator's avatar
Administrator committed
351 352
    public function detedevice(Request $request)
    {
353 354 355 356 357 358 359 360 361 362 363 364 365 366
        $request = $request->input();
        $time_start = $time_stop = false;
        if(!is_null($request['timeRange'])) {
            $time_start = strtotime($request['timeRange'][0]);
            $time_stop = strtotime($request['timeRange'][1]);
        }
        $devicetime = $this->getDeviceData(
            $time_start,
            $time_stop,
            $request['deviceNum'],
            $request['deviceStatus'],
            $request['pageSize'],
            $request['currentPage']
        );
Administrator's avatar
Administrator committed
367
        if ($devicetime != 105) {
冯超鹏's avatar
冯超鹏 committed
368
            return $this->jsonSuccessData($devicetime);
Administrator's avatar
Administrator committed
369 370
        } else {
            return $this->jsonErrorData(105, '暂无数据');
冯超鹏's avatar
冯超鹏 committed
371 372
        }
    }
冯超鹏's avatar
冯超鹏 committed
373

冯超鹏's avatar
冯超鹏 committed
374

冯超鹏's avatar
冯超鹏 committed
375
    //返回设备当前报警
冯超鹏's avatar
冯超鹏 committed
376 377
    public function police()
    {
冯超鹏's avatar
冯超鹏 committed
378 379 380
        if (!is_null($this->isadmin())) {
            $data = DB::table('reportpolice as r')
                ->join('status as s', 'r.policestatus', '=', 's.id')
冯超鹏's avatar
冯超鹏 committed
381
                ->join('device as d' , 'r.devicenumber','=','d.devicenum')
冯超鹏's avatar
冯超鹏 committed
382
                ->select('r.*', 's.status_name','d.id as deid')
冯超鹏's avatar
冯超鹏 committed
383 384 385 386 387 388
                ->get();
        }else{
            $data = DB::table('reportpolice as r')
                ->join('status as s', 'r.policestatus', '=', 's.id')
                ->join('device as d' , 'r.devicenumber','=','d.devicenum')
                ->where('d.uid','=',Auth::id())
冯超鹏's avatar
冯超鹏 committed
389
                ->select('r.*', 's.status_name','d.id as deid')
冯超鹏's avatar
冯超鹏 committed
390 391
                ->get();
        }
Administrator's avatar
Administrator committed
392
        return $this->jsonSuccessData($data);
冯超鹏's avatar
冯超鹏 committed
393

冯超鹏's avatar
冯超鹏 committed
394
    }
冯超鹏's avatar
冯超鹏 committed
395

冯超鹏's avatar
冯超鹏 committed
396
    //返回设备废纸篓数量
冯超鹏's avatar
冯超鹏 committed
397 398
    public function deviceBasket()
    {
399 400 401 402 403
        if (!is_null($this->isadmin())) {
            return $this->jsonSuccessData(DB::table('device')->where('delete', '=', '1')->count());
        } else {
            return $this->jsonSuccessData(DB::table('device')->where('delete', '=', '1')->where('uid', '=', Auth::id())->count());
        }
冯超鹏's avatar
冯超鹏 committed
404 405
    }

Administrator's avatar
Administrator committed
406 407
    public function addUserDevice()
    {
408
        return $this->jsonSuccessData(DB::table('users')->where('state', '=', '2')->select('name', 'id')->get());
Administrator's avatar
Administrator committed
409 410
    }

冯超鹏's avatar
冯超鹏 committed
411
    //返回设备废纸篓和禁用设备
冯超鹏's avatar
冯超鹏 committed
412 413
    public function deviceBasketList()
    {
414 415 416 417 418 419 420 421
        if (!is_null($this->isadmin())) {
            $paper = DB::table('device')->where('delete', '=', '1')->get()->toArray();
            return $this->jsonSuccessData($paper);
        } else {
            $paper = DB::table('device')->where('delete', '=', '1')->where('uid', '=', Auth::id())->get()->toArray();
            return $this->jsonSuccessData($paper);
        }

冯超鹏's avatar
冯超鹏 committed
422 423
    }

冯超鹏's avatar
冯超鹏 committed
424 425
    public function deviceDelete(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
426 427
        $id = $request->input('id');
        $type = $request->input('type');
冯超鹏's avatar
冯超鹏 committed
428
        if ($type == 1) {//丢弃废纸篓
429
            $this->timeline('设备放到废纸篓[设备id' . $id . ']');
冯超鹏's avatar
冯超鹏 committed
430
                return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 1, 'devicestatus' => 6, 'devicedeleteinfo' => $this->isadmin() == 1 ? '管理员将设备放置废纸篓' : '用户将设备放置废纸篓']));
冯超鹏's avatar
冯超鹏 committed
431
        } else {
432
            $this->timeline('删除了设备');
冯超鹏's avatar
冯超鹏 committed
433
            return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->delete());
冯超鹏's avatar
冯超鹏 committed
434 435 436
        }
    }

冯超鹏's avatar
冯超鹏 committed
437 438
    public function UpPaperBasket($id)
    {
439
        return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 2, 'devicestatus' => 1, 'devicedeleteinfo' => '']));
冯超鹏's avatar
冯超鹏 committed
440 441

    }
442

冯超鹏's avatar
冯超鹏 committed
443 444
    public function addClassify($data)
    {
445
        //添加分类
446
        $this->timeline('添加了分类[分类名称' . $data . ']');
冯超鹏's avatar
冯超鹏 committed
447
        return $this->jsonSuccessData(DB::table('device_type')->insertGetId(['tname' => $data]));
448
    }
Administrator's avatar
Administrator committed
449 450 451 452 453 454 455 456 457 458 459 460 461 462

    /**
     * 更新设备分类
     * @param $id 分类ID
     */
    public function updateClassify(Request $request)
    {
        $data = $request->all();
        $status = DB::table('device_type')->where('tid', '=', $data['tid'])->update([
            'tname' => $data['tname']
        ]);
        
        return $status ? $this->jsonSuccessData($status) : $this->jsonErrorData(202, 'error');
    }
冯超鹏's avatar
冯超鹏 committed
463 464
    public function delteClassify($id)
    {
465
        //删除分类
466
        $this->timeline('删除了分类!');
冯超鹏's avatar
冯超鹏 committed
467
        return $this->jsonSuccessData(DB::table('device_type')->where('tid', '=', $id)->delete());
468
    }
469

Administrator's avatar
Administrator committed
470
    public function deviceLocation(Request $request)
冯超鹏's avatar
冯超鹏 committed
471
    {
472 473 474 475
        if ($this->isadmin() == 1) {
            $where = [];
            if ($request->has('uid')) {
                $user_id = $request->get('uid');
冯超鹏's avatar
冯超鹏 committed
476
                $where['device.uid'] = $user_id;
477 478
            }
            $data = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
479 480
                ->join('status as s','device.devicepolice','=','s.id')
                ->select('device.id', 'device.uid', 'device.nd', 'device.deviceinfo', 'device.devicenum', 'device.devicecoord', 'device.devicepolice', 'device.deviceremark', 'device.devicelinkman','s.status_name')
481 482 483 484
                ->where($where)
                ->get();
        } else {
            $data = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
485 486 487
                ->join('status as s','device.devicepolice','=','s.id')
                ->select('device.id', 'device.uid', 'device.nd', 'device.deviceinfo', 'device.devicenum', 'device.devicecoord', 'device.devicepolice', 'device.deviceremark', 'device.devicelinkman','s.status_name')
                ->where('device.uid','=',Auth::id())
488
                ->get();
Administrator's avatar
Administrator committed
489
        }
490

冯超鹏's avatar
冯超鹏 committed
491
        //返回用户安装位置
Administrator's avatar
Administrator committed
492
        return $this->jsonSuccessData($data);
冯超鹏's avatar
冯超鹏 committed
493
    }
Administrator's avatar
Administrator committed
494

冯超鹏's avatar
冯超鹏 committed
495 496 497
    //返回消防监测
    public function control(Request $request)
    {
Administrator's avatar
Administrator committed
498
        $pagenNum = $request->input('page');//页数
冯超鹏's avatar
冯超鹏 committed
499
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
500
        $offset = $limit * ($pagenNum - 1);
冯超鹏's avatar
冯超鹏 committed
501 502 503 504
        $type = $request->input('type');
        if ($pagenNum === '' || $limit == '' || $type === '') {
            return $this->jsonErrorData(105, '页数或limit不能为空');
        }
Administrator's avatar
Administrator committed
505 506 507
        if ($type == 1) {//返回消防监测
            $wherein = [2, 4, 6, 7, 8, 9, 11];
        } else {
冯超鹏's avatar
冯超鹏 committed
508
            //返回危化
Administrator's avatar
Administrator committed
509
            $wherein = [1, 5, 10];
冯超鹏's avatar
冯超鹏 committed
510
        }
Administrator's avatar
Administrator committed
511 512 513 514 515 516 517 518 519 520 521 522 523 524 525
        $search = json_decode($request->input('search'), true);
        $where = [];
        if(!empty($search['deviceNum'])) {
            $where[] = ['devicenum', 'like', "%{$search['deviceNum']}%"];
        }
        if(!empty($search['deviceName'])) {
            $where[] = ['username', 'like', "%{$search['deviceName']}%"];
        }
        if($search['deviceType'] != 0) {
            $wherein = [$search['deviceType']];
        }
        if($search['deviceStatus'] != 0) {
            $where[] = ['device.devicepolice', '=', $search['deviceStatus']];
        }

冯超鹏's avatar
冯超鹏 committed
526
        if (!is_null($this->isadmin())) {
Administrator's avatar
Administrator committed
527
            $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
528 529 530 531 532 533
                ->whereIn('dtype', $wherein)
                ->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')
                ->leftjoin('danwei as dw', 'device.devicemonad', '=', 'dw.id')
                ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'dw.danwei')
Administrator's avatar
Administrator committed
534
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
535
                ->orderBy('device.id', 'desc')
Administrator's avatar
Administrator committed
536
                ->offset($offset)
冯超鹏's avatar
冯超鹏 committed
537 538
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
539
            $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
540
                ->whereIn('dtype', $wherein)
Administrator's avatar
Administrator committed
541
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
542 543
                ->count();
        }else{
Administrator's avatar
Administrator committed
544
            $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
545 546 547 548 549 550 551
                ->whereIn('dtype', $wherein)
                ->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')
                ->leftjoin('danwei as dw', 'device.devicemonad', '=', 'dw.id')
                ->where('device.uid','=',Auth::id())
                ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'dw.danwei')
Administrator's avatar
Administrator committed
552
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
553
                ->orderBy('device.id', 'desc')
Administrator's avatar
Administrator committed
554
                ->offset($offset)
冯超鹏's avatar
冯超鹏 committed
555 556
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
557
            $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
558 559
                ->whereIn('dtype', $wherein)
                ->where('uid','=',Auth::id())
Administrator's avatar
Administrator committed
560
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
561 562
                ->count();
        }
冯超鹏's avatar
冯超鹏 committed
563 564
        return $this->jsonSuccessData(['devicelist' => $devicelist, 'count' => $count]);
    }
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
    public function devicepolice(Request $request)
    {
        $devicenum = $request->input('devicenum');
        if ($devicenum) {
           $police = DB::table('reportpolice')->where('devicenumber','=',$devicenum)->update(['police'=>2]);
           $this->jsonSuccessData($police);
        }else{
            return $this->jsonErrorData(105,'设备编号不能为空');
        }
    }
    public function devicepoliceinfo(Request $request){
        $devicenum = $request->input('devicenum');
        if ($devicenum) {
            $data = DB::table('device as d')
                ->join('device_type as t','d.dtype','=','t.tid')
                ->join('gas as g','d.status','=','g.id')
                ->join('status as s','d.devicepolice','=','s.id')
                ->join('danwei as w','d.devicemonad','=','w.id')
                ->join('users as u','d.uid','=','u.id')
冯超鹏's avatar
冯超鹏 committed
584
                ->join('reportpolice as r','d.devicenum','=','r.devicenumber')
585
                ->where('d.devicenum','=',$devicenum)
冯超鹏's avatar
冯超鹏 committed
586
                ->select('d.devicenum','d.username','d.nd','d.deviceremark','d.devicecoord','d.deviceaddtime','d.devicestatus','t.tname','g.gas','s.status_name','w.danwei','u.name','u.email','r.location','r.concentration','r.starttime')
587 588 589 590 591 592
                ->first();
            return $this->jsonSuccessData($data);
        }else{
            return $this->jsonErrorData(105,'设备编号不能为空');
        }
    }
冯超鹏's avatar
冯超鹏 committed
593 594 595 596 597 598 599 600
    /**
     * @param bool $isNew
     * @return array
     * 用户添加设备表单验证
     */
    private function getValidationRulesdevice($isNew = true)
    {
        return [
冯超鹏's avatar
冯超鹏 committed
601 602 603 604 605 606 607 608 609 610 611
            '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',
Administrator's avatar
Administrator committed
612
            'devicenumber' => 'sometimes|required|unique:device,devicenumber|max:40'
冯超鹏's avatar
冯超鹏 committed
613 614
        ];
    }
冯超鹏's avatar
冯超鹏 committed
615

冯超鹏's avatar
冯超鹏 committed
616 617 618 619
    //更新设备列表
    private function getValidationRulesupdevice($isNew = true)
    {
        return [
冯超鹏's avatar
冯超鹏 committed
620 621 622 623 624 625 626 627 628 629 630
            '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'
冯超鹏's avatar
冯超鹏 committed
631 632 633
        ];
    }

冯超鹏's avatar
冯超鹏 committed
634 635
    private function devicemkdir($data)
    {
Administrator's avatar
Administrator committed
636 637
        $path = public_path() . '/device/' . date('Y-m-d' . '/');
        if (!is_dir($path)) {
冯超鹏's avatar
冯超鹏 committed
638 639
            mkdir($path);
        }
Administrator's avatar
Administrator committed
640
        file_put_contents($path . "devicelistdata.text", json_encode($data) . PHP_EOL, FILE_APPEND);
冯超鹏's avatar
冯超鹏 committed
641 642 643 644

        $this->devicelistopen($path);
    }

Administrator's avatar
Administrator committed
645
    private function devicelistopen(): array
冯超鹏's avatar
冯超鹏 committed
646
    {
Administrator's avatar
Administrator committed
647 648
        $path = public_path() . '/device/' . date('Y-m-d' . '/');
        if (is_file($path . 'devicelistdata.text')) {
冯超鹏's avatar
冯超鹏 committed
649 650 651 652 653 654 655 656 657
            $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;
Administrator's avatar
Administrator committed
658
        } else {
冯超鹏's avatar
冯超鹏 committed
659 660 661 662
            return 105;
        }
    }

Administrator's avatar
Administrator committed
663 664 665 666
    private function devicetime($dete)
    {
        $path = public_path() . '/device/' . $dete . '/';
        if (is_file($path . 'devicelistdata.text')) {
冯超鹏's avatar
冯超鹏 committed
667 668 669 670 671 672 673 674 675
            $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;
Administrator's avatar
Administrator committed
676
        } else {
冯超鹏's avatar
冯超鹏 committed
677 678 679
            return 105;
        }
    }
680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745

    /**
     * 获取历史数据
     * @param int $time_start
     * @param int $time_stop
     * @param string $device_num
     * @param int $device_status
     * @return array
     * @throws \Exception
     */
    private function getDeviceData($time_start = false, $time_stop = false, $device_num = '', $device_status = 0, $size=0, $page=0)
    {
        $influxDb = Config::get('database.influxdb');
        $host = $influxDb['default']['host'];
        $port = $influxDb['default']['port'];
        $username = $influxDb['default']['username'];
        $password = $influxDb['default']['password'];

        $client = new \InfluxDB\Client($host, $port, $username, $password);
        $database = $client->selectDB($influxDb['default']['database']);
        $tdatabase = $client->selectDB($influxDb['default']['database']);
        $builde = $database->getQueryBuilder();
        $tbuilde = $tdatabase->getQueryBuilder();

        $result = [];
        if($time_start === false) {
            $time_start = 0;
        }
        if($time_stop === false) {
            $time_stop = time();
        }
        $time_start -=  8 * 3600;
        $time_stop -=  8 * 3600;
        $result = $builde->select('*')
            ->from('devices')
            ->setTimeRange($time_start, $time_stop);
        $tresult = $tbuilde->select('*')
            ->from('devices')
            ->setTimeRange($time_start, $time_stop);
        if(!empty($device_num)) {
            $where = ["device_num='{$device_num}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
        if($device_status != 0 && $device_status != null) {
            $where = ["device_status='{$device_status}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
        if($this->isadmin() != 1) {
            $user_id = Auth::id();
            $where = ["user_id='{$user_id}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
        $total = $tresult->count('value')->getResultSet()->getPoints();

        if(count($total) > 0) {
            $result = $result->orderBy('time','DESC')
                ->limit($size)->offset(($page-1)*$size)
                ->getResultSet()->getPoints();
        } else {
            $result = [];
        }
        return ['list' => $result, 'total' => isset($total[0]) ? $total[0]['count'] : 0];
    }
Administrator's avatar
Administrator committed
746
}