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

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

项目编号:BS-XX-148

前言:


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


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

一,项目简介


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


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


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


- 系统监控:日志监控


- 财务管理:订单列表


- 停车记录:停车记录


- 车辆管理:车辆管理


- 车牌识别:车牌识别


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

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+JPA

前台开发技术:Vue+ElementUI

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

三,系统展示


用户登陆

image.png

首页统计功能

image.png

停车场管理

image.png

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

image.png

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

image.png

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

image.png

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

image.png

image.png

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

image.png

统计管理

image.png

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

image.png

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

image.png

用户管理

image.png

合作公司管理

image.png

系统日志

image.png

四,核心代码


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.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]。

相关文章
|
3月前
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
229 0
|
7月前
|
小程序 JavaScript Java
基于SpringBoot的智慧停车场微信小程序源码分享
智慧停车场微信小程序主要包含管理端和小程序端。管理端包括停车场管理,公告信息管理,用户信息管理,预定信息管理,用户反馈管理等功能。小程序端包括登录注册,预约停车位,停车导航,停车缴费,用户信息,车辆信息,钱包充值,意见反馈等功能。
272 5
基于SpringBoot的智慧停车场微信小程序源码分享
|
5月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
432 0
|
9月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
414 1
|
11月前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
497 4
|
11月前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。
354 0
|
10月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
257 0
|
12月前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
220 0
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的大学生勤工助学管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的大学生勤工助学管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
240 7
|
JavaScript Java 测试技术
基于SpringBoot+Vue的志愿服务管理系统设计和实现(源码+LW+部署讲解)
基于SpringBoot+Vue的志愿服务管理系统设计和实现(源码+LW+部署讲解)
181 6