where(['user_id1' => $from_user_id,'user_id2' => $to_user_id,'status' => 1])->find(); if(!$rees){ $rees = Db::name('user_cp_zone')->where(['user_id1' => $to_user_id,'user_id2' => $from_user_id,'status' => 1])->find(); } if($rees){ $this->addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $rees['id'], $num); return 0; } $cp_gift_id = explode(',', get_system_config_value('cp_gift_id')); if(!in_array($gift_id, $cp_gift_id)){ return 0; } //查询收礼人有没有给送礼人送过cp礼物 status:0-待回应,1-建交成功,2-已取消 $res = Db::name('user_cp_find')->where(['from_user_id' => $to_user_id, 'to_user_id' => $from_user_id,'status' => 0])->find(); if($res){ //创建推送信息1:回应送礼 并创建Cp空间, $data = [ 'from_user_id' => $from_user_id, 'to_user_id' => $to_user_id, 'gift_id' => $gift_id, 'createtime' => time(), 'status' => 1 ]; Db::name('user_cp_find')->insert($data); //修改状态 Db::name('user_cp_find')->where(['id' => $res['id']])->update(['status' => 1]); //创建Cp空间 $data = [ 'user_id1' => $from_user_id, 'user_id2' => $to_user_id, 'createtime' => time(), 'status' => 1,//1-已建立Cp空间,2-已取消 'level' => 1, //经验值 'exp' => 0, ]; $re = Db::name('user_cp_zone')->insertGetId($data); $rees = Db::name('user_cp_zone')->where(['user_id1' => $from_user_id,'user_id2' => $to_user_id,'status' => 1])->find(); if(!$rees){ $rees = Db::name('user_cp_zone')->where(['user_id1' => $to_user_id,'user_id2' => $from_user_id,'status' => 1])->find(); } if($rees && $re != $rees['id']){ //修改状态 Db::name('user_cp_zone')->where(['id' => $rees['id']])->update(['status' => 2]); } //给两个用户给CP装扮 $pendant_ids = Db::name('user_cp_level')->where(['deletetime' => 0])->order('level asc')->value('pendant_id'); $pendant_id = Db::name('vs_decorate_price')->where(['id' => $pendant_ids])->value('did'); // 给两个用户添加CP装扮 //先检查该用户是否已有该装扮 foreach ([$from_user_id, $to_user_id] as $user_id) { $zhuangban = Db::name('vs_user_decorate') ->where([ 'user_id' => $user_id, 'type' => 11, 'did' => $pendant_id, 'is_using' => 1 ]) ->find(); if ($zhuangban) { // 修改状态为未使用 Db::name('vs_user_decorate') ->where(['id' => $zhuangban['id']]) ->update(['is_using' => 2]); } } $decorate_data = [ 'type' => 11, // 装扮类型11-cp装扮 'did' => $pendant_id, 'is_using' => 1, // 1-使用中,2-未使用 'end_time' => 0, // 0-永久 'is_perpetual' => 1, // 1-永久,2-限时 'createtime' => time(), ]; foreach ([$from_user_id, $to_user_id] as $user_id) { $insert_data = array_merge(['user_id' => $user_id], $decorate_data); Db::name('vs_user_decorate')->insert($insert_data); } //给前端推送 return 2; }else{//创建推送信息2:表达心动信号 //查询是否有相应的Cp空间 $ress = Db::name('user_cp_find') ->where(['status' => ['in',[0,1]]]) ->whereOr(['from_user_id' => $from_user_id]) ->whereOr(['to_user_id' => $from_user_id]) ->select(); if($ress){ //把状态改为2 status:0-待回应,1-建交成功,2-已取消, foreach ($ress as $v){ Db::name('user_cp_find')->where(['id' => $v['id']])->update(['status' => 2]); } } $data = [ 'from_user_id' => $from_user_id, 'to_user_id' => $to_user_id, 'gift_id' => $gift_id, 'createtime' => time(), ]; Db::name('user_cp_find')->insert($data); //给前端推送 return 1; } } /* * 送Cp礼物 增加Cp 经验 判断是否升级 * @param $from_user_id 送礼用户ID * @param $to_user_id 接收用户ID * @param $gift_id 礼物ID * @param $room_id 房间ID * @param $cp_zone_id Cp空间ID */ public function addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $cp_zone_id, $num) { $jinbi_arr = explode(',', get_system_config_value('cp_exp_rate')); $jinbi = $jinbi_arr[0]; $jinyan = $jinbi_arr[1]; $exp = round(db::name('vs_gift')->where(['gid' => $gift_id])->value('gift_price') * $num / $jinbi * $jinyan, 2); $yuan_exp = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('exp'); $zone_level = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('level'); //添加一个记录 $datas = [ 'room_id' => $room_id, 'from_user_id' => $from_user_id, 'to_user_id' => $to_user_id, 'gift_id' => $gift_id, 'cp_zone_id' => $cp_zone_id, 'exp' => $exp, 'exp_total' => $yuan_exp + $exp, 'createtime' => time(), ]; Db::name('user_cp_gift_log')->insert($datas); //判断是否升级 $level = Db::name('user_cp_level')->where(['change_value' => ['<=', $yuan_exp + $exp],'deletetime' => 0]) ->order('change_value desc')->field('level,pendant_id')->find(); if($level['level'] != $zone_level){//登记不一致 (升级) //修改Cp空间等级 $data['level'] = $level['level']; //给用户修改Cp装扮 if($level['pendant_id']){ //先检查该用户是否已有该装扮 $pendant_id = Db::name('vs_decorate_price')->where(['id' => $level['pendant_id']])->value('did'); foreach ([$from_user_id, $to_user_id] as $user_id) { $zhuangban = Db::name('vs_user_decorate') ->where([ 'user_id' => $user_id, 'type' => 11, 'did' => $pendant_id, 'is_using' => 1 ]) ->find(); if ($zhuangban) { // 修改状态为未使用 Db::name('vs_user_decorate') ->where(['id' => $zhuangban['id']]) ->update(['is_using' => 2]); } } // 给两个用户添加CP装扮 $decorate_data = [ 'type' => 11, // 装扮类型11-cp装扮 'did' => $pendant_id, 'is_using' => 1, // 1-使用中,2-未使用 'end_time' => 0, // 0-永久 'is_perpetual' => 1, // 1-永久,2-限时 'createtime' => time(), ]; foreach ([$from_user_id, $to_user_id] as $user_id) { $insert_data = array_merge(['user_id' => $user_id], $decorate_data); Db::name('vs_user_decorate')->insert($insert_data); } }else{//把原有的装扮取消掉 $decorate_data = [ 'type' => 11, // 装扮类型11-cp装扮 'is_using' => 2, // 1-使用中,2-未使用 'updatetime' => time(), ]; foreach ([$from_user_id, $to_user_id] as $user_id) { $insert_data = array_merge(['user_id' => $user_id], $decorate_data); Db::name('vs_user_decorate')->where(['type' => 11])->update($insert_data); } } } $data['exp'] = $yuan_exp + $exp; Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->update($data); return true; } /* * Cp空间 * @param $user_id 用户ID */ public function cpZone($user_id, $page, $page_limit) { $res = Db::name('user_cp_zone')->where(['user_id1' => $user_id,'status' => 1])->find(); if(!$res){ $res = Db::name('user_cp_zone')->where(['user_id2' => $user_id,'status' => 1])->find(); } if($res){ $res['user_info1'] = Db::name('user')->where(['id' => $res['user_id1']])->field('id user_id,nickname,avatar')->find(); $res['user_info2'] = Db::name('user')->where(['id' => $res['user_id2']])->field('id user_id,nickname,avatar')->find(); //升下一级所需经验值 $next_level_exp = Db::name('user_cp_level')->where(['level' => ['>',$res['level']]])->order('level asc')->value('change_value'); $res['next_level_exp'] = $next_level_exp - $res['exp']; $res['pendant'] = model('api/Decorate')->user_decorate_detail($user_id, 11);//挂件(装扮) //送礼记录 $res['gift_log'] = Db::name('user_cp_gift_log')->where(['cp_zone_id' => $res['id']])->page($page,$page_limit)->select(); foreach ($res['gift_log'] as &$v){ $v['gift_name'] = Db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('gift_name'); $v['from_user_info'] = Db::name('user')->where(['id' => $v['from_user_id']])->field('id user_id,nickname,avatar')->find(); $v['to_user_info'] = Db::name('user')->where(['id' => $v['to_user_id']])->field('id user_id,nickname,avatar')->find(); } return ['code' => 1, 'msg' => '成功', 'data' => $res ]; }else{ return ['code' => 0, 'msg' => '暂无Cp空间', 'data' => null]; } } /* * 用户的Cp空间 * @param $user_id 用户ID */ public function userCpZone($user_id) { $res = Db::name('user_cp_zone')->where(['user_id1' => $user_id,'status' => 1])->select(); if(!$res){ $res = Db::name('user_cp_zone')->where(['user_id2' => $user_id,'status' => 1])->select(); } if($res){ $res['user_info1'] = Db::name('user')->where(['id' => $res['user_id1']])->field('id user_id,nickname,avatar')->find(); $res['user_info2'] = Db::name('user')->where(['id' => $res['user_id2']])->field('id user_id,nickname,avatar')->find(); return ['code' => 1, 'msg' => '成功', 'data' => $res ]; }else{ return ['code' => 0, 'msg' => '暂无Cp空间', 'data' => null]; } } }