AnalysisMonthlyVisit.php 3.4 KB

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