车辆段联锁生成

This commit is contained in:
Jade 2021-09-14 17:26:49 +08:00
parent c2a00f26e9
commit a8d47ee567
2 changed files with 39 additions and 29 deletions

View File

@ -133,22 +133,31 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
.filter(signal -> signal.getInterlockStation().getCode().equals(stationCode)) .filter(signal -> signal.getInterlockStation().getCode().equals(stationCode))
.collect(Collectors.toList()); .collect(Collectors.toList());
log.info(String.format("共有信号机[%s]个", signalList.size())); log.info(String.format("共有信号机[%s]个", signalList.size()));
signalList.sort((signal1, signal2) -> {
String s1 = signal1.getShowName();
String s2 = signal2.getShowName();
return s1.length() != s2.length() ? s1.length() - s2.length() : s1.compareTo(s2);
});
for (Signal signal : signalList) { for (Signal signal : signalList) {
// 信号机接近区段构建 // 列车兼调车信号机调车信号机
// this.generateApproachSection(signal, generateConfig); if (signal.getType().equals(Signal.SignalType.SHUNTING2)) {
signal.setType(Signal.SignalType.SHUNTING);
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList)); generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
signal.setType(Signal.SignalType.SHUNTING2);
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
} else if (signal.getType().equals(Signal.SignalType.SHUNTING)) {
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
}
} }
log.info(String.format("生成一般进路[%s]条", generatedRouteList.size())); log.info(String.format("生成一般进路[%s]条", generatedRouteList.size()));
// 进路敌对关系构建 // 进路敌对关系构建
// this.buildRouteConflict(generatedRouteList); this.buildRouteConflict(generatedRouteList);
if (!CollectionUtils.isEmpty(errorList)) { if (!CollectionUtils.isEmpty(errorList)) {
for (String errMsg : errorList) { for (String errMsg : errorList) {
log.warn(String.format("联锁数据生成警告信息:[%s]", errMsg)); log.warn(String.format("联锁数据生成警告信息:[%s]", errMsg));
} }
} }
// // 清除不需要的基本进路
// this.deleteBaseRoute(signalList, generatedRouteList);
// 删除旧数据保存新数据 // 删除旧数据保存新数据
this.draftMapRouteService.deleteRoutes(deletingList); this.draftMapRouteService.deleteRoutes(deletingList);
this.draftMapRouteService.createRoutes(mapId, generatedRouteList.stream() this.draftMapRouteService.createRoutes(mapId, generatedRouteList.stream()
@ -714,9 +723,6 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
MapCiGenerateConfig config, List<String> errorList) { MapCiGenerateConfig config, List<String> errorList) {
boolean right = start.isRight(); boolean right = start.isRight();
Section startSection = start.getSection().getSectionOf(right); Section startSection = start.getSection().getSectionOf(right);
if (Objects.isNull(startSection)) {
System.out.println(start.getShowName());
}
List<SectionPath> routePathList = new ArrayList<>(); List<SectionPath> routePathList = new ArrayList<>();
getRoutePathOfDepot(start, startSection, new SectionPath(right), routePathList, config, errorList); getRoutePathOfDepot(start, startSection, new SectionPath(right), routePathList, config, errorList);
return buildRouteFromPathDepot(start, routeCodeGenerator, routePathList, config, errorList); return buildRouteFromPathDepot(start, routeCodeGenerator, routePathList, config, errorList);
@ -730,23 +736,17 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
for (SectionPath sectionPath : routePathList) { for (SectionPath sectionPath : routePathList) {
Section lastSection = sectionPath.getLastSection(); Section lastSection = sectionPath.getLastSection();
Signal end = lastSection.getSignalOf(right); Signal end = lastSection.getSignalOf(right);
// 根据配置取进路终端信号机名称 Signal clickEnd = Objects.nonNull(end) ? end : null;
String endName = Objects.nonNull(end) ? end.getShowName() : lastSection.getName(); String endName = Objects.nonNull(end) ? end.getShowName() : lastSection.getName();
Signal clickEnd = null;
if (config.isRouteButton() && config.isGetNearlySignal()) {
// 进路按钮取最近的信号机
clickEnd = this.queryNearlySignalOf(start, sectionPath);
}
// 构建进路 // 构建进路
String code = routeCodeGenerator.next(); String code = routeCodeGenerator.next();
String name = String.format("%s-%s", start.getShowName(), endName); String name = String.format("%s-%s", start.getShowName(), endName);
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath,
null, config.isRouteSignalAlwaysGreen(), config.isRouteInterlockDoNotIncludeStandHoldTrain()); null, config.isRouteSignalAlwaysGreen(), config.isRouteInterlockDoNotIncludeStandHoldTrain());
routeList.add(route); routeList.add(route);
} }
} else { } else {
errorList.add(String.format("以[%s(%s)]为始端信号的进路未搜索到", start.getName(), start.getCode())); errorList.add(String.format("以[%s(%s)]为始端信号的进路未搜索到", start.getShowName(), start.getCode()));
} }
return routeList; return routeList;
} }
@ -1889,16 +1889,29 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
MapCiGenerateConfig config, List<String> errorList) { MapCiGenerateConfig config, List<String> errorList) {
boolean right = startSignal.isRight(); boolean right = startSignal.isRight();
if (!CollectionUtils.isEmpty(tempPath.getSectionList())) { if (!CollectionUtils.isEmpty(tempPath.getSectionList())) {
if (Objects.isNull(section)) { Signal signal = tempPath.getLastSection().getSignalOf(right);
// if (routePathList.size() > 1) { if (startSignal.getType().equals(Signal.SignalType.SHUNTING2)) {
// 同向类型相同信号机
if (Objects.nonNull(signal) && signal.getType().equals(startSignal.getType())) {
routePathList.add(tempPath); routePathList.add(tempPath);
// }
return; return;
} }
// 兼容在道岔区段的信号机 if (Objects.isNull(section)) {
Signal signal = tempPath.getLastSection().getSignalOf(right); Signal lastSignal = tempPath.getLastSection().getSignalOf(!right);
if (Objects.nonNull(lastSignal) && lastSignal.getType().equals(startSignal.getType())) {
routePathList.add(tempPath);
}
return;
}
} else {
// 同向类型相同信号机
if (Objects.nonNull(signal)) { // 找到添加路径返回 if (Objects.nonNull(signal)) { // 找到添加路径返回
if (signal.isDepotSameSignal(startSignal)) { if (signal.getType().equals(startSignal.getType()) || signal.getType().equals(Signal.SignalType.SHUNTING2)) {
routePathList.add(tempPath);
return;
}
}
if (Objects.isNull(section)) {
routePathList.add(tempPath); routePathList.add(tempPath);
return; return;
} }

View File

@ -452,9 +452,6 @@ public class Signal extends MayOutOfOrderDevice {
public boolean isDepotSameSignal(Signal signal) { public boolean isDepotSameSignal(Signal signal) {
return this.type.equals(signal.getType()) return this.type.equals(signal.getType())
|| (this.type.equals(SignalType.PROTECTION) && signal.getType().equals(SignalType.SHUNTING2))
|| (this.type.equals(SignalType.SHUNTING) && signal.getType().equals(SignalType.SHUNTING2))
|| (this.type.equals(SignalType.SHUNTING2) && signal.getType().equals(SignalType.PROTECTION))
|| (this.type.equals(SignalType.SHUNTING2) && signal.getType().equals(SignalType.SHUNTING)); || (this.type.equals(SignalType.SHUNTING2) && signal.getType().equals(SignalType.SHUNTING));
} }