48 lines
1.2 KiB
PHP
48 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Actions\Dealer;
|
|
|
|
use App\Models\Dealer;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
class CalculatePurchaseAmountOfCurrentPeriod
|
|
{
|
|
public function __construct(
|
|
protected CalculatePurchaseAmount $calculatePurchaseAmount,
|
|
) {
|
|
}
|
|
|
|
/**
|
|
* 计算当期的进货业绩
|
|
*
|
|
* @param \App\Models\Dealer $dealer
|
|
* @return string
|
|
*/
|
|
public function handle(Dealer $dealer): string
|
|
{
|
|
$tz = now();
|
|
|
|
if ($tz->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';
|
|
}
|
|
}
|