UserController 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: vanshao
  5. * Date: 2019-05-10
  6. * Time: 10:20
  7. */
  8. namespace App\Http\Controllers\Admin\User;
  9. use App\Http\Controllers\Controller;
  10. use App\Http\Models\Site;
  11. use App\Http\Models\User;
  12. use GuzzleHttp\Client;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Support\Facades\Auth;
  15. use Illuminate\Support\Facades\Log;
  16. class UserController extends Controller
  17. {
  18. public function __construct()
  19. {
  20. }
  21. public function index(Request $request)
  22. {
  23. if ($siteId = $request->input('siteId')) {
  24. $site = Site::query()->where(['id' => $siteId])->first();
  25. $view = 'admin/user/user_for_site';
  26. $btn['closeBtn'] = 1;
  27. // dd($siteId,$site);
  28. } else {
  29. $user = auth()->user();
  30. $site = $user->sites->first();
  31. $view = 'admin/user/user';
  32. $btn['closeBtn'] = 0;
  33. }
  34. if (!$site) {
  35. return view('admin/errors/tips', $btn);
  36. }
  37. //访问地区数据
  38. $area = 'SELECT country AS region, SUM(pv) AS pv,SUM(uv) AS uv,SUM(ip) AS ip,SUM(duration) AS duration,SUM(bounces) AS bounces FROM `scn_traffic_report_region` GROUP BY `country` ORDER BY `pv` DESC limit 10';
  39. ////访问量数据
  40. $access = sprintf('SELECT FROM_UNIXTIME(timestamp, "%%Y-%%m-%%d") AS lt,
  41. SUM(pv) AS pv,
  42. SUM(uv) AS uv,
  43. SUM(ip) AS ip,
  44. SUM(duration) AS duration,
  45. SUM(bounces) AS bounces FROM `scn_traffic_report_hourly` WHERE timestamp <= %s GROUP BY `lt` ORDER BY `lt` desc LIMIT 14 ', time());
  46. //总访问量
  47. $totalAccess = 'SELECT
  48. SUM(pv) AS pv,
  49. SUM(uv) AS uv,
  50. SUM(duration) AS duration,
  51. SUM(bounces) AS bounces FROM `scn_traffic_report_hourly` limit 1';
  52. //top10url
  53. $top10Url = sprintf('SELECT url, SUM(pv) AS pv FROM `scn_traffic_report_url` WHERE timestamp <= %s GROUP BY `url` ORDER BY `pv` DESC limit 10 ', strtotime('-30 days'));
  54. ////top10入口
  55. $top10Entrance = sprintf('SELECT ref_host, SUM(pv) AS pv FROM `scn_traffic_report_referrer` WHERE timestamp >= %s GROUP BY `ref_host` ORDER BY `pv` DESC limit 10', strtotime('-30 days'));
  56. $content = 'select count(1) from scn_content';
  57. $http = new Client();
  58. // $sql = array(
  59. // 'SELECT country AS region,
  60. // SUM(pv) AS pv,
  61. // SUM(uv) AS uv,
  62. // SUM(ip) AS ip,
  63. // SUM(duration) AS duration,
  64. // SUM(bounces) AS bounces FROM `scn_traffic_report_region` GROUP BY `country` ORDER BY `pv` DESC limit 10 ',//访问地区数据
  65. // 'SELECT FROM_UNIXTIME(timestamp, "%Y-%m-%d") AS lt,
  66. // SUM(pv) AS pv,
  67. // SUM(uv) AS uv,
  68. // SUM(ip) AS ip,
  69. // SUM(duration) AS duration,
  70. // SUM(bounces) AS bounces FROM `scn_traffic_report_hourly` WHERE timestamp <= ' . "'" . time() . "'" . ' GROUP BY `lt` ORDER BY `lt` desc LIMIT 14 ',//访问量数据
  71. // 'SELECT
  72. // SUM(pv) AS pv,
  73. // SUM(uv) AS uv,
  74. // SUM(duration) AS duration,
  75. // SUM(bounces) AS bounces FROM `scn_traffic_report_hourly` limit 1',//总访问量
  76. // 'SELECT url, SUM(pv) AS pv FROM `scn_traffic_report_url` WHERE timestamp <= ' . "'" . strtotime('-30 days') . "'" . ' GROUP BY `url` ORDER BY `pv` DESC limit 10 ',//top10url
  77. // 'SELECT ref_host, SUM(pv) AS pv FROM `scn_traffic_report_referrer` WHERE timestamp >= ' . "'" . strtotime('-30 days') . "'" . ' GROUP BY `ref_host` ORDER BY `pv` DESC limit 10 ',//top10入口
  78. // 'select count(1) from scn_content'
  79. // );
  80. try {
  81. $response = $http->post($site->api_url . 'api / getdata', [
  82. 'form_params' => [
  83. $area,
  84. $access,
  85. $totalAccess,
  86. $top10Url,
  87. $top10Entrance,
  88. $content
  89. ]
  90. ]);
  91. $data = json_decode($response->getBody(), true);
  92. $country_data = array_reverse($data['0']);
  93. $pv_data = array_reverse($data['1']);
  94. $total_pv_data = $data['2']['0'];
  95. $top_url = $data['3'];
  96. $top_host = $data['4'];
  97. $total_content = $data['5']['0']['count(1)'];
  98. //访问地区数据
  99. foreach ($country_data as $value) {
  100. $country_data['country'][] = $value['region'];
  101. $country_data['pv'][] = $value['pv'];
  102. $country_data['uv'][] = $value['uv'];
  103. $country_data['duration'][] = round($value['duration'] / $value['pv'] / 60) . ' . ' . ($value['duration'] / $value['pv']) % 60;
  104. $country_data['bounces'][] = round($value['bounces'] / $value['uv'] * 100) > 100 ? 100 : round($value['bounces'] / $value['uv'] * 100);
  105. $country_data['pie'][] = array(
  106. 'value' => $value['pv'],
  107. 'name' => $value['region']
  108. );
  109. }
  110. $country_data['pie_country'] = array_reverse($country_data['country']);//饼图国家倒叙
  111. //平均在线时长
  112. $total_pv_data['avg_duration'] = round($total_pv_data['duration'] / $total_pv_data['pv'] / 60) . ':' . ($total_pv_data['duration'] / $total_pv_data['pv']) % 60;
  113. //访问量数据
  114. foreach ($pv_data as $value) {
  115. $pv_data['pv'][] = $value['pv'];
  116. $pv_data['uv'][] = $value['uv'];
  117. $pv_data['duration'][] = round($value['duration'] / $value['pv'] / 60) . ' . ' . ($value['duration'] / $value['pv']) % 60;
  118. $pv_data['bounces'][] = round($value['bounces'] / $value['uv'] * 100) > 100 ? 100 : round($value['bounces'] / $value['uv'] * 100);
  119. }
  120. $pv_data['xAxis'] = $this->getDescDayTime(13);
  121. $addition = [
  122. 'pv_data' => $pv_data,
  123. 'country_data' => $country_data,
  124. 'total_pv_data' => $total_pv_data,
  125. 'top_url' => $top_url,
  126. 'top_host' => $top_host,
  127. 'total_content' => $total_content,
  128. ];
  129. } catch (\Throwable $throwable) {
  130. Log::info(var_export($throwable->getMessage(), 1));
  131. return view('admin / errors / tips', [
  132. 'tips' => '请求错误'
  133. ] + $btn);
  134. }
  135. return view($view, ['site' => $site, 'siteId' => $site->id] + $addition);
  136. }
  137. //获取倒序日期时间
  138. public function getDescDayTime($days)
  139. {
  140. for ($i = $days; $i >= 0; $i--) {
  141. $return_data[] = date("m-d", strtotime("-$i day"));
  142. }
  143. return $return_data;
  144. }
  145. }