MusicianBalanceService.php 3.35 KB
<?php

namespace App\Services;

use App\Helper\Response;
use App\Models\Legal\StakeholderBalance;
use App\Models\Legal\StakeholderBalanceByPayer;
use App\Models\Musician\CashOutOrder;
use App\Traits\TaxReckon;

/**
 * Class MusicianAgreementService
 * @package App\Services
 */
class MusicianBalanceService extends Service
{
    use TaxReckon;

    /**
     * 账户详情
     * @return \Illuminate\Http\JsonResponse
     */
    public function account()
    {
        //数据初始化
        $account = [
            'cash_total'    => '0.00',
            'balance'       => '0.00',
            'advance_out'   => '0.00',
            'remain_prepaid'=> '0.00',
        ];

        return Response::success($account);

        //累计提现
        $account['cash_total'] = CashOutOrder::query()->where(['cash_out_uid'=>$this->request->input('cash_out_uid'), 'status'=>1, 'withdraw_state'=>1])->sum('cash_out_money');

        //预付
        $advance = StakeholderBalance::query()->identify()->select(['advance_out', 'remain_prepaid'])->get();
        foreach ($advance as $item) {
            $account['advance_out']     =   bcadd($account['advance_out'], $item->advance_out, self::DECIMAL);
            $account['remain_prepaid']  =   bcadd($account['remain_prepaid'], $item->remain_prepaid, self::DECIMAL);
        }

        //计算可提现收益
        $payer = StakeholderBalanceByPayer::query()->identify()->get();
        foreach ($payer as $item) {
            //计算个人所得税
            $tax        =   ($this->identifier->type == 1) ? (string)$this->reckonPersonTax($item['balance']) : (string)0;
            //税后余额
            $balance    =   bcsub($item['balance'], $tax, Service::DECIMAL);

            $account['balance'] = bcadd($balance, $account['balance'], Service::DECIMAL);
        }

        return Response::success($account);
    }

    /**
     * 提现详情
     * @return \Illuminate\Http\JsonResponse
     */
    public function accountDetail()
    {
        //数据初始化
        $account = [
            'detail' => [],
            'tax'=> '0.00',
            'amount'=> '0.00',
        ];

        return Response::success($account);

        $payer = StakeholderBalanceByPayer::query()->with('subject:no,name')->identify()->get();

        foreach ($payer as $item) {

            $tax = ($this->identifier->type == 1) ? (string)$this->reckonPersonTax($item->balance) : (string)0;
            //税后余额
            $amount = (string)bcsub($item->balance, $tax, Service::DECIMAL);

            if ($amount > 0) {
                //明细
                $account['detail'][] = [
                    'payer'     =>  $item->subject->name,   //付款方
                    'balance'   =>  $item->balance,       //税前提现金额
                    'no'        =>  $item->subject->no,     //付款方唯一标识
                    'tax'       =>  $tax,                   //所得税
                    'amount'    =>  $amount,                //税后提现金额
                    'stakeholder_id' => $item->stakeholder_id,
                ];
            }

            //个人所得税总和
            $account['tax'] = bcadd($account['tax'], $tax, Service::DECIMAL);
            //提现金额(税后)
            $account['amount'] = bcadd($account['amount'], $amount, Service::DECIMAL);
        }

        return Response::success($account);
    }

}