Files
yusheng-php/application/api/model/UserCp.php

310 lines
13 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\api\model;
2025-11-14 14:49:38 +08:00
use think\Db;
2025-08-07 20:21:47 +08:00
use think\Model;
class UserCp extends Model
{
2025-11-14 14:49:38 +08:00
/*
* 检测是否赠送的Cp礼物
* @param $from_user_id 送礼用户ID
* @param $gift_id 礼物ID
* @param $to_user_id 接收用户ID
* @param $room_id 房间ID
2025-11-18 19:09:17 +08:00
* @return int 0-1-等待回应2-已建立Cp空间
2025-11-14 14:49:38 +08:00
*/
2025-11-20 10:37:08 +08:00
public function checkGift($from_user_id, $gift_id, $to_user_id, $room_id, $num)
2025-11-14 14:49:38 +08:00
{
2025-11-18 19:09:17 +08:00
//查询是否已经存在Cp空间
2025-11-14 14:49:38 +08:00
$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){
2025-11-20 10:37:08 +08:00
$this->addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $rees['id'], $num);
2025-11-18 19:09:17 +08:00
return 0;
2025-11-14 14:49:38 +08:00
}
2025-11-18 19:09:17 +08:00
$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-已取消
2025-11-14 14:49:38 +08:00
$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]);
2025-11-18 19:09:17 +08:00
//创建Cp空间
2025-11-14 14:49:38 +08:00
$data = [
'user_id1' => $from_user_id,
'user_id2' => $to_user_id,
'createtime' => time(),
'status' => 1,//1-已建立Cp空间2-已取消
'level' => 1,
//经验值
'exp' => 0,
];
2025-11-19 18:15:14 +08:00
$re = Db::name('user_cp_zone')->insertGetId($data);
2025-11-14 14:49:38 +08:00
2025-11-22 15:18:21 +08:00
//添加一个记录
$datas = [
'room_id' => $room_id,
'from_user_id' => $from_user_id,
'to_user_id' => $to_user_id,
'gift_id' => 0,
'num' => 0,
'cp_zone_id' => $re,
'exp' => 0,
'exp_total' => 0,
'remark' => '建立了心动空间,让我们相爱每一天吧!',
'createtime' => time(),
];
Db::name('user_cp_gift_log')->insert($datas);
2025-11-19 15:16:20 +08:00
$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();
}
2025-11-19 18:15:14 +08:00
if($rees && $re != $rees['id']){
2025-11-19 15:16:20 +08:00
//修改状态
Db::name('user_cp_zone')->where(['id' => $rees['id']])->update(['status' => 2]);
}
2025-11-21 16:08:38 +08:00
//给两个用户给CP装扮
2025-11-21 19:03:01 +08:00
$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');
2025-11-21 16:11:22 +08:00
// 给两个用户添加CP装扮
2025-11-21 18:32:29 +08:00
//先检查该用户是否已有该装扮
2025-11-21 18:35:38 +08:00
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]);
}
2025-11-21 18:32:29 +08:00
}
2025-11-21 16:11:22 +08:00
$decorate_data = [
'type' => 11, // 装扮类型11-cp装扮
2025-11-21 16:08:38 +08:00
'did' => $pendant_id,
2025-11-21 16:11:22 +08:00
'is_using' => 1, // 1-使用中2-未使用
'end_time' => 0, // 0-永久
'is_perpetual' => 1, // 1-永久2-限时
2025-11-21 16:08:38 +08:00
'createtime' => time(),
];
2025-11-21 16:11:22 +08:00
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);
}
2025-11-14 14:49:38 +08:00
//给前端推送
2025-11-18 19:09:17 +08:00
return 2;
2025-11-14 14:49:38 +08:00
}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]);
}
}
$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);
//给前端推送
2025-11-18 19:09:17 +08:00
return 1;
2025-11-14 14:49:38 +08:00
}
}
/*
* 送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
*/
2025-11-20 10:37:08 +08:00
public function addCpLevel($from_user_id, $to_user_id, $room_id, $gift_id, $cp_zone_id, $num)
2025-08-07 20:21:47 +08:00
{
2025-11-14 14:49:38 +08:00
$jinbi_arr = explode(',', get_system_config_value('cp_exp_rate'));
$jinbi = $jinbi_arr[0];
$jinyan = $jinbi_arr[1];
2025-11-20 10:37:08 +08:00
$exp = round(db::name('vs_gift')->where(['gid' => $gift_id])->value('gift_price') * $num / $jinbi * $jinyan, 2);
2025-11-14 14:49:38 +08:00
$yuan_exp = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('exp');
2025-11-21 17:23:50 +08:00
$zone_level = Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->value('level');
2025-11-22 15:18:21 +08:00
$toUserNickname =db::name('user')->where(['id' => $to_user_id])->value('nickname')??'未知用户';
$giftName = db::name('vs_gift')->where(['gid' => $gift_id])->value('gift_name')??'未知礼物';
2025-11-14 14:49:38 +08:00
//添加一个记录
$datas = [
'room_id' => $room_id,
'from_user_id' => $from_user_id,
'to_user_id' => $to_user_id,
'gift_id' => $gift_id,
2025-11-22 14:51:28 +08:00
'num' => $num,
2025-11-14 14:49:38 +08:00
'cp_zone_id' => $cp_zone_id,
'exp' => $exp,
'exp_total' => $yuan_exp + $exp,
2025-11-22 15:18:21 +08:00
'remark' => '送给'.$toUserNickname.$num.'个'.$giftName.',获得'.$exp.'经验值,总经验值增加至'.($yuan_exp + $exp),
2025-11-14 14:49:38 +08:00
'createtime' => time(),
];
Db::name('user_cp_gift_log')->insert($datas);
//判断是否升级
2025-11-21 17:23:50 +08:00
$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){//登记不一致 (升级)
2025-11-14 14:49:38 +08:00
//修改Cp空间等级
2025-11-21 17:23:50 +08:00
$data['level'] = $level['level'];
//给用户修改Cp装扮
if($level['pendant_id']){
2025-11-21 18:35:38 +08:00
//先检查该用户是否已有该装扮
2025-11-21 19:03:01 +08:00
$pendant_id = Db::name('vs_decorate_price')->where(['id' => $level['pendant_id']])->value('did');
2025-11-21 18:35:38 +08:00
foreach ([$from_user_id, $to_user_id] as $user_id) {
$zhuangban = Db::name('vs_user_decorate')
->where([
'user_id' => $user_id,
'type' => 11,
2025-11-21 19:03:01 +08:00
'did' => $pendant_id,
2025-11-21 18:35:38 +08:00
'is_using' => 1
])
->find();
if ($zhuangban) {
// 修改状态为未使用
Db::name('vs_user_decorate')
->where(['id' => $zhuangban['id']])
->update(['is_using' => 2]);
}
}
2025-11-21 17:23:50 +08:00
// 给两个用户添加CP装扮
$decorate_data = [
'type' => 11, // 装扮类型11-cp装扮
2025-11-21 19:03:01 +08:00
'did' => $pendant_id,
2025-11-21 17:23:50 +08:00
'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);
}
2025-11-21 17:54:02 +08:00
}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);
}
2025-11-21 17:23:50 +08:00
}
2025-11-22 15:18:21 +08:00
//添加一个记录
$pendant = db::name('vs_decorate_price')->where('id',$level['pendant_id'])->field('did,day')->find();
$pendant_title = '装扮-'.$pendant['day'].'天-'.db::name('vs_decorate')->where('did',$pendant['did'])->value('title');
$datas = [
'room_id' => $room_id,
'from_user_id' => $from_user_id,
'to_user_id' => $to_user_id,
'gift_id' => 0,
'num' => 0,
'cp_zone_id' => $cp_zone_id,
'exp' => 0,
'exp_total' => 0,
'remark' => '我们等级达到了'.$level['level'].'级,获得奖励'.$pendant_title,
'createtime' => time(),
];
Db::name('user_cp_gift_log')->insert($datas);
2025-11-14 14:49:38 +08:00
}
2025-11-19 14:54:24 +08:00
$data['exp'] = $yuan_exp + $exp;
2025-11-14 14:49:38 +08:00
Db::name('user_cp_zone')->where(['id' => $cp_zone_id])->update($data);
return true;
2025-08-07 20:21:47 +08:00
}
2025-11-14 15:26:04 +08:00
/*
* Cp空间
* @param $user_id 用户ID
*/
2025-11-22 11:12:27 +08:00
public function cpZone($user_id, $page, $page_limit)
2025-11-14 15:26:04 +08:00
{
2025-11-20 15:55:53 +08:00
$res = Db::name('user_cp_zone')->where(['user_id1' => $user_id,'status' => 1])->find();
2025-11-14 15:26:04 +08:00
if(!$res){
2025-11-20 15:55:53 +08:00
$res = Db::name('user_cp_zone')->where(['user_id2' => $user_id,'status' => 1])->find();
2025-11-14 15:26:04 +08:00
}
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();
//升下一级所需经验值
2025-11-19 14:47:19 +08:00
$next_level_exp = Db::name('user_cp_level')->where(['level' => ['>',$res['level']]])->order('level asc')->value('change_value');
2025-11-14 15:26:04 +08:00
$res['next_level_exp'] = $next_level_exp - $res['exp'];
2025-11-22 11:27:22 +08:00
$res['pendant'] = model('api/Decorate')->user_decorate_detail($user_id, 11);//挂件(装扮)
2025-11-14 15:26:04 +08:00
//送礼记录
2025-11-22 11:12:27 +08:00
$res['gift_log'] = Db::name('user_cp_gift_log')->where(['cp_zone_id' => $res['id']])->page($page,$page_limit)->select();
2025-11-14 15:26:04 +08:00
foreach ($res['gift_log'] as &$v){
2025-11-22 15:18:21 +08:00
if($v['gift_id']){
$v['gift_name'] = Db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('gift_name');
}
2025-11-14 15:26:04 +08:00
$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];
}
}
2025-11-14 15:33:23 +08:00
/*
* 用户的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];
}
}
2025-08-07 20:21:47 +08:00
}