95992828九五至尊2

h贰技术编写简单的对白生成器882828九五至尊手机版

四月 9th, 2019  |  882828九五至尊手机版

近来和好动手写了一个内外端分离的后台管理体系(主如果写着玩,java照旧如数家珍一点,所从前后端均是温馨写),后端使用的Java
SpringMVC。后来想着在用户管理中添加三个导出功用,所以就上网查了素材,完毕了简短的导出作用,在那边记录下本人的进度。

传说Swt、ffmpeg、jacob、vlc、SApi、h二技术编写简单的对白生成器,ffmpegsapi

一、简介:

  前一段时间尝试录制了几集3D编制程序方面包车型地铁录制教程,小编意识摄像时最大的阻力是让脑中的思量、手上的操作和嘴里的解说保持同步,一旦四个“线程”中有二个失误,就无法不停下来重新录像出错的部分,同时一心叁用也会大幅的扩大活力消耗,收缩有效录制时间。为了缓解这一难题、降低录制教程的编排门槛,小编尝试编写了三个将先期设定的文书插入录像中作为独白的小工具,尝试将合计、操作和释疑四个线程分解到八个时间片中运作。

  因为在此以前没接触过完整的java窗口程序编制,那几个小工具的代码卓殊简陋生硬,程序名字为Saltedfish(汉语翻译咸鱼,本文中简称为sf)。

2、使用流程:

sf运转李包裹能够从https://pan.baidu.com/s/1i69LBs5下载

一、程序针对安装了6十几人java一.7的欧洲经济共同体版win柒系统一编写制,参考网络上的材质,使用Java语言开发。

二、导出的运维目录如下:

882828九五至尊手机版 1

  在那之中h2是用来囤积项目配置的微型数据库,sf玖_lib是MyEclipse导出的注重jar包,ffmpeg是录像拍卖工具,jacob是java调用com组件工具,mylist是ffmpeg合并音频流时利用的配备文件,sf九.jar是可实行jar文件,startup是运行脚本,vlc是录像播放器。

3、初次使用时索要设置vlc录像播放器,安装目录未有限制。

4、启动h2数据库:

执行h2-2017-06-10\h2\bin\h二w.bat脚本运行数据库,数据库运转成功后会使用默许浏览器弹出二个数据库控制台窗口:

882828九五至尊手机版 2

  使用JDBC
UCRUISERL:jdbc:h贰:tcp://1二柒.0.0.1/../../saltedfish访问已经创建的saltedfish数据库,用户名密码均为saltedfish。点击连接后方可知见项目表和文件表:

882828九五至尊手机版 3

  能够看来曾经创立了“test”和“test二”多个测试项目,限于时间,sf程序里并未做去除项指标功用,若是须要删除项目或文件能够一贯在数据库中操作。

  h2数据库运营后会在后台运营,关闭控制台不会潜移默化数据库运营,能够在系统窗口的右下角看到h2数据库的小图标。

伍、执行startup脚本运转sf九.jar

startup脚本内容:

java -Dfile.encoding=utf-8 -Xms1024m -Xmx1024m -jar sf9.jar 

运用系统暗许java,以utf-八编码执行jar包,为了防范内部存款和储蓄器不够,给java堆分配了一GB内部存款和储蓄器。

6、sf页面样式如下:

882828九五至尊手机版 4

  左上区域用来体现正在处理的录制片段,右上区域分为多少个选项卡,最左侧的选项卡用来对品种展开操作,中间的选项卡对项目中的某一个文件进行操作,左边的选项卡是依照提议添加的对文件的另壹种处理格局,但里面还不曾做别的内容。

  点击项目操作选项卡,在列表里挑选二个种类并打开后,能够见到项目所含有的文本以水平列表的花样呈未来底下,您也能够添加新的类型可能在类型里添加新的文书(近日只支持avi格式):

882828九五至尊手机版 5

  列表中还出示了各类文件的文件名和以纳秒数表示的文书长度,点击“导出指标文件”按钮可以把列表中的文件合并成1个录制导出(因为日子范围,那里运用的是最不难易行的文件合并方法,只帮忙理编辑码完全相同的录制合并)

