package cn.com.ebidding.impl.outer.trading;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import org.apache.commons.io.IOUtils;
import org.net.plat4j.common.utils.AppConfig;
import org.net.plat4j.common.utils.FileUtil;
import org.net.plat4j.sr.core.utils.LogHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.com.ebidding.api.outer.trading.ITradingPlatformFile;
import cn.com.ebidding.web.mapper.PTradingfileinfoMapper;
import cn.com.ebidding.web.model.PTradingfileinfo;
@Service("ITradingPlatformFile")
public class TradingPlatformFileService implements ITradingPlatformFile {
public final static boolean DEBUG = true;// 调试用
@SuppressWarnings("unused")
private static int BUFFER_SIZE = 8096;// 缓冲区大小
@SuppressWarnings("rawtypes")
private Vector vPTradingfileinfo = new Vector();// 下载信息
private static final LogHelper log = new LogHelper(TradingPlatformFileService.class);
@Autowired
private PTradingfileinfoMapper mapper;
/**
* 构造方法
*/
public TradingPlatformFileService() {
log.info("*********************************** 进入交易平台附件下载 ***********************************");
}
/**
* 清除下载列表
*/
public void resetList() {
log.info("清除下载列表");
vPTradingfileinfo.clear();
}
/**
* 增加下载列表项
*
* @param url
* String
* @param filename
* String
*/
@SuppressWarnings("unchecked")
public void addItem(PTradingfileinfo pTradingfileinfo) {
log.info("添加下载列表:" + pTradingfileinfo.getFileurl() + " fileVeriCode:" + pTradingfileinfo.getFilevericode());
vPTradingfileinfo.add(pTradingfileinfo);
}
public String getFileName(String urlStr){
String fileName = null;
try {
URL url = new URL(urlStr);
URLConnection uc = url.openConnection();
fileName = uc.getHeaderField("Content-Disposition");
fileName = new String(fileName.getBytes("ISO-8859-1"), "GBK");
fileName = URLDecoder.decode(fileName.substring(fileName.indexOf("filename=")+9),"UTF-8");
log.info("文件名为:" + fileName + " 大小" + (uc.getContentLength()/1024)+"KB");
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
/**
* 将HTTP资源另存为文件并进行MD5校验
* @param urlStr
* @param fileName
* @throws IOException
*/
public void getTradingPlatFormFile() throws Exception {
// 根据列表下载资源
if(vPTradingfileinfo != null && vPTradingfileinfo.size()>0){
for(int i=0; i<vPTradingfileinfo.size(); i++){
PTradingfileinfo trading = (PTradingfileinfo) vPTradingfileinfo.get(i);
trading.setId(trading.getId());
String urlStr = trading.getFileurl();
String fileName = getFileName(urlStr);
String tradingMD5Str = trading.getFilevericode();
String savePath = AppConfig.getProperty("Location_Default_Dir") + FileUtil.separator + "TradingPlat";
if(!"".equals(urlStr)){
InputStream inputStream = null;
FileOutputStream fos = null;
HttpURLConnection connection = null;
try {
trading.setIsDeleted("0");
trading.setUpdateTime(new Date());
trading.setDownstattime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
URL url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
inputStream = connection.getInputStream();
File saveDir = new File(savePath);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
File file = new File(saveDir + File.separator + fileName);
fos = new FileOutputStream(file);
IOUtils.copy(inputStream, fos);
// 对文件进行MD5校验
String md5Str = MD5Builder.getMD5(file);
if(md5Str.equals(tradingMD5Str)){
trading.setIscheck("0");
log.info("文件名为:" + urlStr + "/" + fileName + " MD5校验成功");
} else {
trading.setIscheck("1");
log.info("文件名为:" + urlStr + "/" + fileName + " MD5校验失败");
}
//执行文件上传 0-可下载 1-下载成功 2-下载失败
try {
String fileId = FileUtil.uploadTempFile(2665l, file).getId();
if(fileId != null){
trading.setIssuccess("1");
trading.setFileid(fileId);
trading.setDowneedtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
mapper.updateByPrimaryKeySelective(trading);
log.info("文件:" + url + "/" + fileName + " 下载成功");
} else {
trading.setIssuccess("2");
trading.setDowneedtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
mapper.updateByPrimaryKeySelective(trading);
log.info("文件:" + url + "/" + fileName + " 下载失败");
}
} catch (Exception e) {
e.printStackTrace();
trading.setIssuccess("2");
trading.setDownremarks(getLogInfo(e));
trading.setDowneedtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
mapper.updateByPrimaryKeySelective(trading);
}
} catch (Exception e) {
e.printStackTrace();
trading.setIssuccess("2");
trading.setDownremarks(getLogInfo(e));
trading.setDowneedtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
mapper.updateByPrimaryKeySelective(trading);
} finally{
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(fos);
connection.disconnect();
}
}
}
// 清除下载队列
resetList();
}
}
/***
* 补全异常信息
* @param e
* @return
*/
public static String getLogInfo(Exception e){
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
return sw.toString();
}
@Override
public void downTradingPlatformFile() {
List<PTradingfileinfo> list = new ArrayList<PTradingfileinfo>();
if(belongCalendar()){
list = mapper.queryTradingPlatFileBusy();
} else {
list = mapper.queryTradingPlatFileIdle();
}
try {
if(list != null && list.size()>0){
for(int i=0; i<list.size(); i++){
addItem(list.get(i));
}
// 开始下载
getTradingPlatFormFile();
} else {
log.info("*********************************** 交易平台暂无附件可下载 ***********************************");
}
} catch (Exception err) {
err.printStackTrace();
}
}
/**
* 判断不同时间段执行不同的下载任务
* @return
*/
public static boolean belongCalendar() {
boolean result = false;
try {
//设置日期格式
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
// 当前时间
Calendar date = Calendar.getInstance();
date.setTime(df.parse(df.format(new Date())));
// 开始时间
Calendar begin = Calendar.getInstance();
begin.setTime(df.parse("6:00"));
// 结束时间
Calendar end = Calendar.getInstance();
end.setTime(df.parse("23:00"));
if (date.after(begin) && date.before(end)) {
result = true;
} else {
result = false;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
Java 下载队列并对文件进行MD5校验,可获取文件名可分不同时间段进行下载
最新推荐文章于 2024-07-08 14:41:41 发布