基于SpringCloud的会议室预约系统Java基于微服务的会议室报修系统【源码+lw】

💕💕作者:计算机源码社
💕💕个人简介:本人七年开发经验,擅长Java、微信小程序、Python、Android、大数据等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告

💕💕JavaWeb项目
💕💕微信小程序项目
💕💕Python项目
💕💕Android项目

文章目录

  • 1、绪论
    • 1.1 项目背景与意义
  • 2、核心功能模块
  • 3、项目页面展示
    • 3.1 登录页面
    • 3.2 会议室报修页面![在这里插入图片描述](https://img-blog.csdnimg.cn/2b18f50f90bd452fadc34a00f5c09d62.png#pic_center)## 3.3 导出会议室信息页面
    • 3.4 预约会议室页面![在这里插入图片描述](https://img-blog.csdnimg.cn/41cc5ea42a7b4947a465c5467c11dc43.png#pic_center)## 3.5 角色用户管理页面
    • 3.6 查看会议室使用情况页面![在这里插入图片描述](https://img-blog.csdnimg.cn/93e3b81ca51842218a7e69e11a24dd1a.png#pic_center)
  • 4、 核心代码

1、绪论

1.1 项目背景与意义

   随着现代企业的日益发展,会议作为信息沟通和决策的重要手段,在组织内部扮演着不可或缺的角色。然而,传统的会议室管理方式常常受限于繁琐的手动操作和信息不透明,导致会议室资源利用效率低下、预约冲突频繁发生。同时,全球化的办公环境使得跨地域、跨时区的会议安排变得复杂。为了有效解决这些挑战,"基于SpringCloud的会议室预约系统的设计与实现"成为迫切的需求。该系统的设计将通过现代化的信息技术手段,实现会议室的在线预约、实时查看和高效管理,从而为企业提供一个智能、便捷的会议室资源管理平台。
   基于SpringCloud的会议室预约系统的设计具有深远的意义。首先,系统的实施将提升会议室资源的利用效率,避免了预约冲突,降低了会议室的空置率,从而优化了企业内部资源分配。其次,系统支持远程会议预约和管理,为全球范围内的跨地域团队协作提供了可靠的工具。此外,系统的数据导出和分析功能将为企业决策提供有力支持,有助于优化会议安排,提升工作效率。总之,"基于SpringCloud的会议室预约系统的设计与实现"不仅是一个技术层面上的创新,更是企业管理效率和信息化水平提升的战略举措,将为企业内部协作和决策带来积极的影响。

2、核心功能模块

  会议室预约系统核心的功能应包括以下主要功能模块:
  1、会议室预约: 用户能够通过系统选择合适的日期、时间和会议室,进行预约,并提供会议主题和参与人信息。
  2、会议室管理: 管理员能够添加、修改和删除会议室信息,包括容纳人数、设备设施等。
  3、会议室维修申请: 用户可以提交维修申请,描述问题,并选择相关的会议室,以便及时维护。
  4、查看会议室使用情况: 用户和管理员可以查看特定日期范围内会议室的预约情况,避免冲突。
  5、导出会议室数据: 系统允许用户导出会议室使用数据和报告,支持数据分析和决策。
  6、用户管理: 系统应具备用户注册、登录、权限管理等功能,确保不同用户角色拥有适当的访问权限。

3、项目页面展示

在这里插入图片描述

3.1 登录页面

在这里插入图片描述

3.2 会议室报修页面在这里插入图片描述## 3.3 导出会议室信息页面

在这里插入图片描述

3.4 预约会议室页面在这里插入图片描述## 3.5 角色用户管理页面

在这里插入图片描述

3.6 查看会议室使用情况页面在这里插入图片描述

4、 核心代码

 /**
     * 查询会议预约信息列表
     */
    @RequiresPermissions("system:meeting_info:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(MeetingInfo meetingInfo)
    {
        startPage();
        List<MeetingInfo> list = meetingInfoService.selectMeetingInfoList(meetingInfo);
        return getDataTable(list);
    }


    @PostMapping("/detail")
    @ResponseBody
    public TableDataInfo detail(MeetingInfo meetingInfo)
    {
        if (meetingInfo.getMeetingDate()==null){
            meetingInfo.setMeetingDate(new Date());
        }
        startPage();
        List<Meeting> meetingList = new ArrayList<Meeting>();
        System.out.println(meetingInfo.getMeetingDate());
        SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd");
        String originalDate = formatter.format(meetingInfo.getMeetingDate());
        try {
            meetingInfo.setMeetingDate(formatter.parse(originalDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(meetingInfo.getMeetingDate());
        List<MeetingInfo> list = meetingInfoService.selectMeetingInfoList(meetingInfo);
        System.out.println(list.size()+">>>>>>");
        if (list.size()>0){
            for (MeetingInfo meetingInfo1 : list){
                if (meetingInfo1.getAppointmentStatus().equals("审核中")||meetingInfo1.getAppointmentStatus().equals("已通过")){
                    Meeting meeting = new Meeting();
                    meeting.setRoom(meetingInfo1.getRoomId());
                    String s = meetingInfo1.getMeetingTime().split(":")[0];
                    int se = Integer.parseInt(meetingInfo1.getMeetingTime().split(":")[1]);
                    int e = Integer.parseInt(meetingInfo1.getMeetingEnd().split(":")[0]);
                    int ee = Integer.parseInt(meetingInfo1.getMeetingEnd().split(":")[1]);
                    System.out.println("S:"+s);
                    switch (s) {
                        case "08":
                            System.out.println(8);
                            meeting.setA2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");

                            if (e>10){
                                meeting.setB2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>12){
                                meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "09":
                            System.out.println(9);
                            meeting.setA2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>10){
                                meeting.setB2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>12){
                                meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "10":
                            System.out.println(10);
                            meeting.setB2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>12){
                                meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "11":
                            meeting.setB2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>12){
                                meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "12":
                            meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "13":
                            meeting.setC2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>14){
                                meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "14":
                            meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "15":
                            meeting.setD2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            if (e>16){
                                meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            }
                            break;
                        case "16":
                            meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            break;
                        case "17":
                            meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            break;
                        case "18":
                            meeting.setE2(meetingInfo1.getMeetingTime()+"-"+meetingInfo1.getMeetingEnd()+"不可用");
                            break;
                    }
                    System.out.println("meeting:"+meeting);
                    meetingList.add(meeting);
                }
                List<String> rname = new ArrayList<String>();
                if (meetingList.size()>0){
                    for (Meeting meeting1 : meetingList){
                        rname.add(meeting1.getRoom());
                    }
                }
                for (MeetingRoom meetingRoom : meetingRoomService.selectMeetingRoomList(new MeetingRoom())){
                    if (!rname.contains(meetingRoom.getRoomName())){
                        Meeting meeting1 = new Meeting();
                        meeting1.setRoom(meetingRoom.getRoomName());
                        meeting1.setA2("");
                        meeting1.setB2("");
                        meeting1.setC2("");
                        meeting1.setD2("");
                        meeting1.setE2("");
                        meetingList.add(meeting1);
                    }
                }
            }
        }else {
            for (MeetingRoom meetingRoom : meetingRoomService.selectMeetingRoomList(new MeetingRoom())){
                Meeting meeting1 = new Meeting();
                meeting1.setRoom(meetingRoom.getRoomName());
                meetingList.add(meeting1);
            }
        }
        return getDataTable(meetingList);
    }

    /**
     * 导出会议预约信息列表
     */
    @RequiresPermissions("system:meeting_info:export")
    @Log(title = "会议预约信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(MeetingInfo meetingInfo)
    {
        List<MeetingInfo> list = meetingInfoService.selectMeetingInfoList(meetingInfo);
        ExcelUtil<MeetingInfo> util = new ExcelUtil<MeetingInfo>(MeetingInfo.class);
        return util.exportExcel(list, "会议预约信息数据");
    }

    /**
     * 新增会议预约信息
     */
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存会议预约信息
     */
    @RequiresPermissions("system:meeting_info:add")
    @Log(title = "会议预约信息", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(MeetingInfo meetingInfo) throws ParseException {
        int i = meetingInfoService.insertMeetingInfo(meetingInfo);
        if (i==-1){
            return error("会议时间存在冲突");
        }else {
            return toAjax(1);
        }

    }

    /**
     * 修改会议预约信息
     */
    @RequiresPermissions("system:meeting_info:edit")
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") Long id, ModelMap mmap)
    {
        MeetingInfo meetingInfo = meetingInfoService.selectMeetingInfoById(id);
        mmap.put("meetingInfo", meetingInfo);
        if (meetingInfoService.selectMeetingInfoById(id).getCreateBy().equals(ShiroUtils.getLoginName())){
            return prefix + "/edit";

        }else {
            for (SysRole role : roleService.selectRolesByUserId(ShiroUtils.getUserId())){
                System.out.println(ShiroUtils.getLoginName()+"<><><><>");
                if (role.getRoleName().equals("管理员")){
                    return prefix + "/edit";
                }else {
                    return "/error/noautj";
                }
            }
        }
        return "/error/noautj";
//        System.out.println(meetingInfoService.selectMeetingInfoById(id).getCreateBy()+"??????");
//        System.out.println(ShiroUtils.getLoginName()+"<><><><>");

    }

    /**
     * 修改保存会议预约信息
     */
    @RequiresPermissions("system:meeting_info:edit")
    @Log(title = "会议预约信息", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(MeetingInfo meetingInfo) throws ParseException {
        if (meetingInfoService.selectMeetingInfoById(meetingInfo.getId()).getCreateBy().equals(ShiroUtils.getLoginName())){
            int i = meetingInfoService.updateMeetingInfo(meetingInfo);
            if (i==-1){
                return error("会议时间存在冲突");
            }else {
                return toAjax(1);
            }
        }else {
            for (SysRole role : roleService.selectRolesByUserId(ShiroUtils.getUserId())){
                if (role.getRoleName().equals("管理员")){
                    int i = meetingInfoService.updateMeetingInfo(meetingInfo);
                    if (i==-1){
                        return error("会议时间存在冲突");
                    }else {
                        return toAjax(1);
                    }
                }else {
                    return error("您不是管理员,无权操作他人预约信息");
                }
            }

        }
        return error("您不是管理员,无权操作他人预约信息");
//        return toAjax(meetingInfoService.updateMeetingInfo(meetingInfo));
    }

    /**
     * 删除会议预约信息
     */
    @RequiresPermissions("system:meeting_info:remove")
    @Log(title = "会议预约信息", businessType = BusinessType.DELETE)
    @PostMapping( "/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(meetingInfoService.deleteMeetingInfoByIds(ids));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker入门——实战图像分类

一、背景 思考&#xff1a; 在一个项目的部署阶段&#xff0c;往往需要部署到云服务器或者是终端设备上&#xff0c;而环境的搭建往往是最费时间和精力的&#xff0c;特别是需要保证运行环境一致性&#xff0c;有什么办法可以批量部署相同环境呢&#xff1f; Docker本质——…

Django模型基础

文章目录 一、models字段类型概述属性命名限制使用方式逻辑删除和物理删除常用字段类型 二、常用字段参数常用字段选项(通过字段选项&#xff0c;可以实现对字段的约束) 实践创建模型执行迁移命令 并 创建超级用户登录admin后台添加文件和图片字段定义模型字段和约束及在Admin后…

vscode如何汉化

首先我们到vscode官网下载 链接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根据自己需要的版本下载就好 下载并且安装完毕之后 运行vscode 然后按快捷键 CTRLSHIFTX 打开安装扩展界面 搜索简体中文 安装就可以了 谢谢大家观看

聊聊看React和Vue的区别

Vue 更适合小项目&#xff0c;React 更适合大公司大项目&#xff1b; Vue 的学习成本较低&#xff0c;很容易上手&#xff0c;但项目质量不能保证...... 真的是这样吗&#xff1f;借助本篇文章&#xff0c;我们来从一些方面的比较来客观的去看这个问题。 论文档的丰富性 从两个…

kubesphere 集成 sonar

文章目录 安装 helm通过 helm 安装 sonar配置 SonarQube 服务器创建 SonarQube 管理员令牌SonarQube 配置添加到 ks-installer创建 Webhook 服务器将 SonarQube 服务器添加至 Jenkins将 sonarqubeURL 添加到 KubeSphere 控制台重启服务 为新项目创建 SonarQube Token 官方文档&…

Hlang--用Python写个编程语言-函数与基本数据结构实现

文章目录 前言语法表述解析器修改词法解析函数节点函数节点解析List的解析实现解释器节点函数操作String和List处理总结前言 okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实…

绘制原型图的常用工具之墨刀

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于OA项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.墨刀是什么 二.墨刀的作用 三.墨刀界…

【ES6】—使用 const 声明

一、不属于顶层对象window 使用const关键字 声明的变量&#xff0c;不会挂载到window属性上 const a 5 console.log(a) console.log(window.a) // 5 // undefined二、不允许重复声明 使用const关键字不允许重复声明相同的变量 cosnt a 5 cosnt a 6 // Uncaught SyntaxEr…

自然语言处理技术:NLP句法解析树与可视化方法

自然语言处理(Natural Language Processing,NLP)句法解析树是一种表示自然语言句子结构的图形化方式。它帮助将句子中的每个词汇和短语按照语法规则连接起来,形成一个树状结构,以便更好地理解句子的语法结构和含义。句法解析树对于理解句子的句法关系、依存关系以及语义角…

【Android Framework系列】第11章 LayoutInflater源码分析

1 前言 本章节我们主要目目的是了解Activity的xml布局解析、对LayoutInfater源码进行分析。 我们知道Android界面上的每一个控件都是一个个View&#xff0c;但是Android也提供了通过xml文件来进行布局控制&#xff0c;那么xml布局文件如何转成最终的View的呢&#xff1f;转换利…

新版QQ NT 桌面版如何实现内存优化

一、背景 QQ 作为国民级应用,从互联网兴起就一直陪伴着大家,是很多用户刚接触互联网就开始使用的应用。而 QQ 桌面版最近一次技术架构升级还是在移动互联网兴起之前,在多年迭代过程中,QQ 桌面版也积累了不少技术债务,随着业务的发展和技术的进步,当前的架构已经无法很好…

Matplotlib数据可视化(一)

目录 1.Matplotlib简介 2.Matplotlib绘图基础 2.1 创建画布与子图 2.2 添加画布属性 2.3 绘图的保存与显示 1.Matplotlib简介 Matplotlib是一个用于绘制数据可视化图表的Python库。它提供了广泛的功能和灵活性&#xff0c;可以创建各种类型的图表&#xff0c;包括折线图、…

angular中如何定义一个全局组件?

需求&#xff0c;我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航&#xff0c;在不同的页面引入时传入一个路由数组即可。 第一步&#xff1a;我们新建这个组件&#xff1a; ng g c navBreadcrumb ng g m navBreadcrumb----------nav-breadcrumb.module-------…

React(6)

1.React插槽 import React, { Component } from react import Child from ./compoent/Childexport default class App extends Component {render() {return (<div><Child><div>App下的div</div></Child></div>)} }import React, { Compon…

机器人制作开源方案 | 送餐机器人

作者&#xff1a;赖志彩、曹柳洲、王恩开、李雪儿、杨玉凯 单位&#xff1a;华北科技学院 指导老师&#xff1a;张伟杰、罗建国 一、作品简介 1. 场景调研 1.1项目目的 近年来&#xff0c;全国多地疫情频发&#xff0c;且其传染性极高&#xff0c;食品接触是传播途径之一。…

Linux-在Ubuntu搭建ftp服务器

By: Ailson Jack Date: 2023.08.20 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/151.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

VScode替换cmd powershell为git bash 终端,并设置为默认

效果图 步骤 1. 解决VScode缺少git bash的问题_failed to start bash - is git-bash.exe on the syst_Rudon滨海渔村的博客-CSDN博客效果解决步骤找到git安装目录下的/bin/bash.exe&#xff0c;复制其绝对路径&#xff0c;例如D:\Program Files\Git\bin\bash.exe把路径的右斜…

小程序-uni-app:hbuildx uni-app 安装 uni-icons 及使用

一、官方文档找到uni-icons uni-app官网 二、下载插件 三、点击“打开HBuildX” 四、选择要安装的项目 五、勾选要安装的插件 六、安装后&#xff0c;项目插件目录 根目录uni_modules目录下增加uni-icons、uni-scss 七、引入组件&#xff0c;使用组件 <uni-icons type&qu…

计算机竞赛 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…

Unity 之NavMeshAgent 组件(导航和路径寻找的组件)

文章目录 **作用**&#xff1a;**属性和方法**&#xff1a;**用途**&#xff1a;**注意事项**&#xff1a; NavMeshAgent 是Unity引擎中用于导航和路径寻找的组件。它可以使游戏对象在场景中自动找到可行走的路径&#xff0c;并在避免障碍物的情况下移动到目标位置。 以下是关于…