package com.web.pda.lyt.ftp.service.internal; import com.app.base.data.ApiResponseResult; import com.app.base.service.FtpClientService; import com.web.pda.lyt.ftp.dao.FileCheckLytDao; import com.web.pda.lyt.ftp.service.FileSampleSignService; 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 javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; 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.Map; @Service(value = "fileSampleSignService") @Transactional(propagation = Propagation.REQUIRED) public class FileSampleSignImpl implements FileSampleSignService { @Autowired private FileCheckLytDao fileCheckDao; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private FtpClientService ftpClientService; @Override public ApiResponseResult uploadFilepqc(String factory, String company, String username, int mid, int type, String note, MultipartFile[] files) throws Exception { // TODO Auto-generated method stub List a = getInfo(factory, company, username, mid, type); 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, mid, 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 uaername, int mid, int type1) { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_pqc_app_qt_ftpfile(?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setLong(3, mid); cs.registerOutParameter(4, java.sql.Types.INTEGER);// 注册输出参数 cs.registerOutParameter(5, java.sql.Types.VARCHAR);// 注册输出参数 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.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(4)); 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)); 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, int mid, 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 sp_pqc_app_qt_ftpfile_insert(?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, uaername); cs.setLong(4, mid);// cs.setLong(5, Dmltype);// 操作类型,0是新增,1是修改,2是删除 cs.setString(6, filename);// 文件名 cs.setString(7, note);// 备注说明 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 mid) throws Exception { // TODO Auto-generated method stub // List> countList1 = fileCheckDao.getFileList(mid); List a = this.getRfFileList(mid); /* * if(countList1.size() == 0){ return ApiResponseResult.failure("文件为空"); * } return ApiResponseResult.success("").data(countList1); */ System.out.println(a); if (a.get(0).equals("0")) { String[] fn = a.get(2).substring(0, a.get(2).length() - 1).split("#"); String[] fq = a.get(3).substring(0, a.get(3).length() - 1).split("#"); String[] ft = a.get(4).substring(0, a.get(4).length() - 1).split("#"); String[] mi = a.get(5).substring(0, a.get(5).length() - 1).split("#"); String[] cd = a.get(6).substring(0, a.get(6).length() - 1).split("#"); String[] fu = a.get(7).substring(0, a.get(7).length() - 1).split("#"); List l = new ArrayList(); for (int i = 0; i < fn.length; i++) { Map m = new HashMap(); m.put("FNOTE", fn[i]); m.put("FATTACH", fq[i]); m.put("FTYPE", ft[i]); m.put("MID", mi[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 mid) { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_pqc_app_qt_ftpfile_list(?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, mid); cs.registerOutParameter(2, java.sql.Types.INTEGER);// 注册输出参数 // 返回类型 返回标识 cs.registerOutParameter(3, java.sql.Types.VARCHAR);// 注册输出参数 // 返回类型 返回信息 cs.registerOutParameter(4, -10);// 注册输出参数 返回类型 返回批次号游标 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList(); cs.execute(); result.add(cs.getString(2)); result.add(cs.getString(3)); // 游标处理 ResultSet rs = (ResultSet) cs.getObject(4); String ids = ""; String n = ""; String n1 = ""; String n2 = ""; String n3 = ""; String n4 = ""; while (rs.next()) { ids += rs.getString("FNOTE") + "#"; n += rs.getString("FATTACH") + "#"; n1 += rs.getString("FTYPE") + "#"; n2 += rs.getString("MID") + "#"; n3 += rs.getString("CD") + "#"; n4 += rs.getString("FURL") + "#"; } result.add(ids); result.add(n); 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; } }