From cdec9062c85f52d43e8d74e82cbcf9f8606ebb01 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Tue, 30 Jan 2024 16:39:59 +0800
Subject: [PATCH] chore:设备在线率接口提交

---
 screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java |  546 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 511 insertions(+), 35 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
index 8172916..e560813 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -1,20 +1,30 @@
 package com.moral.api.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.*;
+import com.moral.api.mapper.DeviceMapper;
+import com.moral.api.mapper.HistoryMonthlyMapper;
+import com.moral.api.mapper.OrganizationMapper;
+import com.moral.api.pojo.dto.dataDisplay.HeatMapDTO;
 import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
 import com.moral.api.pojo.dto.dataDisplay.SensorComparisonDisplayDTO;
 import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
 import com.moral.api.pojo.form.dataDisplay.SensorComparisonDisplayForm;
 import com.moral.api.service.*;
+import com.moral.api.utils.GetCenterPointFromListOfCoordinates;
 import com.moral.constant.Constants;
+import com.moral.constant.SeparateTableType;
 import com.moral.pojo.AQI;
 import com.moral.util.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.util.*;
+import java.util.stream.Collectors;
+
 
 /**
  * @ClassName DataDisplayServiceImpl
@@ -24,6 +34,7 @@
  * @Version TODO
  **/
 @Service
+@Slf4j
 public class DataDisplayServiceImpl implements DataDisplayService {
 
     @Autowired
@@ -33,23 +44,35 @@
     @Autowired
     HistoryHourlyService historyHourlyService;
     @Autowired
+    HistoryMonthlyMapper historyMonthlyMapper;
+    @Autowired
     HistoryWeeklyService historyWeeklyService;
     @Autowired
     HistoryMonthlyService historyMonthlyService;
+    @Autowired
+    OrganizationMapper organizationMapper;
+
+    @Autowired
+    DeviceMapper deviceMapper;
 
     @Override
     public List<MonitorPointDataDisplayDTO> getMonitorPointDisplayData(MonitorPointDataDisplayForm form) {
         //������
-        Integer monitorPointId = form.getMonitorPointId();
+//        Integer monitorPointId = form.getMacs();
+        List<String> macs = form.getMacs();
         String reportType = form.getReportType();
         Date startTime = form.getStartTime();
         Date endTime = form.getEndTime();
         //������������id������������������������������
-        List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId);
+//        List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId);
+        QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
+        deviceQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
+        deviceQueryWrapper.in("mac", macs);
+        List<Device> devices = deviceMapper.selectList(deviceQueryWrapper);
         Map<String, Device> deviceMap = new HashMap<>();
-        List<String> macs = new ArrayList<>();
+//        List<String> ListMacs = new ArrayList<>();
         devices.forEach(value -> {
-            macs.add(value.getMac());
+//            ListMacs.add(value.getMac());
             deviceMap.put(value.getMac(), value);
         });
         List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>();
@@ -69,20 +92,26 @@
         }
         //���������������������������������������������������������
         else if (reportType.equals(Constants.HOURLY_REPORT)) {
-            Map<String, HistoryHourly> macDataMap = new HashMap<>();
+            Map<String, List<HistoryHourly>> macDataMap = new HashMap<>();
             //������������
             macs.forEach(value -> {
-                List<HistoryHourly> datas = historyHourlyService.getValueByMacAndTime(value, startTime, startTime);
+                List<HistoryHourly> datas = historyHourlyService.getValueByMacAndTime(value, startTime, endTime);
                 if (datas.size() != 0)
-                    macDataMap.put(value, datas.get(0));
+                    macDataMap.put(value,datas);
             });
             if (macDataMap.size() != 0)
                 dtos = calculateReportData(macDataMap, deviceMap, reportType, startTime);
         }
         //���������������������������������������������
         else if (reportType.equals(Constants.DAILY_REPORT)) {
+            Map<String, List<HistoryDaily>> macDataMap = new HashMap<>();
             //������������
-            Map<String, HistoryDaily> macDataMap = historyDailyService.getHistoryDailyByMacsAndDate(macs, startTime);
+            macs.forEach(value -> {
+                List<HistoryDaily> datas = historyDailyService.getHistoryDailyByMacAndTimeSlot(value, startTime, endTime);
+                if (datas.size() != 0)
+                    macDataMap.put(value,datas);
+            });
+
             if (macDataMap.size() != 0)
                 dtos = calculateReportData(macDataMap, deviceMap, reportType, startTime);
         }
@@ -97,7 +126,15 @@
         else if (reportType.equals(Constants.MONTHLY_REPORT)) {
             //������������������������������������������������������������������������������������������������
             Map<String, List<HistoryDaily>> macDataDailyMap = new HashMap<>();
-            Map<String, HistoryMonthly> macDataMonthlyMap = historyMonthlyService.getHistoryMonthlyByMacsAndDate(macs, startTime);
+            Map<String, List<HistoryMonthly>> macDataMonthlyMap = new HashMap<>();
+            macs.forEach(mac -> {
+                QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>();
+                wrapper.eq("mac",mac);
+                wrapper.between("time",startTime,endTime);
+                List<HistoryMonthly> monthlyList = historyMonthlyMapper.selectList(wrapper);
+                if (!ObjectUtils.isEmpty(monthlyList))
+                    macDataMonthlyMap.put(mac, monthlyList);
+            });
             macs.forEach(mac -> {
                 List<HistoryDaily> dailyDatas = historyDailyService.getHistoryDailyByMacAndTimeSlot(mac, startTime, endTime);
                 if (!ObjectUtils.isEmpty(dailyDatas))
@@ -211,6 +248,377 @@
             dtos.add(dto);
         }
         return dtos;
+    }
+
+    @Override
+    public List<SensorComparisonDisplayDTO> getSensorComparisonDisplayDataV2(Map<String, Object> params) {
+        //������
+        List<String> sensors = (List<String>) params.get("sensorCodes");
+        /*Date startDate = form.getStartDate();
+        Date endDate = form.getEndDate();*/
+        //������������
+        List<String> times = (List<String>) params.get("times");
+        String startTime = times.get(0);
+        String endTime = times.get(1);
+        String mac = params.get("mac").toString();
+        String reportType = params.get("reportType").toString();
+        Map<String, String> timeValueMap = new LinkedHashMap<>();//key���time���value������������json
+        //���������������
+        if (reportType.equals(Constants.MONTHLY_REPORT)) {
+            Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_EN);
+            Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_EN);
+            //List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(mac, startDate, endDate);
+            QueryWrapper<HistoryMonthly> historyMonthlyQueryWrapper = new QueryWrapper<>();
+            historyMonthlyQueryWrapper.eq("mac",mac);
+            historyMonthlyQueryWrapper.between("time",startTime.substring(0,7)+"-01 00:00:00",endTime.substring(0,7)+"-01 00:00:00");
+            List<HistoryMonthly> monthlies = historyMonthlyMapper.selectList(historyMonthlyQueryWrapper);
+            for (HistoryMonthly historyMonthly : monthlies) {
+                Date time = historyMonthly.getTime();
+                String dateStr = DateUtils.dateToDateString(time, "yyyy-MM");
+                String value = historyMonthly.getValue();
+                timeValueMap.put(dateStr, value);
+            }
+            //���������������������
+            Date middleDate = startDate;
+            while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_EN),DateUtils.yyyy_MM_EN)<=0){
+                if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_EN)) == null)
+                    timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_EN), null);
+                middleDate = DateUtils.addMonths(middleDate,1);
+            }
+        }
+        //������������������
+        else if (reportType.equals(Constants.HOURLY_REPORT)) {
+            Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN);
+            Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN);
+            List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(mac, startDate, endDate);
+            for (HistoryHourly historyHourly : hourlies) {
+                Date time = historyHourly.getTime();
+                String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd HH");
+                String value = historyHourly.getValue();
+                timeValueMap.put(dateStr, value);
+            }
+            //���������������������
+            Date middleDate = startDate;
+            while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.yyyy_MM_dd_HH_EN)<=0){
+                if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN)) == null)
+                    timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN), null);
+                middleDate = DateUtils.addHours(middleDate,1);
+            }
+        }
+        //���������������
+        else if (reportType.equals(Constants.DAILY_REPORT)) {
+            Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_EN);
+            Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_EN);
+            List<HistoryDaily> dailies = historyDailyService.getHistoryDailyByMacAndTimeSlot(mac, startDate, endDate);
+            for (HistoryDaily historyDaily : dailies) {
+                Date time = historyDaily.getTime();
+                String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd");
+                String value = historyDaily.getValue();
+                timeValueMap.put(String.valueOf(dateStr), value);
+            }
+            //���������������������
+            Date middleDate = startDate;
+            while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_EN),DateUtils.yyyy_MM_dd_EN)<=0){
+                if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_EN)) == null)
+                    timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_EN), null);
+                middleDate = DateUtils.addDays(middleDate,1);
+            }
+        } else
+            return null;
+        //������������
+        //timeValueMap = sortMapByTime(timeValueMap, reportType);
+        //������������������
+        List<SensorComparisonDisplayDTO> dtos = new ArrayList<>();
+        for (String sensor : sensors) {
+            SensorComparisonDisplayDTO dto = new SensorComparisonDisplayDTO();
+            List<Map<String, Object>> dtoTimeValueList = new ArrayList<>();
+            if(sensor.equals("a00e12") || sensor.equals("a00e03")){
+                dto.setCode("1");
+            }else if (sensor.equals("a01006")){
+                dto.setCode("2");
+            }else if (sensor.equals("a99054") || sensor.equals("a21005")){
+                dto.setCode("3");
+            }else {
+                dto.setCode("0");
+            }
+            dto.setSensorCode(sensor);
+            timeValueMap.forEach((time, valueJson) -> {
+                Map<String, Object> listMap = new HashMap<>();
+                //���������������������������������������������
+                if (valueJson == null) {
+                    listMap.put("time", time);
+                    listMap.put("value", "");
+                    dtoTimeValueList.add(listMap);
+                    return;
+                }
+                Map<String, Object> valueMap = JSON.parseObject(valueJson, Map.class);
+                Object sensorValueObject = valueMap.get(sensor);
+                //���������������������������������������������
+                if (sensorValueObject == null) {
+                    listMap.put("time", time);
+                    listMap.put("value", "");
+                    dtoTimeValueList.add(listMap);
+                    return;
+                }
+                //������������������������������������������
+                if (reportType.equals(Constants.HOURLY_REPORT)) {
+                    //���������������������N���������������
+                    if (!Constants.NORMAL_FLAG.equals(valueMap.get(sensor + "-Flag"))) {
+                        listMap.put("time", time);
+                        listMap.put("value", "");
+                        dtoTimeValueList.add(listMap);
+                        return;
+                    }
+                }
+                //������������
+                Double sensorValue = Double.parseDouble(sensorValueObject.toString());
+                //������������
+                listMap.put("time", time);
+                listMap.put("value", sensorValue);
+                dtoTimeValueList.add(listMap);
+            });
+            Collections.sort(dtoTimeValueList, new Comparator<Map<String, Object>>() {
+                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+                    String id1 = (String) o1.get("time");
+                    String id2 = (String) o2.get("time");
+                    return id1.compareTo(id2);
+                }
+
+            });
+            dto.setTimeValueList(dtoTimeValueList);
+            dtos.add(dto);
+        }
+        return dtos;
+    }
+
+    /**
+     * ���������������
+     * @param code
+     * @param startTime
+     * @param type
+     * @return
+     */
+    @Override
+    public List<HeatMapDTO> getHeatMapData(String code, String startTime, String type, String form) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("start",startTime);
+        map.put("type","$."+ type);
+
+        ArrayList<Integer> list = new ArrayList<>();
+
+//        ArrayList<Map<String, Object>> rsHeatMap = new ArrayList<>();
+        ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>();
+        if (form.equals("hour")){ //������
+            Date date1 = DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN);
+            List<String> tableNames = MybatisPLUSUtils.getTableNamesByWrapper(date1, date1, SeparateTableType.MONTH);
+//                for (Integer integer : list) {
+                    map.put("organizationIds",list);
+                    map.put("tableName",tableNames.get(0));
+//                    List<Map<String, Object>> heatMap = deviceMapper.getHeatMap(map);
+                   List<HeatMapDTO> heatMap = deviceMapper.getHeatMap(map);
+                    rsHeatMap.addAll(heatMap);
+//            }
+
+        }else { //���
+//            for (Integer integer : list) {
+                map.put("organizationIds",list);
+//                List<Map<String, Object>> heatMap = deviceMapper.getHeatMap(map);
+                List<HeatMapDTO> heatMap = deviceMapper.getHeatMap(map);
+                rsHeatMap.addAll(heatMap);
+//            }
+        }
+
+        return distrinList(rsHeatMap);
+    }
+
+    @Override
+    public List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("start",startTime);
+        map.put("type","$."+ type);
+        ArrayList<Integer> list = new ArrayList<>();
+        list.add(id);
+        ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>();
+        ArrayList<String> list1 = new ArrayList<>();
+        list1.add("���������������");
+        list1.add("���������������");
+        list1.add("���������������");
+        list1.add("���������������");
+        list1.add("������������������");
+
+        if (form.equals("hour")){ //������
+//            String[] split = startTime.split("-");
+//            String s = "_" + split[0] + split[1];
+            String dateString = DateUtils.stringToDateString(startTime, DateUtils.yyyy_MM_dd_HH_EN, DateUtils.yyyyMM_EN);
+            map.put("organizationIds",list);
+            map.put("tableName","_"+dateString);
+
+            List<HeatMapDTO> heatMap = deviceMapper.getHeatMapV1(map);
+            //������������
+            List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getTime() != null).collect(Collectors.toList());
+            if (ObjectUtils.isEmpty(collect1)){
+                return null;
+            }
+            for (HeatMapDTO heatMapDTO : heatMap) {
+//                if (list1.contains(heatMapDTO.getName())){
+                    if (type.equals("a34002") || type.equals("a21026")){
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?49.0:heatMapDTO.getCount());
+                    }else if (type.equals("a34004")){
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?20.0:heatMapDTO.getCount());
+                    }else if (type.equals("a21004")){
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?20.0:heatMapDTO.getCount());
+                    }else if (type.equals("a21005")){
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?1.0:heatMapDTO.getCount());
+                    }else if (type.equals("a05024")){
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?138.0:heatMapDTO.getCount());
+                    }else {
+                        heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?0.2:heatMapDTO.getCount());
+                    }
+//                }else {
+//                    if (ObjectUtils.isEmpty(heatMapDTO.getCount())){
+//                        heatMapDTO.setCount(0.0);
+//                    }
+//                }
+            }
+
+            getHeatMap(heatMap,type);
+            rsHeatMap.addAll(heatMap);
+        }else { //���
+            map.put("organizationIds",list);
+            List<HeatMapDTO> heatMap = deviceMapper.getHeatMapV1(map);
+            List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getTime() != null).collect(Collectors.toList());
+            if (ObjectUtils.isEmpty(collect1)){
+                return null;
+            }
+            for (HeatMapDTO heatMapDTO : heatMap) {
+                if (type.equals("a34002") || type.equals("a21026")){
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?49.0:heatMapDTO.getCount());
+                }else if (type.equals("a34004")){
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?34.0:heatMapDTO.getCount());
+                }else if (type.equals("a21004")){
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?39.0:heatMapDTO.getCount());
+                }else if (type.equals("a21005")){
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?1.9:heatMapDTO.getCount());
+                }else if (type.equals("a05024")){
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?100.0:heatMapDTO.getCount());
+                }else {
+                    heatMapDTO.setCount(ObjectUtils.isEmpty(heatMapDTO.getCount())?0.4:heatMapDTO.getCount());
+                }
+            }
+            getHeatMap(heatMap,type);
+            rsHeatMap.addAll(heatMap);
+        }
+        for (int i = 0; i <6; i++) {
+            HeatMapDTO heatMapDTO = new HeatMapDTO();
+            heatMapDTO.setCount(0.0);
+            if (i==0){
+                heatMapDTO.setLat(40.590436);
+                heatMapDTO.setLng(122.861935);
+                heatMapDTO.setMac("1111");
+                heatMapDTO.setName("1111");
+            }else if (i==1){
+                heatMapDTO.setLat(40.636617);
+                heatMapDTO.setLng(123.101544);
+                heatMapDTO.setMac("2222");
+                heatMapDTO.setName("2222");
+            }else if (i==2){
+                heatMapDTO.setLat(40.890881);
+                heatMapDTO.setLng(122.910687);
+                heatMapDTO.setMac("3333");
+                heatMapDTO.setName("3333");
+            }else if (i==3){
+                heatMapDTO.setLat(40.682129);
+                heatMapDTO.setLng(123.105836);
+                heatMapDTO.setMac("4444");
+                heatMapDTO.setName("4444");
+            }else if (i==4){
+                heatMapDTO.setLat(40.890037);
+                heatMapDTO.setLng(123.021151);
+                heatMapDTO.setMac("5555");
+                heatMapDTO.setName("5555");
+            }else {
+                heatMapDTO.setLat(41.051333);
+                heatMapDTO.setLng(122.505864);
+                heatMapDTO.setMac("6666");
+                heatMapDTO.setName("6666");
+            }
+            rsHeatMap.add(heatMapDTO);
+        }
+
+        return distrinList(rsHeatMap);
+    }
+
+    //������������
+    private void getHeatMap(List<HeatMapDTO> heatMap,String type) {
+        //������������
+        List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getGroupId() != null).collect(Collectors.toList());
+        if (ObjectUtils.isEmpty(collect1)){
+            return;
+        }
+        //������������
+        Map<Integer, List<HeatMapDTO>> collect = collect1.parallelStream().collect(Collectors.groupingBy(o ->o.getGroupId()));
+        Set<Integer> integers = collect.keySet();
+        int i = 0 ;
+        for (Integer integer : integers) {
+            ArrayList<Double> doubleArrayList = new ArrayList<>();
+            ArrayList<GeoCoordinate> geoCoordinates = new ArrayList<>();
+            List<HeatMapDTO> heatMapDTOS = collect.get(integer);
+            for (HeatMapDTO heatMapDTO : heatMapDTOS) {
+                GeoCoordinate geoCoordinate = new GeoCoordinate();
+                doubleArrayList.add(heatMapDTO.getCount());
+//                heatMapDTO.setCount(heatMapDTO.getCount());
+                if (type.equals("a21026")){
+                    heatMapDTO.setCount(1.0);
+                }else {
+                    heatMapDTO.setCount(0.0);
+                }
+
+                geoCoordinate.setLongitude(heatMapDTO.getLng());
+                geoCoordinate.setLatitude(heatMapDTO.getLat());
+                geoCoordinates.add(geoCoordinate);
+            }
+            if (!ObjectUtils.isEmpty(doubleArrayList)){
+                HeatMapDTO heatMapDTO = new HeatMapDTO();
+                //������������������
+                double asDouble = doubleArrayList.stream().mapToDouble(Double::valueOf).max().getAsDouble();
+                //���������������
+                GeoCoordinate centerPoint = GetCenterPointFromListOfCoordinates.getCenterPoint(geoCoordinates);
+//                double rsCode = asDouble - (doubleArrayList.size()*10);
+                double rsCode = asDouble - doubleArrayList.size()-1;
+//                log.info(asDouble+"-----"+rsCode);
+//                heatMapDTO.setCount(rsCode);
+                heatMapDTO.setCount(rsCode);
+//                heatMapDTO.setSum(asDouble);
+                heatMapDTO.setLng(centerPoint.getLongitude());
+                heatMapDTO.setLat(centerPoint.getLatitude());
+                heatMapDTO.setMac(i+"");
+                heatMapDTO.setName(integer+"");
+                heatMap.add(heatMapDTO);
+                i++;
+            }
+        }
+    }
+
+    /**
+     * ������������
+     * @param responseList
+     * @return
+     */
+    private List<HeatMapDTO> distrinList(List<HeatMapDTO> responseList){
+        List<HeatMapDTO> rsMap = new ArrayList<>();
+        Set<String> keysSet = new HashSet<String>();
+        for (HeatMapDTO heatMapDTO : responseList) {
+            String keys = String.valueOf(heatMapDTO.getMac());
+            int beforeSize = keysSet.size();
+            keysSet.add(keys);
+            int afterSize = keysSet.size();
+            if(afterSize == beforeSize + 1){
+                rsMap.add(heatMapDTO);
+            }
+        }
+        return rsMap;
+
+
     }
 
     /**
@@ -388,35 +796,103 @@
      */
     private <T> List<MonitorPointDataDisplayDTO> calculateReportData(Map<String, T> macDataMap, Map<String, Device> deviceMap, String reportType, Date... date) {
         List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>();
-        macDataMap.forEach((key, valueObject) -> {
-            MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
-            dto.setMac(key);
-            //���������map
-            Map<String, Object> valueMap;
-            //���������������value���������
-            Object valueO = ClassUtils.getPropertyValue(valueObject, "value");
-            if (valueO == null)
-                return;
-            String value = (String) valueO;
-            valueMap = JSON.parseObject(value, Map.class);
+        Set<String> strings = macDataMap.keySet();
+        for (String key : strings) {
+            if (reportType.equals("0")){
+                List<HistoryHourly> t = (List<HistoryHourly>)macDataMap.get(key);
+                for (HistoryHourly historyHourly : t) {
+                    MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+                    String value = historyHourly.getValue();
+                    Map map = JSON.parseObject(value, Map.class);
+                    String time = DateUtils.dateToDateString(historyHourly.getTime(), "yyyy-MM-dd HH:00:00");
+                    injectDataToDto(map, false, dto, reportType);
+                    dto.setTime(time);
+                    dto.setMac(key);
+                    dto.setDeviceName(deviceMap.get(key).getName());
+                    dtos.add(dto);
+                }
+            }
+            if (reportType.equals("1")){
+                List<HistoryDaily> t = (List<HistoryDaily>)macDataMap.get(key);
+                for (HistoryDaily historyDaily : t) {
+                    MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+                    String value = historyDaily.getValue();
+                    Map map = JSON.parseObject(value, Map.class);
+                    String time = DateUtils.dateToDateString(historyDaily.getTime(), "yyyy-MM-dd");
+                    injectDataToDto(map, false, dto, reportType);
+                    dto.setTime(time);
+                    dto.setMac(key);
+                    dto.setDeviceName(deviceMap.get(key).getName());
+                    dtos.add(dto);
+                }
+
+            }
+            if (reportType.equals("2")){
+                HistoryWeekly historyWeekly = (HistoryWeekly)macDataMap.get(key);
+                    MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+                    String value = historyWeekly.getValue();
+                    Map map = JSON.parseObject(value, Map.class);
+                    String time = DateUtils.dateToDateString(historyWeekly.getTime(), "yyyy-MM-dd");
+                    injectDataToDto(map, false, dto, reportType);
+                    dto.setTime(time);
+                    dto.setMac(key);
+                    dto.setDeviceName(deviceMap.get(key).getName());
+                    dtos.add(dto);
+
+            }
+            if (reportType.equals("3")){
+                List<HistoryMonthly> t = (List<HistoryMonthly>)macDataMap.get(key);
+                for (HistoryMonthly historyMonthly : t) {
+                    MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+                    String value = historyMonthly.getValue();
+                    Map map = JSON.parseObject(value, Map.class);
+                    String time = DateUtils.dateToDateString(historyMonthly.getTime(), "yyyy-MM");
+                    injectDataToDto(map, false, dto, reportType);
+                    dto.setTime(time);
+                    dto.setMac(key);
+                    dto.setDeviceName(deviceMap.get(key).getName());
+                    dtos.add(dto);
+                }
+            }
+        }
+
+//        macDataMap.forEach((key, valueObject) -> {
+//            MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+//            dto.setMac(key);
+//            //���������map
+//            Map<String, Object> valueMap;
+//            List<Map<String, Object>> list;
+//            //���������������value���������
+//            Object valueO = ClassUtils.getPropertyValue(valueObject, "value");
+//            if (valueO == null)
+//                return;
+//            String value = (String) valueO;
+//            list = JSON.parseObject(value, List.class);
+//            for (Map<String, Object> map : list) {
+//                String o = map.get("value").toString();
+//                valueMap = JSON.parseObject(o, Map.class);
+//                injectDataToDto(valueMap, false, dto, reportType);
+//                String deviceName = deviceMap.get(key).getName();
+//                dto.setDeviceName(deviceName);
+//                String startTime = DateUtils.dateToDateString((Date) map.get("time"), "yyyy-MM-dd HH:mm:ss");
+//                dto.setTime(startTime);
+//                dtos.add(dto);
+//            }
             //������������������
-            String deviceName = deviceMap.get(key).getName();
-            dto.setDeviceName(deviceName);
+
             //������������,������������������������������������������������������������������������������������������������������
-            String startTime = "";
-            if (valueObject instanceof HistoryHourly && date.length == 1)
-                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd HH:mm:ss");
-            else if (valueObject instanceof HistoryDaily && date.length == 1)
-                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd");
-            else if (valueObject instanceof HistoryWeekly && date.length == 2)
-                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd") + " -- " + DateUtils.dateToDateString(date[1], "yyyy-MM-dd");
-            else if (valueObject instanceof HistoryMonthly && date.length == 1)
-                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM");
-            dto.setTime(startTime);
+//            String startTime = "";
+//            if (valueObject instanceof HistoryHourly && date.length == 1)
+//                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd HH:mm:ss");
+//            else if (valueObject instanceof HistoryDaily && date.length == 1)
+//                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd");
+//            else if (valueObject instanceof HistoryWeekly && date.length == 2)
+//                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd") + " -- " + DateUtils.dateToDateString(date[1], "yyyy-MM-dd");
+//            else if (valueObject instanceof HistoryMonthly && date.length == 1)
+//                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM");
+//            dto.setTime(startTime);
             //������������
-            injectDataToDto(valueMap, false, dto, reportType);
-            dtos.add(dto);
-        });
+//        });
         return dtos;
     }
 

--
Gitblit v1.8.0