123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- declare(strict_types=1);
- namespace App\Controller\Api\v1;
- use App\Controller\AbstractController;
- use App\Controller\Business\GiftBusiness;
- use App\Master\Framework\Library\Tencent\TencentIm;
- use App\Model\Arts\LiveGiftLogModel;
- use App\Model\Arts\LiveGiftModel;
- use App\Model\Arts\LiveRoomModel;
- use App\Model\Arts\UserModel;
- use App\Model\Arts\UserWalletModel;
- use App\Request\Api\v1\DemoIndexRequest;
- use App\Request\Api\v1\Live\GiveGiftsRequest;
- use App\Request\Api\v1\Live\LikeRequest;
- use App\Service\QueueService;
- use App\Utils\AppResult;
- use App\Utils\Control\AuthUser;
- use App\Utils\LogUtil;
- use Hyperf\DbConnection\Db;
- use Hyperf\Di\Annotation\Inject;
- /**
- * Demo
- * 示例
- */
- class LiveController extends AbstractController
- {
- // 日志模块名称
- const LOG_MODULE = 'v1/LiveController';
- #[Inject]
- protected QueueService $service;
- public function index()
- {
- return AppResult::response200('success',(new LiveGiftLogModel())->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('赠送成功');
- }
- }
|