[修改]人解进路功能增加关闭引导信号功能(成都三)
All checks were successful
CI / Docker-Build (push) Successful in 2m14s

[新增]首区段占用时,办理引导进路延时15秒后关闭引导信号
This commit is contained in:
thesai 2024-10-12 17:30:21 +08:00
parent 3c9aeb82f6
commit 508b8fa086
3 changed files with 572 additions and 501 deletions

View File

@ -246,12 +246,12 @@ public class CiApiServiceImpl2 implements CiApiService {
@Override @Override
public void humanCancel(Simulation simulation, String routeCode) { public void humanCancel(Simulation simulation, String routeCode) {
Route route = simulation.getRepository().getByCode(routeCode, Route.class); Route route = simulation.getRepository().getByCode(routeCode, Route.class);
// if (simulation.getRepository().getConfig().isRailway()) { if (route.getStart().isGuideAspect()) { // 根据成都三引导解锁逻辑修改
// BusinessExceptionAssertEnum.OPERATION_FAIL.assertTrue(route.isApproachLock(), signalService.closeRoute(simulation, route.getStart());
// "进路未接近锁闭,不能人解"); } else {
// }
this.routeService.delayUnlockStart(simulation, route, route.getStart()); this.routeService.delayUnlockStart(simulation, route, route.getStart());
} }
}
@Override @Override
public void sectionFaultUnlock(Simulation simulation, String sectionCode) { public void sectionFaultUnlock(Simulation simulation, String sectionCode) {
@ -504,6 +504,10 @@ public class CiApiServiceImpl2 implements CiApiService {
signal.guideDelayStart(); signal.guideDelayStart();
} }
} }
if (repository.getConfig().isGuideDelayCloseWhenFirstSectionOccupied()
&& signal.isGuideAspect()) {
signal.guideDelayStart();
}
// if (signal.getGuideRemain() > 0) { // if (signal.getGuideRemain() > 0) {
// signal.setGuideRemain(0); // signal.setGuideRemain(0);
// } else { // } else {

View File

