cy
2022-06-21 129904537f66509f97b285e7eb4f42b3dc349dd0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
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;
    }
}