diff --git a/app/Enums/FMSResultCode.php b/app/Enums/FMSResultCode.php index af8d06a9..810d1db5 100644 --- a/app/Enums/FMSResultCode.php +++ b/app/Enums/FMSResultCode.php @@ -2,24 +2,24 @@ namespace App\Enums; -enum FMSResultCode: int +enum FMSResultCode: string { - case SUCCESSFUL = 0; - case INVALID_CREDENTIAL = 1; - case NO_GPS_DEVICE_CONNECTED = 2; - case UNAUTHORIZE = 3; - case RATE_LIMIT = 4; - case INVALID_PARAMETERS = 5; + case SUCCESSFUL = "0"; + case INVALID_CREDENTIAL = "-1"; + case NO_GPS_DEVICE_CONNECTED = "-2"; + case UNAUTHORIZE = "-3"; + case RATE_LIMIT = "-4"; + case INVALID_PARAMETERS = "-5"; - public static function name(int $state): string + public static function name(string $state): string { $mapArray = [ - 0 => "اﺟﺮاي ﺗﺎﺑﻊ ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﺑﻮد.", - 1 => "نام ﮐﺎرﺑﺮي ﯾﺎ ﮐﻠﻤﻪ ﻋﺒﻮر ﺻﺤﯿﺢ ﻧﯿﺴﺖ.", - 2 => "خودرو با کد مورد نظر وجود ندارد یا دستگاه ردیاب به آن متصل نیست.", - 3 => "کاربر به خودرو مورد نظر دسترسی ندارد.", - 4 => "ﺗﻌﺪاد دﻓﻌﺎت ﺟﺮاي ﺗﺎﺑﻊ ﺑﯿﺶ از ﺣﺪ ﻣﺠﺎز اﺳﺖ(اﯾﻦ ﺳﺮوﯾﺲ را در ﻫﺮ ثاﻧﯿﻪ ﻓﻘﻂ ﯾﮏ ﺑﺎر ﻣﯽﺗﻮان اﺟﺮاﮐﺮد)", - 5 => "پارامتر های داده شده صحیح نیستند", + "0" => "اﺟﺮاي ﺗﺎﺑﻊ ﻣﻮﻓﻘﯿﺖ آﻣﯿﺰ ﺑﻮد.", + "-1" => "نام ﮐﺎرﺑﺮي ﯾﺎ ﮐﻠﻤﻪ ﻋﺒﻮر ﺻﺤﯿﺢ ﻧﯿﺴﺖ.", + "-2" => "خودرو با کد مورد نظر وجود ندارد یا دستگاه ردیاب به آن متصل نیست.", + "-3" => "کاربر به خودرو مورد نظر دسترسی ندارد.", + "-4" => "ﺗﻌﺪاد دﻓﻌﺎت ﺟﺮاي ﺗﺎﺑﻊ ﺑﯿﺶ از ﺣﺪ ﻣﺠﺎز اﺳﺖ(اﯾﻦ ﺳﺮوﯾﺲ را در ﻫﺮ ثاﻧﯿﻪ ﻓﻘﻂ ﯾﮏ ﺑﺎر ﻣﯽﺗﻮان اﺟﺮاﮐﺮد)", + "-5" => "پارامتر های داده شده صحیح نیستند", ]; return $mapArray[$state]; diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index f5dc950c..03482c71 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -86,10 +86,14 @@ class RequestPortalController extends Controller { DB::transaction(function () use ($request, $mission) { $user = auth()->user(); + + $mission->update([ + 'finish_time' => now(), + 'state_id' => MissionStates::END_MISSION->value, + 'state_name' => MissionStates::name(MissionStates::END_MISSION->value), + ]); - $mission->update(['finish_time' => now()]); - - $state = MissionStates::REQUEST_CREATED->value; + $state = MissionStates::START_MISSION->value; $category = $request->category_id; $newMission = Mission::query()->create([ diff --git a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php index e15cdccc..79f9b66c 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php @@ -39,6 +39,7 @@ class TransportationUnitController extends Controller $mission->update([ 'state_id' => $state, 'state_name' => MissionStates::name($state), + 'km' => $request->km ]); }); diff --git a/app/Http/Controllers/V3/RahdaranController.php b/app/Http/Controllers/V3/RahdaranController.php index 13143436..a4128cc3 100644 --- a/app/Http/Controllers/V3/RahdaranController.php +++ b/app/Http/Controllers/V3/RahdaranController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\V3\Rahdaran\StoreRequest; use App\Http\Requests\V3\Rahdaran\UpdateRequest; use App\Http\Traits\ApiResponse; +use App\Models\Province; use App\Models\Rahdaran; use Illuminate\Database\QueryException; use Illuminate\Http\JsonResponse; @@ -28,11 +29,17 @@ class RahdaranController extends Controller public function store(StoreRequest $request): JsonResponse { + $province = Province::query()->find($request->input('province_id')); + Rahdaran::query()->create([ - 'name' =>$request->name, - 'code' =>$request->code, - 'mobile' =>$request->mobile, + 'name' => $request->name, + 'code' => $request->code, + 'mobile' => $request->mobile, + 'province_id' => $province->id, + 'province_name' => $province->name_fa, + 'edareh_shahri_id' => $request->edareh_shahri_id, ]); + return $this->successResponse(); } @@ -43,11 +50,17 @@ class RahdaranController extends Controller public function update(UpdateRequest $request, Rahdaran $rahdaran): JsonResponse { + $province = Province::query()->find($request->input('province_id')); + $rahdaran->update([ 'name' =>$request->name, 'code' =>$request->code, 'mobile' =>$request->mobile, + 'province_id' => $province->id, + 'province_name' => $province->name_fa, + 'edareh_shahri_id' => $request->edareh_shahri_id, ]); + return $this->successResponse(); } diff --git a/app/Http/Requests/V3/Rahdaran/StoreRequest.php b/app/Http/Requests/V3/Rahdaran/StoreRequest.php index 3abec426..8d946ba4 100644 --- a/app/Http/Requests/V3/Rahdaran/StoreRequest.php +++ b/app/Http/Requests/V3/Rahdaran/StoreRequest.php @@ -26,6 +26,8 @@ class StoreRequest extends FormRequest 'name' => 'required|string|max:255', 'code' => 'required|string|max:255|unique:rahdaran,code', 'mobile' => 'required|digits:11|regex:/^09\d{9}$/', + 'province_id' => 'required|exists:provinces,id', + 'edareh_shahri_id' => 'required|exists:edarate_shahri,id', ]; } } diff --git a/app/Http/Requests/V3/Rahdaran/UpdateRequest.php b/app/Http/Requests/V3/Rahdaran/UpdateRequest.php index 522faa53..0f19e72a 100644 --- a/app/Http/Requests/V3/Rahdaran/UpdateRequest.php +++ b/app/Http/Requests/V3/Rahdaran/UpdateRequest.php @@ -27,6 +27,8 @@ class UpdateRequest extends FormRequest 'name' => 'required|string|max:255', 'code' => ['required', 'string', Rule::unique('rahdaran', 'code')->ignore($this->rahdaran->id)], 'mobile' => 'required|digits:11|regex:/^09\d{9}$/', + 'province_id' => 'required|exists:provinces,id', + 'edareh_shahri_id' => 'required|exists:edarate_shahri,id', ]; } } diff --git a/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php b/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php index 1d0b249b..df8d92f4 100644 --- a/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php +++ b/app/Listeners/V3/Dashboard/Mission/SendDataToFMSListener.php @@ -29,7 +29,7 @@ class SendDataToFMSListener implements ShouldQueue $mission = $event->mission; $this->getErrorRateService->setInputParameters([ - 'url' => config('fms_web_services.Error_Rate.url'), + 'username' => config('fms_web_services.Error_Rate.username'), 'password' => config('fms_web_services.Error_Rate.password'), 'missionArea' => $mission->area['coordinates'], 'missionStartDT' => $mission->start_time->format('Y-m-d\TH:i:s'), diff --git a/app/Models/Accident.php b/app/Models/Accident.php index f9ef31e5..48479339 100644 --- a/app/Models/Accident.php +++ b/app/Models/Accident.php @@ -134,7 +134,7 @@ class Accident extends Model ); } - protected function depositIdaghiImage(): Attribute + protected function depositDaghiImage(): Attribute { return Attribute::make( get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 3c96091a..1276b656 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -73,6 +73,12 @@ class RouteServiceProvider extends ServiceProvider ->middleware(['web', 'auth', 'confirmUser']) ->namespace($this->namespace) ->group(base_path('routes/v3.php')); + + Route::prefix('webservice') + ->name('webservice.') + ->namespace($this->namespace) + ->group(base_path('routes/webservices.php')); + Route::prefix('api') ->middleware('api') ->namespace($this->namespace) diff --git a/app/Services/FMS/GetErrorRateService.php b/app/Services/FMS/GetErrorRateService.php index bf2f699c..a01562de 100644 --- a/app/Services/FMS/GetErrorRateService.php +++ b/app/Services/FMS/GetErrorRateService.php @@ -10,13 +10,11 @@ class GetErrorRateService { protected string $url; protected string $channelName; - protected string $password; - protected string $username; protected array $inputParameters; public function __construct() { - $this->username = config('fms_web_services.Error_Rate.username'); + $this->url = config('fms_web_services.Error_Rate.url'); $this->channelName = 'fms_error_rate'; } @@ -48,9 +46,10 @@ class GetErrorRateService public function sendRequest(): array { return Http::withHeaders(['Content-Type' => 'application/json']) + ->withBody(json_encode($this->inputParameters)) ->throw() ->withoutVerifying() - ->post($this->url, $this->inputParameters) + ->post($this->url) ->json(); } } diff --git a/database/migrations/2025_09_27_094044_add_column_to_rahdaran_table.php b/database/migrations/2025_09_27_094044_add_column_to_rahdaran_table.php new file mode 100644 index 00000000..b4ce92f6 --- /dev/null +++ b/database/migrations/2025_09_27_094044_add_column_to_rahdaran_table.php @@ -0,0 +1,35 @@ +unsignedTinyInteger('province_id'); + $table->foreign('province_id')->references('id')->on('provinces'); + $table->string('province_name'); + $table->unsignedBigInteger('edareh_shahri_id'); + $table->foreign('edareh_shahri_id')->references('id')->on('edarate_shahri'); + $table->boolean('is_driver')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('rahdaran', function (Blueprint $table) { + $table->dropForeign('province_id'); + $table->dropForeign('edareh_shahri_id'); + $table->dropColumn(['province_id', 'province_name']); + }); + } +}; diff --git a/database/migrations/2025_09_27_103048_add_column_to_missions_table.php b/database/migrations/2025_09_27_103048_add_column_to_missions_table.php new file mode 100644 index 00000000..7ad33f57 --- /dev/null +++ b/database/migrations/2025_09_27_103048_add_column_to_missions_table.php @@ -0,0 +1,28 @@ +string('km')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('missions', function (Blueprint $table) { + $table->dropColumn('km'); + }); + } +}; diff --git a/routes/v3.php b/routes/v3.php index 37496c5c..7120ef76 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -10,7 +10,6 @@ use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshSampleController; use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshTypeController; use App\Http\Controllers\V3\Dashboard\Harim\GeneralManagerController; use App\Http\Controllers\V3\Dashboard\Harim\HarimOfficeController; -use App\Http\Controllers\V3\Dashboard\Harim\PanjareVahedController; use App\Http\Controllers\V3\Dashboard\Harim\ProvinceOfficeController; use App\Http\Controllers\V3\Dashboard\Harim\TechnicalDeputyController; use App\Http\Controllers\V3\Dashboard\ItemsManagementController; @@ -488,7 +487,7 @@ Route::prefix('missions') Route::get('/', 'index')->name('index'); Route::post('/', 'store')->name('store'); Route::post('/no_process','noProcess')->name('noProcess'); - Route::post('/continue','continueMission')->name('continueMission'); + Route::post('/continue/{mission}','continueMission')->name('continueMission'); Route::get('/{mission}', 'show')->name('show'); Route::post('/{mission}', 'update')->name('update'); Route::delete('/{mission}', 'destroy')->name('destroy'); @@ -568,15 +567,6 @@ Route::prefix('harim') Route::post('/confirm_guarantee_letter_need/{harim}', 'confirmGuaranteeLetterNeed')->name('confirmGuaranteeLetterNeed'); Route::get('/{harim}', 'show')->name('show'); }); - Route::prefix('panjare_vahed') - ->name('panjarevahed.') - ->controller(PanjarevahedController::class) - ->group(function () { - Route::post('/receive_new_request', 'receiveNewRequest')->name('receiveNewRequest'); - Route::post('/receive_access_road','getAccessRoad')->name('getAccessRoad'); - Route::post('/get_status_request','getRejectRequest')->name('getRejectRequest'); - Route::post('/get_final_polygons','getFinalPolygons')->name('getFinalPolygons'); - }); }); Route::prefix('user_management') diff --git a/routes/webservices.php b/routes/webservices.php new file mode 100644 index 00000000..8626fa4b --- /dev/null +++ b/routes/webservices.php @@ -0,0 +1,18 @@ +name('harim.') + ->group(function () { + Route::prefix('panjare_vahed') + ->name('panjarevahed.') + ->controller(PanjarevahedController::class) + ->group(function () { + Route::post('/receive_new_request', 'receiveNewRequest')->name('receiveNewRequest'); + Route::post('/receive_access_road','getAccessRoad')->name('getAccessRoad'); + Route::post('/get_status_request','getRejectRequest')->name('getRejectRequest'); + Route::post('/get_final_polygons','getFinalPolygons')->name('getFinalPolygons'); + }); + }); \ No newline at end of file