DevicesController.php 30.8 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
        $isuser = $request->input('isuser');
冯超鹏's avatar
冯超鹏 committed
34 35
        if ($pagenNum === '' || $limit == '') {
            return $this->jsonErrorData(105, '页数或limit不能为空');
冯超鹏's avatar
冯超鹏 committed
36
        }
冯超鹏's avatar
冯超鹏 committed
37
        return $this->jsonSuccessData($this->whertype($type == '' ? '1' : $type, $pagenNum, $limit, $isuser));
冯超鹏's avatar
冯超鹏 committed
38
    }
冯超鹏's avatar
冯超鹏 committed
39 40 41 42 43 44 45

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

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

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

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

    }

冯超鹏's avatar
冯超鹏 committed
127
    //添加设备
冯超鹏's avatar
冯超鹏 committed
128 129
    public function adddevice(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
130
        //验证用户提交表单
Administrator's avatar
Administrator committed
131 132
        $addDeviceData = $request->all();
        $validator = Validator::make($addDeviceData, $this->getValidationRulesdevice(false));
冯超鹏's avatar
冯超鹏 committed
133 134 135
        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 403);
        }
Administrator's avatar
Administrator committed
136 137 138 139 140
        foreach ($addDeviceData as $k => $v) {
            if ($k == 'isadmin') {
                unset($addDeviceData[$k]);
            }
        }
冯超鹏's avatar
冯超鹏 committed
141
        $type = new Device();
142 143
        $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
144

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


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

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

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

冯超鹏's avatar
冯超鹏 committed
201
    //返回设备列表
冯超鹏's avatar
冯超鹏 committed
202
    private function whertype($type, $pagenNum, $limit, $isuser): array
冯超鹏's avatar
冯超鹏 committed
203
    {
冯超鹏's avatar
冯超鹏 committed
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
        if ($isuser == 'user') {
            $devicelist = DB::table('device')
                ->where('dtype', '=', $type)
                ->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();
            $count = DB::table('device')
                ->where('dtype', '=', $type)
                ->where('uid', '=', Auth::id())
                ->count();
        } else {
            $devicelist = DB::table('device')
                ->where('dtype', '=', $type)
                ->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();
            $count = DB::table('device')
                ->where('dtype', '=', $type)
                ->count();
        }
冯超鹏's avatar
冯超鹏 committed
237
        return ['devicelist' => $devicelist, 'count' => $count];
冯超鹏's avatar
冯超鹏 committed
238 239 240
    }

    //返回用户设备列表
冯超鹏's avatar
冯超鹏 committed
241 242
    private function userdevice($type, $pagenNum, $limit): array
    {
Administrator's avatar
Administrator committed
243
        $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
244 245 246 247
            ->where('dtype', '=', $type)
            ->where('uid', '=', Auth::id())
            ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
            ->leftjoin('gas as g', "device.status", '=', 'g.id')
248
            ->leftjoin('users as u', "device.uid", '=', 'u.id')
冯超鹏's avatar
冯超鹏 committed
249
            ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
250
            ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
冯超鹏's avatar
冯超鹏 committed
251 252 253 254
            ->orderBy('device.id', 'desc')
            ->offset($pagenNum)
            ->limit($limit)
            ->get()->toArray();
Administrator's avatar
Administrator committed
255
        $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
256 257
            ->where('dtype', '=', $type)
            ->where('uid', '=', Auth::id())
冯超鹏's avatar
冯超鹏 committed
258
            ->count();
冯超鹏's avatar
冯超鹏 committed
259
        return ['devicelist' => $devicelist, 'count' => $count];
冯超鹏's avatar
冯超鹏 committed
260
    }
冯超鹏's avatar
冯超鹏 committed
261

262
    private function deviceDataSearchData($devicenum, $pagenNum, $limit, $isuser): array
冯超鹏's avatar
冯超鹏 committed
263
    {
264
        if ($isuser != '') {
Administrator's avatar
Administrator committed
265
            $devicelist = DB::table('device')
266 267 268 269 270 271 272 273 274 275 276
                ->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
277
            $count = DB::table('device')
278 279 280 281 282
                ->where('dtype', '=', $devicenum)
                ->where('uid', '=', Auth::id())
                ->count();
            return ['devicelist' => $devicelist, 'count' => $count];
        } else {
Administrator's avatar
Administrator committed
283
            $devicelist = DB::table('device')
284 285 286 287 288 289 290 291 292 293
                ->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
294
            $count = DB::table('device')
295 296 297 298
                ->where('dtype', '=', $devicenum)
                ->count();
            return ['devicelist' => $devicelist, 'count' => $count];
        }
冯超鹏's avatar
冯超鹏 committed
299
    }
