目录
一、前言
1.导读
二、功能实现
1.功能介绍及分析
2.功能实现
2.1.dao层
2.2.jsp页面
2.3.web层
3.案例展示
一、前言
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 {@Overridepublic 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或者POSTpage : true, //是否分页where : {//设定异步数据接口的额外参数,任意设'methodName' : 'BystateList','title' : $('#title').val(),'state' : 4,},request : { //自定义分页请求参数名pageName : 'page', //页码的参数名称,默认:pagelimitName : '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 {// 初始化PageBeanPageBean pageBean = new PageBean();pageBean.setRequest(req);// 获取当前登陆的用户idHttpSession 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));}@Overridepublic Meetinginfo getModel() {// 将获取到时间String类型转换成date类型ConvertUtils.register(new MyDateConverter(), Date.class);return Meetinginfo;}}
3.案例展示
到这里我的分享就结束了,欢迎到评论区探讨交流!!
如果觉得有用的话还请点个赞吧 ♥ ♥