From 9cc9f173f8db89135610eba2c8af79c17b24dfdf Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Wed, 08 Sep 2021 17:21:19 +0800
Subject: [PATCH] screen-api                  增加获取组织所有无人机飞行时间接口

---
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 106 insertions(+), 4 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
index 81620b9..1565dc3 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
@@ -2,16 +2,20 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.HistorySecondUav;
+import com.moral.api.entity.Organization;
 import com.moral.api.mapper.HistorySecondUavMapper;
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
 import com.moral.api.service.HistorySecondUavService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.OrganizationService;
+import com.moral.api.service.SpecialDeviceService;
 import com.moral.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Predicate;
 
 /**
  * <p>
@@ -26,12 +30,23 @@
 
     @Autowired
     HistorySecondUavMapper historySecondUavMapper;
+    @Autowired
+    OrganizationService organizationService;
+    @Autowired
+    SpecialDeviceService specialDeviceService;
 
     @Override
     public List<Date> queryDate(Integer organizationId) {
         //������������������
         QueryWrapper<HistorySecondUav> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("organization_id",organizationId);
+        //���������������id
+        List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId);
+        List<Integer> childrenId = new ArrayList<>();
+        for (Organization child : children) {
+            childrenId.add(child.getId());
+        }
+        childrenId.add(organizationId);
+        queryWrapper.in("organization_id",childrenId);
         //���������������������������180���
         Date endDate = new Date();
         Date startDate = DateUtils.addDays(endDate, -180);
@@ -47,4 +62,91 @@
         }
         return result;
     }
+
+    @Override
+    public List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form) {
+        //������
+        Integer organizationId = form.getOrganizationId();
+        Date startDate = form.getStartDate();
+        Date endDate = form.getEndDate();
+        QueryWrapper<HistorySecondUav> wrapper = new QueryWrapper<>();
+        //���������������id
+        List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId);
+        List<Integer> childrenId = new ArrayList<>();
+        for (Organization child : children) {
+            childrenId.add(child.getId());
+        }
+        childrenId.add(organizationId);
+        wrapper.in("organization_id",childrenId);
+        //������������batch������������������������������������������������
+        wrapper.between("batch",startDate,endDate);
+        //������������������
+        wrapper.select("mac,time,batch");
+        //������������
+        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(wrapper);
+        //������batch������������
+        Map<String,List<HistorySecondUav>> batchMap = new LinkedHashMap<>();//key���batch���string
+        for (HistorySecondUav historySecondUav : historySecondUavs) {
+            //������batch���������������������
+            List<HistorySecondUav> list = batchMap.get(historySecondUav.getBatch().toString());
+            if(list!=null){
+                list.add(historySecondUav);
+            }else{
+                ArrayList<HistorySecondUav> newList = new ArrayList<>();
+                newList.add(historySecondUav);
+                batchMap.put(historySecondUav.getBatch().toString(),newList);
+            }
+        }
+        //������������30������������������
+        batchMap.values().removeIf(new Predicate<List<HistorySecondUav>>() {
+            @Override
+            public boolean test(List<HistorySecondUav> historySecondUavs) {
+                if(historySecondUavs.size()<=30)
+                    return true;
+                return false;
+            }
+        });
+        //������mac������������
+        Map<String,List<Map<String,List<HistorySecondUav>>>> macBatchMap = new LinkedHashMap<>();//key���mac
+        //������batchMap���mac���������������������macBatchMap���key���batch���������map���������������������value
+        batchMap.forEach((key,value)->{
+            String mac = value.get(0).getMac();
+            List<Map<String, List<HistorySecondUav>>> maps = macBatchMap.get(mac);
+            if(maps!=null){
+                Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>();
+                map.put(key,value);
+                maps.add(map);
+            }else{
+                List<Map<String,List<HistorySecondUav>>> list = new ArrayList<>();
+                Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>();
+                map.put(key,value);
+                list.add(map);
+                macBatchMap.put(value.get(0).getMac(),list);
+            }
+        });
+        //������������������
+        List<UAVQueryTimeSlotDTO> dtos = new ArrayList<>();
+        macBatchMap.forEach((key,value)->{
+            UAVQueryTimeSlotDTO dto = new UAVQueryTimeSlotDTO();
+            List<Map<String,Date>> timeSlots = new ArrayList<>();
+            dto.setMac(key);
+            //������mac������������������
+            dto.setName((String) specialDeviceService.getSpecialDeviceMapByMac(key).get("name"));
+            //���������������
+            value.forEach(listValue->{
+                listValue.forEach((mKey,mValue)->{
+                    Date slotStartDate = mValue.get(0).getTime();
+                    Date slotEndDate = mValue.get(mValue.size()-1).getTime();
+                    Map<String,Date> dateMap = new HashMap<>();
+                    dateMap.put("startTime",slotStartDate);
+                    dateMap.put("endTime",slotEndDate);
+                    timeSlots.add(dateMap);
+                });
+            });
+            dto.setTimeSlot(timeSlots);
+            dtos.add(dto);
+        });
+      return dtos;
+    }
+
 }

--
Gitblit v1.8.0