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/SpecialDeviceService.java | 18 ++
screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java | 23 +++
screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java | 110 +++++++++++++++
screen-common/src/main/java/com/moral/util/DateUtils.java | 20 ++
screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java | 57 ++++++++
screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java | 12 +
screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java | 1
screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java | 35 +++++
screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java | 30 ++++
screen-common/src/main/java/com/moral/constant/Constants.java | 1
screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java | 44 ++++++
screen-api/src/main/java/com/moral/api/controller/UAVController.java | 23 +++
12 files changed, 368 insertions(+), 6 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/UAVController.java b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
index 412ef42..0342ed5 100644
--- a/screen-api/src/main/java/com/moral/api/controller/UAVController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -3,10 +3,15 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.HistorySecondUav;
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.pojo.vo.uav.UAVQueryDateVO;
+import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVO;
+import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVOs;
import com.moral.api.service.HistorySecondUavService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
+import com.moral.util.DateUtils;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,8 +19,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* @ClassName UAVController
@@ -66,4 +70,19 @@
return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
}
+
+ @RequestMapping("queryTimeSlot")
+ public ResultMessage queryTimeSlot(UAVQueryTimeSlotForm form){
+ //������������������������
+ if (!form.valid())
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
+ ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+ //������������������
+ List<UAVQueryTimeSlotDTO> dtos = historySecondUavService.queryTimeSlot(form);
+ //������vo���
+ UAVQueryTimeSlotVOs vo = UAVQueryTimeSlotVOs.convert(dtos);
+ //������������
+ return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
+ }
+
}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java
new file mode 100644
index 0000000..80c0087
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java
@@ -0,0 +1,35 @@
+package com.moral.api.pojo.dto.uav;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName UAVQueryTimeSlotDTO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 15:13
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotDTO {
+
+ /*
+ * ���������mac
+ * */
+ private String mac;
+
+ /*
+ * ���������������
+ * */
+ private String name;
+
+ /*
+ * ������������������������
+ * map������������������key���startTime
+ * ���������������key���endTime
+ * */
+ private List<Map<String,Date>> timeSlot;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
new file mode 100644
index 0000000..c182c07
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
@@ -0,0 +1,57 @@
+package com.moral.api.pojo.form.uav;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.util.DateUtils;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName queryTimeSlotForm
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 14:17
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotForm {
+
+ /*
+ * ������id
+ * */
+ private Integer organizationId;
+
+ /*
+ * ������
+ * */
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+ private Date date;
+
+ /*
+ * ������������
+ * */
+ private Date startDate;
+
+ /*
+ * ������������
+ * */
+ private Date endDate;
+
+
+ public boolean valid() {
+ if (
+ ObjectUtils.isEmpty(organizationId)&&
+ ObjectUtils.isEmpty(date)
+ )
+ return false;
+ //������������������������������������
+ List<Date> dates = DateUtils.dateToStartAndEndTime(date);
+ startDate = dates.get(0);
+ endDate = dates.get(1);
+ return true;
+ }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java
new file mode 100644
index 0000000..90343dc
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java
@@ -0,0 +1,23 @@
+package com.moral.api.pojo.vo.uav;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName UAVQueryTimeSlotVO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 16:57
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotVO {
+
+ private String mac;
+
+ private String name;
+
+ private List<Map<String,String>> timeSlot;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java
new file mode 100644
index 0000000..a713d11
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java
@@ -0,0 +1,44 @@
+package com.moral.api.pojo.vo.uav;
+
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.util.DateUtils;
+import lombok.Data;
+
+import java.util.*;
+
+/**
+ * @ClassName UAVQueryTimeSlotVOs
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 17:16
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotVOs {
+
+ List<UAVQueryTimeSlotVO> vos;
+
+ public static UAVQueryTimeSlotVOs convert(List<UAVQueryTimeSlotDTO> dtos){
+ UAVQueryTimeSlotVOs resultVO = new UAVQueryTimeSlotVOs();
+ List<UAVQueryTimeSlotVO> vos = new ArrayList<>();
+ for (UAVQueryTimeSlotDTO dto : dtos) {
+ UAVQueryTimeSlotVO vo = new UAVQueryTimeSlotVO();
+ vo.setMac(dto.getMac());
+ vo.setName(dto.getName());
+ List<Map<String,String>> timeSlotVo = new ArrayList<>();
+ List<Map<String, Date>> timeSlot = dto.getTimeSlot();
+ for (Map<String, Date> map : timeSlot) {
+ Map<String,String> newMap = new LinkedHashMap<>();
+ map.forEach((key,value)->{
+ String dateStr = DateUtils.dateToDateString(value, "yyyy-MM-dd HH:mm:ss");
+ newMap.put(key,dateStr);
+ });
+ timeSlotVo.add(newMap);
+ }
+ vo.setTimeSlot(timeSlotVo);
+ vos.add(vo);
+ }
+ resultVO.setVos(vos);
+ return resultVO;
+ }
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java b/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
index fcfef5e..4b663ca 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
@@ -2,6 +2,8 @@
import com.moral.api.entity.HistorySecondUav;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
import java.util.Date;
import java.util.List;
@@ -25,4 +27,14 @@
*/
List<Date> queryDate(Integer organizationId);
+ /**
+ * @Description: ���������������������������������������������������������
+ * @Param: [from]
+ * @return: List<UAVQueryTimeSlotDTO>
+ * @Author: ���������
+ * @Date: 2021/9/8
+ */
+ List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form);
+
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java b/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
index ea3f8da..7711c12 100644
--- a/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
+++ b/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
@@ -22,4 +22,22 @@
//���������������
List<Map<String, Object>> carTrajectory(Map<String, Object> params);
+ /**
+ * @Description: ������mac������������������������
+ * @Param: [mac]
+ * @return: com.moral.api.entity.SpecialDevice
+ * @Author: ���������
+ * @Date: 2021/9/8
+ */
+ Map<String,Object> getSpecialDeviceMapByMac(String mac);
+
+ /**
+ * @Description: ������mac������������������������
+ * @Param: [mac]
+ * @return: com.moral.api.entity.SpecialDevice
+ * @Author: ���������
+ * @Date: 2021/9/8
+ */
+ SpecialDevice getSpecialDeviceByMac(String mac);
+
}
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;
+ }
+
}
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 ce1ee37..0d730ba 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
@@ -27,6 +27,7 @@
@Autowired
OrganizationMapper organizationMapper;
+
@Override
public List<Organization> getChildrenOrganizationsById(Integer id) {
List<Organization> childrenOrganization = new ArrayList<>();
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
index 4ff6a07..fd19d65 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
@@ -2,18 +2,23 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.HistorySecondSpecial;
+import com.moral.api.entity.Organization;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.entity.SpecialDeviceHistory;
import com.moral.api.mapper.HistorySecondSpecialMapper;
import com.moral.api.mapper.SpecialDeviceMapper;
+import com.moral.api.service.OrganizationService;
import com.moral.api.service.SpecialDeviceHistoryService;
import com.moral.api.service.SpecialDeviceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
+import com.moral.constant.RedisConstants;
import com.moral.util.GeodesyUtils;
import com.moral.util.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -37,6 +42,14 @@
@Autowired
private SpecialDeviceHistoryService specialDeviceHistoryService;
+
+ @Autowired
+ OrganizationService organizationService;
+
+ @Autowired
+ SpecialDeviceMapper specialDeviceMapper;
+ @Autowired
+ RedisTemplate redisTemplate;
private final static Double dis = 50d;
@@ -84,6 +97,23 @@
return filterData(data);
}
+ @Override
+ public Map<String,Object> getSpecialDeviceMapByMac(String mac) {
+ //������������������
+ Map<String,Object> specialDeviceMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DEVICE,mac);
+ return specialDeviceMap;
+ }
+
+ @Override
+ public SpecialDevice getSpecialDeviceByMac(String mac) {
+ QueryWrapper<SpecialDevice> queryWrapper = new QueryWrapper();
+ queryWrapper.eq("mac",mac);
+ queryWrapper.eq("is_delete",Constants.NOT_DELETE);
+ SpecialDevice specialDevice = specialDeviceMapper.selectOne(queryWrapper);
+ return specialDevice;
+ }
+
+
//������������������������
private List<Map<String, Object>> filterData(List<Map<String, Object>> data) {
List<Map<String, Object>> result = new ArrayList<>();
diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java
index 38b3a9a..4346d0d 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -218,5 +218,6 @@
* ������������������������������
* */
public static final String SPECIAL_DEVICE_UAV = "1";
+
}
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 9af501f..7b313a8 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -92,6 +92,26 @@
/**
+ * @Description: ������������������������������������������������
+ * @Param: [date]
+ * @return: java.util.List<java.util.Date>
+ * @Author: ���������
+ * @Date: 2021/9/8
+ */
+ public static List<Date> dateToStartAndEndTime(Date date){
+ String dateStr = dateToDateString(date, "yyyy-MM-dd");
+ String startDateStr = dateStr+" 00:00:00";
+ String endDateStr = dateStr+" 23:59:59";
+ Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
+ Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
+ ArrayList<Date> dates = new ArrayList<>();
+ dates.add(startDate);
+ dates.add(endDate);
+ return dates;
+ }
+
+
+ /**
* @Description: Date���toString������������Date
* @Param: []
* @return: java.util.Date
--
Gitblit v1.8.0