• 会议OA(待开会议&所有会议)


    目录

    待开会议:

    所有会议 

    ​编辑 

    待开和所有会议功能实现

    前台


    哈喽大家好~~我来啦~~今天给大家分享我们会议0A的最后一期啦!!!

    是我们会议的待开会议和我们的所有会议!!!

    待开会议:

    与我的会议的区别在于,待开会议匹配参与者、列席者、主持人个数据库列段
    接下来我们看一下sql语句!!!!

    查询包含三个列段中包含六的信息:

    select CONCAT(canyuze,',',liexize,',',zhuchiren), a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren
    ,b.name zhuchirenname,
    a.location,
    DATE_FORMAT(a.startTime,'%Y-%m-%d %h-%m-%s') startTime,
    DATE_FORMAT(a.endTime,'%Y-%m-%d %h-%m-%s') endTime,
    a.state,
    (
        case a.state
        when 0 then '取消会议'
        when 1 then '新建'
        when 2 then '待审核'
        when 3 then '驳回'
        when 4 then '待开'
        when 4 then '进行中'
        when 6 then '开启投票'
        when 7 then '结束会议'
        else '其他' end
        
    ) meetingstate,
    a.seatPic,a.remark,a.auditor,
    c.name auditorname 
    from t_oa_meeting_info a
    inner join t_oa_user b on a.zhuchiren = b.id
    left join t_oa_user c on a.auditor = c.id
    where 1=1 and state=4 and FIND_IN_SET(6,CONCAT(canyuze,',',liexize,',',zhuchiren))

     

    运行结果:

    所有会议 

    与待开会议的区别在于,待开会议匹配参与者、列席者、主持人,审批人四个数据库列段

    当前登录账号,只要是某会议的参与者、列席者、主持人、审批人中的一员,那么必须查出来。
    sql语句:

    select CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',IFNULL(a.auditor,-1)), a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren
    ,b.name zhuchirenname,
    a.location,
    DATE_FORMAT(a.startTime,'%Y-%m-%d %h-%m-%s') startTime,
    DATE_FORMAT(a.endTime,'%Y-%m-%d %h-%m-%s') endTime,
    a.state,
    (
        case a.state
        when 0 then '取消会议'
        when 1 then '新建'
        when 2 then '待审核'
        when 3 then '驳回'
        when 4 then '待开'
        when 4 then '进行中'
        when 6 then '开启投票'
        when 7 then '结束会议'
        else '其他' end
        
    ) meetingstate,
    a.seatPic,a.remark,a.auditor,
    c.name auditorname 
    from t_oa_meeting_info a
    inner join t_oa_user b on a.zhuchiren = b.id
    left join t_oa_user c on a.auditor = c.id
    where 1=1 
    and FIND_IN_SET(6,CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',IFNULL(a.auditor,-1)))
     

    运行结果: 

     

    待开和所有会议功能实现

    先带大家看看我们的后台代码

    MeetingInfodao: 

    1. public List<Map<String, Object>> queryMeetingInfoByState(MeetingInfo info, PageBean pageBean) throws Exception{
    2. String sql = "select CONCAT(canyuze,',',liexize,',',zhuchiren), a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" +
    3. " ,b.name zhuchirenname,\r\n" +
    4. " a.location,\r\n" +
    5. " DATE_FORMAT(a.startTime,'%Y-%m-%d %h-%m-%s') startTime,\r\n" +
    6. " DATE_FORMAT(a.endTime,'%Y-%m-%d %h-%m-%s') endTime,\r\n" +
    7. " a.state,\r\n" +
    8. " (\r\n" +
    9. " case a.state\r\n" +
    10. " when 0 then '取消会议'\r\n" +
    11. " when 1 then '新建'\r\n" +
    12. " when 2 then '待审核'\r\n" +
    13. " when 3 then '驳回'\r\n" +
    14. " when 4 then '待开'\r\n" +
    15. " when 4 then '进行中'\r\n" +
    16. " when 6 then '开启投票'\r\n" +
    17. " when 7 then '结束会议'\r\n" +
    18. " else '其他' end\r\n" +
    19. " \r\n" +
    20. " ) meetingstate,\r\n" +
    21. " a.seatPic,a.remark,a.auditor,\r\n" +
    22. " c.name auditorname \r\n" +
    23. " from t_oa_meeting_info a\r\n" +
    24. " inner join t_oa_user b on a.zhuchiren = b.id\r\n" +
    25. " left join t_oa_user c on a.auditor = c.id\r\n" +
    26. " where 1=1 and state=4 and FIND_IN_SET("+info.getZhuchiren()+",CONCAT(canyuze,',',liexize,',',zhuchiren))";
    27. return super.executeQuery(sql, pageBean);
    28. }

    MeetingInfoAction:

    1. package com.zking.web;
    2. import java.util.Date;
    3. import java.util.List;
    4. import java.util.Map;
    5. import java.util.UUID;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import org.apache.commons.beanutils.ConvertUtils;
    9. import com.zking.dao.MeetingInfoDao;
    10. import com.zking.entity.MeetingInfo;
    11. import com.zking.framework.ActionSupport;
    12. import com.zking.framework.ModelDriver;
    13. import com.zking.util.Base64ImageUtils;
    14. import com.zking.util.MyDateConverter;
    15. import com.zking.util.PageBean;
    16. import com.zking.util.PropertiesUtil;
    17. import com.zking.util.R;
    18. import com.zking.util.ResponseUtil;
    19. public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo>{
    20. private MeetingInfo info = new MeetingInfo();
    21. private MeetingInfoDao meetingInfoDao = new MeetingInfoDao();
    22. @Override
    23. public MeetingInfo getModel() {
    24. //方式二:
    25. ConvertUtils.register(new MyDateConverter(),Date.class);
    26. return info;
    27. }
    28. public String updateSeatPicById(HttpServletRequest req, HttpServletResponse resp) {
    29. /*
    30. * 1.接收前端页面传递到后台的图片对应的字符串
    31. * 2.借助工具类将字符串生成一个图片,保存到配置文件所配置的路径下
    32. * 3.添加服务器硬盘与请求地址的映射,即可访问
    33. * 4.将请求地址保存到数据库中
    34. */
    35. try {
    36. // E:/temp/images/T280/abcdefg.png
    37. // 获取图片的存放地址 dirPath=E:/temp/images/T280/
    38. String dirPath = PropertiesUtil.getValue("dirPath");
    39. // 获取浏览器请求路径,为了后续保存到数据库 serverPath=/upload/paizuo/
    40. String serverPath = PropertiesUtil.getValue("serverPath");
    41. // 随机生成一个图片名称
    42. String fileName = UUID.randomUUID().toString().replaceAll("-", "")+".png";
    43. info.getSeatPic();//图片字符串
    44. Base64ImageUtils.GenerateImage(info.getSeatPic().replaceAll("data:image/png;base64,", ""), dirPath+fileName);
    45. // 将seatPic中内容修改为 请求地址
    46. info.setSeatPic(serverPath+fileName);
    47. // 修改会议排座 数据库图片 对应的数据库列段
    48. int rs = meetingInfoDao.updateSeatPicById(info);
    49. if (rs > 0) {
    50. ResponseUtil.writeJson(resp, R.ok(200, "会议排座成功"));
    51. }else {
    52. ResponseUtil.writeJson(resp, R.error(0, "会议排座失败"));
    53. }
    54. } catch (Exception e) {
    55. e.printStackTrace();
    56. try {
    57. ResponseUtil.writeJson(resp, R.error(0, "会议排座失败"));
    58. } catch (Exception e1) {
    59. e1.printStackTrace();
    60. }
    61. }
    62. return null;
    63. }
    64. // 会议发布
    65. public String add(HttpServletRequest req, HttpServletResponse resp) {
    66. try {
    67. int rs = meetingInfoDao.add(info);
    68. if (rs > 0) {
    69. ResponseUtil.writeJson(resp, R.ok(200, "会议发布成功"));
    70. }else {
    71. ResponseUtil.writeJson(resp, R.error(0, "会议发布失败"));
    72. }
    73. } catch (Exception e) {
    74. e.printStackTrace();
    75. try {
    76. ResponseUtil.writeJson(resp, R.error(0, "会议发布失败"));
    77. } catch (Exception e1) {
    78. e1.printStackTrace();
    79. }
    80. }
    81. return null;
    82. }
    83. // 我的审批
    84. public String myAudit(HttpServletRequest req,HttpServletResponse resp) {
    85. try {
    86. PageBean pageBean = new PageBean();
    87. pageBean.setRequest(req);
    88. List<Map<String, Object>> lst = meetingInfoDao.myAudit(info, pageBean);
    89. //注意:layui中的数据的格式
    90. ResponseUtil.writeJson(resp, R.ok(0, "我的会议数据查询成功",pageBean.getTotal(),lst));
    91. } catch (Exception e) {
    92. e.printStackTrace();
    93. try {
    94. ResponseUtil.writeJson(resp,R.error(0, "我的会议数据查询失败"));
    95. } catch (Exception e1) {
    96. e1.printStackTrace();
    97. }
    98. }
    99. return null;
    100. }
    101. // 所有会议
    102. public String allInfos(HttpServletRequest req,HttpServletResponse resp) {
    103. try {
    104. PageBean pageBean = new PageBean();
    105. pageBean.setRequest(req);
    106. List<Map<String, Object>> lst = meetingInfoDao.allInfos(info, pageBean);
    107. //注意:layui中的数据的格式
    108. ResponseUtil.writeJson(resp, R.ok(0, "所有会议数据查询成功",pageBean.getTotal(),lst));
    109. } catch (Exception e) {
    110. e.printStackTrace();
    111. try {
    112. ResponseUtil.writeJson(resp,R.error(0, "所有会议数据查询失败"));
    113. } catch (Exception e1) {
    114. e1.printStackTrace();
    115. }
    116. }
    117. return null;
    118. }
    119. // 待开会议
    120. public String queryMeetingInfoByState(HttpServletRequest req,HttpServletResponse resp) {
    121. try {
    122. PageBean pageBean = new PageBean();
    123. pageBean.setRequest(req);
    124. List<Map<String, Object>> lst = meetingInfoDao.queryMeetingInfoByState(info, pageBean);
    125. //注意:layui中的数据的格式
    126. ResponseUtil.writeJson(resp, R.ok(0, "待开会议数据查询成功",pageBean.getTotal(),lst));
    127. } catch (Exception e) {
    128. e.printStackTrace();
    129. try {
    130. ResponseUtil.writeJson(resp,R.error(0, "待开会议数据查询失败"));
    131. } catch (Exception e1) {
    132. e1.printStackTrace();
    133. }
    134. }
    135. return null;
    136. }
    137. // 我的会议
    138. public String myInfos(HttpServletRequest req,HttpServletResponse resp) {
    139. try {
    140. PageBean pageBean = new PageBean();
    141. pageBean.setRequest(req);
    142. List<Map<String, Object>> lst = meetingInfoDao.myInfos(info, pageBean);
    143. //注意:layui中的数据的格式
    144. ResponseUtil.writeJson(resp, R.ok(0, "我的会议数据查询成功",pageBean.getTotal(),lst));
    145. } catch (Exception e) {
    146. e.printStackTrace();
    147. try {
    148. ResponseUtil.writeJson(resp,R.error(0, "我的会议数据查询失败"));
    149. } catch (Exception e1) {
    150. e1.printStackTrace();
    151. }
    152. }
    153. return null;
    154. }
    155. // 根据会议ID更新会议的审批人(送审)
    156. public String updateAuditorById(HttpServletRequest req, HttpServletResponse resp) {
    157. try {
    158. int rs = meetingInfoDao.updateAuditorById(info);
    159. if (rs > 0) {
    160. ResponseUtil.writeJson(resp, R.ok(200, "会议审批成功"));
    161. }else {
    162. ResponseUtil.writeJson(resp, R.error(0, "会议审批失败"));
    163. }
    164. } catch (Exception e) {
    165. e.printStackTrace();
    166. try {
    167. ResponseUtil.writeJson(resp, R.error(0, "会议审批失败"));
    168. } catch (Exception e1) {
    169. e1.printStackTrace();
    170. }
    171. }
    172. return null;
    173. }
    174. }

     

    前台

    Meetingwaiting.jsp:

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@include file="/common/head.jsp"%>
    4. html>
    5. <html>
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    8. <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/meeting/meetingWaiting.js">script>
    9. head>
    10. <style>
    11. body{
    12. margin:15px;
    13. }
    14. .layui-table-cell {height: inherit;}
    15. .layui-layer-page .layui-layer-content { overflow: visible !important;}
    16. style>
    17. <body>
    18. <div class="layui-form-item">
    19. <div class="layui-inline">
    20. <label class="layui-form-label">会议标题:label>
    21. <div class="layui-input-inline">
    22. <input type="hidden" id="userid" value="${sessionScope.user.id }"/>
    23. <input type="text" id="title" autocomplete="off"
    24. class="layui-input">
    25. div>
    26. div>
    27. <div class="layui-inline">
    28. <button id="btn_meeting_search" class="layui-btn layui-btn-normal">
    29. <i class="layui-icon">i> 查询
    30. button>
    31. div>
    32. div>
    33. <table style="margin-top: -15px;" id="tb_meeting" lay-filter="tb_meeting">table>
    34. body>
    35. html>

    MeetingWaiting.js

     

    1. let layer,form,table,$;
    2. var row;
    3. layui.use(['layer','form','table'],function(){
    4. layer=layui.layer,form=layui.form,table=layui.table,$=layui.jquery;
    5. //初始化会议列表
    6. initMeeting();
    7. //绑定查询按钮的点击事件
    8. $('#btn_meeting_search').click(function(){
    9. query();
    10. });
    11. });
    12. //1.初始化会议列表
    13. function initMeeting(){
    14. table.render({ //执行渲染
    15. elem: '#tb_meeting', //指定原始表格元素选择器(推荐id选择器)
    16. height: 400, //自定义高度
    17. loading: false, //是否显示加载条(默认 true)
    18. cols: [[ //设置表头
    19. {field: 'title', title: '会议标题', width: 180},
    20. {field: 'location', title: '会议地点', width: 120},
    21. {field: 'startTime', title: '开始时间', width: 180},
    22. {field: 'endTime', title: '结束时间', width: 180},
    23. {field: 'meetingstate', title: '会议状态', width: 90},
    24. {field: 'zhuchirenname', title: '主持人', width: 120},
    25. //{field: '', title: '操作', width: 260, toolbar: '#tbMeeting'}
    26. ]]
    27. });
    28. }
    29. //2.待开会议
    30. function query(){
    31. table.reload('tb_meeting', {
    32. url: 'info.action', //请求地址
    33. method: 'POST', //请求方式,GET或者POST
    34. loading: true, //是否显示加载条(默认 true)
    35. page: true, //是否分页
    36. where: { //设定异步数据接口的额外参数,任意设
    37. 'methodName':'queryMeetingInfoByState',
    38. 'title':$('#title').val(),
    39. 'zhuchiren':$('#userid').val(),
    40. 'state':4
    41. },
    42. request: { //自定义分页请求参数名
    43. pageName: 'page', //页码的参数名称,默认:page
    44. limitName: 'rows' //每页数据量的参数名,默认:limit
    45. },
    46. done: function (res, curr, count) {
    47. //查询完成的回调函数
    48. }
    49. });
    50. }

    运行结果:

     测试

  • 相关阅读:
    HCIA --- VLAN实验配置
    Swift async/await 并发中如何将任务组(TaskGroup)转换为异步序列(AsyncSequence)
    [ Linux ] 复习C文件IO相关操作及认识文件相关系统调用接口
    【设计模式】备忘录模式
    选择排序超详细讲解C语言
    同花顺_代码解析_技术指标_O
    智慧城管系列-0-项目实战-资料
    从 QWebEnginePage 打印文档
    记一次beego通过go get命令后找不到bee.exe的坑
    [Python学习笔记]Requests性能优化之Session
  • 原文地址:https://blog.csdn.net/weixin_63544775/article/details/126087147