毕业设计 - 基于JAVA的小区/园区停车管理系统(简便易上手)

基于JAVA的小区停车管理系统毕业设计作品分享一下,希望能帮助到有需要的同学们。

【背景/简介】
基于JAVA的停车管理系统由车主用户管理、车主资源管理、和车辆进出记录管理三大模块组成,整体简单实用,构成了停车管理系统的核心功能。本篇文章为大家展示基于JAVA实现的停车管理系统功能,有需者可参考。

【技术框架】
系统采用的技术是基于JAVA语言开发的后台管理系统,前后端不分离,数据库采用mysql。技术栈如下:
一、后端技术:SpringBoot2.0 + Spring Data Jpa + Shiro
二、前端技术:Layui + thymeleaf

【核心开发】
一、数据库设计
核心表包括车主用户管理表、车位资源表、车辆进出记录表,具体字段如下:
在这里插入图片描述
(1)车主用户管理表(or_carOwner)

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 车牌号码
    private String plateNumber;
    // 电话
    private String phone;
    // 创建时间
    @CreatedDate
    private Date createDate;
    // 数据状态
    private Byte status = StatusEnum.OK.getCode();

(2)车位资源表(or_carPort)

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    // 车位编码
    private String portNum;
    // 开放开始时间
    @DateTimeFormat(pattern="HH:mm:ss")
    @Temporal(TemporalType.TIME)
    private Date beginTime;
    // 开放结束时间,@Temporal这个注解是用来转化mysql time类型的
    @DateTimeFormat(pattern="HH:mm:ss")
    @Temporal(TemporalType.TIME)
    private Date endTime;
    // 是否空余 0在用 1空余
    private Byte ifFree;
    // 当前车主车牌
    private String carNum;
    // 创建时间
    @CreatedDate
    private Date createDate;
    // 数据状态
    private Byte status = StatusEnum.OK.getCode();

(3)车辆进出记录表(or_carRecord)

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    // 车牌号码
    private String plateNumber;
    // 车位编码
    private String portNum;
    private String name;
    // 进入时间
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date etherTime;
    // 离开时间
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date leaveTime;
    // 创建时间
    @CreatedDate
    private Date createDate;
    // 数据状态
    private Byte status = StatusEnum.OK.getCode();

【功能展示】
一、车主用户管理
在这里插入图片描述
二、车位资源管理
在这里插入图片描述
三、车辆进出记录
在这里插入图片描述
(1)车辆入库管理,当车辆入库时候,记录车牌号码、车位编码以及进入时间。
在这里插入图片描述
车辆入库出现以下情况则不能入库成功:
A、当车辆已经入库,但尚未出库时候,如果继续对该车辆入库,会弹出提示“该车主目前已经入库停车中,不能重复添加入库”。
在这里插入图片描述
B、当入库时间大于当前时间,也会进行弹框提示
在这里插入图片描述
当车牌号码符合入库条件时候,则保存成功,同时车位状态变成在用,以及展示在用的车牌号:
在这里插入图片描述在这里插入图片描述
入库核心代码如下:

     /**
     * 保存进入的数据,车辆入库
     */
    @PostMapping("/save")
    @ResponseBody
    public ResultVo save(@Validated CarRecordValid valid, CarRecord carRecord) throws Exception {
    
    
        if(carRecord.getEtherTime() == null){
    
    
            return ResultVoUtil.error("车辆入库时间不能为空");
        }else if(carRecord.getEtherTime().after(new Date())){
    
    
            return ResultVoUtil.error("车辆入库时间不能大于当前时间");
        }

        //查询车位的信息
        CarPort carPort = carPortService.getByPortNum(carRecord.getPortNum());

        //转化为long格式,才能用compareTo()方法进行比较,判断车辆入库时间不在车位的开放时间内
        String timeNow = SimpleDateFormat.getTimeInstance(2).format(carRecord.getEtherTime());
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        Long timeNowNow= sdf.parse(timeNow).getTime();
        long startTime = carPort.getBeginTime().getTime();
        Long endTime= carPort.getEndTime().getTime();
        //当前时间大于开始时间 小于结束时间
        if (!(timeNowNow.compareTo(endTime) < 0 && timeNowNow.compareTo(startTime) > 0)) {
    
    
            return ResultVoUtil.error("车库开放时间在"+carPort.getBeginTime()+" - "+carPort.getEndTime());
        }

        //获取该车牌号现有所有的记录
        List<CarRecord> carRecordList = carRecordService.getAllByPlateNumberOrderById(carRecord.getPlateNumber());
        if(carRecordList.size() > 0){
    
    
            //判断最近一条有没有在入库但还没出库的数据
            CarRecord newCarRecord = carRecordList.get(0);
            if(newCarRecord.getEtherTime() != null && newCarRecord.getLeaveTime() == null){
    
    
                return ResultVoUtil.error("该车主目前已经在入库停车中,不能重复添加入库");
            }
            // 保存数据
            carRecordService.save(carRecord);

            //设置车位在用
            carPort.setIfFree((byte)0);//在用
            carPort.setCarNum(carRecord.getPlateNumber());//在用车牌
            carPortService.save(carPort);

            //查看用户是否存在,不存在就增加
            CarOwner carOwner = carOwnerService.getByPlateNum(carRecord.getPlateNumber());
            if(carOwner == null){
    
    
                CarOwner owner = new CarOwner();
                owner.setPlateNumber(carRecord.getPlateNumber());
                owner.setName(carRecord.getPlateNumber()+"-车主");
                carOwnerService.save(owner);
            }
            return ResultVoUtil.SAVE_SUCCESS;
        }else {
    
    
            // 保存数据
            carRecordService.save(carRecord);

            //设置车位在用
            carPort.setIfFree((byte)0);//在用
            carPort.setCarNum(carRecord.getPlateNumber());//在用车牌
            carPortService.save(carPort);

            //查看用户是否存在,不存在就增加
            CarOwner carOwner = carOwnerService.getByPlateNum(carRecord.getPlateNumber());
            if(carOwner == null){
    
    
                CarOwner owner = new CarOwner();
                owner.setPlateNumber(carRecord.getPlateNumber());
                owner.setName(carRecord.getPlateNumber()+"-车主");
                carOwnerService.save(owner);
            }

            return ResultVoUtil.SAVE_SUCCESS;
        }
    }

(2)车辆出库管理,当车辆出库时候,记录车牌号码、车位编码以及离开时间。
在这里插入图片描述
车辆出库出现以下情况则不能出库成功:
A、当车辆尚未有最新入库操作,如果继续对该车辆出库,会弹出提示“该车主没有最新入库停车操作,不能做出库操作”。
在这里插入图片描述
B、当出库的车位选择错误时候,会做对应的提示“该车主入库的车位为xxx,与出库的车位跟不一致,请重新选择车位”:
在这里插入图片描述
当出库成功后,车位对应就会变成空闲:
在这里插入图片描述
出库核心代码如下:

	/**
     * 保存离开记录,车辆出库
     */
    @PostMapping("/saveLeaveRecond")
    @ResponseBody
    public ResultVo saveLeaveRecond(@Validated CarRecordValid valid, CarRecord carRecord) {
    
    
        if(carRecord.getLeaveTime() == null){
    
    
            return ResultVoUtil.error("车辆出库时间不能为空");
        }

        //获取该车牌号现有所有的记录
        List<CarRecord> carRecordList = carRecordService.getAllByPlateNumberOrderById(carRecord.getPlateNumber());
        if(carRecordList.size() > 0){
    
    
            //判断最近一条有没有在入库但还没出库的数据
            CarRecord newCarRecord = carRecordList.get(0);
            if(newCarRecord.getEtherTime() != null && newCarRecord.getLeaveTime() != null){
    
    
                return ResultVoUtil.error("该车主没有最新入库停车操作,不能做出库操作");
            }else if(!newCarRecord.getPortNum().equals(carRecord.getPortNum())){
    
    
                return ResultVoUtil.error("该车主入库的车位为"+newCarRecord.getPortNum()+",与出库的车位跟不一致,请重新选择车位");
            }else if(carRecord.getLeaveTime().before(newCarRecord.getEtherTime())){
    
    
                return ResultVoUtil.error("车辆出库时间不能小于入库时间");
            }
            // 保存数据
            carRecord.setEtherTime(newCarRecord.getEtherTime());
            carRecord.setId(newCarRecord.getId());
            carRecord.setCreateDate(newCarRecord.getCreateDate());
            carRecord.setUpdateDate(new Date());
            carRecordService.save(carRecord);

            //设置车位在用
            CarPort carPort = carPortService.getByPortNum(carRecord.getPortNum());
            carPort.setIfFree((byte)1);//空余
            carPort.setCarNum(null);//在用车牌
            carPortService.save(carPort);

            return ResultVoUtil.SAVE_SUCCESS;
        }else {
    
    
            return ResultVoUtil.error("该车主没有最新入库停车操作,不能做出库操作");
        }
    }

【总结】
小区停车管理系统主要是围绕车辆入库和出库两个核心功能进行拓展,并进行一系列的校验控制,上手容易。

猜你喜欢

转载自blog.csdn.net/weixin_43423484/article/details/124576614