Stat.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\weapp\model;
  11. use app\model\BaseModel;
  12. use think\facade\Cache;
  13. /**
  14. * 微信小程序数据统计与分析
  15. */
  16. class Stat extends BaseModel
  17. {
  18. /**
  19. * 小程序 访问日趋势
  20. * @param $from
  21. * @param $to
  22. */
  23. public function dailyVisitTrend($begin_date, $end_date)
  24. {
  25. $info = Cache::get("weapp_daily_visit_trend" . "_" . $begin_date . "_" . $end_date);
  26. if (!empty($info)) {
  27. return success($info);
  28. }
  29. $wepp_model = new Weapp();
  30. $result = $wepp_model->dailyVisitTrend($begin_date, $end_date);
  31. if ($result["code"] < 0)
  32. return $result;
  33. Cache::tag("weapp_visit")->set("weapp_daily_visit_trend" . "_" . $begin_date . "_" . $end_date, $result["data"]);
  34. return $result;
  35. }
  36. /**
  37. * 小程序 访问周趋势
  38. * @param $from
  39. * @param $to
  40. */
  41. public function weeklyVisitTrend($begin_date, $end_date)
  42. {
  43. $info = Cache::get("weapp_weekly_visit_trend" . "_" . $begin_date . "_" . $end_date);
  44. if (!empty($info)) {
  45. return success($info);
  46. }
  47. $wepp_model = new Weapp();
  48. $result = $wepp_model->weeklyVisitTrend($begin_date, $end_date);
  49. if ($result["code"] < 0)
  50. return $result;
  51. Cache::tag("weapp_visit")->set("weapp_weekly_visit_trend" . "_" . $begin_date . "_" . $end_date, $result["data"]);
  52. return $result;
  53. }
  54. /**
  55. * 小程序 访问月趋势
  56. * @param $from
  57. * @param $to
  58. */
  59. public function monthlyVisitTrend($begin_date, $end_date)
  60. {
  61. $info = Cache::get("weapp_monthly_visit_trend" . "_" . $begin_date . "_" . $end_date);
  62. if (!empty($info)) {
  63. return success($info);
  64. }
  65. $wepp_model = new Weapp();
  66. $result = $wepp_model->monthlyVisitTrend($begin_date, $end_date);
  67. if ($result["code"] < 0)
  68. return $result;
  69. Cache::tag("weapp_visit")->set("weapp_monthly_visit_trend" . "_" . $begin_date . "_" . $end_date, $result["data"]);
  70. return $result;
  71. }
  72. /**
  73. * 小程序 访问日趋势
  74. * @param $from
  75. * @param $to
  76. */
  77. public function visitPage($begin_date, $end_date)
  78. {
  79. $info = Cache::get("weapp_visit_page" . "_" . $begin_date . "_" . $end_date);
  80. if (!empty($info)) {
  81. return success($info);
  82. }
  83. $wepp_model = new Weapp();
  84. $result = $wepp_model->dailyVisitTrend($begin_date, $end_date);
  85. if ($result["code"] < 0)
  86. return $result;
  87. Cache::tag("weapp_visit")->set("weapp_visit_page" . "_" . $begin_date . "_" . $end_date, $result["data"]);
  88. return $result;
  89. }
  90. /**
  91. * 查询微信小程序访问数据
  92. * @param $date_type
  93. * @param $daterange
  94. */
  95. public function visitData($date_type)
  96. {
  97. $result = [];
  98. switch ($date_type) {
  99. case 'yesterday':
  100. $begin_date = date('Ymd', strtotime('-1 days'));
  101. $end_date = date('Ymd', strtotime('-1 days'));
  102. $result = $this->dailyVisitTrend($begin_date, $end_date);
  103. break;
  104. case 'month':
  105. $begin_date = date('Y-m-d', strtotime(date('Y-m-01') . ' -1 month'));
  106. $end_date = date('Y-m-d', strtotime(date('Y-m-01') . ' -1 day'));
  107. $result = $this->monthlyVisitTrend($begin_date, $end_date);
  108. break;
  109. }
  110. return $result;
  111. }
  112. /**
  113. * 获取微信小程序 数据分析统计
  114. */
  115. public function visitStatistics($daterange)
  116. {
  117. if (empty($daterange))
  118. return $this->success([]);
  119. $is_error = true;
  120. $daterange_array = explode(" 至 ", $daterange);
  121. $start_date = date_format(date_create($daterange_array[0]), "Ymd");
  122. $end_date = date_format(date_create($daterange_array[1]), "Ymd");
  123. $date_x = periodGroup(strtotime($start_date), strtotime($end_date));
  124. $session_cnt_data = [];//打开次数
  125. $visit_pv_data = [];//访问次数
  126. $visit_uv_data = [];//访问人数
  127. $visit_uv_new_data = [];//新用户数
  128. $stay_time_uv_data = [];//人均停留时长 (浮点型,单位:秒)
  129. $stay_time_session_data = [];//次均停留时长 (浮点型,单位:秒)
  130. $visit_depth_data = [];//平均访问深度 (浮点型)
  131. foreach ($date_x as $k => $v) {
  132. $session_cnt = 0;//打开次数
  133. $visit_pv = 0;//访问次数
  134. $visit_uv = 0;//访问人数
  135. $visit_uv_new = 0;//新用户数
  136. $stay_time_uv = 0;//人均停留时长 (浮点型,单位:秒)
  137. $stay_time_session = 0;//次均停留时长 (浮点型,单位:秒)
  138. $visit_depth = 0;//平均访问深度 (浮点型)
  139. if ($is_error) {
  140. // $temp_daterange = array(
  141. // "begin_date" => $v,
  142. // "end_date" => $v,
  143. // "site_id" => $site_id
  144. // );
  145. $result = $this->dailyVisitTrend($v, $v);
  146. $temp_data = $result["data"];
  147. if (!empty($temp_data)) {
  148. $session_cnt = $temp_data["session_cnt"];//打开次数
  149. $visit_pv = $temp_data["visit_pv"];//访问次数
  150. $visit_uv = $temp_data["visit_uv"];//访问人数
  151. $visit_uv_new = $temp_data["visit_uv_new"];//新用户数
  152. $stay_time_uv = $temp_data["stay_time_uv"];//人均停留时长 (浮点型,单位:秒)
  153. $stay_time_session = $temp_data["stay_time_session"];//次均停留时长 (浮点型,单位:秒)
  154. $visit_depth = $temp_data["visit_depth"];//平均访问深度 (浮点型)
  155. } else {
  156. $is_error = false;
  157. }
  158. }
  159. $session_cnt_data[] = $session_cnt;//打开次数
  160. $visit_pv_data[] = $visit_pv;//访问次数
  161. $visit_uv_data[] = $visit_uv;//访问人数
  162. $visit_uv_new_data[] = $visit_uv_new;//新用户数
  163. $stay_time_uv_data[] = $stay_time_uv;//人均停留时长 (浮点型,单位:秒)
  164. $stay_time_session_data[] = $stay_time_session;//次均停留时长 (浮点型,单位:秒)
  165. $visit_depth_data[] = $visit_depth;//平均访问深度 (浮点型)
  166. }
  167. $statistics_data = array(
  168. "date" => $date_x,
  169. "data" => array(
  170. "session_cnt_data" => $session_cnt_data,
  171. "visit_pv_data" => $visit_pv_data,
  172. "visit_uv_data" => $visit_uv_data,
  173. "visit_uv_new_data" => $visit_uv_new_data,
  174. "stay_time_uv_data" => $stay_time_uv_data,
  175. "stay_time_session_data" => $stay_time_session_data,
  176. "visit_depth_data" => $visit_depth_data,
  177. )
  178. );
  179. return $this->success($statistics_data);
  180. }
  181. }