getPkTopList()); } /** * 直播间观众列表 * @param LikeRequest $request * @return string * @throws \Exception */ public function audience(LikeRequest $request) { $params = $request->validated();// 获取校验参数结果 $user = AuthUser::getInstance()->get(); $model = new LiveRoomModel(); $room = $model->getDetailOne((int)$params['room_no']); if (!$room) { return AppResult::error('直播间异常'); } $model = new LiveGiftLogModel(); $list = $model->getTopList($room); return AppResult::success('success', $list); } /** * 点赞 * @param LikeRequest $request * @return string */ public function like(LikeRequest $request) { $params = $request->validated();// 获取校验参数结果 $user = AuthUser::getInstance()->get(); $model = new LiveRoomModel(); $room = $model->getDetailOne((int)$params['room_no']); if (!$room) { return AppResult::error('直播间异常'); } // 不可以赠送给自己 if ($user['id'] == $room['user_id']) { return AppResult::error('不可以给自己点赞'); } // 加入点赞队列 $this->service->likePush([ 'room_no' => $room['room_no'], 'session' => $room['session'] ]); return AppResult::success('success'); } /** * 送礼物 * @param GiveGiftsRequest $request * @return string */ public function giveGifts(GiveGiftsRequest $request) { $params = $request->validated();// 获取校验参数结果 $user = AuthUser::getInstance()->get(); $model = new LiveRoomModel(); $room = $model->getDetailOne((int)$params['room_no']); if (!$room) { return AppResult::error('直播间异常'); } // 不可以赠送给自己 if ($user['id'] == $room['user_id']) { return AppResult::error('不可以给自己送礼物'); } // 获取礼物信息 if (!$giftInfo = (new LiveGiftModel())->getDetail(['id' => $params['gift_id']])) { return AppResult::error('请选择礼物'); } // 被赠送人信息 if (!$toUserInfo = (new UserModel())->getDetail(['id' => $room['user_id']])) { return AppResult::error('不存在的用户'); } // 礼物价值 $giftValue = bcmul((string)$giftInfo['value'], (string)$params['number']); // 用户钱包 $wallet = new UserWalletModel(); if (!$wallet->getOne($user['id'])) { return AppResult::error($wallet->getMessage()); } $user_gold = $wallet->getData()['gold'] ?? 0; if ($user_gold < $giftValue) { return AppResult::error('您的金币余额不足'); } Db::beginTransaction(); try { // 添加礼物赠送记录表 $data = [ 'user_id' => $user['id'], 'user_to_id' => $toUserInfo['id'], 'room_id' => $room['id'], 'room_no' => $room['room_no'], 'session' => $room['session'], 'gift_id' => $giftInfo['id'], 'gift_name' => $giftInfo['name'], 'number' => $params['number'], 'price' => $giftValue, 'is_pk' => $room['is_pk'], 'pk_id' => $room['pk_id'], 'pk_type' => $room['pk_type'], 'create_time' => time() ]; if (!$log_id = (new LiveGiftLogModel())->insertGetId($data)) { Db::rollback(); return AppResult::error('赠送失败'); } if ($giftValue > 0) { // 扣除当前用户余额 if (!$wallet->change($user['id'], $toUserInfo['id'], 'gold', -$giftValue, 53, "赠送礼物:{$giftInfo['name']}*{$params['number']}", 'gift_user_typing', $log_id)) { Db::rollBack(); return AppResult::error($wallet->getMessage()); } // $business = new GiftBusiness(); // if (!$business->LiveGiftDeal($log_id)){ // LogUtil::info('同步执行成交收益', self::LOG_MODULE, __FUNCTION__,$business->getMessage()); // Db::rollBack(); // return AppResult::error($business->getMessage()); // } } Db::commit(); } catch (\Throwable $e) { Db::rollBack(); return AppResult::error($e->getMessage()); } if ($giftValue > 0) { // 队列中处理:添加礼物赠送记录;添加pk数据;添加赠送用户余额;增加赠送用户上级余额;增加亲密度 $this->service->liveGiftPush([ 'log_id' => $log_id ]); } return AppResult::success('赠送成功'); } }