package org.platform.service.report.oauth;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.sql.rowset.serial.SerialClob;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.json.JSONObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.platform.service.report.config.ReportConfig;
import org.platform.service.report.dto.ReportQueryParamsDto;
import org.platform.utils.file.FileUtil;
import org.platform.utils.httpclient.HttpClientHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
/**
* @ProjectName platform-service-report
* @PackageName org.platform.service.report.oauth
* @Description 报表公共方法
* @ClassName JasperReportUtil
* @Author L_X
* @Date 2017年8月11日 下午2:41:24
*/
public class JasperReportUtil {
private static final Logger logger = LoggerFactory.getLogger(JasperReportUtil.class);
/**
* @Description 获取报表SQL
* @MethodName findToSql
* @Author L_X
* @Date 2017年9月8日 上午11:11:13
* @param reportName
* @param reportMD5
* @param subReportMD5
* @return
* @throws Exception String
*/
public static String findReportToSql(String reportName, String reportMD5, String subReportMD5) throws Exception{
String sql = null;
if (ReportConfig.IS_ON_OFF.equals(DefaultConstants.IS_ON)) {
File file = new File(ReportConfig.NATIVE_FILE_PATH + reportName + ".jrxml");
String md5Local = FileUtil.getFileMD5(file);
File subfile = new File(ReportConfig.NATIVE_FILE_PATH + reportName + "_subReport.jrxml");
String subMd5Local = FileUtil.getFileMD5(subfile);
if (file.exists() && md5Local.equals(reportMD5)) {
sql = getLocationSql(reportName);
} else {
sql = saveSqlToNative(reportName);
}
StringBuffer sb = new StringBuffer("null");
if (StringUtils.isNotBlank(subReportMD5) && !subReportMD5.contentEquals(sb)) {
if ( !subfile.exists() || !subMd5Local.equals(subReportMD5)) {
saveReportFileToLocal(reportName+ "_subReport",".jrxml");
}
}
}else {
sql = getSql(reportName);
}
return sql;
}
/**
* @Description 根据报表名称获取JRXML文件,解析得到SQL
* @MethodName getSql
* @Author L_X
* @Date 2017年8月11日 下午2:39:56
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.sql.rowset.serial.SerialClob;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.json.JSONObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.platform.service.report.config.ReportConfig;
import org.platform.service.report.dto.ReportQueryParamsDto;
import org.platform.utils.file.FileUtil;
import org.platform.utils.httpclient.HttpClientHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
/**
* @ProjectName platform-service-report
* @PackageName org.platform.service.report.oauth
* @Description 报表公共方法
* @ClassName JasperReportUtil
* @Author L_X
* @Date 2017年8月11日 下午2:41:24
*/
public class JasperReportUtil {
private static final Logger logger = LoggerFactory.getLogger(JasperReportUtil.class);
/**
* @Description 获取报表SQL
* @MethodName findToSql
* @Author L_X
* @Date 2017年9月8日 上午11:11:13
* @param reportName
* @param reportMD5
* @param subReportMD5
* @return
* @throws Exception String
*/
public static String findReportToSql(String reportName, String reportMD5, String subReportMD5) throws Exception{
String sql = null;
if (ReportConfig.IS_ON_OFF.equals(DefaultConstants.IS_ON)) {
File file = new File(ReportConfig.NATIVE_FILE_PATH + reportName + ".jrxml");
String md5Local = FileUtil.getFileMD5(file);
File subfile = new File(ReportConfig.NATIVE_FILE_PATH + reportName + "_subReport.jrxml");
String subMd5Local = FileUtil.getFileMD5(subfile);
if (file.exists() && md5Local.equals(reportMD5)) {
sql = getLocationSql(reportName);
} else {
sql = saveSqlToNative(reportName);
}
StringBuffer sb = new StringBuffer("null");
if (StringUtils.isNotBlank(subReportMD5) && !subReportMD5.contentEquals(sb)) {
if ( !subfile.exists() || !subMd5Local.equals(subReportMD5)) {
saveReportFileToLocal(reportName+ "_subReport",".jrxml");
}
}
}else {
sql = getSql(reportName);
}
return sql;
}
/**
* @Description 根据报表名称获取JRXML文件,解析得到SQL
* @MethodName getSql
* @Author L_X
* @Date 2017年8月11日 下午2:39:56