From 8e33ede9353a886e46c113a7556fea63eb402672 Mon Sep 17 00:00:00 2001
From: xufenglei <xufenglei>
Date: Fri, 23 Mar 2018 15:08:55 +0800
Subject: [PATCH] 报表 优化
---
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 86 ++++++++++++++++++++++++------------------
1 files changed, 49 insertions(+), 37 deletions(-)
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index fab186f..f29602a 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -9,7 +9,6 @@
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -27,8 +26,6 @@
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.stream.Collector;
-import java.util.stream.Collectors;
import javax.annotation.Resource;
@@ -147,6 +144,12 @@
Map<String, List<Object>> resultMap = new HashMap<String, List<Object>>();
List<Map<String, Object>> list = JSON.parseObject((String)parameters.get("items"), new TypeReference<List<Map<String, Object>>>() {});
parameters.remove("items");
+ Map<String, Object> timeType = JSON.parseObject((String)parameters.get("timeTypes"), new TypeReference<Map<String, Object>>() {});
+ parameters.remove("timeTypes");
+ parameters.putAll(timeType);
+ parameters.put("type", parameters.get("value"));
+ parameters.remove("value");
+
ExecutorService threadPool = Executors.newCachedThreadPool();
CompletionService<Map<String, List<Object>>> cs = new ExecutorCompletionService<Map<String, List<Object>>>(threadPool);
@@ -224,23 +227,13 @@
List<Object> timeList = (List<Object>) parameters.get("timeList");
List<Object> dataList = new ArrayList<Object>();
- Set<String> sensors ;
- if (parameters.containsKey("sensorKey")) {
- String sensorKey = (String) parameters.get("sensorKey");
- Sensor sensor = new Sensor();
- sensor.setSensorKey(sensorKey);
- sensor = sensorMapper.selectOne(sensor );
- sensors = new HashSet<String>();
- sensors.add(sensorKey + "-" + sensor.getName() + "-" + sensor.getUnit());
- } else {
- sensors = new TreeSet<String>(new Comparator<String>() {
- @Override
- public int compare(String o1, String o2) {
- return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", "")));
- }
- });
- sensors.addAll((Set<String>)parameters.get("sensors"));
- }
+ Set<String> sensors = new TreeSet<String>(new Comparator<String>() {
+ @Override
+ public int compare(String o1, String o2) {
+ return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", "")));
+ }
+ });
+ sensors.addAll((Set<String>)parameters.get("sensors"));
Map<String, Double[]> doubleMap = new LinkedHashMap<String, Double[]>();
for (Map<String, Object> map : resultList) {
String time = map.get("time").toString();
@@ -271,7 +264,7 @@
@Override
public List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception {
- List<Map<String, Object>> resul ;
+ List<Map<String, Object>> resultList ;
String type = (String) parameters.get("type");
String time = (String) parameters.get("time");
@@ -300,15 +293,30 @@
parameters.put("end", end);
if (parameters.containsKey("sensorKey")) {
- String sensorKey = (String) parameters.get("sensorKey");
- String sensorKeyColumn = "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey;
+ List<String> sensors;
+ try {
+ sensors = JSON.parseObject((String)parameters.get("sensors"), new TypeReference<List<String>>() {});
+ parameters.put("sensors", new HashSet<String>(sensors));
+ } catch (Exception e) {
+ sensors = new ArrayList<String>();
+ sensors.add((String)parameters.get("sensorKey"));
+ }
+ String sensorKeyColumn = "";
+ for (int i = 0; i < sensors.size(); i++) {
+ String sensorKey = sensors.get(i).split("-")[0];
+ sensorKeyColumn += "AVG(json -> '$." + sensorKey + "[0]') " + sensorKey;
+ if (i != sensors.size() - 1) {
+ sensorKeyColumn += " ,";
+ }
+
+ }
parameters.put("sensorKeyColumn", sensorKeyColumn);
}
//sensorKeys.clear();
// ������������������
if (!parameters.containsKey("mac")) {
- resul = new ArrayList<Map<String,Object>>();
+ resultList = new ArrayList<Map<String,Object>>();
Integer monitorPointId = Integer.valueOf(parameters.get("monitorPoint").toString());
List<Map<String, Object>> deviceVersions = deviceMapper.getDeviceVersionIdByMonitorPoint(monitorPointId);
ExecutorService threadPool = Executors.newCachedThreadPool();
@@ -373,7 +381,7 @@
for (String sensorKey : value.keySet()) {
resultMap.put(sensorKey, value.get(sensorKey)[2]);
}
- resul.add(resultMap);
+ resultList.add(resultMap);
}
// ������ ���������
} else {
@@ -388,9 +396,9 @@
parameters.put("sensorKeyColumn", sensorKeyColumn);
}
- resul = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
+ resultList = historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
}
- return resul;
+ return resultList;
}
private String getSensorKeyColumnBySensors(List<Map<String, Object>> sensors,Map<String, Object> parameters) {
@@ -448,16 +456,20 @@
* @return
*/
@Override
- public List<List<PairData>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria){
- String sensorKey = lineChartCriteria.getSensorKey();
- TimePeriod timePeriod = lineChartCriteria.getTimePeriod();
- List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions();
- List<List<PairData>> list = new ArrayList<>();
- dataConditionList.forEach(item -> {
- List<PairData> pairDataList = queryOneLineChartDateByCrieria(sensorKey,timePeriod,item);
- list.add(pairDataList);
- });
- return list;
+ public Map<String, List<List<PairData>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria){
+ Map<String,List<List<PairData>>> listMap = new HashMap<>();
+ for(String sensorKey:lineChartCriteria.getSensorKeys()){
+ TimePeriod timePeriod = lineChartCriteria.getTimePeriod();
+ List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions();
+ List<List<PairData>> list = new ArrayList<>();
+ dataConditionList.forEach(item -> {
+ List<PairData> pairDataList = queryOneLineChartDateByCrieria(sensorKey,timePeriod,item);
+ list.add(pairDataList);
+ });
+ listMap.put(sensorKey,list);
+ }
+
+ return listMap;
}
/**
--
Gitblit v1.8.0