OA会议管理系统之我的会议(会议排座&可拖拽座位&附源码)(一)

简介: OA会议管理系统之我的会议(会议排座&可拖拽座位&附源码)

0768dfde47ef4ef6883b44c77fddbf02.jpg

一、前言

1.导读

       书接上文,在上一篇中我们完成了会议发布,但是发布就是要召开会议吗?不见得,如果选择的会议场地已经被占用或是会议人员因为某种事情而缺席等等原因应该怎么办?这时候就到了我的会议功能的重要性了,通过发布会议的会议信息会在这里显示,等待发布人员排座和提交上级领导审核通过后,方可正式召开会议。

二、我的会议功能实现

1.功能介绍

先看原型图

首先,引入眼帘的肯定是我们的初始数据,其次才是我们的主要模块的功能会议排座和送审,因为每个场地的不同所以更应该要排座,如果没有排座就不能送审,这是硬性要求,送审人也是用户身份编号为3(审批者)方可显示在我们的下拉框中。

排座效果展示:

明确了开发会议排座的意义

思考如何去完成这个功能?

1.查询出本场会议中的所有参与人员(参会人员、列席人员、主持人)

2.需要完成在页面上元素的拖动功能,把对应的参会人员放在指定位置,

如:重要的人就放在主位

3.将已经画好的会议座位图,保存下来,并且绑定到本次会议数据上去。

2.功能分析

1.寻找插件资料

网上其实有大把的资料,只要功夫深铁杵磨成针。

2.修改插件

但是搜索出来的结果肯定不能达到我们的预期,需要进一步调整。

(调整代码的过程,我这里就不一一附属了,代码会在后面给到大家!!)

3.将插件部署到我们的项目中

修改后的代码肯定又是个新的jsp文件,到时候以iframe的方式嵌入到我们指定的页面即可。

4.将排座好的图片下载

  1. 座位图要写入到xxx盘(可配置-读配置文件)
  2. 修改会议中图片地址
  3. 修改服务器配置,完成图片真实硬盘地址与浏览器请求地址的映射
  4. 在页面上直接显示图片,而并不是图片地址

这里会使用第三方库 html2canvas,将指定元素 screen_body(通过其 ID 获取)的内容转换为 canvas 元素。 然后将 canvas 元素的内容转换为 base64 编码的数据 URL,赋值给指定的变量方便我们取值。

5.初始化人员信息到会议排座中

  1. 获取参会人员的所有id
  2. 拿到id之后查询用户详细信息

3.功能实现

3.1.前期准备

配置我们本地存放图片的位置

resource.properties

dirPath=E:/oa/
serverPath=/upload/paizuo/

温馨提示:

上面是图片本地路径下面的是服务器路径并且要存入数据库的也是下面的路径

配置文件存放的位置与我们配置Action一致

关配置还不行,还需要读取配置文件内容,这里我将这步操作封装成了一个工具类方便我们使用。

PropertiesUtil(读取图片配置工具类)

package com.zking.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesUtil {
  public static String getValue(String key) throws IOException {
    Properties p = new Properties();
    InputStream in = PropertiesUtil.class.getResourceAsStream("/resource.properties");
    p.load(in);
    return p.getProperty(key);
  }
}

引入项目外的资源(tomcat容器方式)

3.2.dao层编写

dao层会涉及到User和Meetinginfo

MeetinginfoDao

初始化我的会议信息和送审人信息以及保存会议排座和送审人的信息修改操作

package com.xw.dao;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.xw.entity.Meetinginfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
/**
 * Meetingroominfo数据访问层接口实现
 * 
 * @author 索隆
 *
 */
