AnalysisWeeklyVisit.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\store\model\analysis;
  4. use app\common\model\analysis\AnalysisWeeklyVisit as AnalysisWeeklyVisitModel;
  5. use app\common\service\MpWxService;
  6. /**
  7. * 每周访问趋势模型
  8. * Class AnalysisWeeklyVisit
  9. * @package app\common\model\analysis
  10. */
  11. class AnalysisWeeklyVisit extends AnalysisWeeklyVisitModel
  12. {
  13. /**
  14. * 批量写入每周行为数据
  15. * 发布上线时,只需执行一次
  16. */
  17. public static function addInitVisit()
  18. {
  19. $begin_date = strtotime('20211001'); // 生成初始数据开始时间,建议时间为:小程序上线时间
  20. $end_date = strtotime(date('Ymd', strtotime('-1 days'))); // 生成初始数据结束时间,建议时间为:昨天
  21. $date_arr = period_week($begin_date, $end_date, true);
  22. $res = [];
  23. foreach ($date_arr as $date) {
  24. $res[] = self::visit($date);
  25. }
  26. // 写入数据
  27. return AnalysisWeeklyVisit::insertAll($res);
  28. }
  29. /**
  30. * 写入每周行为数据
  31. * 定时任务每日执行一次,生成上周数据
  32. */
  33. public static function addVisit()
  34. {
  35. $week_arr = last_week_between_time();
  36. $date = [
  37. 's' => date('Y-m-d', $week_arr['s']), // 上周周一日期
  38. 'e' => date('Y-m-d', $week_arr['e']) // 上周周日日期
  39. ];
  40. $data = self::visit($date);
  41. // 移除数据
  42. self::where('start_time', '>=', strtotime($date['s']))
  43. ->where('end_time', '<', strtotime($date['e'])+ 86400)->delete();
  44. // 写入数据
  45. return AnalysisWeeklyVisit::insert($data);
  46. }
  47. /**
  48. * 获取单周数据概览及访问趋势数据
  49. *
  50. * @param $date
  51. * @return array
  52. */
  53. public static function visit($date)
  54. {
  55. $summary = self::getSummary($date); // 每周数据概览 从数据库查询统计
  56. $visitTrend = self::getVisitTrend($date);// 每周访问趋势
  57. $data = array_merge($summary, $visitTrend);
  58. $data['create_time'] = time();
  59. $data['update_time'] = time();
  60. $data['start_time'] = strtotime($date['s']); // 开始时间 00:00:00
  61. $data['end_time'] = strtotime($date['e']) + 86400 - 1; // 结束时间 23:59:59
  62. return $data;
  63. }
  64. /**
  65. * 获取用户访问小程序数据周趋势
  66. *
  67. * @param $date
  68. * @return array|mixed
  69. */
  70. private static function getVisitTrend($date)
  71. {
  72. $startDate = date('Ymd', strtotime($date['s']));
  73. $endDate = date('Ymd', strtotime($date['e']));
  74. $params['begin_date'] = $startDate;
  75. $params['end_date'] = $endDate;
  76. $data = MpWxService::doAnalysisAction('getweanalysisappidweeklyvisittrend', $params);
  77. $data = $data['list'][0] ?? [];
  78. return $data;
  79. }
  80. /**
  81. * 获取用户访问小程序数据概况
  82. *
  83. * @param $date
  84. * @return array|mixed
  85. */
  86. private static function getSummary($date)
  87. {
  88. $visit_total = AnalysisDailyVisit::where('start_time', '>=', strtotime($date['s']))
  89. ->where('end_time', '<', strtotime($date['e'])+ 86400)
  90. ->order('ref_date', 'desc')
  91. ->value('visit_total');
  92. $data = AnalysisDailyVisit::where('start_time', '>=', strtotime($date['s']))
  93. ->where('end_time', '<', strtotime($date['e'])+ 86400)
  94. ->order('ref_date', 'desc')
  95. ->field('sum(share_pv) as share_pv, sum(share_uv) as share_uv')
  96. ->find();
  97. $data->visit_total = $visit_total;
  98. return $data->toArray();
  99. }
  100. }