【HRMS】JfreeChar创建数据统计图表、柱状图、饼状图···

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;
	}
}

 

你可能感兴趣的:(apache,面试,servlet,jfreechart,招聘)