蓝显及代码调整

This commit is contained in:
tiger_zhou 2023-08-28 10:52:08 +08:00
parent 0a87420003
commit 7446eed3d0
8 changed files with 71 additions and 46 deletions

View File

@ -104,7 +104,7 @@ public class NccAlertInfo implements AlertInfo {
} }
case BLUE_DISPLAY, PLATFORM_DOOR_CANNOT_CLOSE, PLATFORM_DOOR_CANNOT_OPEN, case BLUE_DISPLAY, PLATFORM_DOOR_CANNOT_CLOSE, PLATFORM_DOOR_CANNOT_OPEN,
PLATFORM_DOOR_WITHOUT_LOCKED_SIGNAL, TRAIN_DELAY_10, SWITCH_LOST, PLATFORM_DOOR_WITHOUT_LOCKED_SIGNAL, TRAIN_DELAY_10, SWITCH_LOST,
SWITCH_LOST_MOST, AXLE_LED_RED, AXLE_LED_ORANGE, AXLE_LED_ORANGE_MOST, AXLE_LED_RED_MOST, TRAIN_EB_ATP -> { SWITCH_LOST_MOST, AXLE_LED_RED, AXLE_LED_ORANGE, AXLE_LED_ORANGE_MOST, AXLE_LED_RED_MOST, TRAIN_EB_ATP, ALL_LINE_BLUE_DISPLAY -> {
return "I"; return "I";
} }
default -> throw new IllegalStateException("Unexpected value: " + alertType); default -> throw new IllegalStateException("Unexpected value: " + alertType);

View File

