• 会议OA项目(查询&是否参会&反馈详情)


                                                                         文章目录

    一、SQL编写

    1、会议通知查询SQL

    2、某会议的反馈详情SQL

    二、会议通知后台代码实现

    公共页面: header.jsp

    实体类MeetingFeedBack 

    web层dao层 

    MeetingFeedBackDao 

     MeetingFeedBackAction

     配置xml--mvc.xml

    页面运行效果

    addFeedBack.jsp

     addFeedBack.js

     web层dao层 

    MeetingFeedBackDao--弹框的会议反馈功能

    MeetingFeedBackAction--弹框的会议反馈功能

    页面运行测试一下 

     三、我的会议查看反馈详情

    myMeeting.jsp--我的会议界面反馈详情弹框

    myMeeting.js

    MeetingFeedBackDao

    MeetingFeedBackAction


    本期任务会议通知--查询并选择是否参会,我的会议--反馈不参加会议详情功能⬇⬇ 

    一、SQL编写

    1、会议通知查询SQL

    假设登录t_oa_user表中的张q账号,就要查出凡是张q是参与者、列席者、主持人中的其中一员,那么都要查询出来

    查询条件:登录用户的id

    分析涉及表有:会议信息表:t_oa_meeting_info

    会议信息反馈表: t_oa_meeting_feedback

    1.查询出带张强 id为2的会议信息

     select * from t_oa_meeting_info where FIND_IN_SET(2,CONCAT(canyuze,',',liexize,',',zhuchiren))  and state=4

    2.不管会议是否得到反馈,都要查询出来,所以选用外连接,以会议信息表为主 

    反馈:-1未读 1参加会议 2不参加 

    select
    IFNULL(f.result,-1) result,t1.*
    from
    (select * from t_oa_meeting_info where FIND_IN_SET(2,CONCAT(
    canyuze,',',liexize,',',zhuchiren))and state=4) t1 
    left join t_oa_meeting_feedback f on t1.id=f.meetingId and f.personId=2 ORDER BY result;

     2、某会议的反馈详情SQL

    查询条件:会议的id

    最终的查询结果,希望实现如图显示⬇⬇

     分析涉及表有:用户表:t_oa_user

                              会议反馈表: t_oa_meeting_feedback

                              会议信息表:t_oa_meeting_info

    1、先拿到会议id为12的会议及所有参与人员的姓名

            1.1先拿到所有的参与人员id

            1.2再拿到对应参与人员的姓名

    select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=12))

    2、连接反馈表,拿到对应的反馈情况(未读  参加 不参加)

    外联接,以用户表为主

    select
    t1.name,IFNULL(f.result,-1) result
    from
    (select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=12))) t1 left join t_oa_meeting_feedback f on t1.id=f.personId and f.meetingId=12

     

    3、根据反馈情况进行分组 

    select
    t.result,GROUP_CONCAT(t.name) names
    from
    (select
    t1.name,IFNULL(f.result,-1) result
    from
    (select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=12))) t1 left join t_oa_meeting_feedback f on t1.id=f.personId and f.meetingId=12) t
    GROUP BY t.result

    二、会议通知后台代码实现

    公共页面: header.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. html>
    4. <link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css">
    5. <script src="${pageContext.request.contextPath }/static/js/layui/layui.js">script>
    6. <base href="${pageContext.request.contextPath }/"/>
    7. <script src="${pageContext.request.contextPath }/static/js/layui/config.js">script>
    8. <input id="ctx" value="${pageContext.request.contextPath }" type="hidden"/>
    9. <title>小坤工作室title>

    实体类MeetingFeedBack 

    1. package com.zking.entity;
    2. import java.io.Serializable;
    3. /**
    4. * t_oa_meeting_feedback
    5. * 对应会议反馈表
    6. *
    7. */
    8. public class MeetingFeedBack implements Serializable {
    9. private String id;
    10. private Long meetingId;
    11. private Integer personType;
    12. private Long personId;
    13. private Integer result;
    14. private String reason;
    15. // 会议标题
    16. private String title;
    17. public String getTitle() {
    18. return title;
    19. }
    20. public void setTitle(String title) {
    21. this.title = title;
    22. }
    23. public String getId() {
    24. return id;
    25. }
    26. public void setId(String id) {
    27. this.id = id;
    28. }
    29. public Long getMeetingId() {
    30. return meetingId;
    31. }
    32. public void setMeetingId(Long meetingId) {
    33. this.meetingId = meetingId;
    34. }
    35. public Integer getPersonType() {
    36. return personType;
    37. }
    38. public void setPersonType(Integer personType) {
    39. this.personType = personType;
    40. }
    41. public Long getPersonId() {
    42. return personId;
    43. }
    44. public void setPersonId(Long personId) {
    45. this.personId = personId;
    46. }
    47. public Integer getResult() {
    48. return result;
    49. }
    50. public void setResult(Integer result) {
    51. this.result = result;
    52. }
    53. public String getReason() {
    54. return reason;
    55. }
    56. public void setReason(String reason) {
    57. this.reason = reason;
    58. }
    59. public MeetingFeedBack() {
    60. super();
    61. // TODO Auto-generated constructor stub
    62. }
    63. @Override
    64. public String toString() {
    65. return "MeetingFeedBack [id=" + id + ", meetingId=" + meetingId + ", personType=" + personType + ", personId="
    66. + personId + ", result=" + result + ", reason=" + reason + "]";
    67. }
    68. }

    web层dao层 

    MeetingFeedBackDao 

    1. package com.zking.dao;
    2. import java.sql.SQLException;
    3. import java.util.List;
    4. import java.util.Map;
    5. import com.zking.entity.MeetingFeedBack;
    6. import com.zking.util.BaseDao;
    7. import com.zking.util.PageBean;
    8. public class MeetingFeedBackDao extends BaseDao{
    9. //会议通知查询
    10. public List> queryMeetingFeedBackByUserId(MeetingFeedBack back, PageBean pageBean)
    11. throws SQLException, InstantiationException, IllegalAccessException {
    12. String sql="SELECT\r\n" +
    13. " IFNULL(f.result,-1) result,t1.*\r\n" +
    14. " FROM\r\n" +
    15. " (SELECT * from t_oa_meeting_info where FIND_IN_SET("+back.getPersonId()+",CONCAT(canyuze,',',liexize,',',zhuchiren)) and state=4) t1\r\n" +
    16. " LEFT JOIN t_oa_meeting_feedback f on t1.id=f.meetingId\r\n" +
    17. " and f.personId="+back.getPersonId()+"\r\n" +
    18. " ORDER BY result";
    19. return super.executeQuery(sql, pageBean);
    20. }
    21. //back.getPersonId()
    22. }

     MeetingFeedBackAction

    1. package com.zking.web;
    2. import java.util.List;
    3. import java.util.Map;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import com.zking.dao.MeetingFeedBackDao;
    7. import com.zking.entity.MeetingFeedBack;
    8. import com.zking.framework.ActionSupport;
    9. import com.zking.framework.ModelDriver;
    10. import com.zking.util.PageBean;
    11. import com.zking.util.R;
    12. import com.zking.util.ResponseUtil;
    13. public class MeetingFeedBackAction extends ActionSupport implements ModelDriver{
    14. private MeetingFeedBack back=new MeetingFeedBack();
    15. private MeetingFeedBackDao backDao=new MeetingFeedBackDao();
    16. @Override
    17. public MeetingFeedBack getModel() {
    18. return back;
    19. }
    20. // 会议通知查询
    21. public String queryMeetingFeedBackByUserId(HttpServletRequest req, HttpServletResponse resp) {
    22. try {
    23. PageBean pageBean=new PageBean();
    24. pageBean.setRequest(req);
    25. List> infos = backDao.queryMeetingFeedBackByUserId(back, pageBean);
    26. // 注意:layui中的数据表格的格式
    27. ResponseUtil.writeJson(resp, R.ok(0, "会议通知数据查询成功",pageBean.getTotal(),infos));
    28. } catch (Exception e) {
    29. e.printStackTrace();
    30. try {
    31. ResponseUtil.writeJson(resp, R.error(0, "会议通知数据查询失败"));
    32. } catch (Exception e2) {
    33. e2.printStackTrace();
    34. }
    35. }
    36. return null;
    37. }
    38. }

     配置xml--mvc.xml

    1. <config>
    2. <action path="/user" type="com.zking.web.UserAction">
    3. action>
    4. <action path="/permission" type="com.zking.web.PermissionAction">
    5. action>
    6. <action path="/info" type="com.zking.web.MeetingInfoAction">
    7. action>
    8. <action path="/audit" type="com.zking.web.MeetingAuditAction">
    9. action>
    10. <action path="/feedBack" type="com.zking.web.MeetingFeedBackAction">
    11. action>
    12. config>

    页面运行效果

     当我点击是否参会时,应该要弹出一个界面⬇⬇⬇

     接下来我们完成这个弹框界面的会议反馈功能

    addFeedBack.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@include file="/common/header.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/addFeedBack.js">script>
    9. head>
    10. <style>
    11. body{
    12. margin:5px;
    13. }
    14. style>
    15. <body>
    16. <div style="padding:10px;">
    17. <form class="layui-form layui-form-pane" lay-filter="back">
    18. <input type="hidden" name="meetingId" value="${param.id }"/>
    19. <input type="hidden" name="personId" value="${sessionScope.user.id }"/>
    20. <div class="layui-form-item">
    21. <label class="layui-form-label">人员类型label>
    22. <div class="layui-input-block">
    23. <select id="personType" name="personType">
    24. <option value="">请选择人员类型option>
    25. <option value="1">参会option>
    26. <option value="2">列席option>
    27. select>
    28. div>
    29. div>
    30. <div class="layui-form-item">
    31. <label class="layui-form-label">反馈结果label>
    32. <div class="layui-input-block">
    33. <select id="result" name="result">
    34. <option value="">请选择反馈结果option>
    35. <option value="1">参加option>
    36. <option value="2">不参加option>
    37. select>
    38. div>
    39. div>
    40. <div class="layui-form-item layui-form-text">
    41. <label class="layui-form-label">不参与会议的原因label>
    42. <div class="layui-input-block">
    43. <textarea placeholder="请输入内容" name="reason" class="layui-textarea">textarea>
    44. div>
    45. div>
    46. form>
    47. div>
    48. body>
    49. html>

     addFeedBack.js

    1. let form,$;
    2. layui.use(['form','jquery'],function(){
    3. form=layui.form,
    4. $=layui.jquery;
    5. });
    6. function getData(){
    7. return form.val('back');
    8. }

     web层dao层 

    MeetingFeedBackDao--弹框的会议反馈功能

    1. // 会议反馈
    2. public int add(MeetingFeedBack back) throws Exception {
    3. String sql="insert into t_oa_meeting_feedback values (?,?,?,?,?,?)";
    4. //前台没有传递id到后台,所以自己生成id
    5. back.setId(UUID.randomUUID().toString().replace("-", ""));
    6. return super.executeUpdate(sql, back, new String [] {"id","meetingId","personType","personId","result","reason"});
    7. }

    MeetingFeedBackAction--弹框的会议反馈功能

    1. //会议反馈
    2. public String add(HttpServletRequest req, HttpServletResponse resp) {
    3. try {
    4. // rs是sql语句执行的影响行数
    5. int rs = backDao.add(back);
    6. if(rs>0) {
    7. ResponseUtil.writeJson(resp, R.ok(200, "会议反馈信息成功"));
    8. }else {
    9. ResponseUtil.writeJson(resp, R.error(0, "会议反馈信息失败"));
    10. }
    11. } catch (Exception e) {
    12. e.printStackTrace();
    13. try {
    14. ResponseUtil.writeJson(resp, R.error(0, "会议反馈信息失败"));
    15. } catch (Exception e2) {
    16. e2.printStackTrace();
    17. }
    18. }
    19. return null;
    20. }

    页面运行测试一下 :

    反馈表中reason数据已更改 

     

     三、我的会议查看反馈详情

    myMeeting.jsp--我的会议界面反馈详情弹框

    1. <div id="feedback" style="display:none;padding:15px;">
    2. <fieldset class="layui-elem-field layui-field-title">
    3. <legend>参会人员legend>
    4. fieldset>
    5. <blockquote class="layui-elem-quote" id="meeting_ok">blockquote>
    6. <fieldset class="layui-elem-field layui-field-title">
    7. <legend>缺席人员legend>
    8. fieldset>
    9. <blockquote class="layui-elem-quote" id="meeting_no">blockquote>
    10. <fieldset class="layui-elem-field layui-field-title">
    11. <legend>未读人员legend>
    12. fieldset>
    13. <blockquote class="layui-elem-quote" id="meeting_noread">blockquote>
    14. div>

     myMeeting.js

    1. //打开查看本会议的反馈详情
    2. function openLayerFeedBack(id){
    3. $.getJSON('feedBack.action',{
    4. methodName:'queryMeetingBackByMeetingId',
    5. meetingId:id
    6. },function(data){
    7. $('#meeting_ok').html("");
    8. $('#meeting_no').html("");
    9. $('#meeting_noread').html("");
    10. if(data.success){
    11. console.log(data.data);
    12. $.each(data.data,function(i,e){
    13. if(e.result==1)
    14. $('#meeting_ok').html(e.names);
    15. else if(e.result==2)
    16. $('#meeting_no').html(e.names);
    17. else
    18. $('#meeting_noread').html(e.names);
    19. });
    20. //弹出对话框
    21. layer.open({
    22. type: 1, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    23. title:'反馈详情',
    24. area: ['426px', '420px'], //宽高
    25. skin: 'layui-layer-rim', //样式类名
    26. content: $('#feedback'), //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同
    27. btn:['关闭'],
    28. yes:function(index,layero){
    29. layer.closeAll();
    30. }
    31. });
    32. }
    33. });
    34. }

    MeetingFeedBackDao

    1. // 会议反馈详情
    2. public List> queryMeetingBackByMeetingId(MeetingFeedBack back, PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException {
    3. String sql="select \r\n" +
    4. " t.result,GROUP_CONCAT(t.name) names\r\n" +
    5. " from\r\n" +
    6. " (select \r\n" +
    7. " t1.name,IFNULL(f.result,-1) result\r\n" +
    8. " from\r\n" +
    9. " (SELECT * from t_oa_user where FIND_IN_SET(id, (SELECT CONCAT(canyuze,',',liexize,',',zhuchiren) from\r\n" +
    10. " t_oa_meeting_info \r\n" +
    11. " where id="+back.getMeetingId()+"))) t1\r\n" +
    12. " left join t_oa_meeting_feedback f on t1.id=f.personId and f.meetingId="+back.getMeetingId()+") t\r\n" +
    13. " GROUP BY t.result";
    14. return super.executeQuery(sql, pageBean);
    15. }

     MeetingFeedBackAction

    1. //会议反馈详情
    2. public String queryMeetingBackByMeetingId(HttpServletRequest req, HttpServletResponse resp) {
    3. try {
    4. PageBean pageBean=new PageBean();
    5. pageBean.setRequest(req);
    6. List> lst = backDao.queryMeetingBackByMeetingId(back, pageBean);
    7. // 注意:layui中的数据表格的格式
    8. ResponseUtil.writeJson(resp, R.ok(0, "会议反馈详情数据查询成功",pageBean.getTotal(),lst));
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. try {
    12. ResponseUtil.writeJson(resp, R.error(0, "会议反馈详情数据查询失败"));
    13. } catch (Exception e2) {
    14. e2.printStackTrace();
    15. }
    16. }
    17. return null;
    18. }

    登录张三的在t_oa_user中的账号并查看 

     好了,差不蛮多,拜拜~~~

    对了对了,还有一张图

     

     

  • 相关阅读:
    quarkus实战之八:profile
    经典同步问题
    在k8s中用label控制Pod部署到指定的node上
    k8s牛客面经篇
    数据结构:顺序表
    浏览器缓存机制及其分类
    《微服务实战》 第十八章 Redis查看配置文件和数据类型
    IO流:java中解码和编码出现乱码说明及代码实现
    Bash sleep随机时间
    防火墙双机热备
  • 原文地址:https://blog.csdn.net/weixin_67450855/article/details/126039622