| | |
| | | if (equFaultRecordList != null && !equFaultRecordList.isEmpty()) { |
| | | // 修整时间 |
| | | Map<String, List<EquFaultRecord>> equFaultRecordMap = equFaultRecordList.stream().collect(Collectors.groupingBy(EquFaultRecord::getEquipmentId)); |
| | | equFaultRecordMap.forEach((key, value) -> { |
| | | if (map.containsKey(key)) { |
| | | MdcEquipmentFaultInfo equFaultRecords = map.get(key); |
| | | map.forEach((key, value1) -> { |
| | | MdcEquipmentFaultInfo equFaultRecords = value1; |
| | | if (equFaultRecordMap.containsKey(key)) { |
| | | List<EquFaultRecord> value = equFaultRecordMap.get(key); |
| | | long faultLong = calculateTotalFaultDuration(value, start, end); |
| | | equFaultRecords.setFaultLong((int) faultLong); |
| | | if (faultLong != 0) { |
| | | equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("86400"), 2, RoundingMode.HALF_UP)); |
| | | equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | |
| | | // 计算去除故障时长的加工时间 |
| | | // step.1 查询加工时间 |
| | | List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.selectRunningData(key, start, end); |
| | | List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(key, start.getTime(), end.getTime()); |
| | | if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) { |
| | | // 时间修正 |
| | | if (mdcEquipmentRunningSections.get(0).getStartTime().before(start)) { |
| | |
| | | mdcEquipmentRunningSections.get(0).setEndTime(end); |
| | | } |
| | | } |
| | | // step.2 计算去除故障时长的加工时间 |
| | | long processingTime = calculateProcessingTimeWithoutFaults(mdcEquipmentRunningSections, value, start, end); |
| | | equFaultRecords.setRemoveFaultRunLong((int) processingTime); |
| | | if (faultLong != 0) { |
| | | List<MdcEquipmentRunningSection> collect = mdcEquipmentRunningSections.stream().filter(mdcEquipmentRunningSection -> mdcEquipmentRunningSection.getStatus() == 3).collect(Collectors.toList()); |
| | | if (!collect.isEmpty()) { |
| | | // step.2 计算去除故障时长的加工时间 |
| | | long processingTime = calculateProcessingTimeWithoutFaults(collect, value, start, end); |
| | | equFaultRecords.setRemoveFaultRunLong((int) processingTime); |
| | | if (faultLong != 0 && faultLong != 86400) { |
| | | // 计算去除故障时长的利用率 |
| | | BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("864").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP); |
| | | equFaultRecords.setRemoveFaultRate(removeFaultRate); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(key, start.getTime(), end.getTime()); |
| | | if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) { |
| | | // 时间修正 |
| | | if (mdcEquipmentRunningSections.get(0).getStartTime().before(start)) { |
| | | mdcEquipmentRunningSections.get(0).setStartTime(start); |
| | | } |
| | | if (mdcEquipmentRunningSections.size() > 1) { |
| | | if (mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).getEndTime().after(end)) { |
| | | mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).setEndTime(end); |
| | | } |
| | | } else { |
| | | if (mdcEquipmentRunningSections.get(0).getEndTime().after(end)) { |
| | | mdcEquipmentRunningSections.get(0).setEndTime(end); |
| | | } |
| | | } |
| | | List<MdcEquipmentRunningSection> collect = mdcEquipmentRunningSections.stream().filter(mdcEquipmentRunningSection -> mdcEquipmentRunningSection.getStatus() == 3).collect(Collectors.toList()); |
| | | |
| | | if (!collect.isEmpty()) { |
| | | long totalProcessingTime = 0; |
| | | for (MdcEquipmentRunningSection mdcEquipmentRunningSection : collect) { |
| | | totalProcessingTime += ChronoUnit.SECONDS.between(DateUtils.convertToLocalDateTime(mdcEquipmentRunningSection.getStartTime()), DateUtils.convertToLocalDateTime(mdcEquipmentRunningSection.getEndTime())); |
| | | } |
| | | equFaultRecords.setRemoveFaultRunLong((int) totalProcessingTime); |
| | | // 计算去除故障时长的利用率 |
| | | BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("86400").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP); |
| | | BigDecimal removeFaultRate = new BigDecimal(totalProcessingTime).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP); |
| | | equFaultRecords.setRemoveFaultRate(removeFaultRate); |
| | | } |
| | | } |
| | | map.put(key, equFaultRecords); |
| | | } |
| | | map.put(key, equFaultRecords); |
| | | }); |
| | | } |
| | | if (!map.isEmpty()) { |
| | |
| | | LocalDateTime start = DateUtils.convertToLocalDateTime(startTime); |
| | | LocalDateTime end = DateUtils.convertToLocalDateTime(endTime); |
| | | |
| | | // 将故障记录转换为时间区间并合并重叠部分 |
| | | // List<TimeInterval> faultIntervals = faultRecords.stream() |
| | | // .map(record -> new TimeInterval( |
| | | // convertToLocalDateTime(record.getStartTime()), |
| | | // convertToLocalDateTime(record.getEndTime()))) |
| | | // .collect(Collectors.toList()); |
| | | List<TimeInterval> mergedFaultIntervals = mergeIntervals(faultRecords); |
| | | // 修正记录时间 |
| | | List<EquFaultRecord> correctedRecords = correctRecordTimes(faultRecords, start, end); |
| | | List<TimeInterval> mergedFaultIntervals = mergeIntervals(correctedRecords); |
| | | |
| | | long totalProcessingTime = 0; |
| | | |