一、前言
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.案例展示
到这里我的分享就结束了,欢迎到评论区探讨交流!!
如果觉得有用的话还请点个赞吧 ♥ ♥