OA会议管理系统之待开、历史、所有会议(内附源码)

简介: OA会议管理系统之待开、历史、所有会议(内附源码)

319953a7773b4012bb2d834c1503e147.jpg

一、前言

1.导读

如我们的标题所示,待开、历史、所有会议分别是三个小模块,它们的功能相同但是意义不同,这三个的本质意义就是显示的会议状态不同,下面将由我来带领大家走进和了解这三个模块。

二、功能实现

1.功能介绍及分析

首先我们进行分析一下,这三个模块的展示数据

       待开会议➡会议状态(待开)

       历史会议➡会议状态(结束会议)

       所有会议➡会议状态(所有状态)

这时候我们发现功能其实都是大同小异的,唯独他们的会议状态不一致,我们就可以对这一点进行优化,我们只要完成一个模块就等同于完成了三个,我们可以在dao方法上面下文章,让条件判断的state是可变的,通过前端页面的js传递参数来实现,需要注意的是,这三个模块只对登录者存在于某条会议中展示不是全部公开的,下面来看看我们的具体改动在哪里?

2.功能实现

2.1.dao层

MeetinginfoDaoImpl

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 {
  @Override
  public List<Map<String, Object>> Bystatelist(Meetinginfo minfo,String findstate, int userid, 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 WHEN a.state = '1' THEN '新建'\r\n" + 
        "            WHEN a.state = '2' THEN '待审核'\r\n" + 
        "            WHEN a.state = '3' THEN '驳回'\r\n" + 
        "            WHEN a.state = '4' THEN '待开'\r\n" + 
        "            WHEN a.state = '5' THEN '进行中'\r\n" + 
        "            WHEN a.state = '6' THEN '开启投票'\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" + 
        "    (\r\n" + 
        "        SELECT *\r\n" + 
        "        FROM t_oa_meeting_info\r\n" + 
        "        WHERE FIND_IN_SET("+userid+", canyuze)\r\n" + 
        "            OR FIND_IN_SET("+userid+", liexize)\r\n" + 
        "            OR FIND_IN_SET("+userid+", zhuchiren)\r\n" + 
        "    ) 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 zhuchiren = minfo.getZhuchiren();// 会议主持人
    // 根据标题查找
    if (StringUtils.isNotBlank(title)) {
      sql += " AND title LIKE '%" + title + "%'";
    }
    // 根据主持人查找
    if (StringUtils.isNotBlank(zhuchiren)) {
      sql += " AND zhuchiren = '" + zhuchiren + "'";
    }
    // 根据会议状态查找
    if (findstate != null && StringUtils.isNotBlank(findstate)) {
      sql += " AND  FIND_IN_SET(state,('"+findstate+"'))  ";
    }
    // 按照id降序排序
    sql += " ORDER BY a.id DESC";
    return super.executeQuery(sql, pageBean);
  }
}

2.2.jsp页面

三个模块的jsp与js都是一致的,不一致的地方在于传递到后端的参数不同所以显示的数据也不同,所以就不一一展示给大家看了。

JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ include file="/common/static.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="static/js/meeting/meetingWaiting.js"></script>
<title>待开会议</title>
</head>
<style>
body {
  margin: 15px;
}
.layui-table-cell {
  height: inherit;
}
.layui-layer-page .layui-layer-content {
  overflow: visible !important;
}
</style>
<body>
  <!-- 搜索栏 -->
  <div class="layui-form-item" style="margin: 15px 0px;">
    <div class="layui-inline">
      <label class="layui-form-label">会议标题</label>
      <div class="layui-input-inline">
        <input type="text" id="title" autocomplete="off" class="layui-input" placeholder="请输入需要查询的会议标题">
      </div>
    </div>
    <div class="layui-inline">
      <button id="btn_search" type="button" class="layui-btn">
        <i class="layui-icon layui-icon-search"></i> 查询
      </button>
    </div>
  </div>
  <!-- 数据表格 -->
  <table id="dktb" lay-filter="dktb" class="layui-table" style="margin-top: -15px"></table>
</body>
</html>

JS代码

var table, $, layer;
var row;
layui.use([ 'table', 'jquery', 'layer' ], function() {
  table = layui.table, layer = layui.layer, $ = layui.jquery;
  initTable();
  //为查询按钮设置点击事件
  $("#btn_search").click(function() {
    query();
  })
});
//查询的点击事件
function query() {
  table.reload('dktb', {
    url : 'Meetinginfo.action', //请求地址
    method : 'POST', //请求方式,GET或者POST
    page : true, //是否分页
    where : {
      //设定异步数据接口的额外参数,任意设
      'methodName' : 'BystateList',
      'title' : $('#title').val(),
      'state' : 4,
    },
    request : { //自定义分页请求参数名
      pageName : 'page', //页码的参数名称,默认:page
      limitName : 'rows' //每页数据量的参数名,默认:limit
    },
    done : function(res) {
      console.log(res);
    }
  })
};
//将分页查询方法封装
function initTable() {
  table.render({
    elem : '#dktb',
    url : 'Meetinginfo.action',
    title : '我的会议',
    where : {
      //设定异步数据接口的额外参数,任意设
      'methodName' : 'BystateList',
      'title' : $('#title').val(),
      'state' : 4//这里的传递根据需求而定
                       //待开会议 4
                       //历史会议 7
                       //所以会议直接不传参就是全部会议
    },
    cols : [ [ {
      type : 'checkbox',
      fixed : 'left'
    }, {
      field : 'id',
      title : '会议编号',
      width : 140,
      fixed : 'left',
      unresize : true,
      sort : true
    }, {
      field : 'title',
      title : '会议标题',
      width : 180,
      edit : 'text'
    }, {
      field : 'roomName',
      title : '会议地点',
      width : 150,
      edit : 'text'
    }, {
      field : 'startTime',
      title : '开始时间',
      width : 150,
      edit : 'text'
    }, {
      field : 'endTime',
      title : '结束时间',
      width : 120,
      edit : 'text'
    }, {
      field : 'meetingState',
      title : '会议状态',
      width : 120,
      edit : 'text'
    }, {
      field : 'NAME',
      title : '主持人',
      width : 120,
      edit : 'text'
    }
    ] ],
    page : true
  });
}

2.3.web层

MeetinginfoAction

package com.xw.web;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.beanutils.ConvertUtils;
import com.sun.xml.internal.ws.encoding.soap.SOAP12Constants;
import com.xw.biz.IMeetinginfoBiz;
import com.xw.biz.MeetinginfoBizImpl;
import com.xw.entity.Meetinginfo;
import com.xw.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.Base64ImageUtils;
import com.zking.util.DateUtil;
import com.zking.util.MyDateConverter;
import com.zking.util.PageBean;
import com.zking.util.PropertiesUtil;
import com.zking.util.R;
import com.zking.util.ResponseUtil;
import com.zking.util.StringUtils;
/**
 * 会议管理
 * 
 * @author 索隆
 *
 */
public class MeetinginfoAction extends ActionSupport implements ModelDriver<Meetinginfo> {
  private Meetinginfo Meetinginfo = new Meetinginfo();
  private IMeetinginfoBiz imd = new MeetinginfoBizImpl();
  /**
   * 初始化我的会议、待开会议、历史会议、所有会议数据
   * 
   * @param req
   * @param resp
   * @throws Exception
   */
  public void BystateList(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    // 初始化PageBean
    PageBean pageBean = new PageBean();
    pageBean.setRequest(req);
    // 获取当前登陆的用户id
    HttpSession session = req.getSession();
    User user = (User) session.getAttribute("user");
    int userid=0;
    if (user != null) {
      userid=(int) user.getId();
    }
    // 初始化数据
    String title = req.getParameter("title");
    if (StringUtils.isNotBlank(title)) {
      Meetinginfo.setTitle(title);
    }
    //可能是状态集合有可能是单个状态
    String findstate = req.getParameter("state");
    //为会议列表做准备
    if (StringUtils.isNotBlank(findstate)&&findstate.equals("5,6")) {
      Meetinginfo.setZhuchiren(user.getId()+"");
    }
    List<Map<String, Object>> list = imd.Bystatelist(Meetinginfo,findstate,userid, pageBean);
    // 利用R工具类制造出符合要求的json格式数据
    ResponseUtil.writeJson(resp, R.ok(0, "查询成功", pageBean.getTotal(), list));
  }
  @Override
  public Meetinginfo getModel() {
    // 将获取到时间String类型转换成date类型
    ConvertUtils.register(new MyDateConverter(), Date.class);
    return Meetinginfo;
  }
}

3.案例展示

到这里我的分享就结束了,欢迎到评论区探讨交流!!

如果觉得有用的话还请点个赞吧 ♥  ♥

相关文章
|
6月前
|
存储 JavaScript 前端开发
会议OA项目之会议发布(详解)
会议OA项目之会议发布(详解)
52 0
|
6天前
|
SQL 开发框架 .NET
OA办公自动化系统设计与实现(论文+源码)_kaic
OA办公自动化系统设计与实现(论文+源码)_kaic
|
6天前
|
NoSQL 前端开发 Java
基于springboot实现OA办公管理系统
基于springboot实现OA办公管理系统
基于springboot实现OA办公管理系统
|
6天前
|
SQL 存储 JavaScript
Layui之OA会议增删改查
Layui之OA会议增删改查
39 0
|
5月前
|
开发框架 JavaScript 前端开发
J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
33 0
|
5月前
会议OA项目-其它页面->自定义组件应用,其它界面的布局
会议OA项目-其它页面->自定义组件应用,其它界面的布局
26 0
|
5月前
|
容器
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
37 0
|
5月前
|
JSON 小程序 前端开发
小程序之自定义组件 结合案例(会议OA的会议/投票管理及个人中心的搭建)详解 (4)
小程序之自定义组件 结合案例(会议OA的会议/投票管理及个人中心的搭建)详解 (4)
|
5月前
|
JSON 小程序 前端开发
小程序之实例会议OA的首页 (3)
小程序之实例会议OA的首页 (3)
|
5月前
|
BI 数据安全/隐私保护 UED
以产品经理的角度去讲解原型图---会议OA项目
以产品经理的角度去讲解原型图---会议OA项目