112 lines
3.7 KiB
PHP
112 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services;
|
|
|
|
use App\Enums\DealerEarningStatus;
|
|
use App\Enums\DealerManagerSubsidyStatus;
|
|
use App\Enums\DealerManageSubsidyStatus;
|
|
use App\Enums\DealerPurchaseSubsidyStatus;
|
|
use App\Enums\DealerWalletAction;
|
|
use App\Exceptions\BizException;
|
|
use App\Models\DealerChannelSubsidyLog;
|
|
use App\Models\DealerEarning;
|
|
use App\Models\DealerManagerSubsidy;
|
|
use App\Models\DealerManageSubsidy;
|
|
use App\Models\DealerPurchaseSubsidy;
|
|
use App\Services\Dealer\WalletService;
|
|
use Illuminate\Database\Eloquent\Relations\Relation;
|
|
|
|
class DealerEarningService
|
|
{
|
|
public function pay(DealerEarning $dealerEarning)
|
|
{
|
|
if (! $dealerEarning->isSettled()) {
|
|
throw new BizException('经销商收益还未结算');
|
|
}
|
|
|
|
if (! $dealerEarning->isPending()) {
|
|
throw new BizException('经销商收益状态不是待付款');
|
|
}
|
|
|
|
switch (Relation::getMorphedModel($dealerEarning->earningable_type)) {
|
|
// 管理津贴
|
|
case DealerManageSubsidy::class:
|
|
if (! $dealerEarning->earningable->isPending()) {
|
|
throw new BizException('管理津贴状态不是待付款');
|
|
}
|
|
|
|
$dealerEarning->earningable->update([
|
|
'status' => DealerManageSubsidyStatus::Completed,
|
|
]);
|
|
|
|
(new WalletService())->changeBalance(
|
|
$dealerEarning->user,
|
|
$dealerEarning->total_earnings,
|
|
DealerWalletAction::ManageSubsidyIn,
|
|
'收入-管理津贴',
|
|
$dealerEarning
|
|
);
|
|
break;
|
|
|
|
// 管理者津贴
|
|
case DealerManagerSubsidy::class:
|
|
if (! $dealerEarning->earningable->isPending()) {
|
|
throw new BizException('管理者津贴状态不是待付款');
|
|
}
|
|
|
|
$dealerEarning->earningable->update([
|
|
'status' => DealerManagerSubsidyStatus::Completed,
|
|
]);
|
|
|
|
(new WalletService())->changeBalance(
|
|
$dealerEarning->user,
|
|
$dealerEarning->total_earnings,
|
|
DealerWalletAction::ManagerSubsidyIn,
|
|
'收入-管理者津贴',
|
|
$dealerEarning
|
|
);
|
|
break;
|
|
|
|
// 管理者津贴
|
|
case DealerPurchaseSubsidy::class:
|
|
if (! $dealerEarning->earningable->isPending()) {
|
|
throw new BizException('进货补贴状态不是待付款');
|
|
}
|
|
|
|
$dealerEarning->earningable->update([
|
|
'status' => DealerPurchaseSubsidyStatus::Completed,
|
|
]);
|
|
|
|
(new WalletService())->changeBalance(
|
|
$dealerEarning->user,
|
|
$dealerEarning->total_earnings,
|
|
DealerWalletAction::PurchaseSubsidyIn,
|
|
'收入-进货补贴',
|
|
$dealerEarning
|
|
);
|
|
break;
|
|
|
|
case DealerChannelSubsidyLog::class:
|
|
(new WalletService())->changeBalance(
|
|
$dealerEarning->user,
|
|
$dealerEarning->total_earnings,
|
|
DealerWalletAction::ChannelSubsidyIn,
|
|
'收入-渠道补贴',
|
|
$dealerEarning
|
|
);
|
|
break;
|
|
|
|
default:
|
|
throw new BizException('经销商收入异常');
|
|
break;
|
|
}
|
|
|
|
$dealerEarning->update([
|
|
'pay_way' => DealerEarning::PAY_WAY_WALLET,
|
|
'pay_at' => now(),
|
|
'pay_info' => null,
|
|
'status' => DealerEarningStatus::Completed,
|
|
]);
|
|
}
|
|
}
|