ChannelCountController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. class ChannelCountController extends AdminController{
  3. public $layout = 'none';
  4. public function actionAll(){
  5. $visitor = Yii::app()->request->getParam('visitor');
  6. if($visitor){
  7. $coll = 'users';
  8. }else{
  9. $coll = 'visitors';
  10. }
  11. $mongo = new MongoClient(DB_CONNETC);
  12. $db = $mongo->wozhua_data;//库
  13. $collection = $db->selectCollection($coll);
  14. $keys = array("channel" => 1);
  15. $initial = array("count" => 0);
  16. $reduce = "function (obj, prev) { prev.count++; }";
  17. $g = $collection->group($keys, $initial, $reduce);
  18. $this->render('all',array('data'=>$g['retval'],'sum'=>$g['count']));
  19. }
  20. public function actionByDay(){
  21. $week_data = array();
  22. $data['date_str'] = '';
  23. $visitor = Yii::app()->request->getParam('visitor');
  24. if($visitor){
  25. $coll = 'users';
  26. $time_condition = 'register_time';
  27. }else{
  28. $coll = 'visitors';
  29. $time_condition = 'first_time';
  30. }
  31. $mongo = new MongoClient(DB_CONNETC);
  32. $db = $mongo->wozhua_data;
  33. for($i=6;$i>=0;$i--){
  34. $day_start = strtotime(date('Ymd'))-$i*86400;
  35. $date = date('m-d',$day_start);
  36. $data['date_str'].= '"'.$date.'",';
  37. $day_last = $day_start+86400;
  38. $collection = $db->selectCollection($coll);
  39. $keys = array("channel"=>1);
  40. $initial = array("count"=>0);
  41. $reduce = "function (obj, prev) { prev.count++; }";
  42. $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last)));
  43. $g = $collection->group($keys, $initial, $reduce, $condition);
  44. $week_data[$date] = $g['retval'];
  45. }
  46. $channel = array();
  47. foreach ($week_data as $value) {
  48. if(is_array($value)){
  49. foreach ($value as $val) {
  50. if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){
  51. $channel[] = $val['channel'];
  52. }
  53. }
  54. }
  55. }
  56. $data['channel_str'] ='';
  57. foreach ($channel as $value) {
  58. $data['channel_str'].= '"'.$value.'",';
  59. }
  60. $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1);
  61. $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1);
  62. $data['channel_data'] = array();
  63. foreach ($channel as $t_channel) {
  64. $data['channel_data'][$t_channel] = '';
  65. foreach ($week_data as $key => $value) {
  66. foreach ($value as $val) {
  67. if($val['channel']==$t_channel){
  68. $t_count = $val['count'];
  69. }
  70. }
  71. if (isset($t_count)) {
  72. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.',';
  73. }else{
  74. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.',';
  75. }
  76. unset($t_count);
  77. }
  78. }
  79. $this->render('view',array('data'=>$data));
  80. }
  81. public function actionByWeek(){
  82. $month_data = array();
  83. $data['date_str'] = '';
  84. $visitor = Yii::app()->request->getParam('visitor');
  85. if($visitor){
  86. $coll = 'users';
  87. $time_condition = 'register_time';
  88. }else{
  89. $coll = 'visitors';
  90. $time_condition = 'first_time';
  91. }
  92. $mongo = new MongoClient(DB_CONNETC);
  93. $db = $mongo->wozhua_data;
  94. for($i=4;$i>=0;$i--){
  95. $day_start = strtotime(date("Y-m-d",mktime(0,0,0,date("m"),date("d")-date("w")+1,date("Y"))))-$i*604800;
  96. $date = date('W',$day_start);
  97. $data['date_str'].= '"第'.$date.'周",';
  98. $day_last = $day_start+604800;
  99. $collection = $db->selectCollection($coll);
  100. $keys = array("channel"=>1);
  101. $initial = array("count"=>0);
  102. $reduce = "function (obj, prev) { prev.count++; }";
  103. $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last)));
  104. $g = $collection->group($keys, $initial, $reduce, $condition);
  105. $month_data[$date] = $g['retval'];
  106. }
  107. $channel = array();
  108. foreach ($month_data as $value) {
  109. if(is_array($value)){
  110. foreach ($value as $val) {
  111. if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){
  112. $channel[] = $val['channel'];
  113. }
  114. }
  115. }
  116. }
  117. $data['channel_str'] ='';
  118. foreach ($channel as $value) {
  119. $data['channel_str'].= '"'.$value.'",';
  120. }
  121. $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1);
  122. $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1);
  123. $data['channel_data'] = array();
  124. foreach ($channel as $t_channel) {
  125. $data['channel_data'][$t_channel] = '';
  126. foreach ($month_data as $key => $value) {
  127. foreach ($value as $val) {
  128. if($val['channel']==$t_channel){
  129. $t_count = $val['count'];
  130. }
  131. }
  132. if (isset($t_count)) {
  133. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.',';
  134. }else{
  135. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.',';
  136. }
  137. unset($t_count);
  138. }
  139. }
  140. $this->render('view',array('data'=>$data));
  141. }
  142. public function actionByMonth(){
  143. $month_data = array();
  144. $data['date_str'] = '';
  145. $visitor = Yii::app()->request->getParam('visitor');
  146. if($visitor){
  147. $coll = 'users';
  148. $time_condition = 'register_time';
  149. }else{
  150. $coll = 'visitors';
  151. $time_condition = 'first_time';
  152. }
  153. $mongo = new MongoClient(DB_CONNETC);
  154. $db = $mongo->wozhua_data;
  155. for($i=5;$i>=0;$i--){
  156. $this_month = date('m');
  157. $temp_month = $this_month-$i;
  158. $time_str = date('Y-').$temp_month.'-01';
  159. $day_start = strtotime($time_str);
  160. $date = date('F',$day_start);
  161. $data['date_str'].= '"'.$date.'",';
  162. $day_last = strtotime(date('Y-m-d', strtotime(date('Y-m-01', strtotime($time_str)) . ' +1 month -1 day')));
  163. $collection = $db->selectCollection($coll);
  164. $keys = array("channel"=>1);
  165. $initial = array("count"=>0);
  166. $reduce = "function (obj, prev) { prev.count++; }";
  167. $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last)));
  168. $g = $collection->group($keys, $initial, $reduce, $condition);
  169. $month_data[$date] = $g['retval'];
  170. }
  171. $channel = array();
  172. foreach ($month_data as $value) {
  173. if(is_array($value)){
  174. foreach ($value as $val) {
  175. if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){
  176. $channel[] = $val['channel'];
  177. }
  178. }
  179. }
  180. }
  181. $data['channel_str'] ='';
  182. foreach ($channel as $value) {
  183. $data['channel_str'].= '"'.$value.'",';
  184. }
  185. $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1);
  186. $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1);
  187. $data['channel_data'] = array();
  188. foreach ($channel as $t_channel) {
  189. $data['channel_data'][$t_channel] = '';
  190. foreach ($month_data as $key => $value) {
  191. foreach ($value as $val) {
  192. if($val['channel']==$t_channel){
  193. $t_count = $val['count'];
  194. }
  195. }
  196. if (isset($t_count)) {
  197. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.',';
  198. }else{
  199. $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.',';
  200. }
  201. unset($t_count);
  202. }
  203. }
  204. $this->render('view',array('data'=>$data));
  205. }
  206. }