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<String> 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<String> 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<String> getInfo(String factory, String company, String functionName, String billNo) {
|
List<String> resultList = (List<String>) 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<String> result = new ArrayList<String>();
|
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<String> getpqcFile(String factory, String company, String uaername, String functionName,String billNo, int type1, int Dmltype,
|
String filename, String note, Integer fileid) {
|
List<String> resultList = (List<String>) 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<String> result = new ArrayList<String>();
|
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<Map<String, Object>> countList1 = fileCheckDao.getFileList(mid);
|
List<String> 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<String> getRfFileList(String billNo,String functionName) {
|
List<String> resultList = (List<String>) 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<String> result = new ArrayList<String>();
|
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;
|
}
|
|
}
|