package com.ninefbank.smallpay.admin.reconmgr.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
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.servlet.ModelAndView;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.ninefbank.smallpay.admin.feemgr.dowload.ExeCreateFile;
import com.ninefbank.smallpay.admin.logmgr.service.impl.LogServiceImpl;
import com.ninefbank.smallpay.admin.reconmgr.service.IFinancialChannnelOrderService;
import com.ninefbank.smallpay.admin.reconmgr.vo.FinancialChannelOrderVO;
import com.ninefbank.smallpay.admin.util.FeeFlowExcelEnum;
import com.ninefbank.smallpay.admin.util.FinancialChannelOrderEnum;
import com.ninefbank.smallpay.admin.util.FinancialChannelOrderExcelView;
import com.ninefbank.smallpay.admin.util.LogUtils;
import com.ninefbank.smallpay.common.exception.ApplicationException;
import com.ninefbank.smallpay.common.util.DateUtil;
import com.ninefbank.smallpay.common.web.BaseController;
/**
* 金融渠道订单查询处理
*
* @author zhanghao
*
*/
@Controller
@RequestMapping("fcOrder")
public class FinancialChannelOrderController extends BaseController {
private static Logger logger = LoggerFactory.getLogger(LogServiceImpl.class);
@Autowired
private IFinancialChannnelOrderService fcOrderService;
/**
* 金融渠道订单查询
*
* @param paramsMap
* @return
* @throws ApplicationException
* @throws UnsupportedEncodingException
*/
@RequestMapping(value = "/query", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> teTaskErrorInfoQuery(@RequestParam Map<String, Object> paramsMap)
throws ApplicationException, UnsupportedEncodingException {
Integer pageSize = Integer.parseInt(paramsMap.get("rows").toString());
Integer pageNum = Integer.parseInt(paramsMap.get("page").toString());
String channelName = paramsMap.get("channelName") == null ?
null : paramsMap.get("channelName").toString();
String channelCode = paramsMap.get("channelCode") == null ? null : paramsMap.get("channelCode").toString();
String beginTime = paramsMap.get("beginTime") == null ? null : paramsMap.get("beginTime").toString();
String endTime = paramsMap.get("endTime") == null ? null : paramsMap.get("endTime").toString();
String envName = paramsMap.get("environmentName") == null ? null : paramsMap.get("environmentName").toString();
String status = paramsMap.get("status") == null ? null : paramsMap.get("status").toString();
String merNo = paramsMap.get("merNo") == null ? null : paramsMap.get("merNo").toString();
String merName = paramsMap.get("merName") == null ? null : paramsMap.get("merName").toString();
String payOrderNo = paramsMap.get("payOrderNo") == null ? null : paramsMap.get("payOrderNo").toString();
String channelOrderNo = paramsMap.get("channelOrderNo") == null ? null : paramsMap.get("channelOrderNo").toString();
paramsMap.clear();
logger.info("环境参数:"+envName);
PageBounds pageBounds = buildPageBounds(pageSize, pageNum, true);
if (null != channelName && !"".equals(channelName)) {
paramsMap.put("channelName", channelName);
}
if (null != channelCode && !"".equals(channelCode)) {
paramsMap.put("channelCode", channelCode);
}
if (null != beginTime && !"".equals(beginTime)) {
paramsMap.put("beginTime", beginTime);
}
if (null != endTime && !"".equals(endTime)) {
paramsMap.put("endTime", endTime.replace("00:00:00", "23:59:59"));
}
if (null != envName && !"".equals(envName)) {
paramsMap.put("envName", envName);
if(envName.equals("1")){
paramsMap.put("envName", "生产环境");
}else if(envName.equals("2")){
paramsMap.put("envName", "灰度环境");
}else if(envName.equals("3")){
paramsMap.put("envName", "测试环境");
}else if(envName.equals("4")){
paramsMap.put("envName", "开发环境");
}
logger.info("环境参数:envName.equals('1'):"+envName.equals("1")+
",envName.equals('2'):"+envName.equals("2")+
",envName.equals('3'):"+envName.equals("3")+
",envName.equals('4'):"+envName.equals("4"));
}
if (null != status && !"".equals(status)) {
paramsMap.put("status", status);
}
if (null != merNo && !"".equals(merNo)) {
paramsMap.put("merNo", merNo);
}
if (null != merName && !"".equals(merName)) {
paramsMap.put("merName", merName);
}
if (null != payOrderNo && !"".equals(payOrderNo)) {
paramsMap.put("payOrderNo", payOrderNo);
}
if (null != channelOrderNo && !"".equals(channelOrderNo)) {
paramsMap.put("channelOrderNo", channelOrderNo);
}
PageList<FinancialChannelOrderVO> fcoList = fcOrderService.queryWithPage(paramsMap, pageBounds);
return buildResult(pageSize, pageNum, fcoList);
}
/**
* 金融渠道订单信息下载
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/jxlExcel")
public ModelAndView viewJxlExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
String channelName = request.getParameter("channelName") == null ? null
:new String(request.getParameter("channelName").toString().getBytes("iso-8859-1"),"UTF-8") ;
String channelCode = request.getParameter("channelCode") == null ? null
: request.getParameter("channelCode").toString();
String beginTime = request.getParameter("bTime") == null ? null
: request.getParameter("bTime").toString();
String endTime = request.getParameter("eTime") == null ? null : request.getParameter("eTime").toString();
String envName = request.getParameter("sysEnviroment") == null ? null
: request.getParameter("sysEnviroment").toString();
String status = request.getParameter("status") == null ? null
: request.getParameter("status").toString();
String merNo = request.getParameter("merNo") == null ? null
: request.getParameter("merNo").toString();
String payOrderNo = request.getParameter("payOrderNo") == null ? null
: request.getParameter("payOrderNo").toString();
String channelOrderNo = request.getParameter("channelOrderNo") == null ? null
: request.getParameter("channelOrderNo").toString();
Map<String, Object> params = new HashMap<String, Object>();
if (null != channelName && !"".equals(channelName)) {
params.put("channelName", channelName);
}
if (null != channelCode && !"".equals(channelCode)) {
params.put("channelCode", channelCode);
}
if (null != beginTime && !"".equals(beginTime)) {
params.put("beginTime", beginTime);
}
if (null != endTime && !"".equals(endTime)) {
params.put("endTime", endTime.replace("00:00:00", "23:59:59"));
}
if (null != envName && !"".equals(envName)) {
//params.put("envName", envName);
if(envName.equals("1")){
params.put("envName", "生产环境");
}else if(envName.equals("2")){
params.put("envName", "灰度环境");
}else if(envName.equals("3")){
params.put("envName", "测试环境");
}else if(envName.equals("4")){
params.put("envName", "开发环境");
}
}
if (null != status && !"".equals(status)) {
params.put("status", status);
}
if (null != merNo && !"".equals(merNo)) {
params.put("merNo", merNo);
}
if (null != payOrderNo && !"".equals(payOrderNo)) {
params.put("payOrderNo", payOrderNo);
}
if (null != channelOrderNo && !"".equals(channelOrderNo)) {
params.put("channelOrderNo", channelOrderNo);
}
List<FinancialChannelOrderVO> fcOrderList = fcOrderService.downloadFile(params);
Map<String, Object> model = new HashMap<String, Object>();
model.put("excelenum", FinancialChannelOrderEnum.FREEZEORDER);// 清分明细文件下载
// excel模版
StringBuffer fileName = new StringBuffer().append(DateUtil.parseDateTime(new Date(), null))
.append("金融渠道订单查询记录.xls");
model.put("list", fcOrderList);
model.put("fileName", fileName.toString());// 文件名
LogUtils.addLogInfo("金融渠道订单查询", "金融渠道订单下载", "金融渠道订单下载:" + model.get("fileName"), LogUtils.LOG_SUCCESS, null);
return new ModelAndView(new FinancialChannelOrderExcelView(), model);
}
/**
* 金融渠道订单信息下载
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/jxlExcelNew")
public @ResponseBody Map<String, Object> jxlExcelNew(@RequestParam Map<String, Object> param) throws Exception {
String channelName = param.get("channelName")==null? "": new String(param.get("channelName").toString().getBytes("iso-8859-1"),"UTF-8");
String channelCode = param.get("channelCode")==null? "": param.get("channelCode").toString();
String beginTime = param.get("beginTime")==null? "": param.get("beginTime").toString();
String endTime = param.get("endTime")==null? "": param.get("endTime").toString();
String envName = param.get("sysEnviroment")==null? "": param.get("sysEnviroment").toString();
String status = param.get("status")==null? "": param.get("status").toString();
String merNo = param.get("merNo")==null? "": param.get("merNo").toString();
String merName = param.get("merName")==null? "": param.get("merName").toString();
String payOrderNo = param.get("payOrderNo")==null? "": param.get("payOrderNo").toString();
String channelOrderNo = param.get("channelOrderNo")==null? "": param.get("channelOrderNo").toString();
Map<String, Object> params = new HashMap<String, Object>();
if (null != channelName && !"".equals(channelName)) {
params.put("channelName", channelName);
}
if (null != channelCode && !"".equals(channelCode)) {
params.put("channelCode", channelCode);
}
if (null != beginTime && !"".equals(beginTime)) {
params.put("beginTime", beginTime);
}
if (null != endTime && !"".equals(endTime)) {
params.put("endTime", endTime.replace("00:00:00", "23:59:59"));
}
if (null != envName && !"".equals(envName)) {
//params.put("envName", envName);
if(envName.equals("1")){
params.put("envName", "生产环境");
}else if(envName.equals("2")){
params.put("envName", "灰度环境");
}else if(envName.equals("3")){
params.put("envName", "测试环境");
}else if(envName.equals("4")){
params.put("envName", "开发环境");
}
}
if (null != status && !"".equals(status)) {
params.put("status", status);
}
if (null != merNo && !"".equals(merNo)) {
params.put("merNo", merNo);
}
if (null != merName && !"".equals(merName)) {
params.put("merName", merName);
}
if (null != payOrderNo && !"".equals(payOrderNo)) {
params.put("payOrderNo", payOrderNo);
}
if (null != channelOrderNo && !"".equals(channelOrderNo)) {
params.put("channelOrderNo", channelOrderNo);
}
// List<FinancialChannelOrderVO> fcOrderList = fcOrderService.downloadFile(params);
// Map<String, Object> model = new HashMap<String, Object>();
// model.put("excelenum", FinancialChannelOrderEnum.FREEZEORDER);// 清分明细文件下载
// excel模版
StringBuffer fileName = new StringBuffer().append(DateUtil.parseDateTime(new Date(), null))
.append("金融渠道订单查询记录.xlsx");
ExecutorService single = Executors.newSingleThreadExecutor();
single.submit(new ExeCreateFile(params, fileName.toString(), "fcOrderService", FeeFlowExcelEnum.CHANNALEORDERQUERRY, "channel/orderQuerry/"));
single.shutdown();
return buildResult(fileName.toString());
// model.put("list", fcOrderList);
// model.put("fileName", fileName.toString());// 文件名
// LogUtils.addLogInfo("金融渠道订单查询", "金融渠道订单下载", "金融渠道订单下载:" + model.get("fileName"), LogUtils.LOG_SUCCESS, null);
// return new ModelAndView(new FinancialChannelOrderExcelView(), model);
}
}
1 package com.ninefbank.smallpay.admin.feemgr.dowload; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.lang.reflect.Method; 6 import java.util.ArrayList; 7 import java.util.List; 8 import java.util.Map; 9 10 import org.slf4j.Logger; 11 import org.slf4j.LoggerFactory; 12 13 import com.github.miemiedev.mybatis.paginator.domain.PageBounds; 14 import com.github.miemiedev.mybatis.paginator.domain.PageList; 15 import com.github.miemiedev.mybatis.paginator.domain.Paginator; 16 import com.ninefbank.smallpay.admin.common.Ftp; 17 import com.ninefbank.smallpay.admin.util.AppConstants; 18 import com.ninefbank.smallpay.admin.util.CommonExcelView; 19 import com.ninefbank.smallpay.admin.util.DataBaseConst; 20 import com.ninefbank.smallpay.admin.util.FeeFlowExcelEnum; 21 import com.ninefbank.smallpay.admin.util.FtpUtils; 22 import com.ninefbank.smallpay.common.util.DateUtil; 23 import com.ninefbank.smallpay.common.util.SpringContextHolder; 24 import com.ninefbank.smallpay.common.vo.FtpRequest; 25 26 public class ExeCreateFile implements Runnable { 27 private static Logger logger = LoggerFactory.getLogger(ExeCreateFile.class); 28 private Map<String, Object> params; 29 private String fileName; 30 private String queryBeanName; 31 private FeeFlowExcelEnum feeFlowExcelEnum; 32 private String newFilePath; 33 34 /** 35 * @param params:查询参数 36 * @param fileName:生成excel文件名称 37 * @param queryBeanName:分页查询的bean name 38 * @param feeFlowExcelEnum:excel模板 39 * @param newFilePath:生成的excel放到FTP上追加路径 40 */ 41 public ExeCreateFile(Map<String, Object> params, String fileName, String queryBeanName, FeeFlowExcelEnum feeFlowExcelEnum, String newFilePath){ 42 this.params = params; 43 this.fileName = fileName; 44 this.queryBeanName = queryBeanName; 45 this.feeFlowExcelEnum = feeFlowExcelEnum; 46 this.newFilePath = newFilePath; 47 } 48 49 @Override 50 public void run() { 51 try { 52 int rows = AppConstants.DOWNLOAD_PAGE_SIZE; 53 int page = 1; 54 PageBounds pageBounds = buildPageBounds(rows, page, true); 55 Object obj = SpringContextHolder.getBean(queryBeanName); 56 Class cls = obj.getClass(); 57 Method mth = cls.getMethod("queryWithPage", Map.class, PageBounds.class); 58 PageList list = (PageList)mth.invoke(obj, params, pageBounds); 59 Paginator paginator = list.getPaginator(); 60 if(list==null || list.size()==0){ 61 logger.info("下载数据为空,不予生成文件,请求参数:{}", new Object[]{params}); 62 return; 63 } 64 FtpUtils.createDir(DataBaseConst.TEMP_FEE_CREATE_PATH); 65 66 if(paginator != null){ 67 68 int totalPages = paginator.getTotalPages(); 69 //如果超过10万条则分book 70 if(totalPages>20){ 71 int bookSize = 0; 72 if(totalPages%20==0){ 73 bookSize = totalPages/20; 74 }else{ 75 bookSize = totalPages/20+1; 76 } 77 List<String> fileNameList = new ArrayList<String>(); 78 for(int i=0;i<bookSize;i++){ 79 CommonExcelView cev = new CommonExcelView(); 80 String branchFileName = createBranchFileName(fileName,i); 81 File file = new File(DataBaseConst.TEMP_FEE_CREATE_PATH + branchFileName); 82 cev.init(new FileOutputStream(file), feeFlowExcelEnum); 83 if(i==0){ 84 cev.buildExcelDocument(list); 85 } 86 logger.info("分页总数为:"+totalPages); 87 for(; page <= 20*(i+1);page++){ 88 if(page==1){page++;} 89 logger.info("总共页数:【{}】;当前页数:【{}】;当前文件名:【{}】", new Object[]{totalPages, page,branchFileName}); 90 pageBounds = buildPageBounds(rows, page, true); 91 logger.info("pageBounds 参数为:rows【{}】,page【{}】",rows,page); 92 list = (PageList)mth.invoke(obj, params, pageBounds); 93 94 cev.buildExcelDocument(list); 95 } 96 cev.closed(); 97 98 logger.info("创建excel【{}】成功", new Object[]{branchFileName}); 99 100 //将生成的文件上传到FTP 101 String localPath = DataBaseConst.TEMP_FEE_CREATE_PATH + branchFileName; 102 FtpRequest req = new FtpRequest(); 103 req.setIp(DataBaseConst.FTP_FEE_IP); 104 req.setPort(DataBaseConst.FTP_FEE_PORT); 105 req.setUserName(DataBaseConst.FTP_FEE_USERNAME); 106 req.setPwd(DataBaseConst.FTP_FEE_PASSWORD); 107 req.setDownloadPath(DataBaseConst.FTP_FEE_PATH + newFilePath); 108 req.setFileName(branchFileName); 109 req.setLocalPath(localPath); 110 111 FtpUtils.uploadFTP(req); 112 Ftp f=new Ftp(); 113 f.setIpAddr(DataBaseConst.FTP_FEE_IP); 114 f.setUserName(DataBaseConst.FTP_FEE_USERNAME); 115 f.setPwd(DataBaseConst.FTP_FEE_PASSWORD); 116 String currDate8 = DateUtil.getCurrentDateTime("yyyyMMdd"); 117 String ftpPath = DataBaseConst.FTP_FEE_PATH + newFilePath + currDate8 + "/"; 118 // FtpUtils.startDown(f, "e:/", ftpPath,req); 119 logger.info("将文件excel【{}】上传到FTP成功", new Object[]{branchFileName}); 120 121 File localFile = new File(localPath); 122 if(localFile.exists()){ 123 boolean flg = localFile.delete(); 124 logger.info("删除临时目录文件【{}】" + (flg?"成功":"失败"), new Object[]{localPath}); 125 } 126 } 127 128 }else{ 129 CommonExcelView cev = new CommonExcelView(); 130 File file = new File(DataBaseConst.TEMP_FEE_CREATE_PATH + fileName); 131 if(!file.exists()){ 132 file.createNewFile(); 133 } 134 cev.init(new FileOutputStream(file), feeFlowExcelEnum); 135 cev.buildExcelDocument(list); 136 137 if(paginator != null){ 138 139 if(totalPages > 1){ 140 for(page++; page <= totalPages; page++){ 141 logger.info("总共页数:【{}】;当前页数:【{}】", new Object[]{totalPages, page}); 142 pageBounds = buildPageBounds(rows, page, true); 143 144 list = (PageList)mth.invoke(obj, params, pageBounds); 145 146 cev.buildExcelDocument(list); 147 } 148 } 149 } 150 151 cev.closed(); 152 153 logger.info("创建excel【{}】成功", new Object[]{fileName}); 154 155 //将生成的文件上传到FTP 156 String localPath = DataBaseConst.TEMP_FEE_CREATE_PATH + fileName; 157 FtpRequest req = new FtpRequest(); 158 req.setIp(DataBaseConst.FTP_FEE_IP); 159 req.setPort(DataBaseConst.FTP_FEE_PORT); 160 req.setUserName(DataBaseConst.FTP_FEE_USERNAME); 161 req.setPwd(DataBaseConst.FTP_FEE_PASSWORD); 162 req.setDownloadPath(DataBaseConst.FTP_FEE_PATH + newFilePath); 163 req.setFileName(fileName); 164 req.setLocalPath(localPath); 165 166 FtpUtils.uploadFTP(req); 167 168 logger.info("将文件excel【{}】上传到FTP成功", new Object[]{fileName}); 169 Ftp f=new Ftp(); 170 f.setIpAddr(DataBaseConst.FTP_FEE_IP); 171 f.setUserName(DataBaseConst.FTP_FEE_USERNAME); 172 f.setPwd(DataBaseConst.FTP_FEE_PASSWORD); 173 String currDate8 = DateUtil.getCurrentDateTime("yyyyMMdd"); 174 String ftpPath = DataBaseConst.FTP_FEE_PATH + newFilePath + currDate8 + "/"; 175 FtpUtils.startDown(f, "e:/", ftpPath,req); 176 177 File localFile = new File(localPath); 178 if(localFile.exists()){ 179 boolean flg = localFile.delete(); 180 logger.info("删除临时目录文件【{}】" + (flg?"成功":"失败"), new Object[]{localPath}); 181 } 182 } 183 184 185 186 187 } 188 189 190 191 } catch (Exception e) { 192 logger.error("创建excel异常,fileName:{}", new Object[]{fileName}, e); 193 } 194 195 } 196 197 private String createBranchFileName(String fileName, int i) { 198 String fileNameNoSuffix = fileName.substring(0,fileName.indexOf(".")); 199 String fileNameSuffix = fileName.substring(fileName.indexOf("."),fileName.length()); 200 logger.info("创建book名-无后缀:"+fileNameNoSuffix+",后缀:"+fileNameSuffix); 201 String newBranchFileName = fileNameNoSuffix+"_"+i+fileNameSuffix; 202 logger.info("创建book名:"+newBranchFileName); 203 return newBranchFileName; 204 205 } 206 207 private PageBounds buildPageBounds(Integer pageSize, Integer currentPageNum, Boolean isContainsTotalCount){ 208 if(null == pageSize){ 209 pageSize = 10; 210 } 211 if(null == currentPageNum){ 212 currentPageNum = 1; 213 } 214 if(null == isContainsTotalCount){ 215 isContainsTotalCount = true; 216 } 217 PageBounds pageBounds = new PageBounds(); 218 pageBounds.setPage(currentPageNum); 219 pageBounds.setLimit(pageSize); 220 pageBounds.setContainsTotalCount(isContainsTotalCount); 221 return pageBounds; 222 } 223 224 }
以下是ftp工具类:
1 package com.ninefbank.smallpay.admin.util; 2 3 import java.io.BufferedOutputStream; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 import org.apache.commons.lang3.StringUtils; 10 import org.apache.commons.net.ftp.FTPClient; 11 import org.apache.commons.net.ftp.FTPFile; 12 import org.slf4j.Logger; 13 import org.slf4j.LoggerFactory; 14 15 import com.jcraft.jsch.Channel; 16 import com.jcraft.jsch.ChannelSftp; 17 import com.jcraft.jsch.JSch; 18 import com.jcraft.jsch.Session; 19 import com.ninefbank.smallpay.common.util.DateUtil; 20 import com.ninefbank.smallpay.common.vo.FtpRequest; 21 22 public class FtpUtils { 23 private static Logger logger = LoggerFactory.getLogger(FtpUtils.class); 24 25 public static boolean uploadFTP(FtpRequest reqs){ 26 boolean suc = false; 27 String ip = reqs.getIp(); 28 int port = Integer.parseInt(reqs.getPort()); 29 String userName = reqs.getUserName(); 30 String userPwd = reqs.getPwd(); 31 String path = reqs.getDownloadPath(); 32 String fileName = reqs.getFileName(); 33 String localPath = reqs.getLocalPath(); 34 FTPClient ftpClient = new FTPClient(); 35 FileInputStream fis = null; 36 37 try { 38 // 1.连接服务器 39 ftpClient.connect(ip, port); 40 // 登录 41 ftpClient.login(userName, userPwd); 42 ftpClient.setControlEncoding("UTF-8"); 43 // 设置传输协议 44 ftpClient.enterLocalPassiveMode(); 45 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 46 47 if (path != null && path.length() > 0) { 48 String currDate8 = DateUtil.getCurrentDateTime("yyyyMMdd"); 49 path = path + currDate8 + "/"; 50 if(!createFTPDir(path, ftpClient)){ 51 return suc; 52 } 53 ftpClient.changeWorkingDirectory(path); 54 File file = new File(localPath); 55 fis = new FileInputStream(file); 56 suc = ftpClient.storeFile(new String(file.getName().getBytes("GBK"), "iso-8859-1"), fis); 57 logger.info(file.getName() + "上传" + (suc?"成功":"失败")); 58 } 59 60 61 } catch (Exception e) { 62 logger.error(fileName + "上传失败", e); 63 } finally { 64 try { 65 if(null != fis) { 66 fis.close(); 67 ftpClient.logout(); 68 } 69 if(ftpClient.isConnected()){ 70 ftpClient.disconnect(); 71 } 72 } catch (Exception e) { 73 logger.error("关闭连接/流异常", e); 74 } 75 } 76 77 return suc; 78 } 79 80 private static boolean createFTPDir(String remote, FTPClient ftpClient) { 81 boolean flag = false; 82 try { 83 String dir = remote; 84 if("/".equalsIgnoreCase(dir) || ftpClient.changeWorkingDirectory(dir)){ 85 flag = true; 86 87 }else{ 88 int start = 0; 89 int end = 0; 90 if (dir.startsWith("/")) { 91 start = 1; 92 } else { 93 start = 0; 94 } 95 end = dir.indexOf("/", start); 96 String path = ""; 97 String paths = ""; 98 while (true) { 99 100 String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1"); 101 path = path + "/" + subDirectory; 102 if (!existFile(path, ftpClient)) { 103 if (ftpClient.makeDirectory(subDirectory)) { 104 ftpClient.changeWorkingDirectory(subDirectory); 105 } else { 106 logger.info("创建目录[" + subDirectory + "]失败,该目录已存在"); 107 ftpClient.changeWorkingDirectory(subDirectory); 108 } 109 } else { 110 ftpClient.changeWorkingDirectory(subDirectory); 111 } 112 113 paths = paths + "/" + subDirectory; 114 start = end + 1; 115 end = dir.indexOf("/", start); 116 // 检查所有目录是否创建完毕 117 if (end <= start) { 118 break; 119 } 120 } 121 flag = true; 122 } 123 124 } catch (Exception e) { 125 logger.error("创建FTP路径异常,路径信息:{}", new Object[]{remote}, e); 126 } 127 128 return flag; 129 } 130 131 //判断ftp服务器文件是否存在 132 private static boolean existFile(String path, FTPClient ftpClient) throws IOException{ 133 boolean flag = false; 134 FTPFile[] ftpFileArr = ftpClient.listFiles(path); 135 if (ftpFileArr.length > 0) { 136 flag = true; 137 } 138 139 return flag; 140 } 141 142 /** 143 * downLoadFileFTP(使用ftp协议)<br/> 144 * @param reqs 145 * @return 146 * String 147 * @exception 148 * @since 1.0.0 149 */ 150 public static boolean downLoadFileFTP(FtpRequest reqs){ 151 String ip = reqs.getIp(); 152 int port = Integer.parseInt(reqs.getPort()); 153 String userName = reqs.getUserName(); 154 String userPwd = reqs.getPwd(); 155 String path = reqs.getDownloadPath(); 156 String fileName = reqs.getFileName(); 157 String localPath = reqs.getLocalPath(); 158 FTPClient ftpClient = new FTPClient(); 159 BufferedOutputStream outStream = null; 160 boolean success = false; 161 try { 162 // 1.连接服务器 163 ftpClient.connect(ip, port); 164 // 登录 165 ftpClient.login(userName, userPwd); 166 ftpClient.setControlEncoding("UTF-8"); 167 // 设置传输协议 168 ftpClient.enterLocalPassiveMode(); 169 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 170 ftpClient.setListHiddenFiles(true); 171 172 String localDir = localPath.substring(0, localPath.lastIndexOf('/') + 1); 173 createDir(localDir); 174 175 File file = new File(localPath); 176 if(!file.exists()){ 177 boolean flag = file.createNewFile(); 178 logger.info("创建本地路径结果:" + flag); 179 } 180 181 if (path != null && path.length() > 0) { 182 ftpClient.changeWorkingDirectory(path); 183 } 184 185 outStream = new BufferedOutputStream(new FileOutputStream(localPath)); 186 logger.info("开始下载" + fileName); 187 success = ftpClient.retrieveFile(fileName, outStream); 188 if(success){ 189 logger.info("文件成功下载到" + localPath); 190 191 }else{ 192 logger.error(fileName + "下载失败"); 193 } 194 } catch (Exception e) { 195 logger.error(fileName + "下载失败", e); 196 }finally { 197 try { 198 if (null != outStream) { 199 outStream.flush(); 200 outStream.close(); 201 ftpClient.logout(); 202 } 203 if(ftpClient.isConnected()){ 204 ftpClient.disconnect(); 205 } 206 } catch (Exception e) { 207 logger.error("关闭连接/流异常", e); 208 } 209 } 210 211 return success; 212 } 213 214 /** 215 * downLoadFileSFTP(使用sftp协议)<br/> 216 * @param reqs 217 * @return 218 * String 219 * @exception 220 * @since 1.0.0 221 */ 222 public static boolean downLoadFileSFTP(FtpRequest reqs){ 223 String ip = reqs.getIp(); 224 String port = reqs.getPort(); 225 String userName = reqs.getUserName(); 226 String userPwd = reqs.getPwd(); 227 String path = reqs.getDownloadPath(); 228 String fileName = reqs.getFileName(); 229 String localPath = reqs.getLocalPath(); 230 Session session = null; 231 Channel channel = null; 232 JSch jsch = new JSch(); 233 boolean success = false; 234 235 try { 236 // 1.连接服务器 237 if(StringUtils.isEmpty(port)){ 238 //连接服务器,采用默认端口 239 session = jsch.getSession(userName, ip); 240 }else{ 241 //采用指定的端口连接服务器 242 session = jsch.getSession(userName, ip , Integer.parseInt(port)); 243 } 244 //如果服务器连接不上,则抛出异常 245 if (session == null) { 246 logger.error("下载文件异常 session is null"); 247 return success; 248 } 249 250 //设置登陆主机的密码 251 session.setPassword(userPwd); 252 //设置第一次登陆的时候提示,可选值:(ask | yes | no) 253 session.setConfig("StrictHostKeyChecking", "no"); 254 //设置登陆超时时间 255 session.connect(30000); 256 257 //创建sftp通信通道 258 channel = session.openChannel("sftp"); 259 channel.connect(1000); 260 ChannelSftp sftp = (ChannelSftp)channel; 261 262 //进入服务器指定的文件夹 263 sftp.cd(path); 264 265 String localDir = localPath.substring(0, localPath.lastIndexOf('/') + 1); 266 createDir(localDir); 267 268 File file = new File(localPath); 269 if(!file.exists()){ 270 boolean flag = file.createNewFile(); 271 logger.info("创建本地路径结果:" + flag); 272 } 273 //下载文件 274 sftp.get(fileName, new FileOutputStream(file)); 275 logger.info("文件成功下载到" + localPath); 276 277 success = true; 278 279 } catch (Exception e) { 280 logger.error(fileName + "下载失败", e); 281 }finally { 282 session.disconnect(); 283 channel.disconnect(); 284 } 285 286 return success; 287 } 288 289 public static boolean createDir(String destDirName) { 290 File dir = new File(destDirName); 291 if (dir.exists()) { 292 logger.info("创建目录" + destDirName + "失败,目标目录已经存在"); 293 return false; 294 } 295 if (!destDirName.endsWith(File.separator)) { 296 destDirName = destDirName + File.separator; 297 } 298 //创建目录 299 if (dir.mkdirs()) { 300 logger.info("创建目录" + destDirName + "成功!"); 301 return true; 302 } else { 303 logger.info("创建目录" + destDirName + "失败!"); 304 return false; 305 } 306 } 307 308 }
excell 文件每十万一个文件,上传完毕之后删掉临时目录下的文件(部署的服务器app路径下)
忘了写最前面的html:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)