7、在列表中挑选一个文本,点击“处理那1段”按钮,能够对那些文件进行操作:

882828九五至尊手机版 6

  类似普通录像播放器能够对录像文件进行播报、暂停,拖动滑块能够调动播放进程。

8、点击读文件按钮,选用要插入的对白文本:

882828九五至尊手机版 7

  点击播放,程序在广播录像的同时也会一句接一句的宣读独白,在某暂且时点击某一句对白所在的按钮,会再也定位这一句对白的职责,通过那种艺术调动每一句独白的发音时机(若是录像的尺寸总比独白的长度长)

玖、播放完成也许点击截止后能够对对白进行导出:

  点击“srt”按钮时以srt字幕文件的不二等秘书诀导出独白文字(限于时间,字幕以私下认可的utf-8编码导出,不过实验发现超越58%录像播放器不帮助那种编码的字幕,须求用户自身用文件工具将字幕的编码转为ANSI),点击“wav”按钮时以wav音频文件的章程导出独白朗读音频和原录像音频的增大音频,点击”合并”按钮则能够把叠加的wav替换来avi里(限于时间,只是导出了1个avi文件,如需求替换请自个儿替换文件可能涂改数据库)

十、限于时间,只对动态定位对白语句的部分使用了四线程,最终的导出部分从没应用八线程,这表示点击导出按钮之后到导出完结之前sf不会响应用户的其他操作。

叁、技术选型与统一筹划流程:

1、选取java作为操作文件和调度各样工具的语言。

2、接纳前台页面绘制方法:

  Java程序的前台绘制有二种思路,一是用html*css*js网页作为前台,通过走访服务器格局(Ajax,Websocket等)调用后台的java程序工作;二是平素动用java语言编写桌面应用程序。明显第二种格局在统一筹划前台页面时有更加多的随机,但是思索到附带发生的前后台沟通费用和用户铺排费用以及思考切换开支,选用使用java直接编写桌面程序。

  常用的Java桌面程序框架有两种:Swing、Awt、Swt,参考互联网上的评论和介绍决定使用Swt框架,在其实应用中发现Swt具有以下缺点:

  a、不能像html1样方便的挑选成分,除非在程序中用专用的变量保存对象,不然再想找到就很难了。

  b、不能够像css壹样方便的批量定义和继承ui样式,需求对每多个要素单独设置样式。

  c、唯有创造窗口的主线程能够修改ui的景观,其余线程想要修改ui状态(比如播放进程条的转移),须要用区别常常的语法公告主线程在主线程认为适用的时候举办操作,那一点比JavaScript差别无法道里计。

(只怕那几个毛病是因为笔者对Swt通晓的还不够深入,但同样的时光用来上学html技术可以发出越来越好的功效)

3、对文字转语音工具举行抉择:

  常见的文字转语音方式有二种,一是通过http等协商调用百度、讯飞等“语音云”,将语音云生成的宣读结果重返给用户;贰是在本地安装语音生成程序。思量到离线操作的大概性,使用本地口音生成;思量到安装的方便性,使用Window操作系统自带的语音朗读工具(SAPI)。

四、考虑程序所不可不的主干流程,针对每一种流程画出页面草图。

五、依照规定的流程设计相应的文件管理方法

  参考1些大型商业软件设计了八个本子,发现都亟需开支相当短的光阴支付专门的公文物管理理模块,限于时间利用三个袖珍数据库h2Database对项目标构造进行封存。

6、依据规定的数据流在网上查询各种节点的连锁知识,先编制用于试验的小例程,然后把试验完结的小例程整合到主程序中。

4、代码结构介绍

程序代码能够在https://github.com/ljzc002/Saltedfish下载

工程结构如下:

882828九五至尊手机版 8

壹、程序的入口main方法在Win_sf类中,那几个类继承自Swt的窗口类Shell(值得注意的是Shell类默许不可被一而再,所以须要在Win_sf的构造函数中添加壹行“checkSubclass();”,并且为它定义四个空方法)。