public class MeetinginfoDaoImpl extends BaseDao<Meetinginfo> implements IMeetinginfoDao {
  /**
   * 新增会议发布数据
   * 
   * @param minfo
   * @return
   * @throws Exception
   */
  @Override
  public int add(Meetinginfo minfo) throws Exception {
    // sql语句编写
    String sql = "insert into t_oa_meeting_info (title,content,canyuze,liexize,zhuchiren,location,startTime,endTime,remark) values(?,?,?,?,?,?,?,?,?)";
    return super.executeUpdate(sql, minfo, new String[] { "title", "content", "canyuze", "liexize", "zhuchiren",
        "location", "startTime", "endTime", "remark" });
  }
  /**
   * 我的审批数据初始化
   * 
   * @param title
   *            会议标题
   * @param zhuchiren
   *            用户id
   * @return
   * @throws Exception
   */
  @Override
  public List<Map<String, Object>> list(Meetinginfo minfo, PageBean pageBean) throws Exception {
    // sql语句编写
    String sql = "SELECT\r\n" + " a.id,\r\n" + "  a.title,\r\n" + " a.content,\r\n" + " a.canyuze,\r\n"
        + " a.liexize,\r\n" + " a.zhuchiren,\r\n" + " b.NAME,\r\n" + "  d.NAME AS roomName,\r\n"
        + " DATE_FORMAT( a.startTime, '%Y-%m-%d %H:%i:%s' ) AS startTime,\r\n"
        + " DATE_FORMAT( a.endTime, '%Y-%m-%d %H:%i:%s' ) AS endTime,\r\n" + "  a.state,\r\n" + " (\r\n"
        + "CASE\r\n" + "  \r\n" + " WHEN a.state = '1' THEN\r\n" + "  '新建' \r\n"
        + " WHEN a.state = '2' THEN\r\n" + "  '待审核' \r\n" + " WHEN a.state = '3' THEN\r\n" + "  '驳回' \r\n"
        + " WHEN a.state = '4' THEN\r\n" + "  '待开' \r\n" + "  WHEN a.state = '5' THEN\r\n" + "  '进行中' \r\n"
        + " WHEN a.state = '6' THEN\r\n" + "  '开启投票' \r\n" + "  WHEN a.state = '7' THEN\r\n"
        + " '结束会议' ELSE '会议取消' \r\n" + "END \r\n" + " ) AS meetingState,\r\n" + " a.seatPic,\r\n"
        + " a.remark,\r\n" + "  a.auditor,\r\n" + " c.NAME AS auditorName \r\n" + "FROM\r\n"
        + " t_oa_meeting_info a\r\n" + "  INNER JOIN t_oa_user b ON a.zhuchiren = b.id\r\n"
        + " LEFT JOIN t_oa_user c ON a.auditor = c.id\r\n"
        + " LEFT JOIN t_oa_meeting_room d ON d.id = a.location \r\n" + "WHERE\r\n" + "  1 = 1 ";
    // 进行参数非空判断
    String title = minfo.getTitle();// 会议标题
     String auditor = minfo.getAuditor();// 会议状态
    Integer state = minfo.getState();// 会议状态
    // 根据标题查找
    if (StringUtils.isNotBlank(title)) {
      sql += " AND title LIKE '%" + title + "%'";
    }
    // 根据主持人查找
    if (StringUtils.isNotBlank(auditor)) {
      sql += " and auditor = '" + auditor + "'";
    }
    // 根据会议状态查找
    if (state != null) {
      sql += " and state = " + 2;
    }
    // 按照id降序排序
    sql += " ORDER BY a.id DESC";
    return super.executeQuery(sql, pageBean);
  }
  @Override
  public List<Map<String, Object>> Bystatelist(Meetinginfo minfo, PageBean pageBean) throws Exception {
    // sql语句编写
    String sql = "SELECT\r\n" + " a.id,\r\n" + "  a.title,\r\n" + " a.content,\r\n" + " a.canyuze,\r\n"
        + " a.liexize,\r\n" + " a.zhuchiren,\r\n" + " b.NAME,\r\n" + "  d.NAME AS roomName,\r\n"
        + " DATE_FORMAT( a.startTime, '%Y-%m-%d %H:%i:%s' ) AS startTime,\r\n"
        + " DATE_FORMAT( a.endTime, '%Y-%m-%d %H:%i:%s' ) AS endTime,\r\n" + "  a.state,\r\n" + " (\r\n"
        + "CASE\r\n" + "  \r\n" + " WHEN a.state = '1' THEN\r\n" + "  '新建' \r\n"
        + " WHEN a.state = '2' THEN\r\n" + "  '待审核' \r\n" + " WHEN a.state = '3' THEN\r\n" + "  '驳回' \r\n"
        + " WHEN a.state = '4' THEN\r\n" + "  '待开' \r\n" + "  WHEN a.state = '5' THEN\r\n" + "  '进行中' \r\n"
        + " WHEN a.state = '6' THEN\r\n" + "  '开启投票' \r\n" + "  WHEN a.state = '7' THEN\r\n"
        + " '结束会议' ELSE '会议取消' \r\n" + "END \r\n" + " ) AS meetingState,\r\n" + " a.seatPic,\r\n"
        + " a.remark,\r\n" + "  a.auditor,\r\n" + " c.NAME AS auditorName \r\n" + "FROM\r\n"
        + " t_oa_meeting_info a\r\n" + "  INNER JOIN t_oa_user b ON a.zhuchiren = b.id\r\n"
        + " LEFT JOIN t_oa_user c ON a.auditor = c.id\r\n"
        + " LEFT JOIN t_oa_meeting_room d ON d.id = a.location \r\n" + "WHERE\r\n" + "  1 = 1 ";
    // 进行参数非空判断
    String title = minfo.getTitle();// 会议标题
    Integer state = minfo.getState();// 会议状态
    String zhuchiren = minfo.getZhuchiren();// 会议主持人
    // 根据标题查找
    if (StringUtils.isNotBlank(title)) {
      sql += " AND title LIKE '%" + title + "%'";
    }
    // 根据主持人查找
    if (StringUtils.isNotBlank(zhuchiren)) {
      sql += " and zhuchiren = '" + zhuchiren + "'";
    }
    // 根据会议状态查找
    if (state != null&&state!=0) {
      sql += " and state = " + state;
    }
    // 按照id降序排序
    sql += " ORDER BY a.id DESC";
    return super.executeQuery(sql, pageBean);
  }
    @Override
  public int updateSeatPicById(Meetinginfo meetinginfo) throws Exception {
    String sql = "UPDATE  t_oa_meeting_info set seatPic =?  WHERE id=?";
    return super.executeUpdate(sql, meetinginfo, new String[] { "seatPic", "id" });
  }
  @Override
  public int updateAuditorById(Meetinginfo meetinginfo) throws Exception {
    String sql = "UPDATE  t_oa_meeting_info set auditor =?,state=2  WHERE id=?";
    return super.executeUpdate(sql, meetinginfo, new String[] { "auditor", "id" });
  }
}

