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

1124 lines
50 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\api\model;
use think\Db;
use think\Model;
class User extends Model
{
private $redis;
public function __construct($data = [])
{
parent::__construct($data);
$this->redis = \think\Cache::store('redis')->handler();
}
//获取用户信息
public function get_user_info($uid,$field=[])
{
$user_info = [];
$user_data = db::name('user_data')->where(['user_id' => $uid])->find();
if(empty($field) || in_array('user',$field)) {
$user_info = $this->where('id', $uid)->find();
if (!empty($user_info)) {
$user_info = $user_info->toArray();
$user_info['age'] = getAge($user_info['birthday']);//年龄
} else {
return [];
}
$user_info['tag_ids']= isset($user_data['tag_id'])? $user_data['tag_id']: '';
$tag_ids = explode(',',$user_info['tag_ids']);
$tag_list = model('api/UserTag')->get_tag_by_id($tag_ids);
if($tag_list){
$user_info['tag_list'] = implode(',',$tag_list) ;
}else{
$user_info['tag_list'] = '';
}
$user_info['alipay_name'] = isset($user_data['alipay_name'])? $user_data['alipay_name']: '';
$user_info['alipay_account'] = isset($user_data['alipay_account'])? $user_data['alipay_account']: '';
$user_info['bank_user_name'] = isset($user_data['bank_user_name'])? $user_data['bank_user_name']: '';
$user_info['bank_card_number'] = isset($user_data['bank_card_number'])? $user_data['bank_card_number']: '';
$user_info['bank_card'] = isset($user_data['bank_card'])? $user_data['bank_card']: '';
$user_info['open_bank'] = isset($user_data['open_bank'])? $user_data['open_bank']: '';
}
if(empty($field) || in_array('user_auth',$field)){
//查询用户实名信息
$user_auth = db('user_auth')->where('mobile', $user_info['mobile'])->find();
$user_info['is_real'] = isset($user_auth['is_real']) ? $user_auth['is_real'] : 2;
$user_info['real_name'] = isset($user_auth['real_name']) ? $user_auth['real_name'] : '';
$user_info['card_id'] = isset($user_auth['card_id']) ? $user_auth['card_id'] : '';
}
if(empty($field) || in_array('user_mode',$field)) {
//青少年模式
$user_mode = db('user_mode')->where('user_id', $user_info['id'])->find(); //用户青少年模式
$user_info['is_teenager'] = isset($user_mode['is_teenager']) ? $user_mode['is_teenager'] : 2; //1开启2关闭
$user_info['teenager_password'] = isset($user_mode['teenager_password']) ? $user_mode['teenager_password'] : ''; //青少年模式密码
}
if(empty($field) || in_array('user_wallet',$field)) {
//钱包信息
$user_wallet = db::name('user_wallet')->where(['user_id' => $uid])->find();
$user_info['coin'] = isset($user_wallet['coin']) ? $user_wallet['coin'] : 0;
$user_info['earnings'] = isset($user_wallet['earnings']) ? $user_wallet['earnings'] : 0;
}
if(empty($field) || in_array('user_decorate',$field)) {
//装扮
//头像框
$user_info['decoration_head'] = db::name('vs_user_decorate')->where(['user_id' => $uid, 'is_using' => 1, 'type' => 1, 'end_time' => ['>=', time()]])->find();
//坐骑
$user_info['decoration_mount'] = db::name('vs_user_decorate')->where(['user_id' => $uid, 'is_using' => 1, 'type' => 2, 'end_time' => ['>=', time()]])->find();
//个人靓号
$special_num = db::name('vs_user_decorate')->where(['user_id' => $uid, 'is_using' => 1, 'type' => 6, 'end_time' => ['>=', time()]])->find();
$user_info['decoration_user_number'] = $special_num ? $special_num['special_num'] : '';
}
if(empty($field) || in_array('user_level',$field)) {
//用户等级信息
//财富等级
$user_info['wealth_level'] = isset($user_data['wealth_level']) ? $user_data['wealth_level'] : 0;
//财富经验
$user_info['wealth_exp'] = isset($user_data['wealth_exp']) ? $user_data['wealth_exp'] : 0;
//财富等级图标
$user_info['wealth_level_icon'] = model('api/UserData')->user_wealth_icon($uid);
//魅力等级
$user_info['charm_level'] = isset($user_data['charm_level']) ? $user_data['charm_level'] : 0;
//魅力经验
$user_info['charm_exp'] = isset($user_data['charm_exp']) ? $user_data['charm_exp'] : 0;
//魅力等级图标
$user_info['charm_level_icon'] = model('api/UserData')->user_charm_icon($uid);
}
if(empty($field) || in_array('user_recharge',$field)){//用户充值信息
//充值金额
$user_info['user_recharge_all_money'] = db::name('vs_user_recharge')->where(['user_id'=>$uid,'pay_status'=>2])->sum('money');
}
if(empty($field) || in_array('user_follow',$field)) {//用户关系信息
//关注数
$user_info['follow_num'] = db::name('user_follow')->where(['user_id' => $uid])->count();
//粉丝数
$user_info['fans_num'] = db::name('user_follow')->where(['follow_id' => $uid, 'type' => 1])->count();
}
if(empty($field) || in_array('user_invited',$field)) { //邀请相关信息
//邀请数
$user_info['invited_num'] = db::name('vs_user_invited')->where(['user_id' => $uid])->count();
//邀请收益
$user_info['invited_earnings'] = db::name('vs_user_invited_income_log')->where(['user_id' => $uid])->sum('earnings');
}
return $user_info;
}
//我的
public function get_me($uid)
{
$user_info = db::name('user')
2025-11-26 17:52:04 +08:00
->field('id as user_id,nickname,user_code,avatar,sex,mobile,market_value')
2025-08-07 20:21:47 +08:00
->where('id', $uid)->find();
if (empty($user_info)) {
return ['code' => 0, 'msg' => '用户不存在', 'data' => null];
}
//头像判断 路径里面是否有https
if (strpos($user_info['avatar'], 'https') === false) {
$user_info['avatar'] = localpath_to_netpath($user_info['avatar']);
}
$user_info['icon'][0] = model('UserData')->user_wealth_icon($uid);//财富图标
$user_info['icon'][1] = model('UserData')->user_charm_icon($uid);//魅力图标
2025-11-21 11:32:09 +08:00
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $uid,'status' => 1])->value('level');
if($isSinnger){
2025-11-21 14:15:46 +08:00
$user_info['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
2025-11-21 11:32:09 +08:00
}
2025-08-07 20:21:47 +08:00
//关注数
$user_info['follow_num'] = db::name('user_follow')->where(['user_id' => $uid,'type'=>1])->count();
//粉丝数
$user_info['fans_num'] = db::name('user_follow')->where(['follow_id' => $uid,'type'=>1])->count();
//看过我的数
$user_info['look_me_num'] = db::name('user_visit_log')->alias('a')
->join('user b','a.from_uid = b.id','left')
->where(['a.to_id' => $uid,'a.type' => 1,'b.status' => ['<>',0]])->count();
//我的魅力等级
$user_info['charm_level'] = model('UserData')->where('user_id',$uid)->value('charm_level');
//查询用户是否有使用靓号
$user_info['is_use_code'] = 0;
$liang = db::name('vs_user_decorate')->where(['user_id' =>$uid,'type' => 6,'is_using' => 1])->where('end_time',['>=',time()],'or')->find();
if($liang){
$user_info['is_use_code'] = 1;
$user_info['user_code'] = $liang['special_num'];
}
//头像装扮
$user_info['dress'] = model('Decorate')->user_decorate_detail($user_info['user_id'],1);
2025-10-21 17:57:43 +08:00
$user_info['chat_bubble'] = model('Decorate')->user_decorate_detail($user_info['user_id'],9);//聊天气泡
2025-08-07 20:21:47 +08:00
$user_info['auth'] = db::name('user_auth')->where(['mobile' => $user_info['mobile'],'is_real' => 1])->find() ? 1 : 0;
2025-10-20 09:59:39 +08:00
//是否可以发布动态
$user_rechange = db::name('vs_user_recharge')->field('sum(money) as money')->where(['user_id' => $uid,'pay_status' => 2])->find();
//系统配置
$config_money = get_system_config_value('private_chat_recharge_money');
if(($config_money > 0) && ($user_rechange['money'] < $config_money)){
$user_info['is_can_chat'] = 0;
}else{
$user_info['is_can_chat'] = 1;
}
$user_info['can_chat_money'] = $config_money;
2025-11-10 14:56:54 +08:00
$Nobility = model('Nobility')->getUserNobilityInfo($uid);//nobility_image
2025-11-10 15:23:10 +08:00
$user_info['nobility_image'] = $Nobility['play_image'];
2025-11-10 16:56:13 +08:00
$user_info['nickname_color'] = $Nobility['nick_name_color'];
$is_hide = 0;
if($Nobility['power_list']){
foreach ($Nobility['power_list'] as $key => $value){
if($value['id'] == 8){
$is_hide = 1;
}
}
}
$user_info['is_hide'] = $is_hide;//是否可以设置隐藏
$user_info['hide_status'] = db::name('user')->where('id',$uid)->value('hide_status');//0-取消隐身1-隐身进入
2025-11-12 17:10:17 +08:00
//歌手认证
$singer = model('api/SingerSong')->singerAuthStatus($uid);
$user_info['singer_status'] = $singer['status'];//歌手认证状态0-待审核1-通过2-拒绝 -1-未认证
$user_info['singer_level'] = $singer['level'];
2025-10-20 09:59:39 +08:00
//cp
//查询用户Cp空间
$res = Db::name('user_cp_zone')->where(['user_id1' => $uid,'status' => 1])->field('user_id1,user_id2,level,exp')->find();
if(!$res){
$res = Db::name('user_cp_zone')->where(['user_id2' => $uid,'status' => 1])->find();
}
if(!$res){
$user_info['cp_info'] = null;
}else{
$res['user_info1'] = Db::name('user')->where(['id' => $res['user_id1']])->field('id user_id,nickname,avatar')->find();
$res['user_info1']['dress'] = model('api/Decorate')->user_decorate_detail($res['user_id1'], 1);
$res['user_info2'] = Db::name('user')->where(['id' => $res['user_id2']])->field('id user_id,nickname,avatar')->find();
$res['user_info2']['dress'] = model('api/Decorate')->user_decorate_detail($res['user_id2'], 1);
//当前等级名称
$res['name'] = Db::name('user_cp_level')->where(['level' => $res['level']])->value('name');
$res['direction'] = Db::name('user_cp_level')->where(['level' => $res['level']])->value('direction');
2025-11-21 14:56:44 +08:00
$res['pendant'] = model('api/Decorate')->user_decorate_detail($res['user_id1'], 11);
$user_info['cp_info'] = $res;
}
2025-12-01 09:42:49 +08:00
//用户师傅
$master = db::name('vs_user_sign')->where(['sign_user_id' => $uid,'end_time' => ['>',time()]])->value('parent_user_id');
if($master){
$user_info['master'] = Db::name('user')->where(['id' => $master])->field('id user_id,nickname,avatar')->find();
}else{
$user_info['master'] = null;
}
2025-12-02 15:05:06 +08:00
//身价配置
$coin_market_value = explode(',', get_system_config_value('coin_market_value'));;
$user_info['market_value_coin'] = $coin_market_value[0];
$user_info['market_value_market'] = $coin_market_value[1];
2025-08-07 20:21:47 +08:00
return ['code' => 1, 'msg' => '获取成功', 'data' => $user_info];
}
//获取用户关注列表
public function get_user_follow_list($uid, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 30 ? $page_limit : 30;
$model = Db::name('user_follow')->alias('a')->join('fa_user b', 'a.follow_id = b.id');
$model = $model->where('a.user_id', $uid)->where('a.type',1);
$list = $model->field('a.follow_id,a.createtime,b.nickname,b.avatar,b.sex,b.user_code')->order('a.id desc')->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
$v['user_id'] = $v['follow_id'];
$v['is_online'] = 0;
$v['is_follow'] = 1;
// $is_follow = db::name('user_follow')->where(['user_id' => $v['follow_id'], 'follow_id' => $uid])->find();
// if ($is_follow) {
// $v['is_follow'] = 1;
// }
//等级获取对应图标
$v['icon'][0] = model('UserData')->user_wealth_icon($v['follow_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['follow_id']);//魅力图标
2025-11-21 11:32:09 +08:00
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['follow_id'],'status' => 1])->value('level');
if($isSinnger){
2025-11-21 14:15:46 +08:00
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
2025-11-21 11:32:09 +08:00
}
2025-08-07 20:21:47 +08:00
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
//获取用户粉丝列表
public function get_user_fans_list($uid, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 30 ? $page_limit : 30;
$model = Db::name('user_follow')->alias('a')->join('fa_user b', 'a.user_id = b.id');
$model = $model->where('a.follow_id', $uid)->where('a.type',1);
$list = $model->field('a.user_id,a.createtime,b.nickname,b.avatar,b.sex,b.user_code')->order('a.id desc')->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
$v['is_online'] = $this->redis->get('user_online_' . $v['user_id']) ? 1: 0;//是否在线 在redis里获取
$v['is_follow'] = 2;
$is_follow = db::name('user_follow')->where(['user_id' => $uid, 'follow_id' => $v['user_id'],'type' => 1])->find();
if ($is_follow) {
$v['is_follow'] = 1;
}
//等级获取对应图标
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
2025-11-21 11:32:09 +08:00
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'],'status' => 1])->value('level');
if($isSinnger){
2025-11-21 14:15:46 +08:00
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
2025-11-21 11:32:09 +08:00
}
2025-08-07 20:21:47 +08:00
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
//黑名单
public function get_blacklist($uid, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 30 ? $page_limit : 30;
$model = Db::name('user_black')->alias('a')->join('fa_user b', 'a.user_id = b.id');
$model = $model->where(['a.from_id' => $uid, 'a.type' => 1]);
$list = $model->field('a.id,a.user_id,b.nickname,b.avatar,b.sex,b.createtime')->order('a.id desc')->page($page, $page_limit)->select();
foreach ($list as $k => &$v) {
//等级获取对应图标
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
//添加黑名单
public function add_blacklist($uid, $receive_uid)
{
$map = [];
$map['from_id'] = $uid;
$map['user_id'] = $receive_uid;
if (db::name('user_black')->where($map)->find()) {
return ['code' => 0, 'msg' => '此用户已存在您的黑名单', 'data' => null];
} else {
$data = [];
$data['from_id'] = $uid;
$data['user_id'] = $receive_uid;
$data['type'] = 1;
$data['createtime'] = time();
$res = db::name('user_black')->insert($data);
if ($res) {
//腾讯拉黑
model('Tencent')->black_list_add('u'.$uid, 'u'.$receive_uid);
return ['code' => 1, 'msg' => '添加成功', 'data' => null];
}
return ['code' => 0, 'msg' => '添加失败', 'data' => null];
}
}
//移除黑名单
public function remove_blacklist($uid, $receive_uid)
{
$map = [];
$map['from_id'] = $uid;
$map['user_id'] = $receive_uid;
$res = db::name('user_black')->where($map)->delete();
if ($res) {
//腾讯移除黑名单
model('Tencent')->black_list_delete('u'.$uid, 'u'.$receive_uid);
return ['code' => 1, 'msg' => '移除成功', 'data' => null];
}
return ['code' => 0,'msg' => '移除失败', 'data' => null];
}
//邀请码生成
public function invite_code(){
$code = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789';
$reg_code = '';
for ($i = 0; $i < 6; $i++) {
$reg_code .= $code[mt_rand(0, strlen($code) - 1)];
}
$user_info = db::name('user')->where(['init_code' => $reg_code])->find();
if (!empty($user_info)) {
$this->invite_code();
}
return $reg_code;
}
//用户主页
/*
* @param $uid 用户id
* @param $from_id 访问者id
*/
public function get_user_home($from_uid,$uid)
{
$user_info = db::name('user')->alias('u')->join('user_data ud', 'u.id = ud.user_id')
2025-11-26 17:37:33 +08:00
->field('u.market_value,u.id as user_id,u.nickname,u.user_code,u.avatar,u.sex,u.birthday,u.profile,ud.tag_id,ud.home_bgimages,u.is_online')
2025-08-07 20:21:47 +08:00
->where(['u.id' => $uid,'u.status' => ['<>',0]])->find();
if(!$user_info){
return ['code' => 0, 'msg' => '用户不存在或已注销', 'data' => null];
}
//标签
$user_info['tag_list'] = [];
if(isset($user_info['tag_id'])) {
$tag_list = db::name('user_tag')->whereIn('id', explode(',', $user_info['tag_id']))->field('id,tag_name')->select();
$user_info['tag_list'] = $tag_list;
}
//礼物墙 获取收到的礼物图片名称数量 以及送每个礼物数量最多的用户的头像昵称 数量一样选最后送的用户
$user_info['gift_wall'] = [];
$user_info['icon'][0] = model('UserData')->user_wealth_icon($uid) ?? '';//财富图标
$user_info['icon'][1] = model('UserData')->user_charm_icon($uid) ?? '';//魅力图标
2025-11-21 11:32:09 +08:00
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $uid,'status' => 1])->value('level');
if($isSinnger){
2025-11-21 14:15:46 +08:00
$user_info['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标
2025-11-21 11:32:09 +08:00
}
2025-08-07 20:21:47 +08:00
//查询用户是否有使用靓号
$user_info['is_use_code'] = 0;
$liang = db::name('vs_user_decorate')->where(['user_id' => $uid, 'is_using' => 1, 'type' => 6, 'end_time' => ['>=', time()]])->find();
if($liang){
$user_info['is_use_code'] = 1;
$user_info['user_code'] = $liang['special_num'] ?? '';
}
//是否关注
$user_info['is_follow'] = 0;
if (db::name('user_follow')->where(['user_id' => $from_uid, 'follow_id' => $uid])->find()) {
$user_info['is_follow'] = 1;
}
//是否在房间
$user_info['room_id'] = db::name('vs_room_visitor')->where(['user_id' => $uid, 'is_delete' => 1])->order('id desc')->value('room_id') ?? 0;
//用户年龄
$user_info['age'] = getAge($user_info['birthday']);
//头像装扮
$user_info['dress'] = model('Decorate')->user_decorate_detail($user_info['user_id'],1);
2025-10-21 16:30:17 +08:00
//聊天泡
$user_info['chat_bubble'] = model('Decorate')->user_decorate_detail($user_info['user_id'],9);//聊天气泡
2025-08-07 20:21:47 +08:00
//记录用户访问记录
if($from_uid != $uid){
$this->add_user_visit_log(1,$from_uid, $uid);
}
2025-08-26 16:14:51 +08:00
//用户所属工会
$guild_id = Db::name('vs_guild_user')->where(['user_id'=>$uid,'status'=>1,'delete_time'=>0])->value('guild_id');
if($guild_id){
$user_info['guild'] = Db::name('vs_guild')->where('id' ,$guild_id)->value('guild_name');
}else{
$user_info['guild'] = '';
}
2025-11-10 16:13:19 +08:00
$Nobility = model('Nobility')->getUserNobilityInfo($uid);//nobility_image
$user_info['nobility_image'] = $Nobility['play_image'];
2025-11-10 16:56:13 +08:00
$user_info['nickname_color'] = $Nobility['nick_name_color'];
//cp
//查询用户Cp空间
$res = Db::name('user_cp_zone')->where(['user_id1' => $uid,'status' => 1])->field('user_id1,user_id2,level,exp')->find();
if(!$res){
$res = Db::name('user_cp_zone')->where(['user_id2' => $uid,'status' => 1])->find();
}
if(!$res){
$user_info['cp_info'] = null;
}else{
$res['user_info1'] = Db::name('user')->where(['id' => $res['user_id1']])->field('id user_id,nickname,avatar')->find();
$res['user_info1']['dress'] = model('api/Decorate')->user_decorate_detail($res['user_id1'], 1);
$res['user_info2'] = Db::name('user')->where(['id' => $res['user_id2']])->field('id user_id,nickname,avatar')->find();
$res['user_info2']['dress'] = model('api/Decorate')->user_decorate_detail($res['user_id2'], 1);
//当前等级名称
$res['name'] = Db::name('user_cp_level')->where(['level' => $res['level']])->value('name');
$res['direction'] = Db::name('user_cp_level')->where(['level' => $res['level']])->value('direction');
2025-11-21 14:56:44 +08:00
$res['pendant'] = model('api/Decorate')->user_decorate_detail($res['user_id1'], 11);
$user_info['cp_info'] = $res;
}
2025-12-01 09:47:21 +08:00
//用户师傅
$master = db::name('vs_user_sign')->where(['sign_user_id' => $uid,'end_time' => ['>',time()]])->value('parent_user_id');
if($master){
$user_info['master'] = Db::name('user')->where(['id' => $master])->field('id user_id,nickname,avatar')->find();
}else{
$user_info['master'] = null;
}
2025-12-02 15:05:06 +08:00
//身价配置
$coin_market_value = explode(',', get_system_config_value('coin_market_value'));;
$user_info['market_value_coin'] = $coin_market_value[0];
$user_info['market_value_market'] = $coin_market_value[1];
2025-08-07 20:21:47 +08:00
return ['code' => 1, 'msg' => '获取成功', 'data' => $user_info];
}
/**
* 获取用户礼物墙信息
* @param int $uid 用户ID
* @return array
*/
public function get_user_gift_wall_info($uid)
{
//查询用户礼物墙 以gift_id,send_user_id分组 同一用户送的同一礼物相加
2025-10-20 09:59:39 +08:00
$result = db::name('vs_give_gift')->alias('a')
->join('vs_gift g', 'a.gift_id = g.gid')
->where(['a.gift_user' => $uid,'g.label'=>['<>',2]])
->field('a.gift_id,a.user_id,sum(a.number) as total')
->group('a.gift_id,a.user_id')
2025-08-07 20:21:47 +08:00
->order('total desc')
->select();
// var_dump($result);exit;
// 根据礼物二次分组 获取礼物的总数和送的数量最多的三用户
$data = [];
// 按 gift_id 聚合数据
foreach ($result as $item) {
$giftId = $item['gift_id'];
$sendUserId = $item['user_id'];
$sendUserNickname = db::name('user')->where(['id' => $sendUserId])->value('nickname');
$sendUserAvatar = db::name('user')->where(['id' => $sendUserId])->value('avatar');
$total = $item['total'];
if (!isset($data[$giftId])) {
$data[$giftId] = [
'gift_id' => $giftId,
'gift_price' => model('Gift')->where(['gid' => $giftId])->value('gift_price'),
'gift_name' => model('Gift')->where(['gid' => $giftId])->value('gift_name'),
'base_image' => model('Gift')->where(['gid' => $giftId])->value('base_image'),
'total_count' => 0,
'top_users' => []
];
}
// 累加总数量
$data[$giftId]['total_count'] += $total;
// 存储用户赠送记录
$data[$giftId]['top_users'][] = [
'user_id' => $sendUserId,
'nickname' => $sendUserNickname,
'avatar' => $sendUserAvatar,
'count' => $total
];
}
// 对每个礼物的 top_users 排序并取前三名
foreach ($data as &$giftData) {
// 按 count 降序排序
usort($giftData['top_users'], function ($a, $b) {
return $b['count'] <=> $a['count'];
});
$giftData['top_users_count'] = count($giftData['top_users']);
// 取前3位
$giftData['top_users'] = array_slice($giftData['top_users'], 0, 3);
}
$data = array_values($data);
//查询所有的礼物
2025-10-20 09:59:39 +08:00
$gift_list = db::name('vs_gift')->field('gid as gift_id,gift_name,base_image,gift_price')->where(['delete_time' => 0,'label'=>['<>',2]])->select();
2025-08-07 20:21:47 +08:00
//对比去除$data 里面的礼物
$gift_list = array_filter((array)$gift_list, function ($item) use ($data) {
return !in_array($item['gift_id'], array_column($data, 'gift_id'));
});
//数组重组 从下标0 开始
$gift_list = array_values($gift_list);
$redata['no_liang'] = $gift_list;
$redata['liang'] = $data;
return ['code' => 1, 'msg' => '获取成功', 'data' => $redata];
}
//添加用户访问记录
/*
* @param $to_id 被访问对象id
* @param $from_id 访问者id
* @param $type 类型1 用户主页 2 直播间
*/
public function add_user_visit_log($type,$from_uid,$to_uid){
$visit = db::name('user_visit_log')->where(['from_uid' => $from_uid,'to_id' => $to_uid,'type' => $type])->find();
if($visit){
return true;
}
$data = [
'type' => $type,
'from_uid' => $from_uid,
'to_id' => $to_uid,
'createtime' => time(),
];
db::name('user_visit_log')->insert($data);
return true;
}
//相册列表
public function get_album_list($user_id){
$album_list = db::name('user_album')->where(['user_id' => $user_id,'deletetime' => 0])->field('id,name,image,pwd,read_num,like_num')->select();
if($album_list){
foreach ($album_list as $k=>$item){
if($item['pwd']){
$album_list[$k]['is_pwd'] = 1;
}else{
$album_list[$k]['is_pwd'] = 0;
}
$album_list[$k]['img_num'] = db::name('user_album_image')->where('album_id',$item['id'])->count();
}
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $album_list];
}
//相册详情
public function get_album_detail($user_id,$id,$pwd, $page, $page_limit,$is_admin = 0){
$page = intval($page);
$page_limit = $page_limit < 30 ? $page_limit : 30;
$album_info = db::name('user_album')->where(['id' => $id])->field('id,image,pwd,read_num,like_num,user_id,like_user,name')->find();
if(empty($album_info)){
return ['code' => 0, 'msg' => '相册不存在', 'data' => null];
}
if($is_admin!=1){
if($album_info['user_id'] != $user_id){
if($album_info['pwd']){
if($pwd != $album_info['pwd']){
return ['code' => 0, 'msg' => '相册密码错误', 'data' => null];
}
}
}
}
//判断是否点赞
$album_info['is_like'] = 0;
if(!empty($album_info['like_user'])){
if(in_array($user_id,explode(',',$album_info['like_user']))){
$album_info['is_like'] = 1;
}
}
unset($album_info['like_user']);
$album_info['count'] = db::name('user_album_image')
->where(['album_id' => $id])
->count();
$album_info['image_list'] = [];
$image_list = db::name('user_album_image')
->where(['album_id' => $id])
->field('id,image,content,createtime')
->order('createtime desc')
->page($page, $page_limit)
->select();
if($image_list){
$album_info['image_list'] = $image_list;
}
//增加浏览次数
db::name('user_album')->where(['id' => $id])->setInc('read_num');
return ['code' => 1, 'msg' => '获取成功', 'data' => $album_info];
}
//创建相册
public function create_album($user_id,$name,$pwd,$image){
if(empty($name)){
return ['code' => 0, 'msg' => '相册名称不能为空', 'data' => null];
}
if(empty($image)){
return ['code' => 0, 'msg' => '相册封面图不能为空', 'data' => null];
}
$data = [
'user_id' => $user_id,
'name' => $name,
'pwd' => $pwd,
'image' => $image,
'createtime' => time()
];
db::name('user_album')->insert($data);
return ['code' => 1, 'msg' => '创建成功', 'data' => null];
}
//添加相册图片
public function add_album_content($user_id,$album_id,$image,$content){
if(empty($album_id)){
return ['code' => 0, 'msg' => '相册ID不能为空', 'data' => null];
}
// if(empty($content)){
// return ['code' => 0, 'msg' => '内容不能为空', 'data' => null];
// }
//把图片JSON转换成数组
$image = explode(',',$image);
if(!empty($image)){
foreach ($image as $v){
$data = [
'album_id' => $album_id,
'image' => $v,
'content' => $content,
'createtime' => time()
];
//循环插入数据库
db::name('user_album_image')->insert($data);
}
//首次创建相册并上传9张照片【完成任务】
$user_album_image_count = db::name('user_album_image')->where('album_id',$album_id)->count();
if($user_album_image_count >= 9){
model('DailyTasks')->tasks_complete($user_id,14);
}
return ['code' => 1, 'msg' => '添加成功', 'data' => null];
}else{
return ['code' => 0, 'msg' => '图片不能为空', 'data' => null];
}
}
//把普通相册转为私密相册
public function change_album_pwd($user_id,$album_id,$pwd){
if(empty($album_id)){
return ['code' => 0, 'msg' => '相册ID不能为空', 'data' => null];
}
if(empty($pwd)){
return ['code' => 0, 'msg' => '相册密码不能为空', 'data' => null];
}
$album_info = db::name('user_album')->where(['id' => $album_id])->find();
if(!$album_info){
return ['code' => 0, 'msg' => '相册不存在', 'data' => null];
}else{
db::name('user_album')->where(['id' => $album_id])->update(['pwd' => $pwd]);
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}
}
//移动相册图片
public function move_album_images($user_id,$id,$album_id){
if(empty($id)){
2025-10-20 09:59:39 +08:00
return ['code' => 0, 'msg' => '请选择想要移动的图片', 'data' => null];
2025-08-07 20:21:47 +08:00
}
if(empty($album_id)){
return ['code' => 0, 'msg' => '目标相册ID不能为空', 'data' => null];
}
$album_info = db::name('user_album')->where(['id' => $album_id,'user_id' => $user_id])->find();
if(!$album_info){
return ['code' => 0, 'msg' => '目标相册不存在', 'data' => null];
}
$ids = explode(',',$id);
foreach ($ids as $v){
db::name('user_album_image')->where(['id' => $v])->update(['album_id' => $album_id]);
}
return ['code' => 1, 'msg' => '移动成功', 'data' => null];
}
//删除相册
public function delete_album($user_id,$album_id){
if(empty($album_id)){
return ['code' => 0, 'msg' => '相册ID不能为空', 'data' => null];
}
$album_info = db::name('user_album')->where(['id' => $album_id,'user_id' => $user_id])->find();
if(!$album_info){
return ['code' => 0, 'msg' => '相册不存在', 'data' => null];
}
db::name('user_album')->where(['id' => $album_id])->update(['deletetime' => time()]);
return ['code' => 1, 'msg' => '删除成功', 'data' => null];
}
//相册点赞
public function like_album($user_id,$album_id){
if(empty($album_id)){
return ['code' => 0, 'msg' => '相册ID不能为空', 'data' => null];
}
$album_info = db::name('user_album')->where(['id' => $album_id])->find();
if(!$album_info){
return ['code' => 0, 'msg' => '相册不存在', 'data' => null];
}
//把用户的ID添加到相册的点赞用户列表中
if(in_array($user_id,explode(',',$album_info['like_user']))){
//把用户的ID删除
$album_info['like_user'] = str_replace($user_id.',', '', $album_info['like_user']);
db::name('user_album')->where(['id' => $album_id])->update(['like_user' => $album_info['like_user']]);
//点赞数减一
db::name('user_album')->where(['id' => $album_id])->setDec('like_num');
return ['code' => 1, 'msg' => '取消点赞', 'data' => null];
}else{
$album_info['like_user'] .= $user_id.',';
db::name('user_album')->where(['id' => $album_id])->update(['like_user' => $album_info['like_user']]);
db::name('user_album')->where(['id' => $album_id])->setInc('like_num');
return ['code' => 1, 'msg' => '点赞成功', 'data' => null];
}
}
//删除相册图片
public function delete_album_images($user_id,$id){
if(empty($id)){
return ['code' => 0, 'msg' => '请选择要删除的图片', 'data' => null];
}
$ids = explode(',',$id);
foreach ($ids as $v){
db::name('user_album_image')->where(['id' => $v])->delete();
}
return ['code' => 1, 'msg' => '删除成功', 'data' => null];
}
//编辑相册
public function edit_album($user_id,$album_id,$name,$pwd,$image){
if(empty($album_id)){
return ['code' => 0, 'msg' => '相册ID不能为空', 'data' => null];
}
if(empty($name)){
return ['code' => 0, 'msg' => '相册名称不能为空', 'data' => null];
}
if(empty($image)){
return ['code' => 0, 'msg' => '封面图不能为空', 'data' => null];
}
$album_info = db::name('user_album')->where(['id' => $album_id,'user_id' => $user_id])->find();
if(!$album_info){
return ['code' => 0, 'msg' => '相册不存在', 'data' => null];
}else{
$data = [
'name' => $name,
'image' => $image,
'pwd' => $pwd,
'updatetime' => time()
];
db::name('user_album')->where(['id' => $album_id])->update($data);
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}
}
//编辑用户信息
public function edit_user_info($user_id,$nickname,$sex,$birthday,$profile,$avatar,$tag_id){
$data = [];
if(!empty($nickname)){
//名称中不能有 系统管理 等关键字
if(!nickname_filter($nickname)){
2025-10-20 09:59:39 +08:00
return ['code' => 0, 'msg' => '名称中不能有 系统、管理、官方 等相关字', 'data' => null];
}
$nick_name_info = db::name('user')->where(['nickname' => $nickname,'status' => ['<>',0]])->find();
if(!empty($nick_name_info)){
if($user_id != $nick_name_info['id']){
return['code' => 0, 'msg' => '该昵称已被占用','data' =>null];
}
2025-08-07 20:21:47 +08:00
}
$data['nickname'] = $nickname;
}
if(!empty($sex)){
$data['sex'] = $sex;
}
if(!empty($birthday)){
$data['birthday'] = $birthday;
}
if(!empty($profile)){
$data['profile'] = $profile;
}
if(!empty($avatar)){
$data['avatar'] = $avatar;
}
if(!empty($tag_id)){
$user_data['tag_id'] = $tag_id;
}
//开启事务
db::startTrans();
2025-10-20 09:59:39 +08:00
try{
2025-08-07 20:21:47 +08:00
$data['updatetime'] = time();
$re = db::name('user')->where(['id' => $user_id])->update($data);
if(!$re){
db::rollback();
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
$user_data['updatetime'] = time();
$ree = db::name('user_data')->where(['user_id' => $user_id])->update($user_data);
if(!$ree){
db::rollback();
return ['code' => 0, 'msg' => '修改失败了', 'data' => null];
}
if(!empty($avatar)) {
//记录头像修改
$save = db::name('user_avatar_log')->insert(['user_id' => $user_id, 'avatar' => $avatar, 'createtime' => time()]);
if (!$save) {
db::rollback();
return ['code' => 0, 'msg' => '修改失败!', 'data' => null];
}
}
db::commit();
//推送信息去所在房间
//查询当前所在房间
$room_id = db::name('vs_room_visitor')->where(['user_id' => $user_id])->order('id' , 'desc')->value('room_id');
if($room_id){
//当前用户信息
//推送信息
$text['jia_jia'] = model('Decorate')->user_decorate_detail($user_id,2);
$text['FromUserInfo'] = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex')->find();
$text['FromUserInfo']['dress'] = model('Decorate')->user_decorate_detail($user_id,1);
$text['FromUserInfo']['mic_dress'] = model('Decorate')->user_decorate_detail($user_id,4);
$text['FromUserInfo']['chat_dress'] = model('Decorate')->user_decorate_detail($user_id,5);
$text['text'] = '用户 ' . $text['FromUserInfo']['nickname'] .' 修改了信息';
model('Chat')->sendMsg(1035,$room_id,$text,$user_id);
}
2025-10-20 09:59:39 +08:00
//给腾讯同步用户信息
$member_name = db::name('user')->where('id' , $user_id)->value('nickname');
$member_face_url = db::name('user')->where('id' , $user_id)->value('avatar');
2025-10-20 09:59:39 +08:00
model('Tencent')->modify_user_infos($user_id, $member_name, $member_face_url);
2025-08-07 20:21:47 +08:00
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
2025-10-20 09:59:39 +08:00
}
catch(\Exception $e){
db::rollback();
return ['code' => 0, 'msg' => $e, 'data' => null];
}
2025-08-07 20:21:47 +08:00
}
//修改用户背景图
public function edit_user_bg($user_id,$image){
$data = [
'home_bgimages' => $image,
'updatetime' => time()
];
$re = db::name('user_data')->where(['user_id' => $user_id])->update($data);
if(!$re){
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
}
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}
//查询用户修改头像的次数
public function get_user_avatar_num($user_id){
//查询用户本月修改头像的次数
$time = strtotime(date('Y-m-01'));
$num = db::name('user_avatar_log')->where('id' , $user_id)->where('createtime' , '>' , $time)->count();
if(!$num){
$num = 0;
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $num];
}
//看过我的 魅力等级达到20级以上才能查看
public function get_look_me_list($user_id,$page,$limit){
$user_info = db::name('user')->where(['id' => $user_id])->find();
if(!$user_info){
return ['code' => 0, 'msg' => '用户不存在', 'data' => null];
}
//魅力等级
$charm_level = model('UserData')->where('user_id',$user_id)->value('charm_level');
$look_me_level = get_system_config_value('look_me_level');
if($charm_level < $look_me_level){
return ['code' => 0, 'msg' => '魅力等级不足', 'data' => null];
}
$user_data = db::name('user_visit_log')->alias('a')->join('user b','a.from_uid = b.id')
->field('b.id as user_id,b.nickname,b.avatar,b.sex,b.birthday,a.from_uid')
->where('a.to_id',$user_id)
->where('a.type',1)
->where('b.status','<>',0)
->page($page,$limit)->select();
foreach ($user_data as &$v){
//等级获取对应图标
$v['icon'][0] = model('UserData')->user_wealth_icon($v['from_uid']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['from_uid']);//魅力图标
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $user_data];
}
//关注(回关)取消关注
public function follow($user_id,$to_id,$type){
if(empty($to_id)){
return ['code' => 0, 'msg' => '要关注的ID不能为空', 'data' => null];
}
if($type == 1){
if($user_id == $to_id){
return ['code' => 0, 'msg' => '不能关注自己', 'data' => null];
}
}
$follow_info = db::name('user_follow')->where(['user_id' => $user_id,'follow_id' => $to_id,'type' => $type])->find();
if($follow_info){
//取消关注
$re = db::name('user_follow')->where(['user_id' => $user_id,'follow_id' => $to_id,'type' => $type])->delete();
if(!$re){
return ['code' => 0, 'msg' => '取消关注失败', 'data' => null];
}
return ['code' => 1, 'msg' => '取消关注成功', 'data' => null];
}else{
//关注
$data = [
'user_id' => $user_id,
'follow_id' => $to_id,
'type' => $type,
'createtime' => time()
];
$re = db::name('user_follow')->insert($data);
if(!$re){
return ['code' => 0, 'msg' => '关注失败', 'data' => null];
}
return ['code' => 1, 'msg' => '关注成功', 'data' => null];
}
}
2025-10-20 09:59:39 +08:00
//关注房间(红包专用)
public function follow_room($user_id,$room_id,$type){
if(empty($room_id)){
return ['code' => 0, 'msg' => '房间ID不能为空', 'data' => null];
}
if($type == 0){
//取消关注
$re = db::name('user_follow')->where(['user_id' => $user_id,'follow_id' => $room_id,'type' => 2])->delete();
if(!$re){
return ['code' => 0, 'msg' => '取消关注失败', 'data' => null];
}
return ['code' => 1, 'msg' => '取消关注成功', 'data' => null];
}else{
//关注
$data = [
'user_id' => $user_id,
'follow_id' => $room_id,
'type' => 2,
'createtime' => time()
];
$re = db::name('user_follow')->insert($data);
if(!$re){
return ['code' => 0, 'msg' => '关注失败', 'data' => null];
}
return ['code' => 1, 'msg' => '关注成功', 'data' => null];
}
}
2025-08-07 20:21:47 +08:00
//更新用户ip
public function update_user_ip($user_id,$ip){
2025-10-20 09:59:39 +08:00
//判断$ip是否是汉字
if(preg_match('/[\x{4e00}-\x{9fa5}]+/u', $ip)){
$ip = '未知';
}
2025-08-07 20:21:47 +08:00
$data = [
'address_ip' => $ip
];
$re = db::name('user')->where(['id' => $user_id])->update($data);
if(!$re){
return ['code' => 0, 'msg' => '更新失败', 'data' => null];
}
return ['code' => 1, 'msg' => '更新成功', 'data' => null];
}
//是否可以发起私聊
public function can_start_private_chat($user_id){
$user_rechange = db::name('vs_user_recharge')->field('sum(money) as money')->where(['user_id' => $user_id,'pay_status' => 2])->find();
//系统配置
$config_money = get_system_config_value('private_chat_recharge_money');
if($user_rechange['money'] < $config_money){
return ['code' => 0, 'msg' => '充值金额不足', 'data' => null];
}
return ['code' => 1, 'msg' => '可以发起私聊', 'data' => null];
}
2025-11-20 15:07:27 +08:00
/*
* 挚友列表
* @param int $user_id 用户ID
*/
public function get_friend_list($user_id,$page,$limit){
//获取用户当前所拥有的关系
$relation = db::name('vs_relation')->where(['id' => ['>',0],'delete_time' => 0])->page($page,$limit)->select();
$return_data = [];
2025-11-20 16:10:47 +08:00
$no_cp = [];
2025-11-20 15:33:52 +08:00
if($relation){
2025-11-20 16:10:47 +08:00
foreach ($relation as $k => $v){
2025-11-20 17:15:33 +08:00
$relation_list = $this->relation_card($v['id'],$user_id);
if($relation_list){
$no_cp[$k]['relation_list'] = $relation_list;
$no_cp[$k]['relation_name'] = $v['name'];
}else{
unset($relation[$k]);
}
2025-11-20 15:07:27 +08:00
}
}
2025-11-20 17:15:33 +08:00
if($no_cp){
//数组重新排序
$no_cp = array_values($no_cp);
}
2025-11-20 16:10:47 +08:00
$return_data['no_cp'] = $no_cp;
2025-11-20 15:07:27 +08:00
//CP 信息
2025-11-20 15:55:53 +08:00
$res = Db::name('user_cp_zone')->where(['user_id1' => $user_id,'status' => 1])->find();
2025-11-20 15:07:27 +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-20 15:07:27 +08:00
}
if($res){
2025-11-20 17:03:38 +08:00
$res['name'] = Db::name('user_cp_level')->where(['level' => $res['level']])->value('name');
2025-11-20 15:07:27 +08:00
$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();
}
if($res){
2025-11-20 16:17:47 +08:00
$return_data['cp'] = $res;
2025-11-20 15:08:59 +08:00
}else{
2025-11-20 16:17:47 +08:00
$return_data['cp'] = null;
2025-11-20 15:07:27 +08:00
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
}
//关系卡,关系位
2025-11-20 16:10:47 +08:00
public function relation_card($relation_id,$user_id,$type = 0)
2025-11-20 15:07:27 +08:00
{
$room_auction1 = db::name('vs_room_auction_relation')->alias('a')
->join('user b','a.user_id1 = b.id','left')
->join('user c','a.user_id2 = c.id','left')
->join('vs_relation d','a.relation_id = d.id','left')//关系
2025-11-20 15:53:59 +08:00
->field('a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.sex as sex1,b.nickname as nickname1,b.avatar as avatar1,c.sex as sex2,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image')
2025-11-20 15:07:27 +08:00
->where(['a.user_id1' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0,'a.relation_id' => $relation_id])
->order('a.updatetime desc')
->select();
$room_auction2 = db::name('vs_room_auction_relation')->alias('a')
->join('user b','a.user_id1 = b.id','left')
->join('user c','a.user_id2 = c.id','left')
->join('vs_relation d','a.relation_id = d.id','left')//关系
2025-11-20 15:53:59 +08:00
->field('a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.sex as sex1,b.nickname as nickname1,b.avatar as avatar1,c.sex as sex2,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image')
2025-11-20 15:07:27 +08:00
->where(['a.user_id2' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0,'a.relation_id' => $relation_id])
->order('a.updatetime desc')
->select();
$room_auction = array_merge((array)$room_auction1, (array)$room_auction2);
foreach ($room_auction as &$v){
$v['delete_me_coin'] = get_system_config_value('delete_relation_card_money');
if($v['cp_room_id'] > 1){
//查找房间ID
$v['heart_value'] = db::name('vs_room')->where('id',$v['cp_room_id'])->value('hot_value');
}else{
$v['heart_value'] = 0;
}
if(db::name('vs_room_auction_relation_top')->where(['user_id' => $user_id, 'au_re_id' => $v['id']])->find()){
$v['is_top'] = 1;//置顶
}else{
$v['is_top'] = 0;
}
}
//数据重组 根据是否置顶排序 然后根据 time_day 倒序
if ($room_auction) {
// 对于未置顶的项目,再根据 time_day 倒序排序
$top_qinmi = array_filter($room_auction, function($item) { return $item['is_top'] == 1; });
$untop_qinmi = array_filter($room_auction, function($item) { return $item['is_top'] != 1; });
usort($untop_qinmi, function($a, $b) {
return $b['time_day'] <=> $a['time_day'];
});
$room_auction = array_merge($top_qinmi, $untop_qinmi);
$room_auction = array_values($room_auction);
}
2025-11-20 16:10:47 +08:00
if($type == 0){
//取前三个值
$room_auction = array_slice($room_auction, 0, 3);
}
2025-11-20 15:07:27 +08:00
return $room_auction ;
// return ['code' => 1, 'msg' => '操作成功', 'data' => $room_auction];
}
2025-11-20 15:53:59 +08:00
2025-11-20 16:10:47 +08:00
/*
* 挚友列表查看更多
* @param int $user_id 用户ID
* @param int $relation_id 关系ID
*/
2025-11-20 16:24:18 +08:00
public function get_friend_list_more($user_id,$relation_id){
2025-11-20 16:10:47 +08:00
$room_auction = $this->relation_card($relation_id,$user_id,1);
return ['code' => 1, 'msg' => '操作成功', 'data' => $room_auction];
}
2025-11-20 15:53:59 +08:00
2025-08-07 20:21:47 +08:00
}