package com.web.ftp.service.internal; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional; import javax.servlet.http.HttpServletResponse; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.transform.Transformers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.CallableStatementCreator; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import com.app.base.data.ApiResponseResult; import com.app.base.service.FtpClientService; import com.app.query.dao.Parameter; import com.app.query.dao.SQLParameter; import com.web.ftp.dao.FileCheckDao; import com.web.ftp.service.FileCheckService; @Service(value = "fileCheckService") @Transactional(propagation = Propagation.REQUIRED) public class FileCheckImpl implements FileCheckService { @Autowired private FileCheckDao fileCheckDao; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private FtpClientService ftpClientService; @Override public ApiResponseResult uploadFilepqc(String factory, String company,String functionName, String username, String billNo, int type, String note, MultipartFile[] files) throws Exception { // TODO Auto-generated method stub List a = getInfo(factory, company,functionName , billNo); System.out.println(a); if (a.get(0).equals("0")) { try { for (MultipartFile file : files) { if(file != null){ String a6 = a.get(6);// .replace("/",File.separator); ApiResponseResult ar = ftpClientService.uploadFile(a.get(2), Integer.parseInt(a.get(5)), a.get(3), a.get(4), a6, file.getOriginalFilename(), new ByteArrayInputStream(file.getBytes())); if (ar.getStatus().equals("0")) { // ftp上传成功 List b = this.getpqcFile(factory, company, username,functionName, billNo, type, 0, file.getOriginalFilename(), note, 0); System.out.println(b); } } } return ApiResponseResult.success("操作成功!"); } catch (Exception e) { System.out.println(e.toString()); return ApiResponseResult.failure("上传文件到FTP失败!").data(e.toString()); } } else { return ApiResponseResult.failure("获取FTP信息失败!").data(a.get(1)); } } /** * * 获取ftp的信息 * * @param factory * @param company * @param uaername * @param mid * @param type1 * @return */ public List getInfo(String factory, String company, String functionName, String billNo) { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call app_ftpfile_getpath(?,?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, functionName); cs.setString(4, billNo); cs.registerOutParameter(5, java.sql.Types.INTEGER);// 注册输出参数 cs.registerOutParameter(6, java.sql.Types.VARCHAR);// 注册输出参数 cs.registerOutParameter(7, java.sql.Types.VARCHAR);// 注册输出参数 cs.registerOutParameter(8, java.sql.Types.VARCHAR);// 注册输出参数 cs.registerOutParameter(9, java.sql.Types.VARCHAR);// 注册输出参数 cs.registerOutParameter(10, java.sql.Types.INTEGER);// 注册输出参数 cs.registerOutParameter(11, java.sql.Types.VARCHAR);// 注册输出参数 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList(); cs.execute(); result.add(cs.getString(5)); result.add(cs.getString(6)); result.add(cs.getString(7)); result.add(cs.getString(8)); result.add(cs.getString(9)); result.add(cs.getString(10)); result.add(cs.getString(11)); return result; } }); return resultList; } /** * 文件操作 * * @param factory * @param company * @param uaername * @param mid * @param type1 * @param Dmltype * @param filename * @param note * @param fileid * @return */ public List getpqcFile(String factory, String company, String uaername, String functionName,String billNo, int type1, int Dmltype, String filename, String note, Integer fileid) { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call app_ftpfile_insertpath(?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, uaername); cs.setString(4, functionName); cs.setString(5, billNo);// cs.setLong(6, Dmltype);// 操作类型,0是新增,1是修改,2是删除 cs.setString(7, filename);// 文件名 cs.setLong(8, fileid);// 附件记录ID,Pi_Dmltype<>0的时候不允许为空 cs.registerOutParameter(9, java.sql.Types.INTEGER);// 注册输出参数 cs.registerOutParameter(10, java.sql.Types.VARCHAR);// 注册输出参数 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList(); cs.execute(); result.add(cs.getString(9)); result.add(cs.getString(10)); return result; } }); return resultList; } //获取列表 @Override public ApiResponseResult getFilesList(String billNo,String functionName) throws Exception { // TODO Auto-generated method stub // List> countList1 = fileCheckDao.getFileList(mid); List a = this.getRfFileList(billNo,functionName); /* * if(countList1.size() == 0){ return ApiResponseResult.failure("文件为空"); * } return ApiResponseResult.success("").data(countList1); */ System.out.println(a); if (a.get(0).equals("0")) { String[] fq = a.get(2).substring(0, a.get(2).length() - 1).split("#"); String[] reno = a.get(3).substring(0, a.get(3).length() - 1).split("#"); String[] cd = a.get(4).substring(0, a.get(4).length() - 1).split("#"); String[] fu = a.get(5).substring(0, a.get(5).length() - 1).split("#"); List l = new ArrayList(); for (int i = 0; i < reno.length; i++) { Map m = new HashMap(); m.put("FATTACH", fq[i]); m.put("RENO", reno[i]); m.put("CD", cd[i]); m.put("FURL", fu[i]); l.add(m); } return ApiResponseResult.success().data(l); } else { return ApiResponseResult.failure(a.get(1)); } } //获取列表-数据处理 public List getRfFileList(String billNo,String functionName) { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call app_ftpfile_list(?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, functionName); cs.setString(2, billNo); cs.registerOutParameter(3, java.sql.Types.INTEGER);// 注册输出参数 // 返回类型 返回标识 cs.registerOutParameter(4, java.sql.Types.VARCHAR);// 注册输出参数 // 返回类型 返回信息 cs.registerOutParameter(5, -10);// 注册输出参数 返回类型 返回批次号游标 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList(); cs.execute(); result.add(cs.getString(3)); result.add(cs.getString(4)); // 游标处理 ResultSet rs = (ResultSet) cs.getObject(5); String n1 = ""; String n2 = ""; String n3 = ""; String n4 = ""; while (rs.next()) { n1 += rs.getString("FATTACH") + "#"; n2 += rs.getString("BILL_NO") + "#"; n3 += rs.getString("CD") + "#"; n4 += rs.getString("FURL") + "#"; } result.add(n1); result.add(n2); result.add(n3); result.add(n4); return result; } }); return resultList; } @Override public ApiResponseResult onlineView(String url, String fname, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub // 获取ftp地址账号密码以及端口号 String ip = fileCheckDao.queryFtpServerIP().get(0).get("PV").toString(); String num = fileCheckDao.queryFtpPortNum().get(0).get("PV").toString(); String name = fileCheckDao.queryFtpUser().get(0).get("PV").toString(); String psw = fileCheckDao.queryFtpPsw().get(0).get("PV").toString(); ApiResponseResult result = ftpClientService.download(ip, Integer.parseInt(num), name, psw, url, fname); try { String fileName = URLEncoder.encode(fname, "UTF-8"); // 文件名称 // String extName = fsFile.getBsFileType(); //文件后缀名 response.setContentType("image/png"); response.addHeader("Content-Disposition", "inline;filename=" + fileName); // response.addHeader("Content-Length", "" + // fsFile.getBsFileSize()); // if(".png".equals(extName)){ // response.setContentType("image/png"); // } OutputStream os = response.getOutputStream(); byte[] bytes = (byte[]) result.getData(); os.write(bytes); os.flush(); os.close(); } catch (Exception e) { System.out.println(e.toString()); } return null; } @Override public ApiResponseResult onlineViewPdf(String url, int port, String userName, String password, String path, String fileName,String root, HttpServletResponse response) throws IOException { // TODO Auto-generated method stub String psw=password.replace(" ","+"); ApiResponseResult result = ftpClientService.download(url, port, userName, password, path, fileName,root); String[] split = fileName.split("\\."); String s = split[split.length - 1]; String name = URLEncoder.encode(fileName, "UTF-8"); // 文件名称 if(s.equals("xlsx")||s.equals("xls")){ response.setContentType("application/vnd.ms-excel"); // toPdfBytes(LOCAL_HOST,LOCAL_PORT,result.getData(),response); }else if(s.equals("pdf")){ response.setContentType("application/pdf"); }else if(s.equals("docx")){ response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); }else if(s.equals("doc")){ response.setContentType("application/msword"); }else if(s.equals("txt")){ response.setContentType("text/plain"); }else if(s.equals("pptx")){ response.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"); } try { // String extName = fsFile.getBsFileType(); //文件后缀名 //response.setContentType("image/jpg"); //response.addHeader("Content-Disposition", "inline;filename=" + name); // response.addHeader("Content-Length", "" + // fsFile.getBsFileSize()); // if(".png".equals(extName)){ // response.setContentType("image/png"); // } OutputStream os = response.getOutputStream(); byte[] bytes = (byte[]) result.getData(); os.write(bytes); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } return null; } }