@ -1,20 +1,22 @@
package club.joylink.rtss.simulation.cbtc.data.map; package club.joylink.rtss.simulation.cbtc.data.map;
import static club.joylink.rtss.simulation.cbtc.member.SimulationMember.Type.DISPATCHER;
import static club.joylink.rtss.simulation.cbtc.member.SimulationMember.Type.ELECTRIC_DISPATCHER;
import static club.joylink.rtss.simulation.cbtc.member.SimulationMember.Type.MAINTAINER;
import static club.joylink.rtss.simulation.cbtc.member.SimulationMember.Type.STATION_SUPERVISOR;
import club.joylink.rtss.simulation.cbtc.constant.RunLevel; import club.joylink.rtss.simulation.cbtc.constant.RunLevel;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember; import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.vo.map.MapFunctionConfig; import club.joylink.rtss.vo.map.MapFunctionConfig;
import club.joylink.rtss.vo.map.RealLineConfigVO; import club.joylink.rtss.vo.map.RealLineConfigVO;
import lombok.Getter;
import lombok.Setter;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import lombok.Getter;
import static club.joylink.rtss.simulation.cbtc.member.SimulationMember.Type.*; import lombok.Setter;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
/** /**
* 地图配置 * 地图配置
@ -193,40 +195,64 @@ public class MapConfig {
*/ */
private boolean holdCommandIgnoreControlMode; private boolean holdCommandIgnoreControlMode;
/** 共享紧急关闭效果的车站 */ /**
* 共享紧急关闭效果的车站
*/
private Set<String> sharingECStations; private Set<String> sharingECStations;
/** 取消联锁条件不满足的进路时需要延时解锁 */ /**
* 取消联锁条件不满足的进路时需要延时解锁
*/
private boolean delayWhenCancelRouteWithAbnormalInterlock; private boolean delayWhenCancelRouteWithAbnormalInterlock;
/** 车次号的位数 */ /**
* 车次号的位数
*/
private int figuresOfTripNumber; private int figuresOfTripNumber;
/** 服务号的位数 */ /**
* 服务号的位数
*/
private int figuresOfServiceNumber; private int figuresOfServiceNumber;
/** 设置头码车时检查方向 */ /**
* 设置头码车时检查方向
*/
private boolean checkDirectionWhenSetHead; private boolean checkDirectionWhenSetHead;
/** 转换轨进路只能通过故障解锁来取消 */ /**
* 转换轨进路只能通过故障解锁来取消
*/
private boolean transferRouteCanOnlyFaultUnlock; private boolean transferRouteCanOnlyFaultUnlock;
/** 头码车抵达目的地后变为人工车 */ /**
* 头码车抵达目的地后变为人工车
*/
private boolean setManualWhenHeadTrainArriveTarget; private boolean setManualWhenHeadTrainArriveTarget;
/** 进路默认开启冲突检测 */ /**
* 进路默认开启冲突检测
*/
private boolean routeDefaultCheckConflict; private boolean routeDefaultCheckConflict;
/** 处理停车场/车辆段逻辑 */ /**
* 处理停车场/车辆段逻辑
*/
private boolean handleDepot; private boolean handleDepot;
/** 运行图中车次号是否唯一 */ /**
* 运行图中车次号是否唯一
*/
private boolean tripNumberIsUnique; private boolean tripNumberIsUnique;
/** 站台折返策略不生效 */ /**
* 站台折返策略不生效
*/
private boolean standTbStrategyIsInvalid; private boolean standTbStrategyIsInvalid;
/** 根据服务号更新车次计划(西安三提出,抽线之后,后续列车还跑原来的服务,不会自动顶上) */ /**
* 根据服务号更新车次计划西安三提出抽线之后后续列车还跑原来的服务不会自动顶上
*/
private boolean updateTripPlanByServiceNumber; private boolean updateTripPlanByServiceNumber;
/** /**
@ -236,8 +262,7 @@ public class MapConfig {
/** /**
* 对信号机封锁操作是否影响信号显示 * 对信号机封锁操作是否影响信号显示
* <p> * <p>
* true-封锁信号机会使信号机显示禁止色<br> * true-封锁信号机会使信号机显示禁止色<br> false-封锁信号机不会影响信号机显示
* false-封锁信号机不会影响信号机显示
*/ */
private boolean signalBolckOptReflectSignal; private boolean signalBolckOptReflectSignal;
@ -260,8 +285,14 @@ public class MapConfig {
*/ */
private boolean manualTrainDefaultStop; private boolean manualTrainDefaultStop;
/**
* 办理引导进路时如果进路首区段占用引导信号15秒后关闭
*/
private boolean guideDelayCloseWhenFirstSectionOccupied;
private Set<SimulationMember.Type> needConfirmConnectMembers = private Set<SimulationMember.Type> needConfirmConnectMembers =
Stream.of(DISPATCHER, STATION_SUPERVISOR, MAINTAINER, ELECTRIC_DISPATCHER).collect(Collectors.toSet()); Stream.of(DISPATCHER, STATION_SUPERVISOR, MAINTAINER, ELECTRIC_DISPATCHER)
.collect(Collectors.toSet());
public MapConfig() { public MapConfig() {
this.lockFirst = false; this.lockFirst = false;
@ -290,8 +321,10 @@ public class MapConfig {
setParkingSM(configVO.getParkingSM()); setParkingSM(configVO.getParkingSM());
setRmAtpSpeed(configVO.getRmAtpSpeed() / 3.6f); setRmAtpSpeed(configVO.getRmAtpSpeed() / 3.6f);
setUrmAtpSpeed(configVO.getUrmAtpSpeed() / 3.6f); setUrmAtpSpeed(configVO.getUrmAtpSpeed() / 3.6f);
setCancelAtsControlOfAllRoutesWhenCancelRoute(configVO.isCancelAtsControlOfAllRoutesWhenCancelRoute()); setCancelAtsControlOfAllRoutesWhenCancelRoute(
setSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger(configVO.isSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger()); configVO.isCancelAtsControlOfAllRoutesWhenCancelRoute());
setSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger(
configVO.isSignalHumanControlBeforeSetAtsControlOrCIAutoTrigger());
setAllowEarlyDepartureWhenHoldTrain(configVO.isAllowEarlyDepartureWhenHoldTrain()); setAllowEarlyDepartureWhenHoldTrain(configVO.isAllowEarlyDepartureWhenHoldTrain());
setEBWhenCancelRoute(configVO.isEBWhenCancelRoute()); setEBWhenCancelRoute(configVO.isEBWhenCancelRoute());
setAdjustOperationAutomatically(configVO.isAdjustOperationAutomatically()); setAdjustOperationAutomatically(configVO.isAdjustOperationAutomatically());
@ -302,9 +335,11 @@ public class MapConfig {
setBlockadeCommandOnlyValidInStandbyMode(configVO.isBlockadeCommandOnlyValidInStandbyMode()); setBlockadeCommandOnlyValidInStandbyMode(configVO.isBlockadeCommandOnlyValidInStandbyMode());
// setSomeCommandNeedInit(configVO.isSwitchBlockadeCommandNeedInit()); // setSomeCommandNeedInit(configVO.isSwitchBlockadeCommandNeedInit());
setStationPreResetBeforeAxlePreReset(configVO.isStationPreResetBeforeAxlePreReset()); setStationPreResetBeforeAxlePreReset(configVO.isStationPreResetBeforeAxlePreReset());
setSwitchTurnOperationCanRecoverSplitFault(configVO.isSwitchTurnOperationCanRecoverSplitFault()); setSwitchTurnOperationCanRecoverSplitFault(
configVO.isSwitchTurnOperationCanRecoverSplitFault());
setHoldCommandIgnoreControlMode(configVO.isHoldCommandIgnoreControlMode()); setHoldCommandIgnoreControlMode(configVO.isHoldCommandIgnoreControlMode());
setDelayWhenCancelRouteWithAbnormalInterlock(configVO.isDelayWhenCancelRouteWithAbnormalInterlock()); setDelayWhenCancelRouteWithAbnormalInterlock(
configVO.isDelayWhenCancelRouteWithAbnormalInterlock());
setFiguresOfTripNumber(configVO.getFiguresOfTripNumber()); setFiguresOfTripNumber(configVO.getFiguresOfTripNumber());
setFiguresOfServiceNumber(configVO.getFiguresOfServiceNumber()); setFiguresOfServiceNumber(configVO.getFiguresOfServiceNumber());
setCheckDirectionWhenSetHead(configVO.isCheckDirectionWhenSetHead()); setCheckDirectionWhenSetHead(configVO.isCheckDirectionWhenSetHead());
@ -319,12 +354,15 @@ public class MapConfig {
setSFUCanOnlyApplyForFaultLockSection(configVO.isSFUCanOnlyApplyForFaultLockSection()); setSFUCanOnlyApplyForFaultLockSection(configVO.isSFUCanOnlyApplyForFaultLockSection());
setRouteCanSetWhenSwitchFault(configVO.isRouteCanSetWhenSwitchFault()); setRouteCanSetWhenSwitchFault(configVO.isRouteCanSetWhenSwitchFault());
setManualTrainDefaultStop(configVO.isManualTrainDefaultStop()); setManualTrainDefaultStop(configVO.isManualTrainDefaultStop());
setGuideDelayCloseWhenFirstSectionOccupied(
configVO.isGuideDelayCloseWhenFirstSectionOccupied());
} }
} }
public void copyConfigBy(MapFunctionConfig mapFunctionConfig) { public void copyConfigBy(MapFunctionConfig mapFunctionConfig) {
if (mapFunctionConfig == null) if (mapFunctionConfig == null) {
return; return;
}
this.hasCTC = mapFunctionConfig.isHasCTC(); this.hasCTC = mapFunctionConfig.isHasCTC();
this.hasTDCS = mapFunctionConfig.isHasTDCS(); this.hasTDCS = mapFunctionConfig.isHasTDCS();
} }
@ -334,7 +372,8 @@ public class MapConfig {
if (noParkingSM.contains("-")) { if (noParkingSM.contains("-")) {
String[] split = noParkingSM.split("-"); String[] split = noParkingSM.split("-");
if (split.length == 2) { if (split.length == 2) {
return Integer.parseInt(serviceNumber) >= Integer.parseInt(split[0]) && Integer.parseInt(serviceNumber) <= Integer.parseInt(split[1]); return Integer.parseInt(serviceNumber) >= Integer.parseInt(split[0])
&& Integer.parseInt(serviceNumber) <= Integer.parseInt(split[1]);
} }
} }
} }
@ -346,7 +385,8 @@ public class MapConfig {
if (parkingSM.contains("-")) { if (parkingSM.contains("-")) {
String[] split = parkingSM.split("-"); String[] split = parkingSM.split("-");
if (split.length == 2) { if (split.length == 2) {
return Integer.parseInt(serviceNumber) >= Integer.parseInt(split[0]) && Integer.parseInt(serviceNumber) <= Integer.parseInt(split[1]); return Integer.parseInt(serviceNumber) >= Integer.parseInt(split[0])
&& Integer.parseInt(serviceNumber) <= Integer.parseInt(split[1]);
} }
} }
} }
@ -375,12 +415,14 @@ public class MapConfig {
} }
public boolean isSharingECStation(String stationCode) { public boolean isSharingECStation(String stationCode) {
if (CollectionUtils.isEmpty(this.sharingECStations)) if (CollectionUtils.isEmpty(this.sharingECStations)) {
return false; return false;
}
for (String code : sharingECStations) { for (String code : sharingECStations) {
if (code.equals(stationCode)) if (code.equals(stationCode)) {
return true; return true;
} }
}
return false; return false;
} }
@ -396,6 +438,7 @@ public class MapConfig {
/** /**
* 直接取消 * 直接取消
*/ */
DIRECT,; DIRECT,
;
} }
} }

