diff --git a/WebContent/Tenwa/Core/FlowManager/CopyFileToOther.jsp b/WebContent/Tenwa/Core/FlowManager/CopyFileToOther.jsp index 2495a3cd0..d632fd271 100644 --- a/WebContent/Tenwa/Core/FlowManager/CopyFileToOther.jsp +++ b/WebContent/Tenwa/Core/FlowManager/CopyFileToOther.jsp @@ -1,5 +1,11 @@ <%@page import="com.tenwa.reckon.copydata.FileCopyToOtherPath"%> <%@page import="com.tenwa.officetempalte.action.CreateOfficeAction"%> +<%@page import="com.tenwa.officetempalte.exportcallback.impl.ZipUtils"%> +<%@page import="java.text.SimpleDateFormat"%> +<%@page import="java.io.FileOutputStream"%> +<%@page import="java.io.File"%> +<%@page import="java.util.Date"%> +<%@page import="java.util.UUID"%> <%@page import="jbo.app.tenwa.doc.LC_COPYFILE_LOG"%> <%@page import="com.amarsoft.are.util.StringFunction"%> <%@page import="com.amarsoft.are.jbo.JBOFactory"%> @@ -14,14 +20,19 @@ String batchNos = CurPage.getParameter("batchNos"); String userid = CurPage.getParameter("userid"); String sParam = CurPage.getParameter("sParam"); - String templateNo = "8c0b32eefcf349e5b5f76d898df0bbbb"; - + String fileSavePath = CurPage.getParameter("fileSavePath"); + //创建临时路径 + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String time = sdf.format(new Date()); + String uuid=UUID.randomUUID().toString().replaceAll("-", ""); + String fileSavePath_temp = fileSavePath+"/"+time+uuid; FileCopyToOtherPath cp = new FileCopyToOtherPath(); cp.setContractNos(contractNos); cp.setBatchNos(batchNos); cp.setUserid(userid); + cp.setFileSavePath_temp(fileSavePath_temp); CreateOfficeAction coa = new CreateOfficeAction(); JBOTransaction tx = JBOFactory.createJBOTransaction(); @@ -36,8 +47,8 @@ String[] contractNoArray = contractNos.split("@"); String[] batchNoArray = batchNos.split("@"); for(int i=0;i<%@ include file="/IncludeEndAJAX.jsp"%> diff --git a/WebContent/Tenwa/Lease/Flow/Comm/LBAssetTransferRegistration/FileDownloadImportList.jsp b/WebContent/Tenwa/Lease/Flow/Comm/LBAssetTransferRegistration/FileDownloadImportList.jsp index 6fb9a3e87..8ddafc7d3 100644 --- a/WebContent/Tenwa/Lease/Flow/Comm/LBAssetTransferRegistration/FileDownloadImportList.jsp +++ b/WebContent/Tenwa/Lease/Flow/Comm/LBAssetTransferRegistration/FileDownloadImportList.jsp @@ -62,7 +62,11 @@ var contractNos = contractNoArray.join("@"); contractNos.replace(/\s+/g, ""); var batchNos = batchNoArray.join("@"); - var fileSavePath = "<%=CurConfig.getConfigure("FileCopyPath")%>" + var fileSavePath = "<%=CurConfig.getConfigure("FileCopyPath")%>"; + if(fileSavePath==""||fileSavePath==null){ + alert("文件保存路径未配置"); + return; + } var sUrl = "/Tenwa/Core/FlowManager/CopyFileToOther.jsp"; var param = "contractNos="+contractNos+"&batchNos="+batchNos+"&userid="+"<%=userid%>"+"&sParam="+sParam+"&fileSavePath="+fileSavePath; AsControl.RunJsp(sUrl,param,function(result){ diff --git a/WebContent/fileTemplate/绉熼噾鏀粯璁″垝{CONTRACT_NO} .xlsx b/WebContent/fileTemplate/绉熼噾鏀粯璁″垝{CONTRACT_NO} .xlsx index bf48a3624..1a20dbd79 100644 Binary files a/WebContent/fileTemplate/绉熼噾鏀粯璁″垝{CONTRACT_NO} .xlsx and b/WebContent/fileTemplate/绉熼噾鏀粯璁″垝{CONTRACT_NO} .xlsx differ diff --git a/calc/com/tenwa/reckon/copydata/FileCopyToOtherPath.java b/calc/com/tenwa/reckon/copydata/FileCopyToOtherPath.java index 824070c8d..7c7f51552 100644 --- a/calc/com/tenwa/reckon/copydata/FileCopyToOtherPath.java +++ b/calc/com/tenwa/reckon/copydata/FileCopyToOtherPath.java @@ -6,22 +6,12 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; - - - - - - - import jbo.app.tenwa.doc.LC_COPYFILE_LOG; - import org.apache.commons.io.FileUtils; - import com.amarsoft.are.jbo.BizObject; import com.amarsoft.are.jbo.BizObjectManager; import com.amarsoft.are.jbo.JBOFactory; import com.amarsoft.are.util.StringFunction; -import com.amarsoft.awe.Configure; import com.amarsoft.awe.util.Transaction; import com.tenwa.comm.util.jboutil.DataOperatorUtil; public class FileCopyToOtherPath { @@ -29,25 +19,8 @@ public class FileCopyToOtherPath { private String contractNos; private String batchNos; private String userid; + private String fileSavePath_temp; - public String getUserid() { - return userid; - } - public void setUserid(String userid) { - this.userid = userid; - } - public String getContractNo() { - return contractNos; - } - public void setContractNos(String contractNos) { - this.contractNos = contractNos; - } - public String getBatchNos() { - return batchNos; - } - public void setBatchNos(String batchNos) { - this.batchNos = batchNos; - } public String doCopy(String contractNo,String bacthNo,String type){ Transaction Sqlca = Transaction.createTransaction("als"); //原路径 @@ -57,8 +30,7 @@ public class FileCopyToOtherPath { //目标根目录 String rootPath; try { - Configure config = Configure.getInstance(); - rootPath = config.getConfigure("FileCopyPath"); + rootPath = fileSavePath_temp; String sql = "SELECT O.FULLPATH AS FULLPATH, CONCAT(REPLACE(LCI.CONTRACT_NO,'/','-'), '/','"+type+"','/', REPLACE(LDL.ONE_CLASSIFY,'/','-'), '/' , REPLACE(LDL.DOC_NAME,'/','-'), '/', REPLACE(O.FILENAME,'/','-')) AS TARGET_FILE_PATH FROM LB_DOCATTRIBUTE O" +" LEFT JOIN LB_DOCLIBRARY LDL ON LDL.ID = O.LIBRARY_ID" +" LEFT JOIN LB_DOCRELATIVE LDR ON LDL.RELATIVE_ID = LDR.ID" @@ -126,5 +98,29 @@ public class FileCopyToOtherPath { System.out.println("拷贝失败的合同:"+failNo); return failNo; } + public String getUserid() { + return userid; + } + public void setUserid(String userid) { + this.userid = userid; + } + public String getContractNo() { + return contractNos; + } + public void setContractNos(String contractNos) { + this.contractNos = contractNos; + } + public String getBatchNos() { + return batchNos; + } + public void setBatchNos(String batchNos) { + this.batchNos = batchNos; + } + public String getFileSavePath_temp() { + return fileSavePath_temp; + } + public void setFileSavePath_temp(String fileSavePath_temp) { + this.fileSavePath_temp = fileSavePath_temp; + } } diff --git a/src_core/com/tenwa/officetempalte/exportcallback/impl/ZipUtils.java b/src_core/com/tenwa/officetempalte/exportcallback/impl/ZipUtils.java new file mode 100644 index 000000000..b592cf674 --- /dev/null +++ b/src_core/com/tenwa/officetempalte/exportcallback/impl/ZipUtils.java @@ -0,0 +1,158 @@ +package com.tenwa.officetempalte.exportcallback.impl; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +public class ZipUtils { + private static final int BUFFER_SIZE = 2 * 1024; + /** + * 压缩成ZIP 方法1 + * @param srcDir + * 压缩文件夹路径 + * @param out + * 压缩文件输出流 + * @param KeepDirStructure + * 是否保留原来的目录结构, + * true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws RuntimeException + * 压缩失败会抛出运行时异常 + */ + public void toZip(String srcDir, OutputStream out,boolean KeepDirStructure) throws RuntimeException { + long start = System.currentTimeMillis(); + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(out); + File sourceFile = new File(srcDir); + compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure); + long end = System.currentTimeMillis(); + System.out.println("压缩完成,耗时:" + (end - start) + " ms"); + } catch (Exception e) { + throw new RuntimeException("zip error from ZipUtils", e); + } finally { + if (zos != null) { + try { + zos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 压缩成ZIP 方法2 + * @param srcFiles + * 需要压缩的文件列表 + * @param out + * 压缩文件输出流 + * @throws RuntimeException + * 压缩失败会抛出运行时异常 + */ + public void toZip(List srcFiles, OutputStream out) throws RuntimeException { + long start = System.currentTimeMillis(); + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(out); + for (File srcFile : srcFiles) { + byte[] buf = new byte[BUFFER_SIZE]; + zos.putNextEntry(new ZipEntry(srcFile.getName())); + int len; + FileInputStream in = new FileInputStream(srcFile); + while ((len = in.read(buf)) != -1) { + zos.write(buf, 0, len); + } + zos.closeEntry(); + in.close(); + } + long end = System.currentTimeMillis(); + System.out.println("压缩完成,耗时:" + (end - start) + " ms"); + } catch (Exception e) { + throw new RuntimeException("zip error from ZipUtils", e); + } finally { + if (zos != null) { + try { + zos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 递归压缩方法 + * @param sourceFile + * 源文件 + * @param zos + * zip输出流 + * @param name + * 压缩后的名称 + * @param KeepDirStructure + * 是否保留原来的目录结构, + * true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws Exception + */ + private void compress(File sourceFile, ZipOutputStream zos,String name,boolean KeepDirStructure) throws Exception { + byte[] buf = new byte[BUFFER_SIZE]; + if (sourceFile.isFile()) { + // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字 + zos.putNextEntry(new ZipEntry(name)); + // copy文件到zip输出流中 + int len; + FileInputStream in = new FileInputStream(sourceFile); + while ((len = in.read(buf)) != -1) { + zos.write(buf, 0, len); + } + // Complete the entry + zos.closeEntry(); + in.close(); + } else { + File[] listFiles = sourceFile.listFiles(); + if (listFiles == null || listFiles.length == 0) { + // 需要保留原来的文件结构时,需要对空文件夹进行处理 + if (KeepDirStructure) { + // 空文件夹的处理 + zos.putNextEntry(new ZipEntry(name + "/")); + // 没有文件,不需要文件的copy + zos.closeEntry(); + } + } else { + for (File file : listFiles) { + // 判断是否需要保留原来的文件结构 + if (KeepDirStructure) { + // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠, + // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了 + compress(file, zos, name + "/" + file.getName(),KeepDirStructure); + } else { + compress(file, zos, file.getName(), KeepDirStructure); + } + } + } + } + } + + /* + * 递归删除临时文件 + */ + + public void deleteFile(File f){ + File [] b = f.listFiles();//获取包含file对象对应的子目录或者文件 + for(int i =0;i