package com.zbht.util;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.Month;
import org.jfree.data.time.Year;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
import com.zbht.db.oracle.TBManager;
public class ColumnChart {
public String getLineXYChart(HttpSession session, PrintWriter pw,Connection conn,String accident_id) throws IOException
{
DefaultCategoryDataset dataset = this.createDateSet(conn,accident_id);
String filename = "";
JFreeChart chart = ChartFactory.createBarChart3D("应急资源统计图",
"应急资源",
"资源数量",
dataset,
PlotOrientation.VERTICAL,
false,
false,
false);
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
BarRenderer3D renderer=(BarRenderer3D) plot.getRenderer();
//设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面
ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER,
TextAnchor.TOP_CENTER,0D);
renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
try
{
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
session);//生成图片
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(pw, filename, info, false);
}
catch (IOException e)
{
e.printStackTrace();
}
pw.flush();
return filename;//返回生成图片的文件名
}
private DefaultCategoryDataset createDateSet(Connection conn,String accident_id)
{
System.out.println("dateSet_ACCIDENT_ID:"+accident_id);
//显示折线图数据sql语句
String selectSQL1 = "Select * from V_RESOURCE_EXPERT where ACCIDENT_ID = "+ accident_id ;
String selectSQL2 = "Select * from V_RESOURCE_TEAM where ACCIDENT_ID = "+ accident_id ;
String selectSQL3 = "Select * from V_RESOURCE_STAFF where ACCIDENT_ID = "+ accident_id ;
String selectSQL4 = "Select * from V_ACC_RES_DISPATCH_RESOURCE_EQUIPMENT where ACCIDENT_ID = "+ accident_id ;
String selectSQL5 = "Select * from V_ACC_RES_DISPATCH_RESOURCE_KIT where ACCIDENT_ID = "+ accident_id ;
String selectSQL6 = "Select * from V_ACC_RES_DISPATCH_SHELTER where ACCIDENT_ID = "+ accident_id ;
int exp_int = 0;
int tem_int = 0;
int staff_int = 0;
int equipment_int = 0;
int kit_int = 0;
int shelter_int = 0;
String[] tempArry = new String[]{"应急专家","救援队伍","应急人员","应急资源","资源套件","避险中心"}; ;
HashMap lhmm = new HashMap();
try {
exp_int = TBManager.getRsCount(selectSQL1, conn);
lhmm.put("应急专家", Integer.valueOf(exp_int));
tem_int = TBManager.getRsCount(selectSQL2, conn);
lhmm.put("救援队伍", Integer.valueOf(tem_int));
staff_int = TBManager.getRsCount(selectSQL3, conn);
lhmm.put("应急人员", Integer.valueOf(staff_int));
equipment_int = TBManager.getRsCount(selectSQL4, conn);
lhmm.put("应急资源", Integer.valueOf(equipment_int));
kit_int = TBManager.getRsCount(selectSQL5, conn);
lhmm.put("资源套件", Integer.valueOf(kit_int));
shelter_int = TBManager.getRsCount(selectSQL6, conn);
lhmm.put("避险中心", Integer.valueOf(shelter_int));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for( int i= 0 ; i < tempArry.length ; i++ ){
int tempint= ((Integer)lhmm.get(tempArry[i])).intValue();
dataset.addValue(tempint, "", tempArry[i].toString());
}
return dataset;
}
}