| | |
| | | |
| | | 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> |
| | |
| | | |
| | | @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); |
| | |
| | | } |
| | | 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; |
| | | } |
| | | |
| | | } |