基于Java+SpringBoot+Vue前后端分离员工宿舍管理系统设计与实现

news2024/11/25 1:46:14

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用ChatGPT,微信支付,扫码加群

点击这里预览

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

目录

一、系统设计

1、系统运行环境

2、系统架构设计类似如图

三、非功能性与可行性分析

四、功能截图

1、登录

2、首页

3、员工宿舍管理

3.1、宿舍管理

详情

3.2、员工管理

3.3、部门管理

查看员工

3.4、宿舍楼管理

4、记录

4.1、维修记录

5、系统管理

5.1、用户管理

发送消息给杨秀梅

杨秀梅查看消息279a797a密码123456

点击信封消息详情

5.2、角色管理

详情

5.3、菜单管理

详情

5.4、日志管理

查看详情

6、个人中心

7、修改密码

8、消息

8.1、通知

我收到的

我发送的

8.2、退宿审核

8.3、发送通知

9、宿管登录

五、实现代码 

1、角色控制器

2、服务接口

3、实现类

七、获取源码


一、系统设计

1、系统运行环境


开发系统:Windows10左右

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本: mysql5.7

数据库可视化工具: SQL yog或Navicat for MySQL

服务器:SpringBoot自带 apache tomcat

主要技术:Java、SpringBoot2、MyBatis、SpringSecurity、Redis、MySQL、Html、Vue、Elementui等
 

2、系统架构设计
类似如图

三、非功能性与可行性分析

2.5非功能性需求分析

非功能性需求:用户对软件质量属性、运行环境、资源约束、外部接口等方面的要求或期望,包括:

2.5.1性能需求:

用户在软件响应速度、结果精度、运行时资源消耗量等方面的要求。

2.5.2可行性需求:

用户在软件失效的频率、严重程度、易恢复性,以及故障可预测性等方面的要求。

2.5.3易用性需求:

用户在界面的易用性、美观性,以及对面向用户的文档和培训资料等方面的要求。

2.5.4安全性需求:

用户在身份证、授权控制、私密性等方面的要求。

2.5.5运行环境约束:

用户对软件系统运行环境的要求。

2.5.6外部接口:

用户对待开发软件系统与其它软件系统或设备之间的接口要求

2.6可行性分析

可行性分析是从不同的角度,对可能影响系统的各方面因素进行分析,确认系统在实际生活上是可行的。本系统只是单纯地从经济、法律、技术、操作可行性四个方面来分析说明。

2.6.1技术可行性

技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用Vue+Elementui开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性和持久性。后端技术使用SpringBoot、MyBatis,这些技术在许多公司已经被商用了,因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。

2.6.2经济可行性

  项目放在阿里学生服务器或者本地虚拟机的linux环境,故可行。

2.6.3法律可行性

  可行,自己写的项目,目的明确,没有违法违规。

2.6.4操作可行性

操作较为简单,而且当下信息科技发达,界面的设计也着实考虑到用户的体验,系统也是为用户而生。故操作是可行的,不存在难度大的操作。
 

四、功能截图

1、登录

2、首页

3、员工宿舍管理

3.1、宿舍管理

详情

3.2、员工管理

3.3、部门管理

查看员工

3.4、宿舍楼管理

4、记录

4.1、维修记录

5、系统管理

5.1、用户管理

可以查看用户是否在线

发送消息给杨秀梅

杨秀梅查看消息279a797a密码123456

点击信封消息详情

5.2、角色管理

详情

5.3、菜单管理

详情

5.4、日志管理

查看详情

6、个人中心

7、修改密码

8、消息

8.1、通知

我收到的

我发送的

8.2、退宿审核

8.3、发送通知

9、宿管登录

五、实现代码 

1、角色控制器