其中 :

initGui()
方法设定了整套Swt窗口的布局,并在布局的同时设定了按钮点击和进程条拖动的事件监听;

InitAssats()方法发轫化了vlc播放器与左上方容器的绑定,并且经过vlc播放器的回调函数修创新度条地方;

Win_sf类的最终是按钮点击事件的响应措施,在拓展事件响应时,要尤其注意响应措施是不是由主线程执行,假诺不是要运用syncExec(同步)或asyncExec(异步)方法将响应交给主线程执行,倘若是,则要留心响应措施会不会滋生主线程卡顿。

二、CompositeVideoSurface和SwtEmbeddedMediaPlayer是从github下载的四个类,它们完毕了通过Swt调用vlc播放器的效果。vlc的Java官方示例是运用swing框架达成的,试验进度中自笔者尝试了采纳Swt调用Awt,再用Awt调用swing的措施,结果播放器有声音无图像。

3、Event_cb类里编写了两个通过Java反射设置按钮响应函数的办法,分别是不带参数和带参数的本子。

4、Util_File类里带有了文本处理和数据库操作的相干办法,主即便健康的JDBC达成和Java流操作。

5、Comp_sf类是显示在窗口下部水平列表里的小容器的类,这几个笑容器包蕴了对应文件的1对音讯,并且能够被入选

6、Btn_sf类是窗口右上区域展现每1列独白文本的按钮类。

柒、MSTTSSpeech一类是承受通过Jacob调用Windows
TTS组件的类,这些类的效劳相对健全,包蕴了对朗读线程的开端化、起首、截至、释放八个重点环节的操纵,线程之间的涉嫌如下:

882828九五至尊手机版 9

  在那边语音朗读由com线程进行,Thread德姆o线程只负责对独白语句和com线程的调度,Thread德姆o进度的收敛并不会立即令com线程截止,com线程仍会做到它近年来的任务照旧在吸收分明的关闭命令时停下;每趟播放暂停,com线程和Thread德姆o线程都会被放飞,继续播放时将确立新的com线程和Thread德姆o线程。

  微软TTS组件的二个通病是心有余而力不足方便的变化“特定长度的沉默”,所以只好生成许多段语音,再把它们拼接起来

882828九五至尊手机版,  对音录像文件的分割与联合也在这一个类中开始展览,ffmpeg是一款功用强大的开源录制拍卖工具,那里运用JNI技术对其展开调用,使用ffmpeg时遇见的难关首要有两处:

  1是ffmpeg仿佛从未一直的方法能够把叁个流偏移一定长度叠加到另3个流里,所以小编不得不利用3个抄袭的办法:

882828九五至尊手机版 10

  那几个方法会在干活目录下发出壹些中级文件

  二是在运用ffmpeg前必定要搞领会要操作的流的编码格式,然后选择合适的解/编码器进行解/编码,不然会促成经过处理后的壹些不可能统1到共同。

  sf用到的局地ffmpeg命令如下:

 1 #带编码剪切
 2 ffmpeg -i 2017FFFHHH-HC720P国语中字.mp4 -vcodec h264 -t 360 -ss 0 ./temp4/fh2h264.avi
 3 
 4 #提取第一个音频流
 5 ffmpeg -y -i fh2.avi -map 0:a:0 tempa.wav
 6 
 7 #提升音频流的音量和采样数、声道数
 8 ffmpeg -y -i temptts.wav -af volume=10dB -ar 48000 -ac 2 tempttsl.wav
 9 
