下面贴出生成图片的方法类,实际上是通过传入解析过的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[]){ } }
(未完待续)