WithdrawalsController.php 8.1 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 管理端控制层: Withdrawal 控制类
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Controllers
 * @package   App\Admin\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2023年5月8日17:28:11
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Controllers;

use App\Admin\Grids\ChatRecordGrid;
use App\Admin\Grids\WithdrawRecordGrid;
use App\Admin\Rewrite\Facades\Admin;
use App\Models\Chat\ChatRecord;
use App\Models\User\WalletRecord;
use App\Models\User\WithdrawRecord;
use App\Transformers\User\WithdrawalRecordTransformer;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;

/**
 * Class WithdrawalsController.
 *
 * @package App\Admin\Controllers
 */
class WithdrawalsController extends BaseController
{
    use WithdrawRecordGrid;

    /**
     * WithdrawalsController constructor.
     *
     * @param WithdrawRecord $model 注入model
     */
    public function __construct(WithdrawRecord $model)
    {
        // 资源显示的中名称
        $this->title            = $model::OBJ_NAME_ZH;
        // 是否可查看
        $this->can_view         = false;
        // 是否可新增
        $this->can_create       = false;
        // 是否可编辑
        $this->can_edit         = false;
        // 是否可删除
        $this->can_delete       = false;
        // 是否可删除
        $this->can_audit       = true;
        // 是否开启下拉菜单
        $this->dropdownActions  = false;

        // 执行父类构造方法
        parent::__construct($model);
    }

    /**
     * 审核通过:多级审核
     *
     * @param integer $id 主键id
     *
     * @return JsonResponse
     * @throws \Exception
     */
    public function pass($id)
    {
        DB::beginTransaction();
        try {
            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);

            // 用户的角色来设置审核状态
            $user = $this->getUser();
            $model->status  = WithdrawRecord::PASSED;
            $model->audited_at  = date('Y-m-d H:i:s');
            $model->audited_by  = $user->id;
            $model->audited_opinion  = request('audit_opinion');
            $result = $model->save();
            if ($result) {

                // 用户资金进行流转
                // 释放冻结的资金
                $user = $model->user;
                $amount = $model->amount;
                $r = $user->releaseFrozenAmount($amount);
                if (!$r) {
                    return response()->json(
                        [
                            'status'  => 0,
                            'message' =>__('audit_failed'),
                        ]
                    );
                }

                // 增加资金流转记录
                $record = [
                    'user_id'   => $user->id,
                    'amount'    => $amount,
                    'type'      => WalletRecord::DECREASE,
                    'event'     => WalletRecord::WITHDRAW,
                    'ratio'     => $model->ratio,
                ];
                $r = $model->records()->create($record);
                if (!$r) {
                    return response()->json(
                        [
                            'status'  => 0,
                            'message' =>__('audit_failed'),
                        ]
                    );
                }
                // 事务提交
                DB::commit();
                return response()->json(
                    [
                        'status'  => 1,
                        'message' =>__('audit_succeeded'),
                    ]
                );
            } else {
                return response()->json(
                    [
                        'status'  => 0,
                        'message' =>__('audit_failed'),
                    ]
                );
            }
        } catch (Exception $e) {
            DB::rollBack();
            return response()->json(
                [
                    'status'  => 0,
                    'message' => $e->getMessage(),
                ]
            );
        }
    }

    /**
     * 审核不通过
     *
     * @param integer $id 主键id
     *
     * @return JsonResponse
     * @throws \Exception
     */
    public function refuse($id)
    {
        DB::beginTransaction();
        try {
            $audited_opinion = request('audit_opinion');
            if (!$audited_opinion) {
                return response()->json(
                    [
                        'status'  => 0,
                        'message' =>'请输入审核意见!',
                    ]
                );
            }

            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);

            // 用户的角色来设置审核状态
            $user = $this->getUser();
            $model->status = WithdrawRecord::FAILED;
            $model->audited_at  = date('Y-m-d H:i:s');
            $model->audited_by  = $user->id;
            $model->audited_opinion  = $audited_opinion;
            $result = $model->save();
            if ($result) {
                // 释放冻结的资金
                $user = $model->user;
                $amount = $model->amount;
                $r = $user->releaseFrozenAmount($amount, 'refuse');
                if (!$r) {
                    return response()->json(
                        [
                            'status'  => 0,
                            'message' =>__('audit_failed'),
                        ]
                    );
                }
                // 事务提交
                DB::commit();
                return response()->json(
                    [
                        'status'  => 1,
                        'message' =>__('audit_succeeded'),
                    ]
                );
            } else {
                return response()->json(
                    [
                        'status'  => 0,
                        'message' =>__('audit_failed'),
                    ]
                );
            }
        } catch (Exception $e) {
            DB::rollBack();
            return response()->json(
                [
                    'status'  => 0,
                    'message' => $e->getMessage(),
                ]
            );
        }


        try {
            //
            $audited_opinion = request('audit_opinion');
            if (!$audited_opinion) {
                return response()->json(
                    [
                        'status'  => 0,
                        'message' =>'请输入审核意见!',
                    ]
                );
            }

            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);
            $model->audited_status  = config('constants.AUDIT_NOT_PASSED');
            $model->audited_opinion = $audited_opinion;
            $model->audited_at      = date('Y-m-d H:i:s');
            $model->audited_by      = Admin::user()->id;

            $result = $model->save();

            if ($result) {
                return response()->json(
                    [
                        'status'  => 1,
                        'message' =>__('audit_succeeded'),
                    ]
                );
            } else {
                return response()->json(
                    [
                        'status'  => 0,
                        'message' =>__('audit_failed'),
                    ]
                );
            }
        } catch (ModelNotFoundException $e) {
            return response()->json(
                [
                    'status'  => 0,
                    'message' => '当前数据不存在!',
                ]
            );
        }
    }
}