From 5d2a6d045b9964ea59c78e99db0959e196529e2b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 10 Jun 2026 14:37:36 +0330 Subject: [PATCH] fix bugs --- app/Enums/CmmsMachineStatus.php | 2 +- app/Enums/MissionViolationStatus.php | 4 + .../Mission/RequestPortalController.php | 6 +- .../Mission/ViolationManagementController.php | 7 +- .../RequestPortal/ContinueMissionRequest.php | 5 +- .../V3/Mission/RequestPortal/StoreRequest.php | 11 ++- .../Mission/RequestPortal/UpdateRequest.php | 11 ++- .../V3/Mission/Violation/NoProcessRequest.php | 6 +- .../V3/Mission/Violation/StoreRequest.php | 3 +- .../V3/Mission/Violation/UpdateRequest.php | 3 +- app/Models/Mission.php | 7 -- app/Services/PolylineEncoder.php | 88 +++++++++++++++++++ 12 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 app/Services/PolylineEncoder.php diff --git a/app/Enums/CmmsMachineStatus.php b/app/Enums/CmmsMachineStatus.php index f8539109..e9f75a14 100644 --- a/app/Enums/CmmsMachineStatus.php +++ b/app/Enums/CmmsMachineStatus.php @@ -18,7 +18,7 @@ enum CmmsMachineStatus: int self::AMADE => 'آماده', self::RESERVE => 'رزرو', self::DAR_MAMORIAT => 'در ماموریت', - self::KHAREGE_AZ_RADE => 'خارج از محدوده', + self::KHAREGE_AZ_RADE => 'خارج از رده', self::DAR_TAMIR => 'در تعمیر', self::FOROKHTEH_SHODE => ' فروخته شده', self::NIZE_BE_TAMIR => 'نیاز به تعمیر', diff --git a/app/Enums/MissionViolationStatus.php b/app/Enums/MissionViolationStatus.php index 68c75118..741af85f 100644 --- a/app/Enums/MissionViolationStatus.php +++ b/app/Enums/MissionViolationStatus.php @@ -2,16 +2,20 @@ namespace App\Enums; +use function Symfony\Component\String\s; + enum MissionViolationStatus: int { case BEDON_EGHDAM = 0; case EGHDAM_SHODE = 1; + case SABT_SHODE = 2; public function label(): string { return match ($this) { self::BEDON_EGHDAM => "بدون اقدام", self::EGHDAM_SHODE => "اقدام شده", + self::SABT_SHODE => "ثبت شده توسط حراست" }; } } \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index 27a80276..3881a3cc 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -66,7 +66,7 @@ class RequestPortalController extends Controller 'request_date' => now(), 'description' => $request->description, 'end_point' => $request->end_point, - 'area' => json_encode($request->area), + 'area' => $request->area, 'category_id' => $request->category_id, 'category_name' => MissionCategory::name($request->category_id), 'explanation' => $request->explanation, @@ -136,7 +136,7 @@ class RequestPortalController extends Controller 'request_date' => now(), 'description' => $request->description, 'end_point' => $request->end_point, - 'area' => json_encode($request->area), + 'area' => $request->area, 'category_id' => $request->category_id, 'category_name' => MissionCategory::name($request->category_id), 'explanation' => $request->explanation, @@ -174,7 +174,7 @@ class RequestPortalController extends Controller 'end_date' => $request->end_date, 'description' => $request->description, 'end_point' => $request->end_point, - 'area' => json_encode($request->area), + 'area' => $request->area, 'category_id' => $request->category_id, 'category_name' => MissionCategory::name($request->category_id), 'explanation' => $request->explanation, diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php index af018f7f..5617b251 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/ViolationManagementController.php @@ -61,6 +61,7 @@ class ViolationManagementController extends Controller 'edare_shahri_name' => $user->edarate_shahri_name ?? null, 'zone' => $zone, 'zone_fa' => MissionZones::name($zone), + 'area' => $request->area, 'type' => $type, 'type_fa' => MissionTypes::name($type), 'start_date' => $request->start_date, @@ -103,7 +104,7 @@ class ViolationManagementController extends Controller 'machine_id'=> CMMSMachine::query()->where('machine_code', '=', $request->machine_code)->value('id'), 'machine_code'=> $request->machine_code, 'type'=> MissionViolationType::KHOROJ_BEDONE_MOGAVEZ->value, - 'status' => MissionViolationStatus::BEDON_EGHDAM->value, + 'status' => MissionViolationStatus::SABT_SHODE->value, 'request_date' => now(), 'km' => $request->km, 'gps' => 0, @@ -111,6 +112,9 @@ class ViolationManagementController extends Controller 'province_name' => $user->province_fa, 'city_id' => $user->city_id, 'city_name' => $user->city_fa, + 'station_id' => $user->station_id, + 'station_name' => RahdariPoint::query()->find($user->station_id)->name, + 'exit_time' => $request->exit_time, ]); return $this->successResponse(); @@ -125,7 +129,6 @@ class ViolationManagementController extends Controller { $violation->update([ 'enter_time' => $request->enter_time, - 'exit_time' => $request->exit_time, ]); return $this->successResponse(); diff --git a/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php index bff88565..c76d5282 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php @@ -35,12 +35,9 @@ class ContinueMissionRequest extends FormRequest 'end_date' => 'required|date', 'description' => 'string', 'end_point' => 'required|string', - 'area' => 'required|array', - 'area.type' => 'required|string', - 'area.coordinates' => 'required|array', + 'area' => 'required|string', 'explanation' => 'required|string', 'category_id' => 'required|in:1,2,3', - 'road_observed_id' => 'required_if:category_id,3|exists:road_observeds,id', ]; } diff --git a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php index c9233d40..0baa1614 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php @@ -34,12 +34,9 @@ class StoreRequest extends FormRequest 'end_date' => 'required|date', 'description' => 'string', 'end_point' => 'required|string', - 'area' => 'required|array', - 'area.type' => 'required|string', - 'area.coordinates' => 'required|array', + 'area' => 'required|string', 'explanation' => 'required|string', 'category_id' => 'required|in:1,2,3', - 'road_observed_id' => 'required_if:category_id,3|exists:road_observeds,id', ]; } @@ -58,6 +55,12 @@ class StoreRequest extends FormRequest ); } } + if (strtotime($this->end_date) < strtotime($this->start_date)) { + $validator->errors()->add( + 'time', + 'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.' + ); + } }, ]; } diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php index fb80a7f6..aebee794 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -35,12 +35,9 @@ class UpdateRequest extends FormRequest 'end_date' => 'required|date', 'description' => 'string', 'end_point' => 'required|string', - 'area' => 'required|array', - 'area.type' => 'required|string', - 'area.coordinates' => 'required|array', + 'area' => 'required|string', 'explanation' => 'required|string', 'category_id' => 'required|in:1,2,3', - 'road_observed_id' => 'required_if:category_id,3|exists:road_observeds,id', ]; } @@ -59,6 +56,12 @@ class UpdateRequest extends FormRequest ); } } + if (strtotime($this->end_date) < strtotime($this->start_date)) { + $validator->errors()->add( + 'time', + 'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.' + ); + } }, ]; } diff --git a/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php b/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php index 6f223b4c..7026fa5d 100644 --- a/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php +++ b/app/Http/Requests/V3/Mission/Violation/NoProcessRequest.php @@ -2,8 +2,10 @@ namespace App\Http\Requests\V3\Mission\Violation; +use Carbon\Carbon; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Validator; class NoProcessRequest extends FormRequest { @@ -30,9 +32,7 @@ class NoProcessRequest extends FormRequest 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date|before:now', 'end_point' => 'required|string', - 'area' => 'array', - 'area.type' => 'string', - 'area.coordinates' => 'array', + 'area' => 'required|string', 'category_id' => 'required|in:1,2,3', 'explanation' => 'required|string', ]; diff --git a/app/Http/Requests/V3/Mission/Violation/StoreRequest.php b/app/Http/Requests/V3/Mission/Violation/StoreRequest.php index 07e5b36f..16ea27bc 100644 --- a/app/Http/Requests/V3/Mission/Violation/StoreRequest.php +++ b/app/Http/Requests/V3/Mission/Violation/StoreRequest.php @@ -25,7 +25,8 @@ class StoreRequest extends FormRequest public function rules(): array { return [ - 'machine_code' => 'required', + 'exit_time' => 'required|date', + 'machine_code' => 'required', 'km'=> 'string', ]; } diff --git a/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php index d2f8e22a..3b5ad00a 100644 --- a/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php @@ -26,8 +26,7 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ - 'exit_time' => 'date', - 'enter_time' => 'date', + 'enter_time' => 'required|date', ]; } } diff --git a/app/Models/Mission.php b/app/Models/Mission.php index 899da5ea..a277162a 100644 --- a/app/Models/Mission.php +++ b/app/Models/Mission.php @@ -28,13 +28,6 @@ class Mission extends Model ); } - protected function area(): Attribute - { - return Attribute::make( - get: fn($value) => json_decode($value, true) - ); - } - public function histories(): HasMany { return $this->hasMany(MissionHistory::class); diff --git a/app/Services/PolylineEncoder.php b/app/Services/PolylineEncoder.php new file mode 100644 index 00000000..3f4dda19 --- /dev/null +++ b/app/Services/PolylineEncoder.php @@ -0,0 +1,88 @@ +encodeValue((int)round($lat * $factor) - $prevLat); + $output .= $this->encodeValue((int)round($lng * $factor) - $prevLng); + + $prevLat = (int)round($lat * $factor); + $prevLng = (int)round($lng * $factor); + } + + return $output; + } + + /** + * Encodes a single integer value using Google's polyline encoding algorithm. + * + * Steps: + * - Left shift the value + * - Invert bits if negative + * - Split into 5-bit chunks + * - Convert to ASCII characters + * + * @param int $value Signed integer delta to encode + * + * @return string Encoded character sequence + */ + public function encodeValue(int $value): string + { + $value = $value < 0 ? ~($value << 1) : ($value << 1); + $result = ''; + + while ($value >= 0x20) { + $result .= chr((0x20 | ($value & 0x1f)) + 63); + $value >>= 5; + } + + return $result . chr($value + 63); + } +} -- 2.49.1