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