@ -34,7 +34,7 @@ public class AlertManager extends EventEmitter {
* <p> * <p>
* val = 设备code * val = 设备code
*/ */
private static final Table<String, String, AlertTableDetail> DEVICE_ALTER_TABLE = Tables.synchronizedTable(HashBasedTable.create()); private static final Table<Integer, String, AlertTableDetail> DEVICE_ALTER_TABLE = Tables.synchronizedTable(HashBasedTable.create());
/** /**
* 报警监控任务(循环监测式报警) * 报警监控任务(循环监测式报警)
*/ */
@ -56,7 +56,7 @@ public class AlertManager extends EventEmitter {
} }
public boolean putAlterDevice(String lineId, String customName, String deviceName) { public boolean putAlterDevice(Integer lineId, String customName, String deviceName) {
AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName); AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
if (Objects.isNull(detail)) { if (Objects.isNull(detail)) {
detail = new AlertTableDetail(false); detail = new AlertTableDetail(false);
@ -65,7 +65,7 @@ public class AlertManager extends EventEmitter {
return detail.add(deviceName); return detail.add(deviceName);
} }
public void removeAlterDevice(String lineId, String customName, String deviceName) { public void removeAlterDevice(Integer lineId, String customName, String deviceName) {
AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName); AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
if (Objects.isNull(detail)) { if (Objects.isNull(detail)) {
detail = new AlertTableDetail(false); detail = new AlertTableDetail(false);
@ -74,7 +74,7 @@ public class AlertManager extends EventEmitter {
detail.remove(deviceName); detail.remove(deviceName);
} }
public boolean needMostShow(String lineId, String customName, int val) { public boolean needMostShow(Integer lineId, String customName, int val) {
if (StringUtils.isEmpty(customName)) { if (StringUtils.isEmpty(customName)) {
return false; return false;
} }

View File

@ -105,18 +105,18 @@ public class AxleSwitchTrackLedAlertListener implements AlertSourceEventListener
String ledMostName = alertInfoMostOptional.map(DeviceAreaConfig::getAreaName).orElse(null); String ledMostName = alertInfoMostOptional.map(DeviceAreaConfig::getAreaName).orElse(null);
if (light) { if (light) {
if (alertManager.putAlterDevice(lineId.toString(), ledName, id)) { if (alertManager.putAlterDevice(lineId, ledName, id)) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoOptional, alertType, build, section.getCode()); NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoOptional, alertType, build, section.getCode());
alertManager.emit(alertInfo); alertManager.emit(alertInfo);
} }
if (Objects.nonNull(ledMostName) && alertManager.needMostShow(lineId.toString(), ledMostName, overNums)) { if (Objects.nonNull(ledMostName) && alertManager.needMostShow(lineId, ledMostName, overNums)) {
NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(alertInfoOptional, alertType, build, section.getCode()); NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(alertInfoOptional, alertType, build, section.getCode());
alertManager.emit(alertInfoMost); alertManager.emit(alertInfoMost);
} }
} else { } else {
alertManager.removeAlterDevice(lineId.toString(), ledName, id); alertManager.removeAlterDevice(lineId, ledName, id);
if (StringUtils.isNotEmpty(ledMostName)) { if (StringUtils.isNotEmpty(ledMostName)) {
alertManager.removeAlterDevice(lineId.toString(), ledMostName, id); alertManager.removeAlterDevice(lineId, ledMostName, id);
} }
} }

View File

@ -1,58 +1,85 @@
package club.joylink.xiannccda.ats.warn; package club.joylink.xiannccda.ats.warn;
import club.joylink.xiannccda.alert.AlertDetailFactory;
import club.joylink.xiannccda.alert.NccAlertInfo; import club.joylink.xiannccda.alert.NccAlertInfo;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager; import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.alert.core.AlertSourceEventListener; import club.joylink.xiannccda.alert.core.AlertSourceEventListener;
import club.joylink.xiannccda.alert.util.AlertUtil;
import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository; import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType; import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu; import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Station; import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Station;
import club.joylink.xiannccda.entity.DeviceAreaConfig;
import club.joylink.xiannccda.service.AlertInfoService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.protobuf.MessageOrBuilder; import java.util.List;
import java.time.Instant; import java.util.Map;
import java.time.LocalDateTime; import java.util.Objects;
import java.time.ZoneId; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream; import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@Slf4j
public class BlueAlertListener implements AlertSourceEventListener<BlueDisplayAlertEvent> { public class BlueAlertListener implements AlertSourceEventListener<BlueDisplayAlertEvent> {
@Autowired @Autowired
private AlertDetailFactory alertDetailFactory; private AlertInfoService alertInfoService;
private final static String BLUE_DISPLAY_NAME = Rtu.getDescriptor().getName();
private final static String ALL_BLUE_DISPLAY_VAL = "全线蓝显";
private final static AlertManager alertManager = AlertManager.getDefault();
private final static Map<Integer, List<Station>> CONTROL_STATION_MAPER = new ConcurrentHashMap<>();
private final static String DEVICE_TYPE_NAME = Rtu.getDescriptor().getName();
private NccAlertInfo createAlterTip(Rtu.Builder rtuBuild, String lineId, MessageOrBuilder mb) {
LocalDateTime createTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(rtuBuild.getTimestamp()), ZoneId.of("+8"));
NccAlertInfo alertInfo = this.alertDetailFactory.getAlertDetail(createTime, AlertType.BLUE_DISPLAY, Integer.valueOf(lineId), false, mb);
// alertInfo.setAlertLocation(AlertUtil.findLocationByRtuCode(rtuBuild.getId()).orElse(null));
return alertInfo;
}
@Override @Override
public void accept(BlueDisplayAlertEvent event) { public void accept(BlueDisplayAlertEvent event) {
Rtu.Builder rtu = event.getSource(); Rtu.Builder rtu = event.getSource();
AlertManager alertManager = AlertManager.getDefault(); Station station = findAllStation(rtu.getLineId(), rtu.getId());
String lineId = String.valueOf(rtu.getLineId()); if (Objects.isNull(station)) {
//TODO logs
return;
}
if (rtu.getIpRtuStusDown()) { if (rtu.getIpRtuStusDown()) {
if (alertManager.putAlterDevice(String.valueOf(rtu.getLineId()), DEVICE_TYPE_NAME, rtu.getId())) { if (alertManager.putAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, rtu.getId())) {
String rtuName = Strings.padStart(rtu.getId(), 2, '0'); Optional<DeviceAreaConfig> alertInfoOpt = this.alertInfoService.findAreaDevice(AlertType.BLUE_DISPLAY, AlertDeviceType.DEVICE_TYPE_RTU, station.getCommon().getId(),
Stream<Station> stream = LineGraphicDataRepository.getDevices(rtu.getLineId(), Station.class); rtu.getLineId());
Station station = stream.filter(Station::getConcentrationStations).filter(d -> StringUtils.equals(d.getCode(), rtuName)).findFirst().get(); NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoOpt, AlertType.BLUE_DISPLAY, rtu, station.getName());
NccAlertInfo alertInfo = this.createAlterTip(rtu, lineId, station); alertManager.emit(alertInfo);
}
int allControlStationSize = CONTROL_STATION_MAPER.get(rtu.getLineId()).size();
if (alertManager.needMostShow(rtu.getLineId(), BLUE_DISPLAY_NAME, 1)
&& alertManager.putAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, ALL_BLUE_DISPLAY_VAL)
) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), AlertType.ALL_LINE_BLUE_DISPLAY, rtu, ALL_BLUE_DISPLAY_VAL);
alertManager.emit(alertInfo); alertManager.emit(alertInfo);
} }
} else { } else {
alertManager.removeAlterDevice(lineId, DEVICE_TYPE_NAME, rtu.getId()); alertManager.removeAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, rtu.getId());
alertManager.removeAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, ALL_BLUE_DISPLAY_VAL);
} }
} }
private static synchronized Station findAllStation(int lineId, String rtuId) {
if (CollectionUtils.isEmpty(CONTROL_STATION_MAPER)) {
Stream<Station> stream = LineGraphicDataRepository.getDevices(lineId, Station.class);
List<Station> stationList = stream.filter(Station::getConcentrationStations).toList();
CONTROL_STATION_MAPER.put(lineId, stationList);
}
List<Station> stationList = CONTROL_STATION_MAPER.get(lineId);
if (CollectionUtils.isEmpty(stationList)) {
return null;
}
String rtuName = Strings.padStart(rtuId, 2, '0');
Optional<Station> optionalStation = stationList.stream().filter(d -> StringUtils.equalsIgnoreCase(d.getCode(), rtuName)).findAny();
return optionalStation.orElse(null);
}
} }

