request->request("user_id"); // if(!$user_id) return false; // $users = \app\common\model\User::field("id,money")->select(); // if($users) foreach($users as $k => $v) { // $user_id = $v["id"]; // // 统计用户所有兑换记录和提现记录 是否与余额匹配 // $moneylog = \app\common\model\UserMoneyLog::where(["user_id"=>$user_id,"mode"=>"+"])->sum("money"); // $withdraw = \app\common\model\UserWithdrawalLog::where(["user_id"=>$user_id,"status"=>1])->sum("money"); // $withdraw = bcdiv($withdraw,100,2); // $sum = bcsub($moneylog, $withdraw,2); // $usermoney = \app\common\model\User::where(["id"=>$user_id])->value("money"); // if($usermoney == $sum) { // echo "1
"; // } else { // echo $v['id']."用户余额:".$usermoney; // echo "记录和:".$sum."
"; // //// $money = bcsub($usermoney,$sum,2); //// $time = time(); //// $money>0 && Db::execute("INSERT INTO `hx_user_money_log` (`user_id` , `money` , `mode`, `before` , `after` , `detail`, `createtime`) VALUES ($user_id , $money , '+', $usermoney, $usermoney, '系统补足', $time)"); // // } // } $user_id = 319; // 统计用户所有兑换记录和提现记录 是否与余额匹配 $moneylog = \app\common\model\UserMoneyLog::where(["user_id" => $user_id, "mode" => "+"])->sum('value'); $withdraw = \app\common\model\UserWithdrawalLog::where(["user_id" => $user_id, "status" => ["in", [0, 1]]])->sum("money"); $withdraw = bcdiv($withdraw, 100,2); $sum = bcsub($moneylog, $withdraw,2); $usermoney = \app\common\model\User::where(["id" => $user_id])->value("money"); if ($usermoney == $sum) { echo 1; } else { echo 'f'.$moneylog; } exit; } /** * 声币兑换余额检查 */ public function abab() { // $user_id = $this->request->request("user_id"); // if(!$user_id) return false; $users = \app\common\model\User::field("id")->select(); if($users) foreach($users as $k => $v) { $user_id = $v["id"]; // 获取某个用户所有声币兑换记录 $limit = 5; $coin = \app\common\model\UserSoundcoinLog::field("id,value,mode,balance,before")->where(["user_id" => $user_id])->limit($limit)->order("createtime", "desc")->select(); if ($coin) { $coinjian = 0; $coinjia = 0; $countkey = count($coin) - 1; foreach ($coin as $k => $v) { if ($v["mode"] == "-") { $coinjian = $coinjian + $v["value"]; } elseif ($v["mode"] == "+") { $coinjia = $coinjia + $v["value"]; } $k == 0 && $first = $v["balance"]; $k == $countkey && $last = $v["before"]; } $usercoin = \app\common\model\User::where(["id" => $user_id])->value("sound_coin"); $change = $coinjian - $coinjia; if ($first + $change == $last) { echo "1
"; } else { echo "用户余额:" . $usercoin; echo "最初值:" . $first; echo "改变值:" . $change; echo "最后余额:" . $last . "
"; } } // return true; } } public function getGiftInfo() { $type_id = $this->request->get('type_id'); // type $list = \app\common\model\EggGift::field("id,gift_id,price")->where(["jackpot_id"=>$type_id,"is_use"=>0])->select(); $count = 0; $sum = 0; if($list) foreach($list as $k => $v) { $count++; // $list[$k]["price"] = $v["price"]/100; } $res = []; $res["count"] = $count; $res["sum"] = \app\common\model\EggGift::where(["jackpot_id"=>$type_id,"is_use"=>0])->sum("price"); // $res["list"] = $list; $this->success("获取成功!",$res); } /** * 创建直播间 */ public function createLive() { // 先判断用户主播申请是否已经通过 $anchorModel = new \app\common\model\UserAnchor(); $where = []; $where["user_id"] = $this->auth->id; $where["status"] = 1; $anchorInfo = $anchorModel->where($where)->find(); if(!$anchorInfo) $this->error("请先提交主播申请,并等待审核通过!"); $liveModel = new \app\common\model\Live(); $where = []; $where["user_id"] = $this->auth->id; $sqlLiveInfo = $liveModel->where($where)->find(); // // 获取用户信息 // $userModel = new \app\common\model\User(); // $userInfo = $userModel->where(["id"=>$this->auth->id])->find(); // if(!$userInfo) $this->error("用户信息获取失败!"); // 判断直播间是否存在 $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } if(!$sqlLiveInfo) { // sql中不存在直播间信息 $live_type = $anchorInfo["type_id"]; // 直播间类型(情感类娱乐类 等) $live_notice = "Hi!欢迎加入我的直播间"; // 直播间公告 $live_notice_detail = "Hi!欢迎加入我的直播间Hi!欢迎加入我的直播间"; // 直播间公告详情 if (!$live_type || !$live_notice) { $this->error(__('Invalid parameters')); } $live_ids = $liveModel->column("live_id"); // 创建直播间ID (临时ID四位,直播间数不超过8999) $live_id = $this->auth->getUinqueId(4,$live_ids); if($live_id > 9999) { $this->error("直播间超限,请联系客服"); } $data = []; $data["user_id"] = $this->auth->id; $data["live_id"] = $live_id; $data["live_hot"] = 0; $data["live_type"] = $live_type; $data["live_notice"] = $live_notice; $data["live_notice_detail"] = $live_notice_detail; $data["is_online"] = 0; $data["status"] = 1; $data["is_recommend"] = 0; $data["createtime"] = time(); $id = $liveModel->insertGetId($data); if(!$id) { $this->error("直播间创建失败,请稍后重试!"); } $data["id"] = $id; $where = []; $where["a.id"] = $id; // 获取数据 $getredisLiveInfo = $this->alias("a") ->field("a.*,b.id as live_id,b.name as live_type_name,u.nickname,u.avatar,at.name as anchor_type_name") ->join("hx_live_type b","a.live_type = b.id","left") ->join("hx_user u","a.user_id = u.id","left") ->join("hx_user_anchor an","a.user_id = an.user_id","left") ->join("hx_user_anchor_type at","an.type_id = an.type_id") ->where($where)->find(); $redis->set("live_".$live_id,json_encode($getredisLiveInfo)); $liveInfo = $liveModel->get(["user_id"=>$this->auth->id]); } else { $redisLiveInfo = $redis->get('live_'.$sqlLiveInfo["live_id"]); if(!$redisLiveInfo) { // 加入缓存排序 $redis->zAdd("liveRank", $sqlLiveInfo['live_hot'], $sqlLiveInfo["live_id"]); // 加入缓存 $redis->set("live_".$sqlLiveInfo["live_id"],json_encode($sqlLiveInfo)); } $liveInfo = $sqlLiveInfo; } $this->success("获取成功!",$liveInfo); } /** * 获取直播间列表排序 */ public function getLiveRankList() { $thispage = $this->request->request('thispage',1,"intval"); // 当前页数 $pagenum = $this->request->request('pagenum',10,"intval"); // 每页显示条数0=不做分页 $type_id = $this->request->request('type_id'); // type $is_recommend = $this->request->request('is_recommend'); // 推荐0=否1=是 $all = $this->request->request('all'); // 全部分类0=否1=是 $start = ($thispage-1)*$pagenum; $end = $start+($pagenum-1); // 获取排序 $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } $redisLiveRankList = $redis->zRange("liveRank",$start,$end); $liveModel = new \app\common\model\Live(); if(!$redisLiveRankList) { // 直接从数据库获取所有数据 $where = []; $where["a.status"] = 1; $sqlLiveList = $liveModel->alias("a") ->field("a.*,b.id as live_type,b.name as live_type_name,u.nickname,u.avatar,at.name as anchor_type_name") ->join("hx_live_type b","a.live_type = b.id","left") ->join("hx_user u","a.user_id = u.id","left") ->join("hx_user_anchor an","a.user_id = an.user_id","left") ->join("hx_user_anchor_type at","an.type_id = an.type_id") ->where($where)->select(); if($sqlLiveList) { foreach($sqlLiveList as $k => $v) { // 加入缓存排序 $redis->zAdd("liveRank", $v['live_hot'], $v["live_id"]); // 加入缓存 $redis->set("live_".$v["live_id"],json_encode($v)); } $redisLiveRankList = $redis->zRange("liveRank",$start,$end); } } if(!$redisLiveRankList) { $this->error("数据为空!"); } $resultInfo = $liveModel->getLiveInfoByLiveId($redisLiveRankList,$type_id,$is_recommend,$all); $this->success("获取成功!",$resultInfo); } /** * 获取派对类型 */ public function getLiveType() { $livetypeModel = new \app\common\model\LiveType(); $livetypeList = $livetypeModel->select(); $this->success("获取成功!",$livetypeList); } /** * 获取直播间用户排序 */ public function getLiveUserRank() { $live_id = $this->request->request("live_id");// 直播间ID if (!$live_id) $this->error(__('Invalid parameters')); $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } $res = []; // 获取本周第一天 $weekday = $this->firstOfWeek(date("Y-m-d H:i:s")); // 获取本月第一天 $monthday = date("Ym01"); $userModel = new \app\common\model\User(); // 获取条数 $num = 50; // 获取50条财富排行周记录 $getweek = $redis->zRevRange("live_jewel_get_".$live_id.":".$weekday,0,$num-1,true); $res['getRankListWeek'] = $userModel->rankList($getweek); // 获取50条贡献排行周记录 $toweek = $redis->zRevRange("live_jewel_to_".$live_id.":".$weekday,0,$num-1,true); $res['toRankListWeek'] = $userModel->rankList($toweek); // 获取50条财富排行月记录 $toweek = $redis->zRevRange("live_jewel_get_".$live_id.":".$monthday,0,$num-1,true); $res['getRankListMonth'] = $userModel->rankList($toweek); // 获取50条贡献排行周记录 $toweek = $redis->zRevRange("live_jewel_to_".$live_id.":".$monthday,0,$num-1,true); $res['toRankListMonth'] = $userModel->rankList($toweek); return $this->success("获取成功!",$res); } /** * 直播间热度更新 */ public function changeUserLivehot() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID $live_hot = $this->request->request('live_hot'); // 房间热度(正数表示提高的热度值,负数表示降低的热度值) if (!$live_id || !$live_hot) { $this->error(__('Invalid parameters')); } $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } // 更新热度 $redis->zIncrBy("liveRank", $live_hot, $live_id); return $this->success("更新成功!"); } /** * 加入直播间(这里只做记录) */ public function joinLive() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID if (!$live_id) { $this->error(__('Invalid parameters')); } $livejoinModel = new \app\common\model\LiveJoin(); // 添加记录 $data = []; $data["user_id"] = $this->auth->id; $data["live_id"] = $live_id; $data["createtime"] = time(); $res = $livejoinModel->insert($data); return $this->success("添加成功!",$res); } /** * 退出直播间(这里只做记录) */ public function outLive() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID if (!$live_id) { $this->error(__('Invalid parameters')); } $livejoinModel = new \app\common\model\LiveJoin(); // 删除记录 $where = []; $where["live_id"] = $live_id; $where["user_id"] = $this->auth->id; $res = $livejoinModel->where($where)->delete(); return $this->success("退出成功!",$res); } /** * 直播间收藏 */ public function cellectionLive() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID if (!$live_id) { $this->error(__('Invalid parameters')); } $livecellectionModel = new \app\common\model\LiveCellection(); // 添加记录 $data = []; $data["user_id"] = $this->auth->id; $data["live_id"] = $live_id; $data["createtime"] = time(); $res = $livecellectionModel->insert($data); return $this->success("收藏成功!",$res); } /** * 直播间收藏列表 */ public function cellectionLiveList() { $page = $this->request->request('page',1); // 分页 $pageNum = $this->request->request('pageNum',10); // 分页 // 分页搜索构建 $pageStart = ($page-1)*$pageNum; $livecellectionModel = new \app\common\model\LiveCellection(); $userModel = new \app\common\model\User(); $where = []; $where["a.user_id"] = $this->auth->id; $list = $livecellectionModel->alias("a") ->field("a.live_id,u.avatar,r.live_id as r_id,r.live_name,t.name as live_type") ->where($where) ->join("hx_live r","a.live_id = r.id") ->join("hx_live_type t","t.id = r.live_type") ->join("hx_user u","u.id = r.user_id") ->limit($pageStart,$pageNum) ->select(); if($list) { $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } // 获取本周第一天 $weekday = $this->firstOfWeek(date("Y-m-d H:i:s")); // 获取redis 中 用户排行榜前五名 foreach($list as $k => $v) { $getweek = $redis->zRevRange("jewel_get_".$v["live_id"].":".$weekday,0,4,true); $userlist = $userModel->rankList($getweek); if($userlist) { $users = []; foreach($userlist as $m => $n) { $users[] = $n["avatar"]; } $list[$k]["users"] = $users; } else { $list[$k]["users"] = []; } } } else { return $this->success("数据为空!",[]); } return $this->success("获取成功!",$list); } /** * 获取直播间信息 */ public function getLiveInfo() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID if (!$live_id) { $this->error(__('Invalid parameters')); } $liveModel = new \app\common\model\Live(); $userModel = new \app\common\model\User(); // 获取主体信息 $where = []; $where["a.id"] = $live_id; $liveInfo = $liveModel->alias("a") ->field("a.id,a.user_id,a.live_id,a.live_name,a.live_logo,rt.name as live_type,a.live_notice") ->join("hx_live_type rt","rt.id = a.live_type") ->where($where) ->find(); if(!$liveInfo) { return $this->error("数据为空!",[]); } // 获取房主信息 $where = []; $where["id"] = $liveInfo["user_id"]; $userInfo = $userModel->field("avatar,nickname")->where($where)->find(); // 获取技能信息 $skillList = Model("ViewUserSkill")->getSkillInfo($liveInfo["user_id"]); $userInfo["skill"] = implode("/",$skillList); $liveInfo["userInfo"] = $userInfo; $this->success("获取成功!",$liveInfo); } /** * 直播间设置 */ public function setLive() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID $live_pass = $this->request->request('live_pass'); // 直播间密码 $live_type = $this->request->request('live_type'); // 使用场景 $is_screen = $this->request->request('is_screen'); // 是否关闭公屏:1=是,0=否 $background = $this->request->request('background'); // 直播间背景 if (!$live_id || (!$live_pass && !$live_type && !$is_screen && !$background)) { $this->error(__('Invalid parameters')); } $liveModel = new \app\common\model\Live(); $data = []; $live_pass && $data["live_pass"] = $live_pass; $live_type && $data["live_type"] = $live_type; $is_screen && $data["is_screen"] = $is_screen; $background && $data["background"] = $background; $where = []; $where["id"] = $live_id; $res = $liveModel->update($data,$where); if($res) { $this->success("更新成功!",$data); } else { $this->error("网络错误,请稍后重试!"); } } /** * 直播间管理设置 */ public function liveManageSet() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID $user_id = $this->request->request('user_id',0,"intval"); // 用户ID $item = $this->request->request('item'); // 项目:1=房管,2=禁言,3=拉黑,4=踢出 $time = $this->request->request('time'); // 限制时间(单位:秒):0=永久 if (!$live_id || !$user_id || !$item || ($item>1 && $time<=0)) { $this->error(__('Invalid parameters')); } $livemanageModel = new \app\common\model\LiveManage(); $data = []; $data["user_id"] = $user_id; $data["live_id"] = $live_id; $data["item"] = $item; $time && $data["time"] = $time+time(); $data["createtime"] = time(); $res = $livemanageModel->insertGetId($data); if($res) { $this->success("设置成功!",$data); } else { $this->error("网络错误,请稍后重试!"); } } /** * 直播间管理设置列表 */ public function liveManageSetList() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID $item = $this->request->request('item',1,"intval"); // 项目:1=房管,2=禁言,3=拉黑,4=踢出 if (!$live_id) { $this->error(__('Invalid parameters')); } $livemanageModel = new \app\common\model\LiveManage(); $where = []; $where["a.live_id"] = $live_id; $where["a.item"] = $item; $list = $livemanageModel->alias("a") ->field("a.id,a.item,u.avatar,u.nickname,u.level,u.gender,a.time") ->join("hx_user u", "u.id = a.user_id") ->where($where) ->select(); if(!$list) $this->success("数据为空!",[]); foreach($list as $k => &$v) $v["time"] = date("Y-m-d H:i:s",$v["time"]); $this->success("获取成功!",$list); } /** * 直播间管理设置移除 */ public function liveManageSetDel() { $id = $this->request->request('id',0,"intval"); // 设置ID if (!$id) { $this->error(__('Invalid parameters')); } $livemanageModel = new \app\common\model\LiveManage(); $where = []; $where["id"] = $id; $res = $livemanageModel->where($where)->delete(); if($res !== false) { $this->success("移除成功!",$res); } else { $this->error("网络错误,请稍后重试!"); } } /** * 更新直播间公告 */ public function saveLiveNotice() { $live_id = $this->request->request('live_id',0,"intval"); // 直播间ID $live_notice = $this->request->request('live_notice'); // 公告标题 if (!$live_id || !$live_notice) { $this->error(__('Invalid parameters')); } $liveModel = new \app\common\model\Live(); $where = []; $where["id"] = $live_id; $data = []; $data["live_notice"] = $live_notice; $res = $liveModel->update($data,$where); if($res) { $this->success("更新成功!",$res); } else { $this->error("网络错误,请稍后重试!"); } } /** * 赠送礼物 */ public function giveGiftToYou() { $user_id = $this->request->request("user_id");// 赠送对象 $gift_id = $this->request->request("gift_id");// 礼物ID $live_id = $this->request->request("live_id");// 直播间ID $number = $this->request->request("number");// 赠送数量 if (!$user_id || !$gift_id || !$live_id || !$number) $this->error(__('Invalid parameters')); // 不可以赠送给自己 if($user_id == $this->auth->id) $this->error("不可以赠送给自己!"); // 获取礼物信息 $giftModel = new \app\common\model\Gift(); $where = []; $where["id"] = $gift_id; $giftInfo = $giftModel->where($where)->find(); if (!$giftInfo) $this->error("礼物信息查询失败!"); $giftValue = $giftInfo["value"] * $number; $userModel = new \app\common\model\User(); // 判断当前用户余额 $where = []; $where["id"] = $this->auth->id; $userInfo = $userModel->where($where)->find(); if (!$userInfo) $this->error("用户信息查询失败!"); if($userInfo["jewel"] < $giftValue) $this->error("您的钻石余额不足!"); // 获取赠送用户信息 $where = []; $where["id"] = $user_id; $touserInfo = $userModel->where($where)->find(); // 事务处理余额与记录信息 $userjewellogModel = new \app\common\model\UserJewelLog(); $giftuserliveModel = new \app\common\model\GiftUserLive(); Db::startTrans(); try{ // 扣除当前用户钻石余额 $where = []; $where["id"] = $this->auth->id; $res1 = $userModel->where($where)->setDec("jewel",$giftValue); // 添加当前用户钻石流水记录 $res2 = $userjewellogModel->addUserJewelLog($this->auth->id, $giftValue, "-", $userInfo["jewel"], "赠送礼物:'" . $giftInfo["name"] . "',扣除" . $giftValue . "钻石!", 3); // 添加赠送用户钻石余额 $where = []; $where["id"] = $user_id; $res3 = $userModel->where($where)->setInc("jewel",$giftValue); // 添加赠送用户钻石流水记录 $res4 = $userjewellogModel->addUserJewelLog($user_id,$giftValue,"+",$touserInfo["jewel"],"获赠礼物:'".$giftInfo["name"]."',增加".$giftValue."钻石!",9); // 添加礼物赠送记录表 $data = []; $data["user_id"] = $this->auth->id; $data["user_to_id"] = $user_id; $data["live_id"] = $live_id; $data["gift_id"] = $gift_id; $data["number"] = $number; $data["price"] = $giftInfo["value"]; $data["value"] = $giftValue; $data["createtime"] = time(); $res5 = $giftuserliveModel->insertGetId($data); if($res1 && $res2 && $res3 && $res4 && $res5) { Db::commit(); $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } // 获取本周第一天 $weekday = $this->firstOfWeek(date("Y-m-d H:i:s")); // 获取本月第一天 $monthday = date("Ym01"); // 添加redis记录做财富排行榜周榜用 $redis->zIncrBy("live_jewel_get_".$live_id.":".$weekday,$giftValue,$user_id); // 添加redis记录做财富排行榜月榜用 $redis->zIncrBy("live_jewel_get_".$live_id.":".$monthday,$giftValue,$user_id); // 添加redis记录做贡献排行榜周榜用 $redis->zIncrBy("live_jewel_to_".$live_id.":".$weekday,$giftValue,$this->auth->id); // 添加redis记录做贡献排行榜月榜用 $redis->zIncrBy("live_jewel_to_".$live_id.":".$monthday,$giftValue,$this->auth->id); $this->success("操作成功!"); } }catch (ValidateException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (PDOException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } } //============================定时任务==========================// /** * 更新直播间信息(热度等) */ public function updateLiveInfo() { $redis = new Redis(); $redisconfig = config("redis"); $redis->connect($redisconfig["host"], $redisconfig["port"]); if ($redisconfig['redis_pwd']) { $redis->auth($redisconfig['redis_pwd']); } if($redisconfig['redis_selectdb'] > 0){ $redis->select($redisconfig['redis_selectdb']); } // 获取直播间热度信息 $redisLiveRankList = $redis->zRevRange("liveRank",0,-1,true); $liveModel = new \app\common\model\Live(); if($redisLiveRankList) { foreach($redisLiveRankList as $k => $v) { $liveModel->update(["live_hot"=>$v],["live_id"=>$k]); } } } }