WeightConfigController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Api\WeightConfigController as ApiWeightConfigController;
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Redis;
  7. class WeightConfigController extends Controller
  8. {
  9. public function index()
  10. {
  11. $config = ApiWeightConfigController::getConfig();
  12. $totalRaw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_CLICKS);
  13. $totalClicks = [];
  14. foreach (ApiWeightConfigController::VALID_IDS as $id) {
  15. $totalClicks[$id] = isset($totalRaw[$id]) ? intval($totalRaw[$id]) : 0;
  16. }
  17. $days = 7;
  18. $dailyClicks = [];
  19. for ($i = $days - 1; $i >= 0; $i--) {
  20. $date = date('Y-m-d', strtotime("-{$i} days"));
  21. $raw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX . $date);
  22. $row = ['date' => $date];
  23. foreach (ApiWeightConfigController::VALID_IDS as $id) {
  24. $row[$id] = isset($raw[$id]) ? intval($raw[$id]) : 0;
  25. }
  26. $dailyClicks[] = $row;
  27. }
  28. return view('admin.weight_config.index', compact('config', 'totalClicks', 'dailyClicks'));
  29. }
  30. public function update(Request $request)
  31. {
  32. $config = $request->input('config');
  33. if (is_string($config)) {
  34. $config = json_decode($config, true);
  35. }
  36. if (!is_array($config)) {
  37. return response()->json(['status' => 'error', 'message' => '参数错误']);
  38. }
  39. $save = [];
  40. foreach (ApiWeightConfigController::VALID_IDS as $id) {
  41. $val = isset($config[$id]) ? intval($config[$id]) : 0;
  42. if ($val < 0) $val = 0;
  43. $save[$id] = $val;
  44. }
  45. if (array_sum($save) <= 0) {
  46. return response()->json(['status' => 'error', 'message' => '权重之和必须大于 0']);
  47. }
  48. Redis::set(ApiWeightConfigController::REDIS_KEY_CONFIG, json_encode($save));
  49. return response()->json(['status' => 'success', 'message' => '更新成功', 'config' => $save]);
  50. }
  51. public function resetStats(Request $request)
  52. {
  53. $type = $request->input('type', 'total');
  54. if ($type === 'all') {
  55. Redis::del(ApiWeightConfigController::REDIS_KEY_CLICKS);
  56. $keys = Redis::keys(ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX . '*');
  57. if (!empty($keys)) {
  58. $prefix = config('database.redis.options.prefix', '');
  59. if ($prefix) {
  60. $keys = array_map(function ($k) use ($prefix) {
  61. return strpos($k, $prefix) === 0 ? substr($k, strlen($prefix)) : $k;
  62. }, $keys);
  63. }
  64. foreach ($keys as $k) {
  65. Redis::del($k);
  66. }
  67. }
  68. } else {
  69. Redis::del(ApiWeightConfigController::REDIS_KEY_CLICKS);
  70. }
  71. return response()->json(['status' => 'success', 'message' => '清除成功']);
  72. }
  73. }