package com.ycsoft.report.component.query;
import java.io.File;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.system.SResource;
import com.ycsoft.business.dao.system.SResourceDao;
import com.ycsoft.commons.abstracts.BaseComponent;
import com.ycsoft.commons.exception.ReportException;
import com.ycsoft.commons.helper.FileHelper;
import com.ycsoft.commons.helper.ZipHelper;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.report.commons.ReportConstants;
import com.ycsoft.report.dao.config.RepDefineDao;
import com.ycsoft.report.dao.config.RepOptrExportDao;
import com.ycsoft.report.query.QueryManage;
/**
* 文件管理组件 生成文件,上传文件,下载文件
*/
@Component
public class FileComponent extends BaseComponent {
private RepDefineDao repDefineDao;
private QueryManage queryManage;
private RepOptrExportDao repOptrExportDao;
private SResourceDao sResourceDao;
public SResourceDao getSResourceDao() {
return sResourceDao;
}
public void setSResourceDao(SResourceDao resourceDao) {
sResourceDao = resourceDao;
}
public String saveQueryFileUpload(String fileNames, File[] files)throws Exception {
// String[] fileNameArr = fileNames.split(",");
String quiee_raq="";
//数据检测quiee_raq
// for(String s:fileNameArr){
if(fileNames.endsWith("_arg.raq")){
String temp_file=fileNames.substring(0,fileNames.length()-"_arg.raq".length());
if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
throw new Exception(fileNames+" and "+quiee_raq+" is not equals.");
quiee_raq=temp_file;
}else if (fileNames.endsWith(".raq")){
String temp_file=fileNames.substring(0, fileNames.length()-".raq".length());
if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
throw new Exception(fileNames+" and "+quiee_raq+" is not equals.");
quiee_raq=temp_file;
}else throw new Exception(fileNames+" is not quiee_raq file.");
String newFile=ReportConstants.CONTEXT_REAL_PATH+ File.separator + "reportFiles"+File.separator;
for(File f:files){
FileHelper.copyFile(f, newFile+fileNames);
}
return quiee_raq;
}
/**
* 获得html导出文件名
* @param rep_id
* @return
* @throws ReportException
*/
public String queryHtmlExpFileName(String rep_id) throws ReportException{
try {
SResource vo=sResourceDao.findByKey(rep_id);
if(vo==null)
return rep_id;
else
return vo.getRes_name();
//return sResourceDao.findByKey(rep_Id).getRes_name();
} catch (JDBCException e) {
throw new ReportException(e,e.getSQL());
}
}
/**
* 查询报表导出列配置
* @param optr_id
* @param query_id
* @return
* @throws Exception
*/
public Integer[] queryExportConfig(String optr_id,String query_id) throws Exception{
return repOptrExportDao.queryExportConfig(queryManage.get(query_id).getRepId(), optr_id);
}
/**
* 报表查询结果导出
* @param query_id
* @param column_index_list
* @return
* @throws Exception
*/
public String downloadExp(String query_id,Integer... column_index_list) throws Exception{
return queryManage.get(query_id).export(column_index_list);
}
/**
* 保存快逸报表模板
* @param rep_id
* @param files
* @return
* @throws Exception
*/
public String saveQuieeRaq(String fileNames, File[] files)throws Exception {
// String[] fileNameArr = fileNames.split(",");
String quiee_raq="";
//数据检测quiee_raq
// for(String s:fileNameArr){
if(fileNames.endsWith("_arg.raq")){
String temp_file=fileNames.substring(0,fileNames.length()-"_arg.raq".length());
if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
throw new Exception(fileNames+" and "+quiee_raq+" is not equals.");
quiee_raq=temp_file;
}else if (fileNames.endsWith(".raq")){
String temp_file=fileNames.substring(0, fileNames.length()-".raq".length());
if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
throw new Exception(fileNames+" and "+quiee_raq+" is not equals.");
quiee_raq=temp_file;
}else throw new Exception(fileNames+" is not quiee_raq file.");
// }
// for(File f:files){
// if(f.getName().endsWith("_arg.raq")){
// String temp_file=f.getName().substring(0,f.getName().length()-"_arg.raq".length());
// if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
// throw new Exception(f.getName()+" and "+quiee_raq+" is not equals.");
// quiee_raq=temp_file;
// }else if (f.getName().endsWith(".raq")){
// String temp_file=f.getName().substring(0, f.getName().length()-".raq".length());
// if(!quiee_raq.equals("")&&!quiee_raq.equals(temp_file))
// throw new Exception(f.getName()+" and "+quiee_raq+" is not equals.");
// quiee_raq=temp_file;
// }else throw new Exception(f.getName()+" is not quiee_raq file.");
// }
// repDefineDao.updateQuieeRaq(rep_id, quiee_raq);
String newFile=ReportConstants.CONTEXT_REAL_PATH+ File.separator + "reportFiles"+File.separator;
for(File f:files){
FileHelper.copyFile(f, newFile+fileNames);
}
return quiee_raq;
}
/**
* 下载快逸报表配置模板
*
* @param quiee_raq
* @param out
* @throws Exception
*/
public void downloadQuieeRaq(String quiee_raq, OutputStream out)
throws Exception {
File reportFiles = new File(ReportConstants.CONTEXT_REAL_PATH+File.separator + "reportFiles");
List<String> fileFullPathList = new ArrayList<String>();
for (File f : reportFiles.listFiles()) {
if (f.getName().equals(quiee_raq + ".raq")
|| f.getName().equals(quiee_raq + "_arg.raq"))
fileFullPathList.add(f.getAbsolutePath());
}
if (fileFullPathList.size() == 0)
throw new Exception(quiee_raq + ".raq is not exists.");
ZipHelper.zip(fileFullPathList, out);
}
public RepDefineDao getRepDefineDao() {
return repDefineDao;
}
public void setRepDefineDao(RepDefineDao repDefineDao) {
this.repDefineDao = repDefineDao;
}
public QueryManage getQueryManage() {
return queryManage;
}
public void setQueryManage(QueryManage queryManage) {
this.queryManage = queryManage;
}
public void setRepOptrExportDao(RepOptrExportDao repOptrExportDao) {
this.repOptrExportDao = repOptrExportDao;
}
}