会议信息管理系统SSM记录(六)

news2024/11/15 19:31:55

目录:

(1)会议预定1

(2)会议预定2

(3)会议预约3

(4)会议预定4


(1)会议预定1

创建MeetingController:

//跳转预定会议页面
    @RequestMapping("/bookmeeting")
    public String bookmeeting(Model model){
        model.addAttribute("mrs",meetingRoomService.getAllMr());//查询所有会议室
        return "bookmeeting";
    }

 

删除预定页面部门的固定代码:

 

 修改:

 

 

 (2)会议预定2

添加json依赖:

在MeetingController添加:获取部门请求:

 

 //返回所有的部门
    @RequestMapping("/alldeps")
    @ResponseBody
    public List<Department> getAllDeps(){
        return departmentService.getAllDeps();
    }

 

 //获取所有部门
    public List<Department> getAllDeps() {
        return departmentMapper.getAllDeps();
    }
//获取所有部门
    List<Department> getAllDeps();
 <!--获取所有部门-->
    <select id="getAllDeps" resultType="com.xzb.meeting.model.Department">
        select *
        from department
    </select>

在MeetingController:添加 

获取员工请求:

 

 

 //通过部门编号获取员工
    @RequestMapping("/getempbydepid")
    @ResponseBody
    public List<Employee> getEmpsByDepId(Integer depId){
        return employeeService.getEmpsByDepId(depId);
    }

 在EmployeeService:添加:

 //通过部门编号获取员工
    public List<Employee> getEmpsByDepId(Integer depId) {
        return employeeMapper.getEmpsByDepId(depId);
    }

 在EmployeeMapper:添加这个方法:

 //通过部门编号获取员工
    List<Employee> getEmpsByDepId(Integer depId);

 EmployeeMapper.xml:书写sql语句:

 

 <!--通过部门编号获取员工-->
    <select id="getEmpsByDepId" resultType="com.xzb.meeting.model.Employee">
        select *
        from employee
        where departmentid = #{depId}
    </select>

引入在线jquery的依赖:

 

 <script type="application/javascript">
            
            
            var selDepartments;
            var selEmployees;
            var selSelectedEmployees;
            
            function body_load(){
                selDepartments = document.getElementById("selDepartments");
                selEmployees = document.getElementById("selEmployees");
                selSelectedEmployees = document.getElementById("selSelectedEmployees");

                //发送ajax请求  返回所有的部门
                $.get("/alldeps", function (data) {
                    for (let i = 0; i < data.length; i++) {
                        var item = data[i];
                        var dep = document.createElement("option");//创建一个option元素
                        dep.value = item.departmentId;
                        dep.text = item.departmentName;
                        selDepartments.appendChild(dep);//把option放到selDepartments下拉列表
                    }
                    fillEmployees();
                })
            }

            //填充下方的
            function fillEmployees(){
                clearList(selEmployees);//清除上次的
                var departmentid = selDepartments.options[selDepartments.selectedIndex].value;
                //发送ajax获取 通过部门编号获取员工
                $.get("/getempbydepid?depId="+departmentid,function (data) {
                    for(i=0;i<data.length;i++) {
                        var emp = document.createElement("option");
                        emp.value = data[i].employeeId;
                        emp.text = data[i].employeeName;
                        selEmployees.appendChild(emp);
                    }
                })
            }

            //清除方法
            function clearList(list){
                while(list.childElementCount > 0){
                    list.removeChild(list.lastChild);
                }
            }

            //选择员工
            function selectEmployees(){
                for(var i=0;i<selEmployees.options.length;i++){
                    if (selEmployees.options[i].selected){
                        addEmployee(selEmployees.options[i]);
                        selEmployees.options[i].selected = false;
                    }
                }
            }

            //把员工从右边从删除
            function deSelectEmployees(){
                var elementsToRemoved = new Array();
                var options = selSelectedEmployees.options;
                for(var i=0;i<options.length;i++){
                    if (options[i].selected){
                        elementsToRemoved.push(options[i]);
                    }
                }
                for(i=0;i<elementsToRemoved.length;i++){
                    selSelectedEmployees.removeChild(elementsToRemoved[i]);
                }
            }

            //把选择的员工添加到右边框内
            function addEmployee(optEmployee){
                var options = selSelectedEmployees.options;
                var i = 0;
                var insertIndex = -1;
                while(i < options.length){
                    if (optEmployee.value == options[i].value){
                        return;
                    } else if (optEmployee.value < options[i].value) {
                        insertIndex = i;
                        break;
                    }
                    i++;
                }
                var opt = document.createElement("option");
                opt.value = optEmployee.value;
                opt.text = optEmployee.text;
                opt.selected = true;
                
                if (insertIndex == -1){
                    selSelectedEmployees.appendChild(opt);
                } else {
                    selSelectedEmployees.insertBefore(opt, options[insertIndex]);
                }
            }            
        </script>

(3)会议预约3

 

使用日历的插件

 

在配置文件中mvc:spring-servlet.xml中配置不拦截:

 

 然后 在页面引入js文件:

修改:

 

 

 

 

 (4)会议预定4

创建Meeting实体类:

创建DataConverter:时间类型转换:

package com.xzb.meeting.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 类型转换
 */
public class DateConverter implements Converter<String, Date> {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public Date convert(String source) {
        try {
            return sdf.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 在配置文件中配置:mvc:spring-servlet.xml

 

在MeetingController中添加:预约会议方法:

//添加会议请求  meeting会议的信息  mps:参加人员的数组
    @RequestMapping("/doAddMeeting")
    public String bookMeeting(Meeting meeting, Integer[] mps, HttpSession httpSession){
        Employee currentuser = (Employee) httpSession.getAttribute("currentuser");//从session里面获取当前登录的用户
        meeting.setReservationistid(currentuser.getEmployeeId());//设置meeting信息,设置发起会议的用户
        Integer result = meetingService.addmeeting(meeting,mps);
        if (result == 1){
            return "redirect:/searchmeetings";
        }else {
            return "forward:/bookmeeting";
        }
    }

 在MeetingService:添加:

 

 


    //添加会议请求   mps 参加会议的员工的员工ID
    public Integer addmeeting(Meeting meeting, Integer[] mps) {
        meeting.setReservationtime(new Date());
        meeting.setStatus(0);//设置会议的状态
        Integer result = meetingMapper.addmeeting(meeting);//往会议表添加一条数据
        meetingMapper.addParticipants(meeting.getMeetingid(),mps);//往会议员工记录表添加一条数据
        return result;
    }

在MeetingMapper:添加:

 //添加会议请求
    Integer addmeeting(Meeting meeting);
//添加参会人员
    void addParticipants(@Param("meetingid") Integer meetingid,@Param("mps") Integer[] mps);

MeetingMapper.xml添加sql语句

 <!--添加会议请求-->
    <insert id="addmeeting" useGeneratedKeys="true" keyProperty="meetingid">
        insert into meeting (meetingname,roomid,reservationistid,numberofparticipants,starttime,endtime,reservationtime,canceledtime,description,status)
        values (#{meetingname}, #{roomid}, #{reservationistid}, #{numberofparticipants}, #{starttime}, #{endtime},
                #{reservationtime}, #{canceledtime}, #{description}, #{status})
    </insert>
<!--添加参会人员-->
    <insert id="addParticipants">
        insert into meetingparticipants(meetingid,employeeid) values
        <foreach collection="mps" item="mp" separator=",">
            (#{meetingid},#{mp})
        </foreach>
    </insert>

 

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

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

相关文章

嵌入式面试题

1、写一个程序判断电脑是大端字序还是小端字序&#xff08;加量不加价&#xff09; #include <stdio.h> #include <arpa/inet.h> typedef unsigned char byte; typedef unsigned int word; int main(int argc, char *argv[]) {word val32 0x11223344;byte val8 …

业务流程管理包括什么

​什么是业务流程管理&#xff1f; 业务流程管理 (BPM)提供了一些用于发现、建模、分析、衡量、改进和优化业务策略及流程的方法。 在知名企业中&#xff0c;麦当劳是因为业务流程管理而获得成功的企业之一&#xff0c;标准化业务流程制度是麦当劳成功的关键。 麦当劳为了保证…

CAS号:2578-57-6,H2N-PG-OH

脯氨酸酶的底物(脯氨酸二肽酶)。 编号: 116803中文名称: 二肽Pro-Gly英文名: Pro-GlyCAS号: 2578-57-6单字母: H2N-PG-OH三字母: H2N-Pro-Gly-COOH氨基酸个数: 2分子式: C7H12N2O3平均分子量: 172.18精确分子量: 172.08等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -疏…

MCE | 为什么肥胖经常被“针对”?

近年来&#xff0c;肥胖问题受到越来越多的关注&#xff0c;肥胖不只影响美丽身材&#xff0c;过度肥胖还可能导致肥胖症&#xff0c;这是很多疾病的高风险因素。所以肥胖是一种病&#xff1f;肥胖的标准是什么&#xff1f;别急&#xff0c;等小编慢慢道来。 认识肥胖症 (Obesi…

大数据毕设选题 - 深度学习口罩佩戴检测系统(python OpenCV YOLO)

文章目录0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存5 训练6 实现效果6.1 pyqt实现简单GUI6.2 图片识别效果6.3 视频识别效果6.4 摄像头实时识别7 最后0 前言 &#x1f525; Hi&#xff0c…

通过ref进行组件间的通信

ref&#xff1a;绑定dom节点&#xff0c;拿到的就是dom对象&#xff1b; ref&#xff1a;绑定组件&#xff0c;拿到的就是组件对象&#xff1b; ref绑在dom节点上&#xff1a; //绑在dom上&#xff0c; <input type"text" ref"mytext"> <input…

SpringCloud微服务(十二)——Seata分布式事务

SpringCloud Alibaba Seata分布式事务 简介 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务 官网&#xff1a;http://seata.io/zh-cn/ 一次业务操作需要垮多个数据源或需要垮多个系统进行远程调用,就会产生分布式事务问题…

PDF的两种密码忘记了,怎么解决

PDF文件带有两种加密方式&#xff0c;大家一定都很熟悉&#xff0c;因为大部分文件都有这两种加密方式&#xff0c;比如Word、Excel、PPT、压缩包等。PDF文件也有这两种密码。 那就是&#xff1a;打开密码、编辑限制 打开密码&#xff1a;就是在我们打开PDF文件的时候&#x…

聚焦离子束FIB测试的计量技术规范盘点

聚焦离子束系统采用聚焦的离子束对样品表面进行轰击&#xff0c;并由计算机控制离子束的扫描或加工轨迹、步距、驻留时间和循环次数&#xff0c;以实现对材料的成像、刻蚀、诱导沉积和注入的分析系统。其应用已经从界面检测扩展到纳米图像制备、透射样品制备、三维成像和分析、…

网络安全加固的必要性

随着信息化的快速变化&#xff0c;企业和机构面临网络安全威胁也越来越多&#xff0c;每一种安全防护措施就像是桶的一块木板&#xff0c;这个木桶中承载着的水就好比网络中运行的各种业务。各种业务能否安全、稳定地运转取决于最矮木板的高度和各块木板之间是否存在缝隙。为了…

加拿大Assignment写作格式技巧整理

对大部分同学来说&#xff0c;写Assignment就如同梦魇一般&#xff0c;让人望而却步。的确&#xff0c;写Assignment是一个大工程&#xff0c;需要为之付诸努力。但是也不必过于担心&#xff0c;小编在本文中主要讨论加拿大英文Assignment的格式及写作技巧&#xff0c;希望能对…

内网使用adb工具使用logcat进行日志分析

WorkTool自动化团队问题发现正文总结问题发现 我们在平时的安卓项目开发中&#xff0c;看日志和调试肯定都是通过 Android Studio 进行实时日志查看和过滤&#xff0c;但如果是部署在内网机器或其他原因不能方便的安装 Android Studio 想查看实时日志就有一定的困难&#xff0…

擎创技术流 | ClickHouse实用工具—ckman教程(4)

《使用CKman导入集群》 CKman&#xff08;ClickHouse Manager&#xff09;是由擎创科技自主研发的一款管理ClickHouse的工具&#xff0c;前端用Vue框架&#xff0c;后端使用Go语言编写。它主要用来管理ClickHouse集群、节点以及数据监控等&#xff0c;致力于服务ClickHouse分布…

双软企业认定需要什么条件

认定双软企业的好处 1、税收优惠:所得税两免三减半。双软认证企业&#xff0c;自获利年度起&#xff0c;第一年和第二年免征企业所得税&#xff0c;第三年至第五年减半征收企业所得税。 增值税超过3%的部分即征即退。 2、政策支持:各地政府对于科研专项资金、税收减免科技计划、…

哈希表【数据结构】

文章目录哈希表概念插入元素搜索元素结构冲突概念冲突-避免哈希函数设计常见哈希函数调节负载因子负载因子定义负载因子和冲突率的关系冲突解决冲突-解决-闭散列线性探测过程缺点二次探测概念缺点冲突-解决-开散列/哈希桶概念结构代码实现哈希桶hashcode 和 equals问题面试题&a…

Metabase学习教程:视图-2

线型图指南 当我们谈论线型图时&#xff0c;我们谈论的多数是&#xff1a;时间序列、趋势线、警报等等。 线型图对于绘制在序列中捕获的数据非常有用&#xff0c;无论该序列是时间的流逝&#xff0c;还是流程或流中的步骤。这些图表通常用于绘制时间序列&#xff08;也称为运…

语义分割实战:基于tensorflow搭建DeeplabV3实现语义分割任务

任务描述: 语义分割是一种典型的计算机视觉问题,其是将一些图像作为输入并将它们转换为具有突出显示的感兴趣区域的掩模,即图像中的每个像素根据其所属的感兴趣对象被分配类别。如下图中左图所示,其语义是人骑自行车,语义分割的结果如右图所示,粉红色代表人,绿色代表自行…

ssm基于安卓android的失物招领APP-计算机毕业设计

技术介绍 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 安卓框架&#x…

Qt MainWindow窗口部件简介

Qt MainWindow窗口部件简介 1、菜单栏 特性如下&#xff1a; 有且仅有一个**位置&#xff1a;**顶部 // 创建菜单 最多只能有一个 QMenuBar * bar menuBar(); // 将菜单栏放入到窗口处 setMenuBar(bar);// 创建顶部菜单 QMenu * fileMenu bar->addMenu("文件&quo…

用DIV+CSS技术制作一个简单的网页 我的家乡主题

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…