From 8a9366f0ff6202144ef2cb1765b873d0f0c3c626 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 20 Dec 2023 15:57:17 +0800
Subject: [PATCH] chore:热力图层级代码提交

---
 screen-api/src/main/java/com/moral/api/utils/HeatMapTimeUtils.java               |  167 ++++++++++++++++
 screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java  |  105 ++++++++++
 screen-api/src/main/java/com/moral/api/service/OrganizationService.java          |    9 
 screen-api/src/main/java/com/moral/api/service/DataDisplayService.java           |    9 
 screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java |   30 +++
 screen-api/src/main/java/com/moral/api/entity/DeviceMapHierarchy.java            |   57 +++++
 screen-api/src/main/java/com/moral/api/controller/HeatMapController.java         |  148 --------------
 screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/HeatMapDTO.java      |    2 
 screen-api/src/main/java/com/moral/api/mapper/DeviceMapHierarchyMapper.java      |    9 
 screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java                  |    3 
 screen-api/src/main/java/com/moral/api/controller/OrganizationController.java    |   14 +
 screen-api/src/main/resources/mapper/DeviceMapper.xml                            |   31 +++
 12 files changed, 434 insertions(+), 150 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java b/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
index 2b149c1..7ca6485 100644
--- a/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
@@ -4,24 +4,18 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import java.time.LocalDate;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import com.moral.api.pojo.dto.dataDisplay.HeatMapDTO;
 import com.moral.api.service.DataDisplayService;
+import com.moral.api.utils.HeatMapTimeUtils;
 import com.moral.api.vo.HeatMapVo;
-import com.moral.api.vo.TimeHourVo;
 import com.moral.constant.ResultMessage;
-import com.moral.util.DateUtils;
 
 /**
  * Description //todo
@@ -43,11 +37,11 @@
 
      @GetMapping("query")
      @ApiOperation("���������������")
-     public ResultMessage  getHeatMap(@RequestParam @ApiParam(value = "code",name = "���������") String code,
+     public ResultMessage  getHeatMap(@RequestParam @ApiParam(value = "organizationId",name = "������id") Integer id,
                                       @RequestParam @ApiParam(value = "startTime",name = "������������") String startTime,
                                       @RequestParam @ApiParam(value = "type",name= "������������") String type,
                                       @RequestParam @ApiParam(value = "form",name= "������������") String form){
-         List<HeatMapDTO> heatMapData = dataDisplayService.getHeatMapData(code, startTime, type, form);
+         List<HeatMapDTO> heatMapData = dataDisplayService.getHeatMapDataV2(id, startTime, type, form);
          return ResultMessage.ok(ObjectUtils.isEmpty(heatMapData)?"0":heatMapData);
      }
     @GetMapping("queryTime")
@@ -55,141 +49,7 @@
     public ResultMessage  getHeatMap(@RequestParam @ApiParam(value = "startTime",name = "������������") String startTime,
                                      @RequestParam @ApiParam(value = "endTime",name= "������������") String endTime,
                                      @RequestParam @ApiParam(value = "type",name= "������������") String type){
-        ArrayList<HeatMapVo> heatMapVos = new ArrayList<>();
-        if (type.equals("day")){
-            ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
-            String[] splitStart = startTime.split("-");
-            String[] splitEnd = endTime.split("-");
-            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(splitStart[2]));
-            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(splitEnd[2]));
-            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
-            for (int i = 0; i <= daysBetween; i++) {
-                HeatMapVo heatMapVo = new HeatMapVo();
-                LocalDate date = startDate.plusDays(i);
-                heatMapVo.setId(i);
-                heatMapVo.setName(date.toString());
-                heatMapVo.setHourListTime(timeHourVos);
-                heatMapVos.add(heatMapVo);
-            }
-        }else if (type.equals("month")){
-            ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
-            String[] splitStart = startTime.split("-");
-            String[] splitEnd = endTime.split("-");
-            //���������������������������
-
-            int monthDay = DateUtils.getMonthDay(DateUtils.getDate(endTime,DateUtils.yyyy_MM_EN));
-            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),1);
-            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),monthDay);
-            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
-            for (int i = 0; i <= daysBetween; i++) {
-                HeatMapVo heatMapVo = new HeatMapVo();
-                LocalDate date = startDate.plusDays(i);
-                heatMapVo.setId(i);
-                heatMapVo.setName(date.toString());
-                heatMapVo.setHourListTime(timeHourVos);
-                heatMapVos.add(heatMapVo);
-            }
-        }else {
-            int id = 0;
-            int idHour = -1;
-            Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd HH");
-            Date js = DateUtils.getDateAddHour(DateUtils.getDate(endTime,"yyyy-MM-dd HH"),1);
-            String name =  DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
-            List<TimeHourVo> hourListTime = new ArrayList<>();
-            while (DateUtils.isTimeBefor(js,ks)){
-                idHour++;
-                HeatMapVo heatMapVo = new HeatMapVo();
-                String nameEndTime =  DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
-                String time =  DateUtils.dateToDateString(ks,"HH");
-                String ksTime =  DateUtils.dateToDateString(ks,"yyyy-MM-dd HH");
-                TimeHourVo hourVo = new TimeHourVo();
-                heatMapVo.setName(name);
-                heatMapVo.setId(id);
-                if(name.equals(nameEndTime)){
-                    heatMapVo.setId(id);
-                    heatMapVo.setName(name);
-                    hourVo.setName(time);
-                    hourVo.setId(idHour);
-                    hourListTime.add(hourVo);
-                    if(ksTime.equals(endTime)){
-                        heatMapVo.setHourListTime(hourListTime);
-                        heatMapVos.add(heatMapVo);
-                        idHour++;
-                        break;
-                    }
-                }else {
-                    id++;
-                    if(ksTime.equals(endTime)){
-                        heatMapVo.setHourListTime(hourListTime);
-                        heatMapVos.add(heatMapVo);
-                        hourListTime = new ArrayList<>();
-                        hourVo = new TimeHourVo();
-                        heatMapVo = new HeatMapVo();
-                        hourVo.setName("00");
-                        hourVo.setId(idHour++);
-                        hourListTime.add(hourVo);
-                        heatMapVo.setId(id);
-                        heatMapVo.setName(nameEndTime);
-                        heatMapVo.setHourListTime(hourListTime);
-                        heatMapVos.add(heatMapVo);
-                        break;
-                    }else {
-                        name = nameEndTime;
-                        heatMapVo.setHourListTime(hourListTime);
-                        heatMapVos.add(heatMapVo);
-                        hourListTime = new ArrayList<>();
-                        hourVo.setName(time);
-                        hourVo.setId(idHour);
-                        hourListTime.add(hourVo);
-                    }
-                }
-                ks = DateUtils.getDateAddHour(ks,1);
-            }
-            if(CollectionUtils.isNotEmpty(heatMapVos)){
-                heatMapVos.get(0).setIdLength(idHour);
-            }
-
-/*            String[] splitStart = startTime.split("-");
-            String[] s1 = splitStart[2].split(" ");
-            String[] splitEnd = endTime.split("-");
-            String[] s2 = splitEnd[2].split(" ");
-            //���������������
-            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),Integer.parseInt(s1[0]));
-            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),Integer.parseInt(s2[0]));
-            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
-            //������������
-            LocalDateTime startDateTime = LocalDateTime.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(s1[0]), Integer.parseInt(s1[1]), 0);
-            LocalDateTime endDateTime = LocalDateTime.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(s2[0]), Integer.parseInt(s2[1]), 0);
-            List<String> hourList = new ArrayList<>();
-            LocalDateTime currentDateTime = startDateTime;
-            while (currentDateTime.isBefore(endDateTime) || currentDateTime.equals(endDateTime)) {
-                hourList.add(currentDateTime.toString());
-                currentDateTime = currentDateTime.plusHours(1);
-            }
-            int length=0;
-            for (int i = 0; i <= daysBetween; i++) {
-                ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
-                HeatMapVo heatMapVo = new HeatMapVo();
-                LocalDate date = startDate.plusDays(i);
-                heatMapVo.setId(i);
-                heatMapVo.setName(date.toString());
-                for (int i1 = 0; i1 < hourList.size(); i1++) {
-                    if (hourList.get(i1).contains(date.toString())){
-                        TimeHourVo hourVo = new TimeHourVo();
-                        hourVo.setName(hourList.get(i1).substring(11,13));
-                        hourVo.setId(length);
-                        timeHourVos.add(hourVo);
-                        hourList.remove(i1);
-                        i1--;
-                        length++;
-                    }
-                }
-                heatMapVo.setHourListTime(timeHourVos);
-                heatMapVos.add(heatMapVo);
-            }
-            heatMapVos.get(0).setIdLength(length);*/
-        }
-
+        List<HeatMapVo> heatMapVos = HeatMapTimeUtils.getTime(startTime, endTime, type);
         return ResultMessage.ok(ObjectUtils.isEmpty(heatMapVos)?"0":heatMapVos);
     }
 
diff --git a/screen-api/src/main/java/com/moral/api/controller/OrganizationController.java b/screen-api/src/main/java/com/moral/api/controller/OrganizationController.java
index 6101bfc..58fdf2c 100644
--- a/screen-api/src/main/java/com/moral/api/controller/OrganizationController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/OrganizationController.java
@@ -6,6 +6,7 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,7 +17,9 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.moral.api.entity.Organization;
 import com.moral.api.service.DeviceService;
+import com.moral.api.service.OrganizationService;
 import com.moral.api.service.SysAreaService;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
@@ -34,6 +37,9 @@
 
     @Autowired
     private DeviceService deviceService;
+
+    @Autowired
+    private OrganizationService organizationService;
 
     /**
      * @param request ������������
@@ -72,4 +78,12 @@
         List<Map<String, Object>> response = deviceService.getDevicesByOrganizationId(Integer.parseInt(params.get("organizationId").toString()));
         return ResultMessage.ok(response);
     }
+
+
+    @GetMapping("getOrganizationId")
+    @ApiOperation("������������������������")
+    public  ResultMessage getOrganizationId(){
+        List<Organization> organizations = organizationService.getOrganizationId();
+        return ResultMessage.ok(ObjectUtils.isEmpty(organizations)?"0":organizations);
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/entity/DeviceMapHierarchy.java b/screen-api/src/main/java/com/moral/api/entity/DeviceMapHierarchy.java
new file mode 100644
index 0000000..9e530f0
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/DeviceMapHierarchy.java
@@ -0,0 +1,57 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName DeviceMapHierarchy
+ * @date 2023.12.19 11:24
+ */
+
+@Data
+public class DeviceMapHierarchy {
+    /**
+     * ������
+     */
+    private  Integer id;
+    /**
+     * ������id
+     */
+    private  Integer deviceId;
+    /**
+     * ������id
+     *
+     */
+    private  Integer organizationId;
+    /**
+     * ������������
+     */
+    private  Integer zoomLevel;
+    /**
+     * ������id
+     *
+     */
+    private  Integer groupId;
+    /**
+     * ������������
+     */
+    private  Integer hierarchyRange;
+    /**
+     * ������������
+     */
+    private  Integer isDel;
+
+    private  Integer createId;
+    private  String createName;
+    private  Date createTime;
+    private  Integer updateId;
+    private  String updateName;
+    private Date updateTime;
+
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/DeviceMapHierarchyMapper.java b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapHierarchyMapper.java
new file mode 100644
index 0000000..7cfd122
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapHierarchyMapper.java
@@ -0,0 +1,9 @@
+package com.moral.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+
+
+public interface DeviceMapHierarchyMapper extends BaseMapper<DeviceMapper> {
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
index 2108f67..7492170 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/DeviceMapper.java
@@ -42,4 +42,7 @@
 
     List<HeatMapDTO> getHeatMap(HashMap<String,Object> params);
 
+
+    List<HeatMapDTO> getHeatMapV1(HashMap<String,Object> params);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/HeatMapDTO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/HeatMapDTO.java
index 632f91f..bf57b16 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/HeatMapDTO.java
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/HeatMapDTO.java
@@ -43,6 +43,8 @@
 
     private  String name;
 
+    private  Integer groupId;
+
     public Double getCount(){
         Double count = this.count;
         if (ObjectUtils.isEmpty(count)){
diff --git a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
index 3f0c7db..20443b0 100644
--- a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
+++ b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
@@ -5,10 +5,6 @@
 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 org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -50,4 +46,9 @@
 
 
     List<HeatMapDTO> getHeatMapData(String code, String startTime, String type, String form);
+
+
+
+
+    List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form);
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/OrganizationService.java b/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
index 2c3972c..559b4e5 100644
--- a/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
+++ b/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
@@ -42,4 +42,13 @@
      */
     List<Integer> orgIdList( Integer organizationId);
 
+
+    /**
+     * ������������������������������
+     * @param
+     * @return
+     */
+    List<Organization> getOrganizationId();
+
+
 }
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 08b56c9..280c7fd 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
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.jhlabs.composite.AverageComposite;
 import com.moral.api.entity.*;
 import com.moral.api.mapper.DeviceMapper;
 import com.moral.api.mapper.HistoryMonthlyMapper;
@@ -13,6 +14,7 @@
 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;
@@ -21,6 +23,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
+import reactor.core.publisher.Flux;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -446,6 +449,106 @@
 
         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);
+        //������������������
+//        Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo();
+//        Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization");
+//        Integer organizationId = (Integer) orgInfo.get("id");
+        //���������
+        ArrayList<Integer> list = new ArrayList<>();
+        list.add(id);
+//        if (organizationId==24){
+////            LambdaQueryWrapper<Organization> wrapper = new LambdaQueryWrapper<>();
+////            wrapper.eq(Organization::getIsDelete,Constants.NOT_DELETE);
+////            wrapper.eq(Organization::getId,id);
+////            List<Organization> organizations = organizationMapper.selectList(wrapper);
+////            List<Integer> collect = organizations.stream().map(organization -> organization.getId()).collect(Collectors.toList());
+////            list.addAll(collect);
+//            list.add(id);
+//        }else {
+//            list.add(id);
+//        }
+
+
+        ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>();
+
+        if (form.equals("hour")){ //������
+            log.info(""+startTime);
+            String dateString = DateUtils.stringToDateString(startTime, DateUtils.yyyy_MM_dd_HH_EN, DateUtils.yyyyMM_EN);
+//            Date date1 = DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN);
+            log.info(""+dateString);
+            map.put("organizationIds",list);
+            map.put("tableName","_"+dateString);
+
+            List<HeatMapDTO> heatMap = deviceMapper.getHeatMapV1(map);
+            log.info(heatMap.size()+"");
+
+            List<HeatMapDTO> collect1 = heatMap.stream().filter(d -> d.getTime() != null).collect(Collectors.toList());
+            if (ObjectUtils.isEmpty(collect1)){
+                return null;
+            }
+            getHeatMap(heatMap);
+            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;
+            }
+            getHeatMap(heatMap);
+            rsHeatMap.addAll(heatMap);
+        }
+
+        return distrinList(rsHeatMap);
+    }
+
+    //������������
+    private void getHeatMap(List<HeatMapDTO> heatMap) {
+        //������������
+        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());
+                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);
+                heatMapDTO.setCount(asDouble);
+                heatMapDTO.setLng(centerPoint.getLongitude());
+                heatMapDTO.setLat(centerPoint.getLatitude());
+                heatMapDTO.setMac(i+"");
+                heatMap.add(heatMapDTO);
+                i++;
+            }
+        }
+    }
+
     /**
      * ������������
      * @param responseList
@@ -463,8 +566,6 @@
                 rsMap.add(heatMapDTO);
             }
         }
-        log.info(responseList.size()+"");
-        log.info(rsMap.size()+"");
         return rsMap;
 
 
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
index 9b03888..3616d86 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -1,5 +1,6 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.config.Interceptor.UserHelper;
 import com.moral.api.entity.MonitorPoint;
@@ -12,12 +13,15 @@
 import com.moral.api.service.OrganizationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.moral.constant.Constants;
+import com.moral.util.TokenUtils;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -76,4 +80,30 @@
     public List<Integer> orgIdList(Integer organizationId) {
         return this.baseMapper.orgIdList(organizationId);
     }
+
+    /**
+     * ������id������������������
+     *
+     * @param
+     * @return
+     */
+    @Override
+    public List<Organization> getOrganizationId() {
+        //������������������
+        Map<String, Object> userInfo = (Map<String, Object>) TokenUtils.getUserInfo();
+        Map<String, Object> orgInfo = (Map<String, Object>) userInfo.get("organization");
+        Integer organizationId = (Integer) orgInfo.get("id");
+         ArrayList<Organization> rsList = new ArrayList<>();
+        if (organizationId==24){
+            LambdaQueryWrapper<Organization> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(Organization::getParentId,organizationId);
+            wrapper.eq(Organization::getIsDelete,Constants.NOT_DELETE);
+            List<Organization> organizations = organizationMapper.selectList(wrapper);
+            rsList.addAll(organizations);
+        }else {
+            Organization organizationById = this.getOrganizationById(organizationId);
+            rsList.add(organizationById);
+        }
+        return rsList;
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/utils/HeatMapTimeUtils.java b/screen-api/src/main/java/com/moral/api/utils/HeatMapTimeUtils.java
new file mode 100644
index 0000000..112ec28
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/HeatMapTimeUtils.java
@@ -0,0 +1,167 @@
+package com.moral.api.utils;
+
+import org.apache.commons.collections4.CollectionUtils;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import com.moral.api.vo.HeatMapVo;
+import com.moral.api.vo.TimeHourVo;
+import com.moral.util.DateUtils;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName HeatMapTimeUtils
+ * @date 2023.12.18 13:42
+ */
+
+
+public class HeatMapTimeUtils {
+
+    /**
+     *������������������������������������������������
+     */
+    public static List<HeatMapVo> getTime(String startTime, String endTime, String type){
+        ArrayList<HeatMapVo> heatMapVos = new ArrayList<>();
+        if (type.equals("day")){
+            ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
+            String[] splitStart = startTime.split("-");
+            String[] splitEnd = endTime.split("-");
+            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(splitStart[2]));
+            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(splitEnd[2]));
+            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
+            for (int i = 0; i <= daysBetween; i++) {
+                HeatMapVo heatMapVo = new HeatMapVo();
+                LocalDate date = startDate.plusDays(i);
+                heatMapVo.setId(i);
+                heatMapVo.setName(date.toString());
+                heatMapVo.setHourListTime(timeHourVos);
+                heatMapVos.add(heatMapVo);
+            }
+        }else if (type.equals("month")){
+            ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
+            String[] splitStart = startTime.split("-");
+            String[] splitEnd = endTime.split("-");
+            //���������������������������
+
+            int monthDay = DateUtils.getMonthDay(DateUtils.getDate(endTime,DateUtils.yyyy_MM_EN));
+            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),1);
+            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),monthDay);
+            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
+            for (int i = 0; i <= daysBetween; i++) {
+                HeatMapVo heatMapVo = new HeatMapVo();
+                LocalDate date = startDate.plusDays(i);
+                heatMapVo.setId(i);
+                heatMapVo.setName(date.toString());
+                heatMapVo.setHourListTime(timeHourVos);
+                heatMapVos.add(heatMapVo);
+            }
+        }else {
+            int id = 0;
+            int idHour = -1;
+            Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd HH");
+            Date js = DateUtils.getDateAddHour(DateUtils.getDate(endTime,"yyyy-MM-dd HH"),1);
+            String name =  DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
+            List<TimeHourVo> hourListTime = new ArrayList<>();
+            while (DateUtils.isTimeBefor(js,ks)){
+                idHour++;
+                HeatMapVo heatMapVo = new HeatMapVo();
+                String nameEndTime =  DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
+                String time =  DateUtils.dateToDateString(ks,"HH");
+                String ksTime =  DateUtils.dateToDateString(ks,"yyyy-MM-dd HH");
+                TimeHourVo hourVo = new TimeHourVo();
+                heatMapVo.setName(name);
+                heatMapVo.setId(id);
+                if(name.equals(nameEndTime)){
+                    heatMapVo.setId(id);
+                    heatMapVo.setName(name);
+                    hourVo.setName(time);
+                    hourVo.setId(idHour);
+                    hourListTime.add(hourVo);
+                    if(ksTime.equals(endTime)){
+                        heatMapVo.setHourListTime(hourListTime);
+                        heatMapVos.add(heatMapVo);
+                        idHour++;
+                        break;
+                    }
+                }else {
+                    id++;
+                    if(ksTime.equals(endTime)){
+                        heatMapVo.setHourListTime(hourListTime);
+                        heatMapVos.add(heatMapVo);
+                        hourListTime = new ArrayList<>();
+                        hourVo = new TimeHourVo();
+                        heatMapVo = new HeatMapVo();
+                        hourVo.setName("00");
+                        hourVo.setId(idHour++);
+                        hourListTime.add(hourVo);
+                        heatMapVo.setId(id);
+                        heatMapVo.setName(nameEndTime);
+                        heatMapVo.setHourListTime(hourListTime);
+                        heatMapVos.add(heatMapVo);
+                        break;
+                    }else {
+                        name = nameEndTime;
+                        heatMapVo.setHourListTime(hourListTime);
+                        heatMapVos.add(heatMapVo);
+                        hourListTime = new ArrayList<>();
+                        hourVo.setName(time);
+                        hourVo.setId(idHour);
+                        hourListTime.add(hourVo);
+                    }
+                }
+                ks = DateUtils.getDateAddHour(ks,1);
+            }
+            if(CollectionUtils.isNotEmpty(heatMapVos)){
+                heatMapVos.get(0).setIdLength(idHour);
+            }
+
+/*            String[] splitStart = startTime.split("-");
+            String[] s1 = splitStart[2].split(" ");
+            String[] splitEnd = endTime.split("-");
+            String[] s2 = splitEnd[2].split(" ");
+            //���������������
+            LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),Integer.parseInt(s1[0]));
+            LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),Integer.parseInt(s2[0]));
+            long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
+            //������������
+            LocalDateTime startDateTime = LocalDateTime.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(s1[0]), Integer.parseInt(s1[1]), 0);
+            LocalDateTime endDateTime = LocalDateTime.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(s2[0]), Integer.parseInt(s2[1]), 0);
+            List<String> hourList = new ArrayList<>();
+            LocalDateTime currentDateTime = startDateTime;
+            while (currentDateTime.isBefore(endDateTime) || currentDateTime.equals(endDateTime)) {
+                hourList.add(currentDateTime.toString());
+                currentDateTime = currentDateTime.plusHours(1);
+            }
+            int length=0;
+            for (int i = 0; i <= daysBetween; i++) {
+                ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
+                HeatMapVo heatMapVo = new HeatMapVo();
+                LocalDate date = startDate.plusDays(i);
+                heatMapVo.setId(i);
+                heatMapVo.setName(date.toString());
+                for (int i1 = 0; i1 < hourList.size(); i1++) {
+                    if (hourList.get(i1).contains(date.toString())){
+                        TimeHourVo hourVo = new TimeHourVo();
+                        hourVo.setName(hourList.get(i1).substring(11,13));
+                        hourVo.setId(length);
+                        timeHourVos.add(hourVo);
+                        hourList.remove(i1);
+                        i1--;
+                        length++;
+                    }
+                }
+                heatMapVo.setHourListTime(timeHourVos);
+                heatMapVos.add(heatMapVo);
+            }
+            heatMapVos.get(0).setIdLength(length);*/
+        }
+
+        return heatMapVos;
+    }
+
+}
diff --git a/screen-api/src/main/resources/mapper/DeviceMapper.xml b/screen-api/src/main/resources/mapper/DeviceMapper.xml
index 94613fe..39de26e 100644
--- a/screen-api/src/main/resources/mapper/DeviceMapper.xml
+++ b/screen-api/src/main/resources/mapper/DeviceMapper.xml
@@ -237,4 +237,35 @@
          d.is_delete = 0
         order by d.mac
     </select>
+
+
+    <select id="getHeatMapV1" resultType="com.moral.api.pojo.dto.dataDisplay.HeatMapDTO">
+        SELECT
+        d.mac as mac,
+        d.latitude as lat,
+        d.longitude as lng,
+        d.name as name,
+        (hd.value ->> #{type} ) as count,
+        hd.time,
+        dm.group_id AS groupId
+        FROM
+        device as d
+        inner JOIN organization o on o.id = d.organization_id and o.is_delete = 0
+        <if test="organizationIds != null and organizationIds.size !=0">
+            and organization_id in
+            <foreach collection="organizationIds" item="id" index="index" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+        inner JOIN device_map_hierarchy as dm on d.id = dm.device_id
+        <if test="tableName !=null">
+            left join history_hourly${tableName} hd on hd.time = #{start}  and d.mac = hd.mac
+        </if>
+        <if test="tableName ==null ">
+            left join history_daily hd on hd.time = #{start}   and d.mac = hd.mac
+        </if>
+        WHERE
+        d.is_delete = 0
+        order by d.mac
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0