morphOne(Task::class, 'taskable'); } public function store(): BelongsTo { return $this->belongsTo(Store::class); } public function storeMaster(): BelongsTo { return $this->belongsTo(Employee::class, 'store_master_id'); } /** * 此业绩指标是否已完成 */ public function isCompleted(): bool { return bccomp($this->actual_performance, $this->expected_performance, 2) >= 0; } /** * 任务状态 */ protected function taskStatus(): Attribute { return Attribute::make( get: function (mixed $value, array $attributes) { if ($this->isCompleted()) { 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)) { return TaskPerformanceStatus::Todo; } elseif ($datetime->gte($endAt)) { return TaskPerformanceStatus::Failed; } return TaskPerformanceStatus::Processing; }, ); } }