springboot+vue前后端分离实现宿舍管理系统

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: springboot+vue前后端分离实现宿舍管理系统

项目编号:BS-GX-032

开发技术:

  后台:Springboot+springmvc+mybatis-plus

  前台:VUE

运行环境:

  数据库:mysql5.7+Redis

  JDK: 1.8

  Maven: 3.9

 开发工具:IDEA /Eclipse

本系统基于springboot+vue采用前后端分离的方式实现了一个宿舍管理系统,功能完整,界面美观大方,交互简洁方便,比较适合做毕业设计使用。

系统有完整的权限管理系统:用户可以自定义角色、权限和功能菜单,给不同的用户角色分配不同的功能,从而实现灵活的管理功能。

业务功能实现主要包括:

学生管理、宿舍管理、班级管理、宿舍报修管理、请假管理、晚归管理

系统管理主要包括:

用户管理、权限管理、菜单管理、日志管理等

下面展示一下系统的主要功能:

用户登陆

宿舍管理

班级管理

学生管理

班级管理

查看班级学生

维修管理

晚归记录

请假管理

用户管理

角色管理

菜单管理

日志管理

个人中心

部分核心代码如下:

package com.hzvtc.myproject.controller;
import com.github.pagehelper.PageInfo;
import com.hzvtc.myproject.annotation.Log;
import com.hzvtc.myproject.annotation.RequirePermission;
import com.hzvtc.myproject.config.Constant;
import com.hzvtc.myproject.dto.ListQuery;
import com.hzvtc.myproject.entity.BackLate;
import com.hzvtc.myproject.entity.SystemUser;
import com.hzvtc.myproject.service.BackLateService;
import com.hzvtc.myproject.utils.RedisUtil;
import com.hzvtc.myproject.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
 * @author znz
 * @date 2021-12-17
 */
@RestController
@RequestMapping("/backlate")
public class BackLateController {
    @Autowired
    private BackLateService backLateService;
    @Autowired
    private RedisUtil redisUtil;
    @PostMapping("/saveOrUpdate")
    @RequirePermission(permissions = {"back:save","back:update"})
    @Log
    public Result<?> saveOrUpdate(@RequestBody @Validated BackLate backLate) {
        backLateService.saveOrUpdate(backLate);
        return Result.ok("操作成功");
    }
    @GetMapping("delete/{id}")
    @RequirePermission(permissions = {"back:delete"})
    @Log
    public Result<?> delete(@PathVariable Long id) {
        backLateService.delete(id);
        return Result.ok("删除成功");
    }
    @PostMapping("/list")
    @RequirePermission(permissions = {"back:list"})
    public Result<PageInfo<BackLate>> list(@RequestBody ListQuery<BackLate> listQuery,
                       @RequestHeader(Constant.HEADER_TOKEN) String token) {
        SystemUser systemUser = redisUtil.exchange(token).get();
        PageInfo<BackLate> pageInfo = backLateService.list(listQuery, systemUser.getBuildingId());
        return Result.<PageInfo<BackLate>>ok().add(pageInfo);
    }
    @GetMapping("/query/{id}")
    @RequirePermission(permissions = {"back:query"})
    public Result<BackLate> query(@PathVariable Long id) {
        BackLate backLate = backLateService.query(id);
        return Result.<BackLate>ok().add(backLate);
    }
}
package com.hzvtc.myproject.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzvtc.myproject.annotation.Log;
import com.hzvtc.myproject.annotation.RequirePermission;
import com.hzvtc.myproject.dto.ListQuery;
import com.hzvtc.myproject.entity.Building;
import com.hzvtc.myproject.entity.Room;
import com.hzvtc.myproject.exception.HttpException;
import com.hzvtc.myproject.service.BuildingService;
import com.hzvtc.myproject.service.RoomService;
import com.hzvtc.myproject.utils.HttpCode;
import com.hzvtc.myproject.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author znz
 * @date 2021-12-19
 */
