TP3.2单车泊位管理系统 车位分时数据统计思路

最后效果是要通过查询某个车位ID和开始时间以及结束时间,查询出在这个时间段内这个车位上的车辆总数,以及每个车辆的信息。

1.通过redis获取所有车位的车辆信息(realtime集合,查询出所有车位的车辆信息(mac地址,车位ID,采集到的时间))。

2.把第一步得到的数组进行循环筛选,根据查询的时候输入的车位ID,进行筛选满足这个车位ID的结果。得到一个数组。

3.把获取过来的开始时间转化成时间戳格式,把第二步中的数组进行筛选。数组中的时间满足大于等于获取到的开始时间戳的筛选出来组成数组。

4.把获取过来的结束时间转化成时间戳格式,把第三步中的数组进行筛选。数组中的时间满足小于等于获取到的结束时间戳的筛选出来组成数组。

5.第四步中得到的数组就是我们想要的数据。foreach循环,把bikes里面的json数据解析成数组。循环这个数组,依次向集合添加数据。

$redis->sadd("statistics:".$dwz_info_id.$start2.$end2,$v2["mac"]);

6.后面直接把集合的数据取出来用就可以了。

代码如下:

StalistController.class.php

<?php
namespace Admin\Controller;
use Think\Controller;
class StalistController extends CommonController {
    public function index()
    {
		$dwz_info_id="";
		$start="";
		$end="";
		$nowtime=date('Y-m-d H:i:s');
		$starttime=date('Y-m-d H:i:s',strtotime('-1 hour'));
		$this->assign("nowtime2",$nowtime);
		$this->assign("starttime2",$starttime);
		if($_GET){
			$redis = new \Redis();
			$redis->connect('116.62.171.54', 8085);
			$all_real=$redis->KEYS("realtime:?*");
			$all_dwzinfo2=array();
			foreach($all_real as $k=>$v){
				//var_dump($v);
				//var_dump($redis->hget($v,'time'));
				$all_dwzinfo["bikes"]=$redis->hget($v,'bikes');
				$all_dwzinfo["dwz_info_id"]=$redis->hget($v,'dwz_info_id');
				$all_dwzinfo["time"]=$redis->hget($v,'time');
				$all_dwzinfo2[]=$all_dwzinfo;
			}
			//var_dump($all_dwzinfo2);
			$dwz_info_id = $_REQUEST["dwz_info_id"];
			$this->assign('dwz_info_id', $dwz_info_id);
			$start = strtr($_REQUEST["start"],"+"," ");
			if($start==""){
				$start=$starttime;
			}
			$end = strtr($_REQUEST["end"],"+"," ");
			if($end==""){
				$end=$nowtime;
			}
			if($dwz_info_id!=''&& $start=='' && $end==''){
				$stanum=$redis->scard("infobikes:$dwz_info_id");
				$stalist2=$redis->smembers("infobikes:$dwz_info_id");
			}else{
				foreach ($all_dwzinfo2 as $k2 => $v2) {
					if ($v2["dwz_info_id"] == $dwz_info_id) {
						$all_dwzinfo3[] = $v2;
					};
				}
				//var_dump($all_dwzinfo3);

				$start2 = strtotime($start);
				foreach ($all_dwzinfo3 as $k => $v) {
					if ($v["time"] >= $start2) {
						$all_dwzinfo4[] = $v;
					}
				}

				$end2 = strtotime($end);
				foreach ($all_dwzinfo4 as $k4 => $v4) {
					if ($v["time"] <= $end2) {
						$all_dwzinfo5[] = $v4;
					}
				}
				//var_dump($all_dwzinfo5);
				$arr2 = array();
				foreach ($all_dwzinfo5 as $k => $v) {
					$arr2[] = json_decode($v["bikes"], true);
				}
				//var_dump($arr2);
				foreach($arr2 as $v1){
					foreach($v1 as $v2){
						$redis->sadd("statistics:".$dwz_info_id.$start2.$end2,$v2["mac"]);
					}
				}
				$stanum=$redis->scard("statistics:".$dwz_info_id.$start2.$end2);
				$stalist2=$redis->smembers("statistics:".$dwz_info_id.$start2.$end2);
				//运算结束以后删除
				$redis->del("statistics:".$dwz_info_id.$start2.$end2);
			}
			$this->assign('start', $start);
			$this->assign('end', $end);
			foreach($stalist2 as $k=>$v){
				//获取名称和最后停放时间
				$mac = str_replace(':','',$v);
				$exist = $redis->scard("infobike:$dwz_info_id:$mac");
				$sm = $redis->smembers("infobike:$dwz_info_id:$mac");
				//var_dump($mac);
				$arr_all[$k]['mac']=$mac;
				$arr_all[$k]['name']=$redis->get('bikes:'.$mac);;
				$arr_all[$k]['rssi']=$redis->get('bikesrssi:'.$mac);
				$arr_all[$k]['num']=$exist;
				$arr_all[$k]['lasttime']=date('Y-m-d H:i:s',max($sm));
			}
			//var_dump($stalist2);
			$this->assign('stanum', $stanum);
			$this->assign('arr_all', $arr_all);
			}

			$bike_company=M("bike_company")->select();
			foreach($bike_company as $k=>$v){
				//var_dump($v);
				$arr[$v['title']]=explode('|',$v['keyword']);
			}
			//var_dump($arr);
			foreach($arr_all as $k=>$v){
				$flag = 'no';
				$name = $v['name'];
				foreach($arr as $kk=>$vv){
					foreach($vv as $kkk=>$vvv){
						if(strpos($name,$vvv)!==false){
							$bike_names[]=$kk;
							$flag = 'yes';
						}
					}
				}
				if($flag=='no'){
					$bike_names[]='其他';
				}
			}

			$arr1 = $bnames = array_unique($bike_names);
			$bn = array_count_values($bike_names);
			$len = sizeof($bn);
			$i=0;
			foreach($bn as $k=>$v){
				$arr2[$i]['name']=$k;
				$arr2[$i]['value']=$v;
				$i++;
			}
			//var_dump($bnames);
			//var_dump($bn);
			//var_dump($len);

			//分类统计图
			/*foreach($exist_list as $k=>$v){
                //对名称的一个计数
                //车名称
                $arr1[]=array();
                //车名称 数量
                $arr2[]['name']=array();
                $arr2[]['value']=array();
            }*/
			$str1 = json_encode($arr1);
			$str2 = json_encode($arr2);
			$this->assign('length',$len);
			$this->assign('str1',$str1);
			//var_dump($str2);
			$this->assign('str2',$str2);

			$this->display();

    }

}

