*/
function getuserinfo($user_id,$podcast_id,$to_user_id,$request_data){
$root = array();
$root['show_tipoff'] = 0;//举报按钮 1:显示;0:不显示
$root['show_admin'] = 0;//管理按钮 1,2:显示;0:不显示 (1 管理员:举报,禁言,取消; 2 主播:设置为管理员/取消管理员,管理员列表,禁言,取消)
$root['has_focus'] = 0;//0:未关注;1:已关注
$root['has_admin'] = 0;//0:非管理员;1:是管理员
$root['is_forbid'] = 0;//0:未被禁言;1:被禁言
if ($to_user_id == 0)
$to_user_id = $user_id;
$room_id = intval($request_data['room_id']);
if($room_id){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video_info = $video_redis->getRow_db($room_id,array('id','group_id'));
$forbid_info = $video_redis->has_forbid_msg($video_info['group_id'],$to_user_id);//判断某个用户是否被禁言(被禁言返回:true; 未被禁言返回:false)
if($forbid_info && intval($forbid_info)>NOW_TIME){
$root['is_forbid'] = 1;
}else{
$video_redis->unset_forbid_msg($video_info['group_id'],$to_user_id);
}
}
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$m_config = load_auto_cache("m_config");//初始化手机端配置
//$userfollw_redis = new UserFollwRedisService($to_user_id);
//$fans_count = $userfollw_redis->follower_count();
//$focus_count = $userfollw_redis->follow_count();
//查看自己
if ($to_user_id == $user_id){
$fields = array('id','fans_count','focus_count', 'is_agree','video_count','is_authentication','authentication_type','authentication_name','nick_name','signature','sex','province','city','head_image','ticket','no_ticket','refund_ticket','use_diamonds','diamonds','user_level','v_type','v_explain','v_icon','is_remind','birthday','emotional_state','job','family_id','family_chieftain','society_id','society_chieftain','society_settlement_type','is_robot','room_title','luck_num','coin','is_nospeaking', 'weibo_count');
// if (OPEN_GAME_MODULE == 1) {
// $fields[] = 'coin';
// }
$fields = array_merge($fields,array('is_vip','vip_expire_time'));
if(defined('OPEN_VIP')){
$open_vip = intval(OPEN_VIP);
}
$userinfo = $user_redis->getRow_db($to_user_id,$fields);
$userinfo['signature'] = htmlspecialchars_decode($userinfo['signature']);
$userinfo['nick_name'] = htmlspecialchars_decode($userinfo['nick_name']);
$userinfo['signature'] = emoji_decode($userinfo['signature']);
$userinfo['nick_name'] = emoji_decode($userinfo['nick_name']);
$userinfo['user_id'] = $to_user_id;
$userinfo['refund_ticket'] = intval(floor($userinfo['refund_ticket']));
if(defined("robot_gifts") && robot_gifts ==1){
$userinfo['ticket'] = intval(floor($userinfo['ticket']+$userinfo['no_ticket']));
}else{
$userinfo['ticket'] = intval(floor($userinfo['ticket']));
}
$userinfo['use_diamonds'] = intval(floor($userinfo['use_diamonds']));
$userinfo['diamonds'] = intval(floor($userinfo['diamonds']));
if($userinfo['is_authentication'] ==2){
if($userinfo['v_explain']==''){
$userinfo['v_explain'] = trim($userinfo['authentication_type']);
}
}
if($userinfo['signature']==''||$userinfo['signature']==false){
$userinfo['signature'] = 'TA好像忘记签名了';
}
/*
$sql = "select id as user_id,is_agree,video_count,is_authentication,nick_name,signature,sex,province,city,focus_count,head_image,fans_count,ticket,use_diamonds,diamonds,user_level,v_type,v_explain,v_icon,is_remind from ".DB_PREFIX."user where id = '".$to_user_id."'";
$userinfo = $GLOBALS['db']->getRow($sql,true,true);
*/
if($userinfo['is_nospeaking'] === false) {
$userinfo['is_nospeaking'] = 0;
}
if($userinfo['coin'] === false) {
$userinfo['coin'] = 0;
}
if($userinfo['birthday']==false)
$userinfo['birthday'] = '';
if($userinfo['room_title'] === false) {
$userinfo['room_title'] = '';
}
if($userinfo['luck_num'] == false) {
$userinfo['luck_num'] = '';
}
if($userinfo['family_id']==false)
$userinfo['family_id'] = 0;
if($userinfo['family_chieftain']==false)
$userinfo['family_chieftain'] = 0;
if($userinfo['society_id']==false)
$userinfo['society_id'] = 0;
if($userinfo['society_chieftain']==false)
$userinfo['society_chieftain'] = 0;
if($userinfo['society_settlement_type']==false)
$userinfo['society_settlement_type'] = 0;
if($userinfo['emotional_state'] === false){
$userinfo['emotional_state'] = '';
}
if ($userinfo['is_robot'] === false){
$userinfo['is_robot'] = 0;
}
if($userinfo['job'] === false){
$userinfo['job'] = '';
}
if($userinfo['alipay_user_id'] === false){
$userinfo['alipay_user_id'] = '';
}
if($userinfo['alipay_name'] === false){
$userinfo['alipay_name'] = '';
}
if($userinfo['alipay_authent_token'] === false){
$userinfo['alipay_authent_token'] = '';
}
if($userinfo['id'] === false){
$userinfo['id'] = $user_id;
}
if($userinfo['fans_count'] === false){
$userinfo['fans_count'] = 0;
}
if($userinfo['focus_count'] === false){
$userinfo['focus_count'] = 0;
}
if($userinfo['is_agree'] === false){
$userinfo['is_agree'] = 0;
}
if($userinfo['is_remind'] === false){
$userinfo['is_remind'] = 0;
}
if($userinfo['video_count'] === false){
$userinfo['video_count'] = 0;
}
if($userinfo['is_authentication'] === false){
$userinfo['is_authentication'] = 0;
}
if($userinfo['authentication_type'] === false) {
$userinfo['authentication_type'] = 0;
}
if($userinfo['sex'] === false){
$userinfo['sex'] = 0;
}
if($userinfo['province'] === false){
$userinfo['province'] = '';
}
if($userinfo['city'] === false){
$userinfo['city'] = '';
}
if($userinfo['head_image'] === false){
$userinfo['head_image'] = '';
}
if($userinfo['use_diamonds'] === false){
$userinfo['use_diamonds'] = 0;
}
if($userinfo['user_level'] === false){
$userinfo['user_level'] = 1;
}
if($userinfo['v_type'] === false){
$userinfo['v_type'] = 0;
}
if($userinfo['v_explain'] === false){
$userinfo['v_explain'] = '';
}
if($userinfo['v_icon'] === false){
$userinfo['v_icon'] = '';
}
$userinfo['open_vip'] = 0;
if($open_vip){
$userinfo['open_vip'] = $open_vip;
}
if($userinfo['is_vip'] === false){
$userinfo['is_vip'] = 0;
}
if (!$userinfo['weibo_count']) {
$userinfo['weibo_count'] = 0;
}
$userinfo['moments'] = $userinfo['weibo_count'];
if (defined('OPEN_DIAMOND_GAME_MODULE') && OPEN_DIAMOND_GAME_MODULE == 1) {
$userinfo['coin'] = $userinfo['use_diamonds'];
}
$vip_expire_time = intval($userinfo['vip_expire_time']);
if($vip_expire_time>0){
$userinfo['vip_expire_time'] = to_date( $vip_expire_time,'Y-m-d H:i');
if($vip_expire_time < NOW_TIME){
$userinfo['is_vip'] = 0;
$userinfo['vip_expire_time'] = '已过期';
$sql = "update ".DB_PREFIX."user set is_vip = 0 where id = ".$user_id;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($user_id));
}else{
if(intval($userinfo['is_vip'])==0){
$userinfo['vip_expire_time'] = '未开通';
}
}
}else{
$userinfo['vip_expire_time'] = '未开通';
if(intval($userinfo['is_vip'])==1){
$userinfo['vip_expire_time'] = '永久';
}
}
//未开启家族不显示
if (!defined('OPEN_FAMILY_MODULE')||OPEN_FAMILY_MODULE!=1) {
unset($userinfo['family_id']);
unset($userinfo['family_chieftain']);
}
//未开启公会不显示
if (!defined('OPEN_SOCIETY_MODULE')||OPEN_SOCIETY_MODULE!=1) {
unset($userinfo['society_id']);
unset($userinfo['society_chieftain']);
unset($userinfo['society_settlement_type']);
}
$root['user'] = $userinfo;
$root['user']['useable_ticket'] =intval($userinfo['ticket']-$userinfo['refund_ticket']);
//直播间显示主播实际可提现印票(客户定制,标准版保留此功能)
if(0){
$root['user']['ticket'] = $root['user']['useable_ticket'];
}
$root['user']['head_image'] = get_spec_image($userinfo['head_image']);
$root['user']['is_robot'] = intval($userinfo['is_robot']);
//$root['user']['focus_count'] = $focus_count;
//$root['user']['fans_count'] = $fans_count;
$u_user_mobile = $user_redis->getRow_db($user_id,array('mobile'));
//新增字段 测试数据
if ((OPEN_PAI_MODULE==1||SHOPPING_GOODS==1)&&$u_user_mobile['mobile']!='13888888888'&&$u_user_mobile['mobile']!='13999999999') {
$root['user']['show_user_order'] = intval(SHOW_USER_ORDER);
if (SHOW_USER_ORDER==1) {
$sql = "select count(*) from ".DB_PREFIX."goods_order where order_type='shop' and order_status in (1,2,3) and (pid = 0 OR is_p=1 ) and viewer_id = ".$user_id;
$root['user']['user_order'] = intval($GLOBALS['db']->getOne($sql,true,true));
}else{
$root['user']['user_order']=0;
}
$root['user']['show_user_pai'] = intval(SHOW_USER_PAI);
if (SHOW_USER_PAI==1) {
$sql = "select count(*) from ".DB_PREFIX."goods_order where order_type<>'shop' and order_status in (1,2,3) and viewer_id =".$user_id;
$root['user']['user_pai'] =intval($GLOBALS['db']->getOne($sql,true,true));
}else{
$root['user']['user_pai']=0;
}
/*$root['user']['show_podcast_order'] = 0;
$root['user']['podcast_order'] = 0;
$root['user']['show_podcast_pai'] = 0;
$root['user']['podcast_pai'] = 0;
$root['user']['show_podcast_goods'] = 0;
$root['user']['podcast_goods'] = 0;*/
$root['user']['show_podcast_order'] = intval(SHOW_PODCAST_ORDER);
if (SHOW_PODCAST_ORDER==1) {
$sql = "select count(*) from ".DB_PREFIX."goods_order where podcast_id = ".$user_id;
$root['user']['podcast_order'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$root['user']['show_podcast_pai'] = intval(SHOW_PODCAST_PAI);
if (SHOW_PODCAST_PAI==1) {
$sql = "select count(*) from ".DB_PREFIX."pai_goods where podcast_id = ".$user_id." and is_delete=0 and status in (0,1,4) and order_status in (1,2,3)";
$root['user']['podcast_pai'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$root['user']['show_podcast_goods'] = intval(SHOW_PODCAST_GOODS);
if (SHOW_PODCAST_GOODS==1) {
//商品
//$sql = "select is_shop from ".DB_PREFIX."user where id = ".$user_id." ";
$sql = "select count(*) from ".DB_PREFIX."user_goods as ug,".DB_PREFIX."goods as gs where gs.id=ug.goods_id and ug.user_id= ".$user_id." and gs.is_effect=1 and gs.inventory > 0";
if(OPEN_GOODS == 1){
$root['user']['podcast_goods'] = intval(good_number($user_id));
}else{
$root['user']['podcast_goods'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
}
$root['user']['show_shopping_cart'] = intval(SHOP_SHOPPING_CART);
if(SHOP_SHOPPING_CART == 1){
$sql = "select count(*) from ".DB_PREFIX."shopping_cart where user_id = ".$user_id." and is_effect=1";
$root['user']['shopping_cart'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$root['user']['open_podcast_goods'] = intval(OPEN_PODCAST_GOODS);
if(OPEN_PODCAST_GOODS == 1){
$sql = "select count(*) from ".DB_PREFIX."podcast_goods where user_id = ".$user_id." and is_effect=1";
$root['user']['shop_goods'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$shopping_goods = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."plugin WHERE class='shop' and is_effect=1");
$pai = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."plugin WHERE class='pai' and is_effect=1");
$podcast_goods = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."plugin WHERE class='podcast_goods' and is_effect=1");
if(!$shopping_goods){
$root['user']['shopping_goods']= 0;
$root['user']['show_shopping_cart'] = 0;
$root['user']['show_user_order']= 0;
$root['user']['show_podcast_order'] = 0;
}
if(!$pai){
$root['user']['show_user_pai'] = 0;
$root['user']['show_podcast_pai'] = 0;
}
if(!$pai && !$shopping_goods){
$root['user']['show_podcast_goods'] = 0;
}
if(!$podcast_goods){
$root['user']['open_podcast_goods'] = 0;
}
}else{
$root['user']['show_user_order'] = 0;
$root['user']['user_order']=0;
$root['user']['show_user_pai'] = 0;
$root['user']['user_pai']=0;
$root['user']['show_podcast_order'] = 0;
$root['user']['show_podcast_pai'] = 0;
$root['user']['show_podcast_goods'] = 0;
$root['user']['podcast_goods'] = 0;
$root['user']['show_shopping_cart'] = 0;
$root['user']['shopping_cart'] = 0;
$root['user']['open_podcast_goods'] = 0;
}
$root['user']['show_svideo'] = defined("OPEN_SVIDEO_MODULE") && OPEN_SVIDEO_MODULE == 1 ? 1 : 0;
$root['user']['show_svideo_favor'] = defined("OPEN_SVIDEO_MODULE") && OPEN_SVIDEO_MODULE == 1 ? 1 : 0;
if ($root['user']['show_svideo'])
{
$sql = "select count(*) from ".DB_PREFIX."weibo where user_id = ".$user_id." and status=1";
$root['user']['svideo_count'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
else
{
$root['user']['svideo_count'] = 0;
}
if ($podcast_id == $user_id){
$root['show_admin'] = 0;//主播查看 主播:设置为管理员/取消管理员,管理员列表,禁言,取消
/*if (OPEN_PAI_MODULE==1) {
$root['user']['show_podcast_order'] = SHOW_PODCAST_ORDER;
if (SHOW_PODCAST_ORDER==1) {
$sql = "select count(*) from ".DB_PREFIX."goods_order where podcast_id = ".$user_id;
$root['user']['podcast_order'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$root['user']['show_podcast_pai'] = SHOW_PODCAST_PAI;
if (SHOW_PODCAST_PAI==1) {
$sql = "select count(*) from ".DB_PREFIX."pai_goods where podcast_id = ".$user_id." and is_delete=0";
$root['user']['podcast_pai'] = intval($GLOBALS['db']->getOne($sql,true,true));
}
$root['user']['show_podcast_goods'] = SHOW_PODCAST_GOODS;
if (SHOW_PODCAST_GOODS==1) {
//商品暂无
$root['user']['podcast_goods'] = 0;
}
}*/
}
//H5链接
$h5_url = array(
'url_my_grades' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=user_center&act=grade',
'url_about_we' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=settings&act=article_cate',
'url_help_feedback' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=settings&act=help',
'url_auction_record' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=pailogs',
'url_user_order' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=shop&act=shop_order&page=1', //商城h5订单链接(观众)
'url_user_pai' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=goods',
'url_podcast_order' => '', // 星级订单(暂无)
'url_podcast_pai' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_podcast&act=goods',
'url_podcast_goods' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=shop&act=podcasr_goods_management&state=1&page=1', //商城h5链接(主播)
'url_auction_agreement' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=settings&act=article_show&cate_id=18', //竞拍协议
'url_pai_income' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=user_center&act=income', //竞拍收益h5
'url_goods_income' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=user_center&act=goods_income_details', //商品收益h5
'url_user_goods' =>'', //进入第三方商城h5链接(观众)
'url_shopping_cart' => SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=shop&act=shop_shopping_cart&page=1' //购物车
);
if (defined('OPEN_EDU_MODULE') && OPEN_EDU_MODULE == 1 && $userinfo['authentication_type'] == '机构') {
$store_url = $GLOBALS['db']->getOne("select store_url from " . DB_PREFIX . "edu_org where user_id = " . $user_id);
$h5_url['url_user_store'] = $store_url;
}
if((defined('PAI_REAL_BTN') && PAI_REAL_BTN == 1) && (defined('PAI_VIRTUAL_BTN') && PAI_VIRTUAL_BTN == 0)){
$h5_url['url_user_pai'] = SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=goods&is_true=1';
$h5_url['url_podcast_pai'] = SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_podcast&act=goods&is_true=1';
}
$root['h5_url']= $h5_url;
}else{
$fields = array('id','fans_count','focus_count','is_agree','video_count','is_authentication','nick_name','signature','sex','province','city','head_image','ticket','no_ticket','use_diamonds','user_level','v_type','v_explain','v_icon','is_remind','birthday','emotional_state','job','family_id','family_chieftain','is_robot','room_title','luck_num', 'weibo_count');
$fields = array_merge($fields,array('is_vip','vip_expire_time'));
$userinfo = $user_redis->getRow_db($to_user_id,$fields);
$userinfo['user_id'] = $to_user_id;
$userinfo['signature'] = htmlspecialchars_decode($userinfo['signature']);
$userinfo['nick_name'] = htmlspecialchars_decode($userinfo['nick_name']);
$userinfo['signature'] = emoji_decode($userinfo['signature']);
$userinfo['nick_name'] = emoji_decode($userinfo['nick_name']);
if(defined("robot_gifts") && robot_gifts ==1){
$userinfo['ticket'] = intval(floor($userinfo['ticket']+$userinfo['no_ticket']));
}else{
$userinfo['ticket'] = intval(floor($userinfo['ticket']));
}
//===================slf add by 20160927 ============
if($userinfo['signature']==''||$userinfo['signature']==false){
$userinfo['signature'] = 'TA好像忘记签名了';
}
//===================================================
/*
$sql = "select id as user_id,video_count,is_authentication,nick_name,signature,sex,province,city,focus_count,head_image,fans_count,ticket,use_diamonds,user_level,v_type,v_explain,v_icon,emotional_state,job,city,birthday from ".DB_PREFIX."user where id = '".$to_user_id."'";
$userinfo = $GLOBALS['db']->getRow($sql,true,true);
*/
if($userinfo['birthday']==false)
$userinfo['birthday'] = '';
if($userinfo['room_title'] === false) {
$userinfo['room_title'] = '';
}
if($userinfo['luck_num'] === false) {
$userinfo['luck_num'] = '';
}
if($userinfo['emotional_state'] === false){
$userinfo['emotional_state'] = '';
}
if($userinfo['family_id']==false)
$userinfo['family_id'] = 0;
if($userinfo['family_chieftain']==false)
$userinfo['family_chieftain'] = 0;
if ($userinfo['is_robot'] === false){
$userinfo['is_robot'] = 0;
}
if($userinfo['job'] === false){
$userinfo['job'] = '';
}
if($userinfo['id'] === false){
$userinfo['id'] = $user_id;
}
if($userinfo['fans_count'] === false){
$userinfo['fans_count'] = 0;
}
if($userinfo['focus_count'] === false){
$userinfo['focus_count'] = 0;
}
if($userinfo['is_agree'] === false){
$userinfo['is_agree'] = 0;
}
if($userinfo['is_remind'] === false){
$userinfo['is_remind'] = 0;
}
if($userinfo['video_count'] === false){
$userinfo['video_count'] = 0;
}
if($userinfo['is_authentication'] === false){
$userinfo['is_authentication'] = 0;
}
if($userinfo['sex'] === false){
$userinfo['sex'] = 0;
}
if($userinfo['province'] === false){
$userinfo['province'] = '';
}
if($userinfo['city'] === false){
$userinfo['city'] = '';
}
if($userinfo['head_image'] === false){
$userinfo['head_image'] = '';
}
if($userinfo['use_diamonds'] === false){
$userinfo['use_diamonds'] = 0;
}
if($userinfo['user_level'] === false){
$userinfo['user_level'] = 1;
}
if($userinfo['v_type'] === false){
$userinfo['v_type'] = 0;
}
if($userinfo['v_explain'] === false){
$userinfo['v_explain'] = '';
}
if($userinfo['v_icon'] === false){
$userinfo['v_icon'] = '';
}
if($userinfo['is_vip'] === false){
$userinfo['is_vip'] = 0;
}
if ($userinfo['weibo_count'] === false) {
$userinfo['weibo_count'] = 0;
}
$userinfo['moments'] = $userinfo['weibo_count'];
$vip_expire_time = intval($userinfo['vip_expire_time']);
if($vip_expire_time>0){
$userinfo['vip_expire_time'] = to_date( $vip_expire_time,'Y-m-d H:i');
if($vip_expire_time < NOW_TIME){
$userinfo['is_vip'] = 0;
$userinfo['vip_expire_time'] = '已过期';
$sql = "update ".DB_PREFIX."user set is_vip = 0 where id = ".$to_user_id;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($to_user_id));
}else{
if(intval($userinfo['is_vip'])==0){
$userinfo['vip_expire_time'] = '未开通';
}
}
}else{
$userinfo['vip_expire_time'] = '未开通';
if(intval($userinfo['is_vip'])==1){
$userinfo['vip_expire_time'] = '永久';
}
}
$root['user'] = $userinfo;
$root['user']['head_image'] = get_spec_image($userinfo['head_image']);
//被查看的用户:个人主页地址
//$root['user']['home_url'] = SITE_DOMAIN.APP_ROOT.'/index.php?isapp=1&c=home&podcast_id='.$to_user_id;
//$root['user']['focus_count'] = $focus_count;
//$root['user']['fans_count'] = $fans_count;
if ($podcast_id > 0){
//主播查看
if ($podcast_id == $user_id){
$root['show_admin'] = 2;//主播查看 主播:设置为管理员/取消管理员,管理员列表,禁言,取消
$sql = "select id from ".DB_PREFIX."user_admin where podcast_id = ".$user_id." and user_id = ".$to_user_id;
//$root['sql'] = $sql;
if ($GLOBALS['db']->getOne($sql,true,true) > 1){
$root['has_admin'] = 1;//0:非管理员;1:是管理员
}else{
$root['has_admin'] = 0;
}
}else{
$sql = "select count(id) as num from ".DB_PREFIX."user_admin where podcast_id = '".$podcast_id."' and user_id = ".$user_id;
if ($GLOBALS['db']->getOne($sql,true,true) > 0){
$root['show_admin'] = 1;
$root['has_admin'] = 1;//0:非管理员;1:是管理员
//$root['sql'] = $sql;
}
}
//管理员查看:主播; 不能:禁言 主播
if ($root['show_admin'] == 1 && $podcast_id == $to_user_id){
$root['show_admin'] = 0;
}
if ($root['show_admin'] > 0)
$root['show_tipoff'] = 0;
else
$root['show_tipoff'] = 1;
}
//关注
//fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
$userfollw_redis = new UserFollwRedisService($user_id);
if ($userfollw_redis->is_following($to_user_id)){
$root['has_focus'] = 1;//0:未关注;1:已关注
}
/*
//关注
$sql = "select count(id) as num from ".DB_PREFIX."focus where podcast_id = ".$to_user_id." and user_id = ".$user_id;
if ($GLOBALS['db']->getOne($sql,true,true) > 0){
$root['has_focus'] = 1;//0:未关注;1:已关注
}*/
}
if ($podcast_id == 0){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoContributionRedisService.php');
$video_con = new VideoContributionRedisService();
$con_list = $video_con->get_podcast_contribute($to_user_id,0,3,1);
//印票贡献前3名
$root['cuser_list'] = $con_list;
foreach($root['cuser_list'] as $k => $v)
{
$root['cuser_list'][$k]['nick_name'] = emoji_decode($v['nick_name']);
}
//拖黑
$sql = "select count(id) as num from ".DB_PREFIX."black where black_user_id = ".$to_user_id." and user_id = ".$user_id;
if ($GLOBALS['db']->getOne($sql,true,true) > 0){
$root['has_black'] = 1;//0:未拖黑;1:已拖黑
}else{
$root['has_black'] = 0;//0:未拖黑;1:已拖黑 $podcast_id == 0 时有效
}
$item = array();
if ($root['user']['birthday'] == 0)
$item['年龄'] = '你猜';
else{
$item['年龄'] = ceil((NOW_TIME - $root['user']['birthday']) / 31536000)."岁";
}
$item['情感状态'] = $root['user']['emotional_state'];
$item['家乡'] = $root['user']['province']." ".$root['user']['city'];
$item['职业'] = $root['user']['job'];
//如果有靓号,显示的用户ID为靓号luck_num
if (intval($root['user']['luck_num']) > 0){
$item[$m_config['short_name'].'号'] = $userinfo['luck_num'];
}else{
$item[$m_config['short_name'].'号'] = $root['user']['user_id'];
}
// $item[$m_config['short_name'].'号'] = $root['user']['user_id'];
$item['个性签名'] = $root['user']['signature'];
//清空空值
foreach ( $item as $k => $v )
{
if (trim($v) == ''){
unset($item[$k]);
}else{
$item[$k] = htmlspecialchars_decode($v);
}
}
$root['user']['item'] = $item;
}else{
//印票贡献第一名
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoContributionRedisService.php');
$video_con = new VideoContributionRedisService();
$con_root = $video_con->get_podcast_contribute($to_user_id,0,1,1);
if ($con_root[0]){
$root['cuser'] = $con_root[0];
}
}
if(!$GLOBALS['db']->getOne("select id from ".DB_PREFIX."video where live_in = 1 and user_id=".$user_id,true,true)){
$video = $GLOBALS['db']->getRow("select id as room_id,group_id,live_in,user_id,video_type,head_image,create_type,live_image from ".DB_PREFIX."video where user_id=".$to_user_id." and live_in in (1,3) and room_type = 3 order by sort_num desc,sort desc",true,true);
if(intval($video['room_id'])){
$video['head_image'] = get_spec_image($video['head_image']);
$video['live_image'] = get_spec_image($video['live_image']);
if (defined('OPEN_EDU_MODULE') && OPEN_EDU_MODULE == 1) {
$video['is_verify'] = intval($GLOBALS['db']->getOne("select is_verify from " . DB_PREFIX . "edu_video_info where video_id = " . $video['room_id']));
}
if (empty($video['group_id']) && defined('CHILD_ROOM') && CHILD_ROOM) {
fanwe_require(APP_ROOT_PATH.'mapi/lib/ChildRoom.class.php');
$child_room = new child_room();
$parent_id = $child_room->parent_id($video['room_id']);
$video['group_id'] = $GLOBALS['db']->getOne("SELECT group_id FROM " . DB_PREFIX . "video WHERE id =" . $parent_id);
}
$root['video'] = $video;
}
}
return $root;
}
/**
* 设置关注/取消关注
* @param unknown_type $user_id 关注用户ID
* @param unknown_type $to_user_id 被关注的用户ID
* $force_remove: 强制取消关注操作
* @return multitype:number string
*/
function redis_set_follow($user_id,$to_user_id,$force_remove = false,$room_id=0){
$root = array();
$root['status'] = 1;
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
$user_follw_redis = new UserFollwRedisService($user_id);
if ($user_follw_redis->is_following($to_user_id) || $force_remove){
//已关注,取消关注操作
//if ($user_redis->is_following($to_user_id)){
//取消关注;
$user_follw_redis->unfollow($to_user_id,$room_id);
/*
$user_redis->follow_count();//关注数 减少1
$user2_redis = new UserNodeService($to_user_id);
$user2_redis->follower_count();//粉丝数 减少1
*/
//}
}else{
//未关注,添加关注操作
$m_config = load_auto_cache("m_config");//初始化手机端配置
$follow_max=$m_config['follow_max'];
if ($user_follw_redis->follow_count() >= $follow_max){
$root['error'] = '关注用户不能超过'.$follow_max.'个';
$root['status'] = 0;
return $root;
}else{
//关注操作
$user_follw_redis->follow($to_user_id,$room_id);
/*
$user_redis->follow_count();//关注数 减少1
$user2_redis = new UserNodeService($to_user_id);
$user2_redis->follower_count();//粉丝数 减少1
*/
//若在黑名单,解除拉黑
set_black($user_id,$to_user_id,true);
}
}
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_data = array();
$user_data['fans_count'] = $user_follw_redis->follower_count();//粉丝数
$user_data['focus_count'] = $user_follw_redis->follow_count();//关注数
$user_redis->update_db($user_id, $user_data);
$sql = "update ".DB_PREFIX."user set fans_count = ".$user_data['fans_count'].",focus_count = ".$user_data['focus_count']." where id = ".$user_id;
$GLOBALS['db']->query($sql);
$user2_follw_redis = new UserFollwRedisService($to_user_id);
$user_data = array();
$user_data['fans_count'] = $user2_follw_redis->follower_count();//粉丝数
$user_data['focus_count'] = $user2_follw_redis->follow_count();//关注数
$user_redis->update_db($to_user_id, $user_data);
$sql = "update ".DB_PREFIX."user set fans_count = ".$user_data['fans_count'].",focus_count = ".$user_data['focus_count']." where id = ".$to_user_id;
$GLOBALS['db']->query($sql);
if ($user_follw_redis->is_following($to_user_id)){
$root['has_focus'] = 1;//0:未关注;1:已关注
}else{
$root['has_focus'] = 0;
}
$root['fans_count'] = $user2_follw_redis->follower_count();
$root['focus_count'] = $user_follw_redis->follow_count();//关注数
return $root;
}
/**
* 结束直播
* @param unknown_type $video(id,user_id,group_id,watch_number,begin_time,end_time,room_type)
* @param string $video_vid
* @param string $is_aborted 1:被服务器异常终止结束(主要是心跳超时)
*/
function do_end_video($video,$video_vid,$is_aborted = 0,$cate_id = 0){
$user_id = $video['user_id'];
$room_id = $video['id'];
$group_id = $video['group_id'];
//$watch_number = $video['watch_number'];
$video_vid = strim($video_vid);
if ($video_vid == 'null') $video_vid = '';
/*if ($video_vid == '')
$is_del_vod = 1;
else
$is_del_vod = 0;*/
$is_del_vod = 1;
$m_config = load_auto_cache("m_config");
$short_video_time = $m_config['short_video_time']?$m_config['short_video_time']:300;
//私有聊天或小于5分钟的视频,不保存 is_delete = IF(room_type =1 or ((".NOW_TIME." - begin_time) <300),1,is_delete)
$sql = "update ".DB_PREFIX."video set live_in = 0,online_status=1,is_aborted = '".$is_aborted."',end_time = ".NOW_TIME.",end_date = '".to_date(NOW_TIME,'Y-m-d')."',video_vid = '".$video_vid."',is_del_vod = ".$is_del_vod.",is_delete = IF(room_type =1 or ((".NOW_TIME." - begin_time) <".$short_video_time."),1,is_delete) where (live_in =1 or live_in = 2 or live_in = 0) and id = ".$room_id;
$GLOBALS['db']->query($sql);
if($GLOBALS['db']->affected_rows()){
if ($cate_id > 0){
$sql = "update ".DB_PREFIX."video_cate a set a.num = (select count(*) from ".DB_PREFIX."video b where b.cate_id = a.id and b.live_in in (1,3)";
if((defined('OPEN_ROOM_HIDE')&&OPEN_ROOM_HIDE==1)&&intval($m_config['open_room_hide'])==1){
$sql.= " and b.province <> '火星' and b.province <>''";
}
$sql.=") where a.id = ".$cate_id;
$GLOBALS['db']->query($sql);
}
//直播结束,连麦也打上结束标识
$sql = 'update '.DB_PREFIX."video_lianmai set stop_time ='".NOW_TIME."' where stop_time = 0 and video_id =".$room_id;
$GLOBALS['db']->query($sql);
//开启公会功能ljz
if(defined('OPEN_SOCIETY_MODULE') && intval(OPEN_SOCIETY_MODULE)==1){
$video_id = intval($video['id']);
$m_config = load_auto_cache("m_config");//初始化手机端配置
$user_info = $GLOBALS['db']->getRow("select society_id,society_settlement_type from ".DB_PREFIX."user where id=".$user_id);
//获取公会审核状态
$society_status = $GLOBALS['db']->getOne("select status from ".DB_PREFIX."society where id=".$user_info['society_id']);
//判断是否有公会
if($user_info['society_id'] > 0 && $society_status == 1){
//判断模式
if($m_config['society_pattern'] == 0){//关闭公会模式
platform_receipts($user_id,$m_config,$video,$video_id);
}elseif ($m_config['society_pattern'] == 1){//有抽成模式
society_lv_jf($m_config,$user_id,$video_id,$video,$user_info);
}elseif ($m_config['society_pattern'] == 2){//无抽成模式
society_receipts($video);
}
}else{
platform_receipts($user_id,$m_config,$video,$video_id);
}
}
//开启家族功能
if(defined('OPEN_FAMILY_MODULE') && intval(OPEN_FAMILY_MODULE)==1 && intval(OPEN_SOCIETY_MODULE)==0){
family_receipts1($room_id,$user_id,$video);
}
//开启公会功能,直播结束后将受益写入公会收益表
/* if(OPEN_SOCIETY_MODULE == 1){
society_receipts($video);
} */
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
//直播结束时,将redis中计算的数据,同步一份到mysql;
$fields = array('room_type','video_type','share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number', 'channelid','prop_table');
$video_data = $video_redis->getRow_db($room_id, $fields);
$GLOBALS['db']->autoExecute(DB_PREFIX . "video", $video_data, "UPDATE", "id=" . $room_id);
if ($video_data['room_type'] == 1){
$drop_video = true;
if (defined('OPEN_EDU_MODULE') && OPEN_EDU_MODULE == 1) {
// 教育众筹和约课不删除视频
$sql = "select deal_id,booking_class_id from " . DB_PREFIX . "edu_video_info where video_id = " . $room_id;
$edu_video_info = $GLOBALS['db']->getRow($sql);
if ($edu_video_info && ($edu_video_info['deal_id'] > 0 || $edu_video_info['booking_class_id'] > 0)) {
$sql = "update " . DB_PREFIX . "video set is_delete = IF(((" . NOW_TIME . " - begin_time) <" . $short_video_time . "),1,0) where id = " . $room_id;
$GLOBALS['db']->query($sql);
$drop_video = false;
}
}
//私密直播,
if($drop_video) {
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoPrivateRedisService.php');
$video_private_redis = new VideoPrivateRedisService();
$video_private_redis->drop_video($room_id);
}
}
$parent_id = 0;
if (defined('CHILD_ROOM') && CHILD_ROOM == 1) {
fanwe_require(APP_ROOT_PATH . 'mapi/lib/ChildRoom.class.php');
$child_room = new child_room();
$parent_id = $child_room->parent_id($room_id);
if ($parent_id != $room_id) {
$p_video_data = $video_redis->getRow_db($parent_id, $fields);
$video_data['max_watch_number'] = $p_video_data['max_watch_number'];
}
}
if ($video_data['video_type'] ==1 && $parent_id == $room_id){
//0:腾讯云互动直播;1:腾讯云直播
fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
$video_factory->StopLVBChannel($video_data['channelid']);
}
//获取直播间,红包 发放记录,主要用于,直播结束后,处理还未被领取的红包
$red_list = $video_redis->get_reds($room_id);
if (count($red_list) > 0){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedRedisService.php');
$videoRed_redis = new VideoRedRedisService();
foreach ($red_list as $red_id) {
if ($videoRed_redis->red_exists($red_id)){
$prop_table = $video_data['prop_table'];
if($prop_table!=''){
$sql = "SELECT from_user_id FROM " .$prop_table. " WHERE id=".$red_id;
$from_user_id = $GLOBALS['db']->getOne($sql, true, true);
}
do{
$money = $videoRed_redis->pop_red($red_id);
if ($money > 0){
//随机获得一机器人
$robot_keys = $videoRed_redis->redis->srandmember($videoRed_redis->user_robot_db,1);
$robot_id = intval($robot_keys[0]);
//如果是私密直播间,红包退回发送者
if ($video_data['room_type']==1){
if(intval($from_user_id)){
$robot_id = $from_user_id;
}
}
allot_red_to_user($red_id,$robot_id,$money);
}
}while($money > 0);
}
}
}
if (OPEN_PAI_MODULE==1&&intval($video['pai_id'])>0) {
//关闭竞拍
$data=array();
$data['podcast_id']=$video['user_id'];
$data['pai_id']=$video['pai_id'];
$data['video_id']=$room_id;
$rs = FanweServiceCall("pai_podcast","stop_pai",$data);
}
if((defined('LIVE_END_TO_SCENE')&&LIVE_END_TO_SCENE==1) && intval($video['is_live_pay'])==1){
//按时付费直播结束后转按场付费
change_pay_type($video);
}
//将mysql数据,同步一份到redis中
sync_video_to_redis($room_id,'*',false);
if ($group_id != ''){
//广播:直播结束
$ext = array();
$ext['type'] = 7; //0:普通消息;1:礼物;2:弹幕消息;3:主播退出;4:禁言;5:观众进入房间;6:观众退出房间;7:直播结束
$ext['room_id'] = $room_id;//直播ID 也是room_id;只有与当前房间相同时,收到消息才响应
$ext['show_num'] = $video_data['max_watch_number'];//观看人数
$ext['fonts_color'] = '';//字体颜色
$ext['desc'] = '直播结束';//弹幕消息;
$ext['desc2'] = '直播结束';//弹幕消息;
//消息发送者
//$sender = array();
//$ext['sender'] = $sender;
#构造高级接口所需参数
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
// 'Ext' => $ext,
// 'Sound' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
//发送广播:直播结束
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_msg2($user_id, $group_id, $msg_content);
if (defined('CHILD_ROOM') && CHILD_ROOM == 1) {
fanwe_require(APP_ROOT_PATH . 'mapi/lib/ChildRoom.class.php');
$child_room = new child_room();
$child_ids = $child_room->child_id($room_id);
foreach ($child_ids as $child_id) {
$ext['room_id'] = $child_id;
$ret = $api->group_send_group_msg2($user_id, $group_id, array(
array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
)
)
));
}
}
//=========================================================
//广播:直播结束
$ext = array();
$ext['type'] = 18; //18:直播结束(全体推送的,用于更新用户列表状态)
$ext['room_id'] = $room_id;//直播ID 也是room_id;只有与当前房间相同时,收到消息才响应
//18:直播结束(全体推送的,用于更新用户列表状态)
$api->group_send_group_system_notification($m_config['on_line_group_id'],json_encode($ext),null);
//=========================================================
return $ret;
}else{
return true;
}
}else{
return false;
}
}
/**
* 直播结束 后相关数据处理(在后台定时执行)
*
*$video id,user_id,group_id,room_type,begin_time,end_time,video_vid,is_delete,is_del_vod
*
* 1、处理 fanwe_video_viewer 异常数据;没有begin_time时间的,用fanwe_video.begin_time代替; 没有end_time 用fanwe_video.end_time代替
* 2、统计用户在线时长,fanwe_video_viewer
* 3、移除fanwe_video_viewer,fanwe_video_contribution,fanwe_video_monitor,fanwe_video_share,fanwe_video,fanwe_video_lianmai数据到历史表中
* @param unknown_type $video(id,user_id,watch_number,vote_number,group_id,room_type,begin_time,end_time)
*/
function do_end_video_2(&$video_redis,&$api,$video_id){
$pInTrans = $GLOBALS['db']->StartTrans();
try
{
$sql = "update ".DB_PREFIX."video set live_in = -1 where live_in = 0 and id = ".$video_id;
//echo $sql."
";
$GLOBALS['db']->query($sql);
if($GLOBALS['db']->affected_rows()){
$sql = "select * from ".DB_PREFIX."video where id = ".$video_id;
//$video = $video_redis->getRow_db($video_id);
$video = $GLOBALS['db']->getRow($sql);
$group_id = $video['group_id'];
$begin_time = $video['begin_time'];
$end_time = $video['end_time'];
$user_id = $video['user_id'];
$is_del_vod = $video['is_del_vod'];
$is_delete = $video['is_delete'];
$room_type = $video['room_type'];//房间类型 : 1私有群(Private),0公开群(Public),2聊天室(ChatRoom),3互动直播聊天室(AVChatRoom)
/*
//处理fanwe_video_viewer 异常数据
$sql = "update ".DB_PREFIX."video_viewer set is_exception = 1, begin_time = '".$begin_time."' where begin_time = 0 and group_id = '".$group_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql = "update ".DB_PREFIX."video_viewer set is_exception = 1,end_time = '".$end_time."' where end_time = 0 and group_id = '".$group_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
//fanwe_video_viewer
//统计用户在线时长
$sql = "update ".DB_PREFIX."user u,
(select user_id, sum(end_time - begin_time) as time_len from ".DB_PREFIX."video_viewer where group_id = '".$group_id."' group by user_id) t
set u.online_time = u.online_time + t.time_len
where t.user_id = u.id";
$GLOBALS['db']->query($sql);
//echo $sql."
";
//将本次直播观众移到历史表中
$sql = "insert into ".DB_PREFIX."video_viewer_history(video_id,group_id,user_id,begin_time,end_time,is_robot,is_exception) select ".$video_id." as video_id,group_id,user_id,begin_time,end_time,is_robot,is_exception from ".DB_PREFIX."video_viewer where group_id='".$group_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_viewer where group_id='".$group_id."'";
$GLOBALS['db']->query($sql);
///echo $sql."
";
//将本次直播贡献排行移到历史表中
$sql = "insert into ".DB_PREFIX."video_contribution_history(video_id,user_id,num) select video_id,user_id,num from ".DB_PREFIX."video_contribution where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_contribution where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
*/
//将本次直播 心跳监听 移到历史表中
$sql = "insert into ".DB_PREFIX."video_monitor_history(video_id,user_id,vote_number,watch_number,lianmai_num,monitor_time,statistic_time,appCPURate,sysCPURate,sendKBps,recvKBps,sendLossRate,fps,device) select video_id,user_id,vote_number,watch_number,lianmai_num,monitor_time,statistic_time,appCPURate,sysCPURate,sendKBps,recvKBps,sendLossRate,fps,device from ".DB_PREFIX."video_monitor where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_monitor where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
//将本次直播 用户分享记录 移到历史表中
$sql = "insert into ".DB_PREFIX."video_share_history(video_id,user_id,type,create_time) select video_id,user_id,type,create_time from ".DB_PREFIX."video_share where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_share where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
//修正异常连麦结束数据
$sql = 'update '.DB_PREFIX."video_lianmai set stop_time ='".$end_time."' where stop_time = 0 and video_id ='".$video_id."'";
$GLOBALS['db']->query($sql);
//将本次直播 用户连麦记录 移到历史表中
$sql = "insert into ".DB_PREFIX."video_lianmai_history(video_id,user_id,start_time,stop_time) select video_id,user_id,start_time,stop_time from ".DB_PREFIX."video_lianmai where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_lianmai where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
/*
//将本次直播 礼物记录 移到历史表中
$sql = "insert into ".DB_PREFIX."video_prop_history(id,prop_id,prop_name,total_score,total_diamonds,use_diamonds,total_ticket,from_user_id,to_user_id,create_time,num,video_id,group_id,is_red_envelope,create_date,ActionStatus,ErrorInfo,ErrorCode) select id,prop_id,prop_name,total_score,total_diamonds,use_diamonds,total_ticket,from_user_id,to_user_id,create_time,num,video_id,group_id,is_red_envelope,create_date,ActionStatus,ErrorInfo,ErrorCode from ".DB_PREFIX."video_prop where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_prop where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
//将本次直播 红包记录 移到历史表中
$sql = "insert into ".DB_PREFIX."video_red_envelope_history(id,video_id,video_prop_id,user_id,nick_name,diamonds,sex,head_image,create_time) select id,video_id,video_prop_id,user_id,nick_name,diamonds,sex,head_image,create_time from ".DB_PREFIX."video_red_envelope where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_red_envelope where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
*/
/* fanwe_video_private 放在redis中处理
if ($room_type == 1){
//将本次私聊直播 被护肩 的用户 移到历史表中
$sql = "insert into ".DB_PREFIX."video_private_history(video_id,user_id) select video_id,user_id from ".DB_PREFIX."video_private where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
$sql= "delete from ".DB_PREFIX."video_private where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
}
*/
//echo $sql."
";
/*
//把fanwe_video 也移历史表中 end_date = ".to_date(NOW_TIME,'Y-m-d')
$fields = "id,title,user_id,live_in,end_date,watch_number,virtual_watch_number,vote_number,cate_id,province,city,create_time,begin_time,end_time,group_id,destroy_group_status,long_polling_key,is_hot,is_new,max_watch_number,room_type,is_del_vod,video_vid,monitor_time,is_delete,robot_num,robot_time,channelid,is_aborted,tipoff_count";
$sql = "insert into ".DB_PREFIX."video_history(".$fields.") select ".$fields." from ".DB_PREFIX."video where id='".$video_id."'";
$GLOBALS['db']->query($sql);
//echo $sql."
";
*/
$video['live_in'] = 0;//改成:直播结束 live_in 0:结束;1:正在直播;2:创建中;3:回看
$end_time = intval($video['end_time']);
if($end_time==0) $end_time = to_timespan($video['monitor_time']);
$video['len_time'] =$video['len_time'] + ($end_time - $video['begin_time']);
$GLOBALS['db']->autoExecute(DB_PREFIX."video_history", $video,"INSERT");
$sql= "delete from ".DB_PREFIX."video where id='".$video_id."'";
$GLOBALS['db']->query($sql);
//将付费直播记录移到历史表
if(intval($video['is_live_pay'])==1){
syn_live_pay_to_history($video_id,$video['user_id']);
}
//echo $sql."
";
/*
//删除禁言数据
$sql = "delete from ".DB_PREFIX."video_forbid_send_msg where group_id='".$group_id."'";
$GLOBALS['db']->query($sql);
*/
//video_count
//$sql = "select id,title,begin_time,max_watch_number from ".DB_PREFIX."video_history where is_delete = 0 and is_del_vod = 0 and user_id = '".$to_user_id."' order by ".$sort_field." limit ".$limit;
$sql = "select count(*) as num from ".DB_PREFIX."video_history where is_delete = 0 and is_del_vod = 0 and user_id = '".$user_id."'";
$video_count = $GLOBALS['db']->getOne($sql);
$sql = "update ".DB_PREFIX."user set video_count = ".$video_count." where id = ".$user_id;
$GLOBALS['db']->query($sql);
//将直播间,用户领取的红包记录,同步一份到mysql
syn_red_to_mysql($video_id);
$GLOBALS['db']->Commit($pInTrans);
$pInTrans = false;
$data = array();
/*改成在 删除视频时 解散群组
//如果是删除状态,则解散群组
if ($is_delete == 1 && $video['destroy_group_status'] == 1){
if ($video['group_id'] != ''){
$ret = $api->group_destroy_group($video['group_id']);
$data['destroy_group_status'] = $ret['ErrorCode'];
$video_redis->del_video_group_db($video['group_id']);//只有在:解散 聊天组时,才删除
}else{
$data['destroy_group_status'] = 0;
}
}
$video_redis->update_db($video_id, $data);
*/
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_data = array();
$user_data['video_count'] = $video_count;
$user_redis->update_db($user_id, $user_data);
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$data = [
'game_log_id' => 0,
'banker_id' => 0,
'banker_status' => 0,
"banker_log_id" => 0,
"banker_name" => '',
"banker_img" => '',
'coin' => 0,
];
$video_redis->update_db($video_id, $data);
if ($is_del_vod == 0 && $is_delete == 1){
$m_config = load_auto_cache("m_config");
$del_short_video = $m_config['del_short_video']?$m_config['del_short_video']:1;
if ($del_short_video){
return del_vodset($video,true);//直播删除短视频
}else{
return $video_id;
}
}else{
return $video_id;
}
}else{
$GLOBALS['db']->Rollback($pInTrans);
return 0;
}
}catch(Exception $e){
//异常回滚
$GLOBALS['db']->Rollback($pInTrans);
return 0;
}
}
/**
* 设置 黑名单/取消 黑名单
* @param unknown_type $user_id 关注用户ID
* @param unknown_type $to_user_id 被关注的用户ID
* $force_remove: 强制取消黑名单
* @return multitype:number string
*/
function set_black($user_id,$to_user_id,$force_remove = false){
$root = array();
$root['status'] = 1;
//
$pInTrans = $GLOBALS['db']->StartTrans();
try
{
$sql = "select id from ".DB_PREFIX."black where black_user_id = ".$to_user_id." and user_id = ".$user_id;
$black_id = $GLOBALS['db']->getOne($sql);
if ($black_id > 0 || $force_remove){
if ($black_id > 0){
//echo "black_a_id:".$black_id;
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->sns_black_delete((string)$user_id, (string)$to_user_id);
if ($ret['ActionStatus'] == 'OK'){
//取消黑名单操作;
$sql = "delete from ".DB_PREFIX."black where id = ".$black_id;
$GLOBALS['db']->query($sql);
}else{
$root['status'] = 0;
$root['error'] = $ret['ErrorCode'].$ret['ErrorInfo'];
}
}
}else{
//echo "black_b_id:".$black_id;
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->sns_black_import((string)$user_id, (string)$to_user_id);
//print_r($ret);
if ($ret['ActionStatus'] == 'OK'){
//未关注,需要关注操作;
$black = array();
$black['black_user_id'] = $to_user_id;
$black['user_id'] = $user_id;
$black['create_time'] = NOW_TIME;
$GLOBALS['db']->autoExecute(DB_PREFIX."black", $black,"INSERT");
//取消关注
//set_follow($user_id,$to_user_id,true);
redis_set_follow($user_id,$to_user_id,true);
}else{
$root['status'] = 0;
$root['error'] = $ret['ErrorCode'].$ret['ErrorInfo'];
}
}
$sql = "select count(id) as num from ".DB_PREFIX."black where black_user_id = ".$to_user_id." and user_id = ".$user_id;
//$root['sql'] = $sql;
if ($GLOBALS['db']->getOne($sql) > 0){
$root['has_black'] = 1;//0:未黑名单;1:黑名单
}else{
$root['has_black'] = 0;
}
if ($root['status'] == 1){
$GLOBALS['db']->Commit($pInTrans);
}else{
$GLOBALS['db']->Rollback($pInTrans);
}
}catch(Exception $e){
//异常回滚
$root['error'] = $e->getMessage();
$root['status'] = 0;
$GLOBALS['db']->Rollback($pInTrans);
}
return $root;
}
/**
* 获得点播资料
* @param unknown_type $video_vid
* @return multitype:multitype: number string
* https://www.qcloud.com/doc/api/257/2331
*/
function get_vodset($video_vid){
$root = array();
$root['status'] = 1;
//$root['vodset'] = array();
//var_dump($video_vid);
$video_vid = htmlspecialchars_decode($video_vid);
//var_dump($video_vid);
$video_vid = str_replace(""", "", $video_vid);
$video_vid = str_replace("[", "", $video_vid);
$video_vid = str_replace("]", "", $video_vid);
$video_vid = str_replace('"', '', $video_vid);
$video_vid = explode(",",$video_vid);
//var_dump($video_vid2);
//$video_vid3 = json_decode($video_vid);
//var_dump($video_vid3);
//print_r($video_vid);
//exit;
if (count($video_vid) > 0){
fanwe_require(APP_ROOT_PATH.'system/QcloudApi/QcloudApi.php');
$m_config = load_auto_cache("m_config");
$config = array('SecretId' => $m_config['qcloud_secret_id'],
'SecretKey' => $m_config['qcloud_secret_key'],
'RequestMethod' => 'GET',
'DefaultRegion' => 'gz');
//print_r($config);exit;
$service = QcloudApi::load(QcloudApi::MODULE_VOD, $config);
foreach ( $video_vid as $k => $v )
{
$package = array('vid' => $v);
$ret = $service->DescribeRecordPlayInfo($package);
//var_dump($package);
//var_dump($ret);
//exit;
if ($ret === false) {
$error = $service->getError();
$root['status'] = 0;
$root['error'] = $v.";".$error->getCode() .";".$error->getMessage();
}else{
$root['vodset'][] = $ret;
/*
//code错误码, 0: 成功, 其他值: 失败; message: 错误信息;
if ($ret['code'] == 0){
foreach ( $ret['fileSet'] as $k => $v )
{
}
}
*/
}
}
}else{
$root['status'] = 0;
$root['error'] = '无效的直播录制文件';
}
return $root;
}
/**
* 删除录制视频
* @param unknown_type $room_id
*/
function del_vodset($video,$is_del_group=false){
if(! is_array($video)){
$video = array('id' => $video);
}
$room_id = $video['id'];
$root = array();
$root['status'] = 1;
$root['room_id'] = $room_id;
fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
if($video['video_type'] == 1 && $video['channelid'] && strpos($video['channelid'],'_')){
$root['delvodset'] = $video_factory->DeleteVodFiles($video['channelid'], $video['begin_time']);
} else {
$filename = $room_id;
if($video['video_type'] == 1){
$filename = 'live'.$room_id;
}
$root['delvodset'] = $video_factory->DeleteVodFilesByFileName($filename);
}
//$sql = "select id as room_id,video_vid,is_del_vod,group2_id,group2_status from ".DB_PREFIX."video_history where id = ".$room_id;
//$video = $GLOBALS['db']->getRow($sql);
$isdelall = true;
foreach ( $root['delvodset'] as $k => $v ){
if ($v != 1 && isset($v['code']) && $v['code'] != 0){
$isdelall = false;
$root['error'] = $root['error'].";key:".$k.";code:".$v['code'].";message:".$v['message'];
}
}
if ($isdelall){
$sql = "update ".DB_PREFIX."video_history set is_del_vod = 1 where id = ".$room_id;
$GLOBALS['db']->query($sql);
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$data = array();
$data['is_del_vod'] = 1;
$video_redis->update_db($room_id, $data);
//解散聊天组
if($is_del_group){
$sql = "select destroy_group_status,group_id from ".DB_PREFIX."video_history where id = ".$room_id;
$video_data = $GLOBALS['db']->getRow($sql);
//如果是删除状态,则解散群组
if ($video_data['destroy_group_status'] == 1){
if ($video_data['group_id'] != ''){
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_destroy_group($video_data['group_id']);
$destroy_group_status = $ret['ErrorCode'];
}else{
$destroy_group_status = 0;
}
$sql = "update ".DB_PREFIX."video_history set destroy_group_status = ".$destroy_group_status." where id = ".$room_id;
$GLOBALS['db']->query($sql);
$data = array();
$data['destroy_group_status'] = $destroy_group_status;
$video_redis->update_db($room_id, $data);
}
}
//将直播间,用户领取的红包记录,同步一份到mysql
syn_red_to_mysql($room_id);
$sql = "select destroy_group_status,is_del_vod from ".DB_PREFIX."video_history where id = ".$room_id;
$video_data = $GLOBALS['db']->getRow($sql);
if ($video_data['destroy_group_status'] ==0 && $video_data['is_del_vod'] == 1){
$video_redis->del_db($room_id);//清空redis上视频相关数量【fanwe_video,禁言,点赞,观众列表,group_id与 video_id对应数据】
}
}
//print_r($root);
return $root;
}
//防盗连接sign = md5(【腾讯号 + 用户ID + 房间号】)
function check_sign($sign, $sign_version, $tim_sdkappid, $user_id, $room_id) {
//防盗连接问题 sign = md5(【腾讯号 + 用户ID + 房间号】)
if ($sign_version == '1.0'){
$sign2 = md5($tim_sdkappid.$user_id.$room_id);
}else{
$sign2 = md5($tim_sdkappid.$user_id.$room_id);
}
return (($sign == $sign2) && $sign != '');
}
//获取直播信息2
function get_video_info2($room_id, $user_id, $type, $param,$require_type=0) {
$has_scroll = strim($param['has_scroll']);//1: 自动会多返回一个podcast2(room_id,head_image)参数,用于上下滚动切换时,预加载使用; 当预加载直播失效时,自动返回下一个有效的直播房间
$private_key = strim($param['private_key']);//私密直播key
$is_vod = intval($param['is_vod']);//0:观看直播;1:点播
$sex = intval($param['sex']);//性别 0:全部, 1-男,2-女,默认为:0
$cate_id = intval($param['cate_id']);//话题id,默认为:0
$city = strim($param['city']);//城市(空为:热门),默认为:空
$type = intval($param['type']);
if ($city == '热门' || $city == 'null'){
$city = '';
}
$require_type=intval($require_type);//1:PC端;0:app端
$root = array();
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
if ($room_id > 0){
//获得当前用户和主播的手机资料
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$u_user_mobile = $user_redis->getRow_db($user_id,array('mobile','is_effect'));
if($u_user_mobile['is_effect'] == 0){
$root = array();
$root['error'] = "无效帐户";
$root['status'] = 0;
if(!$require_type){
ajax_return($root);
}
}
//累计观看次数;累计观看次数明显大于其它用户观看次数时,及有可能是盗连接用户,需要禁用它
$sql = "update ".DB_PREFIX."user set view_count = view_count + 1 where id = ".$user_id;
$GLOBALS['db']->query($sql);
$fields = array('id','channelid', 'create_type','head_image','cate_id','title','thumb_head_image','xpoint','ypoint','sort_num','push_rtmp','play_url','play_mp4','play_flv','play_rtmp','play_hls','room_type','user_id','live_in','monitor_time', 'max_watch_number','online_status', 'video_vid','is_del_vod','is_delete','video_type','group_id','room_type','private_key','share_type','province','city','pai_id','begin_time', 'create_time','live_pay_time','is_live_pay','live_pay_type','live_fee','live_is_mention','room_title','pay_room_id');
if (OPEN_GAME_MODULE == 1) {
$fields[] = 'game_log_id';
}
if (OPEN_BM == 1) {
$fields[] = 'is_bm';
$fields[] = 'is_push';
}
$m_config = load_auto_cache("m_config");//手机端配置
$root = $video_redis->getRow_db($room_id,$fields);
if ($root['pay_room_id'] === false){
$root['pay_room_id'] = 0;
}
$monitor_overtime = $m_config['monitor_overtime'];
if ($monitor_overtime <= 0) $monitor_overtime = 40;
if ($root['live_in'] == 1 && $root['monitor_time'] > 0 && $root['monitor_time'] < NOW_TIME - $monitor_overtime){
//心跳超时
crontab_do_end_video();
$root = $video_redis->getRow_db($room_id,$fields);
}
//兼容IM推送失败列表不刷新,存在已关闭的直播显示问题
if(intval($root['live_in'])==0&&$is_vod==0){
$root = array();
$root['error'] = "直播已被关闭!";
$root['status'] = 0;
if($require_type == 1){
return $root;
}else{
ajax_return($root);
}
}
$root['head_image'] = get_spec_image($root['head_image']);
$root['thumb_head_image'] = get_spec_image($root['thumb_head_image']);
//非百魅模式
if (OPEN_BM == 1&&!$root['is_bm']) {
$root['is_push']=1;
}
$root['open_daily_task'] = 0; //每日任务
if (defined('OPEN_MISSION') && OPEN_MISSION == 1 && $m_config['mission_switch']) {
require_once APP_ROOT_PATH . 'mapi/lib/core/Model.class.php';
Model::$lib = APP_ROOT_PATH . 'mapi/lib/';
if (sizeof(Model::build('mission')->getMissionList($user_id)) > 0) {
$root['open_daily_task'] = 1;
}
}
//-------------------------------------
//sdk_type 0:使用腾讯SDK、1:使用金山SDK
//映射关系类型 腾讯云直播, 金山云,星域,方维云 ,阿里云
//video_type 1 2 3 4 5
//sdk_type 0 1 - - -
$root['sdk_type'] = get_sdk_info(intval($m_config['video_type']));
$p_user_mobile = $user_redis->getRow_db($root['user_id'],array('mobile'));
$dev_type = strim($_REQUEST['sdk_type']);
$sdk_version_name = strim($_REQUEST['sdk_version_name']);
/*$is_refuse = 1;
if($p_user_mobile['mobile']=='13999999999'&&($u_user_mobile['mobile']=='13888888888'||$u_user_mobile['mobile']=='13999999999')) $is_refuse = 0;
if($p_user_mobile['mobile']=='13888888888'&&($u_user_mobile['mobile']=='13888888888'||$u_user_mobile['mobile']=='13999999999')) $is_refuse = 0;
if($m_config['ios_check_version'] != ''&&$is_refuse){
$root = array();
$root['error'] = "直播间".$room_id."达到人数上限,无法进入!";
$root['status'] = 0;
ajax_return($root);
}
if ($root['pay_room_id'] === false){
$root['pay_room_id'] = 0;
}*/
$filter_false = array(
'create_type' => 0,
'video_vid' => '',
'is_del_vod' => 0,
'is_delete' => 0,
'private_key' => '',
'group_id' => '',
'video_type' => 0,
'pai_id' => 0,
'max_watch_number' => 0,
'head_image' => '',
'thumb_head_image' => '',
'xpoint' => 0,
'ypoint' => 0,
'sort_num' => 0,
'play_flv' => '',
'play_rtmp' => '',
'play_hls' => '',
'play_mp4' => '',
'play_url' => '',
'push_rtmp' => '',
'cate_id' => 0,
'title' => '',
'is_live_pay' => 0,
'live_pay_type' => 0,
'live_pay_time' => '',
'live_fee' => 0,
'live_is_mention' => 0,
'pay_room_id' => 0
);
if (OPEN_GAME_MODULE == 1) {
$filter_false['game_log_id'] = 0;
}
filter_false($root, $filter_false);
//限制主播PC端发起直播,APP端重复登录
$dev_type = strim($_REQUEST['sdk_type']);
if($root['user_id']==$user_id&&$root['create_type']==1&&$is_vod!=1&&($dev_type == 'ios' || $dev_type == 'android')){
$root['error'] = "PC端发起的直播,APP不能重复登录";
$root['status'] = 0;
ajax_return($root);
}
//vip
if($user_id!=$root['user_id'] &&(defined('OPEN_VIP')&&OPEN_VIP==1)&&intval($m_config['open_vip'])==1){
$sql = "select id,is_vip,vip_expire_time from ".DB_PREFIX."user where id = ".$user_id;
$user = $GLOBALS['db']->getRow($sql,true,true);
$vip_expire_time = intval($user['vip_expire_time']);
$is_vip = intval($user['is_vip']);
if($is_vip!=1 || ($is_vip == 1 && $vip_expire_time>0 && $vip_expire_timegetAll("SELECT id,class FROM ".DB_PREFIX."plugin WHERE is_effect=1 and type = 1");
$live_pay = array();
if($live_pay_info){
foreach($live_pay_info as $k=>$v){
$live_pay[$v['class']] = $v['id'];
}
}*/
$group_id = $root['group_id'];
$p_user_id = $root['user_id'];
$is_order = 0;
if (defined('ORDER_ZC') && ORDER_ZC == 1) {
$is_order = is_ordered($room_id,$user_id);
}
//付费直播
if(intval(OPEN_LIVE_PAY)==1 && !$is_order){
$result = get_pay_video_info($root);
if($result['status']==0&&$root['user_id']!=$user_id){ //去掉这个参数; 0腾讯云互动直播,1腾讯云直播 &&intval($m_config['video_type'])==1
$root_result = array();
$root_result = $result;
$root_result['status'] = 1;
if(intval($m_config['is_only_play_video'])){
$root_result['is_only_play_voice'] = 0;
}else{
$root_result['is_only_play_voice'] = 1;
}
$sign = strim($param['sign']);//防盗连接问题 sign = md5(【腾讯号 + 用户ID + 房间号】)
$sign_version = strim($param['sign_version']);//1.0
$tim_sdkappid = $m_config['tim_sdkappid'];
//只有签名对,才返回:视频预览地址 防盗连接
if (check_sign($sign,$sign_version,$m_config['tim_sdkappid'],$user_id,$room_id)){
$key = "preview:video:{$room_id}:{$user_id}";
$preview_num = intval($GLOBALS['cache']->get($key, true));
$preview_num = $preview_num + 1;
$GLOBALS['cache']->set($key, $preview_num, 600, true);
$preview_play_url = '';
if ($preview_num > 2){
$root_result['is_only_play_voice'] = 1;//超过2次预览后,只显示声音
}
//视频预览地址,后面添加较验
$preview_play_url = $root['play_url'];
//直播状态,默认播放flv格式;
if (($root['live_in'] == 1 || $root['live_in'] == 2) && $preview_play_url == ''){
$preview_play_url = $root['play_flv'];
}
if ($root['live_in'] == 3 && $preview_play_url == '' ){
$file_info = load_auto_cache('video_file', array(
'id' => $root['room_id'],
'video_type' => $root['video_type'],
'channelid' => $root['channelid'],
'begin_time' => $root['begin_time'],
'create_time' => $root['create_time'],
));
if($file_info['play_url']){
$preview_play_url = $file_info['play_url'];
}
}
}else{
}
if(intval($m_config['countdown'])==0){
$preview_play_url = '';
}
$root_result['id'] = $room_id;
$root_result['room_id'] = $room_id;
$root_result['group_id'] = $group_id;
$root_result['user_id'] = $p_user_id;
$root_result['countdown'] = intval($m_config['countdown']);//(秒) 付费直播间预览倒计时,默认为10,0为关闭倒计时预览
$root_result['preview_play_url'] = $preview_play_url?$preview_play_url:'';
$root_result['online_status'] = $root['online_status'];
if (($root['live_in'] == 3 || $root['live_in'] == 0) && $is_vod == 1){
$root_result['has_video_control'] = 1;//点播时,视频控制操作
}
if($require_type==1){
$root_result['status'] = 0;
return $root_result;
}else{
ajax_return($root_result);
}
}else{
$is_live_pay = intval($result['is_live_pay']);
$live_pay_type = intval($result['live_pay_type']);
$live_fee = intval($result['live_fee']);
$is_pay_over = intval($result['is_pay_over']);
if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0){
$is_live_pay = 1;
}
}
}
/* 非主播的 $is_live_pay 都要==0?修改 20170203
* 写错了?$root['user_id']==$user_id ?
* 主播 进入自己直播间 都不需要付费 $root['user_id']==$user_id !!!
* */
/*if($root['user_id']==$user_id&&$is_live_pay==1){
$is_live_pay = 0;
}*/
//直播间标题
//非主播,不下发推流地址
if ($root['user_id'] != $user_id){
$root['push_rtmp'] = '';
}
//直播状态,默认播放flv格式;
if (($root['live_in'] == 1 || $root['live_in'] == 2) && $root['play_url'] == ''){
$root['play_url'] = $root['play_flv'];
}
if ($root['room_type'] == 1 && $root['user_id'] != $user_id){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoPrivateRedisService.php');
$video_private_redis = new VideoPrivateRedisService();
if ($private_key != '' && $private_key != 'null'){
if ($private_key == $root['private_key']){
//检查用户是否被踢除,被踢除后,不能再加入;除非再次邀请
if ($video_private_redis->check_user_drop($room_id, $user_id)){
$root['error'] = "您已经被踢出,不能再加入";
$root['status'] = 0;
if($require_type==1){
return $root;
}else{
ajax_return($root);
}
}else{
//将用户加入私密直播,可重复操作
$video_private_redis->push_user($room_id, $user_id);
}
}else{
$root['error'] = "无效的私密钥匙:".$private_key;
$root['status'] = 0;
if($require_type=1){
return $root;
}else{
ajax_return($root);
}
}
}else{
//私聊,判断用户是否在被邀请的名单中,被踢除后,也不能重新加入
if (OPEN_BM == 1) {
$is_bm=$root['is_bm'];
}else{
$is_bm=false;
}
if ($video_private_redis->check_user_push($room_id, $user_id) == false&&!$is_bm){
$root['error'] = "私聊群,用户不在邀请名单中";
$root['status'] = 0;
if($require_type==1){
return $root;
}else{
ajax_return($root);
}
}
}
}
if ($root){//$has_scroll == 1 &&
$param = array(
'sex'=>$sex,
'city'=>$city,
'cate_id'=>$cate_id,
'is_vod'=>$is_vod,
'video_type'=>$root['video_type'],
'sort_num'=>$root['sort_num']
);
$root['room_id'] = $room_id;
//$video_list = get_rand_video($type,2,$user_id);
$video_list = get_rand_video($room_id,$user_id,$type,$param);
$video_previous = $video_list[0];
if (!$video_previous){
$video_previous = $root;
}
$video_next = $video_list[1];
if (!$video_next){
$video_next = $root;
}
}
}
if ($root['id']){
$root['init_version'] = intval($m_config['init_version']);//手机端配置版本号
//获得当前用户资料
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_info = $user_redis->getRow_db($user_id,array('id','user_level','is_robot','is_authentication','luck_num','mobile'));
//live_in 0:结束;1:正在直播;2:创建中;3:回看
if (($root['live_in'] == 1 && $is_vod == 0) || ($user_id == $root['user_id'] && $is_vod == 0) || (($root['live_in'] == 3 || $root['live_in'] == 0) && $is_vod == 1)){
//'video_vid','is_del_vod','is_delete','video_type','play_url','group_id','room_type','private_key'
$root['room_id'] = $room_id;
$root['podcast'] = getuserinfo($user_id,$root['user_id'],$root['user_id']);
$root['podcast']['user']['nick_name'] = emoji_decode($root['podcast']['user']['nick_name']);
$root['luck_num'] = $root['podcast']['user']['luck_num'];
if(empty($root['room_title'])){
$root['room_title']=$root['podcast']['user']['room_title'];
}
if ($video_previous){
$podcast_previous = array();
$podcast_previous['room_id'] = $video_previous['room_id'];
$video_previous['thumb_head_image'] = $video_previous['thumb_head_image']!=''?$video_previous['thumb_head_image']:$video_previous['head_image'];
$podcast_previous['head_image'] = get_spec_image($video_previous['thumb_head_image']);
$root['podcast_previous'] = $podcast_previous;
}
if ($video_next){
$podcast_next = array();
$podcast_next['room_id'] = $video_next['room_id'];
$video_next['thumb_head_image'] = $video_next['thumb_head_image']!=''?$video_next['thumb_head_image']:$video_next['head_image'];
$podcast_next['head_image'] = get_spec_image($video_next['thumb_head_image']);
$root['podcast_next'] = $podcast_next;
}
$user_level = intval($user_info['user_level']);
if ($user_level == 0) $user_level = 1;
$sort_num = $user_level*$user_redis->gz_level_weight;
if($user_info['is_robot']==0){
$sort_num+= $user_redis->gz_real_weight;
}
if($user_info['is_authentication']==2){
$sort_num+= $user_redis->gz_rz_weight;
}
//观众列表的排序权重
$root['sort_num'] = $sort_num;
//live_in 0:结束;1:正在直播;2:创建中;3:回看
if (($root['live_in'] == 3 || $root['live_in'] == 0) && $is_vod == 1){
//录制地址不能为空,且录制文件没有被删除
if ($root['is_del_vod'] == 0){
$file_info = load_auto_cache('video_file', array(
'id' => $root['room_id'],
'video_type' => $root['video_type'],
'channelid' => $root['channelid'],
'begin_time' => $root['begin_time'],
'create_time' => $root['create_time'],
));
if($file_info['play_url']){
$root['play_url'] = $file_info['play_url'];
}else{
$root['play_url'] = get_spec_image($root['play_url']);
}
$root['urls'] = $file_info['urls'];
}
if($root['user_id'] == $user_id){
$root['is_live_pay'] = 0;
}
//$root['video_type'] = 1;
//$root['play_url'] = 'rtmp://2811.liveplay.myqcloud.com/live/2811_b540dc105a3311e6a2cba4dcbef5e35a';
//http://2811.liveplay.myqcloud.com/live/2811_b540dc105a3311e6a2cba4dcbef5e35a.flv
$root['has_video_control'] = 1;//点播时,视频控制操作
$root['has_lianmai'] = 0;//1:显示连麦按钮;0:不显示连麦按钮
}else{
if (($root['video_type'] == 1 && $m_config['qcloud_security_key'] == '')|| $root['video_type'] == 2 || $root['video_type'] == 5){
//非直播码方式,不让连麦
$root['has_lianmai'] = 0;//1:显示连麦按钮;0:不显示连麦按钮
}else{
//会员允许等级
if ($m_config['has_lianmai_lv'] <= $user_level){
$root['has_lianmai'] = 1;//1:显示连麦按钮;0:不显示连麦按钮
}else{
$root['has_lianmai'] = 0;//1:显示连麦按钮;0:不显示连麦按钮
}
}
}
//$root['video_type'] = 0;//0:腾讯云互动直播;1:腾讯云直播
//$root['play_url'] = '';//video_type=1;1:腾讯云直播播放地址(rmtp,flv)
if ($user_id != $root['user_id']){
//非主播,不返回:推流地址
$root['push_url'] = '';//video_type=1;1:腾讯云直播推流地址
}
//print_r($root['podcast']);exit;
//印票贡献榜 http://ilvb.fanwe.net/index.php?ctl=user&act=contribution&user_id=1
//$root['cont_url'] = SITE_DOMAIN.APP_ROOT.'/index.php?ctl=user&act=contribution&user_id='.$root['user_id'];
$share = array();
$share['share_title'] = strim($m_config['share_title']);//'你丑你先睡,我美我直播!';
$share['share_imageUrl'] = $root['podcast']['user']['head_image'];
$share['share_key'] = $root['room_id'];
$share['share_url'] = SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=share&act=live&user_id='.$root['user_id'].'&video_id='.$root['room_id'].'&share_id='.$user_id;
$share['share_content'] = $share['share_title'].$root['podcast']['user']['nick_name'].'正在直播,快来一起看~';
$root['share'] = $share;
$root['status'] = 1;
//$sql = "select count(*) from ".DB_PREFIX."video_viewer where group_id = '".$root['group_id']."'";
//$sql = "select count(*) from ".DB_PREFIX."user";
//当前房间人数 = 当前实时观看人数(实际,不含虚拟人数,不包含机器人) + 当前虚拟观看人数 + 机器人
//$root['viewer_num'] = $root['watch_number'] + $root['virtual_watch_number'] + $root['robot_num'];
//观众列表
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoViewerRedisService.php');
$video_viewer_redis = new VideoViewerRedisService();
$viewer = $video_viewer_redis->get_viewer_list2($room_id,1,10);
$root['viewer'] = $viewer;
$root['viewer_num'] = $viewer['watch_number'];
//$root['viewer_num'] = $video_redis->get_video_watch_num($room_id);
if ($root['room_type'] == 1){
$root['is_private'] = 1;
if ($root['is_bm'] == 1) {
$root['is_private'] = 0;
}
/*
$sql = "select user_id from ".DB_PREFIX."user_admin where podcast_id = ".$root['user_id'];
$user_admin_list = $GLOBALS['db']->getAll($sql,true,true);
$user_admin_list = array_column($user_admin_list,'user_id');
//主播自己或管理员 // || $root['podcast']['show_admin'] == 2
if (in_array($user_id,$user_admin_list) || ($user_id == $root['user_id'])){
$private_share = "复制整段信息,打开[".strim($m_config['app_name'])."]可直接看直播,".$root['podcast']['user']['nick_name']."正在".$root['city']."直播";
$private_share = $private_share.base64_decode("8J+UkQ==").$root['private_key'].base64_decode("8J+UkQ==")."还没安装".strim($m_config['app_name'])."?点此安装,".SITE_DOMAIN."/appdown.php";
$root['private_share'] = $private_share;//print_r($root['podcast'],1);
}
*/
$sql = "select id from ".DB_PREFIX."user_admin where podcast_id = ".$root['user_id']." and user_id=".$user_id;
$user_admin_id = intval($GLOBALS['db']->getOne($sql,true,true));
//主播自己或管理员 // || $root['podcast']['show_admin'] == 2
if ($user_admin_id > 0 || ($user_id == $root['user_id'])){
$private_share = "复制整段信息,打开[".strim($m_config['app_name'])."]可直接看直播,".$root['podcast']['user']['nick_name']."正在".$root['city']."直播";
$private_share = $private_share.base64_decode("8J+UkQ==").$root['private_key'].base64_decode("8J+UkQ==")."还没安装".strim($m_config['app_name'])."?点此安装,".SITE_DOMAIN_DOWNLOAD."/appdown.php";
$root['private_share'] = $private_share;//print_r($root['podcast'],1);
}
if ($root['is_bm'] == 1) {
}else{
$root['private_key'] = '';
}
}else{
$root['is_private'] = 0;
}
//进入房间提示 1、提示进入房间 0、 不提示
$join_room_remind_limit = intval($m_config['join_room_remind_limit']);
$root['join_room_prompt'] = 1;
if($join_room_remind_limit>0&&$root['viewer_num']>$join_room_remind_limit){
$root['join_room_prompt'] = 0;//
}
$root['is_live_pay'] = intval($is_live_pay);//
$root['live_pay_type'] = intval($live_pay_type);//
$root['live_fee'] = intval($live_fee);//
$root['is_pay_over'] = intval($is_pay_over);//
$root['is_vip'] = intval($is_vip);//是否VIP会员
//进入房间人数上限 join_room_limit
$join_room_limit = intval($m_config['join_room_limit']);
if($join_room_limit>0&&$root['viewer_num']>=$join_room_limit&&$root['user_id']!=$user_id){
$root = array();
$root['error'] = "直播间达到人数上限,无法进入!";
$root['status'] = 0;
}
$root['video_title'] = '直播Live';
if($root['live_in']==3&&intval($root['is_gather'])!=1){
$root['video_title'] = '精彩回放';
}else if($root['live_in']==3&&intval($root['is_gather'])==1){
$root['video_title'] = '直播Live';
}
}else{
if ($is_vod == 0){
$show_num = $root['max_watch_number'];//观看人数
$podcast_id = $root['user_id'];
$live_in = $root['live_in'];
$root = array();
//关注
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
$userfollw_redis = new UserFollwRedisService($user_id);
if ($userfollw_redis->is_following($podcast_id)){
$root['has_focus'] = 1;//0:未关注;1:已关注
}else{
$root['has_focus'] = 0;
}
$root['live_in'] = $live_in;
$root['show_num'] = $show_num;
$root['status'] = 2;//提示直播结束;
//=========================================================
//广播:直播结束
//发送广播:直播结束
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ext = array();
$ext['type'] = 18; //18:直播结束(全体推送的,用于更新用户列表状态)
$ext['room_id'] = $room_id;//直播ID 也是room_id;只有与当前房间相同时,收到消息才响应
//18:直播结束(全体推送的,用于更新用户列表状态)
$api->group_send_group_system_notification($m_config['on_line_group_id'],json_encode($ext),null);
//=========================================================
//$video_redis->update_db($room_id,array('live_in'=>1));
//较验数据
crontab_do_end_video();
crontab_do_end_video_2();
//
}else{
$root = array();
$root['error'] = "直播已结束".$room_id;
$root['status'] = 0;
}
}
}else{
$root = array();
$root['error'] = "未发现有效的直播房间".$room_id;
$root['status'] = 0;
}
return $root;
}
//检查主播是否直播中
function is_live($data, $live_list)
{
foreach ($data as $k => $v) {
foreach ($live_list as $kk => $vv) {
if ($vv['user_id'] == $v['user_id']) {
$data[$k]['live_in'] = $vv['live_in'];
$data[$k]['video_url'] = get_video_url($vv['room_id'], $vv['live_in']);
break;
}
}
if(empty($data[$k]['video_url']))
{
$data[$k]['video_url'] = url('live#show', array('podcast_id' => $v['user_id']));
}
$data[$k]['user_level_ico'] = get_spec_image("./public/images/rank/rank_" . $v['user_level'] . ".png");
}
return $data;
}
//获取直播列表
function get_live()
{
$sql = "SELECT v.id AS room_id, v.sort_num, v.group_id, v.user_id, v.city, v.title, v.cate_id, v.live_in, v.video_type, v.room_type,
(v.robot_num + v.virtual_watch_number + v.watch_number) as watch_number, v.head_image,v.thumb_head_image, v.xpoint,v.ypoint,v.live_image,
u.v_type, u.v_icon, u.nick_name,u.user_level FROM " . DB_PREFIX . "video v
LEFT JOIN " . DB_PREFIX . "user u ON u.id = v.user_id where v.live_in in (1,3) order by v.live_in, v.sort_num desc,v.sort desc";
$live_list = $GLOBALS['db']->getAll($sql, true, true);
return $live_list;
}
/**
* //随机从type类型的直播列表中,取$num个直播ID; type: 0:热门;1:最新;2:关注
* 不会列出私聊房间
* @param int $type
* @param int $num
* @param string $user_id 当$type=2时生效;
*/
/*function get_rand_video($type,$num,$user_id){
if ($type == 1){
//1:最新 半小时内
$sql = "select id as room_id,user_id,group_id,live_in,watch_number,robot_num,virtual_watch_number,room_type from ".DB_PREFIX."video WHERE room_type = 3 and live_in = 1 and is_new = 1 and begin_time > ".(NOW_TIME - 1800)." order by rand() LIMIT ".$num;
}else if ($type == 2){
//2:关注
$sql = "select v.id as room_id,v.user_id,v.group_id,v.live_in,v.watch_number,v.robot_num,v.virtual_watch_number,v.room_type from ".DB_PREFIX."video v "
."LEFT JOIN ".DB_PREFIX."focus f on f.podcast_id = v.user_id "
."WHERE v.room_type = 3 and v.live_in = 1 and f.user_id = '".$user_id."' order by rand() LIMIT ".$num;
}else{
//热门
$sql = "select id as room_id,user_id,group_id,live_in,watch_number,robot_num,virtual_watch_number,room_type from ".DB_PREFIX."video WHERE room_type = 3 and live_in = 1 and is_hot = 1 order by rand() LIMIT ".$num;
}
//随机获得2个(一个当前使用的,一个上下滚动时备用);
$video_list = $GLOBALS['db']->getAll($sql);
return $video_list;
}*/
function get_rand_video($room_id,$user_id,$type,$param, $num = 2){
/*
$type = intval($_REQUEST['type']);//type: 0:热门;1:最新;2:关注 [当room_id=0时有效,随机返回一个type类型下的直播]
$param = array(
'sex'=>$sex,
'city'=>$city,
'cate_id'=>$cate_id,
'type'=>$type,
'room_id'=>$room_id,
'is_vod'=>$is_vod,
'video_type'=>$root['video_type'],
'sort_num'=>$root['sort_num']
);
*/
$ret_list = array();
$is_vod = intval($param['is_vod']);
if ($is_vod == 0){
if ($type == 2){
//关注
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
$userfollw_redis = new UserFollwRedisService($user_id);
$user_list = $userfollw_redis->following();
//私密直播 video_private,私密直播结束后, 本表会清空
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoPrivateRedisService.php');
$video_private_redis = new VideoPrivateRedisService();
$private_list = $video_private_redis->get_video_list($user_id);
if(sizeof($private_list) || sizeof($user_list)){
$list_all = load_auto_cache("select_video",array('has_private'=>1));
foreach($list_all as $k=>$v){
if (($v['live_in'] == 1) && ($v['room_id'] != $room_id) && (($v['room_type'] == 1 && in_array($v['room_id'], $private_list)) || ($v['room_type'] == 3 && in_array($v['user_id'], $user_list)))) {
$list[] = $v;
}
}
}
}else{
$list_all = load_auto_cache("select_video",array('sex_type'=>intval($param['sex']),'area_type'=>$param['city'],'cate_id'=>intval($param['cate_id']),'has_private'=>0));
foreach($list_all as $k=>$v){
if (($v['live_in'] == 1) && ($v['room_id'] != $room_id)&&$v['user_id']!=$user_id) {
$list[] = $v;
}
}
}
if (count($list) <= $num){
$ret_list = $list;
}else{
foreach(array_rand($list, $num) as $key){
$ret_list[] = $list[$key];
}
}
}
return $ret_list;
}
/*
function get_rand_video($room_id,$num,$param){
$list = array();
$type = $param['type'];
$sql = "SELECT v.id, v.group_id, v.user_id, v.city, v.title, v.cate_id, v.live_in, v.video_type, v.room_type,
(v.robot_num + v.virtual_watch_number + v.watch_number) as watch_number
FROM ".DB_PREFIX."video v where v.live_in=1 and v.id<>".$room_id;
if ($param['cate_name']) {
$cate_name = $param['cate_name'];
$sql .= " and v.room_type=3 and v.title='" . $cate_name . "' ";
$sql.= " order by rand() LIMIT ".$num;
$list = $GLOBALS['db']->getAll($sql);
} elseif ($type == 0) {
$sex = intval($param['sex']);
$city = strim($param['city']);
if($city=='热门' || $city=='null'){
$city = '';
}
if ($sex == 1 || $sex == 2){
$sql .= ' and v.sex = '.$sex;
}
if ($city != ''){
$sql .= " and v.province = '".$city."'";
}
$sql.=" and v.room_type=3 ";
$sql.= " order by rand() LIMIT ".$num;
$list = $GLOBALS['db']->getAll($sql);
}elseif ($type == 1) {
$sql .= " and v.room_type=3 ";
$sql.= " order by rand() LIMIT ".$num;
$list = $GLOBALS['db']->getAll($sql);
} elseif ($type == 2) {
$user_id = intval($GLOBALS['user_info']['id']);//登录用户id
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
$userfollw_redis = new UserFollwRedisService($user_id);
$user_list = $userfollw_redis->following();
//私密直播 video_private,私密直播结束后, 本表会清空
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoPrivateRedisService.php');
$video_private_redis = new VideoPrivateRedisService();
$private_list = $video_private_redis->get_video_list($user_id);
if(sizeof($private_list) || sizeof($user_list)){
$sql.=" and v.room_type in (1,3) order by rand() ";
$list_all = $GLOBALS['db']->getAll($sql);
$count = 0;
foreach($list_all as $k=>$v){
if($count==$num){
break;
}
if (($v['room_type'] == 1 && in_array($v['id'], $private_list)) || ($v['room_type'] == 3 && in_array($v['user_id'], $user_list))) {
$list[] = $v;
$count ++;
}
}
}
}
return $list;
}
*/
//格式化时间单位(多少时间前)
function format_show_date($time){
$t=NOW_TIME-$time;
$f=array(
'31536000'=>'年',
'2592000'=>'个月',
'604800'=>'星期',
'86400'=>'天',
'3600'=>'小时',
'60'=>'分钟',
'1'=>'秒'
);
foreach ($f as $k=>$v) {
if (0 !=$c=floor($t/(int)$k)) {
return $c.$v.'前';
}
}
}
//获得回放视频的时长(多少小时/多少分钟)
function get_time_len($begin_time,$end_time){
$time =$end_time - $begin_time;
$palyback = '';
if($time/3600>1){
$palyback.=intval($time/3600).'小时';
$time = $time%3600;
}
if($time/60>1){
$palyback.=intval($time/60).'分钟';
}
return $palyback;
}
//格式化时间长度单位 (小时/分钟)
function get_live_time_len($time){
$total_time_format = '';
if($time/3600>=1){
$total_time_format.=intval($time/3600).'小时';
$time = $time%3600;
}
if($time/60>=1){
$total_time_format.=intval($time/60).'分钟';
}
return $total_time_format;
}
//格式化时间长度单位(天/小时/分钟)2017-8-9 10:40:18新增
function get_live_time_len2($time){
$total_time_format = '';
if($time/86400>=1){
$total_time_format.=intval($time/86400).'天';
$time = $time%86400;
}
if($time/3600>=1){
$total_time_format.=intval($time/3600).'小时';
$time = $time%3600;
}
if($time/60>=1){
$total_time_format.=intval($time/60).'分钟';
}
return $total_time_format;
}
function crontab_do_check_pc_video()
{
$ret_array = array();
$m_config = load_auto_cache("m_config");
$monitor_overtime = $m_config['monitor_overtime'];
if ($monitor_overtime <= 0) $monitor_overtime = 40;
$ret_array = array();
//监听主播掉线(30秒一次监听,如果超过180秒未收到心跳消息,则说明:主播掉线 了
$t = to_date(NOW_TIME - $monitor_overtime, 'Y-m-d H:i:s');
$sql = "select id,user_id,watch_number,vote_number,group_id,room_type,video_type,begin_time,end_time,channelid,video_vid,live_in,cate_id,pai_id from " . DB_PREFIX . "video where live_in = 2 and create_type = 1 and monitor_time > '" . $t . "'";
$list = $GLOBALS['db']->getAll($sql, true, true);
fanwe_require(APP_ROOT_PATH . 'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
foreach ($list as $v) {
fanwe_require(APP_ROOT_PATH . 'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
if ($v['channelid']) {
$channel_info = $video_factory->Query($v['channelid']);
$ret_array[] = $channel_info;
// 正在直播,继续监听
if ($channel_info['status'] == 1) {
$data = array('live_in' => 1, 'begin_time' => NOW_TIME);
$GLOBALS['db']->autoExecute(DB_PREFIX . "video", $data, 'UPDATE', " id=" . $v['id']);
if ($GLOBALS['db']->affected_rows()) {
$room_id = $v['id'];
$sql = "select user_id,room_type,title,city,cate_id from " . DB_PREFIX . "video where id = " . $room_id;
$video = $GLOBALS['db']->getRow($sql);
$video_redis->video_online($room_id, $v['group_id']);
//将mysql数据,同步一份到redis中
sync_video_to_redis($room_id, '*', false);
if ($video['cate_id'] > 0) {
$sql = "update " . DB_PREFIX . "video_cate a set a.num = (select count(*) from " . DB_PREFIX . "video b where b.cate_id = a.id and b.live_in in (1,3)) where a.id = " . $video['cate_id'];
$GLOBALS['db']->query($sql);
}
if ($video['room_type'] == 3) {
crontab_robot($room_id);
}
fanwe_require(APP_ROOT_PATH . 'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_data = $user_redis->getRow_db($v['user_id'], array('id', 'nick_name', 'head_image'));
$pushdata = array(
'user_id' => $v['user_id'], //'主播ID',
'nick_name' => $user_data['nick_name'],//'主播昵称',
'create_time' => NOW_TIME, //'创建时间',
'cate_title' => $video['title'],// '直播主题',
'room_id' => $room_id,// '房间ID',
'city' => $video['city'],// '直播城市地址',
'head_image' => get_spec_image($user_data['head_image']),
'status' => 0,//'推送状态(0:未推送,1:推送中;2:已推送)'
);
$m_config = load_auto_cache("m_config");
if (intval($m_config['service_push'])) {
$pushdata['pust_type'] = 1; //'推送状态(0:粉丝推送,1:全服推送)';
} else {
$pushdata['pust_type'] = 0; //'推送状态(0:粉丝推送,1:全服推送)';
}
$GLOBALS['db']->autoExecute(DB_PREFIX . "push_anchor", $pushdata, 'INSERT');
}
}
}
}
return $ret_array;
}
function crontab_do_check_upload_video($create_type = 1)
{
$create_type = intval($create_type)?intval($create_type):0;
$ret_array = array();
$sql = "select id,video_vid,live_in,group_id from " . DB_PREFIX . "video_history where live_in = 2 and create_type = " .$create_type;
$list = $GLOBALS['db']->getAll($sql, true, true);
if($list){
fanwe_require(APP_ROOT_PATH . 'mapi/lib/redis/VideoRedisService.php');
fanwe_require(APP_ROOT_PATH . 'mapi/lib/core/video_factory.php');
$video_redis = new VideoRedisService();
$video_factory = new VideoFactory();
foreach ($list as $v) {
// 用户上传的视频轮询取得播放地址
$ret = $video_factory->DescribeVodPlayUrls($v['video_vid']);
if(empty($ret['urls'])){
continue;
}
$play_url = array_shift($ret['urls']);
$data = array('live_in' => 0, 'is_del_vod' => 0, 'play_url' => $play_url, 'end_time' => NOW_TIME);
$GLOBALS['db']->autoExecute(DB_PREFIX . "video_history", $data, 'UPDATE', " id=" . $v['id']);
$video_redis->update_db($v['id'], $data);
$video_redis->video_online($v['id'], $v['group_id']);
$ret_array[] = $data;
}
}
return $ret_array;
}
function crontab_do_end_video(){
try {
$m_config = load_auto_cache("m_config");
$monitor_overtime = $m_config['monitor_overtime'];
if ($monitor_overtime <= 0) $monitor_overtime = 40;
$ret_array = array();
//监听主播掉线(30秒一次监听,如果超过180秒未收到心跳消息,则说明:主播掉线 了
$t = to_date(NOW_TIME - $monitor_overtime,'Y-m-d H:i:s');
$sql = "select id,user_id,watch_number,vote_number,group_id,room_type,video_type,begin_time,end_time,channelid,video_vid,live_in,cate_id,pai_id from ".DB_PREFIX."video where (live_in = 1 or live_in = 2) and monitor_time < '".$t."'";
if (OPEN_BM == 1) {
$t1 = to_date(NOW_TIME - 43200,'Y-m-d H:i:s');
$sql = "select id,user_id,watch_number,vote_number,group_id,room_type,video_type,begin_time,end_time,channelid,video_vid,live_in,cate_id,pai_id from ".DB_PREFIX."video where (live_in = 1 or live_in = 2) and (is_bm=0 and monitor_time < '".$t."') or (is_bm=1 and monitor_time < '".$t1."') ";
}
$list = $GLOBALS['db']->getAll($sql,true,true);
foreach ( $list as $k => $v )
{
if($v['video_type'] > 0){
//0:腾讯云互动直播;1:腾讯云直播;2:方维云直播
fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
$channel_info = $video_factory->Query($v['channelid']);
// 正在直播,继续监听
if($channel_info['status'] == 1){
continue;
}
}
//子房间过滤
if(defined('CHILD_ROOM') && CHILD_ROOM == 1){
$parent_id = $GLOBALS['db']->getOne("SELECT parent_id FROM " . DB_PREFIX . "child_room WHERE child_id = {$v['id']} and is_delete = 0");
if($parent_id){
if($GLOBALS['db']->getOne("select live_in from fanwe_video where id = " . $parent_id)) {
continue;
}
}
}
//结束直播
if ($v['live_in'] == 1){
$cate_id = $v['cate_id'];
}else{
$cate_id = 0;
}
$system_user_id =$m_config['tim_identifier'];//系统消息
$ext = array();
$ext['type'] = 17;
$ext['desc'] = '网络不佳,已结束直播';
$ext['room_id'] = $v['id'];
#构造高级接口所需参数
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
// 'Ext' => $ext,
// 'Sound' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$group_info = $api->group_get_group_member_info($v['group_id'],0,0);
if($group_info['MemberList']){
$to = array_column($group_info['MemberList'],"Member_Account");
}
$exceed = 500; //一次最多发送500条
if(sizeof($to)>$exceed){
$num = ceil(sizeof($to)/$exceed);
for($i=0;$i<$num;$i++){
$to_account = array_slice($to,$i*$exceed,$exceed);
$api->openim_batchsendmsg($system_user_id, $msg_content,$to_account);
}
}else{
$api->openim_batchsendmsg($system_user_id, $msg_content,$to);
}
$ret = do_end_video($v,$v['video_vid'],1,$cate_id);
$ret['func']='do_end_video';
$ret_array[]=$ret;
}
/*
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$list = $video_redis->get_off_video_monitor_time($monitor_overtime);
foreach ( $list as $k => $v )
{
$video_data = $video_redis->getRow_db($v);
$ret_array[]=redis_do_end_video($video_redis,$video_data,$video_data['video_vid'],1,$video_data['cate_id']);
}
*/
return $ret_array;
} catch (Exception $e) {
return $e->getMessage();
}
}
function crontab_do_end_video_2(){
try {
$ret_array = array();
// 结束直播5分钟后,
$sql = "select id,is_del_vod,video_type,channelid,begin_time,create_time,end_time,user_id,vote_number,destroy_group_status,group_id from ".DB_PREFIX."video where end_time < ".(NOW_TIME - 300)." and live_in = 0 limit 10";
$list = $GLOBALS['db']->getAll($sql);
if ($list){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
foreach ( $list as $k => $v )
{
//1:表示已经清空了,录制视频;0:未做清空操作
if ($v['is_del_vod'] == 1){
fanwe_require(APP_ROOT_PATH.'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
/*if($v['video_type'] > 0 && $v['channelid']&& strpos($v['channelid'],'_')){
$ret = $video_factory->GetVodRecordFiles($v['channelid'], $v['create_time']);
} else {
$fileName = $v['id'];
if($v['video_type'] == 1){
$fileName = 'live'.$v['id'] ;
}
$ret = $video_factory->DescribeVodPlayInfo($fileName);
}*/
$ret = get_vodset_by_video_id($v['id']);
/*if ($ret['totalCount'] > 0){*/
if ($ret['total_count'] > 0){
//视频存在
$sql = "update ".DB_PREFIX."video set is_del_vod = 0 where id = ".$v['id'];
$GLOBALS['db']->query($sql);
$v['is_del_vod'] = 0;
$data = array();
$data['is_del_vod'] = 0;
$video_redis->update_db($v['id'], $data);
}
}
//直播结束 后相关数据处理(在后台定时执行)
//1、解散群组
if ($v['destroy_group_status'] == 1 && $v['is_del_vod'] == 1){
if ($v['group_id'] != ''){
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_destroy_group($v['group_id']);
//删除:观众列表
$video_redis->del_viewer($v['id']);
$sql = "update ".DB_PREFIX."video set destroy_group_status = '".$ret['ErrorCode']."' where id = ".$v['id'];
$GLOBALS['db']->query($sql);
}else{
$sql = "update ".DB_PREFIX."video set destroy_group_status = 0 where id = ".$v['id'];
$GLOBALS['db']->query($sql);
}
}
//2、结束 旁边直播
/*
*旁边直播,在客户端做结束操作;如果客户端异常退出而没有结束时,腾讯云在10分钟后也会自动结束并清空
if ($v['channelid']){
//停止直播
fanwe_require(APP_ROOT_PATH.'system/QcloudApi/QcloudApi.php');
$m_config = load_auto_cache("m_config");
$config = array('SecretId' => $m_config['qcloud_secret_id'],
'SecretKey' => $m_config['qcloud_secret_key'],
'RequestMethod' => 'GET',
'DefaultRegion' => 'gz');
$service = QcloudApi::load(QcloudApi::MODULE_LIVE, $config);
$package = array('channelIds.1' => $v['channelid']);
$a = $service->StopLVBChannel($package);
$stop_channel = 0;
if ($a === false) {
$error = $service->getError();
$stop_channel = $error->getCode();
}else{
$stop_channel = 1;
}
$sql = "update ".DB_PREFIX."video set stop_channel = '".$stop_channel."' where id = ".$v['id'];
$GLOBALS['db']->query($sql);
}
*/
$ret = do_end_video_2($video_redis,$api,$v['id']);
$ret['func']='do_end_video_2';
$ret_array[]=$ret;
}
}
return $ret_array;
} catch (Exception $e) {
return $e->getMessage();
}
}
/**
* 添加机器人,每隔几秒随机添加几个人
*/
function crontab_robot($video_id=0){
if ($video_id == 0){
$sql = "SELECT id,group_id,robot_num,max_robot_num FROM ".DB_PREFIX."video where robot_num < max_robot_num and live_in in (1,3) and room_type = 3 and robot_time < ".(NOW_TIME - rand(20,30));
}else{
$sql = "SELECT id,group_id,robot_num,max_robot_num FROM ".DB_PREFIX."video where robot_num < max_robot_num and live_in in (1,3) and room_type = 3 and id = ".$video_id;
}
$list = $GLOBALS['db']->getAll($sql,true,true);
if (count($list) > 0){
$m_config = load_auto_cache("m_config");//初始化手机端配置
$max_num = $m_config['robot_num'];
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoViewerRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video_viewer = new VideoViewerRedisService();
}
foreach ( $list as $k => $v )
{
//添加机器人
$robot_num = $v['robot_num'];
$max_robot_num = $v['max_robot_num']?$v['max_robot_num']:$max_num;
$video_id = $v['id'];
if($robot_num<$max_robot_num){
$rand_num = rand(6,10);
$robot_keys = $video_viewer->redis->srandmember($video_viewer->user_robot_db,$rand_num);
$user_array = array();
foreach($robot_keys as $user_id){
$user_array[$user_id]['user_level'] = $video_viewer->redis->hGet($video_viewer->user_db.$user_id,'user_level');
}
//新入群成员列表
foreach ( $robot_keys as $k=>$user_id ){
$begin_time = get_gmtime() ;
if($video_viewer->redis->zScore($video_viewer->video_viewer_level_db.$video_id, $user_id) === false){
//实际观众数统计:累计观众列表和; [score 为负数是:机器人; 正数是:真实观众] $user_array[$user_id]['user_level']
$video_viewer->redis->zAdd($video_viewer->video_viewer_level_db.$video_id, -1,$user_id);
$video_viewer->redis->hIncrBy($video_viewer->video_db.$video_id,'robot_num',1);
$video_viewer->redis->hIncrBy($video_viewer->video_db.$video_id,'max_watch_number',1);
//记录直播间的机器人头像 去除:直播间机器人独立列表 score 为负数是:机器人
//$video_redis->add_robot($video_id, $user_id);
}
}
$video = $video_redis->getRow_db($video_id,array('robot_num'));
$robot_num = intval($video['robot_num']);
if ($robot_num > 0){
$sql = "update ".DB_PREFIX."video set robot_num = ".$robot_num.",robot_time=".NOW_TIME." where id = ".$video_id;
$GLOBALS['db']->query($sql);
}
}
}
}
//获取一个新的房间号,同时记录分配给那个系统使用;
function get_max_room_id($sysid=0){
$sql = "insert into ".DB_PREFIX."room_id (id,sysid) values(0,$sysid)";
$GLOBALS['db']->query($sql);
$room_id = $GLOBALS['db']->insert_id();
return $room_id;
}
/**
* IP地址查询接口(API)
*/
function get_ip_info(){
//http://www.hi-docs.com/Article/detail-Mzk=.html
fanwe_require(APP_ROOT_PATH .'mapi/lib/core/transport.php');
$trans = new transport();
//$url = 'http://ip.taobao.com/service/getIpInfo.php?ip='.CLIENT_IP;
//$url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.CLIENT_IP;
$url = 'http://ip.ws.126.net/ipquery?ip='.CLIENT_IP;
$req = $trans->request($url,array(),'GET');
//$req = json_decode($req['body'],true);
$req['body'] = mb_convert_encoding($req['body'], 'utf-8', 'gbk');
$b = substr($req['body'],strpos($req['body'],"{"),strpos($req['body'],"}"));
$req['city']= substr($b,strpos($b,"{city:")+7,strpos($b,"\",")-7);
$req['city'] = str_replace("市","",$req['city']);
$req['province']= substr($b,strpos($b,"province:")+10,-4);
$req['province'] = str_replace("省","",$req['province']);
/*
{
ret: 1,
start: -1,
end: -1,
country: "美国",
province: "加利福尼亚",
city: "Zenia",
district: "",
isp: "",
type: "",
desc: ""
}*/
$info = array();
$info['ip'] = CLIENT_IP;
$info['country'] = $req['country'];
$info['province'] = $req['province'];
$info['city'] = $req['city'];
$info['district'] = $req['district'];
return $info;
}
function get_ip_infos(){
fanwe_require(APP_ROOT_PATH .'mapi/lib/core/transport.php');
$trans = new transport();
$url = "https://dm-81.data.aliyun.com/rest/160601/ip/getIpInfo.json?ip=".CLIENT_IP;
$date =array();
$date['AppKey'] = '23489658';
$date['AppKeyAppSecret'] = '71d175d90329b580f989268f957f152a';
$req = $trans->request($url,$date,'GET');
return $req;
/*$req = json_decode($req['body'],true);
$info = array();
$info['ip'] = CLIENT_IP;
$info['country'] = $req['country'];
$info['province'] = $req['province'];
$info['city'] = $req['city'];
$info['district'] = $req['district'];
return $info;*/
}
/**
* 距离计算(API)
*/
function get_distance_order($from, $to){
// http://lbs.qq.com/webservice_v1/guide-distance.html
$m_config = load_auto_cache("m_config");
// test
if(!isset($m_config["qcloud_app_key"])){
$m_config["qcloud_app_key"] = "UNDBZ-KYNLX-LDS4K-ZBARP-VT37E-I2FCL";
}
$url = 'http://apis.map.qq.com/ws/distance/v1/?'.http_build_query(array(
"mode" => "walking",
"from" => $from,
"to" => implode(';', $to),
"output" => "json",
"key" => $m_config["qcloud_app_key"],
));
fanwe_require(APP_ROOT_PATH .'mapi/lib/core/transport.php');
$trans = new transport();
$response = $trans->request($url,array(),'GET');
$data = json_decode($response['body'],true);
if($data['status'] != 0){
return array();
}
return $data['result']['elements'];
}
/**
* 格式化时间
*/
function date_time_format(&$date_time){
$time=strtotime($date_time);
$ri=date('Y年m月d日 ',$time);
$zhou=date('N',$time);
if ($zhou==1) {
$zhou=" 周一 ";
}elseif ($zhou==2) {
$zhou=" 周二 ";
}if ($zhou==3) {
$zhou=" 周三 ";
}if ($zhou==4) {
$zhou=" 周四 ";
}if ($zhou==5) {
$zhou=" 周五 ";
}if ($zhou==6) {
$zhou=" 周六 ";
}if ($zhou==7) {
$zhou=" 周日 ";
}
$fen=date(' H时i分',$time);
$date_time=$ri.$zhou.$fen;
}
/*
* 在线人数进行整理
*/
function deal_online_cate_num(){
}
/**
* 通过 房间号 获取视频播放信息列表;注:在手机端开启录制时,要以房间号作为文件名;
* https://www.qcloud.com/doc/api/257/1373
* @param unknown_type $video_id
* @return Ambigous
*/
function get_vodset_by_video_id($video_id) {
$root = array();
$root['status'] = 1;
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video = $video_redis->getRow_db($video_id,array('id','channelid','begin_time','video_type'));
$fileName = $video_id.'_'.to_date($video['begin_time'],'Y-m-d-H');//互动直播 例如:2018376_2017-01-12-18-03-19
if($video['video_type']==1 && $video['channelid']){
$fileName = 'live'.$video_id.'_'.to_date($video['begin_time'],'Y-m-d-H');//云直播&频道托管 例如:live2018376_2017-01-12-18-03-19
if(strpos($video['channelid'],'_')){
$fileName = $video['channelid'];//云直播&直播码 例如:2811_311359b479_dd55c664b4acf27c5138
}
}
$ret = get_vodset_by_filename($fileName);
//兼容 云直播&直播码接入&点播前缀有live
if ($ret['status'] != 1){
if($video['video_type']==1 && $video['channelid']&&strpos($video['channelid'],'_')){
$fileName = 'live'.$video['channelid'];//例如:live6311_311359b479_dd55c664b4acf27c5138
}
$ret = get_vodset_by_filename($fileName);
}
$root['total_count'] = 0;
if ($ret['status'] == 1){
$root['vodset'][] = $ret['ret'];
$root['total_count'] = $ret['ret']['totalCount'];
}else{
$root['status'] = 0;
$root['error'] = $ret['error'];
}
return $root;
}
/**
* 通过 房间号 获取视频播fileIds列表
* https://www.qcloud.com/doc/api/257/1373
* @param unknown_type $video_id
*/
function get_vod_fileIds($video_id) {
$fileName = $video_id.'_';
$ret = get_vodset_by_filename($fileName);
$fileIds = array();
foreach ( $ret['fileSet'] as $k2 => $v2 )
{
$fileIds[] = $v2['fileId'];
}
return $fileIds;
}
/**
* 通过 视频名称(前缀匹配) 获取视频播放信息列表
* https://www.qcloud.com/doc/api/257/1373
* @param unknown_type $fileName
* @param unknown_type $page
* @return multitype:number string unknown
*/
function get_vodset_by_filename($fileName,$page =1,$page_size=20) {
$root = array();
$root['status'] = 1;
fanwe_require(APP_ROOT_PATH.'system/QcloudApi/QcloudApi.php');
$m_config = load_auto_cache("m_config");
$config = array('SecretId' => $m_config['qcloud_secret_id'],
'SecretKey' => $m_config['qcloud_secret_key'],
'RequestMethod' => 'GET',
'DefaultRegion' => 'gz');
$service = QcloudApi::load(QcloudApi::MODULE_VOD, $config);
if ($page == 0){
$page = 1;
}
$package = array('fileName' => $fileName,'pageNo'=>$page,'pageSize'=>$page_size);
$ret = $service->DescribeVodPlayInfo($package);
if ($ret === false) {
$error = $service->getError();
$root['status'] = 0;
$root['code'] = $error->getCode();
$root['error'] = "fileName:".$fileName.";code:".$error->getCode() .";msg:".$error->getMessage();
}else{
$root['ret'] = $ret;
}
$root['package'] = $ret;
return $root;
}
/**
* 每隔N秒,将在线直播redis计算的数据同步到mysql中
*/
function crontab_deal_num($s=5){
$is_ok = $GLOBALS['cache']->set_lock('crontab_deal_num',$s);
if($is_ok) {
$sql = "SELECT id FROM " . DB_PREFIX . "video";
$list = $GLOBALS['db']->getAll($sql, true, true);
if (count($list) > 0) {
fanwe_require(APP_ROOT_PATH . 'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
foreach ($list as $k => $v) {
$video_id = $v['id'];
//计算权重
$video_redis->syn_sort_num($video_id);
$fields = array('share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number');
$video = $video_redis->getRow_db($video_id, $fields);
$GLOBALS['db']->autoExecute(DB_PREFIX . "video", $video, "UPDATE", "id=" . $video_id);
}
}
}
}
/**
* 把数据库中的fanwe_video同步到redis上去
* @param int $video_id
* @param string $fields 需要同步的字段 * 表示所有
* @param bool $exinclude_calc;true 不含redis中的计算字段array('share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number')
*/
function sync_video_to_redis($video_id, $fields = '*', $exinclude_calc=true){
if ($fields == '') $fields = '*';
$sql = "select ".$fields." from ".DB_PREFIX."video where id = ".$video_id;
$video = $GLOBALS['db']->getRow($sql);
if ($video == false){
$sql = "select ".$fields." from ".DB_PREFIX."video_history where id = ".$video_id;
$video = $GLOBALS['db']->getRow($sql);
}
if ($exinclude_calc){
$calc_fields = array('share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number');
foreach ($video as $k => $v) {
if (in_array($k, $calc_fields)){
unset($video[$k]);
}
}
}
if ($fields == '*' && isset($video['vote_number'])){
unset($video['vote_number']);
}
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video_redis->update_db($video_id, $video);
}
/**
* 将发送礼物记录移到mysql数据库中
* $num:一次插入多少条数据; -1取出所有记录;
*
* 本函数实际上已经失效;发送礼物记录,发送时直接记录在fanwe_video_prop_ym表中了; 此时用来处理旧的redis中数据,同步到mysql中
*/
function sync_video_prop_to_mysql($num=-1){
$is_ok = $GLOBALS['cache']->set_lock('sync_video_prop_to_mysql',500);
if($is_ok) {
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoGiftRedisService.php');
$videoGift_redis = new VideoGiftRedisService();
//$list = $videoGift_redis->getAll($num);
if ($num == -1) $num = 10000;
$list = $videoGift_redis->getAll($num);
if (count($list) == 0)
$list = $videoGift_redis->getAll(-1);
foreach($list as $k=>$v){
$video_prop = json_decode($v,true);
$video_prop['create_y'] = to_date($video_prop['create_time'],'Y');
$video_prop['create_m'] = to_date($video_prop['create_time'],'m');
$video_prop['create_ym'] = to_date($video_prop['create_time'],'Ym');
$video_prop['create_d'] = to_date($video_prop['create_time'],'d');
$video_prop['create_w'] = to_date($video_prop['create_time'],'W');
//没做批量插入,主要是考虑支持重复执行
$GLOBALS['db']->autoExecute(DB_PREFIX."video_prop", $video_prop,"INSERT",'','SILENT');
if($GLOBALS['db']->affected_rows()){
$videoGift_redis->del_db($k);
}else{
$sql = "select id from ".DB_PREFIX."video_prop where id = ".$k;
if ($GLOBALS['db']->getOne($sql) > 0){
$videoGift_redis->del_db($k);
}
}
}
$GLOBALS['cache']->del_lock('sync_video_prop_to_mysql');
}
}
/**
* 删除指定文件[前缀搜索]
* @param unknown_type $fileName
* @return multitype:unknown
*/
function del_all_vod($fileName){
//$fileName = '_';
$ret = get_vodset_by_filename($fileName,1,80);
//print_r($ret);
//$fileIds = array();
fanwe_require(APP_ROOT_PATH.'system/QcloudApi/QcloudApi.php');
$m_config = load_auto_cache("m_config");
$config = array('SecretId' => $m_config['qcloud_secret_id'],
'SecretKey' => $m_config['qcloud_secret_key'],
'RequestMethod' => 'GET',
'DefaultRegion' => 'gz');
$service = QcloudApi::load(QcloudApi::MODULE_VOD, $config);
foreach ( $ret['ret']['fileSet'] as $k2 => $v2 )
{
$package = array('fileId' => $v2['fileId'],'priority'=>0);
$ret2 = $service->DeleteVodFile($package);
$ret[$v2['fileId']] = $ret2;
}
//print_r($fileIds);
return $ret;
}
/**
* 历史直播:上架/下架
* 上架: 将fanwe_video_history 表数据,移到fanwe_video 后,删除fanwe_video_history记录
* 下架: 将fanwe_video 表数据,移到fanwe_video_history 后,删除fanwe_video记录
* @param unknown_type $video_id
* @param unknown_type $status; 0:上架;1:下架;
*/
function video_status($video_id,$status){
$pInTrans = $GLOBALS['db']->StartTrans();
try
{
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
if($status == 0){
//历史直播:上架
$sql = "update ".DB_PREFIX."video_history set live_in = 3 where live_in = 0 and id = ".$video_id;
$GLOBALS['db']->query($sql);
if($GLOBALS['db']->affected_rows()){
$sql = "select * from ".DB_PREFIX."video_history where id = ".$video_id;
$video = $GLOBALS['db']->getRow($sql);
$GLOBALS['db']->autoExecute(DB_PREFIX."video", $video,"INSERT");
//修改话题
if ($video['cate_id'] > 0){
$sql = "update ".DB_PREFIX."video_cate a set a.num = (select count(*) from ".DB_PREFIX."video b where b.cate_id = a.id and b.live_in in (1,3)";
$m_config = load_auto_cache("m_config");//初始化手机端配置
if((defined('OPEN_ROOM_HIDE')&&OPEN_ROOM_HIDE==1)&&intval($m_config['open_room_hide'])==1){
$sql.= " and b.province <> '火星' and b.province <>''";
}
$sql.=") where a.id = ".$video['cate_id'];
$GLOBALS['db']->query($sql);
}
$user_id = intval($video['user_id']);
$sql = "select sex,ticket,refund_ticket,user_level,fans_count from ".DB_PREFIX."user where id = ".$user_id;
$user = $GLOBALS['db']->getRow($sql,true,true);
$m_config = load_auto_cache("m_config");
//sort_init(初始排序权重) = (用户可提现印票:fanwe_user.ticket - fanwe_user.refund_ticket) * 保留印票权重+ 直播/回看[回看是:0; 直播:9000000000 直播,需要排在最上面 ]+ fanwe_user.user_level * 等级权重+ fanwe_user.fans_count * 当前有的关注数权重
$sort_init = (intval($user['ticket']) - intval($user['refund_ticket'])) * floatval($m_config['ticke_weight']);
$sort_init += intval($user['user_level']) * floatval($m_config['level_weight']);
$sort_init += intval($user['fans_count']) * floatval($m_config['focus_weight']);
$sql = "update ".DB_PREFIX."video set sort_init = ".$sort_init.",watch_number=0,robot_num=0 where id = ".$video_id;
$GLOBALS['db']->query($sql);
$sql = "delete from ".DB_PREFIX."video_history WHERE id=".$video_id;
$GLOBALS['db']->query($sql);
//将mysql数据,同步一份到redis中
sync_video_to_redis($video_id,'*',false);
//付费记录从历史表移到原记录表中
if(intval($video['is_live_pay'])==1){
syn_history_to_live_pay($video_id);
}
$video_redis->video_online($video_id, $video['group_id']);
}
}else{
//回看直播:下架
$sql = "update ".DB_PREFIX."video set live_in = 0 where live_in = 3 and id = ".$video_id;
$GLOBALS['db']->query($sql);
if($GLOBALS['db']->affected_rows()){
//下架后,将redis数据,同步一份到mysql
$fields = array('share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number','user_id');
$video = $video_redis->getRow_db($video_id, $fields);
$GLOBALS['db']->autoExecute(DB_PREFIX . "video", $video, "UPDATE", "id=" . $video_id);
//将数据历史表中
$sql = "select * from ".DB_PREFIX."video where id = ".$video_id;
$video = $GLOBALS['db']->getRow($sql);
$GLOBALS['db']->autoExecute(DB_PREFIX."video_history", $video,"INSERT");
//修改话题
if ($video['cate_id'] > 0){
$sql = "update ".DB_PREFIX."video_cate a set a.num = (select count(*) from ".DB_PREFIX."video b where b.cate_id = a.id and b.live_in in (1,3)";
$m_config = load_auto_cache("m_config");//初始化手机端配置
if((defined('OPEN_ROOM_HIDE')&&OPEN_ROOM_HIDE==1)&&intval($m_config['open_room_hide'])==1){
$sql.= " and b.province <> '火星' and b.province <>''";
}
$sql.=") where a.id = ".$video['cate_id'];
$GLOBALS['db']->query($sql);
}
//将mysql数据,同步一份到redis中
sync_video_to_redis($video_id,'*',false);
//付费直播记录移到历史表
if(intval($video['is_live_pay'])==1){
syn_live_pay_to_history($video_id,$video['user_id']);
}
$sql = "delete from ".DB_PREFIX."video WHERE id=".$video_id;
$GLOBALS['db']->query($sql);
}
}
$sql = "select count(*) as num from ".DB_PREFIX."video_history where is_delete = 0 and is_del_vod = 0 and user_id = '".$user_id."'";
$video_count = $GLOBALS['db']->getOne($sql);
$sql = "update ".DB_PREFIX."user set video_count = ".$video_count." where id = ".$user_id;
$GLOBALS['db']->query($sql);
//提交事务,不等 消息推送,防止锁太久
$GLOBALS['db']->Commit($pInTrans);
$pInTrans = false;//防止,下面异常时,还调用:Rollback
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_data = array();
$user_data['video_count'] = $video_count;
$user_redis->update_db($user_id, $user_data);
return true;
}catch(Exception $e){
//异常回滚
$GLOBALS['db']->Rollback($pInTrans);
return true;
}
}
/**
* 查询直播频道详情
* https://www.qcloud.com/doc/api/258/4717
* @param unknown_type $channelId
* @return
*/
function describe_lvb_channel($channelId){
fanwe_require(APP_ROOT_PATH.'system/QcloudApi/QcloudApi.php');
$m_config = load_auto_cache("m_config");
$config = array('SecretId' => $m_config['qcloud_secret_id'],
'SecretKey' => $m_config['qcloud_secret_key'],
'RequestMethod' => 'GET',
'DefaultRegion' => 'gz');
$service = QcloudApi::load(QcloudApi::MODULE_LIVE, $config);
$package = array('channelId' => $channelId);
$ret = $service->DescribeLVBChannel($package);
return $ret;
}
/**
* 给用户分配红包
* @param unknown_type $user_prop_id
* @param unknown_type $user_id
* @param unknown_type $money
*/
function allot_red_to_user($user_prop_id, $user_id, $money){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedRedisService.php');
$videoRed_redis = new VideoRedRedisService();
$videoRed_redis->add_user_winning($user_prop_id, $user_id, $money);
//增加:用户钻石
$sql = "update ".DB_PREFIX."user set diamonds = diamonds + ".$money." where id = ".$user_id;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($user_id));
}
/**
* 将直播房间中的,红包领取记录,同步一份到mysql中
* 正常在:直播结束时调用一次,删除直播(视频)时调用一次
* @param unknown_type $video_id
*/
function syn_red_to_mysql($video_id){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
//直播结束后,将redis中,领取红包记录保存一份到mysql中
$red_list = $video_redis->get_reds($video_id);
if (count($red_list) > 0){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedRedisService.php');
$videoRed_redis = new VideoRedRedisService();
$pInTrans = $GLOBALS['db']->StartTrans();
try
{
foreach ($red_list as $red_id) {
$user_list = $videoRed_redis->get_winnings($red_id);
foreach ($user_list as $k=>$v) {
$user_id = intval($v['user_id']);
$sql = "select id from ".DB_PREFIX."video_red where video_id =".$video_id." and video_prop_id = ".$red_id." and user_id =".$user_id;
$id = $GLOBALS['db']->getOne($sql);
$video_red = array();
$video_red['video_id'] = $video_id;
$video_red['video_prop_id'] = $red_id;
$video_red['user_id'] = $user_id;
$video_red['diamonds'] = $v['diamonds'];
if ($id > 0){
$GLOBALS['db']->autoExecute(DB_PREFIX."video_red", $video_red, "UPDATE","id=".$id);
}else{
$GLOBALS['db']->autoExecute(DB_PREFIX."video_red", $video_red, "INSERT");
}
}
}
$GLOBALS['db']->Commit($pInTrans);
}catch(Exception $e){
//异常回滚
$GLOBALS['db']->Rollback($pInTrans);
}
}
}
function filter_false(&$data, $default = array()){
foreach($default as $key => $value)
{
if($data[$key] == false){
$data[$key] = $value;
}
}
}
function get_video_url($room_id, $live_in)
{
if ($live_in == 3 || $live_in == 0) {
return url('live#show', array('room_id' => $room_id, 'is_vod' => 1));
} else {
return url('live#show', array('room_id' => $room_id));
}
}
function get_live_image($v)
{
return get_spec_image(empty($v['live_image']) ? $v['head_image'] : $v['live_image'], 285, 160, 1);
}
function getPropTablename($video_id){
$video_id = intval($video_id);
// $table = DB_PREFIX . 'video';
// $res = $GLOBALS['db']->getRow("SELECT `prop_table` FROM $table WHERE `id`=$video_id;");
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video = $video_redis->getRow_db($video_id,array('prop_table'));
return $video ? $video['prop_table'] : $video;
}
function createPropTable($time = NOW_TIME)
{
//获取上个月自增ID
$prev_m = date("Ym",strtotime("-1 month"));
$prev_table = DB_PREFIX . 'video_prop_' . $prev_m;
$result = $GLOBALS['db']->getRow("SHOW TABLES LIKE'$prev_table'");
if(empty($result)) {
$prev_table = DB_PREFIX . 'video_prop';
}
$increment_id = $GLOBALS['db']->getOne("SELECT MAX(id) from ".$prev_table);
$increment_id = intval($increment_id)?intval($increment_id):1;
$table = DB_PREFIX . 'video_prop_'.to_date($time,'Ym');
$res = $GLOBALS['db']->getRow("SHOW TABLES LIKE'$table'");
if (!$res) {
// 创建新表
// 表结构
// -- Table structure for `%DB_PREFIX%video_prop`
$sql= "CREATE TABLE `$table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prop_id` int(10) NOT NULL DEFAULT '0' COMMENT '礼物id',
`prop_name` varchar(255) NOT NULL COMMENT '道具名',
`total_score` int(11) NOT NULL COMMENT '积分(from_user_id可获得的积分)合计',
`total_diamonds` int(11) NOT NULL COMMENT '钻石(from_user_id减少的钻石)合计',
`total_ticket` int(11) NOT NULL DEFAULT '0' COMMENT '印票(to_user_id增加的印票)合计;is_red_envelope=1时,为主播获得的:钻石 数量',
`from_user_id` int(10) NOT NULL DEFAULT '0' COMMENT '送',
`to_user_id` int(10) NOT NULL DEFAULT '0' COMMENT '收',
`create_time` int(10) NOT NULL COMMENT '时间',
`create_date` date NOT NULL COMMENT '日期字段,按日期归档;要不然数据量太大了;不好维护',
`create_d` tinyint(2) NOT NULL COMMENT '日',
`create_w` tinyint(2) NOT NULL COMMENT '周',
`num` int(10) NOT NULL COMMENT '送的数量',
`video_id` int(10) NOT NULL DEFAULT '0' COMMENT '直播ID',
`group_id` varchar(20) NOT NULL COMMENT '群组ID',
`is_red_envelope` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:红包',
`msg` varchar(255) NOT NULL COMMENT '弹幕内容',
`ActionStatus` varchar(10) NOT NULL COMMENT '消息发送,请求处理的结果,OK表示处理成功,FAIL表示失败。',
`ErrorInfo` varchar(255) NOT NULL COMMENT '消息发送,错误信息',
`ErrorCode` int(10) NOT NULL COMMENT '错误码',
`create_ym` varchar(12) NOT NULL COMMENT '年月 如:201610',
`from_ip` varchar(255) NOT NULL COMMENT '送礼物人IP',
`is_private` int(4) default 0 COMMENT '判断是否为私信送礼 1表示私信 2表示不是私信',
`is_award` tinyint(1) NOT NULL COMMENT '是否为可中奖礼物 1为 是、0为否',
PRIMARY KEY (`id`),
KEY `idx_ecs_video_prop_cc_1` (`create_ym`,`create_d`,`from_user_id`,`total_diamonds`),
KEY `from_user_id` (`from_user_id`,`total_diamonds`) USING BTREE,
KEY `idx_ecs_video_prop_cc_2` (`create_ym`,`from_user_id`,`total_diamonds`),
KEY `to_user_id` (`is_red_envelope`,`to_user_id`,`total_ticket`) USING BTREE,
KEY `idx_ecs_video_prop_cc_3` (`create_ym`,`create_d`,`is_red_envelope`,`to_user_id`,`total_ticket`) USING BTREE,
KEY `idx_ecs_video_prop_cc_4` (`create_ym`,`is_red_envelope`,`to_user_id`,`total_ticket`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT={$increment_id} DEFAULT CHARSET=utf8 COMMENT='送礼物表'";
$res = $GLOBALS['db']->query($sql);
}
/*$res = 1;
$table = DB_PREFIX . 'video_prop';*/
return $res ? $table : false;
}
/**
* 取前50条观众列表,IM推送到客户端
* @param unknown_type $video_id
* @param unknown_type $group_id
* @return mixed
*/
function push_viewer($video_id,$group_id,$page_size=50){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoViewerRedisService.php');
$video_viewer_redis = new VideoViewerRedisService();
$viewer = $video_viewer_redis->get_viewer_list2($video_id,1,$page_size);
for($i=count($viewer['list'])-1;$i>=0;$i--)
{
if ($viewer['list'][$i]['user_id']==0)
{
array_splice($viewer['list'],$i,1);
}
}
fanwe_require(APP_ROOT_PATH .'mapi/lib/core/shorturl.php');
$user_list = array();
$viewer['list_fields'] = array('user_id','user_level','head_image','v_icon','is_robot','is_authentication');
$short = shorturl::SHORTURL;// 'http://t.cn/';
foreach($viewer['list'] as $k=>$v){
$head_image = $v['head_image'];
$v_icon = $v['v_icon'];
$is_robot = intval($v['is_robot']);
$is_authentication = intval($v['is_authentication']);
if (!empty($head_image)){
$head_image = shorturl::getShort($head_image);
if (empty($head_image)){
$head_image = $v['head_image'];
}else{
$head_image = str_replace($short, '', $head_image);
}
}
if (!empty($v_icon)){
$v_icon = shorturl::getShort($v_icon);
if (empty($v_icon)){
$v_icon = $v['v_icon'];
}else{
$v_icon = str_replace($short, '', $v_icon);
}
}
$user2 = array((string)$v['user_id'],(string)$v['user_level'],$head_image,$v_icon,$is_robot,$is_authentication);
$user_list[] = $user2;
}
unset($viewer['list']);
$viewer['short_url'] = $short;//如果head_image,v_icon不是http://开头则需要加上short_url
$viewer['list_data'] = $user_list;
$viewer['time'] = NOW_TIME;
$ext = array();
$ext['type'] = 42; //42 通用数据格式
$ext['data_type'] = 0 ;//直播间观众列表
$ext['data'] = $viewer;
$msg_content = json_encode($ext);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_system_notification($group_id, $msg_content);
return $ret;
}
/**
* 回播定时推送观众列表
* @param unknown_type $video_id
* @param unknown_type $page_size
* @param unknown_type $s
* @return multitype:mixed
*/
function crontab_viewer($video_id,$page_size=50,$s=50){
$ret = array();
$is_ok = $GLOBALS['cache']->set_lock('crontab_viewer_num',$s);
if($is_ok) {
if ($video_id == 0){
$sql = "SELECT id,group_id,watch_number FROM ".DB_PREFIX."video where live_in = 3 and watch_number > 0";
}else{
$sql = "SELECT id,group_id,watch_number FROM ".DB_PREFIX."video where id = ".$video_id;
}
//设置直播间观众列表返回数量
$m_config = load_auto_cache("m_config");
$page_size = intval($m_config['view_page_size'])>0?intval($m_config['view_page_size']):50;
$list = $GLOBALS['db']->getAll($sql,true,true);
if (count($list) > 0) {
foreach ( $list as $k => $v )
{
$ret[] = push_viewer($v['id'],$v['group_id'],$page_size);
}
}
$GLOBALS['cache']->del_lock('crontab_viewer_num');
}
return $ret;
}
function filter_all_false($default = array()){
if(is_array($default)){
foreach($default as $key => $value)
{
if(is_array($value)){
$value = filter_all_false($value);
}else{
if($value===false){
$value=get_type($value);
}
}
$default[$key] = $value;
}
}else{
if($default===false){
$default=get_type($default);
}
}
return $default;
}
/*
判断变量的类型
*/
function get_type($date=''){
switch (gettype($date))
{
case 'integer':
return 0;
break;
break;
case 'string':
return '';
break;
case 'array':
return array();
break;
case 'boolean':
return '0';
break;
/* case 'double':
return 0.00;
break;
case 'object':
return object();
break;
case 'resource':
return 'resource';
break;
case 'NULL':
return 'NULL';
break;
case 'object':
return 'object';
break;*/
default:
return '0';
}
}
/*
* 视频合并
* @param string $channel_id 直播码
* @param string $new_file_name 新的文件名
*/
function Com_ConcatVideo($channel_id,$new_file_name){
fanwe_require(APP_ROOT_PATH . 'mapi/lib/core/video_factory.php');
$video_factory = new VideoFactory();
$ret = $video_factory->ConcatVideo($channel_id,$new_file_name);
return $ret;
}
//使用的sdk版本 0默认腾讯云、1金山
//映射关系类型 腾讯云直播, 金山云,星域,方维云 ,阿里云
//video_type 1 2 3 4 5
//sdk_type 0 1 1 1 1
function get_sdk_info($video_type){
switch($video_type){
case 1:
return $sdk_type = 0;
break;
default;
return $sdk_type = 1;
break;
}
}
//------付费相关------
/**
* 按时付费直播结束后转按场付费
* @param $video
*/
function change_pay_type($video){
if(intval($video['live_pay_type'])!=1){
$sql = "update ".DB_PREFIX."video set live_pay_type = 1 where id = ".$video['id'];
$GLOBALS['db']->query($sql);
}
}
/**
* 是否付费过
*/
function get_pay_video_info($video_info){
$root = array('status'=>1,'error'=>'');
//初始化参数
$live_pay_time = strim($video_info['live_pay_time']);
$live_pay_type = intval($video_info['live_pay_type']);
$live_fee = intval($video_info['live_fee']);
$live_is_mention = intval($video_info['live_is_mention']);
$is_live_pay = intval($video_info['is_live_pay']);
$user_id = intval($GLOBALS['user_info']['id']);//用户ID
$video_user_id = intval($video_info['user_id']);//主播ID
$live_in = intval($video_info['live_in']);//直播间ID
$room_id = intval($video_info['id']);//直播间ID
$is_pay_over = 0; //是否付费 1 已付费;0未付费
$new_room_id = 0;
if(intval($video_info['pay_room_id'])>0){
$room_id = $video_info['pay_room_id'];
$new_room_id = $video_info['id'];
}
//非付费直播间 或者 直播不正常 或者 直播不存在 跳过
if($is_live_pay==1&&$live_fee>0&&$live_in!=0&&$room_id>0){
if(!$GLOBALS['user_info']){
$root['error'] = "用户未登陆,请先登录.";
$root['status'] = 0;
$root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
}else{
//默认提醒
if($room_id > 0){
//获取付费记录信息
$sql = "select id,pay_time_next,total_time,total_diamonds,live_pay_type from ".DB_PREFIX."live_pay_log where from_user_id = ".$user_id." and to_user_id = ".$video_user_id." and video_id=".$room_id;
$live_pay_log_info = $GLOBALS['db']->getRow($sql);
//不可提醒
$now_time = NOW_TIME;
$root['status'] = 0;
if(intval($live_pay_log_info['id'])>0&&($live_pay_log_info['live_pay_type']==1||($live_pay_log_info['pay_time_next']>$now_time&&$live_pay_log_info['live_pay_type']==0))){
$is_pay_over = 1;
$root['status'] = 1;
}
}
}
}
$root['is_live_pay'] = $is_live_pay;
$root['live_pay_type'] = $live_pay_type;
$root['live_fee'] = $live_fee;
$root['is_pay_over'] = $is_pay_over;
return $root;
}
/**
* 将付费直播记录移到历史表
* 正常在:直播结束时调用一次,删除直播(视频)时调用一次
* @param unknown_type $video_id
*/
function syn_live_pay_to_history($video_id,$user_id){
if($video_id>0){
$sql = "select MAX(id) from ".DB_PREFIX."live_pay_log_history";
$live_pay_log_history_mid = $GLOBALS['db']->getOne($sql);
$sql = "select MAX(id) from ".DB_PREFIX."live_pay_log";
$live_pay_mid = $GLOBALS['db']->getOne($sql);
if($live_pay_log_history_mid>$live_pay_mid){
$video_max = $live_pay_log_history_mid+1;
$sql="alter table ".DB_PREFIX."live_pay_log AUTO_INCREMENT=".$video_max;
$GLOBALS['db']->query($sql);
}
//将本次直播付费记录 移到历史表中
$fields = 'id,total_time,total_ticket,total_diamonds,from_user_id,to_user_id,create_time,create_date,create_ym,create_d,create_w,live_fee,live_pay_time,live_pay_date,video_id,group_id,pay_time_end,pay_time_next,live_is_mention_time,live_is_mention_pay,live_pay_type,new_room_id,total_score,uesddiamonds_to_score,ticket_to_rate';
$sql = "insert into ".DB_PREFIX."live_pay_log_history(".$fields.") select ".$fields." from ".DB_PREFIX."live_pay_log where video_id='".$video_id."' and to_user_id=".$user_id;
$GLOBALS['db']->query($sql);
$sql= "delete from ".DB_PREFIX."live_pay_log where video_id='".$video_id."' and to_user_id=".$user_id;
$GLOBALS['db']->query($sql);
}
}
/**
* 将付费直播从历史表移到原记录表中
* 正常在:直播结束时调用一次,删除直播(视频)时调用一次
* @param unknown_type $video_id
*/
function syn_history_to_live_pay($video_id){
if($video_id>0){
//将本次直播付费记录 从历史表移到原记录表中
$fields = 'total_time,total_ticket,total_diamonds,from_user_id,to_user_id,create_time,create_date,create_ym,create_d,create_w,live_fee,live_pay_time,live_pay_date,video_id,group_id,pay_time_end,pay_time_next,live_is_mention_time,live_is_mention_pay,live_pay_type,new_room_id,total_score,uesddiamonds_to_score,ticket_to_rate';
$sql = "insert into ".DB_PREFIX."live_pay_log(".$fields.") select ".$fields." from ".DB_PREFIX."live_pay_log_history where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
$sql= "delete from ".DB_PREFIX."live_pay_log_history where video_id='".$video_id."'";
$GLOBALS['db']->query($sql);
}
}
//----------------竞拍相关------------------
/**
* 根据竞拍ID 获得 竞拍参与表
*/
function get_pailog_table($paiid = 0){
$idx = intval($paiid/10);
return DB_PREFIX."pai_log_".$idx;
}
/**
* $goods pai_goods 的信息
* $type=0 竞拍的人回调, $type=1 主播的回调
*/
function format_pai_goods(&$goods,$type=0){
if($goods['imgs']!=''){
$goods['imgs'] = json_decode($goods['imgs'],1);
//$goods['img']=$goods['imgs']['0'];
$goods['img']=get_spec_image($goods['imgs']['0']);
if($goods['imgs']==""){
$goods['imgs'] = array();
}else{
foreach($goods['imgs'] as $k=>$v){
//$goods['imgs'][$k]=get_domain().APP_ROOT.$v;
$goods['imgs'][$k]=get_spec_image($v);
}
}
}
else{
$goods['imgs'] = array();
}
if($goods['status']==0){
if(PAI_YANCHI_MODULE == 0){
$goods['pai_left_time'] = $goods['pai_time'] * 3600 + $goods['create_time'] + $goods['now_yanshi'] * $goods['pai_yanshi'] * 60 - NOW_TIME;
}else{
$goods['pai_left_time'] = $goods['end_time'] - NOW_TIME;
}
if($goods['pai_left_time'] < 0){
$goods['pai_left_time'] = 0;
}
}
else{
$goods['pai_left_time'] = 0;
}
if(isset($goods['user_pai_info']['consignee_district']) && $goods['user_pai_info']['consignee_district']!=""){
$goods['user_pai_info']['consignee_district'] = json_decode($goods['user_pai_info']['consignee_district'],1);
if($goods['user_pai_info']['consignee_district']==""){
$goods['user_pai_info']['consignee_district'] = array();
}
}
else{
$goods['user_pai_info']['consignee_district'] = array();
}
if($goods['district']!=''){
$goods['district'] = json_decode($goods['district'],1);
if($goods['district']==""){
$goods['district'] = array();
}
}
else{
$goods['district'] = array();
}
if($goods['last_pai_diamonds']==0){
$goods['last_pai_diamonds']=$goods['qp_diamonds'];
}
if($goods['is_true']==0){
//虚拟
if ($type==1) {
if ($goods['order_status']==1) {
$goods['info_status']=1;
$goods['button_status']=0;
$goods['expire_time']=strtotime($goods['order_time']) - 8*3600 + MAX_PAI_PAY_TIME - NOW_TIME;
}elseif ($goods['order_status']==2) {
$goods['info_status']=2;
$goods['button_status']=2;
$date_time=strtotime($goods['date_time']) - 8*3600;
if ($date_time-NOW_TIME>0) {
//约会倒计时
$goods['expire_time']=$date_time - NOW_TIME;
$goods['info_status_type']=0;
}else{
//约会确认倒计时
$goods['expire_time']=$date_time + MAX_PODCAST_CONFIRM_TIME - NOW_TIME;
$goods['info_status_type']=1;
}
}elseif ($goods['order_status']==3) {
$goods['info_status']=3;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==4) {
$goods['info_status']=4;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==5) {
$goods['info_status']=5;
$goods['button_status']=5;
$goods['expire_time']=0;//strtotime($goods['order_status_time']) + 16*3600 - NOW_TIME;
}elseif ($goods['order_status']==6) {
$goods['info_status']=6;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==7) {
$goods['info_status']=7;
$goods['button_status']=0;
$goods['expire_time']=0;
}else{
$goods['info_status']=0;
$goods['button_status']=0;
$goods['expire_time']=0;
}
}else{
if ($goods['order_status']==1) {
$goods['info_status']=1;
$goods['button_status']=1;
$goods['expire_time']=strtotime($goods['order_time']) - 8*3600 + MAX_PAI_PAY_TIME - NOW_TIME;
}elseif ($goods['order_status']==2) {
$goods['info_status']=2;
$goods['button_status']=0;
$date_time=strtotime($goods['date_time']) - 8*3600;
if ($date_time>NOW_TIME) {
//约会倒计时
$goods['expire_time']=$date_time - NOW_TIME;
$goods['info_status_type']=0;
}else{
//主播未确认7天,倒计时
$goods['expire_time']=$date_time + MAX_PODCAST_CONFIRM_TIME - NOW_TIME;
$goods['info_status_type']=1;
}
}elseif ($goods['order_status']==3) {
$goods['info_status']=3;
$goods['button_status']=3;
//买家未确认7天,倒计时
$goods['expire_time']=intval($goods['order_status_time']) + MAX_USER_CONFIRM_TIME - NOW_TIME;
}elseif ($goods['order_status']==4) {
$goods['info_status']=4;
$goods['button_status']=4;
$goods['expire_time']=0;
}elseif ($goods['order_status']==5) {
$goods['info_status']=5;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==6) {
$goods['info_status']=6;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==7) {
$goods['info_status']=7;
$goods['button_status']=0;
$goods['expire_time']=0;
}else{
$goods['info_status']=0;
$goods['button_status']=0;
$goods['expire_time']=0;
}
}
}else{
//实物
if ($type==1) {
if ($goods['order_status']==1) {
$goods['info_status']=1;
$goods['button_status']=0;
$goods['expire_time']=strtotime($goods['order_time']) - 8*3600 + MAX_PAI_PAY_TIME - NOW_TIME;
}elseif ($goods['order_status']==2) {
$goods['info_status']=2;
$goods['button_status']=2;
$goods['expire_time']=strtotime($goods['pay_time']) - 8*3600 + MAX_PODCAST_CONFIRM_VIRTUAL_TIME - NOW_TIME;
}elseif ($goods['order_status']==3) {
$goods['info_status']=3;
$goods['button_status']=0;
$goods['expire_time']=intval($goods['order_status_time']) + MAX_USER_CONFIRM_VIRTUAL_TIME - NOW_TIME;
}elseif ($goods['order_status']==4) {
$goods['info_status']=4;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==5) {
$goods['info_status']=5;
$goods['button_status']=5;
$goods['expire_time']=0;//strtotime($goods['order_status_time']) + 16*3600 - NOW_TIME;
}elseif ($goods['order_status']==6) {
$goods['info_status']=6;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==7) {
$goods['info_status']=7;
$goods['button_status']=0;
$goods['expire_time']=0;
}else{
$goods['info_status']=0;
$goods['button_status']=0;
$goods['expire_time']=0;
}
}else{
if ($goods['order_status']==1) {
$goods['info_status']=1;
$goods['button_status']=1;
$goods['expire_time']=strtotime($goods['order_time']) - 8*3600 + MAX_PAI_PAY_TIME - NOW_TIME;
}elseif ($goods['order_status']==2) {
$goods['info_status']=2;
$goods['button_status']=0;
$goods['expire_time']=strtotime($goods['pay_time']) - 8*3600 + MAX_PODCAST_CONFIRM_VIRTUAL_TIME - NOW_TIME;
}elseif ($goods['order_status']==3) {
$goods['info_status']=3;
$goods['button_status']=3;
//买家未确认7天,倒计时
$goods['expire_time']=intval($goods['order_status_time']) + MAX_USER_CONFIRM_VIRTUAL_TIME - NOW_TIME;
}elseif ($goods['order_status']==4) {
$goods['info_status']=4;
$goods['button_status']=4;
$goods['expire_time']=0;
}elseif ($goods['order_status']==5) {
$goods['info_status']=5;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==6) {
$goods['info_status']=6;
$goods['button_status']=0;
$goods['expire_time']=0;
}elseif ($goods['order_status']==7) {
$goods['info_status']=7;
$goods['button_status']=0;
$goods['expire_time']=0;
}else{
$goods['info_status']=0;
$goods['button_status']=0;
$goods['expire_time']=0;
}
}
}
$goods['expire_date_time']=strtotime($goods['date_time']) - 8*3600 - NOW_TIME;
if ($goods['expire_date_time']<0) {
$goods['expire_date_time']=0;
}
if($goods['date_time']!=''){
date_time_format($goods['date_time']);
}
if($goods['order_status_time']!=''){
$goods['order_status_time']=to_date($goods['order_status_time'],'Y-m-d H:i:s');
}
if($goods['order_status']==2){
$goods['order_status_time']=0;
}
if($goods['pay_time']=='0000-00-00 00:00:00'){
$goods['pay_time']=0;
}
if ($goods['order_status']==4) {
$goods['final_time']=$goods['order_status_time'];
$goods['order_status_time']=0;
}
$goods['pai_logs_url']=SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=pailogs&id='.$goods['id'];
}
/**
* 格式化出价记录
*/
function format_pai_logs(&$list,$status){
foreach($list as $k=>$v){
$str_len = mb_strlen($list[$k]['user_name'],'utf-8');
if ($str_len>2) {
$firstStr = mb_substr($list[$k]['user_name'], 0, 1, 'utf-8');
$lastStr = mb_substr($list[$k]['user_name'], -1, 1, 'utf-8');
$list[$k]['user_name']=$firstStr.'**'.$lastStr;
}
if($status==0 || $status==1){
if($k==0){
$list[$k]['pai_status'] = "领先";
}
else{
$list[$k]['pai_status'] = "出局";
}
}elseif($status==2){
$list[$k]['pai_status'] = "流拍";
}elseif($status==3){
if($k==0){
$list[$k]['pai_status'] = "失败";
}
else{
$list[$k]['pai_status'] = "出局";
}
}elseif($status==4){
if($k==0){
$list[$k]['pai_status'] = "成功";
}
else{
$list[$k]['pai_status'] = "出局";
}
}
//出价
//$list[$k]['pai_diamonds'] = $v['pai_sort'] * $v['jj_diamonds']+$v['qp_diamonds'];
$list[$k]['pai_date_format'] = to_date($v['pai_time'],"m.d H:i:s");
if($v['status'] == 0){
$list[$k]['status_format'] = "未支付";
}
elseif($v['status'] ==1){
$list[$k]['status_format'] = "已支付";
}
elseif($v['status'] ==2){
$list[$k]['status_format'] = "已流拍";
}
}
}
/*
* 排查订单支付超时
* 批量 查询 pai_join ,当 pai_status=1 , order_time+15*60getAll("select * from ".DB_PREFIX."pai_join where pai_status=1 and order_time-1+".MAX_PAI_PAY_TIME." <".NOW_TIME);
foreach($pai_join_list as $k=>$v){
$auth='';
if (isset($_REQUEST['auth'])) {
$auth=$_REQUEST['auth'];
}
$info = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."pai_goods WHERE id=".intval($v['pai_id']));
$bz_diamonds = intval($info['bz_diamonds']);//保证金
$podcast_id = intval($info['podcast_id']);//主播ID
$id= intval($info['id']);//商品ID
$name = strim($info['name']);
$time = NOW_TIME;
if($v['user_id'] == $info['last_user_id']){
//关闭订单 (扣去保证金?)
$sql = "update ".DB_PREFIX."goods_order set order_status = 6 ,order_status_time=".NOW_TIME." where id=".intval($v['order_id']) ;
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."pai_join set order_status = 6 ,pai_status=3 where id=".intval($v['id']) ;
$GLOBALS['db']->query($sql);
//保证金退还主播
$sql = "update ".DB_PREFIX."user set diamonds = diamonds + ".$bz_diamonds." where id = ".$podcast_id;
$GLOBALS['db']->query($sql);
fanwe_require(APP_ROOT_PATH.'/mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
user_deal_to_reids(array($podcast_id));
$account_diamonds = $user_redis->getOne_db($podcast_id,'diamonds');//查询主播钻石
//会员账户 钻石变更日志表
$diamonds_log_data = array(
'pai_id' => $id,
'user_id' => $podcast_id,
'diamonds'=> $bz_diamonds,//变更数额
'account_diamonds'=>$account_diamonds,//账户余额
'memo' =>'竞拍'.$name.',买家超时付款,主播获得保证金',//备注
'create_time' => $time,
'create_date' => to_date($time,'Y-m-d H:i:s'),
'create_time_ymd' => to_date($time,'Y-m-d'),
'create_time_y' => to_date($time,'Y'),
'create_time_m' => to_date($time,'m'),
'create_time_d' => to_date($time,'d'),
'type' =>1,
);
$GLOBALS['db']->autoExecute(DB_PREFIX."user_diamonds_log",$diamonds_log_data);
//写入用户日志
$data = array();
$data['diamonds'] = $bz_diamonds;
$param['type'] = 8;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4表示保证金操作 5表示竞拍模块消费 6表示竞拍模块收益 8竞拍记录
$log_msg = '竞拍'.$info['name'].',买家超时付款,主播获得保证金';//备注
account_log_com($data,$podcast_id,$log_msg,$param);
//消息发送
$user_ids=array();
$user_ids[]=intval($v['user_id']);
$content="您参与的竞拍:‘".$info['name']."’ 付款超时,扣除您缴纳的保证金!";
FanweServiceCall("message","send",array("send_type"=>'no_pay',"user_ids"=>$user_ids,"content"=>$content));
//主播收到保证金消息发送
$user_ids=array();
$user_ids[]=$podcast_id;
$content= "竞拍用户超时未付款,已把保证金转入你账户。";
FanweServiceCall("message","send",array("send_type"=>'no_pay',"user_id"=>$user_ids,"content"=>$content));
}else{
//更改订单状态
$sql = "update ".DB_PREFIX."goods_order set order_status = 6 ,order_status_time=".NOW_TIME." where id=".intval($v['order_id']) ;
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."pai_join set order_status = 6 ,pai_status=3 where id=".intval($v['id']) ;
$GLOBALS['db']->query($sql);
//消息发送
$user_ids=array();
$user_ids[]=intval($v['user_id']);
$content="您参与的竞拍:‘".$info['name']."’ 付款超时!";
FanweServiceCall("message","send",array("send_type"=>'no_pay',"user_ids"=>$user_ids,"content"=>$content));
}
$next_pai_join=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."pai_join where pai_status=2 and pai_diamonds >0 and pai_id=".intval($v['pai_id'])." ORDER BY pai_diamonds DESC ");
if ($next_pai_join) {
//中拍创建订单
$data=array();
$data['pai_id']=intval($v['pai_id']);
$data['user_id']=intval($next_pai_join['user_id']);
$data['auth']=$auth;
$result=deal_pai_do_order($data);
if (count($result)>0) {
$pai_goods_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."pai_goods where id=".intval($v['pai_id'])." ");
$video_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."video where user_id=".intval($pai_goods_info['podcast_id'])." and live_in=1");
$user_list=$GLOBALS['db']->getAll("select user_id,pai_status,order_id,order_status,pai_diamonds,order_time from ".DB_PREFIX."pai_join where pai_id=".intval($v['pai_id'])." and pai_diamonds >0 ORDER BY pai_diamonds DESC limit 0,3");
//房间内推送
$ext = array();
$ext['type'] = 26;
$ext['room_id'] = intval($video_info['id']);
$ext['pai_id'] = $data['pai_id'];
$ext['post_id'] = intval($pai_goods_info['podcast_id']);
$ext['desc'] = '';
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$fields = array('head_image','user_level','v_type','v_icon','nick_name');
//-------------------------
$ext['buyer']=array();
foreach($user_list as $k1=>$v1){
$buyer_data=array();
if (intval($v1['user_id'])>0) {
$buyer_data=$user_redis->getRow_db(intval($v1['user_id']),$fields);
$buyer_data['user_id'] = intval($v1['user_id']);
$buyer_data['type']=intval($v1['pai_status']);
$buyer_data['head_image'] = get_spec_image($buyer_data['head_image']);
$buyer_data['nick_name'] = emoji_decode($buyer_data['nick_name']);
if ($buyer_data['type']==1) {
$buyer_data['left_time']=$v1['order_time']+MAX_PAI_PAY_TIME-NOW_TIME;
$order_sn=$GLOBALS['db']->getOne("select order_sn from ".DB_PREFIX."goods_order where id=".intval($v1['order_id'])." ");
//$buyer_data['pay_url']=SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=order&order_sn='.$order_sn;
$buyer_data['goods_name']=$pai_goods_info['name'];
$buyer_data['order_sn']=$order_sn;
if ($pai_goods_info['imgs']!='') {
$pai_goods_info['imgs']=json_decode($pai_goods_info['imgs']);
foreach($pai_goods_info['imgs'] as $k2=>$v2){
/*if ($auth!='') {
$buyer_data['goods_icon']=$auth.$v2;
}else{
$buyer_data['goods_icon']=get_domain().APP_ROOT.$v2;
}*/
$buyer_data['goods_icon']=get_spec_image($v2);
break;
}
}else{
$buyer_data['goods_icon']="";
}
//$ext['desc'] = '恭喜用户'.$buyer_data['nick_name'].'出价'.intval($v1['pai_diamonds']).'成功拍得'.$pai_goods_info['name'];
$ext['desc'] = '出价'.intval($v1['pai_diamonds']).'成功拍得'.$pai_goods_info['name'];
$ext['user'] = $buyer_data;
}else{
$buyer_data['left_time']=0;
}
$buyer_data['pai_diamonds']=intval($v1['pai_diamonds']);
}
$ext['buyer'][]=$buyer_data;
}
//-------------------------
#构造高级接口所需参数
$tim_data=array();
$tim_data['ext']=$ext;
$tim_data['podcast_id']=strim($pai_goods_info['podcast_id']);
$tim_data['group_id']=strim($video_info['group_id']);
get_tim_api($tim_data);
/*
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_msg2(intval($pai_goods_info['podcast_id']), intval($video_info['group_id']), $msg_content);
*/
}
}else{
//流拍
$sql = "update ".DB_PREFIX."pai_goods set status = 2 ,order_status = 6 where id = ".intval($v['pai_id']);
$GLOBALS['db']->query($sql);
$pai_goods_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."pai_goods where id=".intval($v['pai_id'])." ");
$sql = "update ".DB_PREFIX."video set pai_id = 0 where user_id=".intval($pai_goods_info['podcast_id'])." ";
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."goods set inventory=inventory+1 where id=".$info['goods_id']."";
$GLOBALS['db']->query($sql);//商品流拍,减去的库存增加回去
$video_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."video where user_id=".intval($pai_goods_info['podcast_id'])." and live_in=1");
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video_data=array();
$video_data['pai_id']=0;
$re = $video_redis->update_db(intval($video_info['id']),$video_data);
//退回保证金
$pai_id=intval($v['pai_id']);
$time=NOW_TIME;
$user_list = $GLOBALS['db']->getAll("SELECT id,user_id,bz_diamonds,status,pai_status FROM ".DB_PREFIX."pai_join WHERE pai_id=".$pai_id);
$user_ids=array();
foreach ( $user_list as $k1 => $v1 )
{
$user_ids[]=$v1['user_id'];
//退还保证金 bz_diamonds 不为超时即退保证金
if(intval($v1['status'])==0 && intval($v1['pai_status'])==3 && $v1['user_id'] == $info['last_user_id']){
$sql = "update ".DB_PREFIX."pai_join set status = 2 where id=".intval($v1['id'])." ";
$GLOBALS['db']->query($sql);
}else{
fanwe_require(APP_ROOT_PATH.'/mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
//$user_redis->lock_diamonds(intval($v1['user_id']),intval($v1['bz_diamonds']));
//$account_diamonds = $user_redis->getOne_db(intval($v1['user_id']),'use_diamonds');
$sql = "update ".DB_PREFIX."user set diamonds = diamonds + ".intval($v1['bz_diamonds'])." where id = ".intval($v1['user_id']);
$GLOBALS['db']->query($sql);
user_deal_to_reids(array(intval($v1['user_id'])));
$account_diamonds = $user_redis->getOne_db(intval($v1['user_id']), 'diamonds');
$sql = "update ".DB_PREFIX."pai_join set status = 1 where id=".intval($v1['id'])." ";
$GLOBALS['db']->query($sql);
//会员账户 钻石变更日志表
$diamonds_log_data = array(
'pai_id' => $pai_id,
'user_id' => intval($v1['user_id']),
'diamonds'=>intval($v1['bz_diamonds']),//变更数额
'account_diamonds'=>$account_diamonds,//账户余额
'memo' =>$pai_goods_info['name'].'退还保证金',//备注
'create_time' => $time,
'create_date' => to_date($time,'Y-m-d H:i:s'),
'create_time_ymd' => to_date($time,'Y-m-d'),
'create_time_y' => to_date($time,'Y'),
'create_time_m' => to_date($time,'m'),
'create_time_d' => to_date($time,'d'),
'type' =>1,//1 提交保证金
);
$GLOBALS['db']->autoExecute(DB_PREFIX."user_diamonds_log",$diamonds_log_data);
//写入用户日志
$data = array();
$data['diamonds'] = intval($v1['bz_diamonds']);
$param['type'] = 8;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4表示保证金操作 5表示竞拍模块消费 6表示竞拍模块收益 8竞拍记录
$log_msg = $pai_goods_info['name'].'退还保证金';//备注
account_log_com($data,intval($v1['user_id']),$log_msg,$param);
}
}
//流拍房间内推送
$ext = array();
$ext['type'] = 27;
$ext['room_id'] = intval($video_info['id']);
$ext['pai_id'] = intval($v['pai_id']);
$ext['post_id'] = intval($pai_goods_info['podcast_id']);
$ext['out_type'] = 1;
$ext['desc'] = "很遗憾,".$pai_goods_info['name']."竞拍流拍";
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$fields = array('head_image','user_level','v_type','v_icon','nick_name');
$ext['user'] = $user_redis->getRow_db(intval($info['podcast_id']),$fields);
$ext['user']['user_id'] = intval($info['podcast_id']);
$ext['user']['head_image'] = get_spec_image($ext['user']['head_image']);
$ext['user']['nick_name'] = emoji_decode($ext['user']['nick_name']);
//-------------------------
$user_list_out=$GLOBALS['db']->getAll("select user_id,pai_status,order_id,order_status,pai_diamonds,order_time from ".DB_PREFIX."pai_join where pai_id=".intval($v['pai_id'])." and pai_diamonds >0 ORDER BY pai_diamonds DESC limit 0,3");
$ext['buyer']=array();
foreach($user_list_out as $k1=>$v1){
$buyer_data=array();
if (intval($v1['user_id'])>0) {
$buyer_data=$user_redis->getRow_db(intval($v1['user_id']),$fields);
$buyer_data['user_id'] = intval($v1['user_id']);
$buyer_data['type']=intval($v1['pai_status']);
$buyer_data['head_image'] = get_spec_image($buyer_data['head_image']);
$buyer_data['nick_name'] = emoji_decode($buyer_data['nick_name']);
if ($buyer_data['type']==1) {
$buyer_data['left_time']=$v1['order_time']+MAX_PAI_PAY_TIME-NOW_TIME;
//$order_sn=$GLOBALS['db']->getOne("select order_sn from ".DB_PREFIX."goods_order where id=".intval($v1['order_id'])." ");
//$buyer_data['pay_url']=SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=order&order_sn='.$order_sn;
}else{
$buyer_data['left_time']=0;
}
$buyer_data['pai_diamonds']=intval($v1['pai_diamonds']);
}
$ext['buyer'][]=$buyer_data;
}
//-----------------------
#构造高级接口所需参数
$tim_data=array();
$tim_data['ext']=$ext;
$tim_data['podcast_id']=strim($pai_goods_info['podcast_id']);
$tim_data['group_id']=strim($video_info['group_id']);
get_tim_api($tim_data);
/*
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_msg2(intval($pai_goods_info['podcast_id']), intval($video_info['group_id']), $msg_content);
*/
}
}
}
/*查看拍卖超时,并结束拍卖,进入支付,或者 流拍状态
* pai_goods 当status=0,create_time+pai_time+now_yanshi*pai_yanshi getAll("select * from ".DB_PREFIX."pai_goods where status=0 and is_delete=0 and create_time+pai_time*3600+now_yanshi*pai_yanshi*60-1-1 <".NOW_TIME);
}else{
$pai_list=$GLOBALS['db']->getAll("select * from ".DB_PREFIX."pai_goods where status=0 and is_delete=0 and end_time-1 <".NOW_TIME);
}
foreach($pai_list as $k=>$v){
$auth='';
if (isset($_REQUEST['auth'])) {
$auth=$_REQUEST['auth'];
}
//中拍
$data=array();
$data['pai_id']=intval($v['id']);
$data['user_id']=intval($v['last_user_id']);
$data['auth']=$auth;
if (intval($v['last_user_id'])>0) {
$sql = "update ".DB_PREFIX."pai_goods set status = 1 where id = ".intval($v['id'])." and status=0 ";
$GLOBALS['db']->query($sql);
$result=deal_pai_do_order($data);
if (count($result)>0) {
//更新排队状态
$user_list=$GLOBALS['db']->getAll("select user_id from ".DB_PREFIX."pai_join where pai_id=".intval($v['id'])." and pai_diamonds >0 ORDER BY pai_diamonds DESC limit 1,2");
$user_array=array();
foreach($user_list as $k2=>$v2){
$user_array[]=intval($v2['user_id']);
}
$sql = "update ".DB_PREFIX."pai_join set pai_status = 2 where pai_id= ".$data['pai_id']." and user_id in (".implode(",",$user_array).") ";
$GLOBALS['db']->query($sql);
//发送排队消息
if(count($user_array)>0){
$content="您参与的竞拍:‘".$v['name']."’ 正在结算排队中!";
FanweServiceCall("message","send",array("send_type"=>'tip_towait',"user_ids"=>$user_array,"content"=>$content));
}
$video_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."video where user_id=".intval($v['podcast_id'])." and live_in=1");
//房间内推送
$ext = array();
$ext['type'] = 25;
$ext['room_id'] = intval($video_info['id']);
$ext['pai_id'] = $data['pai_id'];
$ext['post_id'] = intval($v['podcast_id']);
$ext['desc'] = '';
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$fields = array('head_image','user_level','v_type','v_icon','nick_name');
//-------------------------
$ext['buyer']=array();
$user_list_all=$GLOBALS['db']->getAll("select user_id,pai_status,order_id,order_status,pai_diamonds,order_time from ".DB_PREFIX."pai_join where pai_id=".intval($v['id'])." and pai_diamonds >0 ORDER BY pai_diamonds DESC limit 0,3");
foreach($user_list_all as $k1=>$v1){
$buyer_data=array();
if (intval($v1['user_id'])>0) {
$buyer_data=$user_redis->getRow_db(intval($v1['user_id']),$fields);
$buyer_data['user_id'] = intval($v1['user_id']);
$buyer_data['type']=intval($v1['pai_status']);
$buyer_data['head_image'] = get_spec_image($buyer_data['head_image']);
$buyer_data['nick_name'] = emoji_decode($buyer_data['nick_name']);
$buyer_data['user_name'] = emoji_decode($buyer_data['user_name']);
if ($buyer_data['type']==1) {
$buyer_data['left_time']=$v1['order_time']+MAX_PAI_PAY_TIME-NOW_TIME;
$order_sn=$GLOBALS['db']->getOne("select order_sn from ".DB_PREFIX."goods_order where id=".intval($v1['order_id'])." ");
//$buyer_data['pay_url']=SITE_DOMAIN.APP_ROOT.'/wap/index.php?ctl=pai_user&act=order&order_sn='.$order_sn;
$buyer_data['goods_name']=$v['name'];
$buyer_data['order_sn']=$order_sn;
if ($v['imgs']!='') {
$v['imgs']=json_decode($v['imgs']);
foreach($v['imgs'] as $k2=>$v2){
/*if ($auth!='') {
$buyer_data['goods_icon']=$auth.$v2;
}else{
$buyer_data['goods_icon']=get_domain().APP_ROOT.$v2;
}*/
$buyer_data['goods_icon']=get_spec_image($v2);
break;
}
}else{
$buyer_data['goods_icon']="";
}
//$ext['desc'] = '恭喜用户'.$buyer_data['nick_name'].'出价'.intval($v1['pai_diamonds']).'成功拍得'.$v['name'];
$ext['desc'] = '出价'.intval($v1['pai_diamonds']).'成功拍得'.$v['name'];
$ext['user'] = $buyer_data;
}else{
$buyer_data['left_time']=0;
}
$buyer_data['pai_diamonds']=intval($v1['pai_diamonds']);
}
$ext['buyer'][]=$buyer_data;
}
//-------------------------
#构造高级接口所需参数
$tim_data=array();
$tim_data['ext']=$ext;
$tim_data['podcast_id']=strim($v['podcast_id']);
$tim_data['group_id']=strim($video_info['group_id']);
get_tim_api($tim_data);
/*
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_msg2(intval($v['podcast_id']), intval($video_info['group_id']), $msg_content);
*/
}
}else{
//流拍
$sql = "update ".DB_PREFIX."pai_goods set status = 2 where id = ".intval($v['id'])." and status=0 ";
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."video set pai_id = 0 where user_id=".intval($v['podcast_id'])." ";
$GLOBALS['db']->query($sql);
$pai_goods_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."pai_goods where id=".intval($v['id'])." ");
$sql = "update ".DB_PREFIX."goods set inventory=inventory+1 where id=".$pai_goods_info['goods_id']."";
$GLOBALS['db']->query($sql);//流拍,减去的库存增加回去
//退回保证金
$pai_id=intval($v['id']);
$time=NOW_TIME;
$user_list = $GLOBALS['db']->getAll("SELECT id,user_id,bz_diamonds,status,pai_status FROM ".DB_PREFIX."pai_join WHERE pai_id=".$pai_id);
$user_ids=array();
foreach ( $user_list as $k1 => $v1 )
{
$user_ids[]=$v1['user_id'];
//退还保证金 bz_diamonds 不为超时即退保证金
if (intval($v1['status'])==0&&intval($v1['pai_status'])!=3) {
fanwe_require(APP_ROOT_PATH.'/mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$sql = "update ".DB_PREFIX."user set diamonds = diamonds + ".intval($v1['bz_diamonds'])." where id = ".intval($v1['user_id']);
$GLOBALS['db']->query($sql);
user_deal_to_reids(array(intval($v1['user_id'])));
$account_diamonds = $user_redis->getOne_db(intval($v1['user_id']), 'diamonds');
$sql = "update ".DB_PREFIX."pai_join set status = 1 where id=".intval($v1['id'])." ";
$GLOBALS['db']->query($sql);
//会员账户 钻石变更日志表
$diamonds_log_data = array(
'pai_id' => $pai_id,
'user_id' => intval($v1['user_id']),
'diamonds'=>intval($v1['bz_diamonds']),//变更数额
'account_diamonds'=>$account_diamonds,//账户余额
'memo' =>$pai_goods_info['name'].'退还保证金',//备注
'create_time' => $time,
'create_date' => to_date($time,'Y-m-d H:i:s'),
'create_time_ymd' => to_date($time,'Y-m-d'),
'create_time_y' => to_date($time,'Y'),
'create_time_m' => to_date($time,'m'),
'create_time_d' => to_date($time,'d'),
'type' =>1,//1 提交保证金
);
$GLOBALS['db']->autoExecute(DB_PREFIX."user_diamonds_log",$diamonds_log_data);
//写入用户日志
$data = array();
$data['diamonds'] = intval($v1['bz_diamonds']);
$param['type'] = 8;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4表示保证金操作 5表示竞拍模块消费 6表示竞拍模块收益 8竞拍记录
$log_msg = $pai_goods_info['name'].'退还保证金';//备注
account_log_com($data,intval($v1['user_id']),$log_msg,$param);
}else if(intval($v1['status'])==0&&intval($v1['pai_status'])==3){
$sql = "update ".DB_PREFIX."pai_join set status = 2 where id=".intval($v1['id'])." ";
$GLOBALS['db']->query($sql);
}
}
$video_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."video where user_id=".intval($v['podcast_id'])." and live_in=1");
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
$video_redis = new VideoRedisService();
$video_data=array();
$video_data['pai_id']=0;
$re = $video_redis->update_db(intval($video_info['id']),$video_data);
//流拍房间内推送
$ext = array();
$ext['type'] = 27;
$ext['room_id'] = intval($video_info['id']);
$ext['pai_id'] = $data['pai_id'];
$ext['post_id'] = intval($v['podcast_id']);
$ext['out_type'] = 0;
$ext['desc'] = "很遗憾,".$v['name']."竞拍流拍";
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$fields = array('head_image','user_level','v_type','v_icon','nick_name');
$ext['user'] = $user_redis->getRow_db(intval($v['podcast_id']),$fields);
$ext['user']['user_id'] = intval($v['podcast_id']);
$ext['user']['head_image'] = get_spec_image($ext['user']['head_image']);
$ext['user']['nick_name'] = emoji_decode($ext['user']['nick_name']);
#构造高级接口所需参数
$tim_data=array();
$tim_data['ext']=$ext;
$tim_data['podcast_id']=strim($v['podcast_id']);
$tim_data['group_id']=strim($video_info['group_id']);
get_tim_api($tim_data);
/*
$msg_content = array();
//创建array 所需元素
$msg_content_elem = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext),
'Desc' => '',
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content, $msg_content_elem);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret = $api->group_send_group_msg2(intval($v['podcast_id']), intval($video_info['group_id']), $msg_content);
*/
}
}
}
/*
* 拍卖订单 下单
* $data = array("pai_id"=>$pai_id,"user_id"=>$user_id);
*/
function deal_pai_do_order($data){
return FanweServiceCall("pai_podcast","create_order",$data);
}
/*
* 拍卖订单 状态修改(暂行)
* 查询所有status位2.3的订单
* 2超时,未发货 超过约会时间,进入5,退款流程
* 3超时,未收货 超过时间7天自动更新确认
*
*
*/
function deal_pai_order_status(){
$order_list=$GLOBALS['db']->getAll("select * from ".DB_PREFIX."goods_order where order_source='local' and order_type='pai' and order_status=3 and refund_platform=0 and order_status_time-1+".MAX_PODCAST_CONFIRM_TIME." <".NOW_TIME);
if ($order_list) {
//$sql = "UPDATE ".DB_PREFIX."goods_order SET order_status=7 ,order_status_time=".NOW_TIME." WHERE order_source='local' and order_type='pai' and order_status=3 and order_status_time+".MAX_USER_CONFIRM_TIME." <".NOW_TIME;
//$GLOBALS['db']->query($sql);
foreach($order_list as $k=>$v){
$sql = "UPDATE ".DB_PREFIX."goods_order SET order_status=7 ,order_status_time=".NOW_TIME." WHERE id=".intval($v['id']);
$GLOBALS['db']->query($sql);
$to_podcast_id=intval($v['podcast_id']);
$podcast_ticket=intval($v['podcast_ticket']);
$pai_id=intval($v['pai_id']);
$user_id=intval($v['viewer_id']);
$sql = "update ".DB_PREFIX."pai_goods set order_status = 7 where id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."pai_join set order_status = 7 where user_id=".$user_id." and pai_id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$pai_info=$GLOBALS['db']->getRow("select * from ".DB_PREFIX."pai_goods where id=".$pai_id);
//主播获得竞拍收益
fanwe_require(APP_ROOT_PATH.'/mapi/lib/redis/BaseRedisService.php');
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$sql = "update ".DB_PREFIX."user set ticket = ticket + ".$podcast_ticket." where id = ".$to_podcast_id;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($to_podcast_id));
//写入用户日志
$data = array();
$data['ticket'] = $podcast_ticket;
$param['type'] = 8;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4表示保证金操作 5表示竞拍模块消费 6表示竞拍模块收益 8竞拍记录
$log_msg = $pai_info['name'].'竞拍收益';//备注
account_log_com($data,intval($to_podcast_id),$log_msg,$param);
//分销功能 计算抽成
if(defined('OPEN_DISTRIBUTION')&&OPEN_DISTRIBUTION==1){
$total_ticket=$podcast_ticket;
$m_config = load_auto_cache("m_config");//初始化手机端配置
$table = DB_PREFIX.'distribution_log';
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$to_user_id = $user_redis->getOne_db($user_id,'p_user_id');//用户总的:印票数
$ticket = 0;
$result = 0;
if(intval($to_user_id)>0&&intval($m_config['distribution'])==1&&$user_id>0){
$ticket = round($m_config['distribution_rate']*0.01*$total_ticket,1);
$sql = "select id from ".$table." where to_user_id = ".$to_user_id." and from_user_id = ".$user_id;
$distribution = $GLOBALS['db']->getOne($sql);
$distribution_id = $distribution['id'];
if(intval($distribution_id)>0){
$sql = "update ".$table." set ticket = ticket + ".$ticket." where id = ".$distribution_id;
$GLOBALS['db']->query($sql);
if($GLOBALS['db']->affected_rows()) $result = 1;
}else{
//插入:分销日志
$video_prop = array();
$video_prop['from_user_id'] = $user_id;
$video_prop['to_user_id'] = $to_user_id;
$video_prop['create_date'] = "'".to_date(NOW_TIME,'Y-m-d')."'";
$video_prop['ticket'] = $ticket;
$video_prop['create_time'] = NOW_TIME;
$video_prop['create_ym'] = to_date($video_prop['create_time'],'Ym');
$video_prop['create_d'] = to_date($video_prop['create_time'],'d');
$video_prop['create_w'] = to_date($video_prop['create_time'],'W');
//将日志写入mysql表中
$field_arr = array('from_user_id', 'to_user_id','create_date','ticket', 'create_time','create_ym','create_d','create_w');
$fields = implode(",",$field_arr);
$valus = implode(",",$video_prop);
$sql = "insert into ".$table."(".$fields.") VALUES (".$valus.")";
$GLOBALS['db']->query($sql);
$result = $GLOBALS['db']->insert_id();
}
if(intval($result)>0){
$sql = "update ".DB_PREFIX."user set ticket = ticket + ".$ticket." where id = ".$to_user_id;
$GLOBALS['db']->query($sql);
}
}
}
$user_ids=array();
$user_ids[]=$to_podcast_id;
$user_ids[]=intval($v['viewer_id']);
$info = $GLOBALS['db']->getRow("SELECT pg.* FROM ".DB_PREFIX."pai_goods as pg WHERE pg.id=".$pai_id);
$content="竞拍:‘".$info['name']."’ 已自动确认完成!";
$rs=FanweServiceCall("message","send",array("send_type"=>'viewer_to_over_tryst',"user_ids"=>$user_ids,"content"=>$content));
}
}
$order_list_2=$GLOBALS['db']->getAll("select * from ".DB_PREFIX."goods_order where order_source='local' and order_type='pai' and order_status=2 and refund_platform=0 and order_status_time-1+".MAX_USER_CONFIRM_TIME." <".NOW_TIME);
if ($order_list_2) {
//未确认自动退款
/*
foreach($order_list_2 as $k=>$v){
$sql = "UPDATE ".DB_PREFIX."goods_order SET order_status=5 ,order_status_time=".NOW_TIME." ,refund_buyer_status=1 WHERE id=".intval($v['id']);
$GLOBALS['db']->query($sql);
$pai_id=intval($v['pai_id']);
$user_id=intval($v['viewer_id']);
$sql = "update ".DB_PREFIX."pai_goods set order_status = 5 where id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."pai_join set order_status = 5 where user_id=".$user_id." and pai_id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$user_ids=array();
$user_ids[]=intval($v['podcast_id']);
$user_ids[]=intval($v['viewer_id']);
$info = $GLOBALS['db']->getRow("SELECT pg.* FROM ".DB_PREFIX."pai_goods as pg WHERE pg.id=".$pai_id);
$content="竞拍:‘".$info['name']."’ 进入退款流程!";
$rs=FanweServiceCall("message","send",array("send_type"=>'to_refund',"user_ids"=>$user_ids,"content"=>$content));
}
*/
//未确认自动确认
foreach($order_list_2 as $k=>$v){
$sql = "UPDATE ".DB_PREFIX."goods_order SET order_status=3 ,order_status_time=".NOW_TIME." ,refund_buyer_status=1 WHERE id=".intval($v['id']);
$GLOBALS['db']->query($sql);
$pai_id=intval($v['pai_id']);
$user_id=intval($v['viewer_id']);
$sql = "update ".DB_PREFIX."pai_goods set order_status = 3 where id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$sql = "update ".DB_PREFIX."pai_join set order_status = 3 where user_id=".$user_id." and pai_id=".$pai_id." ";
$GLOBALS['db']->query($sql);
$user_ids=array();
$user_ids[]=intval($v['viewer_id']);
$info = $GLOBALS['db']->getRow("SELECT pg.* FROM ".DB_PREFIX."pai_goods as pg WHERE pg.id=".$pai_id);
$content="主播‘".$info['podcast_name']."’已确认完成‘".$info['name']."’";
$rs=FanweServiceCall("message","send",array("send_type"=>'podcast_to_over_tryst',"user_ids"=>$user_ids,"content"=>$content));
}
}
$order_list_3=$GLOBALS['db']->getAll("select * from ".DB_PREFIX."goods_order where order_source='local' and order_type='shop' and order_status=1 and refund_platform=0 and create_time-1+".MAX_PAI_PAY_TIME." <".NOW_TIME);
if($order_list_3){
foreach($order_list_3 as $key =>$value){
if($value['is_p'] == 0){
$sql = "UPDATE ".DB_PREFIX."goods SET inventory=inventory+".intval($value['number'])." WHERE id=".intval($value['goods_id']);
$GLOBALS['db']->query($sql);//增加库存
}
$sql = "UPDATE ".DB_PREFIX."goods_order SET order_status=6 ,order_status_time=".NOW_TIME." WHERE id=".intval($value['id']);
$GLOBALS['db']->query($sql);
$user_ids=array();
$user_ids[]=intval($value['viewer_id']);
$info = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."goods WHERE id=".intval($value['goods_id']));
$content="您购买的商品".$info['name']."超时未付款,已自动取消订单.";
$rs=FanweServiceCall("message","send",array("send_type"=>'podcast_to_over_tryst',"user_ids"=>$user_ids,"content"=>$content));
}
}
}
//-------------家族收益处理-------------
/**
* @ param int $user_id 主播ID
* @ param int $family_id 家族ID
* @ param float $family_income 家族收益
* @ param int $video_id 直播ID
*/
function family_receipts($user_id,$family_id,$family_income,$video_id=0){
$sql = "select f.id as family_id,fj.id as join_id,f.status as family_status,f.user_id from ".DB_PREFIX."family_join as fj left join ".DB_PREFIX."family as f on f.id = fj.family_id where fj.status =1 and fj.user_id = ".$user_id." and fj.family_id =".$family_id;
$family_info = $GLOBALS['db']->getRow($sql);
if($family_info['join_id']>0&&$family_info['family_status']==1&&$family_info['family_id']>0){
if($family_income) {
//增加:家族收益
$sql = "update " . DB_PREFIX . "family set contribution = contribution + " . $family_income . " where id = " . $family_id;
$GLOBALS['db']->query($sql);
//将家族收益汇入家族长
$sql = "update " . DB_PREFIX . "user set ticket = ticket + " . $family_income . " where id = " . $family_info['user_id'];
$status = $GLOBALS['db']->query($sql);
user_deal_to_reids(array($family_info['user_id']));
$m_config = load_auto_cache("m_config");//初始化手机端配置
if(intval($m_config['family_profit_platform'])==0){
$sql = "update " . DB_PREFIX . "user set refund_ticket = refund_ticket + " . $family_income . " where id = " . $user_id . " and ticket > refund_ticket + " . $family_income;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($user_id));
if($status) {
//写入用户日志
$data = array();
$data['ticket'] = intval($family_income);
$data['video_id'] = intval($video_id) > 0 ? $video_id : 0;
$param['type'] = 4;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4 扣除家族收益
$log_msg = '扣除家族收益' . $data['ticket'] . '印票';
account_log_com($data, $user_id, $log_msg, $param);
}
}
if($status){
$log_msg = '收取家族收益'.$data['ticket'].'印票';
account_log_com($data,$family_info['user_id'],$log_msg,$param);
}
return true;
}
return false;
}else{
return false;
}
}
//-------------商城相关-------------
//第三方商城接口
function third_interface($user_id,$url,$args=array()){
fanwe_require(APP_ROOT_PATH.'system/saas/SAASAPIClient.php');
$appid = FANWE_APP_ID_YM;
$appsecret = FANWE_AES_KEY_YM;
$client = new SAASAPIClient($appid, $appsecret);
$user_info = $GLOBALS['db']->getRow("SELECT id,mobile,apns_code,device_type FROM " . DB_PREFIX . "user WHERE id=".$user_id);
// 设置头部参数
$head_args = array();
$head_args['userId']=$user_info['id'];
$head_args['mobile']=$user_info['mobile'];
/*$client_args = array();
$client_args['ios_uuid']='';
$client_args['android_imei']='';
if ($user_info['device_type']==1) {
$client_args['android_imei']=$user_info['apns_code'];
}elseif ($user_info['device_type']==2) {
$client_args['ios_uuid']=$user_info['apns_code'];
}
$client_args['app_terminal']=$user_info['device_type'];
$client_args['app_channel']='';
$head_args['client']=$client_args;*/
// 设置请求参数(根据不同业务需要设置)
$args =array_merge($head_args,$args);
$ret = $client->invoke($url, $args);
return $ret;
}
//o2o商城
function third_o2o_mall($url,$args=array()){
fanwe_require(APP_ROOT_PATH.'system/saas/SAASAPIClient.php');
$appid = FANWE_APP_ID_YM;
$appsecret = FANWE_AES_KEY_YM;
$client = new SAASAPIClient($appid, $appsecret);
$ret = $client->invoke($url,$args);
return $ret;
}
//第三方商城接口----竞拍商品数量
function good_number($user_id)
{
$ret=third_interface($user_id,'http://gw1.yimile.cc/V1/Commodity.json?action=GetUserDistributionCommodityQuantity');
$data=array();
if($ret['code'] == 0){
$data=$ret['data'];
return $data['commodityQuantity'];
}else{
return 0;
}
}
//h5链接
function go_h5($user_id,$url,$args=array(),$type=0)
{
$user_info = $GLOBALS['db']->getRow("SELECT id,mobile,apns_code,device_type FROM " . DB_PREFIX . "user WHERE id=".$user_id);
// 设置头部参数
$head_args = array();
$head_args['userId']=$user_info['id'];
$head_args['mobile']=$user_info['mobile'];
// 设置请求参数(根据不同业务需要设置)
$args =array_merge($head_args,$args);
fanwe_require(APP_ROOT_PATH.'system/saas/SAASAPIClient.php');
$appid = FANWE_APP_ID_YM;
$appsecret = FANWE_AES_KEY_YM;
$client = new SAASAPIClient($appid, $appsecret);
if($type == 0){
$url = $url.'?_saas_params='.base64_encode(json_encode($client->makeRequestParameters($args)));
}else{
$url = $url.'&_saas_params='.base64_encode(json_encode($client->makeRequestParameters($args)));
}
return $url;
}
//第三方商城--竟拍管理订单详情接口
function auction_order_detail($order_sn){
$root =array();
$user_id = intval($GLOBALS['user_info']['id']);
if ($user_id == 0) {
$root['status'] = 10007;
$root['error'] = "请先登录";
api_ajax_return($root);
}
$head_args['orderNo']=$order_sn;
$ret=third_interface($user_id,'http://gw1.yimile.cc/V1/Order.json?action=AuctionOrderDetail',$head_args);
if($ret['code'] == 0){
$root['status']=1;
if($ret['data']['orderInfo']['consignDate'] != ''){
$root['time'] = $ret['data']['orderInfo']['consignDate'];
}else{
$root['time'] = 0;
}
$express = array();
if($ret['data']['express'] != ''){
$express['express_no'] = $ret['data']['express']['expressNo'];
$express['express_detail'] = $ret['data']['express']['expressDetail'];
$express['express_time'] = $ret['data']['express']['expressTime'];
}
$root['express'] = $express;
$shopinfo = array();
if($ret['data']['shopInfo'] != ''){
$shopinfo['shop_id'] = $ret['data']['shopInfo']['shopId'];
$shopinfo['shop_name'] = $ret['data']['shopInfo']['shopName'];
$shopinfo['shop_qq'] = $ret['data']['shopInfo']['shopQQ'];
}
$root['shopinfo'] = $shopinfo;
}else{
$root['error']="获取失败";
}
return $root;
}
//第三方商城----竟拍保证金获取用户地址
function get_user_addressdetail($user_id){
// 调用服务
$ret=third_interface($user_id,'http://gw1.yimile.cc/V1/User.json?action=GetUserAddressDetail');
$taxe =array();
if($ret['code'] == 0){
$taxe['id'] = $ret['data']['userAddressId'];
$taxe['user_id'] = $user_id;
$taxe['consignee'] = $ret['data']['consignee'];
$taxe['consignee_mobile'] = $ret['data']['mobile'];
if($ret['data']['regionAddress'] != ''){
$sheng = explode("省",$ret['data']['regionAddress']);
if($sheng[1] == ''){
$shi = explode("市",$sheng[0]);
$qu = explode("区",$shi[1]);
}else{
$shi = explode("市",$sheng[1]);
$qu = explode("区",$shi[1]);
}
if($sheng[1] == ''){
$taxe['consignee_district'] = array('province'=>'','city'=>$shi[0].'市','area'=>$qu[0].'区');
}else{
$taxe['consignee_district'] = array('province'=>$sheng[0].'省','city'=>$shi[0].'市','area'=>$qu[0].'区');
}
}else{
$taxe['consignee_district'] = array('province'=>'','city'=>'','area'=>'');
}
$taxe['consignee_address'] = $ret['data']['address'];
$taxe['is_default'] = 0;
$taxe['create_time'] = 0;
}
return $taxe;
}
//第三方商城--竟拍订单提交
function create_auction_order($user_id,$goods_id,$nick_name,$zbuser_id,$zbmobile){
$root =array();
$head_args['commodityId'] = $goods_id;
$head_args['nickName'] = $nick_name;
$head_args['zbUserId'] = $zbuser_id;
$head_args['zbMobile'] = $zbmobile;
$ret=third_interface($user_id,'http://gw1.yimile.cc/V1/Order.json?action=CreateAuctionOrder',$head_args);
if($ret['code'] == 0){
$root['status']=1;
$root['orderNo'] = $ret['data']['orderNo'];
$root['totalPayPrice'] = $ret['data']['totalPayPrice'];
}else{
$root['error']="获取失败";
}
return $root;
}
function family_receipts1($video_id,$user_id,$video){
$video_id = intval($video_id);
$user_id = intval($user_id);
if($video_id==0||$user_id==0){
return ;
}
$family_id = $GLOBALS['db']->getOne("select family_id from ".DB_PREFIX."user where id = ".$user_id, true, true);
if($family_id > 0)
{
$m_config = load_auto_cache("m_config");//初始化手机端配置
$family_income = 0;
//判断是否扣除过
$user_log_id = $GLOBALS['db']->getOne("select id from ".DB_PREFIX."user_log where user_id = ".$user_id." and video_id=".intval($video_id));
if($m_config['profit_ratio']>0&&intval($user_log_id)==0){
$family_income = intval(intval($video['vote_number'])*0.01*$m_config['profit_ratio']);
$result = family_receipts($user_id,$family_id,$family_income,$video_id);
if($result){
$video['vote_number'] = $video['vote_number']-$family_income;
}
}
$family_score = $family_income;
//合并贡献收益 判断,用户当前等级积分
$cte = floatval($m_config['contribution_to_experience']);
if ($cte > 0){
$family_score += $family_income * $cte;
}
$video_time = (NOW_TIME - $video["begin_time"]);
//合并直播时长 判断,用户当前等级积分
$vte = floatval($m_config['videotime_to_experience']);
if ($vte > 0){
$family_score += $video_time * $vte;
}
$sql = "update ".DB_PREFIX."family set video_time = video_time + ".$video_time.",score = score + ".$family_score." where status=1 and id = " . $family_id;
$GLOBALS['db']->query($sql);
$family_info = $GLOBALS['db']->getRow("SELECT id as family_id,family_level,video_time,score FROM " . DB_PREFIX . "family WHERE id=" . $family_id . " and status=1", true, true);
family_level_syn($family_info);
}
}
//-------------公会无抽成模式---------------
/**
* @param $video 直播结束相关信息
* @return bool
*/
function society_receipts($video){
if (intval($video['vote_number']) <= 0){
return false;
}
//公会的收益
$society_income = intval($video['vote_number']);
$user_info = $GLOBALS['db']->getRow("select society_id,society_settlement_type,society_chieftain from ".DB_PREFIX."user where id=".$video['user_id']);
$society_info = $GLOBALS['db']->getRow("select user_id,status from ".DB_PREFIX."society where id=".$user_info['society_id']);
//判断是否扣除过
$user_log_id = $GLOBALS['db']->getOne("select id from ".DB_PREFIX."user_log where type=10 and user_id = ".$video['user_id']." and video_id=".intval($video['id']));
if ($user_info['society_id'] > 0 && $society_info['status'] == 1 && intval($user_log_id) == 0 ){
//主播的收益加到公会中
$pInTrans = $GLOBALS['db']->StartTrans();
try
{
//收益添加到公会收益中
$GLOBALS['db']->query("update ".DB_PREFIX."society set chairman_earnings=chairman_earnings+".$society_income." where id=".$user_info['society_id']);
if($user_info['society_chieftain'] == 0){//排除会长
//将用户上交的公会的印票计入已提现
$sql = "update ".DB_PREFIX."user set refund_ticket = refund_ticket + ".$society_income.",society_ticket=society_ticket+".$society_income." where id = ".$video['user_id']." and ticket >=" .$society_income;
$status = $GLOBALS['db']->query($sql);
user_deal_to_reids(array($video['user_id']));
}else{
$status = true;
}
if ($status){
if($user_info['society_chieftain'] == 0){//排除会长
//将收益汇入公会长
$sql_chieftain = "update ".DB_PREFIX."user set ticket = ticket + ".$society_income." where id = ".$society_info['user_id'];
$GLOBALS['db']->query($sql_chieftain);
user_deal_to_reids(array($society_info['user_id']));
//写入会长日志
earnings_log($society_income, $user_info['society_id'], $video['user_id'], 10, '获取收益:公会成员'.$video['user_id'].'贡献'.$society_income.'印票', $society_info['user_id'],$video['id']);
}
if($user_info['society_chieftain']){
$contribution_id = $society_info['user_id'];
}else{
$contribution_id = 0;
}
//写入用户日志
earnings_log($society_income, $user_info['society_id'], $contribution_id, 10, '直播获取收益'.$society_income.'印票', $video['user_id'],$video['id']);
//公会等级积分的写入
society_level_syn($society_income, $video["begin_time"], $user_info['society_id']);
$m_config = load_auto_cache("m_config");//初始化手机端配置
//记录到公会主播收益表
$society_data = array();
$society_earning_id = $GLOBALS['db']->getOne('select id from '.DB_PREFIX."society_earning where video_id=".$video['id']);//是否已经记录过
if (!$society_earning_id && $user_info['society_id']>0){//收益还未记录且主播是公会成员
$society_data['video_id'] = $video['id'];
$society_data['user_id'] = $video['user_id'];
$society_data['vote_number'] = $video['vote_number'];
$society_data['begin_time'] = $video['begin_time'];
$society_data['end_time'] = $video['end_time'] ? $video['end_time'] : NOW_TIME;
$society_data['timelen'] = $society_data['end_time'] - $society_data['begin_time'];
$society_data['society_id'] = $user_info['society_id'];
$society_data['end_date'] = to_date($society_data['end_time'],'Y-m-d');
$society_data['end_Y'] = to_date($society_data['end_time'],'Y');
$society_data['end_m'] = to_date($society_data['end_time'],'m');
$society_data['end_d'] = to_date($society_data['end_time'],'d');
$society_data['end_w'] = to_date($society_data['end_time'],'W');
$society_data['society_settlement_type'] = $m_config['society_pattern'];
$society_data['society_number'] = $society_income;
$GLOBALS['db']->autoExecute(DB_PREFIX . "society_earning", $society_data);
}
}
//提交事务
$GLOBALS['db']->Commit($pInTrans);
}catch(Exception $e){
//异常回滚
$GLOBALS['db']->Rollback($pInTrans);
//写入用户日志
earnings_log($society_income, $user_info['society_id'], $contribution_id, 10, '直播获取收益'.$society_income.'印票,失败', $video['user_id'],$video['id']);
//写入会长日志
earnings_log($society_income, $user_info['society_id'], $video['user_id'], 10, '获取收益:公会成员'.$video['user_id'].'贡献'.$society_income.'印票,失败', $society_info['user_id'],$video['id']);
}
//-----事务结束-----
}
return;
}
//-------------平台收益,针对无公会人员-------------
/**
* @ param int $user_id 主播ID
* @ param float $m_config 配置信息
* @ param int $video 直播信息
* @ param int $video_id 直播ID
*/
function platform_receipts($user_id,$m_config,$video,$video_id=0){
$society_income = 0;
$user_log_id = $GLOBALS['db']->getOne("select id from ".DB_PREFIX."user_log where type<>7 and user_id = ".$user_id." and video_id=".intval($video_id));
if($m_config['society_platform_earnings']>=0 && intval($user_log_id)==0 && $m_config['society_platform_earnings']<100 && $video['vote_number']>0){
//写入用户日志
earnings_log($video['vote_number'], 0, 0, 11, '直播获取收益' . intval($video['vote_number']) . '印票', $user_id,$video_id);
if($m_config['society_platform_earnings']==0){//平台不抽成
return true;
}
$society_income = intval(intval($video['vote_number'])*0.01*$m_config['society_platform_earnings']);
//增加收益更新到用户上
//$sql = "update " . DB_PREFIX . "user set ticket = ticket + ".$video['vote_number'].",refund_ticket = refund_ticket + " . $society_income . " where id = " .$user_id. " and ticket > refund_ticket + " . $society_income;
$sql = "update " . DB_PREFIX . "user set refund_ticket = refund_ticket + " . $society_income . " where id = " .$user_id. " and ticket > refund_ticket + " . $society_income;
$status = $GLOBALS['db']->query($sql);
user_deal_to_reids(array($user_id));
if($status) {
//写入用户日志
earnings_log($society_income, 0, 0, 11, '扣除平台收益' . $society_income . '印票', $user_id);
return true;
}else{
return false;
}
}
}
//-------------公会有抽成模式,会长收益-------------
/**
* @ param int $user_id 主播ID
* @ param int $society_id 公会ID
* @ param float $society_income 直播结束所得收益
* @ param int $video_id 直播ID
*/
function society_receipts1($user_id,$society_id,$society_income,$vote_number,$video_id=0){
$sql = "select s.id as society_id,sa.id as apply_id,s.status as society_status,s.user_id from ".DB_PREFIX."society_apply as sa left join ".DB_PREFIX."society as s on s.id = sa.society_id where sa.status in(1,3) and sa.user_id = ".$user_id." and sa.society_id =".$society_id;
$society_info = $GLOBALS['db']->getRow($sql);
$society_chieftain = $GLOBALS['db']->getOne("select society_chieftain from ".DB_PREFIX."user where id=".$user_id);
if($society_info['apply_id']>0 && $society_info['society_status']==1 && $society_info['society_id']>0){
if($society_income) {
if($society_chieftain == 0){//排除会长自己
//增加:公会收益
$sql = "update " . DB_PREFIX . "society set contribution = contribution + " . $society_income . " where id = " . $society_id;
$GLOBALS['db']->query($sql);
//将公会收益汇给会长
$sql = "update " . DB_PREFIX . "user set ticket = ticket + " . $society_income . " where id = " . $society_info['user_id'];
$status = $GLOBALS['db']->query($sql);
user_deal_to_reids(array($society_info['user_id']));
}else{
//增加:公会收益
$sql = "update " . DB_PREFIX . "society set contribution = contribution + " . $vote_number . " where id = " . $society_id;
$GLOBALS['db']->query($sql);
}
if($society_chieftain){
$contribution_id = $user_id;
}else{
$contribution_id = 0;
}
//收益情况写入用户日志
earnings_log($vote_number, $society_id, $contribution_id, 8, '直播获取收益' . $vote_number . '印票', $user_id, $video_id);
$m_config = load_auto_cache("m_config");//初始化手机端配置
if(intval($m_config['society_profit_platform'])==0 && $society_chieftain == 0){//判断会长抽成是否由平台支付,0否1是
$sql = "update " . DB_PREFIX . "user set refund_ticket = refund_ticket + " . $society_income . " where id = " . $user_id . " and ticket > refund_ticket + " . $society_income;
$GLOBALS['db']->query($sql);
user_deal_to_reids(array($user_id));
//写入用户日志
earnings_log($society_income, $society_id, 0, 8, '扣除公会长抽成' . $society_income . '印票', $user_id, $video_id);
}
if($society_chieftain == 0){
//写入公会长日志
earnings_log($society_income, $society_id, $user_id, 8, '获取公会成员'.$user_id.':'.$society_income.'印票', $society_info['user_id'], $video_id);
}
return true;
}
return false;
}else{
return false;
}
}
//-------------公会等级积分-------------
/**
* @ param int $m_config 配置信息
* @ param int $user_id 用户ID
* @ param int $video_id 直播ID
* @ param array $video 直播信息
* @ param array $user_info 包含成员的 公会ID和会长标识
*/
function society_lv_jf($m_config,$user_id,$video_id,$video,$user_info){
$society_income = 0;
//判断是否扣除过
$user_log_id = $GLOBALS['db']->getOne("select id from ".DB_PREFIX."user_log where type=8 and user_id = ".$user_id." and video_id=".intval($video_id));
if($m_config['society_profit_ratio']>=0 && intval($user_log_id)==0 && $m_config['society_profit_ratio'] < 100){
if($m_config['society_profit_ratio'] == 0){
//写入用户日志
earnings_log($video['vote_number'], $user_info['society_id'], 0, 8, '直播获取收益' . intval($video['vote_number']) . '印票', $user_id, $video_id);
return true;
}
$society_income = intval(intval($video['vote_number'])*0.01*$m_config['society_profit_ratio']);
$result = society_receipts1($user_id,$user_info['society_id'],$society_income,$video['vote_number'],$video_id);
if($result){
//公会等级积分的写入
$society_score = intval($video['vote_number']);
society_level_syn($video['vote_number'], $video['begin_time'], $user_info['society_id']);
//记录到公会主播收益表
$society_data = array();
$society_earning_id = $GLOBALS['db']->getOne('select id from '.DB_PREFIX."society_earning where video_id=".$video['id']);//是否已经记录过
if (!$society_earning_id && $user_info['society_id']>0){//收益还未记录且主播是公会成员
$society_data['video_id'] = $video['id'];
$society_data['user_id'] = $video['user_id'];
$society_data['vote_number'] = $video['vote_number'];
$society_data['begin_time'] = $video['begin_time'];
$society_data['end_time'] = $video['end_time'] ? $video['end_time'] : NOW_TIME;
$society_data['timelen'] = $society_data['end_time'] - $society_data['begin_time'];
$society_data['society_id'] = $user_info['society_id'];
$society_data['end_date'] = to_date($society_data['end_time'],'Y-m-d');
$society_data['end_Y'] = to_date($society_data['end_time'],'Y');
$society_data['end_m'] = to_date($society_data['end_time'],'m');
$society_data['end_d'] = to_date($society_data['end_time'],'d');
$society_data['end_w'] = to_date($society_data['end_time'],'W');
$society_data['society_settlement_type'] = $m_config['society_pattern'];
$society_chieftain = $GLOBALS['db']->getOne("select society_chieftain from ".DB_PREFIX."user where id=$user_id");
if($society_chieftain){
$society_data['society_number'] = $society_score;
}else{
$society_data['society_number'] = $society_income;
}
$GLOBALS['db']->autoExecute(DB_PREFIX . "society_earning", $society_data);
}
}
}
}
//-------------公会等级积分写入-------------
/**
* @ param int $society_income 直播结束所得收益
* @ param number $begin_time 直播时长
* @ param int $society_id 公会ID
*/
function society_level_syn($society_income,$begin_time,$society_id)
{
$m_config = load_auto_cache("m_config");//初始化手机端配置
$society_score = 0;
//合并贡献收益 判断,用户当前等级积分
$cte = intval($m_config['society_lv_contribution']);
if ($cte > 0 && $cte < 100 ){
$society_score += $society_income * $cte * 0.01;
}
if($begin_time > 0){//区分私信送礼物
$video_time = (NOW_TIME - $begin_time);
//合并直播时长 判断,用户当前等级积分
$vte = intval($m_config['society_lv_videotime']);
if ($vte > 0 && $vte < 100 ){
$society_score += $video_time * $vte * 0.01;
}
}
if($cte > 0 || ($begin_time > 0 && $vte > 0)){
//积分写入
$GLOBALS['db']->query("update ".DB_PREFIX."society set score=score+".intval($society_score)." where id=".$society_id);
$society_info = $GLOBALS['db']->getRow("SELECT id as society_id,society_level,score FROM " . DB_PREFIX . "society WHERE id=" . $society_id . " and status=1", true, true);
//society_level_syn($society_info);
$society_score = $society_info['score'];
$society_level_info = load_auto_cache("society_level");
$society_level = null;
foreach($society_level_info as $v) {
// 两层关系即可
unset($society_level['next_level']);
$v['next_level'] = $society_level;
$society_level = $v;
if ($v['score'] <= intval($society_score)) {
break;
}
}
if($society_level)
{
$GLOBALS['db']->query("update ".DB_PREFIX."society set society_level = ".$society_level['level']." where id = ".$society_info['society_id']);
}
return $society_level;
}
}
//判断用户是否参与众筹
function is_ordered($room_id,$user_id){
$is_order = 0;
$deal_id = $GLOBALS['db']->getOne("select deal_id from " . DB_PREFIX . "edu_video_info where video_id= " . $room_id );
if($deal_id){
$deal_order_count = $GLOBALS['db']->getOne("select count(*) from " . DB_PREFIX . "edu_deal_order where deal_id= " . $deal_id . " and order_status=1 and is_refund=0 and user_id =".$user_id);
if($deal_order_count > 0){
$is_order = 1;
}
}
return $is_order;
}
/**
* 返回用户等级信息,当前经验和下一级所需经验
* @param $user_id
* @return mixed
*/
function get_level_up_grade($user_id){
fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
$user_redis = new UserRedisService();
$user_data = $user_redis->getRow_db($user_id,array('id','score','online_time','user_level'));
user_leverl_syn($user_data);
$level=$GLOBALS['db']->getRow("select ul.level as user_level, ul.score as l_score from ".DB_PREFIX."user_level as ul where ul.level=".intval($user_data['user_level']));
$m_config = load_auto_cache("m_config");
$level['u_score'] = $user_data['score']+floor($user_data['online_time']*floatval($m_config['onlinetime_to_experience']));
$level['up_score'] = $GLOBALS['db']->getOne("select score from ".DB_PREFIX."user_level where level=".intval($user_data['user_level']+1));
if(intval($level['up_score'])<=0){
$l_up_score = $GLOBALS['db']->getOne("select score from ".DB_PREFIX."user_level where level>".intval($user_data['user_level']+1));
if($l_up_score['score']>0){
$level['up_score'] =$l_up_score['score'];
}else{
$level['up_score'] ='满级';
}
}
$level['u_score'] = intval($level['u_score']);
$level['up_score'] = intval($level['up_score']);
return $level;
}
/**
* //暮橙定制: IM推送用户等级和经验信息
* @param $user_id
* @return bool
*/
function push_level_info($user_id){
$m_config = load_auto_cache("m_config");
$system_user_id =$m_config['tim_identifier'];//系统消息
$level = get_level_up_grade($user_id);
$level_info = array();
$level_info['user_level'] = $level['user_level'];
if($level['up_score']=='满级'){
$level_info['score_msg'] = "升级还需0".$m_config['ticket_name'];
}else {
$score = $level['up_score'] - $level['u_score'];
$level_info['score_msg'] = "升级还需".$score.$m_config['ticket_name'];
}
$ext2 = array();
$ext2['type'] = 61; //上海暮橙定制: 用户送礼给主播,系统返回推送用户等级和升级经验信息
$ext2['level_info'] = $level_info;
$msg_content2 = array();
//创建array 所需元素
$msg_content_elem2 = array(
'MsgType' => 'TIMCustomElem', //自定义类型
'MsgContent' => array(
'Data' => json_encode($ext2),
'Desc' => ''
)
);
//将创建的元素$msg_content_elem, 加入array $msg_content
array_push($msg_content2, $msg_content_elem2);
fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
$api = createTimAPI();
$ret2 = $api->openim_send_msg2($system_user_id, (string)$user_id, $msg_content2);
if($ret2['ActionStatus'] != 'OK') {
//二次处理
$ret2 = $api->openim_send_msg2($system_user_id, (string)$user_id, $msg_content2);
}
if($ret2['ActionStatus'] == 'OK'){
return true;
}else{
return false;
}
}
/**
* //公会收益日志
* @param int $ticket 印票数
* @param int $type 类型
* @param string $log 日志内容
* @param int $user_id 用户id
* @param int $society_id 公会id
* @param int $contribution_id 会长抽取收益的成员id
* @param int $video_id 直播间id
* */
function earnings_log($ticket,$society_id,$contribution_id,$type,$log,$user_id,$video_id=0){
$data = array();
$data['ticket'] = $ticket;
$data['society_id'] = $society_id;
$data['contribution_id'] = $contribution_id;//会长记录
$data['video_id'] = $video_id;
$param['type'] = $type;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4 分享获得印票 5 登录赠送积分 6 观看付费直播 7游戏收益8扣除公会收益9分销收益10公会长收益11平台收益 12公会操作13私信收入
$log_msg = $log;
account_log_com($data,$user_id, $log_msg, $param);
}
/**
* 获取程序执行时间
* @param int $type 0:初次执行时间 1:最终执行时间
*/
function get_runtime($pram,$type=0){
//get_runtime(array(__FILE__,__LINE__,__METHOD__),1);
if($type==0){
global $get_runtime_t1;
$get_runtime_t1 = microtime(true);
log_file('文件名:'.$pram[0].',行数:'.$pram[1].',方法:'.$pram[2].',首次执行时间'.$get_runtime_t1.'秒','run_time');
}else{
$get_runtime_t1 = $GLOBALS['get_runtime_t1'];
$get_runtime_t2 = microtime(true);
log_file('文件名:'.$pram[0].',行数:'.$pram[1].',方法:'.$pram[2].',最后执行时间'.$get_runtime_t2.'秒','run_time');
log_file('文件名:'.$pram[0].',行数:'.$pram[1].',方法:'.$pram[2].',耗时'.floatval($get_runtime_t2-$get_runtime_t1).'秒','run_time');
}
}
?>