diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedInterlockTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedInterlockTask.java index d84546b..1837256 100644 --- a/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedInterlockTask.java +++ b/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedInterlockTask.java @@ -34,6 +34,7 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -65,7 +66,6 @@ public class AxleLedInterlockTask implements AlertMonitoringTask { for (String lineId : lineCollSet) { InterLockData interLockData = DeviceDataRepository.findDataSouce(lineId, DataTypeEnum.INTER_LOCK); List interlockOneList = interLockData.findKeysStart(AlertType.INTERLOCK_LEVEL_ONE.name()); -// .stream().filter(d -> StringUtils.endsWith(d, AlertDeviceType.DEVICE_TYPE_TRACK.name())).toList(); for (String lockLevel : interlockOneList) { Map detailMap = interLockData.getDetailByInterlockKey(lockLevel); for (Entry interLockDetail : detailMap.entrySet()) { @@ -87,6 +87,8 @@ public class AxleLedInterlockTask implements AlertMonitoringTask { Integer lineIdInt = Integer.parseInt(lineId); //收集联锁下的所有所有区段设备 List resultList = this.collectorLedWarDevices(findWarnAlertType, lineId, detail.getDevices()); + log.info("线路[{}] 联锁区[{}] 需要加载设备数量[{}] 实际加载数量[{}] 区段被占用情况[{}]", lineId, rtuIdJoinStr, deviceCount, resultList.size(), + resultList.stream().filter(d -> d.occupied).map(d -> d.deviceCode).collect(Collectors.joining(","))); int occupidedSzie = (int) resultList.stream().filter(d -> d.occupied).count(); String customName = String.format("%s-%s", findWarnAlertType.name(), detail.getAreaConfigId()); if (occupidedSzie >= deviceCount) { @@ -115,14 +117,6 @@ public class AxleLedInterlockTask implements AlertMonitoringTask { List warnResultList = Lists.newArrayList(); for (Integer deviceLayoutId : deviceLayoutIds) { MessageOrBuilder mb = LineGraphicDataRepository.getDeviceByCode(lineIdInt, deviceLayoutId.toString()); -/* if (mb instanceof Section section) { - boolean result = this.checkTrackOccupiedSectionStatus(alertType, section, lineIdInt, deviceStatusData, trainDataSource); - warnResultList.add(new TrackOccupiedStatus(section.getCode(), result, section.getCommon().getId())); - } else if (mb instanceof Turnout turnout) { - String dgCode = LineGraphicDataRepository.findTurnoutSectionFromTurnoutCode(lineIdInt, turnout.getCode()); - boolean result = this.checkTrackOccupiedTurnoutStatus(alertType, turnout, deviceStatusData, trainDataSource); - warnResultList.add(new TrackOccupiedStatus(dgCode, result, turnout.getCommon().getId())); - }*/ if (mb instanceof Section section) { boolean result = this.checkTrackOccupiedStatus(alertType, section, lineIdInt, deviceStatusData, trainDataSource); warnResultList.add(new TrackOccupiedStatus(section.getCode(), result, section.getCommon().getId())); @@ -131,102 +125,65 @@ public class AxleLedInterlockTask implements AlertMonitoringTask { return warnResultList; } - @Deprecated - private boolean checkTrackOccupiedTurnoutStatus(AlertType alertType, Turnout turnout, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { - MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Switch.getDescriptor().getName(), turnout.getCode()); - String trackCode = DeviceNameChangerManage.findMatch(DeviceType.DEVICE_TYPE_SWITCH, turnout.getCode()); - String trainGroupId = trainDataSource.findTrainForDeviceName(trackCode); - if (deviceStatus instanceof Switch.Builder switchBuild) { - boolean ledRed = switchBuild.getIpSingleSwitchStusCiOccupied() && !switchBuild.getIpSingleSwitchStusCbtcOccupied() && Objects.isNull(trainGroupId); - boolean orange = switchBuild.getIpSingleSwitchStusAtcInvalid(); - if (alertType == AlertType.AXLE_LED_RED) { - return ledRed; - } else { - return orange; - } + private boolean checkTrackOccupiedStatus(AlertType alertType, Section section, Integer lineId, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { + if (section.getSectionType() == SectionType.Physical) { + return this.checkTrackStatus(lineId, section, alertType, deviceStatusData, trainDataSource); + } else if (section.getSectionType() == SectionType.TurnoutPhysical) { + return this.checkTurnoutStatus(lineId, section, alertType, deviceStatusData, trainDataSource); } return false; } - @Deprecated - private boolean checkTrackOccupiedSectionStatus(AlertType alertType, Section section, Integer lineId, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { - List alertList = Lists.newArrayList(); - if (section.getSectionType() == SectionType.Physical) { - for (Integer childId : section.getChildrenList()) { - MessageOrBuilder childMB = LineGraphicDataRepository.getDeviceByCode(lineId, childId.toString()); - String deviceCode = DeviceStatusDataOperate.findFieldVal(childMB, "code", String.class); - MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Track.getDescriptor().getName(), deviceCode); - String trainGroupId = trainDataSource.findTrainForDeviceName(deviceCode); - if (StringUtils.isNotEmpty(trainGroupId)) { - //车辆占用区段 - return false; - } - if (deviceStatus instanceof Track.Builder track) { - if (alertType == AlertType.AXLE_LED_RED) { - boolean red = track.getCiOccupied() && !track.getCbtcOccupied(); - alertList.add(red); - } else { - boolean orange = track.getAtcInvalid(); - alertList.add(orange); - } + private boolean checkTrackStatus(Integer lineId, Section section, AlertType alertType, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { + List sectionStatusList = Lists.newArrayListWithCapacity(section.getChildrenList().size()); + for (Integer childId : section.getChildrenList()) { + MessageOrBuilder childMB = LineGraphicDataRepository.getDeviceByCode(lineId, childId.toString()); + String deviceCode = DeviceStatusDataOperate.findFieldVal(childMB, "code", String.class); + MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Track.getDescriptor().getName(), deviceCode); + String trainGroupId = trainDataSource.findTrainForDeviceName(deviceCode); + if (StringUtils.isNotEmpty(trainGroupId)) { + //车辆占用区段 + return false; + } + if (deviceStatus instanceof Track.Builder track) { + if (alertType == AlertType.AXLE_LED_RED) { + boolean red = track.getCiOccupied() && !track.getCbtcOccupied(); + sectionStatusList.add(red); + } else { + boolean orange = track.getAtcInvalid(); + sectionStatusList.add(orange); } } } - if (CollectionUtils.isEmpty(alertList)) { - return false; - } - return alertList.stream().allMatch(d -> d); + + return sectionStatusList.stream().allMatch(d -> d); } + private boolean checkTurnoutStatus(Integer lineId, Section section, AlertType alertType, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { + List turnoutOccLList = Lists.newArrayListWithCapacity(section.getChildrenList().size()); + for (Integer refTuronoutId : section.getChildrenList()) { + Turnout turnout = LineGraphicDataRepository.getDeviceByCode(lineId, refTuronoutId.toString(), Turnout.class); + MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Switch.getDescriptor().getName(), turnout.getCode()); + String trainGroupId = trainDataSource.findTrainForDeviceName(section.getCode()); + if (StringUtils.isNotEmpty(trainGroupId)) { + //车辆占用区段 + return false; + } + if (deviceStatus instanceof Switch.Builder switchBuild) { + boolean ledRed = switchBuild.getIpSingleSwitchStusCiOccupied() && !switchBuild.getIpSingleSwitchStusCbtcOccupied(); + boolean orange = switchBuild.getIpSingleSwitchStusAtcInvalid(); + if (alertType == AlertType.AXLE_LED_RED) { + turnoutOccLList.add(ledRed); + } else { + turnoutOccLList.add(orange); + } + } + } - private boolean checkTrackOccupiedStatus(AlertType alertType, Section section, Integer lineId, DeviceStatusData deviceStatusData, TrainDataSource trainDataSource) { - List alertList = Lists.newArrayList(); - if (section.getSectionType() == SectionType.Physical) { - for (Integer childId : section.getChildrenList()) { - MessageOrBuilder childMB = LineGraphicDataRepository.getDeviceByCode(lineId, childId.toString()); - String deviceCode = DeviceStatusDataOperate.findFieldVal(childMB, "code", String.class); - MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Track.getDescriptor().getName(), deviceCode); - String trainGroupId = trainDataSource.findTrainForDeviceName(deviceCode); - if (StringUtils.isNotEmpty(trainGroupId)) { - //车辆占用区段 - return false; - } - if (deviceStatus instanceof Track.Builder track) { - if (alertType == AlertType.AXLE_LED_RED) { - boolean red = track.getCiOccupied() && !track.getCbtcOccupied(); - alertList.add(red); - } else { - boolean orange = track.getAtcInvalid(); - alertList.add(orange); - } - } - } - } else if (section.getSectionType() == SectionType.TurnoutPhysical) { - List turnoutOccLList = Lists.newArrayListWithCapacity(section.getChildrenList().size()); - for (Integer refTuronoutId : section.getChildrenList()) { - Turnout turnout = LineGraphicDataRepository.getDeviceByCode(lineId, refTuronoutId.toString(), Turnout.class); - MessageOrBuilder deviceStatus = deviceStatusData.getDeviceBuild(Switch.getDescriptor().getName(), turnout.getCode()); - String trainGroupId = trainDataSource.findTrainForDeviceName(section.getCode()); - if (deviceStatus instanceof Switch.Builder switchBuild) { - boolean ledRed = switchBuild.getIpSingleSwitchStusCiOccupied() && !switchBuild.getIpSingleSwitchStusCbtcOccupied() && Objects.isNull(trainGroupId); - boolean orange = switchBuild.getIpSingleSwitchStusAtcInvalid(); - if (alertType == AlertType.AXLE_LED_RED) { - turnoutOccLList.add(ledRed); - } else { - turnoutOccLList.add(orange); - } - } - } - alertList.add(turnoutOccLList.stream().anyMatch(d -> d)); - } - if (CollectionUtils.isEmpty(alertList)) { - return false; - } - return alertList.stream().allMatch(d -> d); + return turnoutOccLList.stream().anyMatch(d -> d); } - @Getter public static class AxleInterLockSource {