diff --git a/app/Enums/CurrencySource.php b/app/Enums/CurrencySource.php index a9219b2..c00b517 100644 --- a/app/Enums/CurrencySource.php +++ b/app/Enums/CurrencySource.php @@ -164,6 +164,12 @@ enum CurrencySource: string /** 猜谜活动奖励 */ case GAME_REWARD = 'game_reward'; + /** 收到用户赠送的金币 */ + case GOLD_GIFT_RECV = 'gold_gift_recv'; + + /** 聊天互动魅力奖励 */ + case CHAT_CHARM = 'chat_charm'; + /** 存入银行(jjb → bank_jjb) */ case BANK_DEPOSIT = 'bank_deposit'; @@ -224,6 +230,8 @@ enum CurrencySource: string self::MSG_DECORATION_BUY => '消息装扮购买(旧)', self::AVATAR_FRAME_BUY => '头像框购买', self::GAME_REWARD => '猜谜活动奖励', + self::GOLD_GIFT_RECV => '收到赠送金币', + self::CHAT_CHARM => '聊天魅力奖励', self::BANK_DEPOSIT => '存入银行', self::BANK_WITHDRAW => '银行取款', }; diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index e35a859..79be59c 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -1091,12 +1091,9 @@ class ChatController extends Controller ]); } - // 扣除金币、增加对方魅力 - $user->jjb = ($user->jjb ?? 0) - $totalCost; - $user->save(); - - $toUser->meili = ($toUser->meili ?? 0) + $totalCharm; - $toUser->save(); + // 扣除金币、增加对方魅力(含流水日志) + $this->currencyService->change($user, 'gold', -$totalCost, CurrencySource::SEND_GIFT, "送花:送给 {$toUsername} {$count} 份【{$gift->name}】,魅力 +{$totalCharm}", $roomId); + $this->currencyService->change($toUser, 'charm', $totalCharm, CurrencySource::RECV_GIFT, "收到 {$user->username} 赠送的 {$count} 份【{$gift->name}】", $roomId); // 构建礼物图片 URL $giftImageUrl = $gift->image ? "/images/gifts/{$gift->image}" : ''; @@ -1128,8 +1125,8 @@ class ChatController extends Controller 'status' => 'success', 'message' => "送花成功!花费 {$totalCost} 金币,{$toUsername} 魅力 +{$totalCharm}", 'data' => [ - 'my_jjb' => $user->jjb, - 'target_charm' => $toUser->meili, + 'my_jjb' => $user->fresh()->jjb, + 'target_charm' => $toUser->fresh()->meili, ], ]); } @@ -1182,9 +1179,8 @@ class ChatController extends Controller return; } - // 发送者获得魅力 - $sender->meili = ($sender->meili ?? 0) + $charmGain; - $sender->save(); + // 发送者获得魅力(含流水日志) + $this->currencyService->change($sender, 'charm', $charmGain, CurrencySource::CHAT_CHARM, "与 {$toUsername} 聊天获得魅力奖励"); // 更新 Redis 计数器(1 小时过期) Redis::incrby($capKey, $charmGain); @@ -1407,9 +1403,9 @@ class ChatController extends Controller ]); } - // 执行转账(直接操作字段,与 sendFlower 保持一致风格) - $sender->decrement('jjb', $amount); - $receiver->increment('jjb', $amount); + // 执行转账(含流水日志) + $this->currencyService->change($sender, 'gold', -$amount, CurrencySource::GIFT_SENT, "赠送金币给 {$toName}", $roomId); + $this->currencyService->change($receiver, 'gold', $amount, CurrencySource::GOLD_GIFT_RECV, "收到 {$sender->username} 赠送的金币", $roomId); // 写入真正的私聊消息,避免其他旁观用户在公屏看到赠金币通知。 $giftMsg = [