冯超鹏's avatar
冯超鹏 committed
300

冯超鹏's avatar
冯超鹏 committed
301
    //批量上传设备
冯超鹏's avatar
冯超鹏 committed
302 303
    public function batchdevice()
    {
冯超鹏's avatar
冯超鹏 committed
304
    }
冯超鹏's avatar
冯超鹏 committed
305

冯超鹏's avatar
冯超鹏 committed
306
    //获取设备详情信息
冯超鹏's avatar
冯超鹏 committed
307 308 309
    public function deviceDataInfo($id)
    {
        $devicedata = Device::where('device.id', '=', $id)
Administrator's avatar
Administrator committed
310
            ->leftjoin('contactsuser as c', 'c.contactsid', '=', 'device.id')
冯超鹏's avatar
冯超鹏 committed
311 312 313 314
            ->select('c.*', 'device.deviceuuid', 'device.devicelinkman', 'device.devicephone', 'device.devicecoord')
            ->get();
        $devicedatainfo = Device::where('id', '=', $id)
            ->select('deviceuuid', 'devicelinkman', 'devicephone', 'devicecoord')
冯超鹏's avatar
冯超鹏 committed
315
            ->get();
冯超鹏's avatar
冯超鹏 committed
316
        return $this->jsonSuccessData(['devicedata' => $devicedata, 'devicedatainfo' => $devicedatainfo]);
冯超鹏's avatar
冯超鹏 committed
317
    }
Administrator's avatar
Administrator committed
318

冯超鹏's avatar
冯超鹏 committed
319
//    返回设备地图详情信息
Administrator's avatar
Administrator committed
320 321
    public function device_info($id)
    {
冯超鹏's avatar
冯超鹏 committed
322 323 324
        $devicedata = Device::where('device.id', '=', $id)
            ->leftjoin('device_type as dy', "device.dtype", '=', 'dy.tid')
            ->leftjoin('gas as g', "device.status", '=', 'g.id')
325
            ->leftjoin('users as u', "device.uid", '=', 'u.id')
冯超鹏's avatar
冯超鹏 committed
326
            ->leftjoin('status as p', "device.devicepolice", '=', 'p.id')
327
            ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'u.name as usernickname')
冯超鹏's avatar
冯超鹏 committed
328 329 330
            ->first();
        return $this->jsonSuccessData($devicedata);
    }
Administrator's avatar
Administrator committed
331

冯超鹏's avatar
冯超鹏 committed
332
    //搜索设备账号
冯超鹏's avatar
冯超鹏 committed
333 334
    public function deviceDataSearch(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
335 336
        $data = $request->input('deviceName');
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
337
        $pagenNum = $limit * ($request->input('page') - 1);
338
        $isuser = $request->input('isuser');
冯超鹏's avatar
冯超鹏 committed
339 340
        if ($pagenNum === '' || $limit == '' || $data == '') {
            return $this->jsonErrorData(105, '请求参数不能为空');
冯超鹏's avatar
冯超鹏 committed
341
        }
342
        return $this->jsonSuccessData($this->deviceDataSearchData($data, $pagenNum, $limit, $isuser == '' ? '' : $isuser));
冯超鹏's avatar
冯超鹏 committed
343
    }
冯超鹏's avatar
冯超鹏 committed
344

冯超鹏's avatar
冯超鹏 committed
345
    //推送获取数据监测数据
冯超鹏's avatar
冯超鹏 committed
346 347
    public function equipment()
    {
冯超鹏's avatar
冯超鹏 committed
348 349 350
        /*
         * 将写入文件改为时序数据库!
         * */
冯超鹏's avatar
冯超鹏 committed
351
        $dalen = Redis::llen('Devicesdata');//返回队列长度
Administrator's avatar
Administrator committed
352 353 354 355
        $data = [];
        if ($dalen > 0) {
            for ($i = 0; $i < $dalen; $i++) {
                array_push($data, unserialize(Redis::lpop('Devicesdata')));
冯超鹏's avatar
冯超鹏 committed
356
            }
Administrator's avatar
Administrator committed
357 358 359 360 361 362 363 364 365 366
        }
        if ($data != []) {
            $this->devicemkdir($data); //写入文件
        }
        $devicelistopen = $this->devicelistopen();
        if ($devicelistopen != 105) {
            return $this->jsonSuccessData($devicelistopen);
        } else {
            return $this->jsonErrorData(105, '暂无数据');
        }
冯超鹏's avatar
冯超鹏 committed
367 368

    }
