package com.spider.reader.business.action; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.spider.reader.business.service.ArticleService; import com.spider.reader.business.service.PeriodService; import com.spider.reader.common.action.BaseAction; import com.spider.reader.common.bean.Article; import com.spider.reader.common.bean.Period; import com.spider.reader.common.tool.GetFileSize; import com.spider.reader.common.tool.ZipUtil; import com.spider.reader.common.util.Contants; import com.spider.reader.common.util.HttpDownload; import com.spider.reader.common.util.StringUtils; /** * @ClassName: DataExportAction * @Description: 电信、移动数据导出 * @author zhough * @date 2012-12-17 下午05:38:32 */ public class DataExportAction extends BaseAction { private static final long serialVersionUID = 1L; protected final static Log log = LogFactory.getLog(DataExportAction.class); private String qproductid; private PeriodService periodService; private ArticleService articleService; /***************************** 电信数据导出 ************************************/ public String teleDataExport() { log.error("teleDataExport start……"); String jouralId = StringUtils.nvl(this.getRequest().getParameter("jouralId")); String issueId = StringUtils.nvl(this.getRequest().getParameter("issueId")); qproductid = StringUtils.nvl(jouralId); Period periodVo = periodService.queryPeriodById(StringUtils.nvl(issueId), Period.class);//通过id查询刊期 if(null == periodVo){ getRequest().setAttribute("message", "没获取到刊期相关数据!"); return "error"; } FileOutputStream out_0 = null; try { String periodName = periodVo.getProductname(); periodName = periodName.replaceAll("<","").replaceAll(">","").replaceAll("\\|","").replaceAll("\\?","").replaceAll("\\*","").replaceAll("\\/","").replaceAll(":",""); /** 名称:电信--中外文化交流 **/ String mkdirPath = Contants.getProjectRealPath() + "/exportfile/d" + periodVo.getId() + "/电信--" + periodName; String fileTxt = mkdirPath + "/正文.txt"; StringBuilder contentTxt = new StringBuilder(); File zipFile = new File(mkdirPath + ".zip"); if(zipFile.exists()) { zipFile.delete(); } File filepath = new File(mkdirPath); if (!filepath.isDirectory()) { filepath.mkdirs(); } /** 查询刊期下的上架文章status = 1 **/ List<Article> articleList = articleService.queryArticleList(StringUtils.nvl(issueId),"1"); log.error("teleDataExport articleList ==" + articleList.size()); if(null == articleList || articleList.size() == 0){ getRequest().setAttribute("message", "没获取到刊期文章相关数据!"); return "error"; } /** 存储所有图片 * */ List<String[]> picList = new ArrayList<String[]>(); String strTemp = ""; if (null != articleList && articleList.size() > 0) { for (int i = 0; i < articleList.size(); i++) { Article articleVo = (Article) articleList.get(i); String contentId = StringUtils.nvl(articleVo.getId()); // 当前文章ID String contentName = StringUtils.nvl(articleVo.getName()); // 当前文章标题 String[] contentPic = StringUtils.getPicture(articleVo.getLargepicture(), "480"); // 480抬头大图 picList.add(contentPic); // 抬头大图存入List中 String columnName = StringUtils.nvl(articleVo.getColumnname()); // 栏目名称 String articleContent = StringUtils.nvl(articleVo.getContent()); // 当前文章正文 /****************************** 拼揍正文 ******************************/ if(!strTemp.contains(columnName)){ strTemp += columnName+"|"; contentTxt.append("##"+columnName+"\n\n"); } contentTxt.append("###"+contentName+"\n\n"); contentTxt.append(" "+StringUtils.getVivaContent(articleContent)); contentTxt.append("\n\n\n\n"); /****************************** 组装图片copy到对应目录 ******************************/ String[] picAs = (String[]) picList.get(i); String path=Contants.getUploadImgPath(); //取得服务器上的图片 if(path.equals("/")){ path=Contants.getProjectRealPath(); } if (StringUtils.isNotEmpty(picAs[0]) && StringUtils.isNotEmpty(picAs[1]) && !picAs[1].contains(Contants.DEFAULTPIC)) { File fileTmp = new File(path + "/pic/bookpic/" + picAs[1]); log.error("teleDataExport fileTmp =="+fileTmp); if (fileTmp.exists()) { ZipUtil.copyStreamTwo(path + "/pic/bookpic/" + picAs[1], mkdirPath + "/" + columnName + "-" + contentName + ".jpg"); } } } /********************* 生成txt文档 **********************/ out_0 = new FileOutputStream(fileTxt); out_0.write(contentTxt.toString().getBytes()); /***************** 生成zip文档 ******************/ mkdirPath = Contants.getProjectRealPath() + "/exportfile/d" + periodVo.getId(); ZipUtil.zip(mkdirPath, mkdirPath + ".zip"); GetFileSize.delFolder(mkdirPath); String zipPath = mkdirPath + ".zip"; new HttpDownload().httpDownLoadUtil(this.getRequest(), this.getResponse(), zipPath); } } catch (Exception e) { e.printStackTrace(); getRequest().setAttribute("message", "电信数据导出失败!"); return "error"; }finally{ try { if(null != out_0){ out_0.close(); } } catch (IOException e) { e.printStackTrace(); } } getRequest().setAttribute("message", "电信数据导出成功"); return SUCCESS; } /***************************** 移动数据导出 ************************************/ public String moveDataExport(){ log.error("moveDataExport start……"); String jouralId = StringUtils.nvl(this.getRequest().getParameter("jouralId")); String issueId = StringUtils.nvl(this.getRequest().getParameter("issueId")); qproductid = StringUtils.nvl(jouralId); Period periodVo = periodService.queryPeriodById(StringUtils.nvl(issueId), Period.class);//通过id查询刊期 if(null == periodVo){ getRequest().setAttribute("message", "没获取到刊期相关数据!"); return "error"; } /** 查询刊期下的上架文章status = 1 **/ List<Article> articleList = articleService.queryArticleList(StringUtils.nvl(issueId),"1"); log.error("moveDataExport articleList=="+articleList.size()); if(null == articleList || articleList.size() == 0){ getRequest().setAttribute("message", "没获取到刊期文章相关数据!"); return "error"; } FileOutputStream out_0 = null; try { String periodName = periodVo.getProductname(); periodName = periodName.replaceAll("<","").replaceAll(">","").replaceAll("\\|","").replaceAll("\\?","").replaceAll("\\*","").replaceAll("\\/","").replaceAll(":",""); /** 名称:移动--中外文化交流2012年第12期 **/ String mkdirPath = Contants.getProjectRealPath() + "/exportfile/y" + periodVo.getId() + "/移动--" + periodName + periodVo.getPeriodname(); log.error("moveDataExport mkdirPath=="+mkdirPath); /** 存储所有图片 * */ List<String[]> picList = new ArrayList<String[]>(); String fileTxt = ""; File zipFile = new File(mkdirPath + ".zip"); log.error("moveDataExport zipFile=="+zipFile); if(zipFile.exists()) { zipFile.delete(); } File filepath = new File(mkdirPath); if (!filepath.isDirectory()){ filepath.mkdirs(); } if(null != articleList && articleList.size()>0){ for(int i = 0; i < articleList.size(); i++){ Article articleVo = (Article) articleList.get(i); String contentId = StringUtils.nvl(articleVo.getId()); // 当前文章ID String contentName = StringUtils.nvl(articleVo.getName()); // 当前文章标题 String[] contentPic = StringUtils.getPicture(articleVo.getLargepicture(), "480"); // 480抬头大图 picList.add(contentPic); // 抬头大图存入List中 String articleContent = StringUtils.nvl(articleVo.getContent()); // 当前文章正文 /****************************** 拼揍正文 ******************************/ StringBuilder contentTxt = new StringBuilder(); contentTxt.append(contentName+"\n\n"); contentTxt.append(" "+StringUtils.getVivaContent(articleContent)); contentTxt.append("\n"); // contentTxt.append(" 本文出自:《" + periodName + "》" + periodVo.getPeriodname()); /****************************** 组装图片copy到对应目录 ******************************/ String[] picAs = (String[]) picList.get(i); String path=Contants.getUploadImgPath(); //取得服务器上的图片 if(path.equals("/")){ path=Contants.getProjectRealPath(); } if (StringUtils.isNotEmpty(picAs[0]) && StringUtils.isNotEmpty(picAs[1]) && !picAs[1].contains(Contants.DEFAULTPIC)) { File fileTmp = new File(path + "/pic/bookpic/" + picAs[1]); log.error("moveDataExport fileTmp=="+fileTmp); if (fileTmp.exists()) { ZipUtil.copyStreamTwo(path + "/pic/bookpic/" + picAs[1], mkdirPath + "/" + String.valueOf(i+1) + contentName + ".jpg"); } } fileTxt = mkdirPath + "/" + String.valueOf(i+1) + contentName + ".txt"; log.error("moveDataExport fileTxt=="+fileTxt); /********************* 生成txt文档 **********************/ out_0 = new FileOutputStream(fileTxt); out_0.write(contentTxt.toString().getBytes()); } /***************** 生成zip文档 ******************/ mkdirPath = Contants.getProjectRealPath() + "/exportfile/y" + periodVo.getId(); ZipUtil.zip(mkdirPath, mkdirPath + ".zip"); GetFileSize.delFolder(mkdirPath); String zipPath = mkdirPath + ".zip"; new HttpDownload().httpDownLoadUtil(this.getRequest(), this.getResponse(), zipPath); } } catch (Exception e) { e.printStackTrace(); getRequest().setAttribute("message", "移动数据导出失败!"); return "error"; }finally{ try { if(null != out_0){ out_0.close(); } } catch (IOException e) { e.printStackTrace(); } } getRequest().setAttribute("message", "移动数据导出成功"); return SUCCESS; } public String getQproductid() { return qproductid; } public void setQproductid(String qproductid) { this.qproductid = qproductid; } public void setPeriodService(PeriodService periodService) { this.periodService = periodService; } public void setArticleService(ArticleService articleService) { this.articleService = articleService; } }