Browse Source

优化警报 信息

master
wanghongjun 1 month ago
parent
commit
16c5f33fff
  1. 1
      app/Http/Controllers/Admin/ConfigController.php
  2. 29
      app/Http/Controllers/Admin/NoticeController.php
  3. 2
      app/Http/Controllers/Admin/ParkingSpaceAttributesController.php
  4. 3
      app/Http/Controllers/Admin/ParkingSpaceCatMapController.php
  5. 3
      app/Http/Controllers/Admin/ParkingSpaceController.php
  6. 3
      app/Models/AdminConfigs.php
  7. 3
      app/Models/ParkingSpace.php
  8. 4
      app/Services/AdminFloorService.php
  9. 90
      app/Services/AdminNoticeService.php
  10. 3
      app/Services/EventCalendarService.php
  11. 4
      app/Services/ParkingSpaceService.php
  12. 7
      app/common.php
  13. 1
      database/migrations/2026_02_10_110429_create_admin_configs_table.php
  14. 1
      database/migrations/2026_03_23_143449_create_parking_space_table.php
  15. 5
      database/migrations/2026_04_23_143449_create_admin_notice_table.php
  16. 1
      routes/admin/api.php

1
app/Http/Controllers/Admin/ConfigController.php

@ -120,6 +120,7 @@ class ConfigController extends BaseController
$model->update([
'content' => $content,
'user_id' => $this->adminUserId,
'updated_at' => get_datetime()
]);

29
app/Http/Controllers/Admin/NoticeController.php

@ -36,6 +36,9 @@ class NoticeController extends BaseController
public function index(Request $request): JsonResponse
{
try {
// 进入自动已读
$this->service->readModel($this->adminUserId);
$query = AdminNotice::query();
if ($request->has('alarm_type')) {
@ -78,6 +81,7 @@ class NoticeController extends BaseController
$columns
)->get()->each(function ($item) {
$item['alarm_type_index'] = $item['alarm_type'];
$item['msg_type_index'] = $item['msg_type'];
return $this->service->getItem($item);
});
@ -162,7 +166,7 @@ class NoticeController extends BaseController
if ($validator->fails()) {
throw new ValidationException($validator);
}
$this->service->updateConfig($data);
$this->service->updateConfig($data, $this->adminUserId);
return $this->responseService->success([],
__('admin.operation_successful'));
} catch (Exception $e) {
@ -184,9 +188,11 @@ class NoticeController extends BaseController
'msg_type',
'space_id',
'floor_id',
'camera_id'
'camera_id',
'pattern_id'
];
$data = AdminNotice::query()->find($id, $columns)->toArray();
$data['parking_space_id'] = $data['space_id'];
$data = $this->service->getItem($data);
return $this->responseService->success($data);
} catch (Exception $e) {
@ -206,4 +212,23 @@ class NoticeController extends BaseController
__('exports.notice.list') . time() . '.xlsx'
);
}
public function message(): JsonResponse
{
try {
$where = [
'user_id' => $this->adminUserId,
'is_read' => 0
];
$data = [
'notice_count' => AdminNotice::query()->where($where)->count()
];
return $this->responseService->success($data);
} catch (Exception $e) {
$m_prefix = __('exception.exception_handler.resource');
return $this->responseService->systemError(
$m_prefix . ':' . $e->getMessage()
);
}
}
}

2
app/Http/Controllers/Admin/ParkingSpaceAttributesController.php

