DataChart.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Helpers;
  3. use App\Models\NodeDailyDataFlow;
  4. use App\Models\NodeHourlyDataFlow;
  5. use App\Models\UserDailyDataFlow;
  6. use App\Models\UserDataFlowLog;
  7. use App\Models\UserHourlyDataFlow;
  8. use DB;
  9. trait DataChart
  10. {
  11. public function dataFlowChart($id, $is_node = false): array // 流量使用图表
  12. {
  13. if ($is_node) {
  14. $currentFlow = UserDataFlowLog::whereNodeId($id);
  15. $hourlyFlow = NodeHourlyDataFlow::whereNodeId($id)->whereDate('created_at',
  16. date('Y-m-d'))->selectRaw('(DATE_FORMAT(node_hourly_data_flow.created_at, "%k")) as date, total')->pluck('total', 'date');
  17. $dailyFlow = NodeDailyDataFlow::whereNodeId($id)->whereMonth('created_at',
  18. date('n'))->selectRaw('(DATE_FORMAT(node_daily_data_flow.created_at, "%e")) as date, total')->pluck('total', 'date');
  19. } else {
  20. $currentFlow = UserDataFlowLog::whereUserId($id);
  21. $hourlyFlow = UserHourlyDataFlow::userHourly($id)->whereDate('created_at',
  22. date('Y-m-d'))->selectRaw('(DATE_FORMAT(user_hourly_data_flow.created_at, "%k")) as date, total')->pluck('total', 'date');
  23. $dailyFlow = UserDailyDataFlow::userDaily($id)->whereMonth('created_at',
  24. date('n'))->selectRaw('(DATE_FORMAT(user_daily_data_flow.created_at, "%e")) as date, total')->pluck('total', 'date');
  25. }
  26. $currentFlow = $currentFlow->where('log_time', '>=', strtotime(date('Y-m-d H:0')))->sum(DB::raw('u + d'));
  27. // 节点一天内的流量
  28. $hourlyData = array_fill(0, date('G') + 1, 0);
  29. foreach ($hourlyFlow as $date => $dataFlow) {
  30. $hourlyData[$date] = round($dataFlow / GB, 3);
  31. }
  32. $hourlyData[date('G') + 1] = round($currentFlow / GB, 3);
  33. // 节点一个月内的流量
  34. $dailyData = array_fill(0, date('j') - 1, 0);
  35. foreach ($dailyFlow as $date => $dataFlow) {
  36. $dailyData[$date - 1] = round($dataFlow / GB, 3);
  37. }
  38. $dailyData[date('j', strtotime(now())) - 1] = round(array_sum($hourlyData) + $currentFlow / GB, 3);
  39. return [
  40. 'trafficDaily' => $dailyData,
  41. 'trafficHourly' => $hourlyData,
  42. 'monthDays' => range(1, date('j')), // 本月天数
  43. 'dayHours' => range(0, date('G') + 1), // 本日小时
  44. ];
  45. }
  46. }