


group by的时候实际上只会统计已经发生的数据。也就是说上图中Tue,Fri这两个横轴的值时不会被统计出来的,这时候就是前后端帅锅的时候了。
Echats要求的数据唯一的需要就是数据全。那么首先我们得知道完整的横坐标集合。另外一个重要点就是默认数据应该是啥?
- public abstract class DataFill {
- /**
- * 提供默认值
- */
- public abstract Object defaultData();
- /**
- * 全集合记录
- */
- public abstract List<String> keyNameList();
-
- /**
- * 填充数据
- */
- public
void fillValue(String fieldName ,String fillName, List list) { - fillValue(1,fieldName,fillName,list);
- }
-
- /**
- * 最终填充数据业务CODE
- */
- public
void fillValue(Integer sameLevel , String fieldName ,String fillName, List list) { - //TODO
- }
- }
- 复制代码

- if (list == null) {
- list = new ArrayList<>();
- }
- List<String> newBerthNameList = new ArrayList<>(keyNameList());
- if (CollectionUtils.isEmpty(newBerthNameList)) {
- return;
- }
- 复制代码
在平时的数据交互中我总结的大多是三种数据类型。
首先【基础数据】的传参我觉得并不存在补全数据一说,因为他的载体太过于单一,所以这里基础数据我们就忽略掉了。只考虑后面两种情况。
不管是Json还是Map甚至是Bean,我们最终都是获取指定字段的内容,从而和横坐标集合进行比对的。我这里是分类讨论,聪明的你也可以全部转换为Json处理。
-
- for (T item : list) {
- Class> itemClass = item.getClass();
- commonClazz = itemClass;
- if (itemClass.isAssignableFrom(JSONObject.class)||itemClass.isAssignableFrom(Map.class)) {
- Map<String, Object> itemMap = (Map<String, Object>) item;
- Object filedObj = itemMap.get(fieldName);
- if (filedObj != null) {
- newBerthNameList.remove(filedObj.toString());
- }
- } else {
- //bean
- try {
- Field field = itemClass.getField(fieldName);
- Object filedObj = field.get(item);
- if (filedObj != null) {
- newBerthNameList.remove(filedObj.toString());
- }
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- }
- }
- }
- 复制代码


sameLevel字段来标注是否填充在同一级上。否则我们就是在不同层级上。不同级就另外需要指定父级名称。- if (commonClazz==null||commonClazz.isAssignableFrom(JSONObject.class)||commonClazz.isAssignableFrom(Map.class)) {
- Map<String, Object> map = new HashMap<>();
- map.put(fieldName, berthName);
- //sameLevel=0 表示默认数据需要已同级填充
- if (sameLevel == 0) {
- Map<String,Object> temMap = (Map<String, Object>) defaultData();
- map.putAll(temMap);
- } else {
- map.put(fillName, defaultData());
- }
- list.add((T) map);
- }
- 复制代码
- public Map<String, Object> groupByField(GroupBean groupBean) {
- List<String> fieldResultList = 获取完整横坐标集合数据;
- DataFill dataFill = new DataFill() {
- @Override
- public Object defaultData() {
- return 0;
- }
-
- @Override
- public List<String> keyNameList() {
- return fieldResultList;
- }
- };
- //具体的逻辑统计
- List<Map<String,Object>> resultList = selectNameCountGroupByField(groupBean.getTableId(), groupBean.getGroupFieldId());
- //按照name,count统计填充
- dataFill.fillValue("name", "count", resultList);
- Map<String, Object> collect = new HashMap<>();
- for (Map<String, Object> temMap : resultList) {
- String key = ChineseToPY.getInstance().getEnglish(temMap.get("name").toString());
- Object value = temMap.get("count");
- collect.put(key, value);
- }
- return collect;
- }
- 复制代码