View File

@ -186,34 +186,54 @@ public class RealLineConfigVO {
*/ */
private boolean holdCommandIgnoreControlMode; private boolean holdCommandIgnoreControlMode;
/** 取消联锁条件不满足的进路时需要延时解锁 */ /**
* 取消联锁条件不满足的进路时需要延时解锁
*/
private boolean delayWhenCancelRouteWithAbnormalInterlock; private boolean delayWhenCancelRouteWithAbnormalInterlock;
/** 车次号的位数 */ /**
* 车次号的位数
*/
private int figuresOfTripNumber = 4; private int figuresOfTripNumber = 4;
/** 服务号的位数 */ /**
* 服务号的位数
*/
private int figuresOfServiceNumber = 3; private int figuresOfServiceNumber = 3;
/** 设置头码车时检查方向 */ /**
* 设置头码车时检查方向
*/
private boolean checkDirectionWhenSetHead; private boolean checkDirectionWhenSetHead;
/** 转换轨进路只能通过故障解锁来取消 */ /**
* 转换轨进路只能通过故障解锁来取消
*/
private boolean transferRouteCanOnlyFaultUnlock; private boolean transferRouteCanOnlyFaultUnlock;
/** 头码车抵达目的地后变为人工车 */ /**
* 头码车抵达目的地后变为人工车
*/
private boolean setManualWhenHeadTrainArriveTarget; private boolean setManualWhenHeadTrainArriveTarget;
/** 进路默认开启冲突检测 */ /**
* 进路默认开启冲突检测
*/
private boolean routeDefaultCheckConflict; private boolean routeDefaultCheckConflict;
/** 运行图中车次号是否唯一 */ /**
* 运行图中车次号是否唯一
*/
private boolean tripNumberIsUnique; private boolean tripNumberIsUnique;
/** 站台折返策略不生效 */ /**
* 站台折返策略不生效
*/
private boolean standTbStrategyIsInvalid; private boolean standTbStrategyIsInvalid;
/** 根据服务号更新车次计划 */ /**
* 根据服务号更新车次计划
*/
private boolean updateTripPlanByServiceNumber; private boolean updateTripPlanByServiceNumber;
/** /**
@ -223,8 +243,7 @@ public class RealLineConfigVO {
/** /**
* 对信号机封锁操作是否影响信号显示 * 对信号机封锁操作是否影响信号显示
* <p> * <p>
* true-封锁信号机会使信号机显示禁止色<br> * true-封锁信号机会使信号机显示禁止色<br> false-封锁信号机不会影响信号机显示
* false-封锁信号机不会影响信号机显示
*/ */
private boolean signalBolckOptReflectSignal = true; private boolean signalBolckOptReflectSignal = true;
@ -245,6 +264,11 @@ public class RealLineConfigVO {
*/ */
private boolean manualTrainDefaultStop; private boolean manualTrainDefaultStop;
/**
* 办理引导进路时如果进路首区段占用引导信号15秒后关闭
*/
private boolean guideDelayCloseWhenFirstSectionOccupied;
public static RealLineConfigVO parseJsonStr(String configData) { public static RealLineConfigVO parseJsonStr(String configData) {
if (StringUtils.hasText(configData)) { if (StringUtils.hasText(configData)) {
return JsonUtils.read(configData, RealLineConfigVO.class); return JsonUtils.read(configData, RealLineConfigVO.class);