@ -131,7 +131,7 @@ class ParkingSpaceAttributesController extends BaseController
->get()
->toArray();
foreach ($data as &$item) {
$item['import_diagram_url'] = env('APP_URL') . $item['import_diagram'];
$item['import_diagram_url'] = get_image_url($item['import_diagram']);
}
return $this->responseService->success($data);
} catch (Exception $e) {

3
app/Http/Controllers/Admin/ParkingSpaceCatMapController.php

@ -66,8 +66,7 @@ class ParkingSpaceCatMapController extends BaseController
'deleted_at'
)->first();
if ($floorData) {
$floorData['pic_url'] = env('app_url')
. $floorData['image_url'];
$floorData['pic_url'] = get_image_url($floorData['image_url']);
unset($floorData['image_url']);
}
$model = ParkingElectronicMap::query()->where(

3
app/Http/Controllers/Admin/ParkingSpaceController.php

@ -279,11 +279,12 @@ class ParkingSpaceController extends BaseController
}
}
}
$data['recognition_rate'] = $item['recognition'];
$data['recognition'] = $this->service->getRecognition(
$item['recognition']
);
$data['berthing_time'] = $item['berthing_time'];
$data['space_url'] = '';
$data['space_url'] = get_image_url($item['pic_url']);
return $this->responseService->success($data);
} catch (Exception $e) {
$m_prefix = __('exception.exception_handler.resource');

3
app/Models/AdminConfigs.php

@ -11,7 +11,8 @@ class AdminConfigs extends Model
use HasFactory, SoftDeletes;
protected $fillable = [
'content'
'content',
'user_id'
];
protected $hidden = [

3
app/Models/ParkingSpace.php

@ -21,7 +21,8 @@ class ParkingSpace extends Model
'recognition',
'status',
'space_type_id',
'operation_type'
'operation_type',
'pic_url'
];
protected $hidden

4
app/Services/AdminFloorService.php

@ -192,7 +192,7 @@ class AdminFloorService
->get()->toArray();
foreach ($list as &$item) {
if (isset($item['pic_url'])) {
$item['pic_url'] = env('APP_URL') . $item['pic_url'];
$item['pic_url'] = get_image_url($item['pic_url']);
}
}
return $list;
@ -204,7 +204,7 @@ class AdminFloorService
$data = AdminFloor::query()->where('id', $id)->get()->toArray();
foreach ($data as &$item) {
if (isset($item['image_url'])) {
$item['pic_url'] = env('APP_URL') . $item['image_url'];
$item['pic_url'] = get_image_url($item['image_url']);
}
}
return $data;

90
app/Services/AdminNoticeService.php

@ -7,6 +7,7 @@ use App\Models\AdminFloor;
use App\Models\AdminNotice;
use App\Models\ParkingCamera;
use App\Models\ParkingLicensePlate;
use App\Models\ParkingPattern;
use App\Models\ParkingSpace;
use Exception;
use Illuminate\Support\Facades\DB;
@ -16,17 +17,17 @@ class AdminNoticeService extends BaseService
private static array $alarmTypeArr
= [
1 => 'hint',
2 => 'support'
1 => 'hint',// 提示信息
2 => 'support'// 支援信息
];
private static array $msgTypeArr
= [
1 => 'touch',
2 => 'illegal',
3 => 'offline',
4 => 'vip',
5 => 'task'
1 => 'touch',// 压线
2 => 'illegal',// 违泊
3 => 'offline',// 设备离线
4 => 'vip',// VIP
5 => 'task'// 任务切换
];
public function __construct(OperationLogService $logService)
@ -78,18 +79,33 @@ class AdminNoticeService extends BaseService
);
}
if (isset($item['floor_id'])) {
$item['floor'] = AdminFloor::getName($item['floor_id']);
$item['floor'] = '';
if ($item['floor_id']) {
$item['floor'] = AdminFloor::getName($item['floor_id']);
}
unset($item['floor_id']);
}
if (isset($item['camera_id'])) {
$item['camera_number'] = ParkingCamera::getNumber($item['camera_id']);
$item['camera_number'] = '';
if ($item['camera_id']) {
$item['camera_number'] = ParkingCamera::getNumber($item['camera_id']);
}
unset($item['camera_id']);
}
if (isset($item['pattern_id'])) {
$item['pattern_name'] = '';
if ($item['pattern_id']) {
$item['pattern_name'] = ParkingPattern::getName(
$item['pattern_id']
);
}
unset($item['pattern_id']);
}
unset($item['space_id']);
return $item;
}
public function updateConfig($data)
public function updateConfig($data, $user_id)
{
try {
DB::beginTransaction();
@ -103,6 +119,7 @@ class AdminNoticeService extends BaseService
$model->update([
'content' => $content,
'user_id' => $user_id,
'updated_at' => get_datetime()
]);
@ -116,19 +133,22 @@ class AdminNoticeService extends BaseService
}
}
public static function createData($data, $user_id)
// 添加切换模式消息
public static function addChangeModeNotice($pattern_id, $user_id)
{
$data = ['pattern_id' => $pattern_id];
self::createData(1, 5, $data, $user_id);
}
public static function createData($alarm_type, $msg_type, $data, $user_id)
{
$alarm_type = $data['alarm_type'];
$camera_ip = $data['camera_ip'];
$msg_type = $data['msg_type'];
$create = [
'alarm_time' => get_datetime(),
'alarm_type' => $alarm_type,
'camera_ip' => $camera_ip,
'msg_type' => $msg_type,
'is_read' => 0,
'admin_user_id' => $user_id,
'created_at' => get_datetime()
'alarm_time' => get_datetime(),
'alarm_type' => $alarm_type,
'msg_type' => $msg_type,
'is_read' => 0,
'user_id' => $user_id,
'created_at' => get_datetime()
];
if (isset($data['space_id']) && $data['space_id']) {
$create['space_id'] = $data['space_id'];
@ -142,6 +162,34 @@ class AdminNoticeService extends BaseService
if (isset($data['msg_content']) && $data['msg_content']) {
$create['msg_content'] = $data['msg_content'];
}
if (isset($data['pattern_id']) && $data['pattern_id']) {
$create['pattern_id'] = $data['pattern_id'];
}
if (isset($data['camera_ip']) && $data['camera_ip']) {
$create['camera_ip'] = $data['camera_ip'];
}
AdminNotice::query()->create($create);
}
public function readModel($user_id)
{
try {
DB::beginTransaction();
$where = [
'user_id' => $user_id,
'is_read' => 0
];
$ids = AdminNotice::query()->where($where)->pluck('id');
if ($ids) {
$update = [
'is_read' => 1
];
AdminNotice::query()->whereIn('id', $ids)->update($update);
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}

3
app/Services/EventCalendarService.php

@ -239,6 +239,9 @@ class EventCalendarService extends BaseService
$this->logService->logCreated($model, 'event_calendar.create');
}
// 生成警报信息消息
AdminNoticeService::addChangeModeNotice($pattern_id, $user_id);
DB::commit();
return $model;
} catch (Exception $e) {

4
app/Services/ParkingSpaceService.php

@ -15,6 +15,7 @@ use Illuminate\Support\Facades\DB;
class ParkingSpaceService extends BaseService
{
protected int $recognition = 80;
/**
* @var string[]
*/
@ -50,7 +51,8 @@ class ParkingSpaceService extends BaseService
public function getRecognition($recognition): string
{
if ($recognition) {
return __('service.parking_space.' . $recognition);
$str = $recognition >= $this->recognition ? 'high' : 'land';
return __('service.parking_space.' . $str);
}
return '-';
}

7
app/common.php

@ -116,3 +116,10 @@ if (!function_exists('get_time_difference')) {
}
}
}
if (!function_exists('get_image_url')) {
function get_image_url(string $image_url): string
{
return $image_url ? env('APP_URL') . $image_url : '';
}
}

1
database/migrations/2026_02_10_110429_create_admin_configs_table.php

@ -17,6 +17,7 @@ return new class extends Migration
$table->string('name')->comment('配置标识');
$table->text('content')->nullable()->comment('配置内容');
$table->tinyInteger('status')->default(1)->comment('状态:0禁用 1启用');
$table->integer('user_id')->default(0)->comment('操作员');
$table->timestamps();
$table->softDeletes();
$table->innoDb();

1
database/migrations/2026_03_23_143449_create_parking_space_table.php

@ -22,6 +22,7 @@ return new class extends Migration
$table->tinyInteger('status')->default(0)->comment('状态 0空置 1占用');
$table->integer('space_type_id')->comment('车位类型id');
$table->tinyInteger('operation_type')->default(0)->comment('操作类型');
$table->string('pic_url', 255)->nullable()->default('')->comment('车位图片');
$table->timestamps();
});
}

5
database/migrations/2026_04_23_143449_create_admin_notice_table.php

@ -15,14 +15,15 @@ return new class extends Migration
$table->id();
$table->timestamp('alarm_time')->comment('信息时间');
$table->tinyInteger('alarm_type')->default(0)->comment('信息类型');
$table->string('camera_ip', 15)->comment('ip');
$table->string('camera_ip', 15)->nullable()->comment('ip');
$table->tinyInteger('msg_type')->default(0)->comment('信息内容');
$table->string('msg_content', 255)->default('')->comment('信息内容详情');
$table->integer('space_id')->nullable()->comment('车位id');
$table->integer('floor_id')->nullable()->comment('楼层id');
$table->integer('camera_id')->nullable()->comment('相机设备id');
$table->integer('pattern_id')->nullable()->comment('模式id');
$table->tinyInteger('is_read')->default(0)->comment('是否已读');
$table->integer('admin_user_id')->default(0)->comment('操作员');
$table->integer('user_id')->default(0)->comment('操作员');
$table->timestamps();
$table->innoDb();
$table->index('alarm_type', 'alarm_type');

1
routes/admin/api.php

@ -145,6 +145,7 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/vipAccessRecord/{id}', [VipAccessRecordController::class, 'show']);
// 警报&通知
Route::get('/notice', [NoticeController::class, 'index']);
Route::get('/notice/index', [NoticeController::class, 'message']);
Route::get('/notice/search', [NoticeController::class, 'search']);
Route::get('/notice/setting', [NoticeController::class, 'create']);
Route::post('/notice/setting', [NoticeController::class, 'setting']);

Loading…
Cancel
Save