From 9009798abd7abfd726bcda80267c7d53dd3b8da3 Mon Sep 17 00:00:00 2001 From: ZhuDongming <773644075@qq.com> Date: Wed, 12 Jun 2019 14:33:25 +0800 Subject: [PATCH] Merge branch 'master' of http://blit.7drlb.com:8888/r/screen_api_v2 --- src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 141 ++++++++++++++++++++++++++++++++++------------ 1 files changed, 103 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java index e71ff2a..9b932f8 100644 --- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java @@ -4,7 +4,7 @@ import static org.springframework.util.ObjectUtils.isEmpty; import java.math.BigDecimal; -import java.math.RoundingMode; +import java.text.ParseException; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; @@ -15,7 +15,6 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,11 +30,6 @@ import javax.annotation.Resource; -import com.moral.common.util.ReportTimeFormat; -import com.moral.entity.charts.DataCondition; -import com.moral.entity.charts.LineChartCriteria; -import com.moral.entity.charts.PairData; -import com.moral.entity.charts.TimePeriod; import org.apache.commons.lang3.time.DateUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -43,17 +37,23 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.moral.common.util.CalculateUtils; +import com.moral.common.util.ParameterUtils; +import com.moral.common.util.ReportTimeFormat; import com.moral.common.util.ResourceUtil; import com.moral.common.util.ValidateUtil; -import com.moral.entity.Device; import com.moral.entity.Sensor; +import com.moral.entity.charts.DataCondition; +import com.moral.entity.charts.LineChartCriteria; +import com.moral.entity.charts.TimePeriod; +import com.moral.mapper.AlarmDailyMapper; +import com.moral.mapper.AlarmMapper; import com.moral.mapper.DeviceMapper; import com.moral.mapper.HistoryMinutelyMapper; import com.moral.mapper.SensorMapper; import com.moral.service.HistoryMinutelyService; @Service -@SuppressWarnings({ "unchecked", "unused" }) +@SuppressWarnings({ "unchecked", "unused", "rawtypes" }) public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { @Resource @@ -65,19 +65,19 @@ @Resource private SensorMapper sensorMapper; - // volatile + @Resource + private AlarmDailyMapper alarmDailyMapper; @Override public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { - ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); + //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); LocalDate localDate = LocalDate.now(); // ������00:00:00 parameters.put("start", localDate.minusDays(1)); // ������00:00:00 parameters.put("end", localDate); - String[] macKeys = { "e1", "e2", "e10", "e11", "e15", "e16" }; - parameters.put("sensorKeys", Arrays.asList(macKeys)); + parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); return getAQIByDataMap(average); } @@ -135,12 +135,13 @@ } @Override - public Map<String, List<Object>> getCompareReport(Map<String, Object> parameters) throws Exception { - Map<String, List<Object>> resultMap = new HashMap<String, List<Object>>(); + public Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception { + Map<String, List> resultMap = new HashMap<String, List>(); List<Map<String, Object>> list = JSON.parseObject((String)parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() {}); String type = (String) parameters.get("type"); - parameters.putAll(getElementByType(type)); + // parameters.putAll(getElementByType(type)); + ParameterUtils.getElementByType(parameters); Integer timeLength = Integer.valueOf(parameters.remove("timeLength").toString()); if ("month".equals(type)) { for (Map<String, Object> map : list) { @@ -183,32 +184,78 @@ } Object[] datas = new Object[list.size()]; Object[] deviceCounts = new Object[list.size()]; + Object[] alarmDatas = new Object[list.size()]; 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", ""))); + return o1.split("-")[0].compareTo(o2.split("-")[0]); + //return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", ""))); } }); + Map<String, Double> sortMap = new HashMap<String, Double>(); for (Object object : dataList) { Map<String, Object> map = (Map<String, Object>)object; for (String key : map.keySet()) { - if (key.startsWith("data")) { - int index = Integer.valueOf(key.replace("data", "")); - datas[index] = map.get(key); - } - if (key.startsWith("deviceCount")) { - int index = Integer.valueOf(key.replace("deviceCount", "")); - deviceCounts[index] = map.get(key); - } - if (key.startsWith("sensors")) { - sensors.addAll((List<String>) map.get(key)); + int index = Integer.valueOf(key.substring(key.length() - 1)); + String actual = key.substring(0, key.length() - 1); + Object obj = map.get(key); + switch (actual) { + case "data": + datas[index] = obj; + break; + case "deviceCount": + deviceCounts[index] = obj; + break; + case "alarmData": + alarmDatas[index] = obj; + if (!ObjectUtils.isEmpty(obj)) { + Map<String, BigDecimal> mapData = (Map<String, BigDecimal>) obj; + BigDecimal sum = mapData.remove("sum"); + for (Entry<String, BigDecimal> entry : mapData.entrySet()) { + if (!"name".equals(entry.getKey())) { + sortMap.put(entry.getKey() + "-" + index, new BigDecimal(100).multiply(entry.getValue()) + .divide(sum, 2, BigDecimal.ROUND_HALF_UP).doubleValue()); + + } + } + } + break; + case "sensors": + sensors.addAll((List<String>) obj); + break; } } } + List<Map.Entry<String, Double>> sortList = new ArrayList<Map.Entry<String,Double>>(sortMap.entrySet()); + Collections.sort(sortList,new Comparator<Map.Entry<String,Double>>(){ + @Override + public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { + if (o2.getValue().compareTo(o1.getValue()) == 0) { + String[] key1 = o1.getKey().split("-"); + String[] key2 = o2.getKey().split("-"); +// String sensor1 = key1[0].replace("e", ""); +// String sensor2 = key2[0].replace("e", ""); +// if (Integer.valueOf(sensor1).compareTo(Integer.valueOf(sensor2)) == 0) { +// return Integer.compare(Integer.valueOf(key1[1]), Integer.valueOf(key2[1])); +// } +// return Integer.valueOf(sensor1).compareTo(Integer.valueOf(sensor2)); + if (key1[0].compareTo(key2[0]) == 0) { + return Integer.compare(Integer.valueOf(key1[1]), Integer.valueOf(key2[1])); + } else { + return key1[0].compareTo(key2[0]); + } + } else { + return o2.getValue().compareTo(o1.getValue()); + } + } + + }); resultMap.put("times", timeList); resultMap.put("datas", Arrays.asList(datas)); resultMap.put("deviceCounts", Arrays.asList(deviceCounts)); + resultMap.put("alarmDatas", Arrays.asList(alarmDatas)); resultMap.put("sensors", new ArrayList<Object>(sensors)); + resultMap.put("sortList", sortList); return resultMap; } @@ -250,14 +297,32 @@ resultMap.put("deviceCount" + part, deviceCount); resultMap.put("data" + part, doubleMap); resultMap.put("sensors" + part, sensors); + Object type = parameters.get("type"); + if ("year".equals(type) || "month".equals(type)) { + parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); + List<Map<String, Object>> alarmData = alarmDailyMapper.getAlarmData(parameters); + if (!ObjectUtils.isEmpty(alarmData)) { + resultMap.put("alarmData" + part, alarmDailyMapper.getAlarmData(parameters).get(0)); + } + } return resultMap; } @Override public List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception { - String type = (String) parameters.get("type"); + convertQueryParam(parameters); + if (!ObjectUtils.isEmpty(parameters.get("compensate"))) { + parameters.put("timeUnits", "10min"); + } + return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); + } + + @Override + public void convertQueryParam(Map<String, Object> parameters) throws ParseException { if (!parameters.containsKey("field")) { - parameters.putAll(getElementByType(type)); + // String type = (String) parameters.get("type"); + // parameters.putAll(getElementByType(type)); + ParameterUtils.getElementByType(parameters); } String time = (String) parameters.get("time"); String format = (String) parameters.get("format"); @@ -289,19 +354,22 @@ List<Sensor> sensorList = sensorMapper.getSensorsByCriteria(parameters); for (Sensor sensor : sensorList) { sensorKeys.add(sensor.getSensorKey()); - sensors.add(sensor.getSensorKey() + "-" + sensor.getName() + "-" + sensor.getUnit()); + String string = sensor.getSensorKey() + "-" + sensor.getName() + "-" + sensor.getUnit(); + if (parameters.containsKey("description")) { + string += "-" + sensor.getDescription(); + } + sensors.add(string); } } parameters.put("sensorKeys", sensorKeys); parameters.put("sensors", sensors); - - return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters); } @Override public Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters) { - ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); - ValidateUtil.notNull(parameters.get("macKey"), "param.is.null"); + //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); + Object sensorKey = parameters.remove("macKey"); + ValidateUtil.notNull(sensorKey, "param.is.null"); Map<String, Object> result = new HashMap<String, Object>(); LocalDate end = LocalDate.now(),start; // ��������������������������������������� @@ -314,10 +382,7 @@ } parameters.put("start", start); parameters.put("end", end); - String sensorKey = (String) parameters.remove("macKey"); - List<String> sensorKeys = new ArrayList<String>(); - sensorKeys.add(sensorKey); - parameters.put("sensorKeys", sensorKeys); + parameters.put("sensorKeys", Arrays.asList(sensorKey)); Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); if (isEmpty(average)) { -- Gitblit v1.8.0