JfreeChar创建人力资源管理系统数据统计图表
导入下面的包
import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import com.opensymphony.xwork2.ActionSupport; import com.wepull.hrms.biz.ChannelBiz; import com.wepull.hrms.biz.DataCountBiz; import com.wepull.hrms.dto.ChannelDto; import com.wepull.hrms.dto.ChannelTypeDto; /** * 数据统计模块action层 * @author $KangMiao$ */ public class DataCountAction extends ActionSupport{ private DataCountBiz dataCountBiz = null; private ChannelBiz channelBiz = null; public void setDataCountBiz(DataCountBiz dataCountBiz) { this.dataCountBiz = dataCountBiz; } public void setChannelBiz(ChannelBiz channelBiz) { this.channelBiz = channelBiz; } /*******************************************************/ private List<ChannelDto> channelList = new ArrayList<ChannelDto>(); public List<ChannelTypeDto> typeList = new ArrayList<ChannelTypeDto>(); private ChannelDto channelDto = new ChannelDto(); /**统计某渠道 某种状态的简历数*/ public String channelCount() throws IOException{ typeList = channelBiz.findChannelType(); List<ChannelDto> list = channelBiz.findChannel(); int resumeCount=0,num1=0,num2=0,num3=0,num4=0,num5=0; if(channelList.size()!=0) channelList.clear(); for ( ChannelDto dto: list) { resumeCount = dataCountBiz.countChannelResume(dto.getId()); //某渠道简历总数 num1 = dataCountBiz.countResumeView(dto.getId(), 2); //基本合格数 num2 = dataCountBiz.countResumeView(dto.getId(), 3); //专员面试合格数 num3 = dataCountBiz.countResumeView(dto.getId(), 4); //需求负责任面试合格数 num4 = dataCountBiz.countResumeView(dto.getId(), 5); //客户面试合格数 num5 = dataCountBiz.countResumeView(dto.getId(), 6); //实际到岗人数 int[] count = new int[6]; count[0] = resumeCount; count[1] = num1; count[2] = num2; count[3] = num3; count[4] = num4; count[5] = num5; dto.setCount(count); channelList.add(dto); } barChar(); return SUCCESS; } /**生成渠道类型简历数据统计柱状图*/ public void barChar() throws IOException{ CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D( "渠道类型简历数据统计图", // 图表标题 "渠道类型", // 目录轴的显示标签 "简历数量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); FileOutputStream fos_jpg = null; try { String projectRealPath= ServletActionContext.getServletContext().getRealPath("/"); //获得工程路径 String imagePath = projectRealPath+"images/dataCount.jpg"; System.out.println("图片路径3:-----------------------"+imagePath); fos_jpg = new FileOutputStream(imagePath); ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,900,400,null); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } /**统计渠道类别的简历数据*/ public CategoryDataset getDataSet(){ String[] typeName = {"合作伙伴","培训公司","招聘网","猎头公司","高等院校","中介公司","其他"}; String[] dataName = {"简历总数","基本合格","专员面试合格","需求面试合格","客户面试合格","实际到岗人数"}; int[] type1 = {0,0,0,0,0,0}; //合作伙伴类型 int[] type2 = {0,0,0,0,0,0}; //培训公司类型 int[] type3 = {0,0,0,0,0,0}; //招聘网类型 int[] type4 = {0,0,0,0,0,0}; //猎头公司类型 int[] type5 = {0,0,0,0,0,0}; //高等院校类型 int[] type6 = {0,0,0,0,0,0}; //中介公司类型 int[] type7 = {0,0,0,0,0,0}; //其他类型 for (ChannelDto dto : channelList) { if (dto.getChannelTypeId() != null) { // 获得合作伙伴类型的数据 if (dto.getChannelTypeId() == 3) { type1 = getData(type1, dto); } // 获得培训公司类型的数据 else if (dto.getChannelTypeId() == 4) { type2 = getData(type2, dto); } // 获得招聘网类型的数据 else if (dto.getChannelTypeId() == 22) { type3 = getData(type3, dto); } // 获得中介公司类型的数据 else if (dto.getChannelTypeId() == 39) { type4 = getData(type4, dto); } // 获得猎头公司类型的数据 else if (dto.getChannelTypeId() == 23) { type5 = getData(type5, dto); } // 获得高等院校类型的数据 else if (dto.getChannelTypeId() == 37) { type6 = getData(type6, dto); } // 获得其他类型的数据 else if (dto.getChannelTypeId() == 41) { type7 = getData(type7, dto); } } } //生成柱状图 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset = setData(dataset,type1,typeName[0],dataName); dataset = setData(dataset,type2,typeName[1],dataName); dataset = setData(dataset,type3,typeName[2],dataName); dataset = setData(dataset,type4,typeName[3],dataName); dataset = setData(dataset,type5,typeName[4],dataName); dataset = setData(dataset,type6,typeName[5],dataName); dataset = setData(dataset,type7,typeName[6],dataName); return dataset; } /**获得渠道类型的各种数据*/ public int[] getData(int[] type,ChannelDto dto){ type[0]=type[0]+dto.getCount()[0]; //获得简历总数 type[1]=type[1]+dto.getCount()[1]; //获得基本合格数 type[2]=type[2]+dto.getCount()[2]; //获得专员面试合格数 type[3]=type[3]+dto.getCount()[3]; //获得需求负责任面试合格数 type[4]=type[4]+dto.getCount()[4]; //获得客户面试合格数 type[5]=type[5]+dto.getCount()[5]; //获得实际到岗人数 return type; } public DefaultCategoryDataset setData(DefaultCategoryDataset dataset,int[] type, String typeName,String[] dataName) { dataset.addValue(type[0], dataName[0], typeName); dataset.addValue(type[1], dataName[1], typeName); dataset.addValue(type[2], dataName[2], typeName); dataset.addValue(type[3], dataName[3], typeName); dataset.addValue(type[4], dataName[4], typeName); dataset.addValue(type[5], dataName[5], typeName); return dataset; } public static String fomat(float num){ DecimalFormat df = new DecimalFormat("XXXX.0"); System.out.println(df.format(num)); return df.format(num); } /**查询某时间段渠道简历数*/ public String findByTime() throws IOException{ HttpServletRequest request = ServletActionContext.getRequest(); //判断 页面传的条件 String beginTime = request.getParameter("beginTime"); String endTime = request.getParameter("endTime"); typeList = channelBiz.findChannelType(); List<ChannelDto> list = channelBiz.findChannel(); int resumeCount=0,num1=0,num2=0,num3=0,num4=0,num5=0; if(channelList.size()!=0) channelList.clear(); for ( ChannelDto dto: list) { resumeCount = dataCountBiz.countChannelTime(dto.getId(), beginTime, endTime); //某时间段渠道简历总数 num1 = dataCountBiz.countByTime(dto.getId(), 2, beginTime, endTime); //基本合格数 num2 = dataCountBiz.countByTime(dto.getId(), 3, beginTime, endTime); //专员面试合格数 num3 = dataCountBiz.countByTime(dto.getId(), 4, beginTime, endTime); //需求负责任面试合格数 num4 = dataCountBiz.countByTime(dto.getId(), 5, beginTime, endTime); //客户面试合格数 num5 = dataCountBiz.countByTime(dto.getId(), 6, beginTime, endTime); //实际到岗人数 int[] count = new int[6]; count[0] = resumeCount; count[1] = num1; count[2] = num2; count[3] = num3; count[4] = num4; count[5] = num5; dto.setCount(count); channelList.add(dto); } request.setAttribute("beginTime", beginTime); request.setAttribute("endTime", endTime); barChar(); return "data"; } /************************************/ public ChannelDto getChannelDto() { return channelDto; } public void setChannelDto(ChannelDto channelDto) { this.channelDto = channelDto; } public List<ChannelDto> getChannelList() { return channelList; } public void setChannelList(List<ChannelDto> channelList) { this.channelList = channelList; } }