From c8aa05fd65cc788abc0f44494338b04993e3b4be Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 10 Sep 2021 15:08:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev_

---
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java |  132 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 132 insertions(+), 0 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 c0da684..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
@@ -1,10 +1,21 @@
 package com.moral.api.service.impl;
 
+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.*;
+import java.util.function.Predicate;
 
 /**
  * <p>
@@ -17,4 +28,125 @@
 @Service
 public class HistorySecondUavServiceImpl extends ServiceImpl<HistorySecondUavMapper, HistorySecondUav> implements HistorySecondUavService {
 
+    @Autowired
+    HistorySecondUavMapper historySecondUavMapper;
+    @Autowired
+    OrganizationService organizationService;
+    @Autowired
+    SpecialDeviceService specialDeviceService;
+
+    @Override
+    public List<Date> queryDate(Integer organizationId) {
+        //������������������
+        QueryWrapper<HistorySecondUav> queryWrapper = 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);
+        queryWrapper.in("organization_id",childrenId);
+        //���������������������������180���
+        Date endDate = new Date();
+        Date startDate = DateUtils.addDays(endDate, -180);
+        queryWrapper.between("batch",startDate,endDate);
+        //������������������
+        queryWrapper.select("DISTINCT batch");
+        //������������
+        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(queryWrapper);
+        //������������Date������
+        List<Date> result = new ArrayList<>();
+        for (HistorySecondUav historySecondUav : historySecondUavs) {
+            result.add(historySecondUav.getBatch());
+        }
+        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