10 #截取音频流
11 ffmpeg -y -i tempa.wav -t 3 -ss 0 temp1.wav
12 
13 ffmpeg -y -i tempa.wav -ss 3 temp2.wav
14 
15 #叠加混音
16 ffmpeg -y -i temp1.wav -i tempttsl.wav -filter_complex  amix=inputs=2:duration=longest:dropout_transition=0 temp1ttsl.wav
17 
18 #这种是文件层面的整合,要求文件的格式必须完全相同
19 ffmpeg -y -i "concat:temp1ttsl.wav|temp2.wav" -c copy tempa.wav
20 #这个是流层面的整合
21 ffmpeg -y -f concat -safe 0 -i mylist.txt -c copy tempa.wav
22 #mylist.txt文件
23 #file temp1ttsl.wav
24 #file temp2.wav
25 
26 #最终替换音频,使用编解码器时间更长文件更小,使用copy模式则相反
27 ffmpeg -y -i fh2.avi -i bbb.wav -vcodec h264 -map 0:v -map 1 fh2bbb2.avi

 

8、H2_db类负责新建或关闭与h二数据库的JDBC连接,那里采取了h二数据库的TCP连接格局,并且使用了相对路径举办连接。

玖、BarUpdater类是在网上找到的一个进度条更新线程,sf并从未行使它。

 

  编写完成的主次能够运用MyEclipse导出为可举行的jar包,更近一步的,大家也得以使用exe四j工具把jar包打包成三个exe文件,您能够在自笔者的github上找到一个exe4j配置文件来便宜你的打包进程(打包时自身把sfx.jar放在了sfx_lib文件夹里)

  关于打包另四个急需专注的地方是:jar和exe肆j导出的exe调用dll和exe的根路径相同,但可运营jar操作文件的根路径是jar所在的公文夹,而exe四j导出的exe的操作文件的根路径则是所运用的jdk的bin目录!

5、代码引用:

  sf编写进程中在网络上举行了数百次搜索,在那之中引用代码较多的源于如下:

一、在编排SwtUI时学习了IBM developerWorks上的Swt教程:

 https://www.ibm.com/developerworks/cn/opensource/os-jface2/index.html?ca=drs-

2、在编写制定h贰数据库模块时参照了网易·孤傲苍狼博客:

http://www.cnblogs.com/xdp-gacl/p/4171024.html

三、为了在Swt中利用vlc,引用了github上的caprica/vlcj-swt-demo项目,该类型基于GNU
GENERAL PUBLIC LICENSE协议公布

https://github.com/caprica/vlcj-swt-demo

四、jacob工具基于GNU LESSEPAJERO GENERAL PUBLIC
LICENSE协议发表,我不鲜明只是调用这么些工具是不是须要继续其开源协议。

  大概有部分代码引用被忽略了,倘若你发现被忽视的引用代码,请联系自己添加它们。

  sf引用了多个利用不相同GNU协议的开源工具,所以本身也不领会sf应该以何种方法开源,假设还有GNU以外的可授权部分,则以MIT协议开源。

  限于时间和档次,sf只兑现了自个儿所供给的最简便的作用,并且设有各类弱点和bug,假若你需求越多的功效能够本身加上。

 

http://www.bkjia.com/Javabc/1299568.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1299568.htmlTechArticle基于Swt、ffmpeg、jacob、vlc、SApi、h2技术编写简单的旁白生成器,ffmpegsapi
壹、简介: 前壹段时间尝试摄像了几集3D编制程序方面的录像教程,我发…

壹、在java项目中引入导出功用须要的jar包

  poi-3.9.jar

  poi-examples-3.9.jar

  poi-excelant-3.9.jar

  poi-ooxml-3.9.jar

  poi-ooxml-schemas-3.9.jar

  poi-scratchpad-3.9.jar

 

  品类中央银行使的是maven结构,所以在pom.xml文件中添加如下一些:

  882828九五至尊手机版 11

 

2、domain实体类-SysUser.java

882828九五至尊手机版 12

 

三、生成Excel文件的工具类-ExcelUtil.java

package com.lin.utils;

import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 生成Excel文件的工具类
 * @author libo
 */
public class ExcelUtil {

    /**
     * 创建excel文档,
     * @param list 数据
     * @param keys list中map的key数组集合
     * @param columnNames excel的列名
     * */
    public static Workbook createWorkBook(List<Map<String, Object>> list,String []keys,String columnNames[]) {
        // 创建excel工作簿
        SXSSFWorkbook wb = new SXSSFWorkbook(100);//在内存中只保留100行记录,超过100就将之前的存储到磁盘里
        // 创建第一个sheet(页),并命名
        Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); 
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for(int i=0;i<keys.length;i++){
            sheet.setColumnWidth(i, (int) (35.7 * 150));
        }

