当前位置: 首页 > news >正文

基于Springboot+Vue实现智能停车场管理系统

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

项目编号:BS-XX-148

前言:

中国汽车工业的发展以及人各城市汽车爆发式增长的态势,也让人们对停车场及其附属的相关设施给人们的生活及出行的便利要求也不断提高。停车场信息管理系统从用户的安全、可靠、高效、实用、智能、便利等方面的指导思想来进行设计,采用相关技术和编程语言来实现本系统的运行与维护。为实现本系统的稳定、高效的运行,我们需要做不定期的维护与更新,要跟得上软件科技的跟新速度。本系统致力于软件的设计,对于系统怎么与停车场车辆进出的信息进行联系,现在暂不说明,例如:通过红外线射频器进行扫描车辆车牌照进行进出等情况暂不提供技术支持。

传统停车场信息管理系统[1]存在收费过程太过依赖于人力,造成了许多不可避免的麻烦,还存在停车场车位利用率低下、管理漏洞、耗费大量人力物力等问题,本系统采用了线上交易的方式,按照计时计费进行管理,使用方便,收费清晰,减少了许多不必要的人力劳动,提高系统的可靠性、安全性、便捷性的同时也提高了操作者的工作效率[2]。减少停车场工作人员的使用压力,使管理者管理流程更加简单,清晰,明了。

一,项目简介

本系统基于 SpringBoot + Vue 的智能停车场项目,它不同于别的普通的停车管理系统,一般的停车管理系统都人工操作填写停车出入信息,较为繁琐,效率低下,容易出错,不易控制,而本系统主要模拟实现智能无人值守停车场的功能,自动识别车牌,自动检测出入时间并自动计算费用在线付费后开闸放行。利用工业物联网级消息通讯组件MQTT来进行硬件通知(模拟)开闸放闸。本系统是一个通知的停车场管理平台,为合作的停车场商户提供统一的管理服务。主要实现的功能如下所示:

- 系统管理:角色管理、系统菜单、全局配置

- 账号管理:用户管理、合作单位

- 系统监控:日志监控

- 财务管理:订单列表

- 停车记录:停车记录

- 车辆管理:车辆管理

- 车牌识别:车牌识别

- 停车场管理:停车场管理

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+JPA

前台开发技术:Vue+ElementUI

其它:百度人脸识别、车牌识别解析

三,系统展示

用户登陆

首页统计功能

停车场管理

车牌识别:左边为摄相头对准汽车,右边为解析的车牌,会自动生成入场入出场记录

汽车管理:主要是添加长期租车位的用户,进停不收停车费

停车记录:自动生成,根据车牌解析来自动生成停车记录

角色管理:可为角色分配相应的权限

菜单管理:也就是权限管理,可以具体到按钮级别

统计管理

新增时指定统计查询SQL语句

订单列表:查询用户支付记录

用户管理

合作公司管理

系统日志

四,核心代码

package com.smart.module.sys.web;

import com.smart.common.model.Result;
import com.smart.module.sys.entity.SysConfig;
import com.smart.module.sys.service.SysConfigService;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 参数设置
 *
 * @author znz
 */
@RestController
@RequestMapping("/sys/config")
public class ConfigController  {

    @Autowired
    private SysConfigService sysConfigService;

    /**
     * 参数列表
     */
    @PostMapping("/list")
    public Result list(SysConfig config){
        return sysConfigService.list(config);
    }

    /**
     * 获取
     */
    @PostMapping("/get")
    public Result get(Long id){
        return sysConfigService.get(id);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    @RequiresRoles("admin")
    public Result save(@RequestBody SysConfig config){
        return sysConfigService.save(config);
    }

    /**
     * 删除
     */
    @PostMapping("/delete")
    @RequiresRoles("admin")
    public Result delete(Long id){
        return sysConfigService.delete(id);
    }

}
package com.smart.module.finance.web;

import com.smart.common.model.Result;
import com.smart.common.util.ExcelExport;
import com.smart.module.finance.entity.Order;
import com.smart.module.finance.service.OrderService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/finance/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 列表
     */
    @PostMapping("list")
    public Result list(Order entity){
        return orderService.list(entity);
    }

    /**
     * 导出
     */
    @PostMapping("export")
    @RequiresRoles(value={"admin","orgAdmin"},logical = Logical.OR)
    public void export(Long orgId, Long parkManageId, HttpServletRequest request, HttpServletResponse response){
        try{
            ExcelExport excelExport = orderService.exportData(orgId,parkManageId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            excelExport.writeTemplate(response, request,
                    "订单信息-" + sdf.format(new Date()) + ".xls");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

package com.smart.module.car.web;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.smart.common.constant.SystemConstant;
import com.smart.common.model.Result;
import com.smart.common.util.CommonUtils;
import com.smart.common.util.DateUtils;
import com.smart.common.util.OrderUtils;
import com.smart.module.car.entity.CarManage;
import com.smart.module.car.entity.CarParkManage;
import com.smart.module.car.entity.CarParkingRecord;
import com.smart.module.car.repository.CarParkingRecordRepository;
import com.smart.module.car.repository.ParkManageRepository;
import com.smart.module.car.service.CarManageService;
import com.smart.module.car.service.CarParkingRecordService;
import com.smart.module.car.util.BaiDuUtils;
import com.smart.module.car.util.CostUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * 接口管理
 */
@RestController
@RequestMapping("/api")
public class ApiController {

    @Value("${file.path}")
    private String filePath;

    @Autowired
    private BaiDuUtils baiDuUtils;

    @Autowired
    private ParkManageRepository parkManageRepository;

    @Autowired
    private CarManageService carManageService;

    @Autowired
    private CarParkingRecordRepository carParkingRecordRepository;

    @Autowired
    private CarParkingRecordService carParkingRecordService;

    /**
     * 识别车牌
     */
    @RequestMapping("distinguish")
    public Result distinguish(MultipartFile file, Long id) {
        try {
            if(file!=null){
                CarParkManage carParkManage =
                        parkManageRepository.findById(id).orElse(new CarParkManage());
                if(id==null||carParkManage==null){
                    return Result.error("请选择停车场");
                }
                File parentFile = CommonUtils.createParentFile(filePath);
                String fileName = file.getOriginalFilename();
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                String uuid = IdUtil.simpleUUID();
                fileName = uuid + suffix;
                File imageFile = new File(parentFile,fileName);
                FileUtil.writeFromStream(file.getInputStream(), imageFile);
                String fileDay = DateUtil.thisYear()+"/"+(DateUtil.thisMonth()+1)+"/"+DateUtil.thisDayOfMonth();
                String imagePath = SystemConstant.FILE + "/" + fileDay+"/"+fileName;
                String plateNumber = baiDuUtils.plateLicense(imageFile.getAbsolutePath());
                if(StringUtils.isBlank(plateNumber)){
                    return Result.error("识别失败");
                }
                Map<String, Object> map = new HashMap<>();
                map.put("plateNumber",plateNumber);
                map.put("imagePath",imagePath);

                CarParkingRecord record =
                        carParkingRecordService.getByPlateNumber(plateNumber,id);
                /**
                 * 出厂
                 */
                CarManage carManage =
                        carManageService.getByPlateNumber(plateNumber,id);
                if(record!=null){
                    record.setCost(CostUtils.calculate(record,carParkManage));
                    record.setGmtOut(DateUtils.getTimestamp());
                    map.put("msg","出厂成功");
                    /**
                     * 如果是临时车生成支付订单
                     */
                    if(carManage.getType().shortValue() == SystemConstant.CAR_TYPE_TEMP){
                        String orderNo = record.getOrderNo();
                        System.out.println("生成订单,并返回二维码"+orderNo);
                    }
                }else{
                    record = new CarParkingRecord();
                    record.setOrgId(carParkManage.getOrgId());
                    record.setOrgName(carParkManage.getOrgName());
                    record.setParkManageId(carParkManage.getId());
                    record.setParkManageName(carParkManage.getName());
                    record.setGmtInto(DateUtils.getTimestamp());
                    record.setPlateNumber(plateNumber);

                    if(carManage!=null){
                        record.setType(carManage.getType());
                        record.setOrderNo("");
                    }else{
                        record.setOrderNo(OrderUtils.getOrderNo(id));
                        record.setType(SystemConstant.CAR_TYPE_TEMP);
                    }
                    map.put("msg","进厂成功");
                }
                carParkingRecordRepository.saveAndFlush(record);
                return Result.ok(map);
            }else{
                return Result.error();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error();
        }
    }


    /**
     * 支付回调
     */
    @RequestMapping("/callBack")
    public String callBack() {
        /**
         * 生成订单、调用支付接口
         */
        return "";
    }
}

package com.smart.module.car.web;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.smart.common.constant.SystemConstant;
import com.smart.common.model.Result;
import com.smart.common.util.CommonUtils;
import com.smart.common.util.DateUtils;
import com.smart.module.car.entity.CarManage;
import com.smart.module.car.entity.CarParkManage;
import com.smart.module.car.entity.CarParkingRecord;
import com.smart.module.car.repository.CarParkingRecordRepository;
import com.smart.module.car.repository.ParkManageRepository;
import com.smart.module.car.service.CarManageService;
import com.smart.module.car.service.CarParkingRecordService;
import com.smart.module.car.util.BaiDuUtils;
import com.smart.module.car.util.CostUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/car/distinguish")
public class DistinguishController {

    @Value("${file.path}")
    private String filePath;

    @Autowired
    private BaiDuUtils baiDuUtils;

    @Autowired
    private ParkManageRepository parkManageRepository;

    @Autowired
    private CarManageService carManageService;

    @Autowired
    private CarParkingRecordRepository carParkingRecordRepository;

    @Autowired
    private CarParkingRecordService carParkingRecordService;

    /**
     * 演示上传
     */
    @RequestMapping("upload")
    public Result upload(MultipartFile file,Long id) {
        try {
            if(file!=null){
                CarParkManage carParkManage =
                        parkManageRepository.findById(id).orElse(new CarParkManage());
                if(id==null||carParkManage==null){
                    return Result.error("请选择停车场");
                }
                File parentFile = CommonUtils.createParentFile(filePath);
                String fileName = file.getOriginalFilename();
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                String uuid = IdUtil.simpleUUID();
                fileName = uuid + suffix;
                File imageFile = new File(parentFile,fileName);
                FileUtil.writeFromStream(file.getInputStream(), imageFile);
                String fileDay = DateUtil.thisYear()+"/"+(DateUtil.thisMonth()+1)+"/"+DateUtil.thisDayOfMonth();
                String imagePath = SystemConstant.FILE + "/" + fileDay+"/"+fileName;
                String plateNumber = baiDuUtils.plateLicense(imageFile.getAbsolutePath());
                if(StringUtils.isBlank(plateNumber)){
                    return Result.error("识别失败");
                }
                Map<String, Object> map = new HashMap<>();
                map.put("plateNumber",plateNumber);
                map.put("imagePath",imagePath);

                CarParkingRecord record =
                        carParkingRecordService.getByPlateNumber(plateNumber,id);
                /**
                 * 出厂
                 */
                if(record!=null){
                    record.setCost(CostUtils.calculate(record,carParkManage));
                    record.setGmtOut(DateUtils.getTimestamp());
                    map.put("msg","出厂成功");
                }else{
                    record = new CarParkingRecord();
                    record.setOrgId(carParkManage.getOrgId());
                    record.setOrgName(carParkManage.getOrgName());
                    record.setParkManageId(carParkManage.getId());
                    record.setParkManageName(carParkManage.getName());
                    record.setGmtInto(DateUtils.getTimestamp());
                    record.setPlateNumber(plateNumber);
                    CarManage carManage =
                            carManageService.getByPlateNumber(plateNumber,id);
                    if(carManage!=null){
                        record.setType(carManage.getType());
                    }else{
                        record.setType(SystemConstant.CAR_TYPE_TEMP);
                    }
                    map.put("msg","进厂成功");
                }
                carParkingRecordService.save(record);
                return Result.ok(map);
            }else{
                return Result.error();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error();
        }
    }

}

五,项目总结

传统停车场在管理及便利方面满足不了日益繁忙和不断发展的人们的需求。方便、快捷、高效、智能的停车场信息管理系统能够满足人们的需求和发展。以免造成财产、时间等不必要的浪费。以提高人们出行效率,缓解道路出行压力。

传统的停车场信息管理系统,与现代智能技术相比而言存在着大量的不足。例如,人力停车场如果进行管理的话,将会因为收费,找零等问题而耽误时间,这对于忙于事业和做活的工人来说,是非常耽误时间和金钱的。同时也因为一点点小麻烦伤了邻里之间的和气,非常划不来。尤其在早上七点到九点的时候和下午五点到七点之间,道路上车流量大,汽车、公交车、自行车、路人,这些种种因素给人们出行有了许多的障碍,本系统可以预约车位,帮助车主寻找停放车辆的地方,节省大家时间。同时本系统还包括车位,时间,费用等,方便用户的同时也确保了用户的信息安全,更加方便,快捷。

随着现代技术的飞速发展,在人们出行的时候,从以前的畜牧拉车、人力车、自行车到现在的电动车、汽车、电动汽车随处可见。所以将科技代替人力已经成为最普遍的现象。这就是我做这个系统的主要目的,运用现代化技术改变传统停车场已有的弊端,来实现人们出行的便利[3]。

相关文章:

  • 【模型训练】YOLOv7行人摔倒检测
  • 基于JAVA校园外卖系统Web端计算机毕业设计源码+系统+数据库+lw文档+部署
  • 4_卷积神经网络
  • [C++基础]-入门知识
  • Java8-19新特性(附官网传送门)
  • 加解密相关
  • 【TypeScript教程】# 6:使用webpack打包ts代码
  • Pytorch环境配置(anaconda安装+独显+CUDA+cuDNN)
  • Incorrect string value: ‘\xE6\x9D\x91\xE4\xB8\x8A...‘ for column ‘name‘错误解决
  • git --- git撤销commit(未push)
  • python爬虫的防盗链
  • 【UI自动化】实现C站三连功能
  • 网络规划与部署—ACL命名实验
  • MATLAB-随机森林实现数据回归分析预测
  • SQL考试练习题及全部答案
  • @jsonView过滤属性
  • [译]CSS 居中(Center)方法大合集
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS盒模型深入
  • Java 内存分配及垃圾回收机制初探
  • java多线程
  • node入门
  • php ci框架整合银盛支付
  • python学习笔记-类对象的信息
  • 彻底搞懂浏览器Event-loop
  • 分布式任务队列Celery
  • 缓存与缓冲
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 跳前端坑前,先看看这个!!
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $jQuery 重写Alert样式方法
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (bean配置类的注解开发)学习Spring的第十三天
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .net 程序发生了一个不可捕获的异常
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /proc/stat文件详解(翻译)
  • @GlobalLock注解作用与原理解析
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android Studio] 开发Java 程序
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BT]BUUCTF刷题第9天(3.27)
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [CF482B]Interesting Array
  • [git] windows系统安装git教程和配置
  • [HeadFrist-HTMLCSS学习笔记][第一章Web语言:开始了解HTML]
  • [IE技巧] 让IE 以全屏模式启动