StatisticsController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace addons\Album\backend\controllers;
  3. use addons\Album\common\models\AddonsAlbum;
  4. use addons\Album\common\models\AddonsAlbumDateStatistics;
  5. use addons\Album\common\models\AddonsAlbumGoodsVisit;
  6. use addons\Album\common\models\AddonsAlbumOrder;
  7. use addons\Album\common\models\AddonsAlbumPageShare;
  8. use addons\Album\common\models\AddonsAlbumStatistics;
  9. use addons\Album\common\models\AddonsAlbumVisit;
  10. use common\enums\StatusEnum;
  11. use phpseclib3\Crypt\Random;
  12. use Yii;
  13. use common\controllers\AddonsController;
  14. use yii\db\Exception;
  15. /**
  16. * 默认控制器
  17. *
  18. * Class DefaultController
  19. * @package addons\Album\backend\controllers
  20. */
  21. class StatisticsController extends BaseController
  22. {
  23. public $enableCsrfValidation = false;
  24. /**
  25. * @Author: ltm
  26. * @DateTime: 2022/2/15 0015 10:01
  27. * @Copyright: copyright (c) 2021 广东七件事集团
  28. * @param $data
  29. * @return string
  30. */
  31. public function actionIndex()
  32. {
  33. $retuest = Yii::$app->request;
  34. if ($retuest->isAjax) {
  35. if ($retuest->isGet) {
  36. $params = Yii::$app->request->get();
  37. $res = Yii::$app->services->validate->validate($params, [
  38. [['begin_date','end_date','type'],'safe']
  39. ]);
  40. $params = AddonsAlbumStatistics::exceptNullVal($params);
  41. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  42. $begin_date = Yii::$app->request->get('begin_date') ?: date('Y-m-d');
  43. $end_date = Yii::$app->request->get('end_date') ?: date('Y-m-d',strtotime('+1 day'));
  44. $begin_time = strtotime($begin_date . ' 00:00:00');
  45. $end_time = strtotime($end_date . ' 23:59:59');
  46. //时间长度判断
  47. $days = round((strtotime($end_date) - strtotime($begin_date))/3600/24);
  48. if($days > 30){
  49. return $this->error('查询时间范围不得大于30天');
  50. }
  51. $where[] = ['=', 'mall_id', $this->mall_id];
  52. $where[] = ['between', 'created_at', $begin_time,$end_time];
  53. $order = 'id';
  54. $params = array('where' => $where, 'order'=>$order);
  55. if(!$params['type']){
  56. //柱状图数据
  57. $list['stat'] = AddonsAlbumDateStatistics::lists($params, true);
  58. //页面分析(20页)
  59. $album_params['with'] = ['statistics'];
  60. $album_params['where'] = [['status' => StatusEnum::ENABLED,'mall_id' => $this->mall_id]];
  61. $album_params['select'] = 'id,title,goods_count';
  62. $album_params['order'] = 'id desc';
  63. $album_params['limit'] = 10;
  64. $list['album'] = AddonsAlbum::listPage($album_params, false,true);
  65. if($list['album']['list']){
  66. foreach ($list['album']['list'] as $k => $v){
  67. $stop_time = AddonsAlbumStatistics::sec2Time($v['statistics']['stop_time']);
  68. $list['album']['list'][$k]['statistics']['stop_time'] = $stop_time?$stop_time:0;
  69. $list['album']['list'][$k]['statistics']['shares_count'] = $v['statistics']['shares_count']?$v['statistics']['shares_count']:0;
  70. $list['album']['list'][$k]['statistics']['shares_count'] = $v['statistics']['shares_count']?$v['statistics']['shares_count']:0;
  71. $list['album']['list'][$k]['statistics']['visit_count'] = $v['statistics']['visit_count']?$v['statistics']['visit_count']:0;
  72. $list['album']['list'][$k]['statistics']['views_count'] = $v['statistics']['views_count']?$v['statistics']['views_count']:0;
  73. $list['album']['list'][$k]['statistics']['order_count'] = $v['statistics']['order_count']?$v['statistics']['order_count']:0;
  74. $list['album']['list'][$k]['statistics']['goods_amount'] = $v['statistics']['goods_amount']?$v['statistics']['goods_amount']:0;
  75. $list['album']['list'][$k]['statistics']['pay_count'] = $v['statistics']['pay_count']?$v['statistics']['pay_count']:0;
  76. }
  77. }
  78. }
  79. //会员数据
  80. $params['with'] = ['album','user'];
  81. $params['group'] = 'user_id,album_id';
  82. $params['order'] = 'stay_time desc';
  83. $params['limit'] = 10;
  84. $params['select'] = 'album_id,id,album_page_id,mall_id,user_id,begin_time,end_time,sum(stay_time) as stay_time,date,created_at,count(id) as page_num';
  85. $list['user'] = AddonsAlbumVisit::listPage($params);
  86. if($list['user']['list']){
  87. foreach ($list['user']['list'] as $k => $v){
  88. $extra_where = [];
  89. $extra_where[] = ['=', 'mall_id', $this->mall_id];
  90. $extra_where[] = ['between', 'created_at', $begin_time,$end_time];
  91. $extra_where[] = ['=', 'album_id', $v['album_id']];
  92. $extra_where[] = ['=', 'user_id', $v['user_id']];
  93. $amount = AddonsAlbumOrder::getOne($extra_where,true,'','','sum(amount) as pay_money');
  94. $list['user']['list'][$k]['amount'] = $amount['pay_money']??0;
  95. $share_time = AddonsAlbumPageShare::getOne($extra_where,true,'','','count(*) as share_time');
  96. $list['user']['list'][$k]['share_time'] = $share_time['share_time'];
  97. $list['user']['list'][$k]['stay_time'] = AddonsAlbumStatistics::sec2Time($v['stay_time']);
  98. }
  99. }
  100. $this->success('获取成功', $list);
  101. }
  102. } else {
  103. return $this->render($this->action->id);
  104. }
  105. }
  106. public function actionAlbum(){
  107. $request = Yii::$app->request;
  108. if ($request->isGet) {
  109. $params = Yii::$app->request->get();
  110. $res = Yii::$app->services->validate->validate($params, [
  111. [['page',],'safe']
  112. ]);
  113. $params = AddonsAlbumStatistics::exceptNullVal($params);
  114. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  115. //页面分析(20页)
  116. $album_params['with'] = ['statistics'];
  117. $album_params['where'] = [['status' => StatusEnum::ENABLED,'mall_id' => $this->mall_id]];
  118. $album_params['select'] = 'id,title,goods_count';
  119. $album_params['order'] = 'id desc';
  120. $album_params['limit'] = 10;
  121. $list['album'] = AddonsAlbum::listPage($album_params, false,true);
  122. if($list['album']['list']){
  123. foreach ($list['album']['list'] as $k => $v){
  124. $stop_time = AddonsAlbumStatistics::sec2Time($v['statistics']['stop_time']);
  125. $list['album']['list'][$k]['statistics']['stop_time'] = $stop_time?$stop_time:0;
  126. $list['album']['list'][$k]['statistics']['shares_count'] = $v['statistics']['shares_count']?$v['statistics']['shares_count']:0;
  127. $list['album']['list'][$k]['statistics']['shares_count'] = $v['statistics']['shares_count']?$v['statistics']['shares_count']:0;
  128. $list['album']['list'][$k]['statistics']['visit_count'] = $v['statistics']['visit_count']?$v['statistics']['visit_count']:0;
  129. $list['album']['list'][$k]['statistics']['views_count'] = $v['statistics']['views_count']?$v['statistics']['views_count']:0;
  130. $list['album']['list'][$k]['statistics']['order_count'] = $v['statistics']['order_count']?$v['statistics']['order_count']:0;
  131. $list['album']['list'][$k]['statistics']['goods_amount'] = $v['statistics']['goods_amount']?$v['statistics']['goods_amount']:0;
  132. $list['album']['list'][$k]['statistics']['pay_count'] = $v['statistics']['pay_count']?$v['statistics']['pay_count']:0;
  133. }
  134. }
  135. $this->success('获取成功', $list);
  136. }
  137. }
  138. /**
  139. * 编辑
  140. * @Author: ltm
  141. * @DateTime: 2021/12/13 0021 18:29
  142. * @Copyright: copyright (c) 2021 广东七件事集团
  143. * @return mixed|string|void
  144. */
  145. public function actionStatistics()
  146. {
  147. try {
  148. $request = Yii::$app->request;
  149. if ($request->isAjax) {
  150. //提交内容
  151. if ($request->isPost) {
  152. $params = Yii::$app->request->post();
  153. $res = Yii::$app->services->validate->validate($params, [
  154. [['id',],'required']
  155. ]);
  156. $params = AddonsAlbumStatistics::exceptNullVal($params);
  157. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  158. $where[] = ['=', 'mall_id', $this->mall_id];
  159. $where[] = ['=', 'album_id', $params['id']];
  160. $detail = AddonsAlbumStatistics::getOne($where,true);
  161. if($detail['visit_count']>1){
  162. $time_data = $detail['stop_time']/$detail['visit_count'];
  163. }else{
  164. $time_data = $detail['stop_time'];
  165. }
  166. $detail['stop_time'] = AddonsAlbumStatistics::sec2Time($time_data);
  167. $detail['created_at'] ? $detail['created_at'] = date("Y-m-d",$detail['created_at']):'';
  168. $goods_where[] = ['=', 'album_id', $params['id']];
  169. $goods_where[] = ['=', 'mall_id', $this->mall_id];
  170. $goods_where[] = ['<>', 'status', StatusEnum::DELETE];
  171. $conf = ['where'=> $goods_where,'with'=> ['goods']];
  172. $detail['goods'] = AddonsAlbumGoodsVisit::lists($conf,true);
  173. if ($res === false) throw new Exception(AddonsAlbum::getStaticError());
  174. return $this->success('操作成功',$detail);
  175. }
  176. }
  177. } catch (\Exception $e) {
  178. return $this->error($e->getMessage(), []);
  179. }
  180. }
  181. }