        // 创建第一行
        Row row = sheet.createRow(0);

        // 创建两种单元格格式
        CellStyle cs = wb.createCellStyle();
        CellStyle cs2 = wb.createCellStyle();

        // 创建两种字体
        Font f = wb.createFont();
        Font f2 = wb.createFont();

        // 创建第一种字体样式(用于列名)
        f.setFontHeightInPoints((short)10);
        f.setColor(IndexedColors.BLACK.getIndex());
        f.setBoldweight(Font.BOLDWEIGHT_BOLD);

        // 创建第二种字体样式(用于值)
        f2.setFontHeightInPoints((short)10);
        f2.setColor(IndexedColors.BLACK.getIndex());

        // 设置第一种单元格的样式(用于列名)
        cs.setFont(f);
        cs.setBorderLeft(CellStyle.BORDER_THIN);
        cs.setBorderRight(CellStyle.BORDER_THIN);
        cs.setBorderTop(CellStyle.BORDER_THIN);
        cs.setBorderBottom(CellStyle.BORDER_THIN);
        cs.setAlignment(CellStyle.ALIGN_CENTER);

        // 设置第二种单元格的样式(用于值)
        cs2.setFont(f2);
        cs2.setBorderLeft(CellStyle.BORDER_THIN);
        cs2.setBorderRight(CellStyle.BORDER_THIN);
        cs2.setBorderTop(CellStyle.BORDER_THIN);
        cs2.setBorderBottom(CellStyle.BORDER_THIN);
        cs2.setAlignment(CellStyle.ALIGN_CENTER);
        //设置列名
        for(int i=0;i<columnNames.length;i++){
            Cell cell = row.createCell(i);
            cell.setCellValue(columnNames[i]);
            cell.setCellStyle(cs);
        }
        //设置每行每列的值
        for (int i = 1; i < list.size(); i++) {
            // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
            // 创建一行,在页sheet上
            Row row1 = sheet.createRow(i);
            // 在row行上创建一个方格
            for(int j=0;j<keys.length;j++){
                Cell cell = row1.createCell(j);
                cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString());
                cell.setCellStyle(cs2);
            }
        }
        return wb;
    }

}

 

 

4、controller层-SysUserController.java

package com.lin.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.lin.domain.data.ResData;
import com.lin.domain.data.ResListData;
import com.lin.domain.error.Error;
import com.lin.domain.sysUser.SysUser;
import com.lin.service.RoleService;
import com.lin.service.SysUserService;
import com.lin.utils.Aes;
import com.lin.utils.DateTimeUtils;
import com.lin.utils.ExcelUtil;
import com.lin.utils.ResponseUtils;
import com.lin.utils.Upload;
import com.lin.utils.Utils;
import com.sun.jersey.api.client.Client;

import net.sf.json.JSONObject;

/**
 * 后台用户-controller
 * @author libo
 */
@Controller
@RequestMapping("/sysUser")
public class SysUserController {

    @Resource
    private SysUserService sysUserService;
    @Resource
    private RoleService rService;

    @Value(value="${headImgPath}")    //后台图片保存地址
    private String headImgPath;

    @Value(value="${uploadHost}")
    private String uploadHost;    //项目host路径    

