目录

一、会议排座插件介绍

需求背景:

1、实现思路:

2.明确了开发会议排座的意义

1.查询出本场会议中的所有参与人员2.需要完成在页面上元素的拖动功能,把对应的参会人员放在指定位置,如:重要的人就放在主位3.将已经画好的会议座位图,保存下来,并且绑定到本次会议数据上去;

1.查找资料

2.分析现有素材的不足

3.修改现有素材的不足

4.分析现有素材,怎么与业务需求进行关联(最重要的一步)

5.content需要传递到后台,并且生成图片,只有这样,我们才能通过代码决定图片存放在哪里

六、开始写我们的会议排座

二、会议参与用户数据初始化

三、会议排座图片生成及展示

1、将已经画好的会议座位图,保存下来,并且绑定到本次会议数据上去;

四、会议送审


一、会议排座插件介绍

会议排座功能意义: 

会议桌我们就没有了,考虑了简单性,我们就去掉了。但在公司里有的项目就会用到项目桌

需求背景:

集团公司的日常管理会议、人事任命会议

1、实现思路:

①、查找资料

做选择,哪一个素材更适合完成需求

②、素材改造

素材的缺陷:

1)样式:座位小方块重叠/太小

2)截图区域大小

3)需要解决滚动条截图的问题

思考:

a、找到js翻页的功能,衔接到当前素材

b、查看素材源码,分析作者是依靠屏幕大小截屏还是html元素定位截屏(优先考虑)

③、代码预演

④、前后台代码整合

⑤、功能微调及实现

⑥、变种需求的完成

2.明确了开发会议排座的意义

思考如何去完成这个功能?

1.查询出本场会议中的所有参与人员
2.需要完成在页面上元素的拖动功能,把对应的参会人员放在指定位置,如:重要的人就放在主位
3.将已经画好的会议座位图,保存下来,并且绑定到本次会议数据上去;

代码的实现顺序是2、1、3

2.页面上元素的拖动功能(特殊的功能)
    出发点:可以自己写、网上会有素材
    流程:先找网上素材,改动素材中的源码,变为自己想要的
    1.找网上素材,多找几个,挑出一个最适合的
    2.分析现有素材的不足
        ①、发现元素重叠,无法判定有几个人参会
        ②、元素块太小看不清
    3.修改现有素材的不足
    4.分析现有素材,怎么与业务需求进行关联(最重要的一步)
        其实需要做的是,查看源代码,分析图片生成的原因/步骤
        下载 按钮是绑定了一个方法,这个主要的方法是downloadFile方法
        downloadFile方法有两个参数:FileName、content,接下就是思考哪个参数与图片有关系
        结论:通过分析downloadFile方法中content参数就代表了那张图片-前端

5.content需要传递到后台,并且生成图片,只有这样,我们才能通过代码决定图片存放在哪里
        ①、怎么传后台-$.post
            $.get(不行的,因为参数太大)    错
        ②、String content 字符串要转换成图片

1.查找资料

1.找网上素材,多找几个,挑出一个最适合的

可以去网上搜索如图所示:

点进去里有div还有HTML代码还有css还有js方法,通过这种方法找到几种案例如图所示:

第一种:

第二种:

第二种可以拖动但它是移到下面去了如图所示:这种就不符合

但第一种的可以:它添加的座位就会被覆盖,不太友好,但可以拖动,所以说我们从网上拿到的素材不一定符合,所以我们要改把改把。

2.分析现有素材的不足

①、发现元素重叠,无法判定有几个人参会
 ②、元素块太小看不清

3.修改现有素材的不足

这个方块的样式取决于谁如图所示:

我们就来改变它的展示形式如图所示: 

最终素材改造如图所示:

我们可以下载一下如图所示:就贴近了我们最上面的那张图了,就是没有桌子

4.分析现有素材,怎么与业务需求进行关联(最重要的一步)

但我们下载的时候它是指定位置,而不能我想下载哪里就下载哪里

其实需要做的是,查看源代码,分析图片生成的原因/步骤

下载 按钮是绑定了一个方法,这个主要的方法是downloadFile方法
        downloadFile方法有两个参数:FileName、content,接下就是思考哪个参数与图片有关系
        结论:通过分析downloadFile方法中content参数就代表了那张图片-前端

5.content需要传递到后台,并且生成图片,只有这样,我们才能通过代码决定图片存放在哪里

"data:image/png;base64,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"

我们数据库里有一个Base64ImageUtils.java代码块,

我们最终要改的效果如图所示:

运行一下:

六、开始写我们的会议排座

当我们点击会议排座的时候是不是要弹出一个页面出来所以我们就新建一个jsp

     seatPic.jsp代码块:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="${pageContext.request.contextPath }/"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="static/js/layui/css/layui.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="static/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="static/js/layui/layui.js"></script>
<script type="text/javascript" src="static/js/plugins/html2canvas/html2canvas.js"></script>
<title>会议座位安排</title>
</head>
<style type="text/css">
* {padding: 0;margin: 0;
}body{width: 100%;height: 100%;/* background: red; */
}.tips {/* position: absolute; */background: pink;display: inline-block;height: 60px;/* width: 60px; */line-height: 60px;text-align: center;margin: 5px;padding: 0 10px;
}.add {position: fixed;right: 10px;top: 10px;display:inline;
}#tu {width: 100%;height: 100%;/* background: lightblue; *//*background: url('u=3318199716,2583790385&fm=26&gp=0.jpg');*/
}
.layui-input{height:30px;
}
</style>
<body id="screen_body"><div id="tu"></div><!-- 下面不要使用layui的表单行内模式,会导致canvas的toDataURL()数据为 data:, --><div class="add"><div style="display:inline-block;"><input id="dan_input" type="text" value="" class="layui-input"></div><div style="display:inline-block;"><button onclick="return addDanMu()" class="layui-btn layui-btn-sm">添加座位</button><input id="jie_input" type="button" class="layui-btn layui-btn-sm" value='下载'></div></div>
</body>
<script type="text/javascript">
var $id = function(id) {return document.getElementById(id);
}
//会议排座拖拽
var dragF = {locked: false,lastObj: undefined,drag: function(obj) {$id(obj).onmousedown = function(e) {var e = e ? e : window.event;if (!window.event) {e.preventDefault();} /* 阻止标注<a href='/site/js-5791-1.html' target='_blank'><u>浏览器</u></a>下拖动a,img的默认事件 */dragF.locked = true;$id(obj).style.position = "absolute";$id(obj).style.zIndex = "100";if (dragF.lastObj && dragF.lastObj != $id(obj)) { /* 多元素拖动需要恢复上次元素状态 */dragF.lastObj.style.zIndex = "1";}dragF.lastObj = $id(obj);var tempX = $id(obj).offsetLeft;var tempY = $id(obj).offsetTop;dragF.x = e.clientX;dragF.y = e.clientY;document.onmousemove = function(e) {var e = e ? e : window.event;if (dragF.locked == false) return false;$id(obj).style.left = tempX + e.clientX - dragF.x + "px";$id(obj).style.top = tempY + e.clientY - dragF.y + "px";if (window.event) {e.returnValue = false;} /* 阻止ie下a,img的默认事件 */}document.onmouseup = function() {dragF.locked = false;}}}
}
</script><script type="text/javascript">
var layer;
layui.use(['layer'],function(){layer=layui.layer;//初始化会议排座:根据会议ID获取参会的所有人员的名字(主持人+参会人+列席人)initMeetingUsers();//绘制会议排座图片$("#jie_input").on("click", function(event) {$('.add').hide();event.preventDefault();html2canvas(document.getElementById("screen_body")).then(function(canvas) {var dataUrl = canvas.toDataURL();console.log(dataUrl);var param = {};param['seatPic'] = dataUrl;param['id'] = '${param.id}';param['methodName']='updateSeatPicById';console.log(param);//此处需要完成会议排座图片上传操作$.post('${pageContext.request.contextPath }/info.action',param,function(rs){if(rs.success){//先得到当前iframe层的索引var index = parent.layer.getFrameIndex(window.name); //再执行关闭parent.layer.close(index); //调用父页面的刷新方法parent.query();}else{layer.msg(rs.msg,{icon:5},function(){});}},'json');});});
});function initMeetingUsers(){//http://localhost:8080/xxx/seatPic.jsp?id=12  -> ${param.id}$.getJSON('${pageContext.request.contextPath }/user.action',{'methodName':'queryUserByMeetingId','meetingId':'${param.id}'},function(rs){console.log(rs);let data=rs.data;$.each(data,function(i,e){$('#dan_input').val(e.name);addDanMu();});});
}//添加会议排座
function addDanMu() {var dan = document.getElementById("dan_input").value;if (dan == "") {alert("请输入弹幕~");return false;} else {document.getElementById("dan_input").value = ""; //清空 弹幕输入框// var br = document.createElement("BR");  // <br />var node = document.createElement("DIV"); // <div>var tipsArr = document.getElementsByClassName('tips');var i;// console.log(parseInt(tipsArr[tipsArr.length-1].id.substr(4))+1);if (tipsArr.length == 0) {i = 1} else {i = parseInt(tipsArr[tipsArr.length - 1].id.substr(4)) + 1;}// var aNode = document.createElement("P");   // <p>node.setAttribute("class", "tips");node.setAttribute("id", "tips" + i);node.setAttribute("onmouseover", "dragF.drag('tips" + i + "');");var textnode = document.createTextNode(dan); // 创建个 文本节点, 将用户输入的弹幕,存入 创建的 元素节点 <p>  中// aNode.appendChild(textnode);node.appendChild(textnode);// document.body.appendChild(br);// document.body.appendChild(node);document.getElementById("tu").appendChild(node);return true;}
}</script>
</html>

我们就要在我们上次我的会议里面js代码继续编写我们的代码:

myMeeting.js代码块:

let layer,$,table;
var row;
layui.use(['jquery', 'layer', 'table'], function(){layer = layui.layer,$ = layui.jquery,table = layui.table;//初始化数据表格initTable();//绑定查询按钮的点击事件$('#btn_search').click(function(){query();});});//1.初始化数据表格
function initTable(){table.render({           //执行渲染elem: '#tb',         //指定原始表格元素选择器(推荐id选择器)
//        url: 'user.action?methodName=list',     //请求地址height: 340,         //自定义高度loading: false,      //是否显示加载条(默认 true)cols: [[             //设置表头{field: 'id', title: '会议编号', width: 120},{field: 'title', title: '会议标题', width: 120},{field: 'location', title: '会议地点', width: 140},{field: 'startTime', title: '开始时间', width: 220},{field: 'endTime', title: '结束时间', width: 120},{field: 'meetingstate', title: '会议状态', width: 120},{field: 'seatPic', title: '会议排座', width: 140,templet: function(d){console.log(d);//得到当前行数据,并拼接成自定义模板return '<img src="'+d.seatPic+'">'}},{field: 'auditor', title: '审批人', width: 140},{field: '', title: '操作', width: 220,toolbar:'#tbar'},]]});//在页面中的<table>中必须配置lay-filter="tb_goods"属性才能触发属性!!!table.on('tool(tb)', function (obj) {row = obj.data;if (obj.event == "seat") {open(row.id);}else if(obj.event == "send"){layer.msg("送审");}else if(obj.event == "del"){layer.msg("取消会议");
//          把我们的会议状态改为0}else if(obj.event == "back"){layer.msg("反馈详细");
//          把我们的会议状态改为0}else{}});}
//2.点击查询
function query(){
//  console.log($("#ctx").val());table.reload('tb', {url: 'info.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'myInfos','title':$('#title').val(),'zhuchiren':$('#zhuchiren').val()},  request: {                         //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit}});
}//打开会议排座对话框
function open(id){layer.open({type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title: '会议排座',                   //对话框标题area: ['460px', '340px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: $("#ctx").val()+'/jsp/meeting/seatPic.jsp?id='+id,                //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同});
}

运行结果就出来了:

我们现在希望我查询了那些人就绑定上去,现在我们这个是手动添加上去的吧

二、会议参与用户数据初始化

1.将 会议排座3.html 转变成jsp页面,本质上就是将某一条会议数据的所有参与人员查询出来
    点击会议排座应该要默认初始化参会人员

-- 会议排座用户查询
select * from t_oa_meeting_info where id=6
-- 最终希望查询出这样的结果
select * from t_oa_user where id in (1,2,3,4,5)
-- 这行代码就等价于上面的   1,2,3,4,5
select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=6
-- 实际结果
select * from t_oa_user where id in ('1,2,3,4,5')select * from t_oa_user where id in (select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=6)-- FIND_IN_SET
-- 第一个参数:数据库列段
-- 第二个参数:是列段的条件
select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id=6))

最终想要的结果如图所示:

我们就要去UserAction里面写这个方法:

UserAction.java代码块:

package com.zking.web;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.zking.dao.UserDao;
import com.zking.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;public class UserAction extends ActionSupport implements ModelDriver<User>{private User user = new User();private UserDao userDao = new UserDao();public String login(HttpServletRequest req, HttpServletResponse resp) {try {
//          调用我们的login方法User u = userDao.login(user);
//          通过账户名密码查到了用户记录if(u!=null) {
//              ResponseUtil.writeJson(resp, new R()
//                      .data("code",200)
//                      .data("msg","登录成功"));
//              这个就是我们刚刚为什么要更换util所以数据我举例的R().java
//              上面的就等价于下面这段代码ResponseUtil.writeJson(resp, R.ok(200, "登录成功"));
//              此时我们的session中是包含了我们当前登录的用户idreq.getSession().setAttribute("user", u);}else {ResponseUtil.writeJson(resp, R.error(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 queryUserByMeetingId(HttpServletRequest req, HttpServletResponse resp) {try {String meetingId = req.getParameter("meetingId");List<User> users = userDao.list(Integer.valueOf(meetingId));
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "会议用户数据初始化询成功", users));} 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 list(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> users = userDao.list(user, pageBean);
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询成功", pageBean.getTotal(), users));} 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 queryUserAll(HttpServletRequest req, HttpServletResponse resp) {try {List<Map<String, Object>> users = userDao.queryUserAll(user, null);
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "多功能下拉框数据查询成功", users));} 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 add(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=userDao.add(user);
//          如果大于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 del(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=userDao.del(user);
//          如果大于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 edit(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=userDao.edit(user);
//          如果大于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;}@Overridepublic User getModel() {// TODO Auto-generated method stubreturn user;}}

UserDao.java代码块:

package com.zking.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.zking.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;public class UserDao extends BaseDao<User>{public User login(User user) throws Exception {String sql="select * from t_oa_user where loginName='"+user.getLoginName()+"' and pwd='"+user.getPwd()+"'";
//      根据sql查询符合条件的用户,通常只会返回一条数据List<User> users = super.executeQuery(sql, User.class, null);return users==null || users.size()==0?null:users.get(0);
//      return super.executeQuery(sql, clz, pageBean);}//   查询用户信息及对应的角色,角色是通过case when得来的public List<Map<String, Object>> list(User user,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{String sql="select *\r\n" + ",(case rid \r\n" + "when 1 then '管理员 '\r\n" + "when 2 then '发起者 '\r\n" + "when 3 then '审批者 '\r\n" + "when 4 then '参与者 '\r\n" + "when 5 then '会议室管理员 '\r\n" + "else '其他'  end) roleName \r\n" + "from \r\n" + "t_oa_user where 1 = 1 ";
//      有可能根据搜索的名字查询String name = user.getName();//判断是否为空if(StringUtils.isNotBlank(name)) {
//          不为空然后就拼接上sql语句sql+=" and name like '%"+name+"%'";}
//      当实体类的属性完全包含数据库查询出来的列段的时候使用
//      super.executeQuery(sql, User.class, pageBean)
//      返回List<Map<String,Object>>,对应的是链表查询,单个实体类对象不完全包含查询的列段return super.executeQuery(sql, pageBean);}// 查询所以用户用于绑定多功能下拉框public List<Map<String, Object>> queryUserAll(User user,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{String sql="select id as value,name from t_oa_user";
//      要分页万一我的用户有百来条return super.executeQuery(sql, pageBean);}//   新增public int add(User user) throws Exception {String sql="insert into t_oa_user(name,loginName,pwd) values(?,?,?)";return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});}//   删除public int del(User user) throws Exception {String sql="delete from t_oa_user where id=?";return super.executeUpdate(sql, user, new String[] {"id"});}//  修改public int edit(User user) throws Exception {String sql="update t_oa_user set name=?,loginName=?,pwd=? where id=?";return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});}public List<User> list(Integer meetingId) throws Exception {String sql="select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id="+meetingId+"))";return executeQuery(sql, User.class, null);}
}

我们在运行一下如图所示:

导入资料中的三个文件进入工程

第一个就是seatPic.jsp代码块我们copy了

第二个就是 html12canvas.js

第三个就是 jqury-3.3.1.min.js

我所放在的位置如图所示:

我们赋值过去就要对应好位置放入这张图就是我们F12检查出来的如图所示:

现在我们在来测试一下如图所示:数据就出来了

三、会议排座图片生成及展示

1、将已经画好的会议座位图,保存下来,并且绑定到本次会议数据上去;

当我们点击下载的时候图片的字符串要传递到后台去,而这个字符串的字节很长如图所示:

$.get(不行的,因为参数太大)

①、怎么传后台-$.post

所以说我们要用post提交,当我们点击下载的时候是不是触发了这个事件如图所示:

通过这个方法调用里面的这个方法帮我把这个图片保存到后台的某一个磁盘里面去

保存在哪里面就是这个里面:

dirPath=E:/temp/images/T280/
serverPath=/test_layui/upload/paizuo/
dirPathSign=E:/temp/images/T280/sign/
serverPathSign=/test_layui/upload/sign/

我们就把这个保存在如图所示:

在通过我们之前学过的映射,实际就是通过浏览器访问就相当于查询访问如图所示:

Base64ImageUtils.java代码块:

package com.zking.util;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class Base64ImageUtils {public static void main(String[] args) {// 娴嬭瘯浠嶣ase64缂栫爜杞崲涓哄浘鐗囨枃浠�// String strImg =// "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADcALIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiq11cRWkDzzSRxxIPnd64bWfifaQCSPS4PtEn/PR/uUAehUzfXgeo+Odfuxj+07hP8Arh8n/ousi71e8vP+Pu8uJ/L/AOeknmUAfSfmJ/fp9fNKX8kf7uP93HH+78z/AJ51p2PjXU7Ty7f7XJ5ccfl+X5knl0AfQdFeHweNdTgj/cX9x/rP3nmSef8A9s/3la9l8U7tJ4xfQQPHJ/zzoA9ZorjNP8d2eoyeWkfl/wDXSeNP/albVp4l0m7cxpeRpKn8DvigDZopOCKWgAooooAKKKKACiiigAooooAKO9JxRxmgA7VmaxrNroenveXbHy1HyqnLPU9/fQ6faPcXD7EWvGdY1+/1Wa8uy8YZSvkoHU+Wmecn/GgBfEvihtXWCe6iJhkzstluCETHHasR1tZNS+x/ZP8AgfmH0z0qSW7u1tLdjNGHbdvJZMHnj2/Kle5u/wC1/KSRPI/u5XP3fTr1oAoxrayW0032HHlbePNbnJxSXDWsdnBN9hz5u75fNbjBxUkVzei0uGeaMyLt2EMmBzznt+dFzc3q2du0M0YkbdvJZMHnjHb8qAB1tYrue3+zZ2KW3ea3OF3UwNZGFrj7D91guPObvn/Cr0k90t3KiSoIwpKqWXIO3PfnrUTXV99ldvPi3hlAO5OmDn+lAEObJpICll/rsbz5p4+Yj+lPU2QmuY/seEhVmz5p5waEubwy2oM0ZDY3jcnPzEcfh6VIk90bi7UypsRHMY3LwQeM/wD16AESWz+x/aEs/wDlps2+afTOc1oQ6haxXNulxbO5mVW8xLg7xn/0ZWZ9pvPsW/zo/N83G7cmNuOnp/WrX2q6E9qolTayIXG5eSTzj/61AHo+i6zHbSkrM8sO8oro0h6f30f/AIB9yu0sbuO8g8yPpXhtlqmpWV9ctDOhTa5EeV2MQeM92/Gu38N+KHuUjSQotxv2/PKpD8e3+f8AvigD0XtS1XhmjuYEmT7h5qfjigBaKQUtABRRRQAUUUUAJzRzmj8a57xjqbaZoMrJGZJJfkAAJ/lQBwfivXjqfiNbdJm8i1BVFxxJlc785/pXFxrD9gu8SSbfkySgyOfrV9fOfVIpWtcs6DMmG4+Tp1x7VVhgkFrdA2W0nZhcP83P17e1QBTuFSTT7PMkgX58ERjJ57jPFXvs8f8Ab+7c3mf3dvH3fXP9KsfYppLO2H2TJG7K4b5efr/OteLSi+sb/J4/56YP9364o5y+Q5K3iQafeASSFTsyTGMjnsM81HcRQf2XYAySBRv2kRjJ57jPFdJJpbR29wPsoBMCvtw3zc/WqN5ZOmk2yx2e4jdlMN8vP1z+dHOHIVpRF/aM5LuG2HICAj7nrmqirb/ZJP3suN65Plj0b/arY+xOdUlYWu4FD8+G5+Tp1x7U5tOeO3cf2f8AJuX5cPzweev+c0c4chlxRQ+fZYkkyMbfkHPznrzxUscUX2u/w75Mcm4bBxzzjnmtBLWQS2v+iI2MZOG+X5j7/jzSpC/2y7P2XAKPhsN8/PTr39qOcOQxdsH9kY8yTZ5/XYM52+masyCL7XYeY77tke0bBzzxnnj9aufYpH0vP2P975ufLw3p165qK5tp0urMi1yAiZbDfJz069vejnDkI4BF9rv0Z3yUk3DYOBnnHPP6U+CZLfTo3SSSRY5+uwZzt9M02H/XXp+yYBR8Nhvn56de/tTkjk/s3H2P5vOz5e1vTr1zVkHsvhXWo9WsEzsWcoGbbxXSc8V434V1W40nWrSI25FpJCokYA/KfT8PevY+vegB1FFFABRRRQAUUUUAJx6V5r8Srl2u7S1jlSEqpYlnK53f/sV6VzXhXiS+stW1a6u38/y/ObZtx1wP/rUAU4/NGoxlrtHXaMxiQkn5euP1p+nWszQzhr1HY7cOJSdvPr2zWdC9pJqqunn+bsGN2NuNn+H610egwWv9mTPH52w7d27GevGKiZcCxFZypbwj7UoYbst5h+bn171qRQP/AGgjecNn/PPdz09KVLeDy4c+Ztjzt6Z696uxQx/bM/N5n6dK5jpKNzYl4WH2iLJxgbz8vPrWdPZyyWMQiulUjOW8w/MmfXvXSyQWz20gff5RxnpWd9hgS1t4z5jqM7emfxqxmO9jKb11juVVVUvGm8jHy+n61chtpfIYGdVORz5h461fntYftDFt+/aXOMY6f4U5ILeOM48zysj7mPeoAzJNKleSGRLkEDGRvPzc/r6VS+wXHnXBNypBVtq7z8nPB9sV1KwQ74sb8/w9PWq8lrE88339xVt3Tp3xQLkOVS2uLWy3G8THmZ88yHGMdM1ZuLQzTW5FyoAVdy+Yfn5/XNaslpbx2mHjk8l3+fpnOKjkso7a4t3iEjxBVCoMYQds1fOHszjpYbm21G6U3iFSj7V8w5TngkdsUJ5z6bhL6Pf5v+s844xjpn+lWtcjtftVxIvnbvLff0xjvj3rKtZLH+zOPtHk+d/s7t23+WK2gc0zS/eme1kS7QKETcvmH5+eoHfNew+D783/AIct2aZJJE+QspyK8XL2n2yz8zzt+xPLxjGM8Zr0j4ZyRjT7qCNz5fmeYqSY3/pVkHoFLRRQAUUUUAFFFFAEb/dbmvBtTkuozLu02MHzZePKJ9Ofx/pXvZ+leJeM9PurfVZYVuYbdPOJTdKV/d8cf59agDnLd5pL+INZIibBmQREEfJ0z9eK7Lw60smmSFrVIzxhRGRn8K5OCGaO+jLXiOuwZjEpJPy9cfXmup8IpK0NwHu0lJxhlkLbaiZcDogr+VH+5UnnI29KsqW+0Y8sbf72Pb1pjRP5aATAHnJ3damWNvtGd4x/dz7elZHSLEW8t8xAHjjb1qAFkiT/AEYE85G3pV0QN5LfvATxg7ulQtG/loPNAPOTu61RoNdW804jBGPvbevFQxq+0p5C9Rxsq40beYSJABjpu6cVD5T7T++GcjndUANjLJKn7pR6nb05qJi2+XZbjgHB2/eq5Hbs7J+9Bx1+brzTZIwjSb5Bgg4G7pTEUXV/Iz5K53fd2+3XFNKt+6/cqRgZO37tS7g8HyXK53fe3+3SmkN5kX70AYGRu+9SA5DXwftdx/oyYEbYPl/fPofXNcx5k/2HP2CPf52PL8k4xjrj9M10+uQy/brgvcriSNtq+Yfk9/bFc55c/wDZ+Pt8e/zc+Z5xxjHTP64rph8Bxz+Mu75Xntf9DQsUTc3lH5OeQD2xXpPw2Mjaddb4Iof3nyBU25rzJUm8+1KXiBQibl80/PzyQO+a9V+HNvPFoLvO4cvJwVbdVkHZilpKWgAooooAKKKKAE5rkvFPhOLWmFwXG5eRnH+e1dbx61G6h0daAPAjawQapEmybzcjGcbcbP8ACul8GQ2w0iSeHzdhxnfjNRXlrLc3z3JgjDIzvvSHkfL6/pWx4Pjc+F4pGt0jZ5H+QJj+P0rGfvwNuTkmM1bUUiSNUSXac7nXGfxqjFrrpqBjiQvJ+G3pXQXluuE320MvXjbnFMzbpc7/ACxj+/t56etBtyGVbeKpVSV5LKbC4zuYZ5PbmtqPUbeZY1KPg5x0qgZY3tpNkCg8fL5J5/DvUkbP5UeIVQ85Xb0oGazunmnO7djnHTpVaaddh+/5eR6VJk7mxGCMdcdeKrTM/kn9wucjjZUF9CldX03nRRwySohxjpjr3qoILmeWfzZ7iY7WDZcIMe1XDLseN3gXnqdn3ef0qBfEGnxTzRPx5akvstpHRv8AtoibD9KOcz5CrDY3Fvabgk23fntnOP5VqwbXMPnI/mbV29P1oh1JLuPCR4k3f6qRDv6dcVoxEuyfux0GTjpQM5fxBawNDcTnzMpGwbGOnfFcM/2GTTP+XjyfO/2d27b/ACxXqmuQM+j32IlP7qXA2/e9vfNcJpNncajHGgs4lbzf3iGIgYx1x/WrgYTE0nS4NQ1exiTzvOMSFOmMds17fpthBpljFZ2w2xJ9wVxujWgtvEUNuLdBH5f3tv3Snau9zwOauE+YicOQdRSClqyAooooAKKKKAE/CmSfcNP5oOefpQB51pqJC8k8rgrubfGM/wB0VN4ShFt4LsgHVhsd9wzj/WVQlYi8tINrIXV8HPv9K3rOBYPD1nAAceRHxmuY9Ct8Rm6pDNcW0ccEwj68881VttLiju7o3KLNLMjJHL9+SPitl0Xyo+DjnHNMdB9r6Hd659qCDz3SPDd/Bc3Mk4SFH2fvLYLG4wfpXWWtlN9ghE7r5keeef3nNWNh2S+WrY4z83v9KuiFUto+DjnHNKYcnIWVAR2OR06fhUF1EJEl+YdR6+9TogeZuDnHr7VACv73g9R3+tBotjHlsnTUrKd5Ingj/wCWfP7yTJrHi8KbtYvrlbkNazlgYN54yfuV10iK7xcHtjn3pI0iSSbAOcHPNHOZ8nOUJ9J+3jz52Ek3mbs8/JxVyAPBJDHuHCqMc81bj2yWvyA43evtTZEHmRcHOBjmomWFzEJ7S8j3D95ER9K5TwnDb6fpG15FWV5M5AOM4+lddBj/AEjg9DnmsKOxgj0c/K0ao7yY3c5x9KsKcPfL0QC+J9NkRx86AY55rvj24rhtB2z6hp8jA5Td5fP+xXcHtV0TDFfGKKWkFLW5zBRRRQAUUUUAJxRxzRz6Uc56UAcVqFrMmrvE65t3+dOnyVct/tP9kxfaP9f9ztWrqeni5K3C/wCsjzisS0tvK0+5Do6AyeYS8RjxXNyHYp88CSJJkRf73fpSvFJ5vX5KjCp5aDfxzg461YwPOzu59Me1BZWCTIjZ+926UySab5dv3ud3SlkKeW/7zjjJx0qrDCkih3k4GcHb1oGXR5qOdv3ccdPSone42n1zx0p73MO5ozw2ORj2qCSW1kJjeeNGcjYm361AIljed1XPT+Lp61bCFy3pj5aylWOO8CJJyOg29eavwMu+TD84ORjpVgWNkmz/AGs+3SmP5m5cdON3Sl3J5X3+M9cVWkVPOjO/kAYGOtADt8qCZ+3lnb069qzILe4li3zyb13fc46VqPbG4jngR/3kkZjPHSmw6Hci38h1yc537vl/KjkFCokWtDt3a485l/douxfrXSHHFVrS2S0tEhQcAYqx2FbQhynHUnzSHClpBS1ZAUUUUAFFFFACc+tHOetHFHGaADHFUtSQPaHIyPSrnGKa6Bk20AcoypGE+TjnAz0pzyL9oxt+b1z7UXX2mHOz73OelJvk83/pnXOdhGWTy3Pl8DGRnrWdf29vPbBGi3LJnA3EYqeSW7w+R83G3p+NMeVoYE8yb5+d3SkMqR6dBC22OPAQchGPPFNmsbZ0aR4fmQj5tx96uf2gqSFIw6Jjg7B6f41CNRO0+Ysm7PD8UFckya3ECNFiLGenzHjmr8bLvk+TkA5OetZ4uI3VHWZN38XT1qaGWbc+X+XB29PwoGWdyeTnZxu6ZpSy74/k5IGDnpS/vvL/ANvPt0pV+0eamOmBu6fjUCLunBXv+FwRnJz1roMVjaUj+fIzfdXpWzxXTA45i9jzRjpzScYNLxxVkC0UgpaACiiigAooooATmjvR+NHfrQAdqOaO3WigDA1yBQRKzbUPtmszcv2nO/5v7uPauquoknt3SRPMGOlcXLKiX23Z8397Pt6VjM2hMpXtlHdwSqlw+Gxkop45rKk0O2WGFZbqRgu7EuTzk1sJMCkpEWIxjI3deaZciJ7WMrDlTnA3EYqDqhuRf2Zaid3M+GKnK46fLVabSdP+zMv2qTaWBJyfepLiCUXLgpltp+beRn5fSorSH902IsDcON596XObKbsMt/D9m08BDZKY2/KefmJrUsdPgsZZ2STKsG3Db05qW3EaNFiLGenzdOacW3yTDy+Qpyd3WpMWW8p9lx5ny7uu2pVZN8fz84GBjrWb50cdvu8r5d+Nu7virtiyPdWv7vkmPHPSghnVWNqLaA7h87nLmrfejsOaO/Wuw4g7Gj0o7Hmj05oAWiiigAooooAKKKKAE49P0o4z0/SjmjnNABxjp+lHGen6Uc4o5oAp393HY2M90+NkKb+eK4y63fbm+b5PTd7elavjDUII7D7HK7bZRvfb/cFc3ZXUU9yY2d/tUHyP6dKzqm1EW1vZESVZXBIxg7wcc/Xirbz+XDHh8HnJ3jms6aC0e3mA8zb8u7pnrxis+fZBbQ4eZ1+bbjGevOa5zc6OeQO7APhsHA3Y7elV4DKkbZk2HI53j396wJtUWO8kVvN3hSTjGMbf8KhbVovJY5k27hn51znB/wDr1YHVLdfPF8456/OOef1qOS92STfMMBWx8w4/wrnIb7zJLfHnZONucf3j1/GrlpBG91cSHzd21t2cY684qALaSXE9vv3/ADeZ13jpj1zWrBK9u8Vx98RKHKbv9Z/jVGFIPsvHmbN/tnOKrareQRyWlovmebOF24x9zPGaKYp/AeoRPHLEjpyrfMtS8Z6fpXNeG9bt5rT7LLKFkjkKL5n8f0rpec12HGHGDx+lHHHH6Uc4NHPFAAKWiigAooooAKKKwr7xRYWciwxnz5GIH7ugDc/Gsi+8QWVgMnzp3/uW67643UvEN1cyTbruNECkCNG+Vfc1zq/abpV36hHncfmEp56cf59avkA7C58Y6pJcLHbWMcMBGTLI2/HGf51yd34p1e6SYS3FxPLwi28UZRJMnnryf++KRyXuEU3KNFtGU35J+X0/Ws2yLfapI4rmPau3DCUnbz3PbNBBuTsYLO3higQouUK+XwvPp2qDz54dW8xIF2f3tnL8ev6Uy6837PCBdIsvOWMhAbn171Htf+0c+euz/nlv56en60Ajbtrs3VnJItsFPGF8sjP4UyYSPDERbITzlSn3axbSS4tRNMLuNm+XcPMJC8+vatdJ/PgieO8QHnLb+G59e9cc4ch30585HcW/+kvi0RhtPzlMk/L0z+lVxanym/0CPO4fL5XXr/n8a15Fd52ImVRj7u7GOPSoxbS+WR9pXORz5h461BoVYo5N8ObZB0yfL+7yfy9avxq/mTfuFAwcHZ97/GmmKRHi/wBIXjGRv+9z+tOUukk375SMHA3fd/woENmuza2LyNbgsjfcCe3XFYIuLi5vIpprVS8iqWYx8xHuM9sU3UJp75NkV3GI0k++JDjGOmacFk863/0lAAq7l8z7/v75rpow+2c1af2CzIJbmO7gjt0DMreWSn339/XNJ4d8ba1p9ki3dv56iTasZQj5cdUamxGT7TcZuUIKthd/3P8ADFYEwaG7u7Z71BHNc743Mp4GPu5/XFbHMe1aZ4htNUVFUtDMV3eW46e1bXpzXhXnz2d5bI97GAyKFJk5c56gd81p6drGqWy+ZBqiZ28J5mYxyKOQs9jorhtK8dwEww6p5YkbI8+E5XjH+NdnBNHcRiSF0eNujoagCaiiigDyrVPEt/ffff8Ad/8APOOsFbvzLqL95/GP51n/AGiSm7zHtcOMwkEZrcg01+zPd3W7zd219+cYxnnFRl7PyERPPzubHTOcDP8ASq8eou8jSiO3y3BOzr9eal+3HysJb2+PTZSAkUQpcROvm+ZtGM4xjb/hWVpP2bNzJG9xs+Tfu2568Yqxd6i6AOsEAYdDs5H61Qj1JYlZRbWwZeoEfB/WgDeuJLX7Lb7vO2fNtxjPXnNSfuP7V/5aed+G37v59KpG/aVQpt7cgdAU6frS/wBoyb9/kwb/AO9t5/PNAEsX2T7JcbfO2fLuzjPXjFMaS3tIrdx5+z5tiDGevOaUX7BSot7cA9Rs6/rUZv2KhTb25A6DZwP1qJ0+cIVOQ6FLq1e4kA8zftOcYx93/CpBcW3lN/rdu4Z6Z71zY1SaJjMsEBY9Ts5/nVxNaPl48iDHpsrjqQ5D0Kc+c1zJb+ZBiSXPG3p6nr+NZ99qNuZrm3h83zQjF+nTviqNzrhBCRwQeYOnydKrwXr5MojtxLL1ITr9eaunDnM6k+QsJHaR2Hl/vvL832znH8qnf7N59rnzd21NmMYxnjNUvt7bdv2e325zjZxn86kOoOSpMEGV4B2dPpzXZY4yyn2fz7rHm7tr784xjPOK57xAbKOC1un8/wAreCMY3btv8sVqf2g4LEQQZbqdnX681S1a6aVI0+zWxXOdpj4z69agC7i1vbOzK+blEQwdOmeM1Ut5LSNJfK+042fNnb03Dp+lZ2lau8d4sBt7bKgCIhOgHpzWrNdmJyBbW3lng/u+v60AQ3c8OLbyd+d7ffxnOF9K3dH1q7sRvtZ9jnsa5ee5M7KvlxxhcnEa464/wqaCTy4460A9J/4WDef8+kH/AJEorhftf+fMoqPZgZ8klWJP9X5dV/8AlpVj/nnViI4/MjqxUaUUARv/AKusySPy5K00qpd0AW7WTzLeOT/pnViqOlE/Y4/+ulWoP3ske7mgA/5Z0f8ALSij/lpQQRySR29v5k8nlxx/6ySsz+047iT/AESOT/pnWdrNxJcajLBIcxRHCL2Aptr+60+eVeHPU1FQun7hv2txH5kkcckckkf+sq3XBzs0En7slfpXV6Bez31uWuG3sOh70hmjR/1zo/5aVJH0kPetBEdV7uP95HHViq2B9o/7Z0AZN9H9nuI7iP8A5ZyVseZHcWlZd1V3TWPkY7UARf8ALOp4P9XJUWBnb2q1afvbf5+f3dACeXH/AM9KKTaKKAP/2Xd3d2lkNWNuTWV4OGFGcEFwcEYrZGl2VkcwUk5LQT09";// 浣跨敤index.js涓� 淇濆瓨鍥剧墖涓璫onsole.log(url) 鏇挎崲鎴恠trImgString strImg = "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\"";
//      String strImg ="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";
//      String strImg1 = "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";GenerateImage(strImg, "E:\\temp\\li.png");
//      GenerateImage(strImg1, "D:R\\temp\\xiao.jpg");// 娴嬭瘯浠庡浘鐗囨枃浠惰浆鎹负Base64缂栫爜// System.out.println(GetImageStr("d:\\wangyc.jpg"));}public static String GetImageStr(String imgFilePath) {// 灏嗗浘鐗囨枃浠惰浆鍖栦负瀛楄妭鏁扮粍瀛楃涓诧紝骞跺鍏惰繘琛孊ase64缂栫爜澶勭悊byte[] data = null;// 璇诲彇鍥剧墖瀛楄妭鏁扮粍try {InputStream in = new FileInputStream(imgFilePath);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}// 瀵瑰瓧鑺傛暟缁凚ase64缂栫爜BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);// 杩斿洖Base64缂栫爜杩囩殑瀛楄妭鏁扮粍瀛楃涓�}public static boolean GenerateImage(String imgStr, String imgFilePath) {// 瀵瑰瓧鑺傛暟缁勫瓧绗︿覆杩涜Base64瑙g爜骞剁敓鎴愬浘鐗�if (imgStr == null) // 鍥惧儚鏁版嵁涓虹┖return false;BASE64Decoder decoder = new BASE64Decoder();try {// Base64瑙g爜byte[] bytes = decoder.decodeBuffer(imgStr);for (int i = 0; i < bytes.length; ++i) {if (bytes[i] < 0) {// 璋冩暣寮傚父鏁版嵁bytes[i] += 256;}}// 鐢熸垚jpeg鍥剧墖OutputStream out = new FileOutputStream(imgFilePath);out.write(bytes);out.flush();out.close();return true;} catch (Exception e) {return false;}}
}

步骤:1.接收前端页面传递后台的图片对应的字符
            2.借助工具类将字符串生成一个图片,保存到配置文件所配置的路径下

用一个类PropertiesUtil .java代码块

package com.zking.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class PropertiesUtil {public static String getValue(String key) throws IOException {Properties p = new Properties();InputStream in = PropertiesUtil.class.getResourceAsStream("/resource.properties");p.load(in);return p.getProperty(key);}}

3.添加服务器硬盘与请求地址的映射,即可访问
            4.将请求地址  保存到 数据库中

MeetingInfoAction.java代码块:

package com.zking.web;import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.ConvertUtils;import com.zking.dao.MeetingInfoDao;
import com.zking.entity.MeetingInfo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.Base64ImageUtils;
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;public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo>{private MeetingInfo info = new MeetingInfo();private MeetingInfoDao infoDao = new MeetingInfoDao();@Overridepublic MeetingInfo getModel() {
//      注册一个转换器ConvertUtils.register(new MyDateConverter(), Date.class);return info;}public String updateSeatPicById(HttpServletRequest req, HttpServletResponse resp) {try {
//          E:/temp/images/T280/abcdefg.png
//          获取图片的存放地址       dirPath=/temp/images/T280/String dirPath = PropertiesUtil.getValue("dirPath");
//          获取浏览器请求路径,为了后续保存到数据库   serverPath=/upload/paizuo/String serverPath = PropertiesUtil.getValue("serverPath");
//          随机生成一个图片名称String fileName=UUID.randomUUID().toString().replace("-", "")+".png";info.getSeatPic();// 图片字符串Base64ImageUtils.GenerateImage(info.getSeatPic().replaceAll("data:image/png;base64", ""), dirPath+fileName);//         将seatPic中的内容修改为  请求地址info.setSeatPic(serverPath+fileName);//            修改会议排座  数据库 图片 对应的 数据库列段int rs = infoDao.updateSeatPicById(info);if(rs>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();}finally {
}}return null;}public String add(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=infoDao.add(info);
//          如果大于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 myInfos(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> infos = infoDao.myInfos(info, 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;}}

MeetingInfoDao.java代码块:

package com.zking.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;public class MeetingInfoDao extends BaseDao<MeetingInfo>{// 会议信息新增public int add(MeetingInfo t) throws Exception {String sql="insert into t_oa_meeting_info(title,content,canyuze,liexize,zhuchiren,location,startTime,endTime,remark) values(?,?,?,?,?,?,?,?,?)";return super.executeUpdate(sql, t, new String[] {"title","content","canyuze","liexize","zhuchiren","location","startTime","endTime","remark"});}//    我的会议,后续其他的菜单也会使用private String getSQL() {return "select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" + ",b.`name` zhuchirennmae,\r\n" + "a.location,\r\n" + "DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,\r\n" + "DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,\r\n" + "a.state,\r\n" + "(\r\n" + "  case a.state\r\n" + "   when 0 then '取消会议'\r\n" + " when 1 then '新建'\r\n" + "   when 2 then '待审核'\r\n" + "  when 3 then '驳回'\r\n" + "   when 4 then '待开'\r\n" + "   when 5 then '进行中'\r\n" + "  when 6 then '开始投票'\r\n" + " when 7 then '结束会议'\r\n" + " else '其他' end\r\n" + ") meetingstate,\r\n" + "a.seatPic,a.remark,a.auditor,\r\n" + "c.`name` auditorname from t_oa_meeting_info 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 and 1=1";}//  我的会议public List<Map<String, Object>> myInfos(MeetingInfo info, PageBean pageBean)throws SQLException, InstantiationException, IllegalAccessException {
//      拿到那些可能传的条件
//      拿到我们封装好的SQL语句String sql = getSQL();
//      会议标题String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql+=" and title like '%"+title+"%'";}sql+=" and zhuchiren = "+info.getZhuchiren();return super.executeQuery(sql, pageBean);}//   设置会议排座图片public int updateSeatPicById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set seatPic=? where id=?";return super.executeUpdate(sql, info, new String[] {"seatPic","id"});}}

运行一下:

四、会议送审

审批人是id所以我们要改如图所示:把这个改了

我们在来运行一下如图所示:

最终我们点击送审的效果如图所示:

我们去官网上去看:

 

myMeeting.js代码块:

let layer,$,table;
var row;
layui.use(['jquery', 'layer', 'table'], function(){layer = layui.layer,$ = layui.jquery,table = layui.table;//初始化数据表格initTable();//绑定查询按钮的点击事件$('#btn_search').click(function(){query();});//初始化审批人initFormSelects();});//1.初始化数据表格
function initTable(){table.render({           //执行渲染elem: '#tb',         //指定原始表格元素选择器(推荐id选择器)
//        url: 'user.action?methodName=list',     //请求地址height: 340,         //自定义高度loading: false,      //是否显示加载条(默认 true)cols: [[             //设置表头{field: 'id', title: '会议编号', width: 120},{field: 'title', title: '会议标题', width: 120},{field: 'location', title: '会议地点', width: 140},{field: 'startTime', title: '开始时间', width: 220},{field: 'endTime', title: '结束时间', width: 120},{field: 'meetingstate', title: '会议状态', width: 120},{field: 'seatPic', title: '会议排座', width: 140,templet: function(d){console.log(d);//得到当前行数据,并拼接成自定义模板return '<img src="'+d.seatPic+'">'}},{field: 'auditorname', title: '审批人', width: 140},{field: '', title: '操作', width: 220,toolbar:'#tbar'},]]});//在页面中的<table>中必须配置lay-filter="tb_goods"属性才能触发属性!!!table.on('tool(tb)', function (obj) {row = obj.data;if (obj.event == "seat") {open(row.id);}else if(obj.event == "send"){
//          layer.msg("送审");
//          判断是否已经排座if(row.seatPic==null || row.seatPic==""){layer.msg('先请完成会议排座,再进行送审操作!',function(){});return false;}
//          弹出层中的会议送审人员必须查询出来,后台已经完成,在多功能下拉框中已经完成//在打开送审页面之前,先请完成会议ID的赋值操作$('#meetingId').val(row.id);//           打开会议送审HTML  页面层openLayerAudit();}else if(obj.event == "del"){layer.msg("取消会议");
//          把我们的会议状态改为0}else if(obj.event == "back"){layer.msg("反馈详细");
//          把我们的会议状态改为0}else{}});}
//2.点击查询
function query(){
//  console.log($("#ctx").val());table.reload('tb', {url: 'info.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'myInfos','title':$('#title').val(),'zhuchiren':$('#zhuchiren').val()},  request: {                         //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit}});
}//打开会议排座对话框
function open(id){layer.open({type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title: '会议排座',                   //对话框标题area: ['460px', '340px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: $("#ctx").val()+'/jsp/meeting/seatPic.jsp?id='+id,                //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同});
}//初始化审批人
function initFormSelects(){$.getJSON($("#ctx").val()+'/user.action',{'methodName':'queryUserAll'},function(rs){console.log(rs);let data=rs.data;$.each(data,function(i,e){$('#auditor').append(new Option(e.name,e.value));});//重新渲染form.render('select');});
}//会议送审
function openLayerAudit(){//每次打开都对送审人进行初始化默认值设置$('#auditor').val("");//必须重新渲染form.render('select');//弹出对话框layer.open({type: 1,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title:'会议送审',area: ['426px', '140px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: $('#audit'),   //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同});
}

运行一下如图所示:

我们现在是不是要点击送审然后送审,我们现在要拿到两个数,会议的id,会议的送审人

在MeetingInfoAction里去写一个updateAuditorById方法如图所示:

MeetingInfoAction.java代码块:

package com.zking.web;import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.ConvertUtils;import com.zking.dao.MeetingInfoDao;
import com.zking.entity.MeetingInfo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.Base64ImageUtils;
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;public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo>{private MeetingInfo info = new MeetingInfo();private MeetingInfoDao infoDao = new MeetingInfoDao();@Overridepublic MeetingInfo getModel() {
//      注册一个转换器ConvertUtils.register(new MyDateConverter(), Date.class);return info;}public String updateSeatPicById(HttpServletRequest req, HttpServletResponse resp) {try {
//          E:/temp/images/T280/abcdefg.png
//          获取图片的存放地址       dirPath=/temp/images/T280/String dirPath = PropertiesUtil.getValue("dirPath");
//          获取浏览器请求路径,为了后续保存到数据库   serverPath=/upload/paizuo/String serverPath = PropertiesUtil.getValue("serverPath");
//          随机生成一个图片名称String fileName=UUID.randomUUID().toString().replace("-", "")+".png";info.getSeatPic();// 图片字符串Base64ImageUtils.GenerateImage(info.getSeatPic().replaceAll("data:image/png;base64", ""), dirPath+fileName);//         将seatPic中的内容修改为  请求地址info.setSeatPic(serverPath+fileName);//            修改会议排座  数据库 图片 对应的 数据库列段int rs = infoDao.updateSeatPicById(info);if(rs>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();}finally {
}}return null;}//   会议送审public String updateAuditorById(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=infoDao.updateAuditorById(info);
//          如果大于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 add(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=infoDao.add(info);
//          如果大于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 myInfos(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> infos = infoDao.myInfos(info, 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;}}

MeetingInfoDao.java代码块:

package com.zking.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;public class MeetingInfoDao extends BaseDao<MeetingInfo>{// 会议信息新增public int add(MeetingInfo t) throws Exception {String sql="insert into t_oa_meeting_info(title,content,canyuze,liexize,zhuchiren,location,startTime,endTime,remark) values(?,?,?,?,?,?,?,?,?)";return super.executeUpdate(sql, t, new String[] {"title","content","canyuze","liexize","zhuchiren","location","startTime","endTime","remark"});}//    我的会议,后续其他的菜单也会使用private String getSQL() {return "select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" + ",b.`name` zhuchirennmae,\r\n" + "a.location,\r\n" + "DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,\r\n" + "DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,\r\n" + "a.state,\r\n" + "(\r\n" + "  case a.state\r\n" + "   when 0 then '取消会议'\r\n" + " when 1 then '新建'\r\n" + "   when 2 then '待审核'\r\n" + "  when 3 then '驳回'\r\n" + "   when 4 then '待开'\r\n" + "   when 5 then '进行中'\r\n" + "  when 6 then '开始投票'\r\n" + " when 7 then '结束会议'\r\n" + " else '其他' end\r\n" + ") meetingstate,\r\n" + "a.seatPic,a.remark,a.auditor,\r\n" + "c.`name` auditorname from t_oa_meeting_info 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 and 1=1";}//  我的会议public List<Map<String, Object>> myInfos(MeetingInfo info, PageBean pageBean)throws SQLException, InstantiationException, IllegalAccessException {
//      拿到那些可能传的条件
//      拿到我们封装好的SQL语句String sql = getSQL();
//      会议标题String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql+=" and title like '%"+title+"%'";}sql+=" and zhuchiren = "+info.getZhuchiren();return super.executeQuery(sql, pageBean);}//   设置会议排座图片public int updateSeatPicById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set seatPic=? where id=?";return super.executeUpdate(sql, info, new String[] {"seatPic","id"});}// 会议送审public int updateAuditorById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set auditor=?,state=2 where id=?";return super.executeUpdate(sql, info, new String[] {"auditor","id"});}}

运行一下:

没有出来然后我们就admin去登录然后就出来了,这里还不够完善,还待完善功能

因为我们的SQL语句

MeetingInfoDao.java代码块

package com.zking.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;public class MeetingInfoDao extends BaseDao<MeetingInfo>{// 会议信息新增public int add(MeetingInfo t) throws Exception {String sql="insert into t_oa_meeting_info(title,content,canyuze,liexize,zhuchiren,location,startTime,endTime,remark) values(?,?,?,?,?,?,?,?,?)";return super.executeUpdate(sql, t, new String[] {"title","content","canyuze","liexize","zhuchiren","location","startTime","endTime","remark"});}//    我的会议,后续其他的菜单也会使用private String getSQL() {return "select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" + ",b.`name` zhuchirennmae,\r\n" + "a.location,\r\n" + "DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,\r\n" + "DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,\r\n" + "a.state,\r\n" + "(\r\n" + "  case a.state\r\n" + "   when 0 then '取消会议'\r\n" + " when 1 then '新建'\r\n" + "   when 2 then '待审核'\r\n" + "  when 3 then '驳回'\r\n" + "   when 4 then '待开'\r\n" + "   when 5 then '进行中'\r\n" + "  when 6 then '开始投票'\r\n" + " when 7 then '结束会议'\r\n" + " else '其他' end\r\n" + ") meetingstate,\r\n" + "a.seatPic,a.remark,a.auditor,\r\n" + "c.`name` auditorname from t_oa_meeting_info 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 where 1=1";}//    我的会议public List<Map<String, Object>> myInfos(MeetingInfo info, PageBean pageBean)throws SQLException, InstantiationException, IllegalAccessException {
//      拿到那些可能传的条件
//      拿到我们封装好的SQL语句String sql = getSQL();
//      会议标题String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql+=" and a.title like '%"+title+"%'";}sql+=" and a.zhuchiren = "+info.getZhuchiren();return super.executeQuery(sql, pageBean);}//   设置会议排座图片public int updateSeatPicById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set seatPic=? where id=?";return super.executeUpdate(sql, info, new String[] {"seatPic","id"});}// 会议送审public int updateAuditorById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set auditor=?,state=2 where id=?";return super.executeUpdate(sql, info, new String[] {"auditor","id"});}}

最终运行结果如图所示:

总结

思考特殊功能完成步骤---->会议排座

1.功能细分

①人员拖拽功能

1)会有相似插件完成

2)优化插件使其在项目中使用

3)研究里面不乏源码,寻找接入点

4)接入到项目中

②初始化参会人员

③保存座位表

OA之我的会议(会议排座送审)相关推荐

  1. 会议OA之我的会议(排座送审)

    目录 一.排座 后台代码 dao方法 web层 js代码 配置文件 前端代码 二.送审 后台代码 dao方法 web层 js代码 一.排座 实现思路 1.查询出本场会议中的所有参与人员 2.需要完成在 ...

  2. 会议OA之会议排座送审

    目录 最近这段时间一直都在与大家分享会议OA项目,今天继续分享关于会议OA项目的一个亮点功能,会议排座.以及一个送审功能. 一.会议排座 二.送审 最近这段时间一直都在与大家分享会议OA项目,今天继续 ...

  3. 会议OA项目(我的会议中的会议排座送审功能)

    文章目录 一.会议排座插件介绍 1)会议项目为什么要有会议排座的功能 2)完成在页面上元素的拖动功能 2.1分析现有素材的不足 2.2修改现有素材的不足⬇⬇⬇ 2.3 content需要传递到后台,并 ...

  4. 会议OA(会议排座送审)

    目录 一,会议排座 二,会议送审 一,会议排座 分析: 1. 查找资料     做选择,哪一个素材更适合完成需求 2. 素材改造     素材的缺陷:         ①:样式:座位小方块重叠/太小 ...

  5. LayUi——OA项目 03(会议排座送审)

    目录 一.后端 1.MeetingInfoDao 2.MeetingInfoAction 3.配置文件和服务器 二.前端 1.myMeeting.js 2.seatPic.jsp 3.myMeetin ...

  6. 会议OA项目之我的会议(会议排座送审)

    目录 一.会议排座 1.为什么会有排座功能 2.查找资料 3.配置路径 3.后台 4.前端 二.会议送审 一.会议排座 1.为什么会有排座功能 集团公司的日常管理会议.人事任命会议所需 在参会人员每个 ...

  7. 会议OA之我的会议(会议排座送审)

    目录 前言: 2.我的会议: 2.1实现的特色功能: 2.2思路: 2.3功能实现: 我的会议页面:myMeeting.jsp myMeeting.js Dao方法 在mvc中配置info信息 Mee ...

  8. 会议OA项目(三)---我的会议(会议排座、送审)

    目录 前言 一.需求分析 二.准备工作 三.编码 1.后台编码 2.前端编码 四.效果展示 前言 上篇分享了会议OA项目的我的会议功能的查询.取消会议.本篇文章将完善我的会议功能. 我的会议功能有一个 ...

  9. OA之会议排座与送审

    目录 一.会议排座 二.送审 一.会议排座 1.会议排座插件 为了实现会议排座功能,我们需要再网上寻找一个会议排座的插件.可以上百度搜索 在网上找到的一个插件,但是发现了以下两个问题: ①.发现元素重 ...

最新文章

  1. matlab 多个表数据相加,Excel合并计算完成多表格数据汇总求和
  2. 无需向量监督的矢量图生成算法,入选CVPR 2021 | 代码开源
  3. mysql运维管理-mysqldump 备份与恢复数据库20
  4. ROS系列之初识gmapping
  5. 超图Cesium鼠标事件处理
  6. python管道pipe_Python multiprocessing模块中的Pipe管道
  7. SQL反模式学习笔记15 分组
  8. 【转】C#中base关键字的几种用法
  9. 可靠性试验顺序应该如何安排?
  10. python箱线图标注单位_【可视化】箱线图异变标注
  11. laravel 开源文档管理系统
  12. 命令行修改微信小程序开发AppId
  13. python日本 老龄化分析_即将读研,求问前辈有什么研究生安利的软件 APP 或者阅读文献用的等一系列提高效率的东西吗!?...
  14. 女神青涩时纤毫毕现,腾讯 AI 模型 GFPGAN 火上 GitHub 热榜第一,Demo 在线可玩
  15. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发uart例程
  16. 建模助手 | 关于REVIT的小技巧,你知道多少?
  17. 富士x-e4参数 怎么样?测评值得买吗?
  18. 史上最强Tomcat8性能优化,网易云课堂java高级架构师
  19. 2010中13寸MacbookPro光驱位安装SSD记录
  20. 牛逼!最强拆迁户!上市公司喜提近26亿拆迁款,为去年净利78倍!3万股东沸腾了...

热门文章

  1. [NodeJS] Mongoose Populate 基本使用
  2. js:nodejs通过async异步提交事务数据
  3. VC:CString.Format()函数详解
  4. mxnet-lst文件
  5. matlab中ode指令,在Matlab中使用ODE选择步长
  6. leet160:相交链表
  7. php tp gii,TP电商项目:使用GII制作品牌管理
  8. WKID对照表:Projected Coordinate Systems
  9. 流行20年的架构设计原则SOLID可能已经不适合微服务了
  10. 限制Editext输入字节长度