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<Map> queryList,Map<String,Object> chartParams, double step){
|
Map chartMap = new HashMap();
|
if(queryList!=null&&queryList.size()>0){
|
//x分类轴
|
List<String> categories = new ArrayList<String>();
|
//临时dataList
|
Map<String,List> tempListMap = new HashMap<String,List>();
|
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<Map> series = new ArrayList<Map>();
|
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<Map> queryList,Map<String,Object> chartParams,List<String> categories, double step){
|
Map chartMap = new HashMap();
|
if(queryList!=null&&queryList.size()>0){
|
//临时dataList
|
Map<String,List> tempListMap = new HashMap<String,List>();
|
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<Map> series = new ArrayList<Map>();
|
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<Map> dataList,LinkedHashMap<String,String> dataNameMap,List<Map> cateList, double step){
|
Map chartMap = new HashMap();
|
if(dataList!=null&&dataList.size()>0){
|
List<String> categories = new ArrayList<String>();
|
for(Map cate:cateList){
|
categories.add(cate.get("val").toString());
|
}
|
//临时dataList
|
Map<String,List> tempListMap = new HashMap<String,List>();
|
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<Map> series = new ArrayList<Map>();
|
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<Map> datas,List<Map> categoryList,Map<String,String> dataKeyMap,double step){
|
HashMap chartMap = new HashMap();
|
if(datas!=null&&datas.size()>0){
|
//组装data数据
|
Map<String,Map> dataSetMap = new HashMap<String,Map>();
|
for(Map data:datas){
|
String key = data.get("datakey").toString() + "_" + data.get("category").toString();
|
dataSetMap.put(key, data);
|
}
|
|
List<Map> series = new ArrayList<Map>();
|
//X分类轴不为空
|
if(categoryList!=null&&categoryList.size()>0){
|
List<String> categories = new ArrayList<String>();
|
for(String dataKey:dataKeyMap.keySet()){//根据series name循环
|
Map seriesMap = new HashMap();
|
List seriesData = new ArrayList();//临时series中的data list
|
for(Map<String,String> category:categoryList){//根据x类别轴循环
|
//组织x轴数据
|
if(categories.size()<categoryList.size()){
|
categories.add(category.get("val"));
|
}
|
//组织series数据
|
String key = dataKey + "_" + category.get("key");
|
if(dataSetMap.get(key)!=null){
|
seriesData.add(dataSetMap.get(key).get("val"));
|
}else{
|
seriesData.add(0);
|
}
|
}
|
seriesMap.put("name", dataKeyMap.get(dataKey));
|
seriesMap.put("data", seriesData);
|
series.add(seriesMap);
|
}
|
chartMap.put("categories", categories);
|
chartMap.put("series", series);
|
}
|
chartMap.put("nodata", false);//有数据
|
}else{
|
chartMap.put("nodata", true);//无数据
|
}
|
return chartMap;
|
}
|
|
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
public static Map createHchartPieMap(List<Map> datas,List<Map> categoryList,String seriesName){
|
HashMap chartMap = new HashMap();
|
if(datas!=null&&datas.size()>0){
|
//组装data数据
|
Map<String,Map> dataSetMap = new HashMap<String,Map>();
|
for(Map data:datas){
|
String key = data.get("category").toString();
|
dataSetMap.put(key, data);
|
}
|
|
List<Map> series = new ArrayList<Map>();
|
//分类不为空
|
if(categoryList!=null&&categoryList.size()>0){
|
//组织series数据
|
Map seriesMap = new HashMap();
|
List<Map> seriesDataList = new ArrayList<Map>();
|
for(Map<String,String> 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;
|
}
|
}
|