1
0
Fork 0

添加警报数获取,警报记录获取

develop
vine_liutk 2023-06-21 15:58:43 +08:00
parent 4816a77d7f
commit 0e10085b6e
6 changed files with 120 additions and 2 deletions

View File

@ -0,0 +1,17 @@
<?php
namespace App\Filters;
use EloquentFilter\ModelFilter;
class WarningNoticeFilter extends ModelFilter
{
public function lv($lv){
return $this->where('lv', $lv);
}
public function status($status)
{
return $this->where('status', $status);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Helpers;
class Paginator
{
/**
* 解析每页显示的条数
*
* @param string $perPageName
* @param int $default
* @param int|null $max
* @return int
*/
public static function resolvePerPage(string $perPageName = 'per_page', int $default = 20, ?int $max = null): int
{
$perPage = (int) request()->input($perPageName);
if ($perPage >= 1) {
if ($max !== null && $max >= 1 && $perPage >= $max) {
return $max;
}
return $perPage;
}
return $default;
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace App\Http\Controllers\Api;
use App\Helpers\Paginator;
use App\Http\Controllers\Controller;
use App\Models\WarningNotice;
use Illuminate\Http\Request;
use App\Filters\WarningNoticeFilter;
use App\Http\Resources\WarningNoticeResource;
use DB;
class WarningNoticeController extends Controller
{
/**
* 获取警报数量
*/
public function warningLogNum(Request $request){
$list = WarningNotice::filter($request->input(), WarningNoticeFilter::class)
->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);
}
/**
* 获取警报记录
*
* @return void
*/
public function warningLog(Request $request)
{
$query = WarningNotice::with(['device.modes'])->filter($request->input(), WarningNoticeFilter::class)->orderBy('created_at', 'desc');
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return $this->json(WarningNoticeResource::collection($list));
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class WarningNoticeResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'id' => $this->id,
'lv' => $this->lv,
'monitor_modes' => MonitorModeResource::collection($this->whenLoaded('device')->modes),
'status' => $this->status,
'content' => $this->content,
'created_at' => strtotime($this->created_at) ?? 0, //录入时间
];
}
}

View File

@ -2,12 +2,12 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;
class WarningNotice extends Model
{
use HasFactory;
use Filterable;
protected $fillable = [
'device_id', 'lv', 'content', 'status', 'remarks',

View File

@ -42,6 +42,9 @@ Route::group(['middleware' => 'auth:sanctum'], function () {
Route::get('monitor-modes/device-data', [MonitorModeController::class, 'getMonitorDeviceData'])->name('monitor_modes.device_data');
Route::get('static/base-data', [SettingController::class, 'staticBaseData'])->name('static.base_data');
Route::get('warning-notices/nums', [WarningNoticeController::class, 'warningLogNum']);
Route::get('warning-notices/logs', [WarningNoticeController::class, 'warningLog']);
Route::prefix('users')->group(function () {
Route::delete('logout', [UserController::class, 'logout']);
});