StatController.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Http\Controllers\V2\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\CommissionLog;
  5. use App\Models\Order;
  6. use App\Models\ServerShadowsocks;
  7. use App\Models\ServerTrojan;
  8. use App\Models\ServerVmess;
  9. use App\Models\Stat;
  10. use App\Models\StatServer;
  11. use App\Models\StatUser;
  12. use App\Models\Ticket;
  13. use App\Models\User;
  14. use App\Services\StatisticalService;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Cache;
  17. use Illuminate\Support\Facades\DB;
  18. class StatController extends Controller
  19. {
  20. public function override(Request $request)
  21. {
  22. $params = $request->validate([
  23. 'start_at' => '',
  24. 'end_at' => ''
  25. ]);
  26. if (isset($params['start_at']) && isset($params['end_at'])) {
  27. $stats = Stat::where('record_at', '>=', $params['start_at'])
  28. ->where('record_at', '<', $params['end_at'])
  29. ->get()
  30. ->makeHidden(['record_at', 'created_at', 'updated_at', 'id', 'record_type'])
  31. ->toArray();
  32. } else {
  33. $statisticalService = new StatisticalService();
  34. return [
  35. 'data' => $statisticalService->generateStatData()
  36. ];
  37. }
  38. $stats = array_reduce($stats, function($carry, $item) {
  39. foreach($item as $key => $value) {
  40. if(isset($carry[$key]) && $carry[$key]) {
  41. $carry[$key] += $value;
  42. } else {
  43. $carry[$key] = $value;
  44. }
  45. }
  46. return $carry;
  47. }, []);
  48. return [
  49. 'data' => $stats
  50. ];
  51. }
  52. public function record(Request $request)
  53. {
  54. $request->validate([
  55. 'type' => 'required|in:paid_total,commission_total,register_count',
  56. 'start_at' => '',
  57. 'end_at' => ''
  58. ]);
  59. $statisticalService = new StatisticalService();
  60. $statisticalService->setStartAt($request->input('start_at'));
  61. $statisticalService->setEndAt($request->input('end_at'));
  62. return [
  63. 'data' => $statisticalService->getStatRecord($request->input('type'))
  64. ];
  65. }
  66. public function ranking(Request $request)
  67. {
  68. $request->validate([
  69. 'type' => 'required|in:server_traffic_rank,user_consumption_rank,invite_rank',
  70. 'start_at' => '',
  71. 'end_at' => '',
  72. 'limit' => 'nullable|integer'
  73. ]);
  74. $statisticalService = new StatisticalService();
  75. $statisticalService->setStartAt($request->input('start_at'));
  76. $statisticalService->setEndAt($request->input('end_at'));
  77. return [
  78. 'data' => $statisticalService->getRanking($request->input('type'), $request->input('limit') ?? 20)
  79. ];
  80. }
  81. }