新增赠送金币功能:任意用户可从自己余额赠送金币给他人,成功后聊天室系统传音广播;职务奖励金币移入管理区,删除管理区私信按钮
This commit is contained in:
@@ -1135,4 +1135,73 @@ class ChatController extends Controller
|
||||
|
||||
return $isLeveledUp;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户间赠送金币(任何登录用户均可调用)
|
||||
*
|
||||
* 从自己的余额中扣除指定金额,转入对方账户,
|
||||
* 并在房间内通过「系统传音」广播一条赠送提示。
|
||||
*/
|
||||
public function giftGold(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'to_user' => 'required|string',
|
||||
'room_id' => 'required|integer',
|
||||
'amount' => 'required|integer|min:1|max:999999',
|
||||
]);
|
||||
|
||||
$sender = Auth::user();
|
||||
$toName = $request->input('to_user');
|
||||
$roomId = $request->integer('room_id');
|
||||
$amount = $request->integer('amount');
|
||||
|
||||
// 不能给自己转账
|
||||
if ($toName === $sender->username) {
|
||||
return response()->json(['status' => 'error', 'message' => '不能给自己赠送哦~']);
|
||||
}
|
||||
|
||||
// 查目标用户
|
||||
$receiver = User::where('username', $toName)->first();
|
||||
if (! $receiver) {
|
||||
return response()->json(['status' => 'error', 'message' => '用户不存在']);
|
||||
}
|
||||
|
||||
// 余额校验
|
||||
if (($sender->jjb ?? 0) < $amount) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => '金币不足!您当前余额 '.($sender->jjb ?? 0)." 金币,无法赠送 {$amount} 金币。",
|
||||
]);
|
||||
}
|
||||
|
||||
// 执行转账(直接操作字段,与 sendFlower 保持一致风格)
|
||||
$sender->decrement('jjb', $amount);
|
||||
$receiver->increment('jjb', $amount);
|
||||
|
||||
// 广播「系统传音」条目至全房间
|
||||
$sysMsg = [
|
||||
'id' => $this->chatState->nextMessageId($roomId),
|
||||
'room_id' => $roomId,
|
||||
'from_user' => '系统传音',
|
||||
'to_user' => '大家',
|
||||
'content' => "💝 【{$sender->username}】 向 【{$toName}】 赠送了 {$amount} 金币!",
|
||||
'is_secret' => false,
|
||||
'font_color' => '#b45309',
|
||||
'action' => '',
|
||||
'sent_at' => now()->toDateTimeString(),
|
||||
];
|
||||
|
||||
$this->chatState->pushMessage($roomId, $sysMsg);
|
||||
broadcast(new MessageSent($roomId, $sysMsg));
|
||||
SaveMessageJob::dispatch($sysMsg);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => "赠送成功!已向 {$toName} 赠送 {$amount} 金币。",
|
||||
'data' => [
|
||||
'my_jjb' => $sender->fresh()->jjb,
|
||||
'target_jjb' => $receiver->fresh()->jjb,
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user