manghe/app/common/helper/ConfigHelper.php
2025-05-22 13:24:18 +08:00

390 lines
11 KiB
PHP
Executable File
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\common\helper;
use think\facade\Db;
use app\common\server\RedisHelper;
/**
* 配置帮助类
* 用于获取系统配置参数
*/
class ConfigHelper
{
/**
* 静态属性,用于存储无限赏抽奖倍数
* 第一次获取后会缓存,避免重复查询
*
* @var int|null
*/
private static $infiniteMultiple = null;
/**
* 静态属性,用于存储排行榜设置
*
* @var array|null
*/
private static $rankSettings = null;
private static $appSetting = null;
private static $systemTest = null;
private static $youda_env = null;
/**
* 获取友达环境
*
* @return string 友达环境
*/
public static function getYoudaEnv()
{
if (self::$youda_env !== null) {
return self::$youda_env;
}
$youda_env = env('youda.youda_env', 'production ');
if ($youda_env) {
self::$youda_env = $youda_env;
}
return self::$youda_env;
}
public static function getIsTest(){
}
/**
* 获取应用设置
*
* @return array 应用设置
*/
public static function getAppSetting()
{
if (self::$appSetting !== null) {
return self::$appSetting;
}
// $redis = new RedisHelper();
// $cachedValue = $redis->get('config:app_setting');
// if ($cachedValue !== false) {
// self::$appSetting = json_decode($cachedValue, true);
// return self::$appSetting;
// }
$app_setting = getConfig('app_setting');
if ($app_setting) {
self::$appSetting = $app_setting;
// $redis->set('config:app_setting', json_encode($app_setting), 86400);
// return self::$appSetting;
}
return self::$appSetting;
}
/**
* 获取应用设置的key值
*
* @param string $key 配置键名
* @return mixed 配置值
*/
public static function getAppSettingKey($key)
{
$appSetting = self::getAppSetting();
return $appSetting[$key] ?? null;
}
/**
* 获取无限赏抽奖倍数
* 从数据库中查询key为infinite_multiple的配置获取multiple字段
* 将结果存入Redis缓存有效期为1天
*
* @return int 抽奖倍数默认为1000
*/
public static function getInfiniteMultiple(
) {
// 如果静态属性已有值,直接返回
if (self::$infiniteMultiple !== null) {
return self::$infiniteMultiple;
}
// 实例化Redis助手
$redis = new RedisHelper();
// 设置Redis键名
$redisKey = 'config:infinite_multiple';
// 尝试从Redis获取
$cachedValue = $redis->get($redisKey);
if ($cachedValue !== false) {
// 缓存结果到静态属性
self::$infiniteMultiple = (int) $cachedValue;
return self::$infiniteMultiple;
}
// Redis中不存在从数据库获取
$config = Db::name('config')
->where('key', 'infinite_multiple')
->value('value');
// 解析JSON数据
$configArray = json_decode($config, true);
// 获取倍数值默认为10000
$multiple = isset($configArray['multiple']) ? (int) $configArray['multiple'] : 10000;
// 存入Redis过期时间为1天86400秒
$redis->set($redisKey, $multiple, 86400);
// 缓存结果到静态属性
self::$infiniteMultiple = $multiple;
return self::$infiniteMultiple;
}
/**
* 获取排行榜设置
* 从数据库中查询key为rank_setting的配置
*
* @return array 排行榜设置
*/
public static function getRankSettings()
{
// 如果静态属性已有值,直接返回
if (self::$rankSettings !== null) {
return self::$rankSettings;
}
// 实例化Redis助手
$redis = new RedisHelper();
// 设置Redis键名
$redisKey = 'config:rank_settings';
// 尝试从Redis获取
$cachedValue = $redis->get($redisKey);
if ($cachedValue !== false) {
// 缓存结果到静态属性
self::$rankSettings = json_decode($cachedValue, true);
return self::$rankSettings;
}
// Redis中不存在从数据库获取
$config = Db::name('config')
->where('key', 'rank_setting')
->value('value');
// 解析JSON数据
$configArray = json_decode($config, true) ?: [];
// 存入Redis过期时间为1小时3600秒
$redis->set($redisKey, json_encode($configArray), 3600);
// 缓存结果到静态属性
self::$rankSettings = $configArray;
return self::$rankSettings;
}
/**
* 获取特定排行榜的时间设置
*
* @param string $type 排行榜类型dadajuan(达达卷), diamond(钻石), integral(UU币), invite(邀请新人)
* @return array 包含统计方式、开始时间和结束时间的数组
*/
public static function getRankTime($type)
{
// 获取所有排行榜设置
$settings = self::getRankSettings();
// 根据类型设置默认的键名
$statTypeKey = '';
$startKey = '';
$endKey = '';
switch ($type) {
case 'dadajuan':
$statTypeKey = 'dadajuan_stat_type';
$startKey = 'dadajuan_start_time';
$endKey = 'dadajuan_end_time';
break;
case 'diamond':
$statTypeKey = 'diamond_stat_type';
$startKey = 'diamond_start_time';
$endKey = 'diamond_end_time';
break;
case 'integral':
$statTypeKey = 'integral_stat_type';
$startKey = 'integral_start_time';
$endKey = 'integral_end_time';
break;
case 'invite':
$statTypeKey = 'invite_stat_type';
$startKey = 'invite_start_time';
$endKey = 'invite_end_time';
break;
case 'loss':
$statTypeKey = 'loss_stat_type';
$startKey = 'loss_start_time';
$endKey = 'loss_end_time';
break;
case 'loss_desc':
$statTypeKey = 'loss_stat_type';
$startKey = 'loss_start_time';
$endKey = 'loss_end_time';
break;
default:
return [
'stat_type' => 'daily',
'start_time' => '',
'end_time' => ''
];
}
// 获取统计方式,默认为每天统计
$statType = isset($settings[$statTypeKey]) ? $settings[$statTypeKey] : 'daily';
// 根据统计方式计算时间范围
$startTime = '';
$endTime = '';
// 当前时间
$now = time();
switch ($statType) {
case 'daily': // 每天统计当天0点到第二天0点
$startTime = date('Y-m-d 00:00:00', $now);
$endTime = date('Y-m-d 00:00:00', strtotime('+1 day', $now));
break;
case 'weekly': // 每周统计本周一0点到下周一0点
$weekStart = strtotime('this week monday', $now);
$startTime = date('Y-m-d 00:00:00', $weekStart);
$endTime = date('Y-m-d 00:00:00', strtotime('+1 week', $weekStart));
break;
case 'monthly': // 每月统计本月1号0点到下月1号0点
$startTime = date('Y-m-01 00:00:00', $now);
$endTime = date('Y-m-01 00:00:00', strtotime('+1 month', $now));
break;
case 'yearly': // 每年统计本年1月1号0点到下年1月1号0点
$startTime = date('Y-01-01 00:00:00', $now);
$endTime = date('Y-01-01 00:00:00', strtotime('+1 year', $now));
break;
case 'custom': // 自定义时间范围:使用设置的时间
$startTime = isset($settings[$startKey]) && !empty($settings[$startKey]) ?
$settings[$startKey] : '';
$endTime = isset($settings[$endKey]) && !empty($settings[$endKey]) ?
$settings[$endKey] : '';
break;
}
// 返回排行榜配置
return [
'stat_type' => $statType,
'start_time' => $startTime,
'end_time' => $endTime
];
}
/**
* 清除排行榜设置的Redis缓存
* 在排行榜设置更新时调用,确保获取最新数据
*
* @return bool 是否成功清除缓存
*/
public static function clearRankSettingsCache()
{
// 重置静态属性
self::$rankSettings = null;
// 清除Redis缓存
$redis = new RedisHelper();
$redisKey = 'config:rank_settings';
// 删除缓存,返回是否成功
return $redis->delete($redisKey);
}
/**
* 获取内测配置
*
* @return array 内测配置
*/
public static function getSystemTest()
{
// 如果静态属性已有值,直接返回
if (self::$systemTest !== null) {
return self::$systemTest;
}
// // 实例化Redis助手
// $redis = new RedisHelper();
// // 设置Redis键名
// $redisKey = 'config:system_test';
// // 尝试从Redis获取
// $cachedValue = $redis->get($redisKey);
// if ($cachedValue !== false) {
// // 缓存结果到静态属性
// self::$systemTest = json_decode($cachedValue, true);
// return self::$systemTest;
// }
// Redis中不存在从数据库获取
$config = Db::name('config')
->where('key', 'system_test')
->value('value');
// 解析JSON数据
$configArray = json_decode($config, true) ?: [];
// 存入Redis过期时间为1小时3600秒
// $redis->set($redisKey, json_encode($configArray), 3600);
// 缓存结果到静态属性
self::$systemTest = $configArray;
return self::$systemTest;
}
/**
* 获取内测配置
*
* @return array 内测配置
*/
public static function getSystemTestKey($key)
{
// 如果静态属性已有值,直接返回
$system_test = self::getSystemTest();
if ($system_test != null && $system_test['enable_test'] == "1") {
return $system_test[$key];
}
if ($key == "sign_multiple") {
return "0";
}
if ($key == "disable_wechat_pay") {
return "0";
}
return $system_test['enable_test'];
}
/**
* 清除内测配置缓存
*
* @return bool 是否成功清除缓存
*/
public static function clearSystemTestCache()
{
// 重置静态属性
self::$systemTest = null;
// 清除Redis缓存
$redis = new RedisHelper();
$redisKey = 'config:system_test';
// 删除缓存,返回是否成功
return $redis->delete($redisKey);
}
}