会议OA之会议通知查询是否参会反馈详情

目录

  • 一、会议通知查询
    • 1.1SQL语句编写
    • 1.2 后台编写
    • 1.3 前台
  • 二、会议反馈详情
    • 2.1sql编写
    • 2.2后台编写

一、会议通知查询

1.1SQL语句编写

完成这个功能的难点主要在于SQL语句的边写
首先我们需要先分析:
下面展示sql语句的编写


--会议通知查询sql
--查询出会议id为2的会议信息
SELECT * from t_oa_meeting_info where FIND_IN_SET(2,CONCAT
(canyuze,liexize,zhuchiren)) and state = 4
--不管会议是否得到反馈,都要查询出来,所以选用外连接,会议信息表为主
SELECTIFNULL(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 personId =2
ORDER BY result

在这里插入图片描述

1.2 后台编写

实体类
下面展示 MeetingFeedBack实体类代码

package com.yzp.entity;import java.io.Serializable;public class MeetingFeedBack implements Serializable {private String id;private Long meetingId;private Integer personType;private Long personId;private Integer result;private String reason;// 会议标题private String title;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getId() {return id;}public void setId(String id) {this.id = id;}public Long getMeetingId() {return meetingId;}public void setMeetingId(Long meetingId) {this.meetingId = meetingId;}public Integer getPersonType() {return personType;}public void setPersonType(Integer personType) {this.personType = personType;}public Long getPersonId() {return personId;}public void setPersonId(Long personId) {this.personId = personId;}public Integer getResult() {return result;}public void setResult(Integer result) {this.result = result;}public String getReason() {return reason;}public void setReason(String reason) {this.reason = reason;}public MeetingFeedBack() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "MeetingFeedBack [id=" + id + ", meetingId=" + meetingId + ", personType=" + personType + ", personId="+ personId + ", result=" + result + ", reason=" + reason + "]";}}

下面展示 dao层代码

//	链表查询返回的是list
//	会议通知查询public List> queryMeetingFeedBackByUserId(MeetingFeedBack back,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException {String sql="select\r\n" + "	IFNULL(t2.result,-1) result,t1.*\r\n" + " from\r\n" + " (select * from t_oa_meeting_info where FIND_IN_SET("+back.getPersonId()+",CONCAT(canyuze,',',liexize,',',zhuchiren)) and state=4) t1\r\n" + " left join t_oa_meeting_feedback t2 on t1.id=t2.meetingId\r\n" + " and t2.personId="+back.getPersonId()+"\r\n" + " order by result ";return super.executeQuery(sql, pageBean);}

下面展示 web代码

//	会议通知查询public String queryMeetingFeedBackByUserId(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List> infos = backDao.queryMeetingFeedBackByUserId(back, pageBean);	
//			注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "会议通知数据查询成功", pageBean.getTotal(), infos));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "会议通知数据查询失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}

下面展示 xml配置


1.3 前台

下面展示 jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@include file="/common/header.jsp"%>








下面展示 js代码


let layer,table,$,form,test;
var row;
layui.use(['layer','table','jquery','form','test'],function(){layer=layui.layer,table=layui.table,form=layui.form,test=layui.test,$=layui.jquery;initTable();//查询事件$('#btn_search').click(function(){query();});});//初始化数据表格(我的审批)
function initTable(){table.render({          //执行渲染elem: '#tb',   //指定原始表格元素选择器(推荐id选择器)height: 400,         //自定义高度loading: false,      //是否显示加载条(默认 true)cols: [[             //设置表头{field: 'id', title: '会议编号', width: 90},{field: 'title', title: '会议标题', width: 120},{field: 'location', title: '会议地点', width: 140},{field: 'startTime', title: '开始时间', width: 120,templet:function(d){return test.toDate(new Date(d.startTime));}},{field: 'endTime', title: '结束时间', width: 120,templet:function(d){return test.toDate(new Date(d.endTime));}},//{field: 'meetingState', title: '会议状态', width: 120},/*{field: 'seatPic', title: '会议排座', width: 120,templet: function(d){if(d.seatPic==null || d.seatPic=="")return "尚未排座";elsereturn "";}},*/{field: 'result', title: '反馈状态', width: 120,templet: function(d){if(d.result==1)return "参会";else if(d.result==2)return "缺席";elsereturn "未读";}},{field: '', title: '操作', width: 200,toolbar:'#tbar'},]]});
}//点击查询
function query(){table.reload('tb', {url: $("#ctx").val()+'/feedBack.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'queryMeetingFeedBackByUserId','personId':$('#personId').val(),
'title':$('#title').val(),},  request: {                         //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit},done: function (res, curr, count) {console.log(res);}});//工具条事件table.on('tool(tb)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"row = obj.data; //获得当前行数据var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)console.log(row);if(layEvent === 'edit'){ //是否参会openLayer(row.id);} else {}});
}
function openLayer(id){layer.open({type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title: '会议反馈',                   //对话框标题area: ['660px', '400px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: 'jsp/meeting/addFeedBack.jsp?id='+id,                //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同btn:['会议反馈','关闭'],yes:function(index,layero){//layer.msg('保存');//调用子页面中提供的getData方法,快速获取子页面的form表单数据let data= $(layero).find("iframe")[0].contentWindow.getData();addMeetingFeedBack(data);},btn2:function(){layer.closeAll();}});
}// 对会议通知进行 参会/不参会的反馈
function addMeetingFeedBack(params){params['methodName']="add";console.log(params);$.post($("#ctx").val()+'/feedBack.action',params,function(rs){if(rs.success){layer.closeAll();query();}else{layer.msg(rs.msg,{icon:5},function(){});}},'json');
}

二、会议反馈详情

1、会议反馈详情SQL语句编写
先查询出某条会议所有参与人员(参与者、列席者、主持人)的id(会议信息表中),再连接用户表根据id拿到参与人员的名字。再连接反馈表,拿到对应的反馈情况(未读、参加、不参加),最后根据反馈情况进行分组处理,引用到了函数GROUP_CONCAT
代码片复制

2.1sql编写

下面展示 sql编写


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))) t1left JOIN t_oa_meeting_feedback f on t1.id = f.personId and f.meetingId = 12) t
GROUP BY t.result

在这里插入图片描述

2.2后台编写

下面展示 dao层

//	会议反馈public int add(MeetingFeedBack back) throws Exception {String sql="insert into t_oa_meeting_feedback values(?,?,?,?,?,?)";
//		前面没有id,所以我们随机生成一个id
//		前台没有传递id到后台back.setId(UUID.randomUUID().toString().replaceAll("-", ""));return super.executeUpdate(sql, back, new String[] {"id","meetingId","personType","personId","result","reason"});}

下面展示 web层

//	会议反馈public String add(HttpServletRequest req, HttpServletResponse resp) {try {
//			n是sql语句执行的影响行数int n=backDao.add(back);
//			如果大于0说明可以新增if(n>0) {ResponseUtil.writeJson(resp, R.ok(200, "会议反馈数据新增成功"));}else {ResponseUtil.writeJson(resp, R.ok(0, "会议反馈数据新增失败"));}} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "会议反馈数据新增失败"));} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}return null;}//	反馈详情public String queryMeetingBackByMeetingId(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List> infos = backDao.queryMeetingBackByMeetingId(back, pageBean);	
//			注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "反馈详情数据查询成功", pageBean.getTotal(), infos));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "反馈详情数据查询失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部