【增加实训背景种类】
This commit is contained in:
parent
cb12f654a2
commit
1428cf38f5
@ -1,13 +1,19 @@
|
||||
package club.joylink.rtss.vo.training2.rule;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.constant.RunLevel;
|
||||
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
||||
import club.joylink.rtss.simulation.cbtc.constant.SwitchIndication;
|
||||
import club.joylink.rtss.simulation.cbtc.data.CalculateService;
|
||||
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||
import club.joylink.rtss.simulation.cbtc.data.storage.StorageSimulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.support.SectionPosition;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.TrainInfo;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealitySignal;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealitySwitch;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
|
||||
import club.joylink.rtss.util.JsonUtils;
|
||||
import lombok.Getter;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@ -133,6 +139,69 @@ public enum BgSceneStatusRule {
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 信号机重开背景
|
||||
*/
|
||||
SIGNAL_REOPEN_BG_SCENE("信号机重开背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Signal signal = (Signal) mapElement;
|
||||
Route route = signal.getRouteList().get(0);
|
||||
openRouteDirect(simulation, route);
|
||||
VirtualRealitySignal vrSignal = signal.getVirtualSignal();
|
||||
signal.setForbidden(true);
|
||||
signal.setAspect(signal.getDefaultAspect());
|
||||
vrSignal.setAspect(signal.getDefaultAspect());
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 信号机关灯背景
|
||||
*/
|
||||
SIGNAL_CLOSE_BG_SCENE("信号机关灯背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Signal signal = (Signal) mapElement;
|
||||
Route route = signal.getRouteList().get(0);
|
||||
openRouteDirect(simulation, route);
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 信号机引导背景
|
||||
*/
|
||||
SIGNAL_GUIDE_BG_SCENE("信号机引导背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Signal signal = (Signal) mapElement;
|
||||
// 开放进路
|
||||
Route route = signal.getRouteList().get(0);
|
||||
openRouteDirect(simulation, route);
|
||||
// 关闭信号机
|
||||
VirtualRealitySignal vrSignal = signal.getVirtualSignal();
|
||||
signal.setForbidden(true);
|
||||
signal.setAspect(signal.getDefaultAspect());
|
||||
vrSignal.setAspect(signal.getDefaultAspect());
|
||||
// 添加信号机
|
||||
VirtualRealityTrain train = (VirtualRealityTrain) simulation.getRepository().getVrDeviceMap().values().stream()
|
||||
.filter(o -> o instanceof VirtualRealityTrain).findFirst().get();
|
||||
Section section = route.getStart().getSection();
|
||||
trainOnline(simulation, train, section, route.isRight());
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 进路交自动控背景
|
||||
*/
|
||||
SIGNAL_ROUTE_AUTO_SET_BG_SCENE("进路交自动控背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Signal signal = (Signal) mapElement;
|
||||
Route route = signal.getRouteList().get(0);
|
||||
route.setAtsControl(false);
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 区段区故解背景
|
||||
*/
|
||||
@ -144,6 +213,65 @@ public enum BgSceneStatusRule {
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 区段故障解锁背景
|
||||
*/
|
||||
SECTION_FAULT_UNLOCK_BG_SCENE("区段故障解锁背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Section section = (Section) mapElement;
|
||||
section.setRouteLock(true);
|
||||
section.setLockRight(true);
|
||||
if(!CollectionUtils.isEmpty(section.getLogicList())) {
|
||||
section.getLogicList().forEach(s -> {
|
||||
s.setRouteLock(true);
|
||||
s.setLockRight(true);
|
||||
});
|
||||
}
|
||||
return getBgScene(simulation);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 区段激活背景
|
||||
*/
|
||||
SECTION_ACTIVE_BG_SCENE("区段激活背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Section section = (Section) mapElement;
|
||||
Section axleSection = section;
|
||||
if (Objects.nonNull(section.getParent())) {
|
||||
axleSection = section.getParent();
|
||||
}
|
||||
axleSection.setCutOff(true);
|
||||
for (Section logic : axleSection.getLogicList()) {
|
||||
logic.setCutOff(true);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 区段取消限速背景
|
||||
*/
|
||||
SECTION_CANCEL_LIMIT_SPEED_BG_SCENE("区段取消限速背景") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Section section = (Section) mapElement;
|
||||
section.setSpeedUpLimit(5);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
SECTION_CONFIRM_AXIS_VALID_BG_SCENE("") {
|
||||
@Override
|
||||
public String doHandle(Simulation simulation, MapElement mapElement) {
|
||||
Section section = (Section) mapElement;
|
||||
if (Objects.nonNull(section.getParent())) {
|
||||
section.getParent().judgeAsNctOccupied(simulation);
|
||||
} else {
|
||||
section.judgeAsNctOccupied(simulation);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 车站上电解锁
|
||||
*/
|
||||
@ -321,4 +449,18 @@ public enum BgSceneStatusRule {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 列车上线
|
||||
*/
|
||||
private static void trainOnline(Simulation simulation, VirtualRealityTrain train, Section section, boolean right) {
|
||||
//重叠检测
|
||||
SectionPosition headPosition = new SectionPosition(section, section.getStopPointByDirection(right));
|
||||
train.initManualTrain(headPosition, right);
|
||||
SimulationDataRepository repository = simulation.getRepository();
|
||||
TrainInfo trainInfo = TrainInfo.constructManualTrain(train);
|
||||
trainInfo.tracking(train);
|
||||
repository.addOnlineTrain(train);
|
||||
repository.addTrainInfo(trainInfo);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package club.joylink.rtss.vo.training2.rule;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||
import club.joylink.rtss.vo.map.graph.MapStationNewVO;
|
||||
import lombok.Getter;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@ -21,8 +22,9 @@ public enum MapDeviceRule {
|
||||
if (!isMETRO) {
|
||||
return List.of();
|
||||
}
|
||||
List<Route> routeList = simulation.getRepository().getRouteList().stream()
|
||||
.filter(r -> Signal.SignalType.PROTECTION.equals(r.getStart().getType())).collect(Collectors.toList());
|
||||
List<Signal> signalList = METRO_DEPARTURE_SIGNAL_LIST.filterMapDeviceList(simulation);
|
||||
List<Route> routeList = new ArrayList<>();
|
||||
signalList.forEach(s -> routeList.addAll(s.getRouteList()));
|
||||
return generateRandomElement(routeList, 2);
|
||||
}
|
||||
},
|
||||
@ -41,7 +43,10 @@ public enum MapDeviceRule {
|
||||
STATION_LIST("车站列表") {
|
||||
@Override
|
||||
public List<Station> filterMapDeviceList(Simulation simulation) {
|
||||
List<Station> stationList = simulation.getRepository().getStationList();
|
||||
List<Station> stationList = simulation.getBuildParams().getMap().getGraphDataNew().getStationList()
|
||||
.stream().filter(s -> s.isVisible() && s.isCentralized() && s.isCiStation()).map(MapStationNewVO::getCode)
|
||||
.map(code -> simulation.getRepository().getByCode(code, Station.class))
|
||||
.collect(Collectors.toList());
|
||||
return generateRandomElement(stationList, 1);
|
||||
}
|
||||
},
|
||||
@ -59,6 +64,14 @@ public enum MapDeviceRule {
|
||||
return generateRandomElement(signalList, 2);
|
||||
}
|
||||
},
|
||||
METRO_DEPARTURE_SIGNAL_LIST("地铁信号机列表") {
|
||||
@Override
|
||||
public List<Signal> filterMapDeviceList(Simulation simulation) {
|
||||
List<Signal> signalList = simulation.getRepository().getStandList().stream().map(s -> s.getSection().getSignalToRight())
|
||||
.filter(s -> s != null && !CollectionUtils.isEmpty(s.getRouteList())).collect(Collectors.toList());
|
||||
return generateRandomElement(signalList, 2);
|
||||
}
|
||||
},
|
||||
RAILWAY_DEPARTURE_SIGNAL_LIST("大铁发车信号机列表") {
|
||||
@Override
|
||||
public List<Signal> filterMapDeviceList(Simulation simulation) {
|
||||
@ -70,8 +83,11 @@ public enum MapDeviceRule {
|
||||
SECTION_LIST("普通区段列表") {
|
||||
@Override
|
||||
public List<Section> filterMapDeviceList(Simulation simulation) {
|
||||
List<Section> sectionList = simulation.getRepository().getSectionList().stream()
|
||||
.filter(s -> s.getParent() == null).collect(Collectors.toList());
|
||||
List<Signal> signalList = simulation.getRepository().getStandList().stream().map(s -> s.getSection().getSignalToRight())
|
||||
.filter(s -> s != null && !CollectionUtils.isEmpty(s.getRouteList())).collect(Collectors.toList());
|
||||
signalList = generateRandomElement(signalList, 2);
|
||||
List<Section> sectionList = new ArrayList<>(100);
|
||||
signalList.forEach(s -> s.getRouteList().forEach(r -> sectionList.addAll(r.getSectionList())));
|
||||
return generateRandomElement(sectionList, 2);
|
||||
}
|
||||
},
|
||||
@ -82,6 +98,14 @@ public enum MapDeviceRule {
|
||||
.filter(Section::isSwitchTrack).collect(Collectors.toList());
|
||||
return generateRandomElement(sectionList, 2);
|
||||
}
|
||||
},
|
||||
SECTION_ROUTE_LIST("") {
|
||||
@Override
|
||||
public List<Section> filterMapDeviceList(Simulation simulation) {
|
||||
List<Signal> signalList = simulation.getRepository().getStandList().stream()
|
||||
.map(s -> s.getSection().getSignalToRight()).filter(s -> s != null && !CollectionUtils.isEmpty(s.getRouteList())).collect(Collectors.toList());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -34,6 +34,8 @@ public abstract class MapElementRule {
|
||||
return (Station) mapElement;
|
||||
} else if (mapElement instanceof Switch) {
|
||||
return ((Switch) mapElement).getDeviceStation();
|
||||
} else if (mapElement instanceof Section) {
|
||||
return ((Section) mapElement).getDeviceStation();
|
||||
}
|
||||
throw new SimulationException(SimulationExceptionType.Simulation_Map_Data_Error);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class MemberRule {
|
||||
/**
|
||||
* 所属设备编码
|
||||
*/
|
||||
String code = deviceCodeRule.resolve(simulation, mapElement);
|
||||
String code = String.valueOf(deviceCodeRule.resolve(simulation, mapElement));
|
||||
List<SimulationMember> resultMemberList = memberList.stream().filter(member -> member.getDevice() != null
|
||||
&& member.getDevice().getCode().equals(code)).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(resultMemberList)) {
|
||||
|
@ -97,7 +97,7 @@ public abstract class OperationRule {
|
||||
Operation2VO.ClientOperation2VO operation2 = new Operation2VO.ClientOperation2VO();
|
||||
operation2.setId(this.getId());
|
||||
if (PropertyValueRule.match(deviceCode)) { // 设备规则编码设置
|
||||
operation2.setDeviceCode(PropertyValueRule.valueOf(deviceCode).resolve(simulation, mapElement));
|
||||
operation2.setDeviceCode(String.valueOf(PropertyValueRule.valueOf(deviceCode).resolve(simulation, mapElement)));
|
||||
} else {
|
||||
operation2.setDeviceCode("");
|
||||
}
|
||||
|
@ -112,7 +112,16 @@ public enum PropertyValueRule {
|
||||
}
|
||||
return buttonVO.getCode();
|
||||
}
|
||||
};
|
||||
},
|
||||
SIGNAL_FIRST_ROUTE_CODE_LIST("信号机关联的第一条进路编码列表") {
|
||||
@Override
|
||||
public Object resolve(Simulation simulation, Object mapElement) {
|
||||
Signal signal = (Signal) mapElement;
|
||||
Route route = signal.getRouteList().get(0);
|
||||
return List.of(route.getCode());
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
private final String description;
|
||||
|
||||
@ -122,7 +131,7 @@ public enum PropertyValueRule {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public abstract String resolve(Simulation simulation, Object mapElement);
|
||||
public abstract Object resolve(Simulation simulation, Object mapElement);
|
||||
|
||||
public static boolean match(String ruleValue) {
|
||||
return Arrays.stream(PropertyValueRule.values()).anyMatch(r -> r.name().equals(ruleValue));
|
||||
@ -142,11 +151,11 @@ public enum PropertyValueRule {
|
||||
}
|
||||
String result = contentFormat;
|
||||
String propertyEnum;
|
||||
String propertyValue;
|
||||
Object propertyValue;
|
||||
for (String property : propertySet) {
|
||||
propertyEnum = property.replaceAll("[\\{\\}]", "");
|
||||
propertyValue = PropertyValueRule.valueOf(propertyEnum).resolve(simulation, mapElement);
|
||||
result = result.replace(property, propertyValue);
|
||||
result = result.replace(property, String.valueOf(propertyValue));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ public abstract class ValuableRule {
|
||||
public StatusValueVO convert2BO(Simulation simulation, Object mapElement) {
|
||||
StatusValueVO valuable = JsonUtils.read(JsonUtils.writeValueAsString(this.getValuableVO()), StatusValueVO.class);
|
||||
if (elementCodeRule != null) {
|
||||
valuable.setElementCode(elementCodeRule.resolve(simulation, mapElement));
|
||||
valuable.setElementCode(String.valueOf(elementCodeRule.resolve(simulation, mapElement)));
|
||||
}
|
||||
return valuable;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user