Authored by xiaofeng.yao@yoho.cn

后天展示在线人数折线图

@@ -4,6 +4,8 @@ namespace backend\controllers; @@ -4,6 +4,8 @@ namespace backend\controllers;
4 use Yii; 4 use Yii;
5 use app\models\SysConfig; 5 use app\models\SysConfig;
6 use app\models\Vest; 6 use app\models\Vest;
  7 +use backend\components\Pagination;
  8 +use common\models\RoomsNumsReport;
7 /** 9 /**
8 * Site controller 10 * Site controller
9 */ 11 */
@@ -101,5 +103,25 @@ class SystemController extends BaseController @@ -101,5 +103,25 @@ class SystemController extends BaseController
101 return $this->render('vest',['imVestNums'=>$imVestNums]); 103 return $this->render('vest',['imVestNums'=>$imVestNums]);
102 } 104 }
103 105
  106 + /**
  107 + * 在线人数统计
  108 + * @return type
  109 + */
  110 + public function actionStatics()
  111 + {
  112 + $condition = Yii::$app->request->get();
  113 + $list = [];
  114 + if(array_filter($condition)){
  115 + $model = RoomsNumsReport::condition($condition);
  116 + $count = clone $model;
  117 + $pagination = new Pagination(['totalCount' => $count->count()]);
  118 + $list = $model->offset($pagination->offset)->limit($pagination->limit)->orderBy(['create_time' => SORT_ASC])->all();
  119 + }
  120 + return $this->render('statics',[
  121 + 'list'=>$list,
  122 + 'condition'=>$condition,
  123 + 'pagination'=>$pagination,
  124 + ]);
  125 + }
104 126
105 } 127 }
  1 +<?php
  2 +use yii\web\View;
  3 +use backend\widgets\LinkPager;
  4 +$this->title = '管理后台首页';
  5 +?>
  6 +
  7 +<div class="col-md-6">
  8 + <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
  9 +</div>
  10 +<div class="col-md-6">
  11 + <div class="panel panel-default">
  12 + <div class="panel-heading">
  13 + <h5 class="panel-title">在线人数</h5>
  14 + </div>
  15 + <div class="panel-body">
  16 + <form class="form-inline" action="">
  17 + <div class="form-group">
  18 + <label class="sr-only" for="begin">begin</label>
  19 + <input type="text" class="form-control" name="begin" id="begin" placeholder="begin" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="<?=$condition['begin']?>">
  20 + </div><!-- form-group -->
  21 +
  22 + <div class="form-group">
  23 + <label class="sr-only" for="end">end</label>
  24 + <input type="text" class="form-control" name="end" id="end" placeholder="end" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="<?=$condition['end']?>">
  25 + </div><!-- form-group -->
  26 +
  27 + <div class="form-group" id="btn_bar">
  28 + <button type="submit" class="btn btn-primary mr5">查询</button>
  29 + </div>
  30 + </form>
  31 + <div class="table-responsive">
  32 + <table class="table table-dark mb30">
  33 + <thead>
  34 + <tr>
  35 + <th>时间</th>
  36 + <th>人数</th>
  37 + </tr>
  38 + </thead>
  39 + <tbody>
  40 + <?php
  41 + if($list):
  42 + foreach($list as $v):
  43 + ?>
  44 + <tr>
  45 + <td><?=date('Y-m-d H:i:s',$v['create_time'])?></td>
  46 + <td><?=$v['online_num']?></td>
  47 + </tr>
  48 + <?php endforeach; endif;?>
  49 + </tbody>
  50 + </table>
  51 + </div>
  52 + <!-- table-responsive -->
  53 + <?php echo LinkPager::widget(['pagination' => $pagination]);?>
  54 + </div>
  55 + </div>
  56 +</div>
  57 +<script src="http://code.highcharts.com/highcharts.js"></script>
  58 +<script type="text/javascript" src="/js/My97DatePicker/WdatePicker.js" ></script>
  59 +<script>
  60 + $(function () {
  61 + $('#container').highcharts({
  62 + title: {
  63 + text: 'Monthly Average Temperature',
  64 + x: -20 //center
  65 + },
  66 + subtitle: {
  67 + text: 'Source: WorldClimate.com',
  68 + x: -20
  69 + },
  70 + xAxis: {
  71 + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
  72 + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  73 + },
  74 + yAxis: {
  75 + title: {
  76 + text: '人数 (个)'
  77 + },
  78 + plotLines: [{
  79 + value: 0,
  80 + width: 1,
  81 + color: '#808080'
  82 + }]
  83 + },
  84 + tooltip: {
  85 + valueSuffix: '°C'
  86 + },
  87 + legend: {
  88 + layout: 'vertical',
  89 + align: 'right',
  90 + verticalAlign: 'middle',
  91 + borderWidth: 0
  92 + },
  93 + series: [{
  94 + name: 'Tokyo',
  95 + data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
  96 + }, {
  97 + name: 'New York',
  98 + data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
  99 + }, {
  100 + name: 'Berlin',
  101 + data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
  102 + }, {
  103 + name: 'London',
  104 + data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
  105 + }]
  106 + });
  107 + });
  108 +</script>
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace common\models; 3 namespace common\models;
4 4
5 use Yii; 5 use Yii;
  6 +use yii\helpers\ArrayHelper;
6 7
7 /** 8 /**
8 * This is the model class for table "{{%rooms_nums_report}}". 9 * This is the model class for table "{{%rooms_nums_report}}".
@@ -81,4 +82,14 @@ class RoomsNumsReport extends \yii\db\ActiveRecord @@ -81,4 +82,14 @@ class RoomsNumsReport extends \yii\db\ActiveRecord
81 ]; 82 ];
82 return $this->save(false); 83 return $this->save(false);
83 } 84 }
  85 +
  86 + public static function condition($condtion)
  87 + {
  88 + $model = parent::find();
  89 + $filters = ArrayHelper::filter($condtion,['begin','end']);
  90 + if($filters['begin'] && $filters['end']){
  91 + $model->andWhere('create_time>='.strtotime($filters['begin']).' AND create_time<='.strtotime($filters['end']));
  92 + }
  93 + return $model;
  94 + }
84 } 95 }