接收/交出控制权:整个集中站范围内的车站一起

This commit is contained in:
joylink_zhangsai 2020-12-04 17:06:30 +08:00
parent e799f3c5da
commit 64f5ec3d7b
4 changed files with 88 additions and 79 deletions

View File

@ -279,8 +279,15 @@ public class AtsStationService {
* @param station * @param station
*/ */
public void surrenderControl(Simulation simulation, SimulationMember member, Station station) { public void surrenderControl(Simulation simulation, SimulationMember member, Station station) {
Station controlModeStation = station.getControlModeStation(); Station deviceStation;
controlModeStation.surrenderControl(); if (station.isCentralized()) {
deviceStation = station;
} else {
deviceStation = station.getDeviceStation();
}
SimulationDataRepository repository = simulation.getRepository();
Set<Station> stations = repository.getStationsByDeviceStations(deviceStation);
stations.forEach(Station::surrenderControl);
} }
/** /**
@ -291,13 +298,18 @@ public class AtsStationService {
* @param station * @param station
*/ */
public void receiveControl(Simulation simulation, SimulationMember member, Station station) { public void receiveControl(Simulation simulation, SimulationMember member, Station station) {
Station controlModeStation = station.getControlModeStation(); Station deviceStation;
if (station.isCentralized()) {
deviceStation = station;
} else {
deviceStation = station.getDeviceStation();
}
SimulationDataRepository repository = simulation.getRepository();
Set<Station> stations = repository.getStationsByDeviceStations(deviceStation);
if (member.isDispatcher()) { if (member.isDispatcher()) {
// 行调 stations.forEach(Station::occControl);
controlModeStation.occControl();
} else if (member.isStationSupervisor()) { } else if (member.isStationSupervisor()) {
// 车站 stations.forEach(Station::localControl);
controlModeStation.localControl();
} }
} }

View File

@ -23,9 +23,6 @@ public class MapDeviceBuilder {
/** /**
* 校验并构建设备数据 * 校验并构建设备数据
*
* @param graphData
* @param mapDataBuildResult
*/ */
static void checkAndBuildMapDeviceData(MapGraphDataNewVO graphData, SimulationBuilder.SimulationDeviceBuildResult mapDataBuildResult) { static void checkAndBuildMapDeviceData(MapGraphDataNewVO graphData, SimulationBuilder.SimulationDeviceBuildResult mapDataBuildResult) {
Map<String, MapElement> elementMap = mapDataBuildResult.getDeviceMap(); Map<String, MapElement> elementMap = mapDataBuildResult.getDeviceMap();
@ -41,65 +38,7 @@ public class MapDeviceBuilder {
elementMap.put(zc.getCode(), zc); elementMap.put(zc.getCode(), zc);
}); });
// 车站 // 车站
List<MapStationNewVO> stationList = graphData.getStationList(); buildStation(graphData, elementMap, errMsgList);
stationList.forEach(stationVO -> {
Station station = new Station(stationVO.getCode(), stationVO.getName());
if (Objects.nonNull(elementMap.get(station.getCode()))) {
errMsgList.add(String.format("编码为[%s]的车站不唯一", station.getCode()));
}
elementMap.put(station.getCode(), station);
station.setCentralized(stationVO.isCentralized());
if (station.isCentralized()) {
ZC zc = (ZC) elementMap.get(stationVO.getZcCode());
if (Objects.isNull(zc)) {
errMsgList.add(String.format("车站[%s(%s)]未关联ZC或ZC不存在请在ZC设备处选择管理的集中站列表", station.getName(), station.getCode()));
} else {
station.setZc(zc);
}
}
if (Objects.isNull(stationVO.getKmRange())) {
errMsgList.add(String.format("车站[%s(%s)]未设置距离", stationVO.getName(), stationVO.getCode()));
} else {
station.setKmPostVal(stationVO.getKmRange());
}
if (Objects.isNull(stationVO.getSn())) {
errMsgList.add(String.format("车站[%s(%s)]序号未设置", stationVO.getName(), stationVO.getCode()));
} else {
station.setSn(stationVO.getSn());
}
station.setInterlock(stationVO.isCiStation());
station.setHasControlMode(stationVO.isCreateControlMode());
station.setDepot(stationVO.isDepot());
station.setRoutingStationList(stationVO.getRoutingStationList());
station.setTurnBack(stationVO.isReentry());
station.setSmallRouting(stationVO.isSmallRouting());
if (station.isDepot() && station.isTurnBack()) {
errMsgList.add(String.format("车站[%s(%s)]不能既是停车场,又是折返车站",
stationVO.getName(), stationVO.getCode()));
}
if (station.isHasControlMode()) { // 有控制模式初始化为中控
station.setControlMode(Station.ControlMode.Center);
}
});
// 设备集中站下的车站关联ZC
stationList.forEach(stationVO -> {
Station station = (Station) elementMap.get(stationVO.getCode());
if (station.isCentralized()) { // 如果是设备集中站
List<String> stationCodeList = stationVO.getChargeStationCodeList();
if (!CollectionUtils.isEmpty(stationCodeList)) {
stationCodeList.forEach(code -> {
Station normal = (Station) elementMap.get(code);
if (Objects.isNull(normal)) {
errMsgList.add(String.format("设备集中站车站[%s(%s)]管理车站数据异常:编码为[%s]的车站不存在",
station.getName(), station.getCode(), code));
} else {
normal.setDeviceStation(station);
normal.setZc(station.getZc());
}
});
}
}
});
// 区段 // 区段
List<MapSectionNewVO> sectionList = graphData.getSectionList(); List<MapSectionNewVO> sectionList = graphData.getSectionList();
Map<String, Section> desCodeSectionMap = new HashMap<>(); Map<String, Section> desCodeSectionMap = new HashMap<>();
@ -930,6 +869,72 @@ public class MapDeviceBuilder {
buildCatenary(graphData, elementMap, errMsgList, mapDataBuildResult.getCatenaryMap()); buildCatenary(graphData, elementMap, errMsgList, mapDataBuildResult.getCatenaryMap());
} }
/**
* 构建车站数据
*/
private static void buildStation(MapGraphDataNewVO graphData, Map<String, MapElement> elementMap, List<String> errMsgList) {
// 车站
List<MapStationNewVO> stationList = graphData.getStationList();
stationList.forEach(stationVO -> {
Station station = new Station(stationVO.getCode(), stationVO.getName());
if (Objects.nonNull(elementMap.get(station.getCode()))) {
errMsgList.add(String.format("编码为[%s]的车站不唯一", station.getCode()));
}
elementMap.put(station.getCode(), station);
station.setCentralized(stationVO.isCentralized());
if (station.isCentralized()) {
ZC zc = (ZC) elementMap.get(stationVO.getZcCode());
if (Objects.isNull(zc)) {
errMsgList.add(String.format("车站[%s(%s)]未关联ZC或ZC不存在请在ZC设备处选择管理的集中站列表", station.getName(), station.getCode()));
} else {
station.setZc(zc);
}
}
if (Objects.isNull(stationVO.getKmRange())) {
errMsgList.add(String.format("车站[%s(%s)]未设置距离", stationVO.getName(), stationVO.getCode()));
} else {
station.setKmPostVal(stationVO.getKmRange());
}
if (Objects.isNull(stationVO.getSn())) {
errMsgList.add(String.format("车站[%s(%s)]序号未设置", stationVO.getName(), stationVO.getCode()));
} else {
station.setSn(stationVO.getSn());
}
station.setInterlock(stationVO.isCiStation());
station.setHasControlMode(stationVO.isCreateControlMode());
station.setDepot(stationVO.isDepot());
station.setRoutingStationList(stationVO.getRoutingStationList());
station.setTurnBack(stationVO.isReentry());
station.setSmallRouting(stationVO.isSmallRouting());
if (station.isDepot() && station.isTurnBack()) {
errMsgList.add(String.format("车站[%s(%s)]不能既是停车场,又是折返车站",
stationVO.getName(), stationVO.getCode()));
}
if (station.isHasControlMode()) { // 有控制模式初始化为中控
station.setControlMode(Station.ControlMode.Center);
}
});
// 设备集中站下的车站关联ZC联锁站下的车站关联联锁站
stationList.forEach(stationVO -> {
Station station = (Station) elementMap.get(stationVO.getCode());
if (station.isCentralized()) { // 如果是设备集中站
List<String> stationCodeList = stationVO.getChargeStationCodeList();
if (!CollectionUtils.isEmpty(stationCodeList)) {
stationCodeList.forEach(code -> {
Station normal = (Station) elementMap.get(code);
if (Objects.isNull(normal)) {
errMsgList.add(String.format("设备集中站车站[%s(%s)]管理车站数据异常:编码为[%s]的车站不存在",
station.getName(), station.getCode(), code));
} else {
normal.setDeviceStation(station);
normal.setZc(station.getZc());
}
});
}
}
});
}
/** /**
* 构建接触网数据 * 构建接触网数据
*/ */

View File

@ -373,14 +373,6 @@ public class Station extends MapNamedElement {
} }
public Station getControlModeStation() {
if (Objects.nonNull(this.hasControlMode)) {
return this;
} else {
return this.deviceStation;
}
}
/** /**
* 是否中控 * 是否中控
*/ */

View File

@ -1,7 +1,7 @@
package club.joylink.rtss.vo.client.map.newmap; package club.joylink.rtss.vo.client.map.newmap;
import com.fasterxml.jackson.annotation.JsonIgnore;
import club.joylink.rtss.vo.client.Point; import club.joylink.rtss.vo.client.Point;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
@ -155,7 +155,7 @@ public class MapStationNewVO {
private boolean centralized; private boolean centralized;
/** /**
* 是否锁站 * 是否锁站
*/ */
private boolean ciStation; private boolean ciStation;