diff --git a/app/Admin/Services/OvertimeApplyService.php b/app/Admin/Services/OvertimeApplyService.php index 7e297e0..4dc7958 100644 --- a/app/Admin/Services/OvertimeApplyService.php +++ b/app/Admin/Services/OvertimeApplyService.php @@ -64,25 +64,24 @@ class OvertimeApplyService extends BaseService if (! isset($data['store_id']) && isset($data['employee_id'])) { $data['store_id'] = Employee::where('id', $data['employee_id'])->value('store_id'); } - if (isset($data['datetime_range'])) { - $time = explode(',', $data['datetime_range']); - $start = Carbon::createFromTimestamp(data_get($time, 0))->startOfMinute(); - $end = Carbon::createFromTimestamp(data_get($time, 1))->startOfMinute(); - $data['start_at'] = $start; - $data['end_at'] = $end; - $data['date'] = $start->format('Y-m-d'); + + if (isset($data['start_at']) && isset($data['duration'])) { + $data['end_at'] = Carbon::createFromFormat('Y-m-d H:i', $data['start_at']) + ->addMinutes($data['duration'] * 60) + ->rawFormat('Y-m-d H:i'); + } elseif (isset($data['datetime_range'])) { + $timestamps = explode(',', $data['datetime_range']); + $start = Carbon::createFromTimestamp($timestamps[0]); + $end = Carbon::createFromTimestamp($timestamps[1]); + $data['start_at'] = $start->toDateTimeString(); + $data['end_at'] = $end->toDateTimeString(); } + if (isset($data['start_at']) && isset($data['end_at'])) { - $start = $data['start_at']; - if (! $start instanceof Carbon) { - $start = Carbon::parse($start)->startOfMinute(); - } - - $end = $data['end_at']; - if (! $end instanceof Carbon) { - $end = Carbon::parse($end)->startOfMinute(); - } + $start = Carbon::createFromFormat('Y-m-d H:i', $data['start_at']); + $end = Carbon::createFromFormat('Y-m-d H:i', $data['end_at']); + $data['date'] = $start->toDateString(); $data['hours'] = $start->diffInHours($end); } @@ -91,12 +90,11 @@ class OvertimeApplyService extends BaseService public function validate($data, $model = null) { - // todo 验证申请时间是否重复 $createRules = [ 'employee_id' => ['required'], - 'date' => ['required', 'date'], - 'start_at' => ['required', 'date'], - 'end_at' => ['required', 'date'], + 'date' => ['required', 'date_format:Y-m-d'], + 'start_at' => ['required', 'date_format:Y-m-d H:i'], + 'end_at' => ['required', 'date_format:Y-m-d H:i'], ]; $updateRules = []; $validator = Validator::make($data, $model ? $updateRules : $createRules, []); diff --git a/app/Http/Controllers/Api/Hr/OvertimeController.php b/app/Http/Controllers/Api/Hr/OvertimeController.php index fd0f52d..ca78e23 100644 --- a/app/Http/Controllers/Api/Hr/OvertimeController.php +++ b/app/Http/Controllers/Api/Hr/OvertimeController.php @@ -36,6 +36,21 @@ class OvertimeController extends Controller public function store(Request $request, OvertimeApplyService $service) { + $request->validate( + rules: [ + // 'date' => ['bail', 'required', 'date_format:Y-m-d'], + 'start_at' => ['bail', 'required', 'date_format:Y-m-d H:i'], + 'duration' => ['bail', 'required', 'int', 'min:1'], + 'reason' => ['bail', 'nullable', 'string', 'max:255'], + ], + attributes: [ + 'date' => '日期', + 'start_at' => '开始时间', + 'duration' => '加班时长', + 'reason' => '加班事由', + ], + ); + $user = $this->guard()->user(); $data = $request->all(); $data['employee_id'] = $user->id; @@ -43,7 +58,7 @@ class OvertimeController extends Controller try { DB::beginTransaction(); if (!$service->store($data)) { - throw new RuntimeException($result); + throw new RuntimeException($service->getError()); } $model = $service->getCurrentModel(); $workflow = WorkFlowService::make(); @@ -55,12 +70,27 @@ class OvertimeController extends Controller return response()->noContent(); } catch (\Exception $e) { DB::rollBack(); - throw new RuntimeException($e->getMessage()); + throw tap($e, fn ($e) => report($e)); } } public function update($id, Request $request, OvertimeApplyService $service) { + $request->validate( + rules: [ + // 'date' => ['bail', 'required', 'date_format:Y-m-d'], + 'start_at' => ['bail', 'required', 'date_format:Y-m-d H:i'], + 'duration' => ['bail', 'required', 'int', 'min:1'], + 'reason' => ['bail', 'nullable', 'string', 'max:255'], + ], + attributes: [ + 'date' => '日期', + 'start_at' => '开始时间', + 'duration' => '加班时长', + 'reason' => '加班事由', + ], + ); + $user = $this->guard()->user(); $model = OvertimeApply::where('employee_id', $user->id)->findOrFail($id);