From 0f867666e7542b7983b80a8eea50739af5e132a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Thu, 27 Nov 2025 11:48:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=AD=E7=AD=BE=20=E6=94=B6=E7=A4=BC?= =?UTF-8?q?=E8=BF=94=E4=BD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Sign.php | 34 +++++++ application/api/model/Family.php | 21 +++- application/api/model/GiveGift.php | 11 ++- application/api/model/Sign.php | 124 ++++++++++++++++++++++-- application/api/model/UserWallet.php | 6 +- application/common/model/UserWallet.php | 10 +- 6 files changed, 188 insertions(+), 18 deletions(-) diff --git a/application/api/controller/Sign.php b/application/api/controller/Sign.php index 76046f3..397d198 100644 --- a/application/api/controller/Sign.php +++ b/application/api/controller/Sign.php @@ -65,4 +65,38 @@ class Sign extends BaseCom return V($reslut['code'], $reslut['msg'], $reslut['data']); } + + //免费续约 + public function free_re_sign() + { + $sign_user_id = input('user_id', 0); + if ($sign_user_id <= 0) { + return ['code' => 0, 'msg' => '参数错误']; + } + $reslut = model('Sign')->free_re_sign($this->uid, $sign_user_id); + return V($reslut['code'], $reslut['msg'], $reslut['data']); + } + + + //续签 + public function re_sign() + { + $sign_user_id = input('user_id', 0); + if ($sign_user_id <= 0) { + return ['code' => 0, 'msg' => '参数错误']; + } + $reslut = model('Sign')->re_sign($this->uid, $sign_user_id); + return V($reslut['code'], $reslut['msg'], $reslut['data']); + } + + + //才艺列表 + public function skill_list() + { + $skill_list = [ + '唱歌','脱口秀','口技','喊麦','相声' + ]; + return ['code' => 1, 'msg' => '成功', 'data' => $skill_list]; + } + } \ No newline at end of file diff --git a/application/api/model/Family.php b/application/api/model/Family.php index a356939..2049a8e 100644 --- a/application/api/model/Family.php +++ b/application/api/model/Family.php @@ -82,12 +82,12 @@ class Family extends Model $myFamily['group_owner_info']['nobility_image'] = $Nobility['play_image']; $myFamily['group_owner_info']['nickname_color'] = $Nobility['nick_name_color']; - $myFamily['group_members_num'] = db::name('vs_user_sign')->where(['parent_user_id' => $myFamily['user_id'],'end_time' => ['>',time()]])->count(); + $myFamily['group_members_num'] = db::name('vs_user_sign')->where(['parent_user_id' => $myFamily['user_id']])->count(); $myFamily['group_earnings'] = db::name('vs_user_sign_earnings')->where('user_id',$myFamily['user_id'])->sum('earnings'); $lists= db::name('vs_user_sign')->alias('a') ->join('user b','a.sign_user_id = b.id') - ->field('b.market_value,b.nickname,b.avatar,b.user_code,a.sign_user_id as user_id,a.type,a.end_time,a.sign_user_type') + ->field('b.is_online,b.market_value,b.nickname,b.avatar,b.user_code,a.sign_user_id as user_id,a.type,a.end_time,a.sign_user_type') ->where(['parent_user_id' => $myFamily['user_id'],'end_time' => ['>',time()]]) ->select(); if($lists){ @@ -117,7 +117,22 @@ class Family extends Model $lists[$k]['yesterday_earnings'] = db::name('vs_user_money_log') ->where(['user_id' => $v['user_id'],'money_type' => 2,'change_type' =>11,'createtime' => ['between',[strtotime(date('Y-m-d',strtotime('-1 day'))),strtotime(date('Y-m-d'))]]]) ->sum('change_value'); - + $lists[$k]['is_show_sign'] = $v['end_time'] - time() < 48*3600 ? 1 : 0; + $lists[$k]['sign_times'] = get_system_config_value('sign_times');//非首签签约时长 + $lists[$k]['sign_user_ratio'] = get_system_config_value('sign_user_ratio');//签约者身价的百分比 + //end_time 换算为天数,不足1天,按小时显示 + $remaining_time = $v['end_time'] - time(); + if ($remaining_time > 0) { + $days = floor($remaining_time / (24 * 3600)); + if ($days > 0) { + $lists[$k]['end_day'] = $days . '天'; + } else { + $hours = ceil($remaining_time / 3600); + $lists[$k]['end_day'] = $hours . '小时'; + } + } else { + $lists[$k]['end_day'] = '已过期'; + } } } diff --git a/application/api/model/GiveGift.php b/application/api/model/GiveGift.php index af7e134..d8faa39 100644 --- a/application/api/model/GiveGift.php +++ b/application/api/model/GiveGift.php @@ -202,6 +202,9 @@ class GiveGift extends Model $change_value = ceil($gift_price / ($coin_market_values[0] ?? 100) * ($coin_market_values[1] ?? 1)); model('api/MarketValue')->change($to_id,$change_value,0); + //收礼人是否被签约 给上级返佣 + model('api/Sign')->check_sign_gift($to_id,$gid,$num,$gift_price,$from_id); + //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼 if($from_type == 1 || $from_type == 2 || $from_type == 3 ||$from_type == 4 || $from_type == 6){ //增加收益并记录日志 @@ -908,8 +911,8 @@ class GiveGift extends Model // 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮 // 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换 // 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币, - //50-签约,51-签约失败退回,52-首次被签约收入,54-叛徒补偿 - if(in_array($change_type,[1,2,3,4,5,6,7,8,12,13,14,15,16,17,20])){ + //50-签约,51-签约失败退回,52-首次被签约收入,54-叛徒补偿,55-徒弟收礼返佣,56-续约 + if(in_array($change_type,[1,2,3,4,5,6,7,8,12,13,14,15,16,17,20,56])){ $room_ids = 0; }else{ $room_ids = $room_id; @@ -935,7 +938,7 @@ class GiveGift extends Model //增加用户金币类型 $in_types = [2,5,6,8,13,14,15,16,51]; //减少用户金币类型 - $out_types = [4,7,10,17,20,50]; + $out_types = [4,7,10,17,20,50,56]; if(in_array($change_type,$in_types)){ //增加用户金币 $res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setInc('coin',$money); @@ -951,7 +954,7 @@ class GiveGift extends Model } }elseif ($money_type == 2){//2钻石 //增加用户钻石类型 - $in_types = [9,11,12,18,19,21,52,54]; + $in_types = [9,11,12,18,19,21,52,54,55]; //减少用户钻石类型 $out_types = [3,14]; if(in_array($change_type,$in_types)){ diff --git a/application/api/model/Sign.php b/application/api/model/Sign.php index cbbf89b..acd587b 100644 --- a/application/api/model/Sign.php +++ b/application/api/model/Sign.php @@ -163,6 +163,7 @@ class Sign extends Model //查询签约用户的身份 是否是第一次被签 是否当前有签 $is_first_sign = db::name('vs_user_sign')->where('sign_user_id',$sign_user_id)->count(); $before_sign_user = null; + $is_sign = null; if($is_first_sign < 1){ //第一次被签平台抽成 $sign_app_ratio = get_system_config_value('first_sign_app_ratio'); @@ -172,14 +173,10 @@ class Sign extends Model $sign_app_ratio = get_system_config_value('sign_app_ratio'); //查找该用户是否在约 $sign_user_type = 1; - $is_sign = db::name('vs_user_sign')->where(['sign_user_id' => $sign_user_id])->select(); + $is_sign = db::name('vs_user_sign')->where(['sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find(); if($is_sign){ - foreach ($is_sign as $k => $v){ - if($v['end_time'] >= time()){ - $sign_user_type = 2; - $before_sign_user = $v['user_id']; - } - } + $sign_user_type = 2; + $before_sign_user = $is_sign['user_id']; } } //获取签约出价最高的 @@ -278,6 +275,15 @@ class Sign extends Model db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } + //上任签约信息修改 + if($is_sign){ + $result5 = db::name('vs_user_sign')->where(['id' => $is_sign['id']]) + ->update(['end_time' => time(),'type' => 3]); + if(!$result5){ + db::rollback(); + return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; + } + } } db::commit(); //给前端推送 @@ -307,4 +313,108 @@ class Sign extends Model return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } + + /* + * 收礼检查是否有被签约和在合约期内 给上级返佣 + * @param $user_id 用户id + * @param $gift_id 礼物id + * @param $gift_num 礼物数量 + * @param $gift_price 礼物价格 + * @param $room_id 房间id + */ + public function check_sign_gift($user_id,$gift_id,$gift_num,$gift_price,$room_id){ + //获取用户签约信息 + $sign_info = db::name('vs_user_sign')->where(['sign_user_id' => $user_id,'end_time' => ['>',time()]])->find(); + if(!$sign_info){ + return true; + } + $give_sign_ratio = get_system_config_value('give_sign_ratio'); + $earnings = $gift_price * $give_sign_ratio / 100; + $data = [ + 'user_id' => $sign_info['parent_user_id'], + 'sign_user_id' => $user_id, + 'gift_id' => $gift_id, + 'gift_num' => $gift_num, + 'earnings' => $earnings, + 'createtime' => time() + ]; + $result = db::name('vs_user_sign_earnings')->insert($data); + if($result){ + $result4 = model('api/GiveGift') -> change_user_cion_or_earnings_log($sign_info['parent_user_id'],$earnings,$room_id,2,55,'签约用户收礼返佣'); + if(!$result4){ + return true; + } + } + return true; + } + + + /* + * 免费续签 + * @param $user_id 用户id + * @param $sign_user_id 签约麦的用户id + */ + public function free_re_sign($user_id,$sign_user_id){ + $first_sign_info = db::name('vs_user_sign') + ->where(['sign_user_id' => $sign_user_id])->count(); + if($first_sign_info > 1){ + return ['code' => 0, 'msg' => '该用户已不满足免费续签条件', 'data' => null]; + } + $sign_info = db::name('vs_user_sign') + ->where(['user_id' => $user_id,'sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find(); + if(!$sign_info){ + return ['code' => 0, 'msg' => '您没有签约该用户或该用户已解约', 'data' => null]; + } + if($sign_info['type'] >= 3){ + return ['code' => 0, 'msg' => '免费续签次数已用完', 'data' => null]; + } + $end_time = $sign_info['end_time'] + 86400 * get_system_config_value('free_re_sign_day'); + $res = db::name('vs_user_sign')->where(['id' => $sign_info['id']])->update(['type' => $sign_info['type']+1,'end_time' => $end_time]); + if(!$res){ + return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; + } + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; + } + + + /* + * 续签 + * @param $user_id 用户id + * @param $sign_user_id 签约麦的用户id + */ + public function re_sign($user_id,$sign_user_id){ + $sign_info = db::name('vs_user_sign') + ->where(['user_id' => $user_id,'sign_user_id' => $sign_user_id,'end_time' => ['>',time()]])->find(); + if(!$sign_info){ + return ['code' => 0, 'msg' => '您没有签约该用户或该用户已解约', 'data' => null]; + } + //获取被签约用户当前身价 + $market_value = db::name('user')->where('id',$sign_user_id)->value('market_value'); + //获取系统配置的签约身价百分比 + $sign_market_value = get_system_config_value('sign_user_ratio'); + //获取系统配置非首签签约时长 + $sign_times = get_system_config_value('sign_times'); + + //获取签约者的金币 + $coin = db::name('user_wallet')->where('user_id',$user_id)->value('coin'); + if($coin < $market_value * $sign_market_value){ + return ['code' => 0, 'msg' => '您的金币不足', 'data' => null]; + } + $end_time = $sign_info['end_time'] + 86400 * $sign_times; + //开启事务 + db::startTrans(); + $res = db::name('vs_user_sign')->where(['id' => $sign_info['id']])->update(['type' => 1,'end_time' => $end_time]); + if(!$res){ + db::rollback(); + return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; + } + $res2 = model('api/GiveGift') -> change_user_cion_or_earnings_log($user_id,$market_value * $sign_market_value,0,2,56,'续约'); + if(!$res2){ + db::rollback(); + return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; + } + db::commit(); + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; + } + } \ No newline at end of file diff --git a/application/api/model/UserWallet.php b/application/api/model/UserWallet.php index 4c38115..33df180 100644 --- a/application/api/model/UserWallet.php +++ b/application/api/model/UserWallet.php @@ -51,16 +51,16 @@ class UserWallet extends Model // 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换 // 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益,20.发布头条扣除余额,21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币 //27.小时榜获得,28-新人充值好礼,32-发红包(金币),29-发红包(钻石),30-抢红包(金币),31-抢红包(钻石) 33-红包剩余退回(金币),34-红包剩余退回(钻石) - //50-签约 51-签约失败退回,52-首次被签约收入 53-师徒签到 54-叛徒补偿 + //50-签约 51-签约失败退回,52-首次被签约收入 53-师徒签到 54-叛徒补偿,55-徒弟收礼返佣,56-续约 if($gift_type == 1){ //1金币,2收益(钻石) if($in_out_type == 1){//1收入 $in_out_types = [2,5,6,8,13,14,15,16,22,23,26,27,30,28,33,51]; }elseif($in_out_type == 2){//2支出 - $in_out_types = [4,7,10,17,20,24,25,32,50]; + $in_out_types = [4,7,10,17,20,24,25,32,50,56]; } }elseif($gift_type == 2){ //1金币,2收益(钻石) if($in_out_type == 1){//1收入 - $in_out_types = [6,9,11,12,18,19,21,22,31,28,34,52,53,54]; + $in_out_types = [6,9,11,12,18,19,21,22,31,28,34,52,53,54,55]; }elseif($in_out_type == 2){//2支出 $in_out_types = [3,14,29]; } diff --git a/application/common/model/UserWallet.php b/application/common/model/UserWallet.php index 12d57f1..b29a9e7 100644 --- a/application/common/model/UserWallet.php +++ b/application/common/model/UserWallet.php @@ -102,6 +102,10 @@ class UserWallet extends Model const SIGN_MASTER_DAILY_RETURN = 53; //叛徒补偿 const BELIEVER_COMPENSATION = 54; + //被签约者收礼返佣给上级 + const SIGN_BE_SIGNED_INCOME = 55; + //续约 + const RENEWAL = 56; //金币支出类型数组 @@ -114,6 +118,7 @@ class UserWallet extends Model self::TRANSFER_COIN, self::RED_PACKET_COIN, self::SIGN, + self::RENEWAL, ]; //钻石支出类型数组 public $diamond_consumption_type_array = [ @@ -181,7 +186,10 @@ class UserWallet extends Model self::SIGN_FAILURE => '签约失败退回', self::FIRST_SIGN_INCOME => '首次被签约收入', self::SIGN_MASTER_DAILY_RETURN => '签约师傅每日返还', - self::BELIEVER_COMPENSATION => '解约补偿' + self::BELIEVER_COMPENSATION => '解约补偿', + self::SIGN_BE_SIGNED_INCOME => '被签约者收礼返佣给上级', + self::RENEWAL => '续约' + ]; if($type){ return $status[$type] ?? '';