我正在开发一个可以具有主帐户的主帐户和子帐户的系统。
系统具有将信用额从主帐户转移到其他主帐户的功能。
子帐户能够将主帐户信用转移到其他主帐户。
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扣除了信用额。
我试图实现队列以确保第一个请求仅完成执行该功能的第二个请求,但是似乎没有运气。
我能遇到此问题的任何解决方案吗?因为我确实需要子帐户才能代表其主帐户转移信用额。