diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java index 06b4f3b..9dde5cb 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/WlRecordServiceImpl.java @@ -367,10 +367,10 @@ public class WlRecordServiceImpl extends ServiceImpl i //下一个被比较数据 int index = i + 1; WlRecord next = data.get(index); - //判断下一个数据时间范围是不是在当前时间范围内(判断是否有修改的必要) - if((current.getStartTime().compareTo(next.getStartTime())<0 || current.getStartTime().compareTo(next.getStartTime())==0) - && (current.getEndTime().compareTo(next.getEndTime())>0 || current.getEndTime().compareTo(next.getEndTime())==0)){ - //如果当前节点把下一个节点吃掉了 那么此节点将不变继续作为当前比较的左主数据 参加下一轮比较 + //判断下一个数据时间范围是不是在当前已添加集合项时间范围内(判断是否有修改的必要) + if((getStartOrEndTimeByList(rs,1).compareTo(next.getStartTime())<0 || getStartOrEndTimeByList(rs,1).compareTo(next.getStartTime())==0) + && (getStartOrEndTimeByList(rs,2).compareTo(next.getEndTime())>0 || getStartOrEndTimeByList(rs,2).compareTo(next.getEndTime())==0)){ + //如果当前集合项时间范围把下一个节点吃掉了 那么此节点将不变继续作为当前比较的左主数据 参加下一轮比较 tempRecord = current; continue; }else if(current.getEndTime().compareTo(next.getStartTime())<0){ @@ -389,6 +389,7 @@ public class WlRecordServiceImpl extends ServiceImpl i //时间范围度最大依次覆盖 //此处逻辑暂定 默认按照上面最左原则 } + rs = rs.stream().sorted(Comparator.comparing(WlRecord::getStartTime)).collect(Collectors.toList()); log.info("覆盖后新数据:"); for(WlRecord wlRecord : rs){ log.info("id:{} , startTime:{} , endTime:{}",wlRecord.getId(),wlRecord.getStartTime().format(DateTimeFormatter.ofPattern(DataParam.timeFormat)),wlRecord.getEndTime().format(DateTimeFormatter.ofPattern(DataParam.timeFormat))); @@ -396,6 +397,12 @@ public class WlRecordServiceImpl extends ServiceImpl i return rs; } + //获取集合中最开始时间或最结束时间 + private static LocalDateTime getStartOrEndTimeByList(List rs,int type){ + rs = rs.stream().sorted(Comparator.comparing(type == 1?WlRecord::getStartTime:WlRecord::getEndTime)).collect(Collectors.toList()); + return type == 1?rs.get(0).getStartTime():rs.get(rs.size()-1).getEndTime(); + } + private void formatQueryParamList(CommonStatisticalQueryParam commonStatisticalQueryParam){ List list = new ArrayList<>(); if(commonStatisticalQueryParam.getList() != null && commonStatisticalQueryParam.getList().size() > 0){