@RequestMapping(value = "/meter/fault/exportFault")
@ResponseBody
public void exportFault(HttpServletRequest request,
HttpServletResponse response,Fault fault)
throws UnsupportedEncodingException {
List<String> files=new ArrayList<String>();
String resultPath="";
String curTime=DateUtil.toString(new Date(), "yyyyMMddHHmmss");
//在服务端创建文件夹
if("".equals(realPath)) {
realPath = request.getSession().getServletContext().getRealPath("");
}
resultPath=realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/"+curTime;
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
FaultExcel faultExcel = new FaultExcel();
String[] headers = {"区册","户号","户名","表号","地址","故障类型","故障描述","抄表日期","抄表员","照片"};
/*以上为获得表格表头*/
String filename = "故障记录"
+ DateUtil.toString(new Date(), "yyyyMMdd");
response.setContentType("octets/stream");
response.addHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(filename, "UTF-8") + ".xls");
List<List<Object>> dataset = new ArrayList<List<Object>>();
try {
/*以下为获得表单内容*/
//先获得符合条件的员工基本信息
List<Fault> basics=faultService.getFalutForExport(fault);
if(null!=basics){
for (Fault cbasic: basics) {
List<Object> dataList = new ArrayList<Object>();
if(null!=cbasic.getMeter().getArea()){
dataList.add(cbasic.getMeter().getArea().getName());
}else{
dataList.add("");
}
dataList.add(cbasic.getMeter().getAccountno());
dataList.add(cbasic.getMeter().getAccountname());
dataList.add(cbasic.getMeter().getMeterno());
dataList.add(cbasic.getMeter().getAdress());
dataList.add(cbasic.getFaulttypeName());
dataList.add(cbasic.getDescription());
dataList.add(cbasic.getCopydate());
dataList.add(cbasic.getCopyuserName());
List<FaultImg> imgs=cbasic.getImgs();
for (FaultImg faultImg : imgs) {
String[] arr=faultImg.getFilepath().split("/");
files.add(faultImg.getFilepath());
dataList.add(arr[arr.length-1]);
}
dataset.add(dataList);
}
}
addFiles(files,response,resultPath+"/imgs");
OutputStream out = new FileOutputStream(resultPath+"/"+filename+".xls");
faultExcel.exportExcel("故障记录", headers, dataset, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//将服务器上存放Excel的文件夹打成zip包
zipFilesDiGui(resultPath,resultPath+".zip");
//弹出下载框供用户下载
this.downFile(response,realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/", curTime+".zip");
// 将存放在服务器上的temp文件删除掉
File deleteFile=new File(realPath +"/UploadFile/temp");
if(deleteFile.exists()){
deleteFile(deleteFile);
}
}
private void addFiles(List<String> files, HttpServletResponse response,
String resultPath){
//查出当前用户的附件
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
OutputStream out = null;
try {
for (String url : files) {
File f = new File(realPath + url);
if (f.exists()) {
String filename=url.split("/")[url.split("/").length-1];
out = new FileOutputStream(resultPath+"/"+filename);
response.reset();
response.setHeader(
"Content-Disposition",
"attachment; filename="
+ URLEncoder.encode(filename,
"UTF-8"));
response.setContentType("application/octet-stream; charset=utf-8");
out.write(FileUtils.readFileToByteArray(f));
out.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void zipFilesDiGui(String source,String destinct) {
List fileList=loadFilename(new File(source));
try {
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(destinct)));
byte[] buffere=new byte[8192];
int length;
BufferedInputStream bis;
for(int i=0;i<fileList.size();i++) {
File file=(File) fileList.get(i);
zos.putNextEntry(new ZipEntry(getEntryName(source,file)));
bis=new BufferedInputStream(new FileInputStream(file));
while(true) {
length=bis.read(buffere);
if(length==-1) break;
zos.write(buffere,0,length);
}
bis.close();
zos.closeEntry();
}
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getEntryName(String base, File file) {
File baseFile=new File(base);
String filename=file.getPath();
if(baseFile.getParentFile().getParentFile()==null)
return filename.substring(baseFile.getParent().length());
return filename.substring(baseFile.getParent().length()+1);
}
private List loadFilename(File file) {
List filenameList=new ArrayList();
if(file.isFile()) {
filenameList.add(file);
}
if(file.isDirectory()) {
for(File f:file.listFiles()) {
filenameList.addAll(loadFilename(f));
}
}
return filenameList;
}
private void deleteFile(File deleteFile) {
if(deleteFile.isDirectory()){
String[] child=deleteFile.list();
for(int i=0;i<child.length;i++){
deleteFile(new File(deleteFile, child[i]));
}
}
deleteFile.delete();
}
public void downFile(HttpServletResponse response,String serverPath, String str) {
try {
String path = serverPath +"/"+ str;
File file = new File(path);
if (file.exists()) {
InputStream ins = new FileInputStream(path);
BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面
OutputStream outs = response.getOutputStream();// 获取文件输出IO流
BufferedOutputStream bouts = new BufferedOutputStream(outs);
response.setContentType("application/x-download");// 设置response内容的类型
response.setHeader(
"Content-disposition",
"attachment;filename="
+ URLEncoder.encode(str, "GBK"));// 设置头部信息
int bytesRead = 0;
byte[] buffer = new byte[8192];
//开始向网络传输文件流
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();// 这里一定要调用flush()方法
ins.close();
bins.close();
outs.close();
bouts.close();
} else {
System.out.println("没有找到文件哎!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
@ResponseBody
public void exportFault(HttpServletRequest request,
HttpServletResponse response,Fault fault)
throws UnsupportedEncodingException {
List<String> files=new ArrayList<String>();
String resultPath="";
String curTime=DateUtil.toString(new Date(), "yyyyMMddHHmmss");
//在服务端创建文件夹
if("".equals(realPath)) {
realPath = request.getSession().getServletContext().getRealPath("");
}
resultPath=realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/"+curTime;
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
FaultExcel faultExcel = new FaultExcel();
String[] headers = {"区册","户号","户名","表号","地址","故障类型","故障描述","抄表日期","抄表员","照片"};
/*以上为获得表格表头*/
String filename = "故障记录"
+ DateUtil.toString(new Date(), "yyyyMMdd");
response.setContentType("octets/stream");
response.addHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(filename, "UTF-8") + ".xls");
List<List<Object>> dataset = new ArrayList<List<Object>>();
try {
/*以下为获得表单内容*/
//先获得符合条件的员工基本信息
List<Fault> basics=faultService.getFalutForExport(fault);
if(null!=basics){
for (Fault cbasic: basics) {
List<Object> dataList = new ArrayList<Object>();
if(null!=cbasic.getMeter().getArea()){
dataList.add(cbasic.getMeter().getArea().getName());
}else{
dataList.add("");
}
dataList.add(cbasic.getMeter().getAccountno());
dataList.add(cbasic.getMeter().getAccountname());
dataList.add(cbasic.getMeter().getMeterno());
dataList.add(cbasic.getMeter().getAdress());
dataList.add(cbasic.getFaulttypeName());
dataList.add(cbasic.getDescription());
dataList.add(cbasic.getCopydate());
dataList.add(cbasic.getCopyuserName());
List<FaultImg> imgs=cbasic.getImgs();
for (FaultImg faultImg : imgs) {
String[] arr=faultImg.getFilepath().split("/");
files.add(faultImg.getFilepath());
dataList.add(arr[arr.length-1]);
}
dataset.add(dataList);
}
}
addFiles(files,response,resultPath+"/imgs");
OutputStream out = new FileOutputStream(resultPath+"/"+filename+".xls");
faultExcel.exportExcel("故障记录", headers, dataset, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
//将服务器上存放Excel的文件夹打成zip包
zipFilesDiGui(resultPath,resultPath+".zip");
//弹出下载框供用户下载
this.downFile(response,realPath +"/UploadFile/temp/"+ThreadVariable.getUser().getName()+"/", curTime+".zip");
// 将存放在服务器上的temp文件删除掉
File deleteFile=new File(realPath +"/UploadFile/temp");
if(deleteFile.exists()){
deleteFile(deleteFile);
}
}
private void addFiles(List<String> files, HttpServletResponse response,
String resultPath){
//查出当前用户的附件
File file = new File(resultPath);
if(!file.exists()){
file.mkdirs();
}
OutputStream out = null;
try {
for (String url : files) {
File f = new File(realPath + url);
if (f.exists()) {
String filename=url.split("/")[url.split("/").length-1];
out = new FileOutputStream(resultPath+"/"+filename);
response.reset();
response.setHeader(
"Content-Disposition",
"attachment; filename="
+ URLEncoder.encode(filename,
"UTF-8"));
response.setContentType("application/octet-stream; charset=utf-8");
out.write(FileUtils.readFileToByteArray(f));
out.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void zipFilesDiGui(String source,String destinct) {
List fileList=loadFilename(new File(source));
try {
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(destinct)));
byte[] buffere=new byte[8192];
int length;
BufferedInputStream bis;
for(int i=0;i<fileList.size();i++) {
File file=(File) fileList.get(i);
zos.putNextEntry(new ZipEntry(getEntryName(source,file)));
bis=new BufferedInputStream(new FileInputStream(file));
while(true) {
length=bis.read(buffere);
if(length==-1) break;
zos.write(buffere,0,length);
}
bis.close();
zos.closeEntry();
}
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getEntryName(String base, File file) {
File baseFile=new File(base);
String filename=file.getPath();
if(baseFile.getParentFile().getParentFile()==null)
return filename.substring(baseFile.getParent().length());
return filename.substring(baseFile.getParent().length()+1);
}
private List loadFilename(File file) {
List filenameList=new ArrayList();
if(file.isFile()) {
filenameList.add(file);
}
if(file.isDirectory()) {
for(File f:file.listFiles()) {
filenameList.addAll(loadFilename(f));
}
}
return filenameList;
}
private void deleteFile(File deleteFile) {
if(deleteFile.isDirectory()){
String[] child=deleteFile.list();
for(int i=0;i<child.length;i++){
deleteFile(new File(deleteFile, child[i]));
}
}
deleteFile.delete();
}
public void downFile(HttpServletResponse response,String serverPath, String str) {
try {
String path = serverPath +"/"+ str;
File file = new File(path);
if (file.exists()) {
InputStream ins = new FileInputStream(path);
BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面
OutputStream outs = response.getOutputStream();// 获取文件输出IO流
BufferedOutputStream bouts = new BufferedOutputStream(outs);
response.setContentType("application/x-download");// 设置response内容的类型
response.setHeader(
"Content-disposition",
"attachment;filename="
+ URLEncoder.encode(str, "GBK"));// 设置头部信息
int bytesRead = 0;
byte[] buffer = new byte[8192];
//开始向网络传输文件流
while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
bouts.write(buffer, 0, bytesRead);
}
bouts.flush();// 这里一定要调用flush()方法
ins.close();
bins.close();
outs.close();
bouts.close();
} else {
System.out.println("没有找到文件哎!");
}
} catch (IOException e) {
e.printStackTrace();
}
}