From 7ba3d531555b956a80b1bb77e55af89c809bb879 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 21 Dec 2025 15:15:24 +0330 Subject: [PATCH] add web service --- .../Mission/ControlUnitController.php | 20 ++++++++++++++++--- .../Mission/RequestPortalController.php | 18 +++++++++++++++-- .../TransportaionUnit/DeallocateRequest.php | 3 ++- .../Mission/SendDataToFMSListener.php | 10 +--------- app/Services/FMS/GetErrorRateService.php | 13 ++++++++++-- 5 files changed, 47 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ControlUnitController.php b/app/Http/Controllers/V3/Dashboard/Mission/ControlUnitController.php index 93f29906..06a07c13 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ControlUnitController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ControlUnitController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; +use App\Enums\FMSResultCode; use App\Enums\MissionStates; use App\Events\V3\Dashboard\Mission\SendDataToFMSEvent; use App\Http\Controllers\Controller; @@ -11,6 +12,7 @@ use App\Http\Requests\V3\Mission\ControlUnit\StartRequest; use App\Http\Traits\ApiResponse; use App\Models\Mission; use App\Services\Cartables\Mission\ControlUnitService; +use App\Services\FMS\GetErrorRateService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -52,9 +54,9 @@ class ControlUnitController extends Controller /** * @throws Throwable */ - public function finish(FinishRequest $request, Mission $mission): JsonResponse + public function finish(FinishRequest $request, Mission $mission, GetErrorRateService $getErrorRateService): JsonResponse { - DB::transaction(function () use ($mission) { + DB::transaction(function () use ($mission, $getErrorRateService) { $mission->histories()->create([ 'user_id' => auth()->user()->id, 'previous_state_id' => $mission->state_id, @@ -69,6 +71,18 @@ class ControlUnitController extends Controller 'finish_time' => now(), 'mission_duration' => strtotime(now()) - strtotime($mission->start_time), ]); + + $getErrorRateService->setInputParameters($mission); + $responseData = $getErrorRateService->run(); + + $mission->update([ + 'in_area_duration' => $responseData['timeInAreaSeconds'], + 'first_enter' => $responseData['firstEnter'], + 'last_exit' => $responseData['lastExit'], + 'point_number_sent' => $responseData['noOfPointsInMission'], + 'fms_result_code' => $responseData['resultCode'], + 'fms_result_message' => FMSResultCode::name($responseData['resultCode']), + ]); }); if ($mission->category_id == 2) { @@ -76,7 +90,7 @@ class ControlUnitController extends Controller $rpc->store($mission); } - SendDataToFMSEvent::dispatch($mission); +// SendDataToFMSEvent::dispatch($mission); return $this->successResponse(); } diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index b35a66e6..007195a9 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; +use App\Enums\FMSResultCode; use App\Enums\MissionCategory; use App\Enums\MissionStates; use App\Enums\MissionTypes; @@ -17,6 +18,7 @@ use App\Models\CMMSMachine; use App\Models\Mission; use App\Models\RoadObserved; use App\Services\Cartables\Mission\RequestPortalService; +use App\Services\FMS\GetErrorRateService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -83,9 +85,9 @@ class RequestPortalController extends Controller /** * @throws Throwable */ - public function continueMission(ContinueMissionRequest $request, Mission $mission): JsonResponse + public function continueMission(ContinueMissionRequest $request, Mission $mission, GetErrorRateService $getErrorRateService): JsonResponse { - DB::transaction(function () use ($request, $mission) { + DB::transaction(function () use ($request, $mission, $getErrorRateService) { $user = auth()->user(); $mission->update([ @@ -94,6 +96,18 @@ class RequestPortalController extends Controller 'state_name' => MissionStates::name(MissionStates::END_MISSION->value), ]); + $getErrorRateService->setInputParameters($mission); + $responseData = $getErrorRateService->run(); + + $mission->update([ + 'in_area_duration' => $responseData['timeInAreaSeconds'], + 'first_enter' => $responseData['firstEnter'], + 'last_exit' => $responseData['lastExit'], + 'point_number_sent' => $responseData['noOfPointsInMission'], + 'fms_result_code' => $responseData['resultCode'], + 'fms_result_message' => FMSResultCode::name($responseData['resultCode']), + ]); + if ($mission->category_id == 2) { $rpc = new OperatorController; $rpc->store($mission); diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php index f20d833a..e2d94deb 100644 --- a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php @@ -13,7 +13,8 @@ class DeallocateRequest extends FormRequest */ public function authorize(): bool { - return $this->mission->edare_shahri_id == auth()->user()->edarate_shahri_id && $this->mission->state_id == MissionStates::REQUEST_CREATED->value; + return $this->mission->edare_shahri_id == auth()->user()->edarate_shahri_id && + in_array($this->mission->state_id, [MissionStates::REQUEST_CREATED->value, MissionStates::PENDING_CONFIRMATION->value]); } /** diff --git a/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php b/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php index 90f2671b..1e40d59d 100644 --- a/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php +++ b/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php @@ -28,15 +28,7 @@ class SendDataToFMSListener implements ShouldQueue { $mission = $event->mission; - $this->getErrorRateService->setInputParameters([ - 'username' => config('fms_web_services.Error_Rate.username'), - 'password' => config('fms_web_services.Error_Rate.password'), - 'missionArea' => $mission->getMissionAreaForFms(), - 'missionStartDT' => $mission->start_time->format('Y-m-d\TH:i:s'), - 'missionEndDT' => $mission->finish_time->format('Y-m-d\TH:i:s'), - 'machineCode' => $mission->machine_code, - 'areaType' => $mission->area['type'] === 'polygon' ? 1 : 2, - ]); + $this->getErrorRateService->setInputParameters($mission); $responseData = $this->getErrorRateService->run(); diff --git a/app/Services/FMS/GetErrorRateService.php b/app/Services/FMS/GetErrorRateService.php index a01562de..60b5cec5 100644 --- a/app/Services/FMS/GetErrorRateService.php +++ b/app/Services/FMS/GetErrorRateService.php @@ -2,6 +2,7 @@ namespace App\Services\FMS; +use App\Models\Mission; use Exception; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; @@ -18,9 +19,17 @@ class GetErrorRateService $this->channelName = 'fms_error_rate'; } - public function setInputParameters(array $inputs): void + public function setInputParameters(Mission $mission): void { - $this->inputParameters = $inputs; + $this->inputParameters = [ + 'username' => config('fms_web_services.Error_Rate.username'), + 'password' => config('fms_web_services.Error_Rate.password'), + 'missionArea' => $mission->getMissionAreaForFms(), + 'missionStartDT' => $mission->start_time->format('Y-m-d\TH:i:s'), + 'missionEndDT' => $mission->finish_time->format('Y-m-d\TH:i:s'), + 'machineCode' => $mission->machine_code, + 'areaType' => $mission->area['type'] === 'polygon' ? 1 : 2, + ]; } /**