From dce0021131e955bac968cb2a7e24ce3673eb1a3b Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 02 Aug 2021 17:22:15 +0800 Subject: [PATCH] 监测因子趋势图 --- screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 134 +++++++++++++++++++++++++++++++++----------- 1 files changed, 101 insertions(+), 33 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 2995c31..a67255f 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -1,12 +1,13 @@ package com.moral.api.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; import com.moral.api.entity.Sensor; import com.moral.api.mapper.DeviceMapper; import com.moral.api.service.DeviceService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.moral.api.service.HistoryHourlyService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; @@ -16,9 +17,18 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.TreeMap; +import java.util.stream.Collectors; /** * <p> @@ -42,49 +52,107 @@ QueryWrapper<Device> wrapper = new QueryWrapper(); wrapper.eq("monitor_point_id",monitorPointId); wrapper.eq("is_delete", Constants.NOT_DELETE); - List<Device> devices = deviceMapper.selectList(wrapper); - return devices; + return deviceMapper.selectList(wrapper); } @Override - public Map<String, Object> getSensorsByMac(String mac) { - //���redis��������������������������� - Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); - List<Sensor> sensors = device.getVersion().getSensors(); - Map<String, Object> result = new HashMap<>(); - for (Sensor sensor : sensors) { - String sensorCode = sensor.getCode(); - String name = sensor.getName(); - result.put(sensorCode, name); + public Map<String, Object> getSensorsByMac(Map<String, Object> params) { + String[] macs = params.get("macs").toString().split(","); + List<Map<String, Object>> elementLists = new ArrayList<>(); + + for (String mac : macs) { + //���redis��������������������������� + Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac); + List<Sensor> sensors = device.getVersion().getSensors(); + Map<String, Object> map = new HashMap<>(); + for (Sensor sensor : sensors) { + String sensorCode = sensor.getCode(); + String name = sensor.getName(); + map.put(sensorCode, name); + } + elementLists.add(map); } - return result; + + Map<String, Object> map = elementLists.parallelStream() + .filter(elementList -> elementList.size() != 0) + .reduce((a, b) -> { + a.keySet().retainAll(b.keySet()); + return a; + }).orElse(new HashMap<>()); + return map; } @Override public List<Map<String, Object>> getTrendChartData(Map<String, Object> params) { Object type = params.get("type"); - String start = params.remove("time").toString(); + //������mac + String[] macs = params.remove("macs").toString().split(","); + //������������ + String[] times = params.remove("times").toString().split(","); + //������code + String sensorCode = params.get("sensorCode").toString(); String end; String timeUnits; String dateFormat; - if ("day".equals(type)) { - end = DateUtils.getDateAddDay(start, 1); - timeUnits = "hourly"; - dateFormat = "%H"; - } else if ("month".equals(type)) { - end = DateUtils.getDateAddMonth(start, 1); - timeUnits = "daily"; - dateFormat = "%d"; - } else { - end = DateUtils.getDateAddYear(start, 1); - timeUnits = "monthly"; - dateFormat = "%m"; - } - params.put("dateFormat", dateFormat); - params.put("timeUnits", timeUnits); - params.put("start", start); - params.put("end", end); - return deviceMapper.getTrendChartData(params); - } + //���������������,time=data + List<Map<String, Object>> result = new ArrayList<>(); + + for (String start : times) { + Map<String, Object> resultMap = new HashMap<>(); + + if ("day".equals(type)) { + end = DateUtils.getDateAddDay(start, 1); + timeUnits = "hourly"; + dateFormat = "%k"; + } else if ("month".equals(type)) { + end = DateUtils.getDateAddMonth(start, 1); + timeUnits = "daily"; + dateFormat = "%e"; + } else { + end = DateUtils.getDateAddYear(start, 1); + timeUnits = "monthly"; + dateFormat = "%c"; + } + params.put("timeUnits", timeUnits); + params.put("dateFormat", dateFormat); + params.put("start", start); + params.put("end", end); + params.put("macs", macs); + //��������������������������������� + List<Map<String, Object>> list = deviceMapper.getTrendChartData(params); + + //���time������ + Map<String, List<Map<String, Object>>> data = list.parallelStream() + .collect(Collectors.groupingBy(o -> o.get("time").toString())); + + //TreeMap<String, List<Map<String, Object>>> data = new TreeMap<>(listMap); + + for (Map.Entry<String, List<Map<String, Object>>> entry : data.entrySet()) { + List<Object> values = new ArrayList<>(); + String time = entry.getKey(); + List<Map<String, Object>> value = entry.getValue(); + if (value.isEmpty()) { + continue; + } + for (String mac : macs) { + boolean flag = false; + for (Map<String, Object> map : value) { + if (mac.equals(map.get("mac"))) { + Object o = map.get(sensorCode); + values.add(o); + flag = true; + break; + } + } + if (!flag) { + values.add(""); + } + } + resultMap.put(time, values); + } + result.add(resultMap); + } + return result; + } } -- Gitblit v1.8.0