Compare commits

...

20 Commits

Author SHA1 Message Date
3fc247e8e5 安装基础信息配置 2025-08-13 11:13:35 +08:00
ebdfd04105 优化:云账户回调 2025-08-13 10:38:37 +08:00
4fc571e5e2 拍卖模式下 同意上麦 过滤 2025-08-13 10:13:01 +08:00
3957e831f9 优化:主题功能调整 2025-08-12 17:06:00 +08:00
eef23f6bba 优化:主题功能调整 2025-08-12 15:27:41 +08:00
c7fb6078a9 主题 2025-08-12 15:17:17 +08:00
a0ea15ef2a Merge remote-tracking branch 'origin/develop' into develop 2025-08-12 14:13:36 +08:00
f635515d61 优化:提现状态查询接口暂停 2025-08-12 14:13:20 +08:00
a3b3bd04ef 登录处理 2025-08-12 14:05:47 +08:00
f9d9a1bf5c 登录处理 2025-08-12 11:16:48 +08:00
06c5df0207 Merge remote-tracking branch 'origin/develop' into develop 2025-08-12 11:13:39 +08:00
917d95f5f3 BUG:0点以后房间热度值清零 错误修改 2025-08-12 11:13:32 +08:00
89e6c023db 清数据 ip限制 2025-08-11 18:58:23 +08:00
d2baceadea 房间火热值 2025-08-11 17:49:11 +08:00
93d75a4ef3 每天执行脚本:清除房间热度值 脚本修改 2025-08-11 17:36:59 +08:00
07d631a7bb 每天执行脚本:清除房间热度值 2025-08-11 17:32:10 +08:00
c232caf2f0 Merge branch 'master' into develop 2025-08-11 16:23:02 +08:00
08cc1dabd8 测试自动更新脚本 2025-08-11 16:14:56 +08:00
3741278825 提现回调修改 2025-08-11 16:08:51 +08:00
92a63551c6 后台bug:是否机器人功能修改 加机器人库存数量判断 2025-08-11 14:26:45 +08:00
20 changed files with 245 additions and 35 deletions

View File