@RestController
@RequestMapping("/building")
public class BuildingController {
    @Autowired
    private BuildingService buildingService;
    @Autowired
    private RoomService roomService;
    @GetMapping("/listAll")
    @RequirePermission(permissions = {"manage:building:list"})
    public Result<List<Building>> listAll() {
        List<Building> list = buildingService.listAll();
        return Result.<List<Building>>ok().add(list);
    }
    @GetMapping("/list")
    @RequirePermission(permissions = {"manage:building:list"})
    public Result<List<Building>> list() {
        List<Building> list = buildingService.list();
        return Result.<List<Building>>ok().add(list);
    }
    @GetMapping("delete")
    @RequirePermission(permissions = {"manage:building:delete"})
    @Log("删除building")
    public Result<?> delete(@RequestParam("id") Long id) {
        List<Room> list = roomService.listByBuildingId(id);
        if (list.size() > 0) {
            throw new HttpException(HttpCode.FAILED, "该节点下或子节点还有寝室,无法删除");
        }
        buildingService.delete(id);
        return Result.ok("删除成功");
    }
    @GetMapping("/query")
    @RequirePermission(permissions = {"manage:building:query"})
    public Result<Building> query(@RequestParam("id") Long id) {
        Building building = buildingService.query(id).orElseThrow(() -> new HttpException(HttpCode.FAILED, "该数据不存在"));
        return Result.<Building>ok().add(building);
    }
    @PostMapping("/saveOrUpdate")
    @RequirePermission(permissions = {"manage:building:save","manage:building:update"})
    @Log
    public Result<?> saveOrUpdate(@RequestBody @Validated Building building) {
        if (building.getId() == null) {
            buildingService.save(building);
        } else {
            if (building.getId().equals(building.getParentId())) {
                throw new HttpException(HttpCode.FAILED, "父节点不能为自己");
            }
            buildingService.update(building);
        }
        return Result.ok("操作成功");
    }
}
package com.hzvtc.myproject.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzvtc.myproject.config.Constant;
import com.hzvtc.myproject.dto.ListQuery;
import com.hzvtc.myproject.dto.Message;
import com.hzvtc.myproject.entity.DepartApplication;
import com.hzvtc.myproject.entity.DepartApplicationUser;
import com.hzvtc.myproject.entity.SystemUser;
import com.hzvtc.myproject.exception.HttpException;
import com.hzvtc.myproject.service.DepartApplicationService;
import com.hzvtc.myproject.service.StudentService;
import com.hzvtc.myproject.service.SystemUserService;
import com.hzvtc.myproject.socket.WebSocket;
import com.hzvtc.myproject.utils.HttpCode;
import com.hzvtc.myproject.utils.RedisUtil;
import com.hzvtc.myproject.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author znz
 * @date 2021-12-09
 */
