package cn.ksource.web.util; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.util.StringUtil; public class ChartUtil { @Resource private BaseDao baseDao; /** * 获取图表数据 * @param queryList * @param chartParams * @param step TODO * @param cateKey * @return */ public static Map getChartMap(List queryList,Map chartParams, double step){ Map chartMap = new HashMap(); if(queryList!=null&&queryList.size()>0){ //x分类轴 List categories = new ArrayList(); //临时dataList Map tempListMap = new HashMap(); for(String key:chartParams.keySet()){ List list = new ArrayList(); tempListMap.put(key, list); } for(Map queryMap:queryList){ for(String key:chartParams.keySet()){ if(queryMap.get(key)!=null){ Map map = new HashMap(); map.put("y", queryMap.get(key)); if(queryMap.get("categoryId")!=null){ map.put("id", queryMap.get("categoryId")); } tempListMap.get(key).add(map); } } //组装x分类轴 categories.add(queryMap.get("category").toString()); } //组装series数据 List series = new ArrayList(); for(String key:chartParams.keySet()){ Map tempMap = new HashMap(); tempMap.put("name", chartParams.get(key)); tempMap.put("data", tempListMap.get(key)); series.add(tempMap); } chartMap.put("categories", categories); if(step!=0){ chartMap.put("step", Math.ceil(categories.size()/step)); } chartMap.put("series", series); } return chartMap; } /** * 获取图表格式数据 * @param queryList 类型列名必为category * @param chartParams series字段名称 * @param categories * @param step * @return */ public static Map getChartMap(List queryList,Map chartParams,List categories, double step){ Map chartMap = new HashMap(); if(queryList!=null&&queryList.size()>0){ //临时dataList Map tempListMap = new HashMap(); for(String key:chartParams.keySet()){ List list = new ArrayList(); tempListMap.put(key, list); } Map queryTempMap = new HashMap(); for(Map queryMap:queryList){ queryTempMap.put(queryMap.get("category"), queryMap); } for(String key:chartParams.keySet()){ for(String cate:categories){ if(queryTempMap.get(cate)!=null){ tempListMap.get(key).add(((Map)queryTempMap.get(cate)).get(key)); }else{ tempListMap.get(key).add(0); } } } //组装series数据 List series = new ArrayList(); for(String key:chartParams.keySet()){ Map tempMap = new HashMap(); tempMap.put("name", chartParams.get(key)); tempMap.put("data", tempListMap.get(key)); series.add(tempMap); } chartMap.put("categories", categories); if(step!=0){ chartMap.put("step", Math.ceil(categories.size()/step)); } chartMap.put("series", series); } return chartMap; } /** * 获取图表数据(查询结果为多分组,name列命名为data_name,cate标识列命名为cate_id,cateList中Map存放key与val) * @param dataList * @param dataNameMap * @param step TODO * @param cateKey * @return */ public static Map getChartMapByGroupData(List dataList,LinkedHashMap dataNameMap,List cateList, double step){ Map chartMap = new HashMap(); if(dataList!=null&&dataList.size()>0){ List categories = new ArrayList(); for(Map cate:cateList){ categories.add(cate.get("val").toString()); } //临时dataList Map tempListMap = new HashMap(); for(String key:dataNameMap.keySet()){ List list = new ArrayList(); tempListMap.put(key, list); } Map queryTempMap = new HashMap(); for(Map queryMap:dataList){ queryTempMap.put(queryMap.get("data_name")+"_"+queryMap.get("cate_id"), queryMap); } for(String key:dataNameMap.keySet()){ for(Map cate:cateList){ String dataKey = key+"_"+cate.get("key"); if(queryTempMap.get(dataKey)!=null){ tempListMap.get(key).add(((Map)queryTempMap.get(dataKey)).get("num")); }else{ tempListMap.get(key).add(0); } } } //组装series数据 List series = new ArrayList(); for(String key:dataNameMap.keySet()){ Map tempMap = new HashMap(); tempMap.put("name", dataNameMap.get(key)); tempMap.put("data", tempListMap.get(key)); series.add(tempMap); } chartMap.put("categories", categories); if(step!=0){ chartMap.put("step", Math.ceil(categories.size()/step)); } chartMap.put("series", series); }else{ chartMap.put("nodata", true); } return chartMap; } @SuppressWarnings({ "rawtypes", "unchecked" }) /** * Highcharts(线形图,柱状图)报表数据组装(数据库查询结果集,x类别轴以"category"命名,series分类以"datakey"命名) * @author chenlong * @param datas * @param categoryList (x类别轴List,Map以key,val存放数据) * @param dataKeyMap (series分类List,Map的key存放分类对应数据库的值,val存放分类名称) * @param step * @return */ public static Map createHchartLineMap(List datas,List categoryList,Map dataKeyMap,double step){ HashMap chartMap = new HashMap(); if(datas!=null&&datas.size()>0){ //组装data数据 Map dataSetMap = new HashMap(); for(Map data:datas){ String key = data.get("datakey").toString() + "_" + data.get("category").toString(); dataSetMap.put(key, data); } List series = new ArrayList(); //X分类轴不为空 if(categoryList!=null&&categoryList.size()>0){ List categories = new ArrayList(); for(String dataKey:dataKeyMap.keySet()){//根据series name循环 Map seriesMap = new HashMap(); List seriesData = new ArrayList();//临时series中的data list for(Map category:categoryList){//根据x类别轴循环 //组织x轴数据 if(categories.size() datas,List categoryList,String seriesName){ HashMap chartMap = new HashMap(); if(datas!=null&&datas.size()>0){ //组装data数据 Map dataSetMap = new HashMap(); for(Map data:datas){ String key = data.get("category").toString(); dataSetMap.put(key, data); } List series = new ArrayList(); //分类不为空 if(categoryList!=null&&categoryList.size()>0){ //组织series数据 Map seriesMap = new HashMap(); List seriesDataList = new ArrayList(); for(Map category:categoryList){//根据类别循环 Map dataMap = new HashMap(); String key = category.get("key"); if(dataSetMap.get(key)!=null){ dataMap.put("y",dataSetMap.get(key).get("val")); }else{ dataMap.put("y",0); } dataMap.put("name", category.get("val")); seriesDataList.add(dataMap); } seriesMap.put("name", seriesName); seriesMap.put("type", "pie"); seriesMap.put("data", seriesDataList); series.add(seriesMap); chartMap.put("series", series); } chartMap.put("nodata", false);//有数据 }else{ chartMap.put("nodata", true);//无数据 } return chartMap; } }