@@ -820,11 +820,16 @@ class Room extends adminApi
//在用户表里找 $robot_num 个机器人 进入到房间
$user_list = db::name('user')->field('id')->where('is_robot',1)->limit($robot_num)->orderRaw('rand()')->select();
if($user_list){
if(count($user_list) != $robot_num){
return V(0,"机器人数量不足");
}
foreach ($user_list as $v){
model('api/Room')->join_room($v['id'],$room_id,$room_password);
}
}else{
return V(0,"没有可用机器人");
}
}elseif ($is_robot_num == 2 && $robot_num == 0){
}elseif ($is_robot_num == 2 || $robot_num == 0){
$data['robot_num'] = 0;
//查询在房间中的机器人 并退出
$user_list = db::name('vs_room_visitor')->alias('a')->join('user b','a.user_id = b.id','left')

View File

@@ -44,6 +44,10 @@ class Theme extends adminApi
}
$list = db::name($this->table)->where($where)->page($page, $page_limit)->select();
$count = db::name($this->table)->where($where)->count();
foreach ($list as &$value) {
$value['begin_time'] = date('Y-m-d H:i:s',$value['begin_time']);
$value['end_time'] = date('Y-m-d H:i:s',$value['end_time']);
}
$return_data = [
'page' =>$page,
'page_limit' => $page_limit,
@@ -62,6 +66,10 @@ class Theme extends adminApi
$auxiliary_color = input('auxiliary_color', '');
$file_url = input('file_url', '');
$is_active = input('is_active', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$begin_time = !empty($begin_time) ? strtotime($begin_time) : 0;
$end_time = !empty($end_time) ? strtotime($end_time) : 0;
$data = [
'theme_name' => $theme_name,
'theme_color' => $theme_color,
@@ -69,7 +77,9 @@ class Theme extends adminApi
'file_url' => $file_url,
'is_active' => $is_active,
'admin_id' => $admin_id,
'createtime' => time()
'createtime' => time(),
'begin_time' => $begin_time,
'end_time' => $end_time,
];
$res = db::name($this->table)->insert($data);
if($res){
@@ -87,6 +97,10 @@ class Theme extends adminApi
$auxiliary_color = input('auxiliary_color', '');
$file_url = input('file_url', '');
$is_active = input('is_active', '');
$begin_time = input('begin_time', '');
$end_time = input('end_time', '');
$begin_time = !empty($begin_time) ? strtotime($begin_time) : 0;
$end_time = !empty($end_time) ? strtotime($end_time) : 0;
$id = input('id', '');
$data = [
'theme_name' => $theme_name,
@@ -94,7 +108,9 @@ class Theme extends adminApi
'auxiliary_color' => $auxiliary_color,
'file_url' => $file_url,
'is_active' => $is_active,
'updatetime' => time()
'updatetime' => time(),
'begin_time' => $begin_time,
'end_time' => $end_time,
];
$res = db::name($this->table)->where(['id'=>$id])->update($data);
if($res){

View File

@@ -8,8 +8,10 @@ use think\Log;
class Ceshi extends Controller
{
//测试 发送各种消息
//设置白名单ip访问本类接口
protected $allowIp = [
'113.201.181.82'
];
//发送群组系统消息
public function send_group_system_notification()
@@ -150,6 +152,13 @@ class Ceshi extends Controller
//清空数据 禁用 慎用
public function clear_data()
{
//ip
$ip = request()->ip();
//白名单
$white_list = $this -> allowIp;
if (!in_array($ip, $white_list)) {
return V(301, '非法访问!');
}
$i = 0;
$res = [];
//开启事务

View File

@@ -24,4 +24,11 @@ class Cron
$cron = new \app\cron\controller\TenSeconds();
$cron->index();
}
//每天执行
public function DaySeconds()
{
$cron = new \app\cron\controller\DaySeconds();
$cron->index();
}
}

View File

@@ -219,13 +219,13 @@ class Payment extends Controller
$yun_pay = new YunPay();
$result = $yun_pay->yun_callback($data,$mess,$timestamp,$sign);
if($result['code']==1){
$data = $result['data']['data'];
$data = $result['data'];
if($data){
$status = $data['status'];
if(!isset($data['status'])){
echo 'fail';
die;
}
$status = $data['status'];
switch ($status){
case "1":
// 支付成功(对于支付宝和微信支付是最终状态,对于银行卡大部分情况是终态,小概率会出现"退汇现象",状态由"成功"变为"退汇"

View File

@@ -84,7 +84,7 @@ class Search extends BaseCom
$lists[$k]['picture'] = $v['room_cover'];
$lists[$k]['code'] = $v['room_number'];
$lists[$k]['label_icon'] = db::name('vs_room_label')->where('id', $v['label_id'])->value('label_icon');
$lists[$k]['hot_value'] = $v['hot_value'];
$lists[$k]['hot_value'] = $v['today_hot_value'];
}elseif($type == 3){
$lists[$k]['id'] = $v['id'];
$lists[$k]['name'] = $v['guild_name'];

View File

@@ -15,12 +15,37 @@ class Theme extends controller
}
/*
* 启动页列表
* @return array
*
* app背景图片 app_bg
* 首页选中 home_sel
* 首页正常 home_nor
* 广场选中 find_sel
* 广场正常 find_nor
* 消息选中 msg_sel
* 消息正常 msg_nor
* 我的选中 mine_sel
* 我的正常 mine_nor
* 主题色 theme_color
* 按钮文字颜色 btn_text_color
*/
public function get_theme_data()
{
$reslut = DB::name('vs_theme')->where('is_active',1)->where('delete_time',0)->find();
$reslut = DB::name('vs_theme')->field('theme_color,file_url,auxiliary_color')
->where(['delete_time' => 0 ,'is_active' => 1,'begin_time' => ['<',time()],'end_time' => ['>',time()]])->order('id desc')->find();
if($reslut){
$url = $reslut['file_url'];
$reslut['btn_text_color'] = $reslut['auxiliary_color'];
$reslut['app_bg'] = get_system_config_value('web_site').'/static/theme/'.$url.'/app_bg.png';
$reslut['home_sel'] = get_system_config_value('web_site').'/static/theme/'.$url.'/home_sel.png';
$reslut['home_nor'] = get_system_config_value('web_site').'/static/theme/'.$url.'/home_nor.png';
$reslut['find_sel'] = get_system_config_value('web_site').'/static/theme/'.$url.'/find_sel.png';
$reslut['find_nor'] = get_system_config_value('web_site').'/static/theme/'.$url.'/find_nor.png';
$reslut['msg_sel'] = get_system_config_value('web_site').'/static/theme/'.$url.'/msg_sel.png';
$reslut['msg_nor'] = get_system_config_value('web_site').'/static/theme/'.$url.'/msg_nor.png';
$reslut['mine_sel'] = get_system_config_value('web_site').'/static/theme/'.$url.'/mine_sel.png';
$reslut['mine_nor'] = get_system_config_value('web_site').'/static/theme/'.$url.'/mine_nor.png';
}
return V(1,'操作成功', $reslut);
}
}

View File

@@ -505,6 +505,7 @@ class GiveGift extends Model
//增加房间火热值hot_value
$gift_totalaa = $gift_total * get_system_config_value('coin_charm_exp');
Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->setInc('hot_value',$gift_totalaa);
Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->setInc('today_hot_value',$gift_totalaa);
Db::commit();
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];

View File

@@ -16,7 +16,7 @@ class Room extends Model
parent::__construct();
$this->redis = \think\Cache::store('redis')->handler();
}
//创建房间
//创建房间 创建
public function user_create_room($uid, $room_name,$room_cover,$room_intro,$type = 0)
{
$user_mobile = model('User')->where('id', $uid)->value('mobile');
@@ -181,7 +181,7 @@ class Room extends Model
$map['is_top'] = $is_top;
}
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,hot_value,label_id,is_show_room')
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value,label_id,is_show_room')
->where($map)->order('hot_value desc')->page($page, $page_limit)->select();
// var_dump($list);
foreach ($list as $k => &$v){
@@ -231,7 +231,7 @@ class Room extends Model
}
}
if(!empty($user_room_list)){
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,hot_value')
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value')
->where('id', 'in', $user_room_list)->order('hot_value desc')->page($page, $page_limit)->select();
foreach ($list as $k => &$v){
// $v['hot_value'] = $v['hot_value'] * 10;
@@ -822,7 +822,7 @@ class Room extends Model
'label_id' => $label_id,
'label_icon' => db::name('vs_room_label')->where('id', $room['label_id'])->value('label_icon_room'),
'room_background' => $room['room_background'],
'hot_value' => $room['hot_value'],
'hot_value' => $room['today_hot_value'],
'chatrooms' => 'room'.$room['id'],
'pit_list' => $pit_list,
'room_up_pit_type'=>$room['room_up_pit_type'],
@@ -1963,7 +1963,7 @@ class Room extends Model
'label_id' => $label_id,
'label_icon' => db::name('vs_room_label')->where('id', $room['label_id'])->value('label_icon_room'),
'room_background' => $room['room_background'],
'hot_value' => $room['hot_value'],
'hot_value' => $room['today_hot_value'],
'chatrooms' => 'room'.$room['id'],
'pit_list' => $pit_list,
'room_up_pit_type'=>$room['room_up_pit_type'],

View File

@@ -534,6 +534,20 @@ class RoomPit extends Model
model('Chat')->sendMsg(1034,$room_id,$text);
return ['code' => 1, 'msg' => '上麦成功', 'data' => null];
}elseif($apply_type == 3){
if(count($to_user) >= 2){
return ['code' => 0, 'msg' => '拍卖模式下只能一个人上麦', 'data' => null];
}
//拍卖房当前到哪一步了
$step = db::name('vs_room_auction')->where(['room_id' => $room_id])->order('auction_id desc')->value('status');
if($step == 2){
return ['code' => 0, 'msg' => '拍卖已经开始', 'data' => null];
}
//拍卖位上有人吗
$paimai_user = Cache::get('auction_user_'.$room_id);
if($paimai_user){
//有人就让他下麦
return ['code' => 0, 'msg' => '拍卖位上已有人,请先抱对方下麦', 'data' => null];
}
$i = 0;
foreach ($to_user as &$value) {
$i++;

View File

@@ -393,7 +393,7 @@ class UserData extends Model
//房间历史足迹
public function user_room_history_list($uid,$page,$page_limit){
$list = db::name('user_visit_log')->alias('a')->join('fa_vs_room b','a.to_id = b.id')
->field('b.id as room_id,b.room_number,b.room_name,b.room_cover,b.room_intro,b.label_id,b.room_password,b.is_show_room,b.hot_value')
->field('b.id as room_id,b.room_number,b.room_name,b.room_cover,b.room_intro,b.label_id,b.room_password,b.is_show_room,b.today_hot_value as hot_value')
->where('a.from_uid',$uid)
->where('a.type',2)
->where('b.type_id','<>',6)

View File

@@ -10,14 +10,14 @@ class UserToken extends Model
public function check_login_token($token)
{
if (empty($token)) {
return ['code' => 301, 'msg' => '登录失效', 'data' =>null];
return ['code' => 301, 'msg' => '登录失效!', 'data' =>null];
}
$user_token = $this->where('token', $token)->find();
if (empty($user_token)) {
return ['code' => 301, 'msg' => '登录失效', 'data' => null];
return ['code' => 301, 'msg' => '登录失效!!', 'data' => null];
}
if ($user_token['expiretime'] < time()) {
return ['code' => 301, 'msg'=> '登录失效', 'data' => null];
return ['code' => 301, 'msg'=> '登录失效!!!', 'data' => null];
}
$block1 = db::name('block')->where(['type' => 1,'type_text' => $user_token['user_id']])->find();

View File

@@ -122,7 +122,7 @@ class UserZone extends Model
//查询房主此时是否在聊天室
$room_id = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'], 'is_delete' => 1])->value('room_id');
if ($room_id) {
$room = db::name('vs_room')->where(['id' => $room_id, 'room_status' => 1])->field('id,room_name,room_number,room_cover,room_intro,hot_value,type_id')->find();
$room = db::name('vs_room')->where(['id' => $room_id, 'room_status' => 1])->field('id,room_name,room_number,room_cover,room_intro,today_hot_value as hot_value,type_id')->find();
$v['room_id'] = $room['id'];
$v['room_cover'] = $room['room_cover'];
$v['room_type'] = db::name('vs_room_type')->where(['id' => $room['type_id'], 'status' => 1])->field('type_name');

View File

@@ -20,7 +20,6 @@ class BaseCom extends Controller
header("Access-Control-Max-Age: 3600");
//检测系统是否维护中
// $config = get_system_config();
$is_maintenance = get_system_config_value('is_maintenance');
if($is_maintenance == 2){
return V(203, '系统维护中');
@@ -37,14 +36,37 @@ class BaseCom extends Controller
}
$zhenshi_version = db::name('version')->where('type', 2)->value('oldversion');
$result = version_compare($version,$zhenshi_version);
//请求的接口
$api = request()->controller().'/'.request()->action();
if($system == 'iOS' && $result > 0){
if($api == 'Index/index_banner' || $api == 'Index/room_type_list' || $api == 'Index/room_list' || $api == 'UserZone/expand_zone' || $api == 'UserZone/zone_list' || $api == 'UserZone/topic_list' || $api == 'UserZone/get_zone_topic'){
$this->uid = 0;
//定义一个常量
define('UID', $this->uid);
}else{
$token = request()->header('token');
if (empty($token)) {
$token = input('token', '');
if(empty($token)){
return V(301, '登录失效');
}
}
$reslut = model('UserToken')->check_login_token($token);
if($reslut['code'] != 1) {
model('UserToken')->where('token', $token)->update(['token' => 1]);
return V($reslut['code'], $reslut['msg'],$reslut['data']);
} else {
$this->uid = $reslut['data'];
//定义一个常量
define('UID', $this->uid);
}
}
}else{
$token = request()->header('token');
if (empty($token)) {
$token = input('token', '');
if(empty($token)){
return V(301, '登录失效');
}

View File

@@ -0,0 +1,43 @@
<?php
namespace app\cron\controller;
use think\Db;
/*
* 定时任务,每秒执行的方法
*/
class DaySeconds
{
/*
* 运行函数
*/
function index()
{
echo "清除房间热度值:\n";
$this->clear_room_today_hot_value();//0点以后房间热度值清零
echo "\n";
}
/*
* 0点以后房间热度值清零
* 配置:定时脚本每天 0点 执行
* 配置http://vschat.qxmier.com/api/Cron/DaySeconds
*/
public function clear_room_today_hot_value() {
$where = [];
$where['delete_time'] = 0;
$where['is_show_room'] = 1;
$room = db::name('vs_room')->where($where)->select();
echo date('Y-m-d H:i:s').' 开始清零:'.count($room)."\n";
foreach ($room as $key => $value) {
$data = [
'today_hot_value' => 0,
];
db::name('vs_room')->where(['id' => $value['id']])->update($data);
}
echo date('Y-m-d H:i:s').' 完成'."\n";
die;
}
}

View File

@@ -30,9 +30,9 @@ class PerformPerSecond
echo "pk发起10秒后无应答拒绝\n";
$this->pk_start_refuse();
echo "\n";
echo "提现云账号订单状态查询:\n";
$this->withdraw_order_status();
echo "\n";
// echo "提现云账号订单状态查询:\n";
// $this->withdraw_order_status();
// echo "\n";
}
@@ -144,6 +144,7 @@ class PerformPerSecond
db::name('vs_user_withdrawal')->where('order_sn',$value['order_sn'])->update([
'status' => 6,
'pay_time' => time(),
'pay_message' => $result['data']['msg'],
'updatetime' => time()
]);
}else{

View File

@@ -231,12 +231,13 @@ class YunPay
$notifyReq = new NotifyRequest ($data, $mess, $timestamp, $sign) ;// 发起验签解密
try {
$result = $notifyClient->verifyAndDecrypt($notifyReq) ;
Log::record("云账户回调信息".json_encode($result),"info");
if ($result) {
Log::record("云账户回调信息-返回:".json_encode($result),"info");
$result = json_decode($result,true);
if ($result['signRes']) {
// 验签通过、解密成功
return ['code' => 1, 'msg' => "验签通过、解密成功:", 'data' => $result];
return ['code' => 1, 'msg' => "验签通过、解密成功:", 'data' => $result['data']];
}else{
return ['code' => 0, 'msg' => "验签失败", 'data' => null];
return ['code' => 0, 'msg' => "验签失败", 'data' => $result['data']];
}
}
catch(Exception $e){

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
[{"id": 3, "name": "\u6bcf\u79d2\u6267\u884c", "type": "minute-n", "where1": "1", "where_hour": 1, "where_minute": 1, "echo": "3b2a68def60d02214f0fc9b8f651b882", "addtime": "2025-08-04 19:23:26", "status": 1, "save": "", "backupTo": "", "sName": "", "sBody": "", "sType": "toUrl", "urladdress": "http://chat.qxmier.com/api/Cron/PerformPerSecond", "save_local": 0, "notice": 0, "notice_channel": "", "db_type": "", "split_type": "", "split_value": "", "type_id": "", "rname": "\u6bcf\u79d2\u6267\u884c", "keyword": "", "post_param": "", "flock": 0, "time_set": "", "backup_mode": "0", "db_backup_path": "", "time_type": "", "special_time": "", "log_cut_path": "", "user_agent": "", "version": "", "table_list": "", "result": 1, "second": "1", "stop_site": "0"}, {"id": 4, "name": "\u8bbf\u95eeURL-[ http://chat.qxmier.com/api/Cron/TenSeconds ]", "type": "minute-n", "where1": "1", "where_hour": 1, "where_minute": 1, "echo": "ce799a9f4d0839178a49e12521134382", "addtime": "2025-08-04 19:23:26", "status": 1, "save": "", "backupTo": "", "sName": "", "sBody": "", "sType": "toUrl", "urladdress": "http://chat.qxmier.com/api/Cron/TenSeconds", "save_local": 0, "notice": 0, "notice_channel": "", "db_type": "", "split_type": "", "split_value": "", "type_id": "", "rname": "\u6bcf10\u79d2\u6267\u884c\u4e00\u4e0b", "keyword": "", "post_param": "", "flock": 0, "time_set": "", "backup_mode": "0", "db_backup_path": "", "time_type": "", "special_time": "", "log_cut_path": "", "user_agent": "", "version": "", "table_list": "", "result": 1, "second": "10", "stop_site": "0"}, {"id": 5, "name": "\u6bcf\u5468\u6267\u884c", "type": "week", "where1": "1", "where_hour": 1, "where_minute": 30, "echo": "6dee8a90ed46c5ba3ef343da4a58fa38", "addtime": "2025-08-04 19:24:31", "status": 1, "save": "", "backupTo": "", "sName": "", "sBody": "", "sType": "toUrl", "urladdress": "http://chat.qxmier.com/api/Cron/PerformPerWeek", "save_local": 0, "notice": 0, "notice_channel": "", "db_type": "", "split_type": "", "split_value": "", "type_id": "", "rname": "\u6bcf\u5468\u6267\u884c", "keyword": "", "post_param": "", "flock": 1, "time_set": "", "backup_mode": "", "db_backup_path": "", "time_type": "", "special_time": "", "log_cut_path": "", "user_agent": "", "version": "", "table_list": "", "result": 1, "second": "", "stop_site": "0"}, {"id": 6, "name": "\u7eed\u7b7eLet's Encrypt\u8bc1\u4e66", "type": "day", "where1": "", "where_hour": 12, "where_minute": 3, "echo": "3ab48c27ec99cb9787749c362afae517", "addtime": "2025-08-08 09:53:50", "status": 1, "save": "", "backupTo": "localhost", "sName": "", "sBody": "/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew_v2=1", "sType": "toShell", "urladdress": "", "save_local": 0, "notice": 0, "notice_channel": "", "db_type": "", "split_type": "", "split_value": 0, "type_id": "", "rname": "", "keyword": "", "post_param": "", "flock": 0, "time_set": "", "backup_mode": "", "db_backup_path": "", "time_type": "", "special_time": "", "log_cut_path": "", "user_agent": "", "version": "", "table_list": "", "result": 1, "second": "", "stop_site": ""}, {"id": 7, "name": "\u6bcf\u5929\u6267\u884c", "type": "day", "where1": "1", "where_hour": 0, "where_minute": 1, "echo": "774e9b9fc6a752b50e0d48487c944f9b", "addtime": "2025-08-11 17:41:38", "status": 1, "save": "", "backupTo": "", "sName": "", "sBody": "", "sType": "toUrl", "urladdress": "http://chat.qxmier.com/api/Cron/DaySeconds", "save_local": 0, "notice": 0, "notice_channel": "", "db_type": "", "split_type": "", "split_value": "", "type_id": "", "rname": "\u6bcf\u5929\u6267\u884c", "keyword": "", "post_param": "", "flock": 1, "time_set": "", "backup_mode": "0", "db_backup_path": "", "time_type": "", "special_time": "", "log_cut_path": "", "user_agent": "", "version": "", "table_list": "", "result": 1, "second": "", "stop_site": "0"}]