Files
yusheng-php/application/api/model/UserCp.php
2025-11-19 14:54:24 +08:00

187 lines
7.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\model;
use think\Db;
use think\Model;
class UserCp extends Model
{
/*
* 检测是否赠送的Cp礼物
* @param $from_user_id 送礼用户ID
* @param $gift_id 礼物ID
* @param $to_user_id 接收用户ID
* @param $room_id 房间ID
* @return int 0-无1-等待回应2-已建立Cp空间
*/
public function checkGift($from_user_id, $gift_id, $to_user_id, $room_id)
{
//查询是否已经存在Cp空间
$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){
$this->addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $rees['id']);
return 0;
}
$cp_gift_id = explode(',', get_system_config_value('cp_gift_id'));
if(!in_array($gift_id, $cp_gift_id)){
return 0;
}
//查询收礼人有没有给送礼人送过cp礼物 status0-待回应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,
];
Db::name('user_cp_zone')->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 status0-待回应1-建交成功2-已取消,
foreach ($ress as $v){
Db::name('user_cp_find')->where(['id' => $v['id']])->update(['status' => 2]);
}
}
$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){
//修改状态
Db::name('user_cp_zone')->where(['id' => $rees['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)
{
$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') / $jinbi * $jinyan, 2);
$yuan_exp = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('exp');
//添加一个记录
$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]])->order('change_value desc')->value('level');
if($level){
//修改Cp空间等级
$data['level'] = $level;
}
$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)
{
$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();
//升下一级所需经验值
$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['gift_log'] = Db::name('user_cp_gift_log')->where(['cp_zone_id' => $res['id']])->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];
}
}
}