argument('date'); $this->generateTasks( $date ? Carbon::parse($date) : today() ); } protected function generateTasks(Carbon $datetime): void { /** @var \App\Models\PlanLedger */ $planable = DB::transaction(function () use ($datetime) { $date = $datetime->format('Y-m-d'); if (! is_null($planable = PlanLedger::where('date', $date)->first())) { return $planable; } /** @var \App\Models\PlanLedger */ $planable = PlanLedger::create(['date' => $date]); $plan = $planable->plan()->create([ 'name' => "{$date} 总账录入", 'plan_status' => PlanStatus::Published, ]); return $planable->setRelation('plan', $plan); }); Store::lazyById()->each(function (Store $store) use ($planable) { DB::transaction(function () use ($store, $planable) { $taskable = TaskLedger::firstOrNew([ 'store_id' => $store->id, 'date' => $planable->date->format('Y-m-d'), ]); if ($taskable->exists) { return; } $taskable->save(); $ledger = Ledger::where('store_id', $store->id) ->where('date', $planable->date->format('Y-m-d')) ->first(); $taskable->task()->create([ 'plan_id' => $planable->plan->id, 'name' => '总账录入', 'start_at' => $planable->date->copy()->startOfDay(), 'end_at' => $planable->date->copy()->endOfDay(), 'task_status' => $ledger ? TaskStatus::Success : TaskStatus::Pending, 'completed_at' => $ledger?->created_at, ]); }); }); } }