@RestController
@RequestMapping("/depart")
public class DepartApplicationController {
    @Autowired
    private DepartApplicationService departApplicationService;
    @Autowired
    private StudentService studentService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private SystemUserService systemUserService;
    @PostMapping("/listMy")
    public Result<PageInfo<DepartApplication>> listMyApplication(@RequestBody ListQuery<DepartApplication> listQuery,
                                    @RequestHeader(Constant.HEADER_TOKEN) String token) {
        Long id = redisUtil.get(token);
        PageHelper.startPage(listQuery.getPage(), listQuery.getRows());
        List<DepartApplication> list = departApplicationService.listMyApplication(id);
        PageInfo<DepartApplication> pageInfo = new PageInfo<>(list);
        return Result.<PageInfo<DepartApplication>>ok().add(pageInfo);
    }
    @PostMapping("/listMyFlow")
    public Result<PageInfo<DepartApplicationUser>> listMyFlow(@RequestBody ListQuery<DepartApplication> listQuery,
                             @RequestHeader(Constant.HEADER_TOKEN) String token) {
        Long id = redisUtil.get(token);
        PageHelper.startPage(listQuery.getPage(), listQuery.getRows());
        List<DepartApplicationUser> list = departApplicationService.listMyFlow(id);
        PageInfo<DepartApplicationUser> pageInfo = new PageInfo<>(list);
        return Result.<PageInfo<DepartApplicationUser>>ok().add(pageInfo);
    }
    @GetMapping("/listFlow/{id}")
    public Result<List<DepartApplicationUser>> listApplicationFlow(@PathVariable("id") Long id) {
        List<DepartApplicationUser> list = departApplicationService.listApplicationFlow(id);
        return Result.<List<DepartApplicationUser>>ok().add(list);
    }
    @PostMapping("/update")
    public Result<?> update(@RequestBody DepartApplicationUser departApplicationUser,
                         @RequestHeader(Constant.HEADER_TOKEN) String token) {
        String msg = "成功,";
        SystemUser user = redisUtil.exchange(token).get();
        DepartApplicationUser applicationUser =
                departApplicationService
                        .getApplicationUser(departApplicationUser.getId());
        if (!user.getId().equals(applicationUser.getOperateUserId())) {
            throw new HttpException(HttpCode.FAILED, "无法审核");
        }
        if (applicationUser.getIsAgree() != null) {
            throw new HttpException(HttpCode.FAILED, "已审核过,无法修改");
        }
        departApplicationService.update(departApplicationUser);
        DepartApplication application =
                departApplicationService
                        .getByDepartApplicationUserId(departApplicationUser.getId());
        if (departApplicationUser.getIsAgree()) {
            if (user.getLeaderId() == null) {
                studentService.delete(application.getStudentId());
                msg += "该学生已成功退宿";
            } else {
                departApplicationService.saveApplication(user.getLeaderId(), application.getId());
                WebSocket.sendMessage(user.getLeaderId(),
                        new Message().setTitle("新的退宿申请").setType(2).setMessageBody(application.getReason()),
                        systemUserService);
                msg += "等待上一级审核";
            }
        } else {
            msg += "审核未通过";
        }
        return Result.ok(msg);
    }
    @GetMapping("delete/{id}")
    public Result<?> delete(@PathVariable Long id) {
        departApplicationService.deleteApplication(id);
        return Result.ok("撤销成功");
    }
    @GetMapping("/query/{id}")
    public Result<DepartApplication> query(@PathVariable Long id) {
        DepartApplication data = departApplicationService.getApplication(id);
        return Result.<DepartApplication>ok().add(data);
    }
}
package com.hzvtc.myproject.controller;
import com.hzvtc.myproject.annotation.Log;
import com.hzvtc.myproject.annotation.RequirePermission;
import com.hzvtc.myproject.entity.Faculty;
import com.hzvtc.myproject.entity.Student;
import com.hzvtc.myproject.exception.HttpException;
import com.hzvtc.myproject.service.FacultyService;
import com.hzvtc.myproject.service.StudentService;
import com.hzvtc.myproject.utils.HttpCode;
import com.hzvtc.myproject.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author znz
 * @date 2021-12-19
 */
@RestController
@RequestMapping("/faculty")
public class FacultyController {
    @Autowired
    private FacultyService facultyService;
    @GetMapping("/list")
    @RequirePermission(permissions = {"faculty:list"})
    public Result<List<Faculty>> list() {
        List<Faculty> list = facultyService.list();
        return Result.<List<Faculty>>ok().add(list);
    }
    @GetMapping("/listAll")
    @RequirePermission(permissions = {"faculty:list"})
    public Result<List<Faculty>> listAll() {
        List<Faculty> list = facultyService.listAll();
        return Result.<List<Faculty>>ok().add(list);
    }
    @PostMapping("/saveOrUpdate")
    @RequirePermission(permissions = {"faculty:save", "faculty:update"})
    @Log("添加或更新学院")
    public Result<?> saveOrUpdate(@RequestBody @Validated Faculty faculty) {
        if (faculty.getId() == null) {
            facultyService.insert(faculty);
        } else {
            if (faculty.getId().equals(faculty.getParentId())) {
                throw new HttpException(HttpCode.FAILED, "父节点不能为自己");
            }
            facultyService.update(faculty);
        }
        return Result.ok("操作成功");
    }
    @GetMapping("/delete")
    @RequirePermission(permissions = {"faculty:delete"})
    @Log("删除学院")
    public Result<?> delete(@RequestParam("id") Long id) {
        facultyService.delete(id);
        return Result.ok("删除成功");
    }
    @GetMapping("/query")
    @RequirePermission(permissions = {"faculty:query"})
    public Result<Faculty> query(@RequestParam("id") Long id) {
        Faculty faculty = facultyService.query(id).orElseThrow(() -> new HttpException(HttpCode.FAILED, "没有该数据"));
        return Result.<Faculty>ok().add(faculty);
    }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
32 13
|
10天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
138 1
|
1月前
|
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 的前后端分离的后台管理系统
39 0
|
21天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
23天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
24天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
27 1
vue学习第一章
|
24天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
24 1
vue学习第三章
|
25天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章