Stat.php 7.5 KB

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