下面贴出生成图片的方法类,实际上是通过传入解析过的xml数据到这个工具类进行处理,并调用生成jfreechar的工具类生成。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.mysql.jdbc.DatabaseMetaData;
import com.venustech.a6l3.common.CommonUtils;
import com.venustech.a6l3.dao.common.CommonStatisticsCreateImagesDao;
/**
* 生成报告相关的图片文件
* @author 唐辉
*
*/
@Component
public class CreatPieForReport{
@Autowired
private CommonStatisticsCreateImagesDao commonStatisticsCreateImagesDao;
Statement stmt = null;
Connection conn = null;
ResultSet rs = null;
DatabaseMetaData dma;
/**
* 组织生成饼状图的数据结构
* @param sqlStr
* @return
*/
public PieDataset createDataset(String sqlStr,List<FieldBean> fieldList,Connection conn){
DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
if(CommonUtils.isNotNull(sqlStr)){
try {
//通过Query接口查询
//System.out.println("\n 要创建饼状图数据集的SQL语句为:\n" + sqlStr);
stmt = conn.prepareStatement(sqlStr);
rs = stmt.executeQuery(sqlStr);
while(rs.next()){
if(fieldList != null && fieldList.size() > 0){
for (int i = 0; i < fieldList.size(); i++) {
String filedColumn = fieldList.get(i).getColumn();
String filedName = fieldList.get(i).getName();
//执行查询
String filedValue = rs.getString(filedColumn);
defaultpiedataset.setValue(filedName==null?"":filedName, new Double(filedValue));
}
}
}
} catch (Exception e) {
e.getStackTrace();
System.out.println(e.getMessage());
}
}
return defaultpiedataset;
}
/**
* 组织柱状图的数据结构
* @param sqlStr
* @return
*/
public DefaultCategoryDataset creatBarChart(String sqlStr,List<FieldBean> fieldList,Connection conn){
DefaultCategoryDataset defaultCategoryDataset = new DefaultCategoryDataset();
if(CommonUtils.isNotNull(sqlStr)){
try {
//通过Query接口查询
//System.out.println("\n 要创建柱状图数据集的SQL语句为:\n" + sqlStr);
stmt = conn.prepareStatement(sqlStr);
rs = stmt.executeQuery(sqlStr);
while(rs.next()){
if(fieldList != null && fieldList.size() > 0){
for (int i = 0; i < fieldList.size(); i++) {
String filedColumn = fieldList.get(i).getColumn();
String filedName = fieldList.get(i).getName();
//执行查询
String filedValue = rs.getString(filedColumn);
if(CommonUtils.isNotNull(filedValue)){
defaultCategoryDataset.setValue(Integer.parseInt(filedValue),filedValue,filedName==null?"":filedName);
}
}
}
}
} catch (Exception e) {
e.getStackTrace();
System.out.println(e.getMessage());
}
}
return defaultCategoryDataset;
}
/**
* 组织曲线图的数据结构
* @param sqlStr
* @return
*/
public CategoryDataset createLineChart(String sqlStr,List<FieldBean> fieldList,Connection conn){
CategoryDataset categoryDataset = null;
return categoryDataset;
}
/**
* 综合差距分析数据结构
* @param sqlStr
* @return
*/
private XYDataset createPolarChart(String sqlStr,List<FieldBean> fieldList,Connection conn,String[] pplotArr){
XYSeriesCollection xyseriescollection = new XYSeriesCollection();
XYSeries xyserie1 = new XYSeries(pplotArr[0]);
for(int k = 0; k < 11; k++) {
xyserie1.add((360/11)*k, 10D);
}
xyseriescollection.addSeries(xyserie1);
if(CommonUtils.isNotNull(sqlStr)){
try {
XYSeries xyserie2 = new XYSeries(pplotArr[1]);
//通过Query接口查询
//System.out.println("\n 要创建雷达图数据集的SQL语句为:\n" + sqlStr);
Statement stmt = conn.prepareStatement(sqlStr);
ResultSet rs = stmt.executeQuery(sqlStr);
while(rs.next()){
if(fieldList != null && fieldList.size() > 0){
for (int i = 0; i < fieldList.size(); i++) {
String filedColumn = fieldList.get(i).getColumn();
if(filedColumn.equals("conformValue")){
//执行查询
String filedValue = rs.getString(filedColumn);
if(!CommonUtils.isNotNull(filedValue)){
filedValue = "0";
}
if(CommonUtils.isNotNull(filedValue)){
for(int m = 0; m < 11; m++) {
xyserie2.add((360/11)*m, Double.parseDouble(XmlPathDef.getStrNum(filedValue)));
}
}
}
}
}
}
xyseriescollection.addSeries(xyserie2);
} catch (Exception e) {
e.getStackTrace();
System.out.println(e.getMessage());
}
}
return xyseriescollection;
}
/**
* 报告图片生成方法
* @param sqlStr
* @param charName
* @param fieldList
* @param chartUrl
* @param conn
* @param type
* @param width
* @param height
* @return
*/
public boolean createChartPic(String sqlStr,String charName,List<FieldBean> fieldList,String chartUrl,Connection conn,String type,int width,int height,String[] pplotArr){
boolean boo = true;
if(CommonUtils.isNotNull(type) && type.indexOf("CI") != -1){
type = type.substring(type.indexOf("CI")+3, type.length());
if(CommonUtils.isNotNull(type)){
if(type.equals(XmlPathDef.PIECHART)){ //饼状图
boo = commonStatisticsCreateImagesDao.createPiePic(chartUrl, charName,createDataset(sqlStr,fieldList, conn), width, height);
}else if(type.equals(XmlPathDef.BARCHART)){ //柱状图
boo = commonStatisticsCreateImagesDao.creatPic(chartUrl, charName, "", creatBarChart(sqlStr,fieldList, conn), width, height);
}else if(type.equals(XmlPathDef.LINECHART)){ //曲线图
boo = commonStatisticsCreateImagesDao.createLinePic(chartUrl, charName, "", createLineChart(sqlStr,fieldList, conn), width, height);
}else if(type.equals(XmlPathDef.RADARCHART)){ //雷达图
boo = commonStatisticsCreateImagesDao.createPolarChart(chartUrl, charName, createPolarChart(sqlStr,fieldList, conn, pplotArr), width, height,pplotArr);
}
}
}
return boo;
}
public static void main(String args[]){
}
}
(未完待续)