Stalist/index.php

<extend name="Public:left" />
<block name="main">
    <link href="__PUBLIC__/myjslib/css/bootstrap-datetimepicker.min.css" rel="stylesheet" media="screen">
    <script src="https://cdn.bootcss.com/jquery/2.1.2/jquery.js"></script>
    <script src="http://echarts.baidu.com/gallery/vendors/echarts/echarts-all-3.js"></script>
    <!-- page content -->
    <div class="">
        <div class="page-title">
            <div class="title_left">
                <h3>数据分析    <small>车位分时数据统计</small></h3>
            </div>
        </div>
        <div class="clearfix"></div>

        <div class="row">

        </div>

        <div class="clearfix"></div>
        <div class="col-md-12 col-sm-12 col-xs-12">
            <div class="x_panel">
                <div class="x_title">
                    <span style="color: red">
                        提示:<br>
                        填写车位ID,选择开始时间和结束时间,点击查询即可看到该车位该时间段内停放的车辆数和具体的车辆信息。
                    </span>
                    <ul class="nav navbar-right panel_toolbox">
                        <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
                        </li>
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-wrench"></i></a>
                            <ul class="dropdown-menu" role="menu">
                                <li><a href="#">Settings 1</a>
                                </li>
                                <li><a href="#">Settings 2</a>
                                </li>
                            </ul>
                        </li>
                        <li><a class="close-link"><i class="fa fa-close"></i></a>
                        </li>
                    </ul>
                    <div class="clearfix"></div>
                </div>

                <div class="x_content">