    @Value(value="${sysUserDefImg}")
    private String sysUserDefImg;    //系统用户默认头像
/**
     * 导出系统用户数据
     * @param req
     * @param res
     * @param name
     * @param phone
     * @param email
     * @param roleId
     * @param createTimeStart
     * @param createTimeEnd
     * @param status
     * @param departmentId
     * @throws IOException
     */
    @ResponseBody
    @RequestMapping(value="/exportSysUsers.do", method=RequestMethod.GET)
    public void exportSysUsers(HttpServletRequest req,HttpServletResponse res,
            String name, String phone, String email, Integer roleId, String createTimeStart, String createTimeEnd, 
            Integer status, Integer departmentId) throws IOException{
        Map<String,Object> params = new HashMap<String,Object>();
        params.put("name", "".equals(name) || null == name ? null : name);
        params.put("phone", "".equals(phone) || null == phone ? null : phone);
        params.put("email", "".equals(email) || null == email ? null : email);
        params.put("roleId", "".equals(roleId) || null == roleId ? null : roleId);
        params.put("createTimeStart", "".equals(createTimeStart) || null == createTimeStart ? null : createTimeStart+" 00:00:00");
        params.put("createTimeEnd", "".equals(createTimeEnd) || null == createTimeEnd ? null : createTimeEnd+" 23:59:59");
        params.put("status", "".equals(status) || null == status ? null : status);
        params.put("departmentId", "".equals(departmentId) || null == departmentId ? null : departmentId);

        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String formatTime = sdf.format(d);
        String fileName="系统用户表-"+formatTime;
        //填充projects数据
        List<SysUser> userList = sysUserService.getUserList(params);
        List<Map<String,Object>> list=createExcelRecord(userList);
        String columnNames[]={"姓名", "性别", "邮箱", "电话", "部门", "角色", "状态", "创建时间"};//列名
        String keys[] = {"name", "gender", "email", "phone", "department", "role", "status", "createTime"};//map中的key
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response参数,可以打开下载页面
        res.reset();
        res.setContentType("application/vnd.ms-excel;charset=utf-8");
        res.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
        ServletOutputStream out = res.getOutputStream();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(out);
            byte[] buff = new byte[2048];
            int bytesRead;
            // Simple read/write loop.
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (final IOException e) {
            throw e;
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
    }

    /**
     * 生成Excel数据
     * @param userList
     * @return
     */
    private List<Map<String, Object>> createExcelRecord(List<SysUser> userList) {
        List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("sheetName", "sheet1");
        listmap.add(map);
        SysUser user = null;
        for (int j = 0; j < userList.size(); j++) {
            user = userList.get(j);
            Map<String, Object> mapValue = new HashMap<String, Object>();
            mapValue.put("name", user.getName());
            mapValue.put("gender", (user.getGender()==1) ? "男":((user.getGender()==0) ? "女" : "保密"));
            mapValue.put("email", user.getEmail());
            mapValue.put("phone", user.getPhone());
            mapValue.put("department", user.getDepartment().getName());
            mapValue.put("role", user.getRole().getName());
            mapValue.put("status", user.getStatus()==1 ? "启用" : "禁用");
            mapValue.put("createTime", user.getCreateTime().substring(0, 19));
            listmap.add(mapValue);
        }
        return listmap;
    }


}

 

伍、前端部分

882828九五至尊手机版 13

     /**
         * 点击导出按钮,导出用户数据
         */
        $scope.exportData = function () {
            //请求接口的参数
            var name = $scope.nameSearch || '',                 //姓名
                phone = $scope.phoneSearch || '',              //电话
                email = $scope.emailSearch || '',              //邮箱
                roleId = $scope.roleIdSearch || '',            //角色id
                departmentId = $scope.departmentIdSearch || '', //部门id
                createTimeStart = $('#createTimeRange').val() ? $('#createTimeRange').val().substring(0,10)+' 00:00:00' : '',  //创建时间(起始时间)
                createTimeEnd = $('#createTimeRange').val() ? $('#createTimeRange').val().substring(13,23)+' 23:59:59' : '',   //创建时间(截止时间)
                status = $scope.statusSearch || '';             //状态(1=正常,0=禁用)

            var url = apiServ.sysUser.exportSysUsers.url+'?name='+name+'&phone='+phone+'&email='+email+'&roleId='+roleId+'&departmentId='+departmentId+
                '&createTimeStart='+createTimeStart+'&createTimeEnd='+createTimeEnd+'&status='+status;
            window.open(url);
        }

 

六、效果-导出的文书

882828九五至尊手机版 14

882828九五至尊手机版 15

  

  

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图