Administrator's avatar
Administrator committed
369

冯超鹏's avatar
冯超鹏 committed
370
    //历史数据查询
Administrator's avatar
Administrator committed
371 372
    public function detedevice(Request $request)
    {
373 374
        $request = $request->input();
        $time_start = $time_stop = false;
冯超鹏's avatar
冯超鹏 committed
375
        if (!is_null($request['timeRange'])) {
376 377 378 379 380 381 382 383 384 385 386
            $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
387
        if ($devicetime != 105) {
冯超鹏's avatar
冯超鹏 committed
388
            return $this->jsonSuccessData($devicetime);
Administrator's avatar
Administrator committed
389 390
        } else {
            return $this->jsonErrorData(105, '暂无数据');
冯超鹏's avatar
冯超鹏 committed
391 392
        }
    }
冯超鹏's avatar
冯超鹏 committed
393

冯超鹏's avatar
冯超鹏 committed
394

冯超鹏's avatar
冯超鹏 committed
395
    //返回设备当前报警
冯超鹏's avatar
冯超鹏 committed
396 397
    public function police()
    {
冯超鹏's avatar
冯超鹏 committed
398 399 400
        if (!is_null($this->isadmin())) {
            $data = DB::table('reportpolice as r')
                ->join('status as s', 'r.policestatus', '=', 's.id')
冯超鹏's avatar
冯超鹏 committed
401 402
                ->join('device as d', 'r.devicenumber', '=', 'd.devicenum')
                ->select('r.*', 's.status_name', 'd.id as deid')
冯超鹏's avatar
冯超鹏 committed
403
                ->get();
冯超鹏's avatar
冯超鹏 committed
404
        } else {
冯超鹏's avatar
冯超鹏 committed
405 406
            $data = DB::table('reportpolice as r')
                ->join('status as s', 'r.policestatus', '=', 's.id')
冯超鹏's avatar
冯超鹏 committed
407 408 409
                ->join('device as d', 'r.devicenumber', '=', 'd.devicenum')
                ->where('d.uid', '=', Auth::id())
                ->select('r.*', 's.status_name', 'd.id as deid')
冯超鹏's avatar
冯超鹏 committed
410 411
                ->get();
        }
Administrator's avatar
Administrator committed
412
        return $this->jsonSuccessData($data);
冯超鹏's avatar
冯超鹏 committed
413

冯超鹏's avatar
冯超鹏 committed
414
    }
冯超鹏's avatar
冯超鹏 committed
415

冯超鹏's avatar
冯超鹏 committed
416
    //返回设备废纸篓数量
冯超鹏's avatar
冯超鹏 committed
417 418
    public function deviceBasket()
    {
419 420 421 422 423
        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
424 425
    }

Administrator's avatar
Administrator committed
426 427
    public function addUserDevice()
    {
428
        return $this->jsonSuccessData(DB::table('users')->where('state', '=', '2')->select('name', 'id')->get());
Administrator's avatar
Administrator committed
429
    }
冯超鹏's avatar
冯超鹏 committed
430 431 432 433 434 435
    //获取用户自定义用户标题
    public function companyuser()
    {
        $data = DB::table('users')->where('id','=',Auth::id())->value('company');
        return $this->jsonSuccessData($data);
    }
Administrator's avatar
Administrator committed
436

冯超鹏's avatar
冯超鹏 committed
437
    //返回设备废纸篓和禁用设备
冯超鹏's avatar
冯超鹏 committed
438 439
    public function deviceBasketList()
    {
440 441 442 443 444 445 446 447
        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
448 449
    }

冯超鹏's avatar
冯超鹏 committed
450 451
    public function deviceDelete(Request $request)
    {
冯超鹏's avatar
冯超鹏 committed
452 453
        $id = $request->input('id');
        $type = $request->input('type');
冯超鹏's avatar
冯超鹏 committed
454
        if ($type == 1) {//丢弃废纸篓
455
            $this->timeline('设备放到废纸篓[设备id' . $id . ']');
冯超鹏's avatar
冯超鹏 committed
456
            return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 1, 'devicestatus' => 6, 'devicedeleteinfo' => $this->isadmin() == 1 ? '管理员将设备放置废纸篓' : '用户将设备放置废纸篓']));
冯超鹏's avatar
冯超鹏 committed
457
        } else {
458
            $this->timeline('删除了设备');
冯超鹏's avatar
冯超鹏 committed
459
            return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->delete());
冯超鹏's avatar
冯超鹏 committed
460 461 462
        }
    }

冯超鹏's avatar
冯超鹏 committed
463 464
    public function UpPaperBasket($id)
    {
465
        return $this->jsonSuccessData(DB::table('device')->where('id', '=', $id)->update(['delete' => 2, 'devicestatus' => 1, 'devicedeleteinfo' => '']));
冯超鹏's avatar
冯超鹏 committed
466 467

    }
468

冯超鹏's avatar
冯超鹏 committed
469 470
    public function addClassify($data)
    {
471
        //添加分类
472
        $this->timeline('添加了分类[分类名称' . $data . ']');
冯超鹏's avatar
冯超鹏 committed
473
        return $this->jsonSuccessData(DB::table('device_type')->insertGetId(['tname' => $data]));
474
    }
Administrator's avatar
Administrator committed
475 476 477 478 479 480 481 482 483 484 485

    /**
     * 更新设备分类
     * @param $id 分类ID
     */
    public function updateClassify(Request $request)
    {
        $data = $request->all();
        $status = DB::table('device_type')->where('tid', '=', $data['tid'])->update([
            'tname' => $data['tname']
        ]);
冯超鹏's avatar
冯超鹏 committed
486

Administrator's avatar
Administrator committed
487 488
        return $status ? $this->jsonSuccessData($status) : $this->jsonErrorData(202, 'error');
    }
冯超鹏's avatar
冯超鹏 committed
489

冯超鹏's avatar
冯超鹏 committed
490 491
    public function delteClassify($id)
    {
492
        //删除分类
493
        $this->timeline('删除了分类!');
冯超鹏's avatar
冯超鹏 committed
494
        return $this->jsonSuccessData(DB::table('device_type')->where('tid', '=', $id)->delete());
495
    }
496

Administrator's avatar
Administrator committed
497
    public function deviceLocation(Request $request)
冯超鹏's avatar
冯超鹏 committed
498
    {
499 500 501 502
        if ($this->isadmin() == 1) {
            $where = [];
            if ($request->has('uid')) {
                $user_id = $request->get('uid');
冯超鹏's avatar
冯超鹏 committed
503
                $where['device.uid'] = $user_id;
504 505
            }
            $data = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
506 507
                ->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')
508 509 510 511
                ->where($where)
                ->get();
        } else {
            $data = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
512 513 514
                ->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())
515
                ->get();
Administrator's avatar
Administrator committed
516
        }
517

冯超鹏's avatar
冯超鹏 committed
518
        //返回用户安装位置
Administrator's avatar
Administrator committed
519
        return $this->jsonSuccessData($data);
冯超鹏's avatar
冯超鹏 committed
520
    }
Administrator's avatar
Administrator committed
521

冯超鹏's avatar
冯超鹏 committed
522 523 524
    //返回消防监测
    public function control(Request $request)
    {
Administrator's avatar
Administrator committed
525
        $pagenNum = $request->input('page');//页数
冯超鹏's avatar
冯超鹏 committed
526
        $limit = $request->input('limit');
Administrator's avatar
Administrator committed
527
        $offset = $limit * ($pagenNum - 1);
冯超鹏's avatar
冯超鹏 committed
528 529 530 531
        $type = $request->input('type');
        if ($pagenNum === '' || $limit == '' || $type === '') {
            return $this->jsonErrorData(105, '页数或limit不能为空');
        }
Administrator's avatar
Administrator committed
532 533 534
        if ($type == 1) {//返回消防监测
            $wherein = [2, 4, 6, 7, 8, 9, 11];
        } else {
冯超鹏's avatar
冯超鹏 committed
535
            //返回危化
Administrator's avatar
Administrator committed
536
            $wherein = [1, 5, 10];
冯超鹏's avatar
冯超鹏 committed
537
        }
Administrator's avatar
Administrator committed
538 539
        $search = json_decode($request->input('search'), true);
        $where = [];
冯超鹏's avatar
冯超鹏 committed
540
        if (!empty($search['deviceNum'])) {
Administrator's avatar
Administrator committed
541 542
            $where[] = ['devicenum', 'like', "%{$search['deviceNum']}%"];
        }
冯超鹏's avatar
冯超鹏 committed
543
        if (!empty($search['deviceName'])) {
Administrator's avatar
Administrator committed
544 545
            $where[] = ['username', 'like', "%{$search['deviceName']}%"];
        }
冯超鹏's avatar
冯超鹏 committed
546
        if ($search['deviceType'] != 0) {
Administrator's avatar
Administrator committed
547 548
            $wherein = [$search['deviceType']];
        }
冯超鹏's avatar
冯超鹏 committed
549
        if ($search['deviceStatus'] != 0) {
Administrator's avatar
Administrator committed
550 551 552
            $where[] = ['device.devicepolice', '=', $search['deviceStatus']];
        }

冯超鹏's avatar
冯超鹏 committed
553
        if (!is_null($this->isadmin())) {
Administrator's avatar
Administrator committed
554
            $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
555 556 557 558 559 560
                ->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
561
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
562
                ->orderBy('device.id', 'desc')
Administrator's avatar
Administrator committed
563
                ->offset($offset)
冯超鹏's avatar
冯超鹏 committed
564 565
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
566
            $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
567
                ->whereIn('dtype', $wherein)
Administrator's avatar
Administrator committed
568
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
569
                ->count();
冯超鹏's avatar
冯超鹏 committed
570
        } else {
Administrator's avatar
Administrator committed
571
            $devicelist = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
572 573 574 575 576
                ->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')
冯超鹏's avatar
冯超鹏 committed
577
                ->where('device.uid', '=', Auth::id())
冯超鹏's avatar
冯超鹏 committed
578
                ->select('dy.tname', 'g.gas', 'device.*', 'p.status_name', 'dw.danwei')
Administrator's avatar
Administrator committed
579
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
580
                ->orderBy('device.id', 'desc')
Administrator's avatar
Administrator committed
581
                ->offset($offset)
冯超鹏's avatar
冯超鹏 committed
582 583
                ->limit($limit)
                ->get()->toArray();
Administrator's avatar
Administrator committed
584
            $count = DB::table('device')
冯超鹏's avatar
冯超鹏 committed
585
                ->whereIn('dtype', $wherein)
冯超鹏's avatar
冯超鹏 committed
586
                ->where('uid', '=', Auth::id())
Administrator's avatar
Administrator committed
587
                ->where($where)
冯超鹏's avatar
冯超鹏 committed
588 589
                ->count();
        }
冯超鹏's avatar
冯超鹏 committed
590 591
        return $this->jsonSuccessData(['devicelist' => $devicelist, 'count' => $count]);
    }
冯超鹏's avatar
冯超鹏 committed
592

593 594 595 596
    public function devicepolice(Request $request)
    {
        $devicenum = $request->input('devicenum');
        if ($devicenum) {
冯超鹏's avatar
冯超鹏 committed
597 598 599 600
            $police = DB::table('reportpolice')->where('devicenumber', '=', $devicenum)->update(['police' => 2]);
            $this->jsonSuccessData($police);
        } else {
            return $this->jsonErrorData(105, '设备编号不能为空');
601 602
        }
    }
冯超鹏's avatar
冯超鹏 committed
603 604 605 606 607 608 609 610 611 612 613 614 615 616

    //返回报警记录中的报类型和区域
    public function history_device_type()
    {
        $device_type = DB::table('status')->get();
        $device_quyu = DB::table('device')
            ->select('deviceinfo', 'id as deviceid')
            ->groupBy('deviceinfo')
            ->get();
        return $this->jsonSuccessData(['device_type' => $device_type, 'device_quyu' => $device_quyu]);
    }

    public function devicepoliceinfo(Request $request)
    {
617 618 619
        $devicenum = $request->input('devicenum');
        if ($devicenum) {
            $data = DB::table('device as d')
冯超鹏's avatar
冯超鹏 committed
620 621 622 623 624 625 626 627
                ->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')
                ->join('reportpolice as r', 'd.devicenum', '=', 'r.devicenumber')
                ->where('d.devicenum', '=', $devicenum)
                ->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')
628 629
                ->first();
            return $this->jsonSuccessData($data);
冯超鹏's avatar
冯超鹏 committed
630 631
        } else {
            return $this->jsonErrorData(105, '设备编号不能为空');
632 633
        }
    }
冯超鹏's avatar
冯超鹏 committed
634

冯超鹏's avatar
冯超鹏 committed
635 636 637 638 639 640 641 642
    /**
     * @param bool $isNew
     * @return array
     * 用户添加设备表单验证
     */
    private function getValidationRulesdevice($isNew = true)
    {
        return [
冯超鹏's avatar
冯超鹏 committed
643 644 645 646 647 648 649 650 651 652 653
            '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
654
            'devicenumber' => 'sometimes|required|unique:device,devicenumber|max:40'
冯超鹏's avatar
冯超鹏 committed
655 656
        ];
    }
冯超鹏's avatar
冯超鹏 committed
657

冯超鹏's avatar
冯超鹏 committed
658 659 660 661
    //更新设备列表
    private function getValidationRulesupdevice($isNew = true)
    {
        return [
冯超鹏's avatar
冯超鹏 committed
662 663 664 665 666 667 668 669 670 671 672
            '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
673 674 675
        ];
    }

冯超鹏's avatar
冯超鹏 committed
676 677
    private function devicemkdir($data)
    {
Administrator's avatar
Administrator committed
678 679
        $path = public_path() . '/device/' . date('Y-m-d' . '/');
        if (!is_dir($path)) {
冯超鹏's avatar
冯超鹏 committed
680 681
            mkdir($path);
        }
Administrator's avatar
Administrator committed
682
        file_put_contents($path . "devicelistdata.text", json_encode($data) . PHP_EOL, FILE_APPEND);
冯超鹏's avatar
冯超鹏 committed
683 684 685 686

        $this->devicelistopen($path);
    }

Administrator's avatar
Administrator committed
687
    private function devicelistopen(): array
冯超鹏's avatar
冯超鹏 committed
688
    {
Administrator's avatar
Administrator committed
689 690
        $path = public_path() . '/device/' . date('Y-m-d' . '/');
        if (is_file($path . 'devicelistdata.text')) {
冯超鹏's avatar
冯超鹏 committed
691 692 693 694 695 696 697 698 699
            $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
700
        } else {
冯超鹏's avatar
冯超鹏 committed
701 702 703 704
            return 105;
        }
    }

Administrator's avatar
Administrator committed
705 706 707 708
    private function devicetime($dete)
    {
        $path = public_path() . '/device/' . $dete . '/';
        if (is_file($path . 'devicelistdata.text')) {
冯超鹏's avatar
冯超鹏 committed
709 710 711 712 713 714 715 716 717
            $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
718
        } else {
冯超鹏's avatar
冯超鹏 committed
719 720 721
            return 105;
        }
    }
722 723 724 725 726 727 728 729 730 731

    /**
     * 获取历史数据
     * @param int $time_start
     * @param int $time_stop
     * @param string $device_num
     * @param int $device_status
     * @return array
     * @throws \Exception
     */
冯超鹏's avatar
冯超鹏 committed
732
    private function getDeviceData($time_start = false, $time_stop = false, $device_num = '', $device_status = 0, $size = 0, $page = 0)
733 734 735 736 737 738 739 740 741 742 743 744 745 746
    {
        $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 = [];
冯超鹏's avatar
冯超鹏 committed
747
        if ($time_start === false) {
748 749
            $time_start = 0;
        }
冯超鹏's avatar
冯超鹏 committed
750
        if ($time_stop === false) {
751 752
            $time_stop = time();
        }
冯超鹏's avatar
冯超鹏 committed
753 754
        $time_start -= 8 * 3600;
        $time_stop -= 8 * 3600;
755 756 757 758 759 760
        $result = $builde->select('*')
            ->from('devices')
            ->setTimeRange($time_start, $time_stop);
        $tresult = $tbuilde->select('*')
            ->from('devices')
            ->setTimeRange($time_start, $time_stop);
冯超鹏's avatar
冯超鹏 committed
761
        if (!empty($device_num)) {
762 763 764 765
            $where = ["device_num='{$device_num}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
冯超鹏's avatar
冯超鹏 committed
766
        if ($device_status != 0 && $device_status != null) {
767 768 769 770
            $where = ["device_status='{$device_status}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
冯超鹏's avatar
冯超鹏 committed
771
        if ($this->isadmin() != 1) {
772 773 774 775 776 777 778
            $user_id = Auth::id();
            $where = ["user_id='{$user_id}'"];
            $result = $result->where($where);
            $tresult = $tresult->where($where);
        }
        $total = $tresult->count('value')->getResultSet()->getPoints();

冯超鹏's avatar
冯超鹏 committed
779 780 781
        if (count($total) > 0) {
            $result = $result->orderBy('time', 'DESC')
                ->limit($size)->offset(($page - 1) * $size)
782 783 784 785 786 787
                ->getResultSet()->getPoints();
        } else {
            $result = [];
        }
        return ['list' => $result, 'total' => isset($total[0]) ? $total[0]['count'] : 0];
    }
Administrator's avatar
Administrator committed
788
}