/**
 * <p>
 * 角色表 前端控制器
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
@RestController
@AllArgsConstructor
@RequestMapping("/api/roles")
public class CeamSysRoleController {
 
    private final ICeamSysRoleService ceamSysRoleService;
    private final ICeamSysUserService ceamSysUserService;
 
    @GetMapping
    public ResponseEntity<IPage<CeaMSysRoleVO>> getRoles(PageableDTO pageable) {
        IPage<CeaMSysRoleVO> mapIPage = ceamSysRoleService.pageCeaMSysRoleVO(pageable);
        return ResponseEntity.ok(mapIPage);
    }
 
    @GetMapping(value = "/level")
    public ResponseEntity<Object> getLevel() {
        return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK);
    }
 
    @PutMapping(value = "/menu")
    public ResponseEntity<Object> updateMenu(@RequestBody CeaMSysRoleDTO roleDTO) {
 
        CeamSysRole role = ceamSysRoleService.getById(roleDTO.getId());
        getLevels(role.getLevel());
        ceamSysRoleService.updateMenu(roleDTO, role);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
 
    /**
     * 获取用户的角色级别
     * @return /
     */
    private int getLevels(Integer level) {
        CeaMSysUserDTO user = ceamSysUserService.loadUserInfo(SecurityUtils.getUsername());
        List<RoleDTO> roleDTOS = ceamSysRoleService.listByUserId(user.getId());
        List<Integer> levels = roleDTOS.stream().map(RoleDTO::getLevel).collect(Collectors.toList());
        int min = Collections.min(levels);
        if (level != null) {
            if (level < min) {
                throw new ServiceException("权限不足,你的角色级别:" + min + ",低于操作的角色级别:" + level);
            }
        }
        return min;
    }
}

2、服务接口

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
public interface ICeamSysRoleService extends IService<CeamSysRole> {
 
    IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable);
 
    /**
     * 获取用户权限信息
     * @param userId 用户信息
     * @return 权限信息
     */
    Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId);
 
    /**
     *
     * @param userId 用户ID
     * @return RoleItemVOs
     */
    List<RoleDTO> listByUserId(Long userId);
 
    void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role);
}

3、实现类

/**
 * <p>
 * 角色表 服务实现类
 * </p>
 *
 * @author CeaM
 * @since 2023-01-28
 */
@Slf4j
@Service
@AllArgsConstructor
public class CeamSysRoleServiceImpl extends ServiceImpl<CeamSysRoleMapper, CeamSysRole> implements ICeamSysRoleService {
 
    private ICeamSysMenuService ceamSysMenuService;
    private ICeamRoleMenuService ceamRoleMenuService;
 
    @Override
    public IPage<CeaMSysRoleVO> pageCeaMSysRoleVO(PageableDTO pageable) {
        LambdaQueryWrapper<CeamSysRole> queryWrapper = Wrappers.<CeamSysRole>lambdaQuery()
                .eq(CeamSysRole::getDeleted, GlobalConstants.FALSE);
        Page<CeamSysRole> page = new Page<>(pageable.getPage(), pageable.getSize());
        // 手动设置当前页,不然分页失效
        page.setCurrent((long)pageable.getPage() + GlobalConstants.ONE);
        Page<CeamSysRole> ceamSysRolePage = page(page, queryWrapper);
        IPage<CeaMSysRoleVO> ceaMSysRoleVOIPage = PageVOUtil.copyToPageVO(ceamSysRolePage, CeaMSysRoleVO.class);
 
        for (CeaMSysRoleVO role : ceaMSysRoleVOIPage.getRecords()) {
 
            List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoleId(role.getId(), GlobalConstants.ZERO);
            role.setMenus(menuDTOS);
        }
 
        return ceaMSysRoleVOIPage;
    }
 
    @Override
    public Collection<SimpleGrantedAuthority> grantedAuthorities(Long userId) {
        List<RoleDTO> roleItemDTOS = this.baseMapper.listByUserId(userId);
        if (CollectionUtils.isEmpty(roleItemDTOS)) {
            throw new ServiceException("没有分配角色");
        }
 
        List<MenuDTO> menuDTOS = ceamSysMenuService.findByRoles(roleItemDTOS, GlobalConstants.ZERO);
 
        // 角色
        Set<String> permissions = roleItemDTOS.stream()
                .filter(role -> StringUtils.isNotBlank(role.getName()))
                .map(RoleDTO::getName).collect(Collectors.toSet());
        permissions.addAll(
                menuDTOS.stream()
                        .filter(menu -> StringUtils.isNotBlank(menu.getPermission()))
                        .map(MenuDTO::getPermission).collect(Collectors.toSet())
        );
 
        return permissions.stream().map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
    }
 
