6
0
Fork 0
jiqu-library-server/app/Admin/Services/DealerEarningService.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,
]);
}
}