diff --git a/src/main/java/club/joylink/xiannccda/alert/core/AlertDataSource.java b/src/main/java/club/joylink/xiannccda/alert/core/AlertDataSource.java
new file mode 100644
index 0000000..4bb76b0
--- /dev/null
+++ b/src/main/java/club/joylink/xiannccda/alert/core/AlertDataSource.java
@@ -0,0 +1,174 @@
+package club.joylink.xiannccda.alert.core;
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.google.common.base.Joiner;
+import com.google.common.collect.HashBasedTable;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Table;
+import com.google.common.collect.Tables;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 事件任务管理器
+ */
+@Slf4j
+public class AlertDataSource {
+
+
+ /**
+ * 保存已经报警的设备
+ *
+ * row = lineid
+ *
+ * column = 设备类型,也可是自定义的类型
+ *
+ * val = 设备code
+ */
+ private static final Table DEVICE_ALTER_TABLE = Tables.synchronizedTable(HashBasedTable.create());
+
+ private volatile static AlertDataSource dataSource;
+
+ public synchronized static AlertDataSource getInstance() {
+ if (Objects.isNull(dataSource)) {
+ return new AlertDataSource();
+ }
+ return dataSource;
+ }
+
+ /**
+ * 报警监控任务(循环监测式报警)
+ */
+ Map amtMap = new ConcurrentHashMap<>();
+
+
+ public void clearAlertDataMsg(Integer lineId) {
+ DEVICE_ALTER_TABLE.clear();
+ }
+
+ public boolean putAlterDevice(Integer lineId, String customName, String deviceName) {
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
+ if (Objects.isNull(detail)) {
+ detail = new AlertTableDetail(false);
+ DEVICE_ALTER_TABLE.put(lineId, customName, detail);
+ }
+ return detail.add(deviceName);
+ }
+
+ public boolean deviceIsExist(Integer lineId, String customName, String deviceName) {
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
+ if (Objects.isNull(detail)) {
+ return false;
+ }
+ return detail.contains(deviceName);
+
+ }
+
+ public void removeAlertDevicePrefixName(Integer lineId, String prefixName, String deviceCode) {
+ Map detailMap = DEVICE_ALTER_TABLE.row(lineId);
+ for (Entry entry : detailMap.entrySet()) {
+ if (StringUtils.startsWith(entry.getKey(), prefixName)) {
+ entry.getValue().remove(deviceCode);
+ }
+ }
+ }
+
+ public void removeAlterDevice(Integer lineId, String customName, String deviceName) {
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
+ if (Objects.isNull(detail)) {
+ detail = new AlertTableDetail(false);
+ DEVICE_ALTER_TABLE.put(lineId, customName, detail);
+ }
+ detail.remove(deviceName);
+ }
+
+ public boolean needMostShow(Integer lineId, String customName, int val) {
+ if (StringUtils.isEmpty(customName)) {
+ return false;
+ }
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
+ if (Objects.isNull(detail)) {
+ detail = new AlertTableDetail(false);
+ DEVICE_ALTER_TABLE.put(lineId, customName, detail);
+ }
+// if (detail.mostShower && detail.mostSize() >= val) {
+// //已经报警过了且超过了阈值
+// return false;
+// } else
+ if (detail.mostShower && detail.mostSize() < val) {
+ //已经报警过了,但小于阈值
+ detail.setMostShower(false);
+ return false;
+ } else if (detail.mostSize() >= val) {
+ //超过阈值
+ detail.setMostShower(true);
+ return true;
+ }
+ return false;
+ }
+
+ public String findAllWarnDevice(Integer lineId, String customName) {
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
+ if (Objects.isNull(detail)) {
+ return null;
+ }
+ return detail.getAllDeviceCodes();
+ }
+
+ public List findAllWarnDeviceForList(Integer lineId, String customeName) {
+ AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customeName);
+ if (Objects.isNull(detail)) {
+ return Collections.emptyList();
+ }
+ return detail.getDeviceCodes();
+ }
+
+
+ public static class AlertTableDetail {
+
+ public AlertTableDetail(boolean shower) {
+ this.mostShower = shower;
+ this.deviceCodes = Lists.newArrayList();
+ }
+
+ @Getter
+ @Setter
+ private boolean mostShower;
+ @Getter
+ private List deviceCodes;
+
+ public int mostSize() {
+ return this.deviceCodes.size();
+ }
+
+ public boolean add(String deviceCode) {
+ if (this.contains(deviceCode)) {
+ return false;
+
+ }
+ this.deviceCodes.add(deviceCode);
+ return true;
+ }
+
+
+ public String getAllDeviceCodes() {
+ return Joiner.on(StringPool.COMMA).skipNulls().join(this.deviceCodes);
+ }
+
+ public boolean contains(String deviceCode) {
+ return this.deviceCodes.contains(deviceCode);
+ }
+
+ public void remove(String deviceCode) {
+ this.deviceCodes.remove(deviceCode);
+ }
+ }
+}
diff --git a/src/main/java/club/joylink/xiannccda/alert/core/AlertManager.java b/src/main/java/club/joylink/xiannccda/alert/core/AlertManager.java
index b84247f..56cd86f 100644
--- a/src/main/java/club/joylink/xiannccda/alert/core/AlertManager.java
+++ b/src/main/java/club/joylink/xiannccda/alert/core/AlertManager.java
@@ -28,16 +28,6 @@ import org.apache.commons.lang3.StringUtils;
public class AlertManager extends EventEmitter {
private static final Map MANAGER_MAP = new ConcurrentHashMap<>();
- /**
- * 保存已经报警的设备
- *
- * row = lineid
- *
- * column = 设备类型,也可是自定义的类型
- *
- * val = 设备code
- */
- private static final Table DEVICE_ALTER_TABLE = Tables.synchronizedTable(HashBasedTable.create());
/**
* 报警监控任务(循环监测式报警)
*/
@@ -58,78 +48,6 @@ public class AlertManager extends EventEmitter {
return getInstance("default");
}
- public void clearAlertDataMsg(Integer lineId) {
- DEVICE_ALTER_TABLE.clear();
- }
-
- public boolean putAlterDevice(Integer lineId, String customName, String deviceName) {
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
- if (Objects.isNull(detail)) {
- detail = new AlertTableDetail(false);
- DEVICE_ALTER_TABLE.put(lineId, customName, detail);
- }
- return detail.add(deviceName);
- }
-
- public boolean deviceIsExist(Integer lineId, String customName, String deviceName) {
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
- if (Objects.isNull(detail)) {
- return false;
- }
- return detail.contains(deviceName);
-
- }
-
- public void removeAlterDevice(Integer lineId, String customName, String deviceName) {
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
- if (Objects.isNull(detail)) {
- detail = new AlertTableDetail(false);
- DEVICE_ALTER_TABLE.put(lineId, customName, detail);
- }
- detail.remove(deviceName);
- }
-
- public boolean needMostShow(Integer lineId, String customName, int val) {
- if (StringUtils.isEmpty(customName)) {
- return false;
- }
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
- if (Objects.isNull(detail)) {
- detail = new AlertTableDetail(false);
- DEVICE_ALTER_TABLE.put(lineId, customName, detail);
- }
-// if (detail.mostShower && detail.mostSize() >= val) {
-// //已经报警过了且超过了阈值
-// return false;
-// } else
- if (detail.mostShower && detail.mostSize() < val) {
- //已经报警过了,但小于阈值
- detail.setMostShower(false);
- return false;
- } else if (detail.mostSize() >= val) {
- //超过阈值
- detail.setMostShower(true);
- return true;
- }
- return false;
- }
-
- public String findAllWarnDevice(Integer lineId, String customName) {
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customName);
- if (Objects.isNull(detail)) {
- return null;
- }
- return detail.getAllDeviceCodes();
- }
-
- public List findAllWarnDeviceForList(Integer lineId, String customeName) {
- AlertTableDetail detail = DEVICE_ALTER_TABLE.get(lineId, customeName);
- if (Objects.isNull(detail)) {
- return Collections.emptyList();
- }
- return detail.getDeviceCodes();
- }
-
public static AlertManager getInstance(String id) {
return MANAGER_MAP.computeIfAbsent(id, k -> new AlertManager(id));
}
@@ -167,43 +85,5 @@ public class AlertManager extends EventEmitter {
}
}
- public static class AlertTableDetail {
- public AlertTableDetail(boolean shower) {
- this.mostShower = shower;
- this.deviceCodes = Lists.newArrayList();
- }
-
- @Getter
- @Setter
- private boolean mostShower;
- @Getter
- private List deviceCodes;
-
- public int mostSize() {
- return this.deviceCodes.size();
- }
-
- public boolean add(String deviceCode) {
- if (this.contains(deviceCode)) {
- return false;
-
- }
- this.deviceCodes.add(deviceCode);
- return true;
- }
-
-
- public String getAllDeviceCodes() {
- return Joiner.on(StringPool.COMMA).skipNulls().join(this.deviceCodes);
- }
-
- public boolean contains(String deviceCode) {
- return this.deviceCodes.contains(deviceCode);
- }
-
- public void remove(String deviceCode) {
- this.deviceCodes.remove(deviceCode);
- }
- }
}
diff --git a/src/main/java/club/joylink/xiannccda/alert/core/relieve/RelieveDataService.java b/src/main/java/club/joylink/xiannccda/alert/core/relieve/RelieveDataService.java
index 422305d..38334ba 100644
--- a/src/main/java/club/joylink/xiannccda/alert/core/relieve/RelieveDataService.java
+++ b/src/main/java/club/joylink/xiannccda/alert/core/relieve/RelieveDataService.java
@@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit;
public abstract class RelieveDataService implements DataService {
- private final static Cache> CACHE = CacheBuilder.newBuilder().expireAfterAccess(10, TimeUnit.MINUTES).build();
+ private final static Cache> CACHE = CacheBuilder.newBuilder().build();
private List getCache(Integer lineId, AlertDeviceType deviceType) {
try {
diff --git a/src/main/java/club/joylink/xiannccda/ats/cache/LineGraphicDataRepository.java b/src/main/java/club/joylink/xiannccda/ats/cache/LineGraphicDataRepository.java
index d8808c3..8546aab 100644
--- a/src/main/java/club/joylink/xiannccda/ats/cache/LineGraphicDataRepository.java
+++ b/src/main/java/club/joylink/xiannccda/ats/cache/LineGraphicDataRepository.java
@@ -180,10 +180,11 @@ public class LineGraphicDataRepository {
String deviceCode_ = DeviceStatusDataOperate.findFieldVal(childMB, "code", String.class);
dsd.addDevice(createMsg(lineId, club.joylink.xiannccda.ats.message.line3.device.DeviceType.DEVICE_TYPE_TRACK, deviceCode_, rtuId.shortValue()));
+ interLock.addDevice(createMsg(lineId, club.joylink.xiannccda.ats.message.line3.device.DeviceType.DEVICE_TYPE_TRACK, deviceCode_, rtuId.shortValue()));
}
}
} else if (mb instanceof LayoutGraphicsProto.Signal) {
-
+
dsd.addDevice(createMsg(lineId, club.joylink.xiannccda.ats.message.line3.device.DeviceType.DEVICE_TYPE_SIGNAL, deviceCode, rtuId.shortValue()));
}
diff --git a/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceChangeStatusConvertor.java b/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceChangeStatusConvertor.java
index fee82d4..890c3b1 100644
--- a/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceChangeStatusConvertor.java
+++ b/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceChangeStatusConvertor.java
@@ -3,15 +3,11 @@ package club.joylink.xiannccda.ats.message.collect.convertor;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.ats.message.MessageId;
import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.warn.AxleLedAlertListener.AxleLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedAlertListener.SwitchAndTrackLedAlertEvent;
+import club.joylink.xiannccda.ats.warn.axle.AxleLedAlertListener.AxleLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.BlueAlertListener.BlueDisplayAlertEvent;
import club.joylink.xiannccda.ats.warn.SwitchLostAlertListener.SwitchLostAlertEvent;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Track;
import com.google.protobuf.GeneratedMessageV3.Builder;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceInitConvertor.java b/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceInitConvertor.java
index f428695..be4c3db 100644
--- a/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceInitConvertor.java
+++ b/src/main/java/club/joylink/xiannccda/ats/message/collect/convertor/DeviceInitConvertor.java
@@ -3,15 +3,11 @@ package club.joylink.xiannccda.ats.message.collect.convertor;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.ats.message.MessageId;
import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.warn.AxleLedAlertListener.AxleLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedAlertListener.SwitchAndTrackLedAlertEvent;
+import club.joylink.xiannccda.ats.warn.axle.AxleLedAlertListener.AxleLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.BlueAlertListener.BlueDisplayAlertEvent;
import club.joylink.xiannccda.ats.warn.SwitchLostAlertListener.SwitchLostAlertEvent;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Track;
import com.google.protobuf.GeneratedMessageV3.Builder;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/club/joylink/xiannccda/ats/message/collect/datasource/InterLockData.java b/src/main/java/club/joylink/xiannccda/ats/message/collect/datasource/InterLockData.java
index 250fbeb..4338553 100644
--- a/src/main/java/club/joylink/xiannccda/ats/message/collect/datasource/InterLockData.java
+++ b/src/main/java/club/joylink/xiannccda/ats/message/collect/datasource/InterLockData.java
@@ -19,6 +19,7 @@ import com.google.common.collect.Table;
import com.google.common.collect.Tables;
import com.google.protobuf.GeneratedMessageV3.Builder;
import com.google.protobuf.MessageOrBuilder;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -79,13 +80,12 @@ public class InterLockData extends AbstractData {
private void handleLevelOne(AlertType alertType, Map> alertTypeListMap, MessageOrBuilder builder, Integer lineId) {
List interlockList = alertTypeListMap.get(alertType);
Integer rtuId = DeviceStatusDataOperate.findFieldVal(builder, "rtuId", Integer.class);
-
+
for (AreaConfigVO interlockArea : interlockList) {
List sortStationList = this.sortRtu(interlockArea.getDatas(), lineId);
Integer min = Integer.parseInt(sortStationList.get(0).getCode());
Integer max = Integer.parseInt(sortStationList.get(sortStationList.size() - 1).getCode());
-
if (rtuId >= min && rtuId <= max) {
if (builder instanceof Track.Builder track) {
String axleCode = LineGraphicDataRepository.findAxleCodeFromLogicCode(lineId, track.getId());
@@ -94,8 +94,8 @@ public class InterLockData extends AbstractData {
MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, axleCode);
this.put(section, alertType, AlertDeviceType.DEVICE_TYPE_TRACK, interlockArea, min, max, rtuId);
} else if (builder instanceof Switch.Builder switchs) {
- MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, switchs.getId());
- this.put(section, alertType, AlertDeviceType.DEVICE_TYPE_SWITCH, interlockArea, min, max, rtuId);
+// MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, switchs.getId());
+// this.put(section, alertType, AlertDeviceType.DEVICE_TYPE_SWITCH, interlockArea, min, max, rtuId);
//获取对应的道岔物理区段
String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(lineId, switchs.getId());
if (StringUtils.isNotEmpty(sectionCode)) {
@@ -115,10 +115,10 @@ public class InterLockData extends AbstractData {
InterLockDetail detail = INTER_LOCK_TABLE.get(names, tableColumn);
if (Objects.isNull(detail)) {
detail = new InterLockDetail(configVO);
- detail.setRtuId(deviceRtuId);
INTER_LOCK_TABLE.put(names, tableColumn, detail);
}
- detail.addDevice(commonInfo.getOldid());
+ detail.addRtuId(deviceRtuId);
+ detail.addDevice(commonInfo.getId());
}
private String interLockMapName(AlertType alertType, AlertDeviceType deviceTyp) {
@@ -139,10 +139,10 @@ public class InterLockData extends AbstractData {
return Optional.empty();
}
- public boolean contains(AlertType alertType, AlertDeviceType deviceType, Integer rtuId, String deviceLayoutId) {
- Optional opt = this.findDevices(alertType, deviceType, rtuId);
- return opt.map(interLockDetail -> interLockDetail.contains(deviceLayoutId)).orElse(false);
- }
+// public boolean contains(AlertType alertType, AlertDeviceType deviceType, Integer rtuId, String deviceLayoutId) {
+// Optional opt = this.findDevices(alertType, deviceType, rtuId);
+// return opt.map(interLockDetail -> interLockDetail.contains(deviceLayoutId)).orElse(false);
+// }
@Override
public void addDevice(List dataList) {
@@ -179,7 +179,7 @@ public class InterLockData extends AbstractData {
public InterLockDetail(AreaConfigVO areaConfigVO) {
this.areaConfigId = areaConfigVO.getId();
this.areaConfigName = areaConfigVO.getAreaName();
- this.devices = new TreeSet<>();
+ this.devices = Lists.newArrayList();
}
@Getter
@@ -187,15 +187,22 @@ public class InterLockData extends AbstractData {
@Getter
private String areaConfigName;
@Getter
- private Set devices;
+ private List devices;
@Getter
@Setter
- private Integer rtuId;
+ private List rtuIds = new ArrayList<>();
+ public void addRtuId(Integer rtuId) {
+ if (!this.rtuIds.contains(rtuId)) {
+ this.rtuIds.add(rtuId);
+ }
+ }
// private AtomicInteger deviceCount = new AtomicInteger(0);
- protected void addDevice(String deviceCodeOrRtuId) {
- this.devices.add(deviceCodeOrRtuId);
+ protected void addDevice(Integer deviceCodeOrRtuId) {
+ if (!devices.contains(deviceCodeOrRtuId)) {
+ this.devices.add(deviceCodeOrRtuId);
+ }
// this.deviceCount.incrementAndGet();
}
@@ -203,7 +210,7 @@ public class InterLockData extends AbstractData {
// return this.deviceCount.get();
// }
- public boolean contains(String deviceLayOutId) {
+ public boolean contains(Integer deviceLayOutId) {
return this.devices.contains(deviceLayOutId);
}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/AllLineBlueAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/AllLineBlueAlertListener.java
deleted file mode 100644
index c088507..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/AllLineBlueAlertListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertSourceEventListener;
-import club.joylink.xiannccda.ats.warn.AllLineBlueAlertListener.AllLineBlueDisplayAlertEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu.Builder;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Station;
-import club.joylink.xiannccda.service.AlertInfoService;
-import java.util.Optional;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-
-//@Component
-@Slf4j
-@Deprecated
-public class AllLineBlueAlertListener implements AlertSourceEventListener {
-
- @Autowired
- private AlertInfoService alertInfoService;
-
-
- private final static AlertManager alertManager = AlertManager.getDefault();
-
- @Override
- public void accept(AllLineBlueDisplayAlertEvent event) {
- Rtu.Builder rtu = event.getSource();
- if (alertManager.needMostShow(rtu.getLineId(), BlueAlertListener.BLUE_DISPLAY_NAME, event.allControlStationSize)
- && alertManager.putAlterDevice(rtu.getLineId(), BlueAlertListener.BLUE_DISPLAY_NAME, BlueAlertListener.ALL_BLUE_DISPLAY_VAL_FLAG)) {
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), AlertType.ALL_LINE_BLUE_DISPLAY, rtu, BlueAlertListener.ALL_BLUE_DISPLAY_VAL_FLAG,
- String.valueOf(event.station.getCommon().getId()), AlertDeviceType.DEVICE_TYPE_RTU, false);
- alertManager.emit(alertInfo);
- }
- }
-
-
- public static class AllLineBlueDisplayAlertEvent extends DeviceAlertEvent {
-
- private Station station;
- private Integer allControlStationSize;
-
- public AllLineBlueDisplayAlertEvent(Builder source, Station station, Integer allControlStationSize) {
- super(source);
- this.station = station;
- this.allControlStationSize = allControlStationSize;
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/AxleLedAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/AxleLedAlertListener.java
deleted file mode 100644
index ba16911..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/AxleLedAlertListener.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertSourceEventListener;
-import club.joylink.xiannccda.alert.core.relieve.RelieveFilterManager;
-import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.message.collect.DeviceStatusDataOperate;
-import club.joylink.xiannccda.ats.message.collect.datasource.DeviceStatusData;
-import club.joylink.xiannccda.ats.message.collect.datasource.TrainDataSource;
-import club.joylink.xiannccda.ats.warn.AxleLedAlertListener.AxleLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedMostAlertListener.SwitchAndTrackLedMostAlertEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Track;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.CommonInfo;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.LogicSection;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Section;
-import club.joylink.xiannccda.service.AlertInfoService;
-import com.google.common.collect.Lists;
-import com.google.protobuf.GeneratedMessageV3.Builder;
-import com.google.protobuf.MessageOrBuilder;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-
-//@Component
-@Deprecated
-@Slf4j
-public class AxleLedAlertListener implements AlertSourceEventListener {
-
- private final AlertInfoService alertInfoService;
- private final AlertManager alertManager = AlertManager.getDefault();
- @Autowired
- private RelieveFilterManager relieveFilterManager;
-
- public AxleLedAlertListener(AlertInfoService alertInfoService) {
- this.alertInfoService = alertInfoService;
- }
-
- private String getDefaultName(AlertType alertType, Integer lineId, Integer rtuId) {
- return String.format("%s-%s-%s", alertType.name(), lineId, rtuId);
- }
-
- @Override
- public void accept(AxleLedAlertEvent event) {
- Builder o = event.getSource();
-// String receiveBuildType = o.getDescriptorForType().getName();
- Integer lineId = DeviceStatusDataOperate.findFieldVal(o, "lineId", Integer.class);
- String id = DeviceStatusDataOperate.findFieldVal(o, "id", String.class);
-// log.info("区段光带检测 线路[{}] 设备[{}] 接受类型[{}]", lineId, id, receiveBuildType);
-
- TrainDataSource trainDataSource = DeviceDataRepository.findDataSouce(lineId.toString(), DataTypeEnum.TRAIN);
-
- if (o instanceof Switch.Builder switchBuilder) {
- String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(lineId, id);
- MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, sectionCode);
- this.switchHandle(switchBuilder, section, trainDataSource);
- } else if (o instanceof Track.Builder trackBuilder) {
- String axleSectionCode = LineGraphicDataRepository.findAxleCodeFromLogicCode(lineId, id);
- MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, axleSectionCode);
- this.trackHandle(trackBuilder, (Section) section, trainDataSource);
- }
- }
-
-
- private void switchHandle(Switch.Builder switchBuilder, MessageOrBuilder section, TrainDataSource trainDataSource) {
- String trainGroupId = trainDataSource.findTrainForDeviceName(switchBuilder.getId());
- boolean ledRed = switchBuilder.getIpSingleSwitchStusCiOccupied() && !switchBuilder.getIpSingleSwitchStusCbtcOccupied() && Objects.isNull(trainGroupId);
- boolean orange = switchBuilder.getIpSingleSwitchStusAtcInvalid();
- log.info("区段光带 道轨区段 线路[{}] 区段[{}] 红光带占用[{}] 橙光带占用[{}]", switchBuilder.getLineId(), switchBuilder.getId(), ledRed, orange);
- this.emit(ledRed, switchBuilder, section, AlertType.AXLE_LED_RED);
- this.emit(orange, switchBuilder, section, AlertType.AXLE_LED_ORANGE);
- }
-
- private void trackHandle(Track.Builder trackBuild, Section axleSection, TrainDataSource trainDataSource) {
- List redList = Lists.newArrayList();
- List orangeList = Lists.newArrayList();
-
- DeviceStatusData deviceStatusData = DeviceDataRepository.findDataSouce(String.valueOf(trackBuild.getLineId()), DataTypeEnum.DEVICE);
- for (Integer childId : axleSection.getChildrenList()) {
- LogicSection childSection = LineGraphicDataRepository.getDeviceByCode(trackBuild.getLineId(), childId.toString(), LogicSection.class);
- String trainGroupId = trainDataSource.findTrainForDeviceName(childSection.getCode());
- if (StringUtils.isNotEmpty(trainGroupId)) {
- redList.add(false);
- orangeList.add(false);
- break;
- }
- MessageOrBuilder trackMB = deviceStatusData.getDeviceBuild(Track.getDescriptor().getName(), childSection.getCode());
- if (Objects.nonNull(trackMB)) {
- Track.Builder saveTrackBuild = (Track.Builder) trackMB;
- redList.add(saveTrackBuild.getCiOccupied() && !saveTrackBuild.getCbtcOccupied());
- orangeList.add(saveTrackBuild.getAtcInvalid());
- }
- }
- boolean ledRed = redList.size() == axleSection.getChildrenList().size() && redList.stream().allMatch(d -> d);
- boolean orange = orangeList.size() == axleSection.getChildrenList().size() && orangeList.stream().allMatch(d -> d);
- if (log.isDebugEnabled()) {
- log.info("区段光带 区段 线路[{}] 区段[{}] 红光带占用[{}] 橙光带占用[{}]", trackBuild.getLineId(), trackBuild.getId(), ledRed, orange);
- }
-
- this.emit(ledRed, trackBuild, axleSection, AlertType.AXLE_LED_RED);
- this.emit(orange, trackBuild, axleSection, AlertType.AXLE_LED_ORANGE);
- }
-
- private void emit(boolean light, Builder build, MessageOrBuilder turnoutOrLogicSection, AlertType alertType) {
- Integer lineId = DeviceStatusDataOperate.findFieldVal(build, "lineId", Integer.class);
- Integer rtuId = DeviceStatusDataOperate.findFieldVal(build, "rtuId", Integer.class);
- String deviceCodeId = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "code", String.class);
- CommonInfo commonInfo = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "common", CommonInfo.class);
- Integer layoutDeviceId = commonInfo.getId();
- String ledName = alertType == AlertType.AXLE_LED_RED ? "红光带" : "橙光带";
- String ledPutName = this.getDefaultName(alertType, lineId, rtuId);
- if (light) {
-// log.info("光带检测到[{}] 线路[{}] 设备[{}] 告警[{}]", ledName, lineId, deviceCodeId, alertType.name());
- if (alertManager.putAlterDevice(lineId, ledPutName, deviceCodeId) && Objects.equals(false,
- relieveFilterManager.relieveAlertMatch(lineId, AlertDeviceType.DEVICE_TYPE_TRACK, alertType, layoutDeviceId))) {
- String alertMsg = String.format("出现%s设备[%s]", ledName, deviceCodeId);
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), alertType, build, alertMsg, String.valueOf(layoutDeviceId), AlertDeviceType.DEVICE_TYPE_TRACK, false);
- alertManager.emit(alertInfo);
- alertManager.emit(new SwitchAndTrackLedMostAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true));
-// alertManager.emit(new SwitchAndTrackLedInterLockL2AlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true, rtuId));
-// alertManager.emit(new SwitchAndTrackLedInterlockAreaAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true));
- }
- } else {
- alertManager.removeAlterDevice(lineId, ledPutName, deviceCodeId);
- alertManager.emit(new SwitchAndTrackLedMostAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false));
-// alertManager.emit(new SwitchAndTrackLedInterLockL2AlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false, rtuId));
-// alertManager.emit(new SwitchAndTrackLedInterlockAreaAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false));
-
- }
- }
-
- public static class AxleLedAlertEvent extends DeviceAlertEvent {
-
- public AxleLedAlertEvent(Builder source) {
- super(source);
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/AxleMonitoringTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/AxleMonitoringTask.java
deleted file mode 100644
index 191594a..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/AxleMonitoringTask.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertMonitoringTask;
-import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.message.collect.datasource.DeviceStatusData;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Station;
-import club.joylink.xiannccda.service.AlertInfoService;
-import club.joylink.xiannccda.vo.AreaConfigVO;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.google.common.collect.Lists;
-import com.google.protobuf.GeneratedMessageV3;
-import java.time.LocalDateTime;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-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;
-
-@Component
-@Slf4j
-public class AxleMonitoringTask implements AlertMonitoringTask {
-
- private final AlertInfoService alertInfoService;
-
- public AxleMonitoringTask(AlertInfoService alertInfoService) {
-
- this.alertInfoService = alertInfoService;
- }
-
- private final AlertManager alertManager = AlertManager.getDefault();
-
-
- @Override
- public String getName() {
- return "BULE_DISPLAY";
- }
-
- private final String ALL_BULE_DISPLAY_NAME = "ALL_BULE_DISPLAY";
-
- private Map findRtuDeviceSource(String lineIdStr) {
- DeviceStatusData deviceStatusData = DeviceDataRepository.findDataSouce(lineIdStr, DataTypeEnum.DEVICE);
- if (deviceStatusData.getAllDeviceMap().isEmpty()) {
- return Collections.emptyMap();
- }
- Map builderMap = deviceStatusData.getAllDeviceMap().get(Rtu.getDescriptor().getName());
- if (CollectionUtils.isEmpty(builderMap)) {
- return Collections.emptyMap();
- }
- return builderMap;
- }
-
- private List findRtuBuild(Integer lineId, Map builderMap) {
- List collectRtuList2 = Lists.newArrayList();
- List allRtuArea = this.alertInfoService.findDevice2(AlertType.BLUE_DISPLAY, AlertDeviceType.DEVICE_TYPE_RTU, lineId);
- for (AreaConfigVO areaConfigVO : allRtuArea) {
- for (Integer data : areaConfigVO.getDatas()) {
- Station station = LineGraphicDataRepository.getDeviceByCode(lineId, data.toString(), Station.class);
- Rtu.Builder rtuBuild = (Rtu.Builder) builderMap.get(station.getCode());
- collectRtuList2.add(new RtuWarnVO(rtuBuild, station, areaConfigVO));
- }
- }
- return collectRtuList2;
- }
-
- @Override
- public void run() {
- Set allLineSet = DeviceDataRepository.getAllLines();
- for (String lineIdStr : allLineSet) {
- Integer lineId = Integer.parseInt(lineIdStr);
- Map builderMap = this.findRtuDeviceSource(lineIdStr);
- List collectRtuList = this.findRtuBuild(lineId, builderMap);
- Map> rtuVOMapList = collectRtuList.stream().collect(Collectors.groupingBy(d -> d.areaConfigVO.getId()));
- int interLockCount = rtuVOMapList.keySet().size();
- List allShutdownList = rtuVOMapList.values().stream().map(Collection::stream).map(ls -> ls.anyMatch(r -> Objects.nonNull(r.rtu) && r.rtu.getIpRtuStusDown())).toList();
- if (allShutdownList.size() == interLockCount && allShutdownList.stream().allMatch(d -> d)) {
- if (alertManager.putAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All")) {
-
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(null, AlertType.ALL_LINE_BLUE_DISPLAY, lineId, LocalDateTime.now(), "全线蓝线", null,
- AlertDeviceType.DEVICE_TYPE_RTU, false);
- alertManager.emit(alertInfo);
- }
- } else {
- for (List rwvVOist : rtuVOMapList.values()) {
- Optional rwVO = rwvVOist.stream().filter(d -> Objects.nonNull(d.rtu) && d.rtu.getIpRtuStusDown()).findAny();
- if (rwVO.isPresent()) {
- RtuWarnVO rtuVO = rwVO.get();
- if (alertManager.putAlterDevice(lineId, this.getName(), rtuVO.areaConfigVO.getAreaName())) {
- String alertInfoMostName = rtuVO.areaConfigVO.getAreaName();
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(rtuVO.areaConfigVO.getId(), AlertType.BLUE_DISPLAY, rtuVO.rtu, alertInfoMostName,
- rtuVO.station.getCommon().getId(),
- AlertDeviceType.DEVICE_TYPE_RTU, false);
- alertManager.emit(alertInfo);
- }
- } else {
- alertManager.removeAlterDevice(lineId, this.getName(), rwvVOist.get(0).areaConfigVO.getAreaName());
- alertManager.removeAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All");
- }
- }
- }
- }
- }
-
-
- @Getter
- public static class RtuWarnVO {
-
- Rtu.Builder rtu;
- Station station;
- AreaConfigVO areaConfigVO;
-
- public RtuWarnVO(Rtu.Builder rtu, Station station, AreaConfigVO areaConfigVO) {
- this.rtu = rtu;
- this.station = station;
- this.areaConfigVO = areaConfigVO;
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedAlertListener.java
deleted file mode 100644
index 3ee8726..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedAlertListener.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertSourceEventListener;
-import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.message.collect.DeviceStatusDataOperate;
-import club.joylink.xiannccda.ats.message.collect.datasource.TrainDataSource;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedAlertListener.SwitchAndTrackLedAlertEvent;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedMostAlertListener.SwitchAndTrackLedMostAlertEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Track;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.CommonInfo;
-import club.joylink.xiannccda.service.AlertInfoService;
-import com.google.protobuf.GeneratedMessageV3;
-import com.google.protobuf.GeneratedMessageV3.Builder;
-import com.google.protobuf.MessageOrBuilder;
-import java.util.Objects;
-import java.util.Optional;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-
-
-//@Component
-@Deprecated
-@Slf4j
-public class AxleSwitchTrackLedAlertListener implements AlertSourceEventListener {
-
- private final AlertInfoService alertInfoService;
- private final AlertManager alertManager = AlertManager.getDefault();
-
- public AxleSwitchTrackLedAlertListener(AlertInfoService alertInfoService) {
- this.alertInfoService = alertInfoService;
- }
-
- private String getDefaultName(AlertType alertType, Integer lineId, Integer rtuId) {
- return String.format("%s-%s-%s", alertType.name(), lineId, rtuId);
- }
-
- @Override
- public void accept(SwitchAndTrackLedAlertEvent event) {
- GeneratedMessageV3.Builder o = event.getSource();
- String receiveBuildType = o.getDescriptorForType().getName();
- Integer lineId = DeviceStatusDataOperate.findFieldVal(o, "lineId", Integer.class);
- String id = DeviceStatusDataOperate.findFieldVal(o, "id", String.class);
- log.info("区段光带检测 线路[{}] 设备[{}] 接受类型[{}]", lineId, id, receiveBuildType);
- /* MessageOrBuilder section;
-
- // 考虑 可能 光带道岔可能会传道轨的code 也就是PT开头,先保留
- if (o instanceof Switch.Builder) {
- if (StringUtils.startsWith(id, "DG")) {
- section = LineGraphicDataRepository.getDeviceByCode(lineId, id);
- MessageOrBuilder mm = LineGraphicDataRepository.getDeviceByCode(lineId, "31");
- System.out.println(mm);
- } else {
- String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(lineId, id);
- if (StringUtils.isEmpty(sectionCode)) {
- return;
- }
- section = LineGraphicDataRepository.getDeviceByCode(lineId, sectionCode);
- }
- } else {
- section = LineGraphicDataRepository.getDeviceByCode(lineId, id);
- }*/
-
- String sectionCode = LineGraphicDataRepository.findSectionFromLogicCode(lineId, id);
- if (StringUtils.isEmpty(sectionCode)) {
- return;
- }
- MessageOrBuilder section = LineGraphicDataRepository.getDeviceByCode(lineId, sectionCode);
- TrainDataSource trainDataSource = DeviceDataRepository.findDataSouce(lineId.toString(), DataTypeEnum.TRAIN);
- String trainGroupId = trainDataSource.findTrainForDeviceName(id);
- if (o instanceof Switch.Builder switchBuilder) {
- this.switchHandle(switchBuilder, trainGroupId, section);
- } else if (o instanceof Track.Builder trackBuilder) {
- this.trackHandle(trackBuilder, trainGroupId, section);
- }
- }
-
-
- private void switchHandle(Switch.Builder switchBuilder, String trainGroupId, MessageOrBuilder section) {
- boolean ledRed = switchBuilder.getIpSingleSwitchStusCiOccupied() && !switchBuilder.getIpSingleSwitchStusCbtcOccupied() && Objects.isNull(trainGroupId);
- boolean orange = switchBuilder.getIpSingleSwitchStusAtcInvalid();
- log.info("区段光带 道轨区段 线路[{}] 区段[{}] 红光带占用[{}] 橙光带占用[{}]", switchBuilder.getLineId(), switchBuilder.getId(), ledRed, orange);
- this.emit(ledRed, switchBuilder, section, AlertType.AXLE_LED_RED);
- this.emit(orange, switchBuilder, section, AlertType.AXLE_LED_ORANGE);
- }
-
- private void trackHandle(Track.Builder trackBuild, String trainGroupId, MessageOrBuilder section) {
- boolean ledRed = trackBuild.getCiOccupied() && !trackBuild.getCbtcOccupied() && Objects.isNull(trainGroupId);
- boolean orange = trackBuild.getAtcInvalid();
- log.info("区段光带 区段 线路[{}] 区段[{}] 红光带占用[{}] 橙光带占用[{}]", trackBuild.getLineId(), trackBuild.getId(), ledRed, orange);
- this.emit(ledRed, trackBuild, section, AlertType.AXLE_LED_RED);
- this.emit(orange, trackBuild, section, AlertType.AXLE_LED_ORANGE);
- }
-
- private void emit(boolean light, Builder build, MessageOrBuilder turnoutOrLogicSection, AlertType alertType) {
- Integer lineId = DeviceStatusDataOperate.findFieldVal(build, "lineId", Integer.class);
- Integer rtuId = DeviceStatusDataOperate.findFieldVal(build, "rtuId", Integer.class);
- String deviceCodeId = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "code", String.class);
- CommonInfo commonInfo = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "common", CommonInfo.class);
- Integer layoutDeviceId = commonInfo.getId();
- String ledName = alertType == AlertType.AXLE_LED_RED ? "红光带" : "橙光带";
- String ledPutName = this.getDefaultName(alertType, lineId, rtuId);
- if (light) {
- log.info("光带检测到[{}] 线路[{}] 设备[{}] 告警[{}]", ledName, lineId, deviceCodeId, alertType.name());
- if (alertManager.putAlterDevice(lineId, ledPutName, deviceCodeId)) {
- String alertMsg = String.format("出现%s设备[%s]", ledName, deviceCodeId);
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), alertType, build, alertMsg, String.valueOf(layoutDeviceId), AlertDeviceType.DEVICE_TYPE_TRACK, false);
- alertManager.emit(alertInfo);
- alertManager.emit(new SwitchAndTrackLedMostAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true));
-// alertManager.emit(new SwitchAndTrackLedInterLockL2AlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true, rtuId));
-// alertManager.emit(new SwitchAndTrackLedInterlockAreaAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, true));
- }
- } else {
- alertManager.removeAlterDevice(lineId, ledPutName, deviceCodeId);
- alertManager.emit(new SwitchAndTrackLedMostAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false));
-// alertManager.emit(new SwitchAndTrackLedInterLockL2AlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false, rtuId));
-// alertManager.emit(new SwitchAndTrackLedInterlockAreaAlertEvent(build, alertType, lineId, layoutDeviceId, deviceCodeId, false));
-
- }
- }
-
- public static class SwitchAndTrackLedAlertEvent extends DeviceAlertEvent {
-
- public SwitchAndTrackLedAlertEvent(Builder source) {
- super(source);
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedMostAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedMostAlertListener.java
deleted file mode 100644
index 7fe181c..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/AxleSwitchTrackLedMostAlertListener.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertSourceEventListener;
-import club.joylink.xiannccda.ats.warn.AxleSwitchTrackLedMostAlertListener.SwitchAndTrackLedMostAlertEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.GuardConfigProto.GuardConfig;
-import club.joylink.xiannccda.service.AlertInfoService;
-import club.joylink.xiannccda.service.config.DeviceGuardConfigService;
-import club.joylink.xiannccda.vo.AreaConfigVO;
-import com.google.protobuf.GeneratedMessageV3.Builder;
-import java.util.Optional;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-
-
-@Component
-@Slf4j
-public class AxleSwitchTrackLedMostAlertListener implements AlertSourceEventListener {
-
-
- private final DeviceGuardConfigService configService;
- private final AlertInfoService alertInfoService;
- private final AlertManager alertManager = AlertManager.getDefault();
-
- public AxleSwitchTrackLedMostAlertListener(DeviceGuardConfigService configService, AlertInfoService alertInfoService) {
- this.configService = configService;
- this.alertInfoService = alertInfoService;
- }
-
-
- @Override
- public void accept(SwitchAndTrackLedMostAlertEvent event) {
- int lineId = event.lineId;
- AlertType mostType = event.alertType == AlertType.AXLE_LED_RED ? AlertType.AXLE_LED_RED_MOST : AlertType.AXLE_LED_ORANGE_MOST;
- Optional alertInfoMostOptional = this.alertInfoService.findAreaDevice(mostType, AlertDeviceType.DEVICE_TYPE_TRACK, event.layoutDeviceId, lineId);
- String alertInfoMostName = alertInfoMostOptional.map(AreaConfigVO::getAreaName).orElse(null);
- String newName = StringUtils.isNotEmpty(alertInfoMostName) ? String.format("%s-%s", mostType.name(), alertInfoMostName) : null;
- if (StringUtils.isEmpty(newName)) {
- log.info("线路[{}] 大面积[{}] 设备[{}] 未找到对应的区域配置", lineId, mostType.name(), event.realDeviceCodeId);
- return;
- }
- if (event.alert) {
- GuardConfig guardConfig = configService.getGuardConfig(lineId);
- int overNums = guardConfig.getRedLedMostNums();
- if (mostType == AlertType.AXLE_LED_ORANGE_MOST) {
- overNums = guardConfig.getOrangeLedMostNums();
- }
- boolean isMost = alertManager.needMostShow(lineId, newName, overNums);
- alertManager.putAlterDevice(lineId, newName, event.realDeviceCodeId);
- if (!isMost && alertManager.needMostShow(lineId, newName, overNums)) {
- String ledName = event.alertType == AlertType.AXLE_LED_RED ? "红光带" : "橙光带";
- String warnDevices = alertManager.findAllWarnDevice(lineId, newName);
- String alertMsg = String.format("%s-出现大面积%s设备[%s]", alertInfoMostOptional.get().getAreaName(), ledName, warnDevices);
- NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(alertInfoMostOptional, mostType, event.getSource(), alertMsg, null, AlertDeviceType.DEVICE_TYPE_TRACK, false);
- alertManager.emit(alertInfoMost);
- }
- } else {
- alertManager.removeAlterDevice(lineId, newName, event.realDeviceCodeId);
- }
- }
-
- public static class SwitchAndTrackLedMostAlertEvent extends DeviceAlertEvent {
-
- private AlertType alertType;
- private int lineId;
- private Integer layoutDeviceId;
- private boolean alert;
- private String realDeviceCodeId;
-
- public SwitchAndTrackLedMostAlertEvent(Builder source, AlertType alertType, int lineId, Integer layoutDeviceId, String realDeviceCodeId, boolean alert) {
- super(source);
- this.alertType = alertType;
- this.lineId = lineId;
- this.layoutDeviceId = layoutDeviceId;
- this.alert = alert;
- this.realDeviceCodeId = realDeviceCodeId;
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/BlueAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/BlueAlertListener.java
deleted file mode 100644
index 5454199..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/BlueAlertListener.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertSourceEventListener;
-import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
-import club.joylink.xiannccda.ats.warn.AllLineBlueAlertListener.AllLineBlueDisplayAlertEvent;
-import club.joylink.xiannccda.ats.warn.BlueAlertListener.BlueDisplayAlertEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu.Builder;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Station;
-import club.joylink.xiannccda.service.AlertInfoService;
-import club.joylink.xiannccda.vo.AreaConfigVO;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.google.common.base.Strings;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-
-//@Component
-@Slf4j
-@Deprecated
-public class BlueAlertListener implements AlertSourceEventListener {
-
-
- @Autowired
- private AlertInfoService alertInfoService;
- protected final static String BLUE_DISPLAY_NAME = Rtu.getDescriptor().getName();
- protected final static String ALL_BLUE_DISPLAY_VAL_FLAG = "全线蓝显";
- private final static AlertManager alertManager = AlertManager.getDefault();
-
- /**
- * 集中站集合
- *
- * key= 线路id, val=集中站
- */
- private final static Map> CONTROL_STATION_MAPER = new ConcurrentHashMap<>();
-
-
- @Override
- public void accept(BlueDisplayAlertEvent event) {
- Rtu.Builder rtu = event.getSource();
- Station station = findAllStation(rtu.getLineId(), rtu.getId());
- if (Objects.isNull(station)) {
- log.error("rtuId[{}] 未找到对应的集中站数据", rtu.getId());
- return;
- }
- if (rtu.getIpRtuStusDown()) {
- log.info("线路[{}] 车站[{}] rtu[{}] 通信中断", rtu.getLineId(), station.getName(), rtu.getId());
- //保存蓝显联锁id
- if (alertManager.putAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, rtu.getId())) {
- Optional alertInfoMostOptional = this.alertInfoService.findAreaDevice(AlertType.BLUE_DISPLAY, AlertDeviceType.DEVICE_TYPE_RTU, station.getCommon().getId(), rtu.getLineId());
- String alertInfoMostName = alertInfoMostOptional.map(AreaConfigVO::getAreaName).orElse(String.format("%s 集中站中断连接 ", station.getName()));
- int allControlStationSize = CONTROL_STATION_MAPER.get(rtu.getLineId()).size();
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), AlertType.BLUE_DISPLAY, rtu, alertInfoMostName, String.valueOf(station.getCommon().getId()),
- AlertDeviceType.DEVICE_TYPE_RTU,
- false);
- alertManager.emit(alertInfo);
- alertManager.emit(new AllLineBlueDisplayAlertEvent(rtu, station, allControlStationSize));
- }
- } else {
- alertManager.removeAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, rtu.getId());
- alertManager.removeAlterDevice(rtu.getLineId(), BLUE_DISPLAY_NAME, ALL_BLUE_DISPLAY_VAL_FLAG);
- }
- }
-
- private static synchronized Station findAllStation(int lineId, String rtuId) {
- if (CollectionUtils.isEmpty(CONTROL_STATION_MAPER)) {
- Stream stream = LineGraphicDataRepository.getDevices(lineId, Station.class);
- Collection stationList = stream.filter(Station::getConcentrationStations)
- .collect(Collectors.toMap(d -> d.getCommon().getId(), Function.identity(), (o1, o2) -> o2)).values();
- CONTROL_STATION_MAPER.put(lineId, new ArrayList<>(stationList));
- }
- List stationList = CONTROL_STATION_MAPER.get(lineId);
- if (CollectionUtils.isEmpty(stationList)) {
- return null;
- }
- String rtuName = Strings.padStart(rtuId, 2, '0');
- Optional optionalStation = stationList.stream().filter(d -> StringUtils.equalsIgnoreCase(d.getCode(), rtuName)).findAny();
- return optionalStation.orElse(null);
- }
-
- public static class BlueDisplayAlertEvent extends DeviceAlertEvent {
-
- public BlueDisplayAlertEvent(Builder source) {
- super(source);
- }
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/PlatformAlertMonitoringTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/PlatformAlertMonitoringTask.java
index 0c64ee4..9658e80 100644
--- a/src/main/java/club/joylink/xiannccda/ats/warn/PlatformAlertMonitoringTask.java
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/PlatformAlertMonitoringTask.java
@@ -1,6 +1,7 @@
package club.joylink.xiannccda.ats.warn;
import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.alert.core.AlertMonitoringTask;
@@ -9,6 +10,7 @@ import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository;
import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
import club.joylink.xiannccda.ats.message.collect.datasource.DeviceStatusData;
import club.joylink.xiannccda.ats.message.collect.datasource.InUsedScheduleData;
+import club.joylink.xiannccda.ats.message.collect.datasource.InterLockData;
import club.joylink.xiannccda.ats.message.line3.changer.DeviceNameChangerManage;
import club.joylink.xiannccda.ats.message.line3.device.DeviceType;
import club.joylink.xiannccda.ats.message.line3.rep.TrainRecordResponse.DirectionEnum;
@@ -52,6 +54,7 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
}
private final AlertManager alertManager = AlertManager.getDefault();
+ private final AlertDataSource alertDataSource = AlertDataSource.getInstance();
private final Map trainRecordMap = new ConcurrentHashMap<>();
@@ -68,8 +71,8 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
Platform.Builder platformBuild = this.parsePlatform(trainRecord, isUpWay);
if (Objects.nonNull(platformBuild)) {
int lineId = trainRecord.getLineId();
- alertManager.removeAlterDevice(lineId, PLATFORM_IS_OPEN, platformBuild.getId());
- alertManager.removeAlterDevice(lineId, PLATFORM_IS_CLOSE, platformBuild.getId());
+ alertDataSource.removeAlterDevice(lineId, PLATFORM_IS_OPEN, platformBuild.getId());
+ alertDataSource.removeAlterDevice(lineId, PLATFORM_IS_CLOSE, platformBuild.getId());
}
}
@@ -125,10 +128,10 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
platformBuild.getReceiveTime(), planBuild.getATime(),
planBuild.getDTime(), isOpen, isClose, stayTimeSecond);
if (!isOpen && platformBuild.getTrainberth() && platformBuild.getPsdOpen()) {
- alertManager.putAlterDevice(platformBuild.getLineId(), PLATFORM_IS_OPEN, platformBuild.getId());
+ alertDataSource.putAlterDevice(platformBuild.getLineId(), PLATFORM_IS_OPEN, platformBuild.getId());
} else if (isOpen && Objects.equals(false, platformBuild.getPsdOpen())) {
//开门后,在阈值内关门
- alertManager.putAlterDevice(platformBuild.getLineId(), PLATFORM_IS_CLOSE, platformBuild.getId());
+ alertDataSource.putAlterDevice(platformBuild.getLineId(), PLATFORM_IS_CLOSE, platformBuild.getId());
} else if (isOpen /*&& !isClose*/ && this.timeOver(platformBuild.getReceiveTime(), (int) stayTimeSecond + guardConfig.getCanNotCloseTimes())) {
//车辆停靠,只开门 超过等待时间+阈值时间
this.alert(platformBuild, AlertType.PLATFORM_DOOR_CANNOT_CLOSE, PLATFORM_IS_CLOSE, isUpWay, record);
@@ -140,7 +143,7 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
private void alert(Platform.Builder platformBuild, AlertType alertType, String customName, boolean isUpWay, TrainRecord.Builder record) {
int lineId = platformBuild.getLineId();
- boolean alertAdd = alertManager.putAlterDevice(lineId, customName, platformBuild.getId());
+ boolean alertAdd = alertDataSource.putAlterDevice(lineId, customName, platformBuild.getId());
if (alertAdd) {
log.info("列车开关门是否已经报警检测,线路[{}] 列车表号[{}] 列车车次号[{}] 车站id[{}] 站台门id[{}] 上下行[{}] 解析屏蔽门code[{}],接收时间[{}], 告警类型[{}] 告警名称[{}]",
record.getLineId(), record.getTrainId(), record.getGlobalId(), record.getStationId(), record.getSideId(), isUpWay, platformBuild.getId(), platformBuild.getReceiveTime(), alertType,
@@ -185,8 +188,8 @@ public class PlatformAlertMonitoringTask implements AlertMonitoringTask {
}
Plan.Builder planBuild = planBuildOpt.get();
- boolean isOpen = alertManager.deviceIsExist(lineId, PLATFORM_IS_OPEN, platformBuild.getId());
- boolean isClose = alertManager.deviceIsExist(lineId, PLATFORM_IS_CLOSE, platformBuild.getId());
+ boolean isOpen = alertDataSource.deviceIsExist(lineId, PLATFORM_IS_OPEN, platformBuild.getId());
+ boolean isClose = alertDataSource.deviceIsExist(lineId, PLATFORM_IS_CLOSE, platformBuild.getId());
if (isOpen && isClose && Objects.equals(false, platformBuild.getTrainberth())) {
if (log.isDebugEnabled()) {
log.info(
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchAndLedInterlockTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchAndLedInterlockTask.java
deleted file mode 100644
index 15a05cc..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchAndLedInterlockTask.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertMonitoringTask;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository;
-import club.joylink.xiannccda.ats.message.collect.DeviceDataRepository.DataTypeEnum;
-import club.joylink.xiannccda.ats.message.collect.datasource.InterLockData;
-import club.joylink.xiannccda.ats.message.collect.datasource.InterLockData.InterLockDetail;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.service.AlertInfoService;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.springframework.stereotype.Component;
-
-@Component
-public class SwitchAndLedInterlockTask implements AlertMonitoringTask {
-
- private final AlertManager alertManager = AlertManager.getDefault();
- private final AlertInfoService alertInfoService;
-
- public SwitchAndLedInterlockTask(AlertInfoService alertInfoService) {
- this.alertInfoService = alertInfoService;
- }
-
- @Override
- public String getName() {
- return AlertType.INTERLOCK_LEVEL_ONE.name();
- }
-
- private String getDefaultName(AlertType alertType, Integer lineId, Integer rtuId) {
- return String.format("%s-%s-%s", alertType.name(), lineId, rtuId);
- }
-
- @Override
- public void run() {
- Set lineCollSet = DeviceDataRepository.getAllLines();
- if (CollectionUtils.isEmpty(lineCollSet)) {
- return;
- }
- for (String lineId : lineCollSet) {
- InterLockData interLockData = DeviceDataRepository.findDataSouce(String.valueOf(lineId), DataTypeEnum.INTER_LOCK);
- Integer lineIdInt = Integer.parseInt(lineId);
-
- List interlockOneList = interLockData.findKeysStart(AlertType.INTERLOCK_LEVEL_ONE.name());
- for (String interlockLevel : interlockOneList) {
- Map detailMap = interLockData.getDetailByInterlockKey(interlockLevel);
- for (InterLockDetail detail : detailMap.values()) {
- /*if (StringUtils.endsWith(interlockLevel, AlertDeviceType.DEVICE_TYPE_SWITCH.name())) {
- int total = this.handle2(AlertType.SWITCH_LOST, lineIdInt, detail.getRtuId());
- this.validateAlert(detail, total, AlertType.SWITCH_LOST_INTERLOCK_AREA, AlertDeviceType.DEVICE_TYPE_SWITCH, lineIdInt);
- } else*/
- if (StringUtils.endsWith(interlockLevel, AlertDeviceType.DEVICE_TYPE_TRACK.name())) {
- int redTotal = this.handle2(AlertType.AXLE_LED_RED, lineIdInt, detail.getRtuId());
- int orangeTotal = this.handle2(AlertType.AXLE_LED_ORANGE, lineIdInt, detail.getRtuId());
- this.validateAlert(detail, redTotal, AlertType.AXLE_LED_RED_INTERLOCK_AREA, AlertDeviceType.DEVICE_TYPE_TRACK, lineIdInt);
- this.validateAlert(detail, orangeTotal, AlertType.AXLE_LED_ORANGE_INTERLOCK_AREA, AlertDeviceType.DEVICE_TYPE_TRACK, lineIdInt);
- }
- }
- }
- }
- }
-
- private void validateAlert(InterLockDetail detail, int total, AlertType alertType, AlertDeviceType deviceType, Integer lineId) {
- String customName = String.format("%s-%s", alertType.name(), detail.getAreaConfigId());
- if (total >= detail.getDevices().size()) {
- if (alertManager.putAlterDevice(lineId, customName, alertType.name())) {
- NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(detail.getAreaConfigId(), alertType, lineId, LocalDateTime.now(), detail.getAreaConfigName(), null, deviceType,
- false);
- alertManager.emit(alertInfoMost);
- }
- } else {
- alertManager.removeAlterDevice(lineId, customName, alertType.name());
- }
- }
-
- private int handle2(AlertType alertType, Integer lineId, Integer rtuId) {
- String name = this.getDefaultName(alertType, lineId, rtuId);
- List tmpList = alertManager.findAllWarnDeviceForList(lineId, name);
- return tmpList.size();
-
- }
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask.java
deleted file mode 100644
index 94276dd..0000000
--- a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package club.joylink.xiannccda.ats.warn;
-
-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.AlertMonitoringTask;
-import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
-import club.joylink.xiannccda.ats.warn.SwitchLostMostAlertListener.SwitchLostMostEvent;
-import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch;
-import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Switch.Builder;
-import club.joylink.xiannccda.dto.protos.GuardConfigProto.GuardConfig;
-import club.joylink.xiannccda.dto.protos.LayoutGraphicsProto.Turnout;
-import club.joylink.xiannccda.service.AlertInfoService;
-import club.joylink.xiannccda.service.config.DeviceGuardConfigService;
-import com.google.protobuf.MessageOrBuilder;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedDeque;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ConcurrentSkipListSet;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-//@Component
-@Slf4j
-@Deprecated
-public class SwitchLostAlertMonitoringTask implements AlertMonitoringTask {
-
- private DeviceGuardConfigService configService;
-
- private AlertInfoService alertInfoService;
-
- public SwitchLostAlertMonitoringTask(DeviceGuardConfigService configService, AlertInfoService alertInfoService) {
-
- this.configService = configService;
- this.alertInfoService = alertInfoService;
- }
-
-
- private final AlertManager alertManager = AlertManager.getDefault();
-
- private final Map deviceMap = new ConcurrentHashMap<>();
-
- public void putSwitchIfNotExist(Switch.Builder switchBuilder) {
- /*if (!deviceMap.containsKey(switchBuilder.getId())) {
- deviceMap.put(switchBuilder.getId(), switchBuilder);
- log.info("线路[{}] 道岔[{}] 添加到道岔失表监控中... 设备状态参数[{}]", switchBuilder.getLineId(), switchBuilder.getId(), switchBuilder.getIpSingleSwitchStusLostIndication());
- }*/
- deviceMap.put(switchBuilder.getId(), switchBuilder);
- log.info("线路[{}] 道岔[{}] 添加到道岔失表监控中... 设备状态参数[{}]", switchBuilder.getLineId(), switchBuilder.getId(), switchBuilder.getIpSingleSwitchStusLostIndication());
- }
-
- public void removeSwitch(Switch.Builder switchBuilder) {
- String switchPutName = this.getDefaultName(AlertType.SWITCH_LOST, switchBuilder.getLineId(), switchBuilder.getRtuId());
- log.info("线路[{}] 道岔[{}] 从监控中移除... 设备状态参数[{}]", switchBuilder.getLineId(), switchBuilder.getId(), switchBuilder);
- deviceMap.remove(switchBuilder.getId());
- alertManager.removeAlterDevice(switchBuilder.getLineId(), switchPutName, switchBuilder.getId());
-
- MessageOrBuilder turnoutBuild = LineGraphicDataRepository.getDeviceByCodeNotException(switchBuilder.getLineId(), switchBuilder.getId());
- if (Objects.nonNull(turnoutBuild) && turnoutBuild instanceof Turnout turnout) {
- //大面积失表移除
- alertManager.emit(new SwitchLostMostEvent(switchBuilder, false, turnout));
- }
- }
-
- @Override
- public String getName() {
- return "SWITCH_LOST_ALTER";
- }
-
- private String getDefaultName(AlertType alertType, Integer lineId, Integer rtuId) {
- return String.format("%s-%s-%s", alertType.name(), lineId, rtuId);
- }
-
- private void checkDevice(Builder savedSwitchBuild) {
- int lineId = savedSwitchBuild.getLineId();
- Turnout turnout = LineGraphicDataRepository.getDeviceByCode(lineId, savedSwitchBuild.getId(), Turnout.class);
- GuardConfig guardConfig = configService.getGuardConfig(lineId);
- boolean saveIsLost = savedSwitchBuild.getIpSingleSwitchStusLostIndication();
- boolean timeOver = this.timeOver(savedSwitchBuild.getReceiveTime(), guardConfig.getSwitchLostTimes());
- String switchPutName = this.getDefaultName(AlertType.SWITCH_LOST, lineId, savedSwitchBuild.getRtuId());
- if (saveIsLost && timeOver) {
- log.info("道岔失表超时,准备报警 线路[{}] 设备[{}] 接受时间[{}] 发送时间[{}] 对应地图设备id[{}]"
- , lineId, savedSwitchBuild.getId(), savedSwitchBuild.getReceiveTime(), savedSwitchBuild.getTimestamp(), turnout.getCommon().getId());
- //失表超时
- if (alertManager.putAlterDevice(lineId, switchPutName, savedSwitchBuild.getId())) {
- String alertMsg = String.format("设备[%s]失表", savedSwitchBuild.getId());
- NccAlertInfo alertInfo = this.alertInfoService.createAlert2(Optional.empty(), AlertType.SWITCH_LOST, savedSwitchBuild, alertMsg, String.valueOf(turnout.getCommon().getId()),
- AlertDeviceType.DEVICE_TYPE_SWITCH, false);
- alertManager.emit(alertInfo);
- alertManager.emit(new SwitchLostMostEvent(savedSwitchBuild, true, turnout));
-// alertManager.emit(new SwitchLostMostInterLockL2Event(savedSwitchBuild, true, turnout));
- }
- this.deviceMap.remove(savedSwitchBuild.getId());
- } else if (!saveIsLost) {
- this.removeSwitch(savedSwitchBuild);
- }
- }
-
- @Override
- public void run() {
- for (Builder savedSwitchBuild : this.deviceMap.values()) {
-// log.info("道岔失表检测 线路[{}] 设备[{}] 查找对应的地图道岔id[{}]", lineId, savedSwitchBuild.getId(), turnout.getCommon().getId());
- this.checkDevice(savedSwitchBuild);
- }
- }
-
-
-}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask2.java b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask2.java
index a9402e6..123bc80 100644
--- a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask2.java
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostAlertMonitoringTask2.java
@@ -1,6 +1,7 @@
package club.joylink.xiannccda.ats.warn;
import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.alert.core.AlertMonitoringTask;
@@ -45,6 +46,7 @@ public class SwitchLostAlertMonitoringTask2 implements AlertMonitoringTask {
private final AlertManager alertManager = AlertManager.getDefault();
+ private final AlertDataSource alertDataSource = AlertDataSource.getInstance();
private final Map deviceCodeMap = new ConcurrentHashMap<>();
@@ -59,7 +61,7 @@ public class SwitchLostAlertMonitoringTask2 implements AlertMonitoringTask {
String switchPutName = this.getDefaultName(AlertType.SWITCH_LOST, switchBuilder.getLineId(), switchBuilder.getRtuId());
log.info("线路[{}] 道岔[{}] 从监控中移除... 设备状态参数[{}]", switchBuilder.getLineId(), switchBuilder.getId(), switchBuilder);
deviceCodeMap.remove(switchBuilder.getId());
- alertManager.removeAlterDevice(switchBuilder.getLineId(), switchPutName, switchBuilder.getId());
+ alertDataSource.removeAlterDevice(switchBuilder.getLineId(), switchPutName, switchBuilder.getId());
Optional turnoutOpt = LineGraphicDataRepository.getDeviceOptByCode(switchBuilder.getLineId(), switchBuilder.getId(), Turnout.class);
Turnout turnout = turnoutOpt.orElse(null);
@@ -103,7 +105,7 @@ public class SwitchLostAlertMonitoringTask2 implements AlertMonitoringTask {
String switchPutName = this.getDefaultName(AlertType.SWITCH_LOST, lineId, switchBuild.getRtuId());
if (saveIsLost && timeOver) {
//失表超时
- if (alertManager.putAlterDevice(lineId, switchPutName, switchBuild.getId())) {
+ if (alertDataSource.putAlterDevice(lineId, switchPutName, switchBuild.getId())) {
log.info("道岔失表超时,准备报警 线路[{}] 设备[{}] 接受时间[{}] 发送时间[{}] 对应地图设备id[{}]"
, lineId, switchBuild.getId(), switchBuild.getReceiveTime(), switchBuild.getTimestamp(), turnout.getCommon().getId());
String alertMsg = String.format("设备[%s]失表", switchBuild.getId());
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostMostAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostMostAlertListener.java
index eec767f..d4eae47 100644
--- a/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostMostAlertListener.java
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/SwitchLostMostAlertListener.java
@@ -1,6 +1,7 @@
package club.joylink.xiannccda.ats.warn;
import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.alert.core.AlertSourceEventListener;
@@ -35,6 +36,7 @@ public class SwitchLostMostAlertListener implements AlertSourceEventListener findDeviceIdFormCode(Integer lineId, List deviceCodes) {
List list = Lists.newArrayList();
@@ -62,18 +64,18 @@ public class SwitchLostMostAlertListener implements AlertSourceEventListener trainInfoMap = new ConcurrentHashMap<>();
@@ -69,7 +70,7 @@ public class TrainAtpCutAlertMonitoringTask implements AlertMonitoringTask {
public void recoverAtpCut(TrainInfo.Builder train) {
if (trainInfoMap.containsKey(train.getGroupId())) {
//之前发生过紧制
- boolean exist = alertManager.deviceIsExist(train.getLineId(), this.getName(), train.getGroupId());
+ boolean exist = alertDataSource.deviceIsExist(train.getLineId(), this.getName(), train.getGroupId());
if (exist) {
//判断之前是否发生过atp切除
this.removeTrainInfo(train.getLineId(), train.getGroupId());
@@ -85,7 +86,7 @@ public class TrainAtpCutAlertMonitoringTask implements AlertMonitoringTask {
private void removeTrainInfo(int lineId, String trainGroupId) {
this.trainInfoMap.remove(trainGroupId);
- alertManager.removeAlterDevice(lineId, this.getName(), trainGroupId);
+ alertDataSource.removeAlterDevice(lineId, this.getName(), trainGroupId);
}
@Override
@@ -103,7 +104,7 @@ public class TrainAtpCutAlertMonitoringTask implements AlertMonitoringTask {
CommonInfo commonInfo = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "common", CommonInfo.class);
String deviceCode = DeviceStatusDataOperate.findFieldVal(turnoutOrLogicSection, "code", String.class);
Integer layoutDeviceId = commonInfo.getId();
- if (alertManager.putAlterDevice(trainInfo.getLineId(), this.getName(), trainInfo.getGroupId())) {
+ if (alertDataSource.putAlterDevice(trainInfo.getLineId(), this.getName(), trainInfo.getGroupId())) {
log.info("列车紧制ATP检测告警 线路[{}] 列车车组号[{}] 所在设备[{}]", trainInfo.getLineId(), trainInfo.getGroupId(), trainInfo.getDevName());
String alertMsg = String.format("列车[%s] 紧制导致ATP切除所在区段[%s]", trainInfo.getGroupId(), deviceCode);
NccAlertInfo alertInfo = this.alertInfoService.createAlert(AlertType.TRAIN_EB_ATP, AlertDeviceType.DEVICE_TYPE_TRACK, layoutDeviceId, trainInfo, alertMsg,
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/TrainReacrdAlertListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/TrainReacrdAlertListener.java
index d11d76b..d58650b 100644
--- a/src/main/java/club/joylink/xiannccda/ats/warn/TrainReacrdAlertListener.java
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/TrainReacrdAlertListener.java
@@ -1,14 +1,10 @@
package club.joylink.xiannccda.ats.warn;
import club.joylink.xiannccda.alert.core.AlertSourceEventListener;
-import club.joylink.xiannccda.ats.message.line3.changer.DeviceNameChangerManage;
-import club.joylink.xiannccda.ats.message.line3.device.DeviceType;
import club.joylink.xiannccda.ats.message.line3.rep.TrainRecordResponse.DirectionEnum;
-import club.joylink.xiannccda.ats.message.line3.rep.TrainRecordResponse.TrainTypeEnum;
import club.joylink.xiannccda.ats.warn.TrainReacrdAlertListener.TrainRecordAlertEvent;
import club.joylink.xiannccda.configuration.pros.OccNotHandlePros;
import club.joylink.xiannccda.dto.protos.TrainProto.TrainRecord;
-import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -29,7 +25,7 @@ public class TrainReacrdAlertListener implements AlertSourceEventListener lineCollSet = DeviceDataRepository.getAllLines();
+ if (CollectionUtils.isEmpty(lineCollSet)) {
+ return;
+ }
+ for (String lineId : lineCollSet) {
+ InterLockData interLockData = DeviceDataRepository.findDataSouce(lineId, DataTypeEnum.INTER_LOCK);
+ List interlockOneList = interLockData.findKeysStart(AlertType.INTERLOCK_LEVEL_ONE.name());
+ for (String lockLevel : interlockOneList) {
+ if (StringUtils.endsWith(lockLevel, AlertDeviceType.DEVICE_TYPE_TRACK.name())) {
+ Map detailMap = interLockData.getDetailByInterlockKey(lockLevel);
+ for (Entry interLockDetail : detailMap.entrySet()) {
+ String rtuIdJoinStr = interLockDetail.getKey();
+ InterLockDetail detail = interLockDetail.getValue();
+ Optional redOpt = this.handle(lineId, detail, AlertType.AXLE_LED_RED, rtuIdJoinStr);
+ Optional orangeOpt = this.handle(lineId, detail, AlertType.AXLE_LED_ORANGE, rtuIdJoinStr);
+
+ redOpt.ifPresent(axleInterLockSource -> this.alertManager.emit(new LedMostEvent(axleInterLockSource)));
+ orangeOpt.ifPresent(axleInterLockSource -> this.alertManager.emit(new LedMostEvent(axleInterLockSource)));
+
+ }
+ }
+ }
+ }
+ }
+
+ private Optional handle(String lineId, InterLockDetail detail, AlertType alertType, String rtuIdJoinStr) {
+ int deviceCount = detail.getDevices().size();
+ Integer lineIdInt = Integer.parseInt(lineId);
+ //收集联锁下的所有所有区段设备
+ List resultList = this.collectorLedWarDevices(alertType, lineId, detail.getDevices());
+ int occupidedSzie = (int) resultList.stream().filter(d -> d.occupied).count();
+ String customName = String.format("%s-%s", alertType.name(), detail.getAreaConfigId());
+ if (occupidedSzie >= deviceCount) {
+ //联锁报警
+ if (alertDataSource.putAlterDevice(lineIdInt, customName, alertType.name())) {
+ NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(detail.getAreaConfigId(), alertType, lineIdInt, LocalDateTime.now(), detail.getAreaConfigName(), null,
+ AlertDeviceType.DEVICE_TYPE_TRACK,
+ false);
+ alertManager.emit(alertInfoMost);
+ }
+ return Optional.empty();
+ }
+ alertDataSource.removeAlterDevice(lineIdInt, customName, alertType.name());
+ if (CollectionUtils.isNotEmpty(resultList)) {
+ //大面积或单个告警
+ AxleInterLockSource source = new AxleInterLockSource(lineId, rtuIdJoinStr, resultList, alertType);
+ return Optional.of(source);
+ }
+ return Optional.empty();
+ }
+
+ private List collectorLedWarDevices(AlertType alertType, String lineId, List deviceLayoutIds) {
+ Integer lineIdInt = Integer.parseInt(lineId);
+ DeviceStatusData deviceStatusData = DeviceDataRepository.findDataSouce(lineId, DataTypeEnum.DEVICE);
+ TrainDataSource trainDataSource = DeviceDataRepository.findDataSouce(lineId, DataTypeEnum.TRAIN);
+ List warnResultList = Lists.newArrayList();
+ for (Integer deviceLayoutId : deviceLayoutIds) {
+ MessageOrBuilder mb = LineGraphicDataRepository.getDeviceByCode(lineIdInt, deviceLayoutId.toString());
+ if (mb instanceof Section section) {
+ boolean result = this.checkTrackOccupiedStatus(alertType, section, lineIdInt, deviceStatusData, trainDataSource);
+ warnResultList.add(new TrackOccupiedStatus(section.getCode(), result, section.getCommon().getId()));
+ }
+ }
+ return warnResultList;
+ }
+
+ 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)) {
+ //TODO 车辆占用区段
+ 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) {
+ Integer turnoutId = section.getChildren(0);
+ Turnout turnout = LineGraphicDataRepository.getDeviceByCode(lineId, turnoutId.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) {
+ alertList.add(ledRed);
+ } else {
+ alertList.add(orange);
+ }
+ }
+ }
+ if (CollectionUtils.isEmpty(alertList)) {
+ return false;
+ }
+ return alertList.stream().allMatch(d -> d);
+ }
+
+
+ @Getter
+ public static class AxleInterLockSource {
+
+ String lineId;
+ String rtuIdStr;
+ List deviceCodes;
+ AlertType alertType;
+
+ public AxleInterLockSource(String lineId, String rtuIdStr, List deviceCodes, AlertType alertType) {
+ this.lineId = lineId;
+ this.rtuIdStr = rtuIdStr;
+ this.deviceCodes = deviceCodes;
+ this.alertType = alertType;
+ }
+ }
+
+ public static class TrackOccupiedStatus {
+
+ String deviceCode;
+ Boolean occupied;
+ Integer layoutId;
+ boolean saveAlertDataSouce;
+
+ public TrackOccupiedStatus(String deviceCode, Boolean occupied, Integer layoutId) {
+ this.deviceCode = deviceCode;
+ this.occupied = occupied;
+ this.layoutId = layoutId;
+ }
+ }
+}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedMostMonitorListener.java b/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedMostMonitorListener.java
new file mode 100644
index 0000000..de55f63
--- /dev/null
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/axle/AxleLedMostMonitorListener.java
@@ -0,0 +1,129 @@
+package club.joylink.xiannccda.ats.warn.axle;
+
+import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
+import club.joylink.xiannccda.alert.core.AlertDeviceType;
+import club.joylink.xiannccda.alert.core.AlertManager;
+import club.joylink.xiannccda.alert.core.AlertSourceEventListener;
+import club.joylink.xiannccda.alert.core.relieve.RelieveFilterManager;
+import club.joylink.xiannccda.ats.warn.axle.AxleLedInterlockTask.AxleInterLockSource;
+import club.joylink.xiannccda.ats.warn.axle.AxleLedInterlockTask.TrackOccupiedStatus;
+import club.joylink.xiannccda.ats.warn.axle.event.LedMostEvent;
+import club.joylink.xiannccda.dto.protos.AlertConstProto.AlertType;
+import club.joylink.xiannccda.dto.protos.GuardConfigProto.GuardConfig;
+import club.joylink.xiannccda.service.AlertInfoService;
+import club.joylink.xiannccda.service.config.DeviceGuardConfigService;
+import club.joylink.xiannccda.vo.AreaConfigVO;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class AxleLedMostMonitorListener implements AlertSourceEventListener {
+
+ private final DeviceGuardConfigService configService;
+ private final AlertInfoService alertInfoService;
+ private final RelieveFilterManager relieveFilterManager;
+
+
+ public AxleLedMostMonitorListener(DeviceGuardConfigService configService, AlertInfoService alertInfoService, RelieveFilterManager relieveFilterManager) {
+ this.configService = configService;
+ this.alertInfoService = alertInfoService;
+ this.relieveFilterManager = relieveFilterManager;
+ }
+
+ private final AlertManager alertManager = AlertManager.getDefault();
+ private final AlertDataSource alertDataSource = AlertDataSource.getInstance();
+
+ private String getAlertName(AlertType mostType, String areaName) {
+ return String.format("%s-%s", mostType.name(), areaName);
+ }
+
+ @Override
+ public void accept(LedMostEvent event) {
+ AxleInterLockSource lockSource = event.getSource();
+ Integer lineIdInt = Integer.parseInt(lockSource.getLineId());
+ GuardConfig guardConfig = this.configService.getGuardConfig(lineIdInt);
+
+ AlertType mostType = lockSource.getAlertType() == AlertType.AXLE_LED_RED ? AlertType.AXLE_LED_RED_MOST : AlertType.AXLE_LED_ORANGE_MOST;
+ int ledThreshold = mostType == AlertType.AXLE_LED_RED_MOST ? guardConfig.getRedLedMostNums() : guardConfig.getOrangeLedMostNums();
+
+ this.removeAlert(lineIdInt, lockSource.getDeviceCodes(), mostType);
+ //查找大面下的所有区段设备(包含不在任何大面积的计轴区段,key为null)
+ Map> areaDataListMap = this.findOccupiedData(lineIdInt, mostType, lockSource.deviceCodes);
+ for (Entry> occupiedEntry : areaDataListMap.entrySet()) {
+ AreaConfigVO areaConfigVO = occupiedEntry.getKey();
+ String customName = this.getAlertName(mostType, Objects.nonNull(areaConfigVO) ? areaConfigVO.getAreaName() : "");
+ List deviceStatusList = occupiedEntry.getValue();
+ for (TrackOccupiedStatus device : occupiedEntry.getValue()) {
+ device.saveAlertDataSouce = alertDataSource.putAlterDevice(lineIdInt, customName, device.deviceCode);
+// if (Objects.equals(device.saveAlertDataSouce, false)) {
+// alertDataSource.removeAlterDevice(lineIdInt, customName, device.deviceCode);
+// }
+ }
+ String ledName = lockSource.alertType == AlertType.AXLE_LED_RED ? "红光带" : "橙光带";
+ List warnDeviceList = alertDataSource.findAllWarnDeviceForList(lineIdInt, customName);
+ if (Objects.nonNull(areaConfigVO) && deviceStatusList.stream().anyMatch(d -> d.saveAlertDataSouce) && warnDeviceList.size() >= ledThreshold) {
+ //发布大面积
+ String warnDevices = String.join(",", warnDeviceList);
+ String alertMsg = String.format("%s-出现大面积%s设备[%s]", areaConfigVO.getAreaName(), ledName, warnDevices);
+ NccAlertInfo alertInfoMost = this.alertInfoService.createAlert2(areaConfigVO.getId(), mostType, lineIdInt, LocalDateTime.now(), alertMsg, null, AlertDeviceType.DEVICE_TYPE_TRACK, false);
+ alertManager.emit(alertInfoMost);
+ } else {
+ deviceStatusList.stream().filter(d -> d.saveAlertDataSouce).forEach(d -> {
+ String alertMsg = String.format("出现%s设备[%s]", ledName, d.deviceCode);
+ NccAlertInfo alertInfo = this.alertInfoService.createAlert2(null, lockSource.alertType, lineIdInt, LocalDateTime.now(), alertMsg, String.valueOf(d.layoutId),
+ AlertDeviceType.DEVICE_TYPE_TRACK, false);
+ alertManager.emit(alertInfo);
+ });
+ }
+ }
+ }
+
+ private Map> findOccupiedData(Integer lineId, AlertType alertType, List statusList) {
+ Map> resultMap = Maps.newHashMap();
+ List occupiedDeviceList = this.findOccupiedData(statusList, true);
+ List areaConfigVOS = this.alertInfoService.findDevice2(alertType, AlertDeviceType.DEVICE_TYPE_TRACK, lineId);
+ Object[] allDeviceLayIdList = areaConfigVOS.stream().flatMap(d -> Arrays.stream(d.getDatas())).sorted().toArray();
+ resultMap.computeIfAbsent(null, k -> Lists.newArrayList());//初始化没有在任何大面设备
+
+ for (TrackOccupiedStatus occupiedDevice : occupiedDeviceList) {
+ AlertType newType = alertType == AlertType.AXLE_LED_RED_MOST ? AlertType.AXLE_LED_RED : AlertType.AXLE_LED_ORANGE;
+ if (!this.relieveFilterManager.relieveAlertMatch(lineId, AlertDeviceType.DEVICE_TYPE_TRACK, newType, occupiedDevice.layoutId)) {
+ if (Arrays.binarySearch(allDeviceLayIdList, occupiedDevice.layoutId) >= 0) {
+ for (AreaConfigVO areaConfigVO : areaConfigVOS) {
+ List valList = resultMap.computeIfAbsent(areaConfigVO, k -> Lists.newArrayList());
+ if (areaConfigVO.findDataIndex(occupiedDevice.layoutId) >= 0) {
+ valList.add(occupiedDevice);
+ }
+ }
+ } else {
+ //不属于任何大面的设备
+ resultMap.get(null).add(occupiedDevice);
+ }
+ }
+ }
+ return resultMap;
+ }
+
+ private List findOccupiedData(List statusList, boolean occupied2) {
+ return statusList.stream().filter(d -> d.occupied == occupied2).toList();
+ }
+
+ private void removeAlert(Integer lineIdInt, List statusList, AlertType signleType) {
+ List notOccupiedCodes = this.findOccupiedData(statusList, false);
+ for (TrackOccupiedStatus notOccupiedCode : notOccupiedCodes) {
+
+ alertDataSource.removeAlertDevicePrefixName(lineIdInt, signleType.name(), notOccupiedCode.deviceCode);
+ }
+ }
+
+}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/axle/event/LedMostEvent.java b/src/main/java/club/joylink/xiannccda/ats/warn/axle/event/LedMostEvent.java
new file mode 100644
index 0000000..2797ca7
--- /dev/null
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/axle/event/LedMostEvent.java
@@ -0,0 +1,14 @@
+package club.joylink.xiannccda.ats.warn.axle.event;
+
+import club.joylink.xiannccda.ats.warn.DeviceAlertEvent;
+import club.joylink.xiannccda.ats.warn.axle.AxleLedInterlockTask.AxleInterLockSource;
+
+public class LedMostEvent extends DeviceAlertEvent {
+
+ public LedMostEvent(AxleInterLockSource newSource) {
+ super(newSource);
+
+ }
+
+
+}
diff --git a/src/main/java/club/joylink/xiannccda/ats/warn/BuleDisplayMonitoringTask.java b/src/main/java/club/joylink/xiannccda/ats/warn/bule/BuleDisplayMonitoringTask.java
similarity index 90%
rename from src/main/java/club/joylink/xiannccda/ats/warn/BuleDisplayMonitoringTask.java
rename to src/main/java/club/joylink/xiannccda/ats/warn/bule/BuleDisplayMonitoringTask.java
index fef945b..4f21e7a 100644
--- a/src/main/java/club/joylink/xiannccda/ats/warn/BuleDisplayMonitoringTask.java
+++ b/src/main/java/club/joylink/xiannccda/ats/warn/bule/BuleDisplayMonitoringTask.java
@@ -1,6 +1,7 @@
-package club.joylink.xiannccda.ats.warn;
+package club.joylink.xiannccda.ats.warn.bule;
import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.alert.core.AlertMonitoringTask;
@@ -44,6 +45,7 @@ public class BuleDisplayMonitoringTask implements AlertMonitoringTask {
private final AlertManager alertManager = AlertManager.getDefault();
+ private final AlertDataSource alertDataSource = AlertDataSource.getInstance();
@Override
public String getName() {
@@ -88,7 +90,7 @@ public class BuleDisplayMonitoringTask implements AlertMonitoringTask {
int interLockCount = rtuVOMapList.keySet().size();
List allShutdownList = rtuVOMapList.values().stream().map(Collection::stream).map(ls -> ls.anyMatch(r -> Objects.nonNull(r.rtu) && r.rtu.getIpRtuStusDown())).toList();
if (allShutdownList.size() == interLockCount && allShutdownList.stream().allMatch(d -> d)) {
- if (alertManager.putAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All")) {
+ if (alertDataSource.putAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All")) {
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(null, AlertType.ALL_LINE_BLUE_DISPLAY, lineId, LocalDateTime.now(), "全线蓝线", null,
AlertDeviceType.DEVICE_TYPE_RTU, false);
@@ -99,7 +101,7 @@ public class BuleDisplayMonitoringTask implements AlertMonitoringTask {
Optional rwVO = rwvVOist.stream().filter(d -> Objects.nonNull(d.rtu) && d.rtu.getIpRtuStusDown()).findAny();
if (rwVO.isPresent()) {
RtuWarnVO rtuVO = rwVO.get();
- if (alertManager.putAlterDevice(lineId, this.getName(), rtuVO.areaConfigVO.getAreaName())) {
+ if (alertDataSource.putAlterDevice(lineId, this.getName(), rtuVO.areaConfigVO.getAreaName())) {
String alertInfoMostName = rtuVO.areaConfigVO.getAreaName();
NccAlertInfo alertInfo = this.alertInfoService.createAlert2(rtuVO.areaConfigVO.getId(), AlertType.BLUE_DISPLAY, rtuVO.rtu, alertInfoMostName,
rtuVO.station.getCommon().getId(),
@@ -107,8 +109,8 @@ public class BuleDisplayMonitoringTask implements AlertMonitoringTask {
alertManager.emit(alertInfo);
}
} else {
- alertManager.removeAlterDevice(lineId, this.getName(), rwvVOist.get(0).areaConfigVO.getAreaName());
- alertManager.removeAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All");
+ alertDataSource.removeAlterDevice(lineId, this.getName(), rwvVOist.get(0).areaConfigVO.getAreaName());
+ alertDataSource.removeAlterDevice(lineId, ALL_BULE_DISPLAY_NAME, "All");
}
}
}
diff --git a/src/main/java/club/joylink/xiannccda/service/AlertMockService.java b/src/main/java/club/joylink/xiannccda/service/AlertMockService.java
index ef741f5..c7681df 100644
--- a/src/main/java/club/joylink/xiannccda/service/AlertMockService.java
+++ b/src/main/java/club/joylink/xiannccda/service/AlertMockService.java
@@ -2,6 +2,7 @@ package club.joylink.xiannccda.service;
import club.joylink.xiannccda.alert.AlertDetailFactory;
import club.joylink.xiannccda.alert.NccAlertInfo;
+import club.joylink.xiannccda.alert.core.AlertDataSource;
import club.joylink.xiannccda.alert.core.AlertDeviceType;
import club.joylink.xiannccda.alert.core.AlertManager;
import club.joylink.xiannccda.ats.cache.LineGraphicDataRepository;
@@ -90,8 +91,9 @@ public class AlertMockService {
trainData.clear();
AbstractData planData = DeviceDataRepository.findDataSouce(lineId.toString(), DataTypeEnum.TRAIN_PLAN);
planData.clear();
- AlertManager alertManager = AlertManager.getDefault();
- alertManager.clearAlertDataMsg(lineId);
+
+ AlertDataSource dataSource = AlertDataSource.getInstance();
+ dataSource.clearAlertDataMsg(lineId);
}
diff --git a/src/main/java/club/joylink/xiannccda/service/config/DeviceAreaConfigService.java b/src/main/java/club/joylink/xiannccda/service/config/DeviceAreaConfigService.java
index 94347b9..6ded5e7 100644
--- a/src/main/java/club/joylink/xiannccda/service/config/DeviceAreaConfigService.java
+++ b/src/main/java/club/joylink/xiannccda/service/config/DeviceAreaConfigService.java
@@ -44,7 +44,7 @@ public class DeviceAreaConfigService {
@Autowired
private DeviceAreaConfigRepository deviceAreaConfigRepository;
- private final static Cache>> AREA_CONFIG_CACHE = CacheBuilder.newBuilder().expireAfterWrite(5 * 60, TimeUnit.MINUTES).build();
+ private final static Cache>> AREA_CONFIG_CACHE = CacheBuilder.newBuilder().build();
public List getCache(int lineId, AlertDeviceType dt) {
try {
diff --git a/src/main/java/club/joylink/xiannccda/service/config/DeviceGuardConfigService.java b/src/main/java/club/joylink/xiannccda/service/config/DeviceGuardConfigService.java
index 056201b..d27eb5a 100644
--- a/src/main/java/club/joylink/xiannccda/service/config/DeviceGuardConfigService.java
+++ b/src/main/java/club/joylink/xiannccda/service/config/DeviceGuardConfigService.java
@@ -23,45 +23,45 @@ import org.springframework.stereotype.Service;
@Slf4j
public class DeviceGuardConfigService {
- @Autowired
- private IDeviceGuardConfigRepository configRepository;
+ @Autowired
+ private IDeviceGuardConfigRepository configRepository;
- private final static Cache GUARD_CONFIG_CACHE = CacheBuilder.newBuilder().expireAfterWrite(10 * 60, TimeUnit.MINUTES).build();
+ private final static Cache GUARD_CONFIG_CACHE = CacheBuilder.newBuilder().build();
- public GuardConfig getGuardConfig(int lineId) {
- try {
- GuardConfig guardConfig = GUARD_CONFIG_CACHE.get(lineId, () -> {
- LambdaQueryWrapper qw = Wrappers.lambdaQuery(DeviceGuardConfig.class);
- qw.eq(DeviceGuardConfig::getLineId, lineId);
- DeviceGuardConfig deviceGuardConfig = configRepository.getOne(qw, false);
- BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(Objects.nonNull(deviceGuardConfig), "未找到对应的配置数据");
- GuardConfig gc = GuardConfig.parseFrom(deviceGuardConfig.getConfigData());
- return gc;
+ public GuardConfig getGuardConfig(int lineId) {
+ try {
+ GuardConfig guardConfig = GUARD_CONFIG_CACHE.get(lineId, () -> {
+ LambdaQueryWrapper qw = Wrappers.lambdaQuery(DeviceGuardConfig.class);
+ qw.eq(DeviceGuardConfig::getLineId, lineId);
+ DeviceGuardConfig deviceGuardConfig = configRepository.getOne(qw, false);
+ BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(Objects.nonNull(deviceGuardConfig), "未找到对应的配置数据");
+ GuardConfig gc = GuardConfig.parseFrom(deviceGuardConfig.getConfigData());
+ return gc;
- });
- return guardConfig;
- } catch (ExecutionException e) {
- log.error("获取设备保护配置信息出错 msg:[{}]", e.getMessage(), e);
- return GuardConfig.newBuilder().build();
- }
+ });
+ return guardConfig;
+ } catch (ExecutionException e) {
+ log.error("获取设备保护配置信息出错 msg:[{}]", e.getMessage(), e);
+ return GuardConfig.newBuilder().build();
+ }
+ }
+
+
+ public void saveOrUpdate(DeviceGuardConfig dto) {
+
+ this.configRepository.saveOrUpdate(dto);
+ GUARD_CONFIG_CACHE.invalidateAll();
+ }
+
+ public Page page(DeviceGuardConfigQueryDto queryDTO) {
+ LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DeviceGuardConfig.class);
+
+ if (Objects.nonNull(queryDTO.getLineId())) {
+ queryWrapper.eq(DeviceGuardConfig::getLineId, queryDTO.getLineId());
}
-
- public void saveOrUpdate(DeviceGuardConfig dto) {
-
- this.configRepository.saveOrUpdate(dto);
- GUARD_CONFIG_CACHE.invalidateAll();
- }
-
- public Page page(DeviceGuardConfigQueryDto queryDTO) {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(DeviceGuardConfig.class);
-
- if (Objects.nonNull(queryDTO.getLineId())) {
- queryWrapper.eq(DeviceGuardConfig::getLineId, queryDTO.getLineId());
- }
-
- return configRepository.page(queryDTO, queryWrapper);
- }
+ return configRepository.page(queryDTO, queryWrapper);
+ }
}
diff --git a/src/main/java/club/joylink/xiannccda/vo/AreaConfigVO.java b/src/main/java/club/joylink/xiannccda/vo/AreaConfigVO.java
index e1bada0..3d75629 100644
--- a/src/main/java/club/joylink/xiannccda/vo/AreaConfigVO.java
+++ b/src/main/java/club/joylink/xiannccda/vo/AreaConfigVO.java
@@ -8,6 +8,7 @@ import com.google.common.base.Splitter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import lombok.Data;
@@ -38,6 +39,22 @@ public class AreaConfigVO {
}
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ AreaConfigVO configVO = (AreaConfigVO) o;
+ return Objects.equals(id, configVO.id);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id);
+ }
private Long id;
private Integer[] datas;
diff --git a/src/test/java/club/joylink/xiannccda/device/DeviceStatusCheckTest.java b/src/test/java/club/joylink/xiannccda/device/DeviceStatusCheckTest.java
index c958001..f3f4753 100644
--- a/src/test/java/club/joylink/xiannccda/device/DeviceStatusCheckTest.java
+++ b/src/test/java/club/joylink/xiannccda/device/DeviceStatusCheckTest.java
@@ -5,22 +5,17 @@ import club.joylink.xiannccda.ats.message.line3.device.DeviceStatus;
import club.joylink.xiannccda.ats.message.line3.device.DeviceStatus.SWITCH;
import club.joylink.xiannccda.ats.message.line3.device.DeviceStatus.TRACK;
import club.joylink.xiannccda.ats.message.line3.device.DeviceStatus.TRAIN_MODE;
-import club.joylink.xiannccda.ats.warn.BuleDisplayMonitoringTask.RtuWarnVO;
+import club.joylink.xiannccda.ats.warn.bule.BuleDisplayMonitoringTask.RtuWarnVO;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Platform;
import club.joylink.xiannccda.dto.protos.DeviceStatusProto.Rtu;
-import club.joylink.xiannccda.dto.protos.TrainProto.TrainInfo;
import club.joylink.xiannccda.vo.AreaConfigVO;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Lists;
-import com.mysql.cj.x.protobuf.MysqlxDatatypes;
import java.io.BufferedReader;
import java.io.FileReader;
-import java.io.UnsupportedEncodingException;
-import java.sql.SQLOutput;
import java.util.ArrayList;
-import java.util.Base64;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;