    @Override
    public List<RoleDTO> listByUserId(Long userId) {
        return this.baseMapper.listByUserId(userId);
    }
 
    @Override
    public void updateMenu(CeaMSysRoleDTO roleDTO, CeamSysRole role) {
        if (roleDTO.getMenus().size() > 0) {
            List<CeamRoleMenu> rolesMenusList = roleDTO.getMenus().stream().map(i -> {
                CeamRoleMenu rolesMenus = new CeamRoleMenu();
                rolesMenus.setRoleId(roleDTO.getId());
                rolesMenus.setMenuId(i.getId());
                return rolesMenus;
            }).collect(Collectors.toList());
            ceamRoleMenuService.remove(new LambdaQueryWrapper<CeamRoleMenu>()
                    .eq(CeamRoleMenu::getRoleId, roleDTO.getId()));
            ceamRoleMenuService.saveBatch(rolesMenusList);
        }
    }
}

七、获取源码

 大家点赞、收藏、关注、评论 、天下没有免费的午餐,关注下方公众号获取联系方式👇🏻👇🏻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图论08-图的建模-状态的表达与理解 - 倒水问题为例

文章目录 状态的表达例题1题解1 终止条件&#xff1a;有一个数位为42 状态的改变&#xff1a;a表示十位数&#xff0c;b表示个位数3 其他设置 例题2 力扣773 滑动谜题JavaC 状态的表达 例题1 从初始的(x&#xff0c;y)状态&#xff0c;到最后变成&#xff08;4&#xff0c;&am…

7.OsgEarth加载Obj模型

愿你出走半生,归来仍是少年&#xff01; 除了大面积的倾斜摄影的加载&#xff0c;同时还存在单个模型的加载。常用的obj模型作为单体在三维场景中的呈现。 原理类似于6.OsgEarth加载倾斜摄影-CSDN博客中的倾斜加载。 1.代码 通过osg读取文件作为节点添加到GeoTransform节点中&…

hadoop mapreduce的api调用WordCount本机和集群代码

本机运行代码 package com.example.hadoop.api.mr;import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache…

破局:如何从产业角度锻造企业不败竞争优势?

引言&#xff1a;究竟是坚守过去的辉煌,还是勇敢拥抱未来的变化?柯达的沉沦与富士胶片的崛起,揭示企业如何通过深刻理解自身的核心竞争力&#xff0c;利用产业战略的转变来实现持续发展。从产品竞争到产业升级,这不仅仅是一场商业竞赛的变革&#xff0c;更是一次企业战略思维的…

数据结构与算法—“二叉树”的实现

目录 一、二叉树链式结构的实现 1、声明结构体 2、创建新节点 3、创建二叉树 二、二叉树的遍历 1、前序遍历讲解 2、节点个数 3、叶子节点个数 4、二叉树的高度 5、第k层节点个数 6、查找值为x的节点 完整版代码&#xff1a; 一、二叉树链式结构的实现 1、声明结构体 我们为二…

【每日一练 | 华为认证真题练习Day11】

华为真题从Day1 开始的真题可留言获取 ​ Day11 华为认证中级考试真题 1、下面哪些是对网络进行管理的主要目标?(多选) A.确保网络用户收到期望的网络服务质量与技术服务信息 B.减少设备的搬迁费用 C.减少网络设备使用年限&#xff0c;和延长服务周期 D.帮助网络工程师…

nebula-br local-store 模式,快速搭建主备集群实践

因为线上图数据库目前为单集群&#xff0c;数据量比较大&#xff0c;有以下缺点&#xff1a; 单点风险&#xff0c;一旦集群崩溃或者因为某些查询拖垮整个集群&#xff0c;就会导致所有图操作受影响很多优化类但会影响读写的操作不好执行&#xff0c;比如&#xff1a;compact、…

HANA:计算视图-图形化视图-“参数“-引用表数据(性能优化)

1.前言 最近项目HANA部分的开发用的比较多&#xff0c;之前很少用图形化计算视图&#xff0c;最近研究了下&#xff0c;发现有些小功能对于图形化视图的性能提升&#xff0c;还有建模便利性都有很大帮助&#xff0c;今天发现了一个小功能&#xff0c;就是视图中的参数&#xf…

