day >= 20) { $startAt = $tz->copy()->setDay(20)->startOfDay(); } elseif ($tz->day >= 5) { $startAt = $tz->copy()->setDay(5)->startOfDay(); } else { $startAt = $tz->copy()->subMonthNoOverflow()->setDay(20)->startOfDay(); } return Cache::remember($this->prefix($startAt).':'.$dealer->user_id, 600, function () use ($dealer, $startAt) { return bcdiv($this->calculatePurchaseAmount->handle($dealer, $startAt), '1', 2); }); } /** * @param \Illuminate\Support\Carbon $tz * @return string */ protected function prefix(Carbon $tz): string { return $tz->rawFormat('ymd').'_dealer_purchase_amount'; } }