<!--                    <p><a class="btn btn-primary" href="javascript:;" οnclick="add()">添加区块信息</a></p>-->
                    <div style="margin-bottom: 10px" class="input-group">
                        <form method="GET" action="{:U('Admin/Stalist/index')}">
                            <input id="name" type="text" class="form-control" style="width: 150px;margin-bottom: 10px;" placeholder="车位ID" name="dwz_info_id" value="{$dwz_info_id}"/>
                            <div class="input-group date form_datetime col-md-10" data-date-format="yyyy-mm-dd hh:ii:00" data-link-field="dtp_input1">
                                <input name="start" id="start" class="form-control" size="16" type="text" placeholder="开始时间" value="{$start}" readonly style="width: 250px">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span>
                                <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
                            </div>
                            <div class="input-group date form_datetime col-md-10" data-date-format="yyyy-mm-dd hh:ii:00" data-link-field="dtp_input1">
                                <input name="end" id="end" class="form-control" size="16" type="text" placeholder="结束时间" value="{$end}" readonly style="width: 250px">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span>
                                <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>
                            </div>
                            <input type="submit" value="查询" class="btn btn-default"/>
                        </form>
                    </div>

                    <div id="main" style="width: 100%;height:300px;"></div>
                    <input id="iid" type="hidden" value="{$dwz_info_id}" />
                    <if condition="$dwz_info_id neq '' || $start neq '' || $end neq ''">
                        <div class="row tile_count">
                            <div class="col-md-2 col-sm-4 col-xs-6 tile_stats_count">
                                <span class="count_top"><i class="fa fa-bicycle"></i> 分时停放车辆数 </span>
                                <div class="count">{$stanum}</div>
                            </div>
                            <!--<div class="col-md-2 col-sm-4 col-xs-6 tile_stats_count">
                              <span class="count_top"><i class="fa fa-bicycle"></i> 所有停放车辆数 </span>
                              <div class="count">{$all}</div>
                              <span class="count_bottom"><i class="green"><i class="fa fa-sort-asc"></i>3% </i> From last Week</span>
                            </div>-->
                        </div>

                    </if>
                    <div class="table-responsive">
                        <if condition="$dwz_info_id neq '' || $start neq '' || $end neq ''">
                            <table class="table table-striped jambo_table bulk_action">
                                <thead>
                                <tr class="headings">
                                    <th>

                                    </th>
                                    <th class="column-title">车辆名称 </th>
                                    <th class="column-title">车辆mac地址 </th>
                                    <th class="column-title">信号强度rssi </th>
                                    <th class="column-title">最后采集到的时间 </th>
                                    <th class="column-title">采集到的次数 </th>
                                    </th>
                                    <th class="bulk-actions" colspan="7">
                                        <a class="antoo" style="color:#fff; font-weight:500;">Bulk Actions ( <span class="action-cnt"> </span> ) <i class="fa fa-chevron-down"></i></a>
                                    </th>
                                </tr>
                                </thead>

                                <tbody>
                                <volist name="arr_all" id="vo">
                                    <tr class="even pointer">
                                        <td class="a-center ">

                                        </td>
                                        <td class=" ">{$vo.name}</td>
                                        <td class=" ">{$vo.mac}</td>
                                        <td class=" ">{$vo.rssi}</td>
                                        <td class=" ">{$vo.lasttime}</td>
                                        <td class=" ">{$vo.num}</td>
                                    </tr>
                                </volist>
                                </tbody>
                            </table>
                        </if>
                    </div>
                </div>
            </div>
        </div>
    </div>
    </div>
    <div class="modal fade" id="bjy-add" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> ×
                    </button>
                    <h4 class="modal-title" id="myModalLabel"> 添加区块信息</h4>
                </div>
                <div class="modal-body">
                    <form id="bjy-form" class="form-inline" action="{:U('Admin/Iblock/add')}" method="post">
                        <table class="table table-striped table-bordered table-hover table-condensed">
                            <tr>
                                <th width="20%">区块名称:</th>
                                <td>
                                    <input class="input-medium" type="text" name="title">
                                </td>
                            </tr>
                            <tr>
                                <th>内容:</th>
                                <td>
                                    <textarea name="content" class="form-control"></textarea>
                                </td>
                            </tr>
                            <tr>
                                <th></th>
                                <td>
                                    <input class="btn btn-success" type="submit" value="添加">
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
        </div>
    </div>
    <div class="modal fade" id="bjy-edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> ×</button>
                    <h4 class="modal-title" id="myModalLabel"> 修改区块信息</h4>
                </div>
                <div class="modal-body">
                    <form id="bjy-form" class="form-inline" action="{:U('Admin/Iblock/edit')}" method="post">
                        <input type="hidden" name="id">
                        <table class="table table-striped table-bordered table-hover table-condensed">
                            <tr>
                                <th width="20%">区块名称:</th>
                                <td>
                                    <input class="input-medium" type="text" name="title">
                                </td>
                            </tr>
                            <tr>
                                <th>内容:</th>
                                <td>
                                    <textarea name="content" id="m_content" class="form-control"></textarea>
                                </td>
                            </tr>
                            <tr>
                                <th></th>
                                <td>
                                    <input class="btn btn-success" type="submit" value="修改">
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript">
        // 添加菜单
        function add(){
            $("input[name='title'],input[name='mca']").val('');
            $('#bjy-add').modal('show');
        }
        // 修改菜单
        //navName="{$vo['name']}" navMac="{$vo['mac']}" navRssi="{$vo['rssi']}" navInfoid="{$vo['dwz_info_id']}" navLng_Lat="{$vo['lng']},{$vo['lat']}"
        function edit(obj){
            var navId=$(obj).attr('navId');
            var navTitle=$(obj).attr('navTitle');
            var navContent=$(obj).attr('navContent');
            $("input[name='id']").val(navId);
            $("input[name='title']").val(navTitle);
            $("#m_content").val(navContent);
            $('#bjy-edit').modal('show');
        }
    </script>
    <script type="text/javascript" src="__PUBLIC__/myjslib/jquery/jquery-1.8.3.min.js" charset="UTF-8"></script>
    <script type="text/javascript" src="__PUBLIC__/myjslib/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="__PUBLIC__/myjslib/js/bootstrap-datetimepicker.js" charset="UTF-8"></script>
    <script type="text/javascript" src="__PUBLIC__/myjslib/js/locales/bootstrap-datetimepicker.fr.js" charset="UTF-8"></script>
    <script type="text/javascript">
        $('.form_datetime').datetimepicker({
            //language:  'fr',
            weekStart: 1,
            todayBtn:  1,
            autoclose: 1,
            todayHighlight: 1,
            startView: 2,
            forceParse: 0,
            showMeridian: 1
        });

    </script>
    <script type="text/javascript">

        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        //var test = genData(50);

        var jstr1 = $.parseJSON('{$str1}');
        var jstr2 = $.parseJSON('{$str2}');

        option = {
            title : {
                text: '分时车位各个公司单车数量',
                //subtext: '纯属虚构',
                x:'left'
            },
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                type: 'scroll',
                orient: 'vertical',
                right: 10,
                top: 20,
                bottom: 20,
                data: jstr1
            },
            series : [
                {
                    name: '车企',
                    type: 'pie',
                    radius : '55%',
                    center: ['40%', '50%'],
                    data: jstr2,
                    itemStyle: {
                        emphasis: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    }
                }
            ]
        };


        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>

    <!-- /page content -->
</block>


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ougexingfuba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值