两种办法实现进制转换:将十进制数N转换成为r进制数

两种办法实现进制转换&#xff1a;将十进制数N转换成为r进制数 法一&#xff1a;递归 //进制转换 void change1(int N,int r) {if (N / r 0) {printf("%d", N%r);}else {change1(N/r, r);printf("%d", N%r);} }int main() {int N 0;int r 0;printf(&q…

grid布局中grid-row和grid-column

目录 一、grid-row 二、grid-column 三、实例 一、grid-row grid-row属性定义了网格元素行的开始和结束位置。结合了grid-row-start和grid-row-end grid-row: 1 / 3;//表示行线从第一行线到第三行线为止 二、grid-column grid-column属性定义了网格元素列的开始和结束位置…

企业税收违法查询API:提升财务监控和风险管理的关键利器

引言 随着企业税务环境的不断演变和政府对税收合规性的日益关注&#xff0c;企业面临着更多的税务合规挑战。为了降低税务风险&#xff0c;提高财务监控水平&#xff0c;许多企业已经开始采用先进的工具和技术。其中之一&#xff0c;便是企业税收违法查询API&#xff0c;这一强…

大神总结:做数据可视化,谨记三要、两不要

直观灵活分析数据&#xff0c;让数据更易懂的数据可视化报表是由大量不同类型的数据可视化图表组成的&#xff0c;那数据可视化图表又是怎么制作出来的&#xff1f;在制作数据可视化报表的过程中需要注意哪些事项&#xff1f; BI数据可视化工具里预设大量的数据可视图表&#…

魔术般的速度,焕然一新的磁盘空间 - Magic Disk Cleaner for Mac 2023

在当今这个信息时代&#xff0c;我们的磁盘空间无时无刻不在被各种文件和数据所填满。无论是工作文件&#xff0c;还是日常生活的照片、视频&#xff0c;亦或是下载的各种应用程序&#xff0c;都在不断地蚕食着我们的磁盘空间。面对这种情况&#xff0c;一款高效、便捷的磁盘垃…

竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

用友U8+ CRM任意文件上传漏洞

用友U8 CRM任意文件上传漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: body"用友U8CRM" 漏洞复现1. 构造poc2. 复现3. 访问webshell 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得利用该…

I/O性能优化——这一篇就足够啦

背景 继上一篇CPU性能优化文章 &#xff0c;本次向大家分享关于I/O性能优化的分析套路以及常见措施。后续还有关于内存及网络优化的篇章。 基本概念 对于I/O我们先了解几个概念&#xff0c;文件系统&#xff0c;磁盘&#xff0c;文件。 磁盘 磁盘为系统提供了最基本的持久化存…

香港高端人才通行证计划入围高校/全球百强大学综合名单公布!

香港高端人才通行证计划入围高校/全球百强大学综合名单公布&#xff01; 香港高才通计划希望吸引世界各地具备丰富工作经验及高学历的人才到香港探索机遇&#xff0c;这些高端人才包括高收入人士和在世界顶尖大学毕业的学生。 此计划并不适用于阿富汗、古巴、老挝、朝鲜、尼泊尔…

低功耗WiFi模块的技术发展

随着物联网的迅速发展&#xff0c;对于低功耗设备和技术的需求日益增加。低功耗WiFi模块应运而生&#xff0c;为连接大量设备提供了更长的电池寿命和更可持续的能源解决方案。本文将深入研究低功耗WiFi模块的技术发展&#xff0c;探讨其在物联网和移动设备领域的关键作用。 1.…

LEEDCODE 2235两整数相加

class Solution { public:int sum(int num1, int num2) {return (num1 num2);} };

AD9361 数据数字接口说明

一、简要 AD9361和BBP之间的数据接口以两种模式之一工作&#xff1a;标准CMOS兼容模式或低压差分信号&#xff08;LVDS&#xff09;兼容模式。本篇文章将简要介绍一下CMOS和LVDS工作模式下的数据具体的传输样式。 二、CMOS 工作模式 P0_D[11:0] and P1_D[11:0]: 端口0&#xf…