联锁机故障(哈尔滨)
This commit is contained in:
parent
57809890c8
commit
e3cee9cfbe
@ -48,17 +48,22 @@ public class ZCLogicLoop {
|
||||
List<VirtualRealityTrain> trainList = simulation.getRepository().getOnlineTrainList();
|
||||
trainList.forEach(train -> {
|
||||
SectionPosition headPosition = train.getHeadPosition();
|
||||
Station deviceStation = headPosition.getSection().getDeviceStation();
|
||||
RunLevel defaultRunLevel = simulation.getRepository().getConfig().getRunMode();
|
||||
if (RunLevel.ITC.equals(defaultRunLevel)) { //如果线路最高运行级别为ITC级别
|
||||
this.calculateMAOfITC(simulation, train, trainList);
|
||||
} else if (RunLevel.CBTC.equals(defaultRunLevel)) {
|
||||
//更新ITC ma
|
||||
Float distance2NextSignal = train.calculateDistance2NextNormalOpenSignal();
|
||||
if (distance2NextSignal != null && distance2NextSignal <= 5) {
|
||||
if (!Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
this.calculateMAOfITC(simulation, train, trainList);
|
||||
}
|
||||
} else if (RunLevel.CBTC.equals(defaultRunLevel)) {
|
||||
//更新ITC ma
|
||||
if (!Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
Float distance2NextSignal = train.calculateDistance2NextNormalOpenSignal();
|
||||
if (distance2NextSignal != null && distance2NextSignal <= 5) {
|
||||
this.calculateMAOfITC(simulation, train, trainList);
|
||||
}
|
||||
}
|
||||
//更新CBTC ma
|
||||
if (!headPosition.getSection().getDeviceStation().getZc().isFault()) { //如果列车头所在区段所属设备集中站zc未故障
|
||||
if (!deviceStation.isFault()) { //如果列车头所在区段所属设备集中站zc未故障
|
||||
this.calculateMAOfCBTC(simulation, train, trainList);
|
||||
}
|
||||
}
|
||||
|
@ -225,6 +225,8 @@ public class Operation {
|
||||
Station_Close_AllSignal,
|
||||
/** 关区信号 */
|
||||
Station_CIArea_Close_AllSignal,
|
||||
/** 重启令解(哈尔滨) */
|
||||
Station_Restart,
|
||||
|
||||
//--------------------------- 列车 ---------------------------
|
||||
/** 在指定区段加载一辆计划列车(本地开发使用) */
|
||||
|
@ -6,7 +6,8 @@ import club.joylink.rtss.simulation.cbtc.ATS.operation.annotation.OperateHandler
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.operation.service.*;
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.operation.vo.FaultParam;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -39,6 +40,9 @@ public class FaultOperateHandler {
|
||||
@Autowired
|
||||
private CatenaryFaultService catenaryFaultService;
|
||||
|
||||
@Autowired
|
||||
private StationFaultService stationFaultService;
|
||||
|
||||
/**
|
||||
* 设备设置故障
|
||||
*
|
||||
@ -129,6 +133,12 @@ public class FaultOperateHandler {
|
||||
return;
|
||||
|
||||
case STATION:
|
||||
if (isSet) {
|
||||
stationFaultService.setFault(simulation, mayOutOfOrderDevice, param);
|
||||
return;
|
||||
}
|
||||
stationFaultService.fixFault(simulation, mayOutOfOrderDevice, param);
|
||||
return;
|
||||
case TRAIN:
|
||||
return;
|
||||
case STAND:
|
||||
|
@ -194,4 +194,10 @@ public class StationOperateHandler {
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
this.atsStationService.receiveControl(simulation, member, repository.getByCode(stationCode, Station.class));
|
||||
}
|
||||
|
||||
@OperateHandlerMapping(type = Operation.Type.Station_Restart)
|
||||
public void restart(Simulation simulation, String stationCode) {
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
this.ciApiService.restart(simulation, repository.getByCode(stationCode, Station.class));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,67 @@
|
||||
package club.joylink.rtss.simulation.cbtc.ATS.operation.service;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.operation.vo.FaultParam;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.communication.vo.fault.DeviceFaultInfo;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Section;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationDeviceFaultOverEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationDeviceFaultSetEvent;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class StationFaultService implements DeviceFaultService {
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
@Override
|
||||
public void setFault(Simulation simulation, MayOutOfOrderDevice device, FaultParam param) {
|
||||
Station.Fault fault = checkAndGetFault(param);
|
||||
boolean apply = fault.apply(device);
|
||||
if (apply) {
|
||||
this.applicationContext.publishEvent(new SimulationDeviceFaultSetEvent(this,
|
||||
simulation, new DeviceFaultInfo(device.getCode(), device.getDeviceType(), fault)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fixFault(Simulation simulation, MayOutOfOrderDevice device, FaultParam param) {
|
||||
Station.Fault fault = checkAndGetFault(param);
|
||||
MayOutOfOrderDevice.DeviceFault deviceFault = device.getFault();
|
||||
fault.fix(device);
|
||||
if (fault.equals(deviceFault) && fault.equals(Station.Fault.INTERLOCK_MACHINE_FAULT)) {
|
||||
Station station = (Station) device;
|
||||
if (station.getDeviceStation() != null) {
|
||||
station = station.getDeviceStation();
|
||||
}
|
||||
Station deviceStation = station;
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
List<Section> sections = repository.getSectionList().stream()
|
||||
.filter(section -> section.getDeviceStation().equals(deviceStation)).collect(Collectors.toList());
|
||||
for (Section section : sections) {
|
||||
if (section.isRouteLock()) {
|
||||
continue;
|
||||
}
|
||||
section.setNctOccupied(true);
|
||||
if (section.isSwitchAxleCounterSection()) {
|
||||
section.getLogicList().forEach(switchSection -> switchSection.setNctOccupied(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
this.applicationContext.publishEvent(new SimulationDeviceFaultOverEvent(this,
|
||||
simulation, new DeviceFaultInfo(device.getCode(), device.getDeviceType(), fault)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Station.Fault checkAndGetFault(FaultParam param) {
|
||||
return Station.Fault.valueOf(param.getFaultType());
|
||||
}
|
||||
}
|
@ -91,84 +91,16 @@ public class CILogicLoop {
|
||||
*/
|
||||
public void getStatusFromVRDevice(Simulation simulation) {
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
List<Signal> signalList = repository.getSignalList();
|
||||
for (Signal signal : signalList) {
|
||||
if (signal.isLogicLight() || signal.isVirtual()) {
|
||||
continue;
|
||||
} else if (signal.isGuideOpen()) {
|
||||
int guideRemain = signal.getGuideRemain();
|
||||
if (guideRemain != -1) { // 非无限开放
|
||||
guideRemain -= SimulationModule.CI.getRateMs();
|
||||
if (guideRemain <= 0) {
|
||||
// 关闭引导信号
|
||||
this.signalService.close(simulation, signal);
|
||||
signal.updateGuideRemain(0);
|
||||
} else {
|
||||
signal.updateGuideRemain(guideRemain);
|
||||
}
|
||||
}
|
||||
}
|
||||
VirtualRealitySignal virtualSignal = signal.getVirtualSignal();
|
||||
signal.apply(virtualSignal.isGreenOpen(), virtualSignal.isYellowOpen(), virtualSignal.isRedOpen());
|
||||
}
|
||||
// 道岔位置状态
|
||||
List<Switch> switchList = repository.getListByType(MapElement.DeviceType.SWITCH, Switch.class);
|
||||
switchList.forEach(aSwitch -> {
|
||||
Switch.SwitchFault fault = (Switch.SwitchFault) aSwitch.getFault();
|
||||
if (fault != null) {
|
||||
aSwitch.setSplit(true);
|
||||
switch (fault) {
|
||||
case SPLIT:
|
||||
break;
|
||||
case NORMAL_SPLIT: {
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(false, virtualSwitch.isReverse());
|
||||
break;
|
||||
}
|
||||
case REVERSE_SPLIT: {
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(virtualSwitch.isNormal(), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
aSwitch.setSplit(false);
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(virtualSwitch.isNormal(), virtualSwitch.isReverse());
|
||||
}
|
||||
});
|
||||
// 区段占用
|
||||
List<Section> axleSectionList = repository.getAxleSectionList();
|
||||
axleSectionList.forEach(section -> {
|
||||
// if (section.isInvalid() && section.isFault()) {
|
||||
// section.setNctOccupied(false);
|
||||
// return;
|
||||
// }
|
||||
// if (section.isFault()) {
|
||||
// section.setNctOccupied(true);
|
||||
// return;
|
||||
// }
|
||||
if (Section.AxleFault.UNABLE_COLLECT_STATUS.equals(section.getFault()))
|
||||
return;
|
||||
VirtualRealitySectionAxleCounter virtualAxleCounter = section.getVirtualAxleCounter();
|
||||
if (virtualAxleCounter.isOccupy()) {
|
||||
section.axleCounterOccupy(virtualAxleCounter.isRight());
|
||||
} else {
|
||||
section.axleCounterClear();
|
||||
}
|
||||
section.judgeAsValid();
|
||||
});
|
||||
// 站台屏蔽门开关门等状态
|
||||
List<PSD> psdList = repository.getListByType(MapElement.DeviceType.PSD, PSD.class);
|
||||
psdList.forEach(psd -> {
|
||||
VirtualRealityScreenDoor vrScreenDoor = psd.getVirtualScreenDoor();
|
||||
psd.apply(vrScreenDoor.isClose(), vrScreenDoor.isLock(), vrScreenDoor.isInterlockRelease());
|
||||
});
|
||||
List<Signal> signalList = getSignalsStatusFromVRDevice(simulation);
|
||||
List<Switch> switchList = getSwitchesStatusFromVRDevice(repository);
|
||||
getSectionsStatusFromVRDevice(repository);
|
||||
getPsdStatusFromVRDevice(repository);
|
||||
// 道岔状态发送ATS
|
||||
this.atsApiService.handleDeviceStatus(simulation, signalList);
|
||||
this.atsApiService.handleDeviceStatus(simulation, switchList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 进路相关逻辑
|
||||
*/
|
||||
@ -176,6 +108,13 @@ public class CILogicLoop {
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
List<Route> routeList = repository.getRouteList();
|
||||
for (Route route : routeList) {
|
||||
//联锁机故障逻辑
|
||||
Station deviceStation = route.getStart().getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// Route.CheckFailMessage result = this.routeService.check(simulation, route);
|
||||
// if (Objects.nonNull(result)) {
|
||||
// route.setSettable(false);
|
||||
@ -192,6 +131,14 @@ public class CILogicLoop {
|
||||
if (!CollectionUtils.isEmpty(settingRoutes)) {
|
||||
// 获取所有列车方向速度位置信息用以解锁进路
|
||||
for (Route route : settingRoutes) {
|
||||
//联锁机故障逻辑
|
||||
Station deviceStation = route.getStart().getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (route.isNormalUnlock()) { // 进路锁闭,若进路内存在列车,执行正常解锁
|
||||
this.routeService.normalUnlock(simulation, route);
|
||||
}
|
||||
@ -230,4 +177,175 @@ public class CILogicLoop {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从真实设置获取屏蔽门的状态
|
||||
*/
|
||||
private void getPsdStatusFromVRDevice(SimulationDataRepository repository) {
|
||||
// 站台屏蔽门开关门等状态
|
||||
List<PSD> psdList = repository.getListByType(MapElement.DeviceType.PSD, PSD.class);
|
||||
psdList.forEach(psd -> {
|
||||
//联锁机故障
|
||||
Stand stand = psd.getStand();
|
||||
Station deviceStation = stand.getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
stand.setNoStatus(true);
|
||||
psd.setNoStatus(true);
|
||||
return;
|
||||
} else {
|
||||
stand.setNoStatus(false);
|
||||
psd.setNoStatus(false);
|
||||
}
|
||||
if (deviceStation.isInterlockMachineStarting())
|
||||
return;
|
||||
} else {
|
||||
stand.setNoStatus(false);
|
||||
psd.setNoStatus(false);
|
||||
}
|
||||
|
||||
VirtualRealityScreenDoor vrScreenDoor = psd.getVirtualScreenDoor();
|
||||
psd.apply(vrScreenDoor.isClose(), vrScreenDoor.isLock(), vrScreenDoor.isInterlockRelease());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新区段逻辑
|
||||
*/
|
||||
private void getSectionsStatusFromVRDevice(SimulationDataRepository repository) {
|
||||
// 区段占用
|
||||
List<Section> axleSectionList = repository.getAxleSectionList();
|
||||
axleSectionList.forEach(section -> {
|
||||
//联锁机故障
|
||||
boolean interlockMachineFault = false;
|
||||
boolean interlockMachineStarting = false;
|
||||
Station deviceStation = section.getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (deviceStation.isInterlockMachineStarting())
|
||||
interlockMachineStarting = true;
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault()))
|
||||
interlockMachineFault = true;
|
||||
}
|
||||
if (interlockMachineFault) {
|
||||
section.setNoStatus(true);
|
||||
if (section.isSwitchAxleCounterSection()) {
|
||||
section.getLogicList().forEach(switchSection -> switchSection.setNoStatus(true));
|
||||
}
|
||||
} else {
|
||||
section.setNoStatus(false);
|
||||
if (section.isSwitchAxleCounterSection()) {
|
||||
section.getLogicList().forEach(switchSection -> switchSection.setNoStatus(false));
|
||||
}
|
||||
}
|
||||
if (interlockMachineStarting)
|
||||
return;
|
||||
// if (section.isInvalid() && section.isFault()) {
|
||||
// section.setNctOccupied(false);
|
||||
// return;
|
||||
// }
|
||||
// if (section.isFault()) {
|
||||
// section.setNctOccupied(true);
|
||||
// return;
|
||||
// }
|
||||
if (Section.AxleFault.UNABLE_COLLECT_STATUS.equals(section.getFault()))
|
||||
return;
|
||||
VirtualRealitySectionAxleCounter virtualAxleCounter = section.getVirtualAxleCounter();
|
||||
if (virtualAxleCounter.isOccupy()) {
|
||||
section.axleCounterOccupy(virtualAxleCounter.isRight());
|
||||
} else {
|
||||
section.axleCounterClear();
|
||||
}
|
||||
section.judgeAsValid();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 从真实设备获取道岔状态
|
||||
*/
|
||||
private List<Switch> getSwitchesStatusFromVRDevice(SimulationDataRepository repository) {
|
||||
// 道岔位置状态
|
||||
List<Switch> switchList = repository.getListByType(MapElement.DeviceType.SWITCH, Switch.class);
|
||||
switchList.forEach(aSwitch -> {
|
||||
//联锁机故障逻辑
|
||||
Station deviceStation = aSwitch.getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
aSwitch.setNoStatus(true);
|
||||
return;
|
||||
} else {
|
||||
aSwitch.setNoStatus(false);
|
||||
}
|
||||
if (deviceStation.isInterlockMachineStarting())
|
||||
return;
|
||||
} else {
|
||||
aSwitch.setNoStatus(false);
|
||||
}
|
||||
|
||||
Switch.SwitchFault fault = (Switch.SwitchFault) aSwitch.getFault();
|
||||
if (fault != null) {
|
||||
aSwitch.setSplit(true);
|
||||
switch (fault) {
|
||||
case SPLIT:
|
||||
break;
|
||||
case NORMAL_SPLIT: {
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(false, virtualSwitch.isReverse());
|
||||
break;
|
||||
}
|
||||
case REVERSE_SPLIT: {
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(virtualSwitch.isNormal(), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
aSwitch.setSplit(false);
|
||||
VirtualRealitySwitch virtualSwitch = aSwitch.getVirtualSwitch();
|
||||
aSwitch.apply(virtualSwitch.isNormal(), virtualSwitch.isReverse());
|
||||
}
|
||||
});
|
||||
return switchList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从真实设备获取信号机状态
|
||||
*/
|
||||
private List<Signal> getSignalsStatusFromVRDevice(Simulation simulation) {
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
List<Signal> signalList = repository.getSignalList();
|
||||
for (Signal signal : signalList) {
|
||||
//联锁机故障逻辑
|
||||
Station deviceStation = signal.getDeviceStation();
|
||||
if (deviceStation != null) {
|
||||
if (Station.Fault.INTERLOCK_MACHINE_FAULT.equals(deviceStation.getFault())) {
|
||||
signal.setNoStatus(true);
|
||||
continue;
|
||||
} else {
|
||||
signal.setNoStatus(false);
|
||||
}
|
||||
if (deviceStation.isInterlockMachineStarting())
|
||||
continue;
|
||||
} else {
|
||||
signal.setNoStatus(false);
|
||||
}
|
||||
|
||||
if (signal.isLogicLight() || signal.isVirtual()) {
|
||||
continue;
|
||||
} else if (signal.isGuideOpen()) {
|
||||
int guideRemain = signal.getGuideRemain();
|
||||
if (guideRemain != -1) { // 非无限开放
|
||||
guideRemain -= SimulationModule.CI.getRateMs();
|
||||
if (guideRemain <= 0) {
|
||||
// 关闭引导信号
|
||||
this.signalService.close(simulation, signal);
|
||||
signal.updateGuideRemain(0);
|
||||
} else {
|
||||
signal.updateGuideRemain(guideRemain);
|
||||
}
|
||||
}
|
||||
}
|
||||
VirtualRealitySignal virtualSignal = signal.getVirtualSignal();
|
||||
signal.apply(virtualSignal.isGreenOpen(), virtualSignal.isYellowOpen(), virtualSignal.isRedOpen());
|
||||
}
|
||||
return signalList;
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package club.joylink.rtss.simulation.cbtc.CI;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.ESP;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Route;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||
import club.joylink.rtss.simulation.cbtc.data.support.SignalApproachMessage;
|
||||
import club.joylink.rtss.simulation.cbtc.data.support.TrainStopMessage;
|
||||
|
||||
@ -297,4 +298,9 @@ public interface CiApiService {
|
||||
void setEst(Simulation simulation, ESP esp);
|
||||
|
||||
void cancelEst(Simulation simulation, ESP esp);
|
||||
|
||||
/**
|
||||
* 重启令解
|
||||
*/
|
||||
void restart(Simulation simulation, Station station);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package club.joylink.rtss.simulation.cbtc.CI;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.CI.service.*;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
@ -16,6 +17,7 @@ import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -79,16 +81,20 @@ public class CiApiServiceImpl implements CiApiService {
|
||||
throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL,
|
||||
"信号机已经开启,无需重开信号机");
|
||||
}
|
||||
Route lockedRoute = signal.getLockedRoute();
|
||||
if (Objects.isNull(lockedRoute)) {
|
||||
throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL,
|
||||
"进路未锁闭,不能重开信号机");
|
||||
}
|
||||
if (!this.routeService.isInterlocked(lockedRoute)) {
|
||||
throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL,
|
||||
String.format("进路[%s(%s)]联锁关系不满足,不能重开信号机", lockedRoute.getName(), lockedRoute.getCode()));
|
||||
}
|
||||
this.routeService.routeOpen(simulation, lockedRoute);
|
||||
Optional<Route> routeOptional = simulation.getRepository().getSettingRoutes().stream()
|
||||
.filter(route -> route.getStart().equals(signal)).limit(1).findAny();
|
||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(routeOptional.isPresent());
|
||||
settingRoute(simulation, routeOptional.get().getCode());
|
||||
// Route lockedRoute = signal.getLockedRoute();
|
||||
// if (Objects.isNull(lockedRoute)) {
|
||||
// throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL,
|
||||
// "进路未锁闭,不能重开信号机");
|
||||
// }
|
||||
// if (!this.routeService.isInterlocked(lockedRoute)) {
|
||||
// throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL,
|
||||
// String.format("进路[%s(%s)]联锁关系不满足,不能重开信号机", lockedRoute.getName(), lockedRoute.getCode()));
|
||||
// }
|
||||
// this.routeService.routeOpen(simulation, lockedRoute);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -419,4 +425,20 @@ public class CiApiServiceImpl implements CiApiService {
|
||||
public void cancelEst(Simulation simulation, ESP esp) {
|
||||
esp.update(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restart(Simulation simulation, Station station) {
|
||||
Station deviceStation;
|
||||
if (station.isCentralized()) {
|
||||
deviceStation = station;
|
||||
} else {
|
||||
deviceStation = station.getDeviceStation();
|
||||
}
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
//信号机和进路
|
||||
List<Signal> signals = repository.getSignalList().stream()
|
||||
.filter(signal -> signal.getDeviceStation().equals(deviceStation)).collect(Collectors.toList());
|
||||
signals.forEach(Signal::reset);
|
||||
deviceStation.setInterlockMachineStarting(false);
|
||||
}
|
||||
}
|
||||
|
@ -725,6 +725,9 @@ public class RouteService {
|
||||
if (!section.isRouteLockOn(right)) {
|
||||
return false;
|
||||
}
|
||||
if (section.isNoStatus()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 道岔位置一致检查
|
||||
Set<Switch> sectionRelSwitches = sectionList.stream().map(Section::getRelSwitch).collect(Collectors.toSet());
|
||||
|
@ -42,9 +42,6 @@ public abstract class MayOutOfOrderDevice extends MapNamedElement {
|
||||
boolean apply(MayOutOfOrderDevice device);
|
||||
|
||||
default void fix(MayOutOfOrderDevice device) {
|
||||
if (device.fault == null) {
|
||||
return;
|
||||
}
|
||||
if (this.equals(device.fault))
|
||||
device.fault = null;
|
||||
}
|
||||
|
@ -36,11 +36,15 @@ public class PSD extends MapNamedElement {
|
||||
/** 是否互锁解除 */
|
||||
private boolean interlockRelease;
|
||||
|
||||
/** 无状态 */
|
||||
private boolean noStatus;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
this.close = true;
|
||||
this.lock = true;
|
||||
this.interlockRelease = false;
|
||||
this.noStatus = false;
|
||||
}
|
||||
|
||||
public boolean isCloseAndLock() {
|
||||
|
@ -408,6 +408,8 @@ public class Route extends MapNamedElement {
|
||||
}
|
||||
|
||||
public synchronized void startSetting(LocalDateTime systemTime) {
|
||||
if (getCode().equals("Route533"))
|
||||
System.out.println();
|
||||
this.setSetting(true);
|
||||
this.settingStartTime = systemTime;
|
||||
this.requisition = false;
|
||||
|
@ -209,6 +209,11 @@ public class Section extends MayOutOfOrderDevice {
|
||||
*/
|
||||
private int delayTime;
|
||||
|
||||
/**
|
||||
* 无状态(哈尔滨灰显)
|
||||
*/
|
||||
private boolean noStatus;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
@ -223,6 +228,7 @@ public class Section extends MayOutOfOrderDevice {
|
||||
this.faultLock = false;
|
||||
this.speedUpLimit = -1;
|
||||
this.delayTime = 0;
|
||||
this.noStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -746,6 +752,8 @@ public class Section extends MayOutOfOrderDevice {
|
||||
}
|
||||
|
||||
public boolean isRouteLockOn(boolean right) {
|
||||
if (noStatus)
|
||||
return false;
|
||||
return this.routeLock && Objects.equals(this.lockRight, right);
|
||||
}
|
||||
|
||||
@ -916,7 +924,7 @@ public class Section extends MayOutOfOrderDevice {
|
||||
},
|
||||
|
||||
/**
|
||||
* 无法从真实设备采集状态(哈尔滨灰显)
|
||||
* 无法从真实设备采集状态(哈尔滨灰显)【可能没用了】
|
||||
*/
|
||||
UNABLE_COLLECT_STATUS {
|
||||
@Override
|
||||
|
@ -167,6 +167,11 @@ public class Signal extends MayOutOfOrderDevice {
|
||||
*/
|
||||
private SignalApproachMessage.ApproachMessage approachMsg;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
private boolean noStatus;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
@ -179,6 +184,7 @@ public class Signal extends MayOutOfOrderDevice {
|
||||
this.delayTime = 0;
|
||||
this.guideRemain = 0;
|
||||
this.approachMsg = SignalApproachMessage.ApproachMessage.NULL;
|
||||
this.noStatus = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -315,8 +321,6 @@ public class Signal extends MayOutOfOrderDevice {
|
||||
|
||||
/**
|
||||
* 是否与轨道常规运行方向相同
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isSameDirectionToSection() {
|
||||
return (this.isRight() && Objects.equals(this.section.getRoadType(), Section.SectionRoadType.RIGHT))
|
||||
|
@ -132,6 +132,11 @@ public class Stand extends MayOutOfOrderDevice {
|
||||
*/
|
||||
private TurnBackType typeStrategy;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
private boolean noStatus;
|
||||
|
||||
/**
|
||||
* 折返路径策略
|
||||
*/
|
||||
@ -153,6 +158,7 @@ public class Stand extends MayOutOfOrderDevice {
|
||||
this.runLevelTimeForever = false;
|
||||
this.parkingTime = -1;
|
||||
this.parkingAlwaysValid = false;
|
||||
this.noStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -20,7 +20,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class Station extends MapNamedElement {
|
||||
public class Station extends MayOutOfOrderDevice {
|
||||
public Station(String code, String name) {
|
||||
super(code, name, DeviceType.STATION);
|
||||
this.transferList = new ArrayList<>();
|
||||
@ -151,8 +151,14 @@ public class Station extends MapNamedElement {
|
||||
*/
|
||||
private Integer validDuration;
|
||||
|
||||
/**
|
||||
* 联锁机启动中
|
||||
*/
|
||||
private boolean interlockMachineStarting;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
if (this.vrIbp != null) {
|
||||
vrIbp.reset();
|
||||
}
|
||||
@ -167,6 +173,7 @@ public class Station extends MapNamedElement {
|
||||
this.applicant = null;
|
||||
this.apply2TheControlMode = null;
|
||||
this.validDuration = null;
|
||||
this.interlockMachineStarting = false;
|
||||
}
|
||||
|
||||
public List<Stand> getStandOf(boolean right) {
|
||||
@ -433,4 +440,36 @@ public class Station extends MapNamedElement {
|
||||
Station station = (Station) obj;
|
||||
return getCode().equals(station.getCode());
|
||||
}
|
||||
|
||||
public enum Fault implements DeviceFault {
|
||||
|
||||
/**
|
||||
* 联锁机故障
|
||||
*/
|
||||
INTERLOCK_MACHINE_FAULT {
|
||||
@Override
|
||||
public boolean apply(MayOutOfOrderDevice device) {
|
||||
Station station = (Station) device;
|
||||
if (station.getDeviceStation() != null) {
|
||||
station = station.getDeviceStation();
|
||||
}
|
||||
if (Objects.equals(this, station.getFault()))
|
||||
return false;
|
||||
station.setFault(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fix(MayOutOfOrderDevice device) {
|
||||
Station station = (Station) device;
|
||||
if (station.getDeviceStation() != null) {
|
||||
station = station.getDeviceStation();
|
||||
}
|
||||
if (!Objects.equals(this, device.getFault()))
|
||||
return;
|
||||
station.setInterlockMachineStarting(true);
|
||||
station.setFault(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -94,6 +94,11 @@ public class Switch extends MayOutOfOrderDevice {
|
||||
*/
|
||||
private boolean split;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
private boolean noStatus;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
@ -106,6 +111,7 @@ public class Switch extends MayOutOfOrderDevice {
|
||||
this.reversePosition = false;
|
||||
this.delayTime = 0;
|
||||
this.split = false;
|
||||
this.noStatus = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,14 +1,13 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.status;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.PSD;
|
||||
import club.joylink.rtss.simulation.cbtc.data.status.DeviceStatus;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.DeviceStatusVO;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.PSDStatusVO;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Objects;
|
||||
@ -34,11 +33,15 @@ public class PSDStatus extends DeviceStatus {
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private boolean interlockRelease;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean noStatus;
|
||||
|
||||
public PSDStatus(PSD psd) {
|
||||
super(psd.getCode(), psd.getDeviceType());
|
||||
this.close = psd.isCloseAndLock();
|
||||
// this.lock = psd.isLock();
|
||||
this.interlockRelease = psd.isInterlockRelease();
|
||||
this.noStatus = psd.isNoStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -60,6 +63,11 @@ public class PSDStatus extends DeviceStatus {
|
||||
status.setClose(this.interlockRelease);
|
||||
change = true;
|
||||
}
|
||||
if (!Objects.equals(this.noStatus, psd.isNoStatus())) {
|
||||
this.noStatus = psd.isNoStatus();
|
||||
status.setNoStatus(noStatus);
|
||||
change = true;
|
||||
}
|
||||
return change;
|
||||
}
|
||||
|
||||
|
@ -16,45 +16,71 @@ import java.util.Objects;
|
||||
@Getter
|
||||
public class SectionStatus extends DeviceStatus {
|
||||
|
||||
/** 是否封锁 */
|
||||
/**
|
||||
* 是否封锁
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean blockade;
|
||||
|
||||
/** 是否进路锁闭 */
|
||||
/**
|
||||
* 是否进路锁闭
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean routeLock;
|
||||
|
||||
/** 锁闭方向 */
|
||||
/**
|
||||
* 锁闭方向
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean lockRight;
|
||||
|
||||
/** 进路延续保护锁闭 */
|
||||
/**
|
||||
* 进路延续保护锁闭
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean overlapLock;
|
||||
|
||||
/** 通信车占用 */
|
||||
/**
|
||||
* 通信车占用
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean ctOccupied;
|
||||
|
||||
/** 非通信车占用 */
|
||||
/**
|
||||
* 非通信车占用
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean nctOccupied;
|
||||
|
||||
/**是否切除*/
|
||||
/**
|
||||
* 是否切除
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean cutOff;
|
||||
|
||||
/**是否失效*/
|
||||
/**
|
||||
* 是否失效
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean invalid;
|
||||
|
||||
/** 故障锁闭 */
|
||||
/**
|
||||
* 故障锁闭
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean faultLock;
|
||||
|
||||
/**最高限速*/
|
||||
/**
|
||||
* 最高限速
|
||||
*/
|
||||
private int speedUpLimit;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean noStatus;
|
||||
|
||||
private String fault;
|
||||
|
||||
public SectionStatus(Section section) {
|
||||
@ -69,6 +95,7 @@ public class SectionStatus extends DeviceStatus {
|
||||
this.invalid = section.isInvalid();
|
||||
this.faultLock = section.isFaultLock();
|
||||
this.speedUpLimit = section.getSpeedUpLimit();
|
||||
this.noStatus = section.isNoStatus();
|
||||
this.fault = section.getFault() == null ? null : section.getFault().toString();
|
||||
}
|
||||
|
||||
@ -127,6 +154,11 @@ public class SectionStatus extends DeviceStatus {
|
||||
status.setSpeedUpLimit(this.speedUpLimit);
|
||||
change = true;
|
||||
}
|
||||
if (!Objects.equals(this.noStatus, section.isNoStatus())) {
|
||||
this.noStatus = section.isNoStatus();
|
||||
status.setNoStatus(noStatus);
|
||||
change = true;
|
||||
}
|
||||
return change;
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.status;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Signal;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.DeviceStatusVO;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.SignalStatusVO;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Objects;
|
||||
@ -50,6 +50,9 @@ public class SignalStatus extends DeviceStatus {
|
||||
/** 信号机延时解锁倒计时 */
|
||||
private Integer remainTime;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean noStatus;
|
||||
|
||||
/**故障*/
|
||||
private String fault;
|
||||
|
||||
@ -62,6 +65,7 @@ public class SignalStatus extends DeviceStatus {
|
||||
this.yellowOpen = signal.isYellowOpen();
|
||||
this.redOpen = signal.isRedOpen();
|
||||
this.remainTime = signal.getDelayTime();
|
||||
this.noStatus = signal.isNoStatus();
|
||||
this.fault = Objects.nonNull(signal.getFault())?((Signal.SignalFault)signal.getFault()).name():null;
|
||||
}
|
||||
|
||||
@ -110,6 +114,11 @@ public class SignalStatus extends DeviceStatus {
|
||||
} else {
|
||||
status.setRemainTime(null);
|
||||
}
|
||||
if (!Objects.equals(this.noStatus, signal.isNoStatus())) {
|
||||
this.noStatus = signal.isNoStatus();
|
||||
status.setNoStatus(noStatus);
|
||||
change = true;
|
||||
}
|
||||
MayOutOfOrderDevice.DeviceFault fault = signal.getFault();
|
||||
if (!Objects.equals(this.fault, Objects.nonNull(fault) ? ((Signal.SignalFault) fault).name():null)) {
|
||||
if(Objects.isNull(fault)){
|
||||
|
@ -1,12 +1,12 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.status;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Stand;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.DeviceStatusVO;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.StandStatusVO;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@ -70,6 +70,9 @@ public class StandStatus extends DeviceStatus {
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean parkingAlwaysValid;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean noStatus;
|
||||
|
||||
/**故障*/
|
||||
private String fault;
|
||||
|
||||
@ -96,6 +99,7 @@ public class StandStatus extends DeviceStatus {
|
||||
this.runLevelTimeForever = stand.isRunLevelTimeForever();
|
||||
this.parkingTime = stand.getParkingTime();
|
||||
this.parkingAlwaysValid = stand.isParkingAlwaysValid();
|
||||
this.noStatus = stand.isNoStatus();
|
||||
this.fault = Objects.nonNull(stand.getFault())?((Stand.Fault)stand.getFault()).name():null;
|
||||
}
|
||||
|
||||
@ -176,6 +180,11 @@ public class StandStatus extends DeviceStatus {
|
||||
status.setParkingAlwaysValid(this.parkingAlwaysValid);
|
||||
change = true;
|
||||
}
|
||||
if (!Objects.equals(this.noStatus, stand.isNoStatus())) {
|
||||
this.noStatus = stand.isNoStatus();
|
||||
status.setNoStatus(noStatus);
|
||||
change = true;
|
||||
}
|
||||
MayOutOfOrderDevice.DeviceFault fault = stand.getFault();
|
||||
if (!Objects.equals(this.fault, Objects.nonNull(fault)?((Stand.Fault)fault).name():null)) {
|
||||
if(Objects.isNull(fault)) {
|
||||
|
@ -1,13 +1,13 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.status;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.DeviceStatusVO;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.SwitchStatusVO;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Objects;
|
||||
@ -58,6 +58,9 @@ public class SwitchStatus extends DeviceStatus {
|
||||
*/
|
||||
private int delayTime;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private boolean noStatus;
|
||||
|
||||
public SwitchStatus(Switch aSwitch) {
|
||||
super(aSwitch.getCode(), aSwitch.getDeviceType());
|
||||
this.singleLock = aSwitch.isSingleLock();
|
||||
@ -68,6 +71,7 @@ public class SwitchStatus extends DeviceStatus {
|
||||
this.reversePosition = aSwitch.isReversePosition();
|
||||
this.split = aSwitch.isSplit();
|
||||
this.delayTime = aSwitch.getDelayTime() / 1000;
|
||||
this.noStatus = aSwitch.isNoStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -116,6 +120,11 @@ public class SwitchStatus extends DeviceStatus {
|
||||
status.setDelayTime(dt);
|
||||
change = true;
|
||||
}
|
||||
if (!Objects.equals(this.noStatus, aSwitch.isNoStatus())) {
|
||||
this.noStatus = aSwitch.isNoStatus();
|
||||
status.setNoStatus(this.noStatus);
|
||||
change = true;
|
||||
}
|
||||
return change;
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.storage.device;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.PSD;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -38,6 +38,13 @@ public class StoragePSD extends StorageDevice {
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean interlockRelease;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
// public StoragePSD(PSD psd) {
|
||||
// super(psd.getCode());
|
||||
// if (!psd.isClose()) {
|
||||
@ -70,6 +77,10 @@ public class StoragePSD extends StorageDevice {
|
||||
change = true;
|
||||
storagePSD.setInterlockRelease(psd.isInterlockRelease());
|
||||
}
|
||||
if (psd.isNoStatus()) {
|
||||
change = true;
|
||||
storagePSD.setNoStatus(psd.isNoStatus());
|
||||
}
|
||||
|
||||
if (change) {
|
||||
return storagePSD;
|
||||
@ -84,5 +95,6 @@ public class StoragePSD extends StorageDevice {
|
||||
psd.setClose(close != null ? close : true);
|
||||
psd.setLock(lock != null ? lock : true);
|
||||
psd.setInterlockRelease(interlockRelease != null ? interlockRelease : false);
|
||||
psd.setNoStatus(noStatus != null ? noStatus : false);
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.storage.device;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Section;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -90,6 +90,13 @@ public class StorageSection extends StorageMayOutOfOrderDevice {
|
||||
*/
|
||||
private Integer delayTime;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public StorageSection(String code, MayOutOfOrderDevice.DeviceFault fault) {
|
||||
super(code, fault);
|
||||
}
|
||||
@ -158,6 +165,10 @@ public class StorageSection extends StorageMayOutOfOrderDevice {
|
||||
change = true;
|
||||
storageSection.setDelayTime(section.getDelayTime());
|
||||
}
|
||||
if (section.isNoStatus()) {
|
||||
change = true;
|
||||
storageSection.setNoStatus(section.isNoStatus());
|
||||
}
|
||||
if (section.isFault()) {
|
||||
change = true;
|
||||
}
|
||||
@ -183,5 +194,6 @@ public class StorageSection extends StorageMayOutOfOrderDevice {
|
||||
section.setFaultLock(faultLock != null ? faultLock : false);
|
||||
section.setSpeedUpLimit(speedUpLimit != null? speedUpLimit : -1);
|
||||
section.setDelayTime(delayTime != null ? delayTime : 0);
|
||||
section.setNoStatus(noStatus != null ? noStatus : false);
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.storage.device;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Route;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Signal;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -64,6 +64,13 @@ public class StorageSignal extends StorageMayOutOfOrderDevice {
|
||||
*/
|
||||
private Integer delayTime;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public StorageSignal(String code, MayOutOfOrderDevice.DeviceFault fault) {
|
||||
super(code, fault);
|
||||
}
|
||||
@ -102,6 +109,10 @@ public class StorageSignal extends StorageMayOutOfOrderDevice {
|
||||
change = true;
|
||||
storageSignal.setDelayTime(signal.getDelayTime());
|
||||
}
|
||||
if (signal.isNoStatus()) {
|
||||
change = true;
|
||||
storageSignal.setNoStatus(signal.isNoStatus());
|
||||
}
|
||||
if (signal.isFault()) {
|
||||
change = true;
|
||||
}
|
||||
@ -124,5 +135,6 @@ public class StorageSignal extends StorageMayOutOfOrderDevice {
|
||||
signal.setYellowOpen(yellowOpen != null ? yellowOpen : false);
|
||||
signal.setRedOpen(redOpen != null ? redOpen : true);
|
||||
signal.setDelayTime(delayTime != null ? delayTime : 0);
|
||||
signal.setNoStatus(noStatus != null ? noStatus : false);
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.storage.device;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Stand;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -102,6 +102,13 @@ public class StorageStand extends StorageMayOutOfOrderDevice {
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean parkingAlwaysValid;
|
||||
|
||||
/**
|
||||
* 无状态
|
||||
*/
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public StorageStand(String code, MayOutOfOrderDevice.DeviceFault fault) {
|
||||
super(code, fault);
|
||||
}
|
||||
@ -176,6 +183,10 @@ public class StorageStand extends StorageMayOutOfOrderDevice {
|
||||
change = true;
|
||||
storageStand.setParkingAlwaysValid(stand.isParkingAlwaysValid());
|
||||
}
|
||||
if (stand.isNoStatus()) {
|
||||
change = true;
|
||||
storageStand.setNoStatus(stand.isNoStatus());
|
||||
}
|
||||
if (stand.isFault()) {
|
||||
change = true;
|
||||
}
|
||||
@ -203,5 +214,6 @@ public class StorageStand extends StorageMayOutOfOrderDevice {
|
||||
stand.setRunLevelTimeForever(runLevelTimeForever != null ? runLevelTimeForever : false);
|
||||
stand.setParkingTime(parkingTime != null ? parkingTime : -1);
|
||||
stand.setParkingAlwaysValid(parkingAlwaysValid != null ? parkingAlwaysValid : false);
|
||||
stand.setNoStatus(noStatus != null ? noStatus : false);
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.storage.device;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MayOutOfOrderDevice;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumDeserializer;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -79,6 +79,10 @@ public class StorageSwitch extends StorageMayOutOfOrderDevice {
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean split;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
@JsonDeserialize(using = Boolean2NumDeserializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public StorageSwitch(String code, MayOutOfOrderDevice.DeviceFault fault) {
|
||||
super(code, fault);
|
||||
}
|
||||
@ -125,6 +129,10 @@ public class StorageSwitch extends StorageMayOutOfOrderDevice {
|
||||
change = true;
|
||||
storageSwitch.setSplit(s.isSplit());
|
||||
}
|
||||
if (s.isNoStatus()) {
|
||||
change = true;
|
||||
storageSwitch.setNoStatus(s.isNoStatus());
|
||||
}
|
||||
if (s.isFault()) {
|
||||
change = true;
|
||||
}
|
||||
@ -148,5 +156,6 @@ public class StorageSwitch extends StorageMayOutOfOrderDevice {
|
||||
s.setReversePosition(reversePosition != null ? reversePosition : false);
|
||||
s.setDelayTime(delayTime != null ? delayTime : 0);
|
||||
s.setSplit(split != null ? split : false);
|
||||
s.setNoStatus(noStatus != null ? noStatus : false);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.PSD;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -26,6 +26,9 @@ public class PSDStatusVO extends DeviceStatusVO {
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean interlockRelease;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public PSDStatusVO(PSD psd) {
|
||||
super(psd.getCode(), psd.getDeviceType());
|
||||
}
|
||||
|
@ -52,6 +52,9 @@ public class SectionStatusVO extends DeviceStatusVO {
|
||||
/**最高限速*/
|
||||
private Integer speedUpLimit;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
private String fault;
|
||||
|
||||
public SectionStatusVO(Section section) {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Signal;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -44,6 +44,9 @@ public class SignalStatusVO extends DeviceStatusVO{
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS)
|
||||
private Integer remainTime;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
/** 信号机故障 */
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS)
|
||||
private String fault;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Stand;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -67,6 +67,9 @@ public class StandStatusVO extends DeviceStatusVO {
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean parkingAlwaysValid;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
/**故障*/
|
||||
@JsonInclude(JsonInclude.Include.ALWAYS)
|
||||
private String fault;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
||||
import club.joylink.rtss.util.jsonSerialize.Boolean2NumSerializer;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -47,6 +47,9 @@ public class SwitchStatusVO extends DeviceStatusVO {
|
||||
@JsonInclude
|
||||
private Integer delayTime;
|
||||
|
||||
@JsonSerialize(using = Boolean2NumSerializer.class)
|
||||
private Boolean noStatus;
|
||||
|
||||
public SwitchStatusVO(Switch aSwitch) {
|
||||
super(aSwitch.getCode(), aSwitch.getDeviceType());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user