diff --git a/app/Http/Controllers/AlarmControllerCommon.php b/app/Http/Controllers/AlarmControllerCommon.php index 53320bb..7d51531 100644 --- a/app/Http/Controllers/AlarmControllerCommon.php +++ b/app/Http/Controllers/AlarmControllerCommon.php @@ -158,21 +158,20 @@ class AlarmControllerCommon extends Controller public function filterAlarm(Request $request) { try { + $token = readHeaderToken(); + $useId = $token['sub']; + $alarmData = $request->only([ - // 'statusList', 'severity', - // 'type', - // 'assigneeId', 'pageSize', 'page', - // 'textSearch', - // 'sortProperty', - // 'sortOrder', 'startTs', - 'endTs' + 'endTs', + 'deviceId', + 'assetId' ]); - $apiResponse = $this->alarmService->filterAlarm($alarmData); + $apiResponse = $this->alarmService->filterAlarm($alarmData, $useId); return jsonResponseWithSuccessMessage('Alarm data retrieved successfully', ['api_response' => $apiResponse]); } catch (Exception $e) { diff --git a/app/Services/AlarmService.php b/app/Services/AlarmService.php index c709091..a7a1fe4 100644 --- a/app/Services/AlarmService.php +++ b/app/Services/AlarmService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Models\Device; use App\Models\TimeseriesKeyMaster; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; @@ -79,7 +80,6 @@ class AlarmService } return $response->json()['data'] ?? []; - } catch (\Exception $e) { Log::error("Error fetching ThingsBoard devices: " . $e->getMessage()); return []; @@ -285,7 +285,7 @@ class AlarmService 'useStrictDataTypes' => false ]); -// dd($response); + // dd($response); // Check if the response was successful if (!$response->successful()) { @@ -313,22 +313,36 @@ class AlarmService } - public function filterAlarm(array $data) + public function filterAlarm(array $data, $useId) { $token = $this->getToken(); + $deviceId = null; + + if (!empty($data['deviceId'])) { + $deviceId = $data['deviceId']; + } + elseif (!empty($data['assetId'])) { + $deviceId = Device::where('asset_id', $data['assetId'])->value('id'); + } + + if (!empty($data['assetId']) && empty($deviceId)) { + return [ + 'data' => [], + 'totalPages' => 0, + 'totalElements' => 0, + 'hasNext' => false, + ]; + } + $queryParams = array_filter([ - // 'statusList' => $data['statusList'] ?? null, 'severityList' => $data['severity'] ?? null, - // 'typeList' => $data['type'] ?? null, - // 'assigneeId' => $data['assigneeId'] ?? null, + 'assigneeId' => $useId, 'pageSize' => $data['pageSize'] ?? 10, 'page' => $data['page'] ?? 0, - // 'textSearch' => $data['textSearch'] ?? null, - // 'sortProperty' => $data['sortProperty'] ?? null, - // 'sortOrder' => $data['sortOrder'] ?? null, 'startTime' => $data['startTs'] ?? null, 'endTime' => $data['endTs'] ?? null, + 'deviceId' => $deviceId, ], function ($value) { return $value !== null; }); @@ -345,9 +359,27 @@ class AlarmService throw new Exception('API Error: ' . $response->body()); } - return $response->json(); + $responseData = $response->json(); + + // If device filtering was applied, refine the results manually + if (!empty($deviceId) && isset($responseData['data'])) { + $filteredData = array_values(array_filter( + $responseData['data'], + function ($alarm) use ($deviceId) { + return isset($alarm['originator']['id']) && $alarm['originator']['id'] === $deviceId; + } + )); + + // Update response with the filtered data + $responseData['data'] = $filteredData; + $responseData['totalElements'] = count($filteredData); + } + + return $responseData; } + + public function createOrUpdateAlarm(array $data) { diff --git a/routes/admin_api.php b/routes/admin_api.php index 1cacdd2..d3ec6aa 100644 --- a/routes/admin_api.php +++ b/routes/admin_api.php @@ -60,7 +60,6 @@ Route::post('/update-device-profile-master/{deviceId}', [DeviceProfileMasterCont Route::post('/alarm/create-or-update', [AlarmControllerCommon::class, 'createOrUpdateAlarm'])->name('alarm.create-or-update'); Route::get('/alarm/{id}', [AlarmControllerCommon::class, 'getAlarmById'])->name('get.alarm'); Route::post('/alarm/ack/{id}', [AlarmControllerCommon::class, 'acknowledgeAlarmById'])->name('ack.alarm'); -Route::post('/alarm/filter', [AlarmControllerCommon::class, 'filterAlarm'])->name('alarm.filter'); //******************************************************* Rule Chain API ******************************************************** Route::get('/rule-chains', [RuleChainController::class, 'getRuleChainList'])->name('list.RuleChain'); diff --git a/routes/customer_api.php b/routes/customer_api.php index 0a3e31f..c0fed3d 100644 --- a/routes/customer_api.php +++ b/routes/customer_api.php @@ -19,29 +19,29 @@ Route::get('/customerapi', function () { Route::post('user-login', [AuthController::class, 'login']); -Route::post('/telemetry-data-device-diagnostic',[TelemetryController::class,'telemePtryDataDeviceDiagnostic']); +Route::post('/telemetry-data-device-diagnostic', [TelemetryController::class, 'telemePtryDataDeviceDiagnostic']); // Route::post('/user-login', [AuthController::class, 'login']); Route::middleware(['customerApiBasicAuth'])->group(function () { -Route::get('/user-assets', [UserAssetLinkController::class, 'index']); -Route::get('/customer-device-info',[CustomerDeviceInfoController::class,'customerDeviceInfo']); + Route::get('/user-assets', [UserAssetLinkController::class, 'index']); + Route::get('/customer-device-info', [CustomerDeviceInfoController::class, 'customerDeviceInfo']); -Route::post('/telemetry-data-asset',[TelemetryController::class,'telemetryDataAsset']); -Route::post('/telemetry-data-device',[TelemetryController::class,'telemetryDataDevice']); + Route::post('/telemetry-data-asset', [TelemetryController::class, 'telemetryDataAsset']); + Route::post('/telemetry-data-device', [TelemetryController::class, 'telemetryDataDevice']); -Route::get('/user-assets', [UserAssetLinkController::class, 'index']); -Route::post('/store/report', [CustomerApiDownloadsController::class, 'storePdfData'])->name('store-report'); -Route::post('/fetch/report', [CustomerApiDownloadsController::class, 'fetchReport'])->name('fetch-report'); -Route::post('/destroy/report', [CustomerApiDownloadsController::class, 'destroyReport'])->name('destroy-report'); - -Route::post('/alert-message',[TimeseriesAlertMessageController::class, 'alertMessage']); Route::get('/user-assets', [UserAssetLinkController::class, 'index']); Route::post('/store/report', [CustomerApiDownloadsController::class, 'storePdfData'])->name('store-report'); Route::post('/fetch/report', [CustomerApiDownloadsController::class, 'fetchReport'])->name('fetch-report'); Route::post('/destroy/report', [CustomerApiDownloadsController::class, 'destroyReport'])->name('destroy-report'); - Route::post('/alarm', [AlarmControllerCommon::class, 'getDeviceAlarms'])->name('alarm.device'); + Route::post('/alert-message', [TimeseriesAlertMessageController::class, 'alertMessage']); + Route::get('/user-assets', [UserAssetLinkController::class, 'index']); + Route::post('/store/report', [CustomerApiDownloadsController::class, 'storePdfData'])->name('store-report'); + Route::post('/fetch/report', [CustomerApiDownloadsController::class, 'fetchReport'])->name('fetch-report'); + Route::post('/destroy/report', [CustomerApiDownloadsController::class, 'destroyReport'])->name('destroy-report'); -}); \ No newline at end of file + Route::post('/alarm/filter', [AlarmControllerCommon::class, 'filterAlarm'])->name('alarm.filter'); + Route::post('/alarm', [AlarmControllerCommon::class, 'getDeviceAlarms'])->name('alarm.device'); +});