'CashApp', 2 => 'PayPal', self::PIX_TYPE_CASH_SMALL => 'CashApp small(<50)', ]; } public static function all() { $cache = Redis::get(self::CACHE_KEY); if ($cache) { $config = json_decode($cache, true); if (is_array($config)) { return $config; } self::clearCache(); } $json = DB::table('QPAccountsDB.dbo.SystemStatusInfo') ->where('StatusName', self::STATUS_NAME) ->value('StatusString'); $config = json_decode($json ?: '', true); $config = is_array($config) ? $config : []; Redis::setex(self::CACHE_KEY, self::CACHE_TTL, json_encode($config)); return $config; } public static function getGlobal() { $config = self::all(); if (self::isRatioRules($config)) { return $config; } return $config['100'] ?? $config[100] ?? []; } public static function saveGlobal(array $rules) { self::saveAll(self::normalizeRules($rules)); } public static function clearCache() { Redis::del(self::CACHE_KEY); } public static function disableAgent($agent) { $agent = (int)$agent; $config = self::getGlobal(); $changed = false; foreach (array_keys(self::pixTypeOptions()) as $pixType) { $items = $config[$pixType] ?? []; if (!is_array($items)) { continue; } $filtered = []; foreach ($items as $item) { if ((int)($item['agent'] ?? 0) == $agent) { $changed = true; continue; } $filtered[] = $item; } $config[$pixType] = $filtered; } if ($changed) { self::saveAll($config); } return $changed; } public static function normalizeRules(array $rules) { $result = []; foreach (array_keys(self::pixTypeOptions()) as $pixType) { foreach (($rules[$pixType] ?? []) as $agent => $ratio) { $ratio = (int)$ratio; if ($ratio <= 0) { continue; } $result[$pixType][] = [ 'agent' => (int)$agent, 'ratio' => $ratio, ]; } } return $result; } private static function isRatioRules(array $config) { foreach (array_keys(self::pixTypeOptions()) as $pixType) { if (isset($config[$pixType])) { return true; } } return false; } private static function saveAll(array $config) { DB::table('QPAccountsDB.dbo.SystemStatusInfo')->updateOrInsert( ['StatusName' => self::STATUS_NAME], [ 'StatusValue' => 0, 'StatusString' => json_encode($config), 'StatusTip' => 'withdrawal auto payout ratio config', 'StatusDescription' => 'auto payout ratio config by withdrawal method', ] ); self::clearCache(); } }