UserDao

初始化我的会议排座人员信息

package com.xw.dao;
import java.util.List;
import java.util.Map;
import com.xw.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
/**
 * 用户
 * 
 * @author 索隆
 *
 */
public class UserDao extends BaseDao<User> {
  //会议排座的人员信息绑定
  public List<User> queryUserByMeetingId(Integer valueOf) throws Exception {
    String sql="select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id="+valueOf+" ))";
    return super.executeQuery(sql,User.class, null);
  }
}

相关文章
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的企业oa管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的企业oa管理系统附带文章源码部署视频讲解等
48 1
|
4月前
|
测试技术 Windows
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)(3)
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)
183 0
|
4月前
|
数据库 数据安全/隐私保护 数据库管理
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)(2)
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)
76 0
|
4月前
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)(1)
基于SpringBoot+Vue企业oa管理系统(源码+部署说明+演示视频+源码介绍)
58 0
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js的企业OA管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的企业OA管理系统附带文章和源代码设计说明文档ppt
92 8
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的企业OA管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的企业OA管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的企业oa管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的企业oa管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的OA办公系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的OA办公系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
11天前
|
安全 搜索推荐 数据安全/隐私保护
点晴免费OA办公系统:高效协同,安全易用
信息技术发展推动企业信息化,即企业利用现代技术提升生产、经营、管理效率,增强竞争力。点晴免费OA系统作为信息化管理的基础,是实现企业信息化的关键手段。
27 2
|
1月前
|
数据安全/隐私保护
点晴OA办公系统让企业变得高效协同
随着企业信息化进程的加快,很多企业开始寻求使用企业管理免费OA办公系统来提高工作效率。然而,有些些企业可能缺乏信息化经验,对技术一无所知,甚至从未接触过OA办公系统。在这种情况下,企业需要寻求功能比较全面的OA办公系统,以满足企业的实际需求。
45 1