From 69b644579f158406fa47e50904fb5a70895a8aca Mon Sep 17 00:00:00 2001 From: Jing Li Date: Sat, 20 Apr 2024 14:45:31 +0800 Subject: [PATCH] Update --- app/Admin/Services/Plan/TaskService.php | 68 ++++++++++++++----------- app/Models/TaskPerformance.php | 14 ++--- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/app/Admin/Services/Plan/TaskService.php b/app/Admin/Services/Plan/TaskService.php index 371898e..cbef630 100644 --- a/app/Admin/Services/Plan/TaskService.php +++ b/app/Admin/Services/Plan/TaskService.php @@ -36,6 +36,7 @@ class TaskService extends BaseService $plan = Plan::findOrFail($data['plan_id']); switch (get_class($planable = $plan->planable)) { + // 业绩指标 case PlanPerformance::class: $payload = $data['task_performance'] ?? []; @@ -54,23 +55,17 @@ class TaskService extends BaseService /** @var \App\Models\Store */ $store = Store::findOrFail($payload['store_id']); - if ( - TaskPerformance::where('store_id', $store->id) - ->where('month', $planable->month) - ->exists() - ) { + if (TaskPerformance::where('store_id', $store->id)->where('month', $planable->month)->exists()) { admin_abort('门店已有业绩指标任务'); } - // 月份 - $month = Carbon::createFromFormat('Y-m', $planable->month); // 开始时间 - $startAt = $month->copy()->startOfMonth(); + $startAt = Carbon::createFromFormat('Y-m-d H:i:s', "{$planable->month}-01 00:00:00"); // 结束时间 - $endAt = $month->copy()->endOfMonth(); + $endAt = $startAt->copy()->endOfMonth(); // 门店实际业绩 - $totalSales = Ledger::where('store_id', $store->id) + $actualPerformance = Ledger::where('store_id', $store->id) ->whereBetween('date', [$startAt->format('Y-m-d'), $endAt->format('Y-m-d')]) ->sum('sales'); @@ -79,23 +74,28 @@ class TaskService extends BaseService 'month' => $planable->month, 'store_id' => $store->id, 'store_master_id' => $store->master_id, + 'actual_performance' => $actualPerformance, 'expected_performance' => $payload['expected_performance'], - 'actual_performance' => $totalSales, ]); - // 月份 - $month = Carbon::createFromFormat('Y-m', $planable->month); - - $taskable->task()->create([ + $task = new Task([ 'plan_id' => $plan->id, 'name' => '业绩指标', - 'start_at' => $month->copy()->startOfMonth(), - 'end_at' => $month->copy()->endOfMonth(), - 'task_status' => $taskable->isCompleted() ? TaskStatus::Success : TaskStatus::Pending, - 'completed_at' => $taskable->isCompleted() ? now() : null, + 'start_at' => $startAt, + 'end_at' => $endAt, + 'task_status' => TaskStatus::Pending, ]); + + if ($taskable->isSuccess()) { + $task->task_status = TaskStatus::Success; + $task->completed_at = now(); + } + + $taskable->task()->save($task); + break; + // 清洁卫生 case PlanHygiene::class: $payload = $data['task_hygiene'] ?? []; @@ -112,11 +112,7 @@ class TaskService extends BaseService /** @var \App\Models\Store */ $store = Store::findOrFail($payload['store_id']); - if ( - TaskHygiene::where('store_id', $store->id) - ->where('month', $planable->month) - ->exists() - ) { + if (TaskHygiene::where('store_id', $store->id)->where('month', $planable->month)->exists()) { admin_abort('门店已有清洁卫生任务'); } @@ -126,16 +122,26 @@ class TaskService extends BaseService 'store_master_id' => $store->master_id, ]); - // 月份 - $month = Carbon::createFromFormat('Y-m', $planable->month); + // 开始时间 + $startAt = Carbon::createFromFormat('Y-m-d H:i:s', "{$planable->month}-01 00:00:00"); + // 结束时间 + $endAt = $startAt->copy()->endOfMonth(); - $taskable->task()->create([ + $task = new Task([ 'plan_id' => $plan->id, 'name' => '清洁卫生', - 'start_at' => $month->copy()->startOfMonth(), - 'end_at' => $month->copy()->endOfMonth(), + 'start_at' => $startAt, + 'end_at' => $endAt, 'task_status' => TaskStatus::Pending, ]); + + if ($taskable->isSuccess()) { + $task->task_status = TaskStatus::Success; + $task->completed_at = now(); + } + + $taskable->task()->save($task); + break; default: @@ -148,6 +154,7 @@ class TaskService extends BaseService public function update($primaryKey, $data): bool { + /** @var \App\Models\Task */ $task = Task::findOrFail($primaryKey); if (in_array($task->task_status, [TaskStatus::Success, TaskStatus::Failed])) { @@ -155,6 +162,7 @@ class TaskService extends BaseService } switch (get_class($taskable = $task->taskable)) { + // 业绩指标 case TaskPerformance::class: $payload = $data['task_performance'] ?? []; @@ -172,7 +180,7 @@ class TaskService extends BaseService 'expected_performance' => $payload['expected_performance'], ]); - if ($taskable->isCompleted() && ! $task->isSuccess()) { + if (! $task->isSuccess() && $taskable->isSuccess()) { $task->update([ 'task_status' => TaskStatus::Success, 'completed_at' => now(), diff --git a/app/Models/TaskPerformance.php b/app/Models/TaskPerformance.php index e840fa4..3a300ce 100644 --- a/app/Models/TaskPerformance.php +++ b/app/Models/TaskPerformance.php @@ -41,9 +41,9 @@ class TaskPerformance extends Model /** * 此业绩指标是否已完成 */ - public function isCompleted(): bool + public function isSuccess(): bool { - return bccomp($this->actual_performance, $this->expected_performance, 2) >= 0; + return $this->task_status === TaskPerformanceStatus::Success; } /** @@ -53,20 +53,16 @@ class TaskPerformance extends Model { return Attribute::make( get: function (mixed $value, array $attributes) { - if ($this->isCompleted()) { + if (bccomp($attributes['actual_performance'], $attributes['expected_performance'], 2) >= 0) { return TaskPerformanceStatus::Success; } - // 任务开始时间 - $startAt = Carbon::createFromFormat('Y-m-d H:i:s', "{$this->month}-01 00:00:00"); - // 任务结束时间 - $endAt = $startAt->copy()->endOfMonth(); // 当前时间 $datetime = now(); - if ($datetime->lt($startAt)) { + if ($datetime->lt($this->task->start_at)) { return TaskPerformanceStatus::None; - } elseif ($datetime->gte($endAt)) { + } elseif ($datetime->gte($this->task->end_at)) { return TaskPerformanceStatus::Failed; } return TaskPerformanceStatus::Pending;