Revert "Revert "增加大铁发车进路信号受离去区段占用影响逻辑与数据""
This reverts commit 4654dc4b71
.
This commit is contained in:
parent
b892606e76
commit
f0ca9e9c77
@ -571,10 +571,36 @@ public class DraftMapRouteServiceImpl implements DraftMapRouteService {
|
|||||||
route.setSwitchList(switches);
|
route.setSwitchList(switches);
|
||||||
if (startSignal.getSection().isStandTrack()) { //发车进路
|
if (startSignal.getSection().isStandTrack()) { //发车进路
|
||||||
route.setAspect(SignalAspect.G);
|
route.setAspect(SignalAspect.G);
|
||||||
|
route.setType(Route.Type.DEPARTURE);
|
||||||
|
if (endSignal.isDepartureSignal()) { //正向发车进路
|
||||||
|
Section leaveSection = endSignal.getSection();
|
||||||
|
LinkedHashMap<Section, SignalAspect> leaveSectionWithAspectMap = new LinkedHashMap<>();
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
if (!Objects.equals(leaveSection.getDeviceStation(), startSignal.getDeviceStation())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (i) { //不同联锁显示可能不同,后续根据实际情况再处理
|
||||||
|
case 0:
|
||||||
|
leaveSectionWithAspectMap.put(leaveSection, startSignal.getDefaultAspect());
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
leaveSectionWithAspectMap.put(leaveSection, SignalAspect.Y);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
leaveSectionWithAspectMap.put(leaveSection, SignalAspect.GY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
leaveSection = leaveSection.findNextRunningSectionBaseRealSwitch(startSignal.isRight());
|
||||||
|
if (leaveSection == null)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
route.setLeaveSectionWithAspectMap(leaveSectionWithAspectMap);
|
||||||
|
}
|
||||||
} else { //接车进路
|
} else { //接车进路
|
||||||
SignalAspect aspect;
|
SignalAspect aspect;
|
||||||
aspect = route.hasReverseSwitch() ? SignalAspect.YY : SignalAspect.Y;
|
aspect = route.hasReverseSwitch() ? SignalAspect.YY : SignalAspect.Y;
|
||||||
route.setAspect(aspect);
|
route.setAspect(aspect);
|
||||||
|
route.setType(Route.Type.RECEIVING);
|
||||||
}
|
}
|
||||||
String startEndSignalCode = route.getStart().getCode() + route.getDestination().getCode();
|
String startEndSignalCode = route.getStart().getCode() + route.getDestination().getCode();
|
||||||
Route otherRoute = routeMap.get(startEndSignalCode); //同始、终端信号机进路
|
Route otherRoute = routeMap.get(startEndSignalCode); //同始、终端信号机进路
|
||||||
|
@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@ -154,19 +155,31 @@ public class CiLogic {
|
|||||||
start.setGuideRemain(guideRemain);
|
start.setGuideRemain(guideRemain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (route.isLock()) {
|
if (route.isLock() && !route.isSetting()) {
|
||||||
ciService.interlockCheck(simulation, route);
|
ciService.interlockCheck(simulation, route);
|
||||||
|
if (!config.isRailway()) {
|
||||||
if (route.isOpenMain() && !start.isSupportMainAspect()) {//与联锁显示不同,关闭信号
|
if (route.isOpenMain() && !start.isSupportMainAspect()) {//与联锁显示不同,关闭信号
|
||||||
CiLogic.log.info("进路[{}]联锁条件不满足,关闭信号", route.debugStr());
|
CiLogic.log.info("进路[{}]联锁条件不满足,关闭信号", route.debugStr());
|
||||||
signalControlService.tryControlSignalAspectAccordingLevel(simulation,
|
signalControlService.tryControlSignalAspectAccordingLevel(simulation,
|
||||||
start, start.getDefaultAspect());
|
start, start.getDefaultAspect());
|
||||||
if (config.isRailway()) //大铁线路暂时限制自动重开信号
|
|
||||||
start.setForbidden(true);
|
|
||||||
} else if (start.isDefaultAspect() && !start.isForbidden() && !start.isBlockade() && start.isSupportMainAspect()) {
|
} else if (start.isDefaultAspect() && !start.isForbidden() && !start.isBlockade() && start.isSupportMainAspect()) {
|
||||||
CiLogic.log.info("进路[{}]联锁条件满足,开放信号", route.debugStr());
|
CiLogic.log.info("进路[{}]联锁条件满足,开放信号", route.debugStr());
|
||||||
signalControlService.tryControlSignalAspectAccordingLevel(simulation,
|
signalControlService.tryControlSignalAspectAccordingLevel(simulation,
|
||||||
start, route.getAspect());
|
start, route.getAspect());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (route.isOpenMain() && !start.isSupportMainAspect()) {//与联锁显示不同,关闭信号
|
||||||
|
CiLogic.log.info("进路[{}]联锁条件不满足,关闭信号", route.debugStr());
|
||||||
|
signalControlService.tryControlSignalAspectAccordingLevel(simulation,
|
||||||
|
start, start.getDefaultAspect());
|
||||||
|
start.setForcePhysical(true); //大铁线路暂时限制自动重开信号
|
||||||
|
} else if (!start.isForbidden() && !start.isBlockade() && start.isSupportMainAspect()) {
|
||||||
|
SignalAspect aspect = route.getAspectOfRailway();
|
||||||
|
if (!Objects.equals(route.getStart().getAspect(), aspect)) {
|
||||||
|
signalControlService.tryControlSignalAspectAccordingLevel(simulation, start, aspect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 进路延续保护办理判断
|
// 进路延续保护办理判断
|
||||||
if (route.isSettingOverlap()) {
|
if (route.isSettingOverlap()) {
|
||||||
|
@ -2,6 +2,7 @@ package club.joylink.rtss.simulation.cbtc.CI.device;
|
|||||||
|
|
||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SimulationConstants;
|
import club.joylink.rtss.simulation.cbtc.constant.SimulationConstants;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SimulationModule;
|
import club.joylink.rtss.simulation.cbtc.constant.SimulationModule;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SwitchIndication;
|
import club.joylink.rtss.simulation.cbtc.constant.SwitchIndication;
|
||||||
@ -256,13 +257,25 @@ public class CiRouteService {
|
|||||||
this.flsSetting(simulation, route.getFlsList());
|
this.flsSetting(simulation, route.getFlsList());
|
||||||
// 检查信号开放条件,开信号
|
// 检查信号开放条件,开信号
|
||||||
this.ciService.interlockCheck(simulation, route);
|
this.ciService.interlockCheck(simulation, route);
|
||||||
if (!route.getStart().isBlockade()) {
|
SignalAspect aspect = null;
|
||||||
this.signalControlService.tryControlSignalAspectAccordingLevel(simulation, route.getStart(), route.getAspect());
|
boolean routeRight = route.isRight();
|
||||||
}
|
|
||||||
if (route.isGuideSetting()) {
|
if (route.isGuideSetting()) {
|
||||||
this.signalControlService.tryControlSignalAspectAccordingLevel(simulation, route.getStart(), route.getStart().getGuideAspect());
|
aspect = route.getStart().getGuideAspect();
|
||||||
|
} else if (route.getStart().isBlockade()) {
|
||||||
|
aspect = route.getStart().getDefaultAspect();
|
||||||
|
} else {
|
||||||
|
aspect = route.getAspect();
|
||||||
|
if (config.isRailway() && route.isDepartureRoute()) {
|
||||||
|
aspect = route.getAspectOfRailway();
|
||||||
}
|
}
|
||||||
if ((route.getAspect().equals(route.getStart().getAspect())) ||
|
}
|
||||||
|
this.signalControlService.tryControlSignalAspectAccordingLevel(simulation, route.getStart(), aspect);
|
||||||
|
if (config.isRailway()) {
|
||||||
|
if (route.isGuideSetting() && route.getStart().isGuideAspect()
|
||||||
|
|| !route.getStart().isDefaultAspect()) {
|
||||||
|
route.settingOver();
|
||||||
|
}
|
||||||
|
} else if ((route.getAspect().equals(route.getStart().getAspect())) ||
|
||||||
(route.isGuideSetting() && route.getStart().isGuideAspect())) {
|
(route.isGuideSetting() && route.getStart().isGuideAspect())) {
|
||||||
log.debug("进路[{}]信号开放,办理结束", route.debugStr());
|
log.debug("进路[{}]信号开放,办理结束", route.debugStr());
|
||||||
route.settingOver();
|
route.settingOver();
|
||||||
|
@ -325,6 +325,11 @@ public class InterlockBuilder2 {
|
|||||||
List<RouteFls> flsList = flsListVO.stream().map(flsMap::get).collect(Collectors.toList());
|
List<RouteFls> flsList = flsListVO.stream().map(flsMap::get).collect(Collectors.toList());
|
||||||
route.setFlsList(flsList);
|
route.setFlsList(flsList);
|
||||||
}
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(routeVO.getLeaveSectionWithAspectMap())) {
|
||||||
|
LinkedHashMap<Section, SignalAspect> map = routeVO.getLeaveSectionWithAspectMap().entrySet().stream()
|
||||||
|
.collect(Collectors.toMap(entry -> (Section) elementMap.get(entry.getKey()), Map.Entry::getValue, (v1, v2) -> v2, LinkedHashMap::new));
|
||||||
|
route.setLeaveSectionWithAspectMap(map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Signal start = (Signal) elementMap.get(routeVO.getStartSignalCode());
|
Signal start = (Signal) elementMap.get(routeVO.getStartSignalCode());
|
||||||
Signal destination = null;
|
Signal destination = null;
|
||||||
|
@ -149,6 +149,11 @@ public class Route extends MapNamedElement {
|
|||||||
*/
|
*/
|
||||||
private Type type;
|
private Type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当离去区段占用时的信号显示
|
||||||
|
*/
|
||||||
|
private LinkedHashMap<Section, SignalAspect> leaveSectionWithAspectMap;
|
||||||
|
|
||||||
// ------------------状态属性---------------------
|
// ------------------状态属性---------------------
|
||||||
/**
|
/**
|
||||||
* ats自动控制
|
* ats自动控制
|
||||||
@ -772,6 +777,24 @@ public class Route extends MapNamedElement {
|
|||||||
return Type.RECEIVING.equals(type) || Type.DEPARTURE.equals(type);
|
return Type.RECEIVING.equals(type) || Type.DEPARTURE.equals(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDepartureRoute() {
|
||||||
|
return Type.DEPARTURE.equals(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取大铁进路的信号显示。
|
||||||
|
*/
|
||||||
|
public SignalAspect getAspectOfRailway() {
|
||||||
|
if (!CollectionUtils.isEmpty(leaveSectionWithAspectMap)) {
|
||||||
|
for (Map.Entry<Section, SignalAspect> entry : leaveSectionWithAspectMap.entrySet()) {
|
||||||
|
if (entry.getKey().isOccupied()) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getAspect();
|
||||||
|
}
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
RECEIVING, //接车进路
|
RECEIVING, //接车进路
|
||||||
DEPARTURE, //发车进路
|
DEPARTURE, //发车进路
|
||||||
|
@ -257,8 +257,8 @@ public class SimulationRobotService {
|
|||||||
SectionPosition signalPosition = signal.getPosition();
|
SectionPosition signalPosition = signal.getPosition();
|
||||||
if (vrSignal != null
|
if (vrSignal != null
|
||||||
&& (i != 0 || signalPosition.isAheadOf(headPosition, right))) { //有实体信号机且列车未越过信号机
|
&& (i != 0 || signalPosition.isAheadOf(headPosition, right))) { //有实体信号机且列车未越过信号机
|
||||||
if (Objects.equals(vrSignal.getAspect(), vrSignal.getModel().getDefaultAspect()) //禁止信号
|
if (Objects.equals(vrSignal.getAspect(), signal.getDefaultAspect()) //禁止信号
|
||||||
|| Objects.equals(vrSignal.getAspect(), vrSignal.getModel().getGuideAspect())) { //引导信号
|
|| Objects.equals(vrSignal.getAspect(), signal.getGuideAspect())) { //引导信号
|
||||||
if (!Objects.equals(signal, throughSignal) || !Objects.equals(vrSignal.getAspect(), throughAspect)) {
|
if (!Objects.equals(signal, throughSignal) || !Objects.equals(vrSignal.getAspect(), throughAspect)) {
|
||||||
targetPosition = CalculateService
|
targetPosition = CalculateService
|
||||||
.calculateNextPositionByStartAndLen(signalPosition, !right, 2, true);
|
.calculateNextPositionByStartAndLen(signalPosition, !right, 2, true);
|
||||||
|
@ -15,9 +15,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -210,6 +208,8 @@ public class MapRouteNewVO {
|
|||||||
*/
|
*/
|
||||||
private Route.Type type;
|
private Route.Type type;
|
||||||
|
|
||||||
|
private LinkedHashMap<String, SignalAspect> leaveSectionWithAspectMap;
|
||||||
|
|
||||||
public MapRouteNewVO() {
|
public MapRouteNewVO() {
|
||||||
this.routeSectionList = new ArrayList<>();
|
this.routeSectionList = new ArrayList<>();
|
||||||
this.routeSwitchList = new ArrayList<>();
|
this.routeSwitchList = new ArrayList<>();
|
||||||
@ -261,6 +261,11 @@ public class MapRouteNewVO {
|
|||||||
vo.setEspList(route.getEspList().stream().map(ESP::getCode).collect(Collectors.toList()));
|
vo.setEspList(route.getEspList().stream().map(ESP::getCode).collect(Collectors.toList()));
|
||||||
vo.setConflictRouteList(route.getConflictingRouteList().stream().map(Route::getCode).collect(Collectors.toList()));
|
vo.setConflictRouteList(route.getConflictingRouteList().stream().map(Route::getCode).collect(Collectors.toList()));
|
||||||
vo.setType(route.getType());
|
vo.setType(route.getType());
|
||||||
|
if (!CollectionUtils.isEmpty(route.getLeaveSectionWithAspectMap())) {
|
||||||
|
LinkedHashMap<String, SignalAspect> map = route.getLeaveSectionWithAspectMap().entrySet().stream()
|
||||||
|
.collect(Collectors.toMap(entry -> entry.getKey().getCode(), Map.Entry::getValue, (v1, v2) -> v2, LinkedHashMap::new));
|
||||||
|
vo.setLeaveSectionWithAspectMap(map);
|
||||||
|
}
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user