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

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-XX-175

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:Springboot+Vue+车牌识别OCR

二,项目简介

本项目主要基于Springboot+Vue开发实现了一个多功能智慧停车场服务管理系统。系统可以根据不同的单位设置不同的停车场,根据各停车场分类实现车牌自动识、自动计时扣费等相关功能,并根据车辆是包月车还是临时车来分类别管理。用户主要分为系统管理员和各单管理员,分配的各单位管理员登录后可以管理自己单的停车场信息以及车辆停放计费信息等。同时系统还提供完美的数据统计功能,以及基本的用户管理、角色管理、停车场管理、汽车管理、缴费信息管理、车辆识别管理、菜单管理和日志记录管理等功能。

三,系统展示

系统登录:

后台管理首页

合作单位管理

账户管理

停车场管理

车辆管理

扫描识别车辆

停车记录

缴费信息

菜单管理

四,核心代码展示

package com.park.service.sys.impl;

import com.park.common.constant.Constant;
import com.park.common.utils.PageUtils;
import com.park.dao.sys.SysRoleMapper;
import com.park.entity.sys.SysRoleEntity;
import com.park.service.sys.SysRoleMenuService;
import com.park.service.sys.SysRoleService;
import com.park.service.sys.SysUserRoleService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

/**
 * 角色管理
 *
 * @author Administrator
 */
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRoleEntity> implements SysRoleService {

    @Autowired
    protected SysRoleMenuService sysRoleMenuService;
    @Autowired
    protected SysUserRoleService sysUserRoleService;

    @Override
    public PageUtils selectByPage(Map<String, Object> params) {
        long page = Long.parseLong((String) params.get(Constant.PAGE));
        long limit = Long.parseLong((String) params.get(Constant.LIMIT));
        String roleName = (String) params.get("roleName");
        Page<SysRoleEntity> pages = new Page<>(page, limit);
        QueryWrapper<SysRoleEntity> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("create_time");
        wrapper.like(StringUtils.isNotBlank(roleName), "role_name", roleName);
        IPage<SysRoleEntity> list = baseMapper.selectPage(pages, wrapper);
        return new PageUtils(list);
    }


    @Override
    public Set<String> getUserRoles(Long userId) {
        List<String> roleList = baseMapper.getUserRoles(userId);
        //用户权限列表
        Set<String> roleSet = new HashSet<>();
        for (String roles : roleList) {
            if (StringUtils.isBlank(roles)) {
                continue;
            }
            roleSet.addAll(Arrays.asList(roles.trim().split(",")));
        }
        return roleSet;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveRole(SysRoleEntity entity) {
        //保存角色
        baseMapper.insert(entity);
        //保存角色菜单关系
        sysRoleMenuService.saveOrUpdate(entity.getRoleId(), entity.getMenuIdList());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateRole(SysRoleEntity entity) {
        //更新角色
        updateById(entity);
        //更新角色菜单关系
        sysRoleMenuService.saveOrUpdate(entity.getRoleId(), entity.getMenuIdList());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(Long[] ids) {
        //删除角色
        baseMapper.deleteBatchIds(Arrays.asList(ids));

        //删除角色用户关系
        sysUserRoleService.deleteByRoleIds(ids);

        //删除角色菜单关系
        sysRoleMenuService.deleteByRoleIds(ids);

    }
    @Override
    public List<SysRoleEntity> getRoleList(long type){
        return baseMapper.getRoleList(type);
    }
}
package com.park.modules.controller.sys;

import com.park.common.annotation.SysLog;
import com.park.common.utils.PageUtils;
import com.park.common.utils.R;
import com.park.common.validator.Assert;
import com.park.common.validator.ValidatorUtils;
import com.park.entity.sys.*;
import com.park.modules.base.AbstractController;
import com.park.service.sys.AgentInfoService;
import com.park.shiro.ShiroUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.ArrayUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.*;
/*
    1.控制器所有的方法都是返回json格式的数据,通过RestController注解实现
    2.函数的接口名称是通过RequestMapping,PostMapping,GetMapping等注解实现
    3.权限是通过RequiresPermissions实现,权限的名称是通过菜单配置的
    4.文件的上传路径是通过Value注解读取配置文件的参数
    5.所有方法的返回值都是通过R类返回的
    6.所有的控制器都继承AbstractController,通过shiro返回当前登录的用户信息
    7.所有的控制器都是通过Autowired注解返回数据库操作的类
 */

@RestController
@RequestMapping("/sys/agent")
public class AgentInfoController extends AbstractController {
    @Autowired
    private AgentInfoService agentInfoService;
    @Value("${upload.absPath}")
    String absPath;
    @Value("${upload.excel}")
    String excel;

    @PostMapping("/list")
    @RequiresPermissions("sys:agent:list")
    public R list(@RequestBody Map<String, Object> params) {
        if(getUser().getUserType()==2){
            return R.error("对不起,单位管理员没有权限。");
        }
        PageUtils pageList = agentInfoService.getPageList(params);
        return R.ok().put("data", pageList);
    }
    @PostMapping("/save")
    @RequiresPermissions("sys:agent:save")
    public R saveOrUpdate(@RequestBody AgentInfoEntity agent){
        ValidatorUtils.validateEntity(agent);
        agentInfoService.saveOrUpdate(agent);

        return R.ok();
    }
    @ApiOperation("单位信息")
    @GetMapping("/myInfo")
    public R myInfo() {
        AgentInfoEntity agent = agentInfoService.getEntityById(getUser().getAgentId());
        Assert.isNull(agent, "系统中没有该单位");
        return R.ok().put("data", agent);
    }
    @ApiOperation("获取单位信息")
    @GetMapping("/info/{agentId}")
    @RequiresPermissions("sys:agent:info")
    public R info(@PathVariable("agentId") Long agentId) {
        AgentInfoEntity agent = agentInfoService.getEntityById(agentId);
        Assert.isNull(agent, "系统中没有该单位");
        return R.ok().put("data", agent);
    }
    @SysLog("添加单位")
    @PostMapping("/add")
    @ApiOperation("添加单位")
    @RequiresPermissions("sys:agent:add")
    public R add(@RequestBody AgentInfoEntity entity,MultipartFile file1) {
        ValidatorUtils.validateEntity(entity);
        entity.setRegisterTime(new Date());
        SysUserEntity user = ShiroUtils.getUser();
        entity.setManagerName(user.getUsername());
        try {
            agentInfoService.save(entity);
        }catch(Exception e) {
            return R.error("存在重复的单位编号");
        }
        return R.ok();
    }


    @SysLog("编辑单位")
    @PutMapping("/edit")
    @ApiOperation("编辑单位")
    @RequiresPermissions("sys:agent:info")
    public R edit(@RequestBody AgentInfoEntity entity) {
        ValidatorUtils.validateEntity(entity);
        AgentInfoEntity agent = agentInfoService.getEntityById(entity.getAgentId());
        if(entity.getAgentIcon()==null || entity.getAgentIcon().equals("")){
            entity.setAgentIcon(agent.getAgentIcon());
        }
        entity.setRegisterTime(agent.getRegisterTime());
        entity.setManagerName(ShiroUtils.getUser().getUsername());
        agentInfoService.updateById(entity);
        return R.ok();
    }
    @SysLog("修改单位信息")
    @PutMapping("/editMyInfo")
    @ApiOperation("编辑单位")
    public R editMyInfo(@RequestBody AgentInfoEntity entity) {
        agentInfoService.editMyInfo(entity);
        return R.ok();
    }

    @SysLog("删除单位")
    @DeleteMapping("/del")
    @ApiOperation("删除单位")
    @RequiresPermissions("sys:agent:del")
    public R del(@RequestBody Long[] ids) {

        if (ArrayUtils.contains(ids, getAgentId())) {
            return R.error("当前单位不能删除");
        }
        agentInfoService.removeByIds(Arrays.asList(ids));
        return R.ok();
    }
    @PostMapping("/exportExcel")
    @RequiresPermissions("sys:agent:list")
    //导出单位信息
    public R expInit(@RequestBody Map<String, Object> params) throws Exception{

        List<AgentInfoEntity> agentList = agentInfoService.getExcelList(params);
        String path=excel;
        path=new com.park.utils.ExportToExcel().ExpAgent(agentList,path, 3);
        return R.ok().put("data",path);
    }
}
package com.park.modules.controller.sys;
import com.park.common.annotation.SysLog;
import com.park.common.utils.R;
import com.park.common.validator.ValidatorUtils;
import com.park.entity.sys.AgentInfoEntity;
import com.park.entity.sys.CameraInfoVo;
import com.park.entity.sys.CarParkVo;
import com.park.entity.sys.SysUserEntity;
import com.park.modules.base.AbstractController;
import com.park.service.sys.AgentInfoService;
import com.park.service.sys.CameraInfoService;
import com.park.service.sys.CarInfoService;
import com.park.service.sys.CarParkService;
import com.park.shiro.ShiroUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

@RestController
@RequestMapping("/sys/camera")
public class CameraController extends AbstractController {
    @Autowired
    private CameraInfoService cameraService;
    @Autowired
    private CarParkService parkService;
    @PostMapping("/list")
    @RequiresPermissions("sys:camera:list")
    public R list(@RequestBody Map<String, Object> params) {
        List<CameraInfoVo> cameraList = cameraService.getList(params);
        return R.ok().put("data", cameraList);
    }

    @ApiOperation("获取摄像头信息")
    @GetMapping("/info/{cameraInfoId}")
    @RequiresPermissions("sys:camera:info")
    public R info(@PathVariable("cameraInfoId") Long cameraInfoId) {
        CameraInfoVo camera = null;
        if(cameraInfoId>0) {
            camera = cameraService.getById(cameraInfoId);
        }

        return R.ok().put("data", camera);
    }
    @SysLog("添加摄像头")
    @PostMapping("/add")
    @ApiOperation("添加摄像头")
    @RequiresPermissions("sys:camera:add")
    public R add(@RequestBody CameraInfoVo entity, HttpServletRequest request){
        CarParkVo park = parkService.getById(entity.getCarParkId());
        entity.setAgentId(park.getAgentId());
        entity.setCreaterTime(new Date());
        SysUserEntity user = ShiroUtils.getUser();
        entity.setCreater(user.getUsername());
        try {
            cameraService.save(entity);
        }catch (Exception e){
            return R.error("IP地址重复。");
        }
        return R.ok();
    }


    @SysLog("编辑摄像头")
    @PutMapping("/edit")
    @ApiOperation("编辑摄像头")
    @RequiresPermissions("sys:camera:info")
    public R edit(@RequestBody CameraInfoVo entity, HttpServletRequest request) throws Exception {
        ValidatorUtils.validateEntity(entity);
        CameraInfoVo user = cameraService.getById(entity.getCameraInfoId());
        entity.setAgentId(user.getAgentId());
        entity.setCreater(user.getCreater());
        entity.setCreaterTime(user.getCreaterTime());
        try {
            cameraService.updateById(entity);
        }catch (Exception e){
            return R.error("IP地址重复。");
        }
        return R.ok();
    }

    @SysLog("删除摄像头")
    @DeleteMapping("/del")
    @ApiOperation("删除摄像头")
    @RequiresPermissions("sys:camera:del")
    public R del(@RequestBody Long[] ids) {
        cameraService.removeByIds(Arrays.asList(ids));
        return R.ok();
    }
}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

  • 22
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园是指应用信息技术等先进技术手段,对学校教学、管理等方面进行智能化改造,提高管理效率和服务质量的校园。智慧校园管理系统是支持校园管理和服务的信息化平台。本文针对基于Springboot Vue智慧校园管理系统的设计与实现进行探讨。 一、系统设计 (1)系统需求分析 首先,需要对智慧校园管理系统的需求进行分析,明确系统所需要实现的功能。一般来说,系统需要具备以下功能: 1、学生信息管理,包括学籍管理、成绩管理、奖惩管理等; 2、教师信息管理,包括教师档案管理、课程管理、考勤管理等; 3、课程表信息管理,包括课程表的制定和查看; 4、教务管理,包括选课、退课、课程预约等; 5、综合信息发布系统,包括校园新闻、教学通知、校内活动等; 6、校园物资管理,包括学校资源的分配和调配; 7、教学资源管理,包括教学视频、教案、试卷等的共享和管理。 (2)系统架构设计 针对系统的需求,需要进行系统架构设计。本系统采用前后端分离的开发模式,前端采用Vue框架进行开发,后端采用Springboot框架进行开发。前后端采用RESTful API方式进行数据传递。 (3)数据模型设计 针对系统需求,设计数据模型。数据模型应包括学生信息表、教师信息表、课程表信息表、教务信息表、校园物资信息表、教学资源信息表等。 二、系统实现 (1)前端实现 采用Vue框架进行前端开发,通过Vue-cli和Vue-router实现项目搭建和路由控制。利用ElementUI作为UI库,Bootstrap作为样式库进行网站美化。 (2)后端实现 采用Springboot框架进行后端开发,通过Mybatis实现与数据库的交互。利用Spring Security进行安全管理,jwt进行认证和授权。 (3)运行环境 系统运行环境需要Java环境和Node.js环境。数据库采用MySQL。 三、总结 本篇文总结了基于Springboot Vue智慧校园管理系统的设计与实现。该系统具有较大的实用价值,可较好的满足学校管理的需求。在实际开发中,需要结合具体学校情况进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程千纸鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值