Laravel函数在第一个请求完成后运行

时间:2019-10-09 05:58:35

标签: laravel queue

我正在开发一个可以具有主帐户的主帐户和子帐户的系统。

系统具有将信用额从主帐户转移到其他主帐户的功能。

子帐户能够将主帐户信用转移到其他主帐户。

public function transferCredit(Request $request)
{
    $authUser = User::find(auth()->user()->sub_user_parent);

    $this->validate($request, [
         'credit'    => 'required|wallet_check_auth',
    ], [
        'wallet_check_auth' => 'Not enough balance. Your current balance is ' . $authUser->wallet
    ]);

    $user = User::find($request->id);
    ProcessCredit::dispatch($authUser, $user, $request->credit);

    return true;
}

ProcessCredit.php (我的工作类别)

public function handle()
{
    User::where('id', $this->sender->id)->decrement('wallet', $this->amount);
    User::where('id', $this->receiver->receive_id)->increment('wallet', $this->amount);
}

场景:

主帐户A拥有100点信用。

主帐户A的子帐户和主帐户A同时登录并转移到主帐户B。

问题:信用检查验证无效,因为两个请求同时出现并且检查信用为100。  主帐户A的信用额最终变为-100,因为两个请求同时运行并通过了验证,然后第一个请求从主帐户A扣除了信用额。

我试图实现队列以确保第一个请求仅完成执行该功能的第二个请求,但是似乎没有运气。

我能遇到此问题的任何解决方案吗?因为我确实需要子帐户才能代表其主帐户转移信用额。

0 个答案:

没有答案