diff --git a/app/Actions/Dealer/CalculatePurchaseAmount.php b/app/Actions/Dealer/CalculatePurchaseAmount.php new file mode 100644 index 00000000..9aca8883 --- /dev/null +++ b/app/Actions/Dealer/CalculatePurchaseAmount.php @@ -0,0 +1,35 @@ +whereBetween('order_completed_at', [$start, $end]); + } else { + $query->when($start, function ($query, $start) { + $query->where('order_completed_at', '>=', $start); + })->when($end, function ($query, $end) { + $query->where('order_completed_at', '<=', $end); + }); + } + + return $query->where('path', 'like', "{$dealer->userInfo->full_path}%")->sum('total_amount'); + } +} diff --git a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php index fa8100ce..b013c8df 100644 --- a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php @@ -2,6 +2,7 @@ namespace App\Console\Commands\Dealer; +use App\Actions\Dealer\CalculatePurchaseAmount; use App\Enums\DealerEarningStatus; use App\Enums\DealerLvl; use App\Enums\DealerOrderSettleState; @@ -9,7 +10,6 @@ use App\Enums\DealerPurchaseSubsidySettleState; use App\Enums\DealerPurchaseSubsidyStatus; use App\Models\Dealer; use App\Models\DealerOrder; -use App\Models\DealerPurchaseLog; use App\Models\DealerPurchaseSubsidy; use Illuminate\Console\Command; use Illuminate\Support\Carbon; @@ -31,6 +31,21 @@ class PurchaseSubsidySettleCommand extends Command */ protected $description = '结算签约经销商的进货补贴'; + /** + * @var \App\Actions\Dealer\CalculatePurchaseAmount + */ + protected $calculatePurchaseAmount; + + /** + * @param \App\Actions\Dealer\CalculatePurchaseAmount $calculatePurchaseAmount + */ + public function __construct(CalculatePurchaseAmount $calculatePurchaseAmount) + { + parent::__construct(); + + $this->calculatePurchaseAmount = $calculatePurchaseAmount; + } + /** * Execute the console command. * @@ -265,11 +280,10 @@ class PurchaseSubsidySettleCommand extends Command */ protected function initializePurchaseSubsidy(Dealer $dealer, Carbon $startAt, Carbon $endAt, $feeRate, array $purchaseRules) { + $this->calculatePurchaseAmount->handle($dealer, $startAt, $endAt); + // 进货总额 - $totalPurchaseAmount = DealerPurchaseLog::query() - ->whereBetween('order_completed_at', [$startAt, $endAt]) - ->where('path', 'like', "{$dealer->userInfo->full_path}%") - ->sum('total_amount'); + $totalPurchaseAmount = $this->calculatePurchaseAmount->handle($dealer, $startAt, $endAt); // 如果没有进货总额,则返回 if (bccomp($totalPurchaseAmount, '0', 2) <= 0) { diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 74e95c0d..d23dee0a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -15,6 +15,15 @@ use Symfony\Component\HttpFoundation\HeaderUtils; class AppServiceProvider extends ServiceProvider { + /** + * All of the container singletons that should be registered. + * + * @var array + */ + public $singletons = [ + \App\Actions\Dealer\CalculatePurchaseAmount::class => \App\Actions\Dealer\CalculatePurchaseAmount::class, + ]; + /** * Register any application services. *