StatisticController.class.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace Admin\Controller;
  3. use Think\Model;
  4. /**
  5. * 样式管理
  6. * @author brent
  7. * @version 0.0.1
  8. */
  9. class StatisticController extends CommonController
  10. {
  11. protected $table = ''; //表名
  12. /**
  13. * [_initialize 前置操作-继承公共前置方法]
  14. * @author Devil
  15. * @blog http://gong.gg/
  16. * @version 0.0.1
  17. * @datetime 2016-12-03T12:39:08+0800
  18. */
  19. public function _initialize()
  20. {
  21. // 调用父类前置方法
  22. parent::_initialize();
  23. // 登录校验
  24. $this->Is_Login();
  25. // 权限校验
  26. $this->Is_Power();
  27. //要执行的表
  28. $this->table = M('iptv_users');
  29. }
  30. public function orderData()
  31. {
  32. $start = I('start_time',date('Y-m-d',strtotime('-8 day', time())));
  33. $end = I('end_time',date('Y-m-d'));
  34. // $start = '2019-10-10';
  35. // $end = '2019-10-17';
  36. $start_date = date('Ymd',strtotime($start));
  37. $end_date = date('Ymd',strtotime($end));
  38. $where['date(created_at)'] = ['between',[$start,$end]];
  39. $pvs = []; $uvs =[]; $times = [];
  40. for ($i=0;$i<=9;$i++) {
  41. # code...
  42. if($i==0){
  43. $table = 'iptv_user_login_log';
  44. }else{
  45. $table = 'iptv_user_login_log_'.$i;
  46. }
  47. $tmp_pvs = M($table)->where($where)->group('day')->getField('date(created_at) as day,count(*) as total');
  48. $tmp_uvs = M($table)->where($where)->group('day')->getField('date(created_at) as day,count(distinct(uid)) as total');
  49. foreach ($tmp_pvs as $date => $val) {
  50. if(isset($pvs[$date])){
  51. $pvs[$date] = $pvs[$date] + $val;
  52. }else{
  53. $pvs[$date] = $val;
  54. }
  55. }
  56. foreach ($tmp_uvs as $date => $val) {
  57. if(isset($uvs[$date])){
  58. $uvs[$date] = $uvs[$date] + $val;
  59. }else{
  60. $uvs[$date] = $val;
  61. }
  62. }
  63. }
  64. unset($where);
  65. $where['date'] = ['between',[$start_date ,$end_date]];
  66. $where['status'] = 0;
  67. $orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');
  68. // dump($orders);
  69. $where['status'] = 2;
  70. $pre_orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');
  71. $pre_orders_counts = M('iptv_order_own')->where($where)->group('date')->getField('date,count(*) as total');
  72. unset($where);
  73. $where['status'] =99;
  74. $cancel_orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');
  75. //新增用户数
  76. unset($where);
  77. $where['date(created_at)'] = ['between',[$start,$end]];
  78. $addusers = M('iptv_users')->where($where)->group('day')->getField('date(created_at) as day,count(*) as total');
  79. // dump($pre_orders);
  80. // $play_time_sum = M('statistic_source')->where(['date'=>])
  81. //播放时长
  82. // var_dump($addusers);
  83. while ($start_date <= $end_date){
  84. $dates[] = date('Y-m-d',strtotime($start_date));
  85. $start_date = date('Ymd',(strtotime($start_date)+24*3600));
  86. }
  87. $dates = array_reverse($dates);
  88. foreach ($dates as $date){
  89. $where['created_at'] = ['elt',date('Y-m-d 23:59:59',strtotime($date))];
  90. $data[] = [
  91. 'date'=>$date,
  92. 'pv'=>$pvs[$date] ?:0,
  93. 'uv'=>$uvs[$date]?:0,
  94. 'order'=>$orders[date('Ymd',strtotime($date))]?:0,
  95. 'pre_order'=>$pre_orders[date('Ymd',strtotime($date))]?:0,
  96. 'pre_order_count'=>$pre_orders_counts[date('Ymd',strtotime($date))] ? :0,
  97. 'cancel_order'=>$cancel_orders[date('Ymd',strtotime($date))] ? : 0,
  98. 'add_user'=>$addusers[$date] ? : 0,
  99. 'user_sum'=>M('iptv_users')->where($where)->order('user_id desc')->limit(1)->getField('user_id')
  100. ];
  101. // echo M()->getlastSQL();die;
  102. }
  103. // dump($data);
  104. if(I('model')){
  105. $title = array(
  106. 'date' => array('col' => 'A', 'name' => '日期'),
  107. 'pv' => array('col' => 'B', 'name' => 'pv'),
  108. 'uv' => array('col' => 'C', 'name' => 'uv'),
  109. 'order' => array('col' => 'D', 'name' => '订购数'),
  110. 'cancel_order' => array('col' => 'E', 'name' => '退订数'),
  111. 'pre_order' => array('col' => 'F', 'name' => '预订购(去重)'),
  112. 'pre_order_count' => array('col' => 'G', 'name' => '预订购'),
  113. 'add_user' => array('col' => 'I', 'name' => '新增用户' ),
  114. 'user_sum' => array('col' => 'J', 'name' => '累计用户' )
  115. );
  116. // Excel驱动导出数据
  117. $excel = new \My\Excel(array('filename' => '金鹰电竞运营数据'.$start.'至'.$end, 'title' => $title, 'data' => $data, 'msg' => L('common_not_data_tips')));
  118. $excel->Export();
  119. die;
  120. }
  121. $this->assign('start_time',$start);
  122. $this->assign('end_time',$end);
  123. $this->assign('dates',$dates);
  124. $this->assign('data',$data);
  125. $this->display();
  126. }
  127. }