人流密度检测系统服务端

简介

本项目是人流密度检测系统的服务端,采用SpringBoot与MyBatis框架搭建,数据库采用MySQL数据库。

本项目通过对数据分析端提供RESTFULL接口来接收数据储存到数据库中,然后微信小程序端每分钟向服务端请求一次数据,从而达到实时获取人流密度的效果。

项目架构

本项目通过三层架构进行解耦,分别是Controller层,Server层,Mapper层

Controller层

Controller层主要是与用户交互,接受用户发来的信息并传给Server层进行处理。

对外提供三个接口,分别是/setDataList,/getDataList与/getData。

/setDataList

该接口对外提供给数据分析端用来提交全部摄像头信息。

接口逻辑:数据分析端发来一个数据包,服务端首先会解开数据包提取出其中的json数据,然后将json数据转化成对应的实体类列表,然后遍历实体类列表,用if判断该实体类是否为新摄像头,如果是,则进行插入操作,如果不是则进行更新操作。如果全部成功则返回200状态码,存在失败操作就返回400状态码。

@RequestMapping("/setDataList")
    public Result setDataList(@RequestBody List<Data> dataList){
        for(Data data:dataList){
            Data data1 = dataService.getData(data);
            if(data1!=null){
                dataService.updateData(data);
            }else dataService.insertData(data);
        }
        result.setSuccess("数据更新成功",null);
        return result;
    }

/getDataList

该接口对外提供给微信小程序端用来查询全部摄像头信息。

接口逻辑:微信小程序端发来POST请求,服务端查询数据库中所有数据并封装在实体类列表中,然后打成JSON格式数据包发送给微信小程序。

 @RequestMapping("/getDataList")
    public Result getDataList(){
        List<Data> dataList = dataService.getDataList();
        if(dataList.size()>0){
            result.setSuccess("查询成功",dataList);
        }else result.setInfo("信息缺失",null);
        return result;
    }

/getData

该接口对外提供给微信小程序端用来根据经纬度查询摄像头信息。

接口逻辑:微信小程序端携带经纬度发来POST请求,服务端根据经纬度查询数据库中所有数据并封装在实体类中,状态码设为200,然后打成JSON格式数据包发送给微信小程序,如果数据库中不存在该经纬度下的摄像头,则返回400状态码。

@RequestMapping("/getData")
    public Result getData(@RequestBody Data data){
        Data data1 = dataService.getData(data);
        if(data1!=null){
            result.setSuccess("查询成功",data1);
        }else result.setInfo("信息缺失",null);
        return result;
    }

Server层

Server层主要是接受Controller层的数据并处理数据,将数据转化成查询数据库需要用到的数据,然后传给Mapper层进行下一步操作。并且可以开启事务防止数据出错丢失。

由于本项目中数据逻辑较为简单,故不再展示。

Mapper层

Mapper层接收到Server层的数据后,通过MyBatis框架,执行相应的SQL语句查询数据库,然后将数据返回给Server层。

Mapper层有4个方法分别是:getData(Data data)、getDataList()、updateData(Data data)、insertData(Data data);

getData(Data data)

根据经纬度查询摄像头数据

sql语句:

select * from `data` where latitude = #{latitude} and longitude = #{longitude}

getDataList()

查询所有摄像头数据

sql语句:

select * from `data`

updateData(Data data)

更新对应摄像头数据

sql语句:

update `data` set num = #{num} where latitude = #{latitude} and longitude = #{longitude}

insertData(Data data)

插入新的摄像头数据

sql语句:

insert into `data`(camera_id,latitude,longitude,num) values (#{cameraId},#{latitude},#{longitude},#{num})

数据库设计

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for data
-- ----------------------------
DROP TABLE IF EXISTS `data`;
CREATE TABLE `data` (
  `camera_id` varchar(50) NOT NULL,
  `latitude` double(12,6) NOT NULL,
  `longitude` double(12,6) NOT NULL,
  `num` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`camera_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

代码仓库

Gitee:
star

文章标题:人流密度检测系统服务端
文章作者:世间难得逍遥
文章链接:https://www.abyss.website/classify/programming/java/pedestriandensityspring/

许可协议: CC BY 4.0 转载请保留原文链接及作者。


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