实现<强扳道岔>操作;进路正常解锁道岔时,添加<尝试解锁联动道岔和计轴关联道岔>逻辑
This commit is contained in:
parent
d6a5120ccb
commit
3742523aee
@ -8,6 +8,7 @@ import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||
import club.joylink.rtss.simulation.cbtc.data.support.SignalApproachMessage;
|
||||
import club.joylink.rtss.simulation.cbtc.data.support.TrainStopMessage;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.TrainInfo;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealitySwitch;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -458,6 +459,13 @@ public class CiApiServiceImpl implements CiApiService {
|
||||
|
||||
@Override
|
||||
public void switchForceTurn(Simulation simulation, String switchCode, Boolean normal) {
|
||||
|
||||
Switch aSwitch = simulation.getRepository().getByCode(switchCode, Switch.class);
|
||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(!aSwitch.isLocked(), String.format("道岔[%s]锁闭,无法转动", aSwitch.getCode()));
|
||||
VirtualRealitySwitch vrSwitch = aSwitch.getVirtualSwitch();
|
||||
if (normal == null) {
|
||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertNotTrue(vrSwitch.isLoss(), "道岔不在定反位,不能转动");
|
||||
normal = vrSwitch.isReverse();
|
||||
}
|
||||
vrSwitch.startSetting(normal);
|
||||
}
|
||||
}
|
||||
|
@ -693,6 +693,7 @@ public class RouteService {
|
||||
switchList.forEach(switchElement -> {
|
||||
Switch aSwitch = switchElement.getASwitch();
|
||||
aSwitch.routeUnlock();
|
||||
aSwitch.overlapUnLock();
|
||||
});
|
||||
}
|
||||
// 进路侧防取消锁闭
|
||||
@ -1043,10 +1044,20 @@ public class RouteService {
|
||||
SwitchElement switchElement = route.getRouteSwitchElement(relSwitch);
|
||||
section.routeUnlocking(right);
|
||||
relSwitch.routeUnlock();
|
||||
relSwitch.overlapUnLock();
|
||||
RouteFls routeFls = route.getRouteFlsOfSwitch(relSwitch);
|
||||
if (routeFls != null) {
|
||||
routeFls.unlock();
|
||||
}
|
||||
//检查道岔的联动道岔和计轴关联道岔是否可以解锁
|
||||
List<Switch> switches = Arrays.asList(null, relSwitch.queryAxleRelatedOtherSwitch());
|
||||
for (Switch linkedSwitch : switches) {
|
||||
if (linkedSwitch == null)
|
||||
continue;
|
||||
if (linkedSwitch.getAllSections().stream().noneMatch(Section::isRouteLock)) { //道岔关联的所有区段都没有进路锁闭
|
||||
linkedSwitch.routeUnlock();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
section.routeUnlocking(right);
|
||||
}
|
||||
|
@ -232,7 +232,6 @@ public class Switch extends MayOutOfOrderDevice {
|
||||
|
||||
public void routeUnlock() {
|
||||
this.routeLock = false;
|
||||
this.overlapLock = false;
|
||||
}
|
||||
|
||||
public void fpLock() {
|
||||
@ -367,6 +366,20 @@ public class Switch extends MayOutOfOrderDevice {
|
||||
(!normal && SwitchFault.REVERSE_SPLIT.equals(this.getFault())));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取定位的道岔区段列表
|
||||
*/
|
||||
public List<Section> getNormalSections() {
|
||||
return Arrays.asList(a, b);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取道岔关联的所有区段
|
||||
*/
|
||||
public List<Section> getAllSections() {
|
||||
return List.of(a, b, c);
|
||||
}
|
||||
|
||||
public enum SwitchFault implements DeviceFault {
|
||||
/**
|
||||
* 道岔挤岔
|
||||
@ -421,11 +434,4 @@ public class Switch extends MayOutOfOrderDevice {
|
||||
public boolean isLoss() {
|
||||
return !this.isNormalPosition() && !this.isReversePosition();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取定位的道岔区段列表
|
||||
*/
|
||||
public List<Section> getNormalSections() {
|
||||
return Arrays.asList(a, b);
|
||||
}
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ public class VirtualRealitySwitch extends VirtualRealityDevice {
|
||||
* 是否失表
|
||||
* @return
|
||||
*/
|
||||
private boolean isLoss() {
|
||||
public boolean isLoss() {
|
||||
return !this.isNormal() && !this.isReverse();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user