| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Http\Controllers\Api\WeightConfigController as ApiWeightConfigController;
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Redis;
- class WeightConfigController extends Controller
- {
- public function index()
- {
- $config = ApiWeightConfigController::getConfig();
- $totalRaw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_CLICKS);
- $totalClicks = [];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $totalClicks[$id] = isset($totalRaw[$id]) ? intval($totalRaw[$id]) : 0;
- }
- $showRaw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_SHOW);
- $totalShows = [];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $totalShows[$id] = isset($showRaw[$id]) ? intval($showRaw[$id]) : 0;
- }
- $days = 3;
- $dailyClicks = [];
- $dailyShows = [];
- for ($i = $days - 1; $i >= 0; $i--) {
- $date = date('Y-m-d', strtotime("-{$i} days"));
- $raw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX . $date);
- $row = ['date' => $date];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $row[$id] = isset($raw[$id]) ? intval($raw[$id]) : 0;
- }
- $dailyClicks[] = $row;
- $rawShow = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_SHOW_DAILY_PREFIX . $date);
- $rowShow = ['date' => $date];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $rowShow[$id] = isset($rawShow[$id]) ? intval($rawShow[$id]) : 0;
- }
- $dailyShows[] = $rowShow;
- }
- $today = date('Y-m-d');
- $todayClickRaw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX . $today);
- $todayShowRaw = Redis::hgetall(ApiWeightConfigController::REDIS_KEY_SHOW_DAILY_PREFIX . $today);
- $todayClicks = [];
- $todayShows = [];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $todayClicks[$id] = isset($todayClickRaw[$id]) ? intval($todayClickRaw[$id]) : 0;
- $todayShows[$id] = isset($todayShowRaw[$id]) ? intval($todayShowRaw[$id]) : 0;
- }
- return view('admin.weight_config.index', compact(
- 'config',
- 'totalClicks',
- 'totalShows',
- 'todayClicks',
- 'todayShows',
- 'dailyClicks',
- 'dailyShows'
- ));
- }
- public function update(Request $request)
- {
- $config = $request->input('config');
- if (is_string($config)) {
- $config = json_decode($config, true);
- }
- if (!is_array($config)) {
- return response()->json(['status' => 'error', 'message' => '参数错误']);
- }
- $save = [];
- foreach (ApiWeightConfigController::VALID_IDS as $id) {
- $val = isset($config[$id]) ? intval($config[$id]) : 0;
- if ($val < 0) $val = 0;
- $save[$id] = $val;
- }
- if (array_sum($save) <= 0) {
- return response()->json(['status' => 'error', 'message' => '权重之和必须大于 0']);
- }
- Redis::set(ApiWeightConfigController::REDIS_KEY_CONFIG, json_encode($save));
- return response()->json(['status' => 'success', 'message' => '更新成功', 'config' => $save]);
- }
- public function resetStats(Request $request)
- {
- $type = $request->input('type');
- if (!$type) {
- return response()->json(['status' => 'error', 'message' => '缺少操作类型']);
- }
- $prefix = config('database.redis.options.prefix', '');
- $stripPrefix = function ($keys) use ($prefix) {
- if (!$prefix || empty($keys)) {
- return $keys;
- }
- return array_map(function ($k) use ($prefix) {
- return strpos($k, $prefix) === 0 ? substr($k, strlen($prefix)) : $k;
- }, $keys);
- };
- $hdelFieldFromDailyKeys = function (string $dailyPrefix, string $field) use ($stripPrefix) {
- $keys = Redis::keys($dailyPrefix . '*');
- foreach ($stripPrefix($keys) as $k) {
- Redis::hdel($k, $field);
- }
- };
- if ($type === 'all') {
- Redis::del(ApiWeightConfigController::REDIS_KEY_CLICKS);
- Redis::del(ApiWeightConfigController::REDIS_KEY_SHOW);
- foreach ([
- ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX,
- ApiWeightConfigController::REDIS_KEY_SHOW_DAILY_PREFIX,
- ] as $dailyPrefix) {
- $keys = Redis::keys($dailyPrefix . '*');
- foreach ($stripPrefix($keys) as $k) {
- Redis::del($k);
- }
- }
- } elseif ($type === 'click_id') {
- $id = intval($request->input('id'));
- if (!in_array($id, ApiWeightConfigController::VALID_IDS, true)) {
- return response()->json(['status' => 'error', 'message' => '无效 id']);
- }
- $field = (string) $id;
- Redis::hdel(ApiWeightConfigController::REDIS_KEY_CLICKS, $field);
- $hdelFieldFromDailyKeys(ApiWeightConfigController::REDIS_KEY_CLICKS_DAILY_PREFIX, $field);
- } elseif ($type === 'show_id') {
- $id = intval($request->input('id'));
- if (!in_array($id, ApiWeightConfigController::VALID_IDS, true)) {
- return response()->json(['status' => 'error', 'message' => '无效 id']);
- }
- $field = (string) $id;
- Redis::hdel(ApiWeightConfigController::REDIS_KEY_SHOW, $field);
- $hdelFieldFromDailyKeys(ApiWeightConfigController::REDIS_KEY_SHOW_DAILY_PREFIX, $field);
- } else {
- return response()->json(['status' => 'error', 'message' => '未知操作类型']);
- }
- return response()->json(['status' => 'success', 'message' => '清除成功']);
- }
- }
|