View File

@ -54,7 +54,7 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
public void removeSwitch(Platform.Builder platformBuild) { public void removeSwitch(Platform.Builder platformBuild) {
platformMap.remove(platformBuild.getId()); platformMap.remove(platformBuild.getId());
alertManager.removeAlterDevice(String.valueOf(platformBuild.getLineId()), CUSTOM_NAME, platformBuild.getId()); alertManager.removeAlterDevice(platformBuild.getLineId(), CUSTOM_NAME, platformBuild.getId());
} }
@Override @Override
@ -66,17 +66,16 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
@Override @Override
public void run() { public void run() {
for (Platform.Builder build : platformMap.values()) { for (Platform.Builder build : platformMap.values()) {
String lineId = String.valueOf(build.getLineId());
GuardConfig guardConfig = configService.getGuardConfig(build.getLineId()); GuardConfig guardConfig = configService.getGuardConfig(build.getLineId());
AlertType alertType = AlertType.PLATFORM_DOOR_CANNOT_OPEN; AlertType alertType = AlertType.PLATFORM_DOOR_CANNOT_OPEN;
int timeOut = guardConfig.getCanNotOpenTimes(); int timeOut = guardConfig.getCanNotOpenTimes();
if (build.getPsdOpen()) { if (build.getPsdOpen()) {
alertType = AlertType.PLATFORM_DOOR_CANNOT_CLOSE; alertType = AlertType.PLATFORM_DOOR_CANNOT_CLOSE;
timeOut = guardConfig.getCanNotCloseTimes(); timeOut = guardConfig.getCanNotCloseTimes();
alertManager.removeAlterDevice(String.valueOf(build.getLineId()), CUSTOM_NAME, build.getId()); alertManager.removeAlterDevice(build.getLineId(), CUSTOM_NAME, build.getId());
} }
if (this.timeOver(build.getReceiveTime(), timeOut) if (this.timeOver(build.getReceiveTime(), timeOut)
&& alertManager.putAlterDevice(lineId, CUSTOM_NAME, build.getId())) { && alertManager.putAlterDevice(build.getLineId(), CUSTOM_NAME, build.getId())) {
LayoutGraphicsProto.Platform platform = LineGraphicDataRepository.getDeviceByCode(build.getLineId(), build.getId(), LayoutGraphicsProto.Platform.class); LayoutGraphicsProto.Platform platform = LineGraphicDataRepository.getDeviceByCode(build.getLineId(), build.getId(), LayoutGraphicsProto.Platform.class);
NccAlertInfo alertInfo = this.alertInfoService.createAlert(alertType, AlertDeviceType.DEVICE_TYPE_PLATFORM, platform.getCommon().getId(), build, platform.getCode()); NccAlertInfo alertInfo = this.alertInfoService.createAlert(alertType, AlertDeviceType.DEVICE_TYPE_PLATFORM, platform.getCommon().getId(), build, platform.getCode());
alertManager.emit(alertInfo); alertManager.emit(alertInfo);

View File

@ -59,7 +59,7 @@ public class SwitchLostAlertMonitoringTask implements AlertMonitoringTask {
public void removeSwitch(Switch.Builder switchBuilder) { public void removeSwitch(Switch.Builder switchBuilder) {
AlertManager alertManager = AlertManager.getDefault(); AlertManager alertManager = AlertManager.getDefault();
deviceMap.remove(switchBuilder.getId()); deviceMap.remove(switchBuilder.getId());
alertManager.removeAlterDevice(String.valueOf(switchBuilder.getLineId()), DEVICE_TYPE_NAME, switchBuilder.getId()); alertManager.removeAlterDevice(switchBuilder.getLineId(), DEVICE_TYPE_NAME, switchBuilder.getId());
} }
@Override @Override
@ -71,7 +71,7 @@ public class SwitchLostAlertMonitoringTask implements AlertMonitoringTask {
@Override @Override
public void run() { public void run() {
for (Builder savedSwitchBuild : this.deviceMap.values()) { for (Builder savedSwitchBuild : this.deviceMap.values()) {
String lineIdStr = String.valueOf(savedSwitchBuild.getLineId()); // String lineIdStr = String.valueOf(savedSwitchBuild.getLineId());
GuardConfig guardConfig = configService.getGuardConfig(savedSwitchBuild.getLineId()); GuardConfig guardConfig = configService.getGuardConfig(savedSwitchBuild.getLineId());
Turnout turnout = LineGraphicDataRepository.getDeviceByCode(savedSwitchBuild.getLineId(), savedSwitchBuild.getId(), Turnout.class); Turnout turnout = LineGraphicDataRepository.getDeviceByCode(savedSwitchBuild.getLineId(), savedSwitchBuild.getId(), Turnout.class);
@ -83,7 +83,7 @@ public class SwitchLostAlertMonitoringTask implements AlertMonitoringTask {
boolean saveIsLost = savedSwitchBuild.getIpSingleSwitchStusLostIndication(); boolean saveIsLost = savedSwitchBuild.getIpSingleSwitchStusLostIndication();
if (saveIsLost && this.timeOver(savedSwitchBuild.getReceiveTime(), guardConfig.getSwitchLostTimes())) { if (saveIsLost && this.timeOver(savedSwitchBuild.getReceiveTime(), guardConfig.getSwitchLostTimes())) {
//失表超时 //失表超时
if (alertManager.putAlterDevice(lineIdStr, oneName, savedSwitchBuild.getId())) { if (alertManager.putAlterDevice(savedSwitchBuild.getLineId(), oneName, savedSwitchBuild.getId())) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoOpt, AlertType.SWITCH_LOST, savedSwitchBuild, savedSwitchBuild.getId()); NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoOpt, AlertType.SWITCH_LOST, savedSwitchBuild, savedSwitchBuild.getId());
alertManager.emit(alertInfo); alertManager.emit(alertInfo);
this.deviceMap.remove(savedSwitchBuild.getId()); this.deviceMap.remove(savedSwitchBuild.getId());
@ -91,7 +91,7 @@ public class SwitchLostAlertMonitoringTask implements AlertMonitoringTask {
Optional<DeviceAreaConfig> alertInfoMostOpt = this.alertInfoService.findAreaDevice(AlertType.SWITCH_LOST_MOST, AlertDeviceType.DEVICE_TYPE_SWITCH, turnout.getCommon().getId(), Optional<DeviceAreaConfig> alertInfoMostOpt = this.alertInfoService.findAreaDevice(AlertType.SWITCH_LOST_MOST, AlertDeviceType.DEVICE_TYPE_SWITCH, turnout.getCommon().getId(),
savedSwitchBuild.getLineId()); savedSwitchBuild.getLineId());
//检测大面积失表 //检测大面积失表
if (alertInfoMostOpt.isPresent() && alertManager.needMostShow(lineIdStr, alertInfoMostOpt.get().getAreaName(), guardConfig.getSwitchLostMostNums())) { if (alertInfoMostOpt.isPresent() && alertManager.needMostShow(savedSwitchBuild.getLineId(), alertInfoMostOpt.get().getAreaName(), guardConfig.getSwitchLostMostNums())) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoMostOpt, AlertType.SWITCH_LOST_MOST, savedSwitchBuild, savedSwitchBuild.getId()); NccAlertInfo alertInfo = this.alertInfoService.createAlert2(alertInfoMostOpt, AlertType.SWITCH_LOST_MOST, savedSwitchBuild, savedSwitchBuild.getId());
alertManager.emit(alertInfo); alertManager.emit(alertInfo);

View File

@ -31,7 +31,6 @@ public class TrainModeAlertListener implements AlertSourceEventListener<TrainAle
public void accept(TrainAlertEvent event) { public void accept(TrainAlertEvent event) {
TrainInfo.Builder trainInfo = event.getSource(); TrainInfo.Builder trainInfo = event.getSource();
TrainMode trainMode = trainInfo.getMode(); TrainMode trainMode = trainInfo.getMode();
String lineIdStr = String.valueOf(trainInfo.getLineId());
if (trainMode.getIpModeTrainAtpCut() && trainMode.getIpModeTrainEbAlarm()) { if (trainMode.getIpModeTrainAtpCut() && trainMode.getIpModeTrainEbAlarm()) {
String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(trainInfo.getLineId(), trainInfo.getDevName()); String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(trainInfo.getLineId(), trainInfo.getDevName());
@ -39,12 +38,12 @@ public class TrainModeAlertListener implements AlertSourceEventListener<TrainAle
return; return;
} }
Section section = LineGraphicDataRepository.getDeviceByCode(trainInfo.getLineId(), sectionCode, Section.class); Section section = LineGraphicDataRepository.getDeviceByCode(trainInfo.getLineId(), sectionCode, Section.class);
if (alertManager.putAlterDevice(lineIdStr, CUSTOM_NAME, trainInfo.getGroupId())) { if (alertManager.putAlterDevice(trainInfo.getLineId(), CUSTOM_NAME, trainInfo.getGroupId())) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert(AlertType.TRAIN_EB_ATP, AlertDeviceType.DEVICE_TYPE_TRAIN, section.getCommon().getId(), trainInfo, trainInfo.getGroupId()); NccAlertInfo alertInfo = this.alertInfoService.createAlert(AlertType.TRAIN_EB_ATP, AlertDeviceType.DEVICE_TYPE_TRAIN, section.getCommon().getId(), trainInfo, trainInfo.getGroupId());
alertManager.emit(alertInfo); alertManager.emit(alertInfo);
} }
} else { } else {
alertManager.removeAlterDevice(lineIdStr, CUSTOM_NAME, trainInfo.getGroupId()); alertManager.removeAlterDevice(trainInfo.getLineId(), CUSTOM_NAME, trainInfo.getGroupId());
} }
} }

@ -1 +1 @@
Subproject commit b44f47754df86082bc6402be4899475ad0d4ffff Subproject commit a65253b7a3685dabe0376caa36bda8b47d675ff7