基于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]。

相关文章
|
13天前
|
Java 数据库连接 应用服务中间件
基于springboot的母婴健康交流系统
本平台旨在为新手父母提供专业、系统的婴幼儿健康知识与交流空间,整合权威资源,解决育儿信息碎片化与误导问题,支持经验分享与情感互助,助力科学育儿。
|
11天前
|
JavaScript Java 关系型数据库
基于springboot的电影购票管理系统
本系统基于Spring Boot框架,结合Vue、Java与MySQL技术,实现电影信息管理、在线选座、购票支付等核心功能,提升观众购票体验与影院管理效率,推动电影产业数字化发展。
|
15天前
|
JavaScript Java 关系型数据库
基于springboot的小区车位租售管理系统
针对城市化进程中小区停车难问题,本文设计基于SpringBoot的车位租售管理系统,结合Vue前端与MySQL数据库,实现车位信息数字化、租售流程自动化。系统支持在线查询、申请、支付及数据统计,提升管理效率与用户体验,促进资源优化配置。
|
14天前
|
JavaScript Java 关系型数据库
基于springboot的家政服务预约系统
随着社会节奏加快与老龄化加剧,家政服务需求激增,但传统模式存在信息不对称、服务不规范等问题。基于Spring Boot、Vue、MySQL等技术构建的家政预约系统,实现服务线上化、标准化与智能化,提升用户体验与行业效率,推动家政服务向信息化、规范化发展。
|
9天前
|
存储 JavaScript Java
基于springboot的大学公文收发管理系统
本文介绍公文收发系统的研究背景与意义,分析其在数字化阅读趋势下的必要性。系统采用Vue、Java、Spring Boot与MySQL技术,实现高效、便捷的公文管理与在线阅读,提升用户体验与信息处理效率。
|
11天前
|
人工智能 JavaScript Java
基于springboot的大学生创新能力比赛系统
本研究聚焦大学生能力培养系统,结合AI、大数据、区块链及VR/AR等前沿技术,构建个性化、全过程的能力发展框架。通过Java、Spring Boot、MySQL与Vue技术实现系统开发,旨在提升学生综合素质与社会竞争力,推动高等教育改革与创新发展。
|
18天前
|
搜索推荐 算法 JavaScript
基于springboot的健康饮食营养管理系统
本系统基于Spring Boot、Vue与MySQL技术,融合大数据与AI算法,构建个性化健康饮食管理平台。结合用户身体状况、目标需求,智能推荐营养方案,助力科学饮食与健康管理。
|
12天前
|
JavaScript Java 数据库连接
基于springboot的网球场场地预约系统
本系统基于Vue、Spring Boot、Java等技术,构建智能化网球场预约平台,提升用户体验与场地利用率,推动体育产业数字化发展。
|
15天前
|
JavaScript Java 关系型数据库
基于springboot的校内跑腿管理系统
针对校园跑腿服务效率低、信任难等问题,本研究设计基于Spring Boot与Vue的校内跑腿管理系统,融合MySQL数据库与智能化调度技术,实现任务发布、智能匹配、实时追踪与评价反馈一体化,提升服务效率与质量,助力智慧校园建设。
|
16天前
|
JavaScript Java 关系型数据库
基于springboot的快递分拣管理系统
本系统基于SpringBoot框架,结合Java、MySQL与Vue技术,构建智能化快递分拣管理平台。通过自动化识别、精准分拣与实时跟踪,提升分拣效率与准确性,降低人力成本,推动快递行业向智能化、高效化转型,助力电商物流高质量发展。