lcly-data-admin/app/Http/Controllers/DeviceWarningController.php

95 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Helpers\Paginator;
use App\Http\Resources\DeviceWarningResource;
use App\Models\DeviceWarning;
use Illuminate\Http\Request;
use Peidikeji\Setting\Models\Setting;
use Illuminate\Support\Facades\DB;
class DeviceWarningController extends Controller
{
/**
* 预计规则
*
* @return void
*/
public function rules()
{
$settings = Setting::where('slug', 'like', 'device_warning_rule%')->get()->toArray();
return $this->json(array_map(function ($item) {
$_value = json_decode($item['value'], true);
return [
'name' => $item['name'],
'slug' => $item['slug'],
'value' => $_value,
];
}, $settings));
}
public function updateRule(Request $request)
{
$slug = $request->input(['slug']);
$ruleValue = $request->input(['value'], []);
$rule = Setting::where('slug', $slug)->first();
//获取提交的规则
if ($rule) {
$oldValue = json_decode($rule->value, true);
foreach ($oldValue as $key => $value) {
foreach ($value as $lv => $item) {
if (isset($ruleValue[$key][$lv])) {
$oldValue[$key][$lv] = $ruleValue[$key][$lv];
}
}
}
$rule->update([
'value' => json_encode($oldValue),
]);
}
return $this->success('更新成功');
}
/**
* 获取警报记录
*
* @return void
*/
public function warningLog(Request $request)
{
$query = DeviceWarning::with(['base', 'device'])->filter($request->input())->orderBy('created_at', 'desc');
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return $this->json(DeviceWarningResource::collection($list));
}
/**
* 获取预警数量
*/
public function warningLogNum(Request $request){
$list = DeviceWarning::filter($request->input())
->select(DB::raw('lv, count(1) as num'))
->groupBy('lv')
->get()
->pluck('num', 'lv')->toArray();
for($i = 1; $i <= 4; $i++) {
$data[$i] = $list[$i] ?? 0;
}
return $this->json($data);
}
public function markWarning(DeviceWarning $deviceWarning)
{
$deviceWarning->update([
'status' => 1
]);
return $this->success('处理成功');
}
}