【指示灯、操作按钮】初始化
Signed-off-by: weizhihong <weizhihong@joylink.club>
This commit is contained in:
parent
81c9ceb2aa
commit
4a3e4d985a
@ -5,11 +5,33 @@ package club.joylink.rtss.constants;
|
|||||||
*/
|
*/
|
||||||
public enum ButtonTypeEnum {
|
public enum ButtonTypeEnum {
|
||||||
// 总辅助
|
// 总辅助
|
||||||
MAIN,
|
MAIN_ASSIST,
|
||||||
// 接辅助
|
// 接辅助
|
||||||
RECEIVE,
|
RECEIVE_ASSIST,
|
||||||
// 发辅助
|
// 发辅助
|
||||||
DELIVER,
|
DELIVER_ASSIST,
|
||||||
// 改方
|
// 改方
|
||||||
CHANGE_DIRECTION
|
CHANGE_DIRECTION,
|
||||||
|
NO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取枚举信息
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return 枚举
|
||||||
|
*/
|
||||||
|
public static ButtonTypeEnum getType(String type) {
|
||||||
|
switch (type) {
|
||||||
|
case "main_assist":
|
||||||
|
return ButtonTypeEnum.MAIN_ASSIST;
|
||||||
|
case "deliver_assist":
|
||||||
|
return ButtonTypeEnum.DELIVER_ASSIST;
|
||||||
|
case "receive_assist":
|
||||||
|
return ButtonTypeEnum.RECEIVE_ASSIST;
|
||||||
|
case "change_direction":
|
||||||
|
return ButtonTypeEnum.CHANGE_DIRECTION;
|
||||||
|
default:
|
||||||
|
return ButtonTypeEnum.NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,5 +11,22 @@ public enum IndicatorTypeEnum {
|
|||||||
// 区间
|
// 区间
|
||||||
SECTION,
|
SECTION,
|
||||||
// 辅助
|
// 辅助
|
||||||
ASSIST
|
ASSIST,
|
||||||
|
// 无类型
|
||||||
|
NO;
|
||||||
|
|
||||||
|
public static IndicatorTypeEnum getType(String type) {
|
||||||
|
switch (type) {
|
||||||
|
case "receive":
|
||||||
|
return IndicatorTypeEnum.RECEIVE;
|
||||||
|
case "deliver":
|
||||||
|
return IndicatorTypeEnum.DELIVER;
|
||||||
|
case "section":
|
||||||
|
return IndicatorTypeEnum.SECTION;
|
||||||
|
case "assist":
|
||||||
|
return IndicatorTypeEnum.ASSIST;
|
||||||
|
default:
|
||||||
|
return IndicatorTypeEnum.NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,4 +43,9 @@ public class ButtonStand {
|
|||||||
* 上一个站台
|
* 上一个站台
|
||||||
*/
|
*/
|
||||||
private String preStandCode;
|
private String preStandCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,11 @@ public class IndicatorSection {
|
|||||||
*/
|
*/
|
||||||
private String routeCode;
|
private String routeCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灯类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
public void generateSectionList() {
|
public void generateSectionList() {
|
||||||
if (StringUtils.isEmpty(sectionsCode)) {
|
if (StringUtils.isEmpty(sectionsCode)) {
|
||||||
sectionList = new ArrayList<>(0);
|
sectionList = new ArrayList<>(0);
|
||||||
|
@ -15,6 +15,8 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class AssistButtonIndicatorService implements IAssistButtonIndicatorService {
|
public class AssistButtonIndicatorService implements IAssistButtonIndicatorService {
|
||||||
|
|
||||||
@ -73,6 +75,14 @@ public class AssistButtonIndicatorService implements IAssistButtonIndicatorServi
|
|||||||
assistIndicatorDAO.deleteByPrimaryKey(id);
|
assistIndicatorDAO.deleteByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IndicatorSection> queryAllIndicatorSectionByMapId(Long mapId) {
|
||||||
|
IndicatorSectionExample indicatorSectionExample = new IndicatorSectionExample();
|
||||||
|
IndicatorSectionExample.Criteria criteria = indicatorSectionExample.createCriteria();
|
||||||
|
criteria.andMapIdEqualTo(mapId);
|
||||||
|
return assistIndicatorDAO.selectByExample(indicatorSectionExample);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageVO<ButtonStand> buttonStandList(Long mapId, String standCode, String buttonCode, PageQueryVO queryVO) {
|
public PageVO<ButtonStand> buttonStandList(Long mapId, String standCode, String buttonCode, PageQueryVO queryVO) {
|
||||||
PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
|
PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
|
||||||
@ -112,4 +122,12 @@ public class AssistButtonIndicatorService implements IAssistButtonIndicatorServi
|
|||||||
public void deleteButtonStand(Long id) {
|
public void deleteButtonStand(Long id) {
|
||||||
assistButtonDAO.deleteByPrimaryKey(id);
|
assistButtonDAO.deleteByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ButtonStand> queryAllButtonStandByMapId(Long mapId) {
|
||||||
|
ButtonStandExample buttonStandExample = new ButtonStandExample();
|
||||||
|
ButtonStandExample.Criteria criteria = buttonStandExample.createCriteria();
|
||||||
|
criteria.andMapIdEqualTo(mapId);
|
||||||
|
return assistButtonDAO.selectByExample(buttonStandExample);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import club.joylink.rtss.entity.IndicatorSection;
|
|||||||
import club.joylink.rtss.vo.client.PageQueryVO;
|
import club.joylink.rtss.vo.client.PageQueryVO;
|
||||||
import club.joylink.rtss.vo.client.PageVO;
|
import club.joylink.rtss.vo.client.PageVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface IAssistButtonIndicatorService {
|
public interface IAssistButtonIndicatorService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,6 +47,13 @@ public interface IAssistButtonIndicatorService {
|
|||||||
*/
|
*/
|
||||||
void deleteIndicatorSection(Long id);
|
void deleteIndicatorSection(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找该地图下的指示灯、区间、站台、进路关系信息列表
|
||||||
|
*
|
||||||
|
* @param mapId 地图Id
|
||||||
|
* @return 关系列表
|
||||||
|
*/
|
||||||
|
List<IndicatorSection> queryAllIndicatorSectionByMapId(Long mapId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查找该地图下的按钮、站台关系信息列表
|
* 查找该地图下的按钮、站台关系信息列表
|
||||||
@ -79,4 +88,12 @@ public interface IAssistButtonIndicatorService {
|
|||||||
* @param id 关系ID
|
* @param id 关系ID
|
||||||
*/
|
*/
|
||||||
void deleteButtonStand(Long id);
|
void deleteButtonStand(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找该地图下所有的按钮关联信息
|
||||||
|
*
|
||||||
|
* @param mapId 地图信息
|
||||||
|
* @return 关联关系
|
||||||
|
*/
|
||||||
|
List<ButtonStand> queryAllButtonStandByMapId(Long mapId);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package club.joylink.rtss.services.draftData;
|
|||||||
|
|
||||||
import club.joylink.rtss.dao.*;
|
import club.joylink.rtss.dao.*;
|
||||||
import club.joylink.rtss.entity.*;
|
import club.joylink.rtss.entity.*;
|
||||||
|
import club.joylink.rtss.services.IAssistButtonIndicatorService;
|
||||||
import club.joylink.rtss.util.JsonUtils;
|
import club.joylink.rtss.util.JsonUtils;
|
||||||
import club.joylink.rtss.vo.map.MapLogicDataNewVO;
|
import club.joylink.rtss.vo.map.MapLogicDataNewVO;
|
||||||
import club.joylink.rtss.vo.map.MapVO;
|
import club.joylink.rtss.vo.map.MapVO;
|
||||||
@ -53,6 +54,9 @@ public class DraftMapServiceImpl implements DraftMapService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DraftMapSignalApproachSectionService draftMapSignalApproachSectionService;
|
private DraftMapSignalApproachSectionService draftMapSignalApproachSectionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAssistButtonIndicatorService assistButtonIndicatorService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MapVO getDraftMapData(Long mapId) {
|
public MapVO getDraftMapData(Long mapId) {
|
||||||
DraftMapWithBLOBs draftMap = this.draftMapDAO.selectByPrimaryKey(mapId);
|
DraftMapWithBLOBs draftMap = this.draftMapDAO.selectByPrimaryKey(mapId);
|
||||||
@ -75,6 +79,11 @@ public class DraftMapServiceImpl implements DraftMapService {
|
|||||||
// logicDataNew.setAutoReentryList(); 待补
|
// logicDataNew.setAutoReentryList(); 待补
|
||||||
// logicDataNew.setRoutingList(); 待补
|
// logicDataNew.setRoutingList(); 待补
|
||||||
logicDataNew.setSignalApproachSectionList(draftMapSignalApproachSectionService.queryAll(mapId));
|
logicDataNew.setSignalApproachSectionList(draftMapSignalApproachSectionService.queryAll(mapId));
|
||||||
|
|
||||||
|
// 获取指示灯、按钮等关联关系
|
||||||
|
logicDataNew.setIndicatorSectionVOList(assistButtonIndicatorService.queryAllIndicatorSectionByMapId(mapId));
|
||||||
|
logicDataNew.setButtonStandVOList(assistButtonIndicatorService.queryAllButtonStandByMapId(mapId));
|
||||||
|
|
||||||
map.setLogicDataNew(logicDataNew);
|
map.setLogicDataNew(logicDataNew);
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
|
||||||
@ -66,11 +67,7 @@ public class AssistService {
|
|||||||
public void refreshSectionLightStatus(Simulation simulation, IndicatorSection indicatorSectionVO) {
|
public void refreshSectionLightStatus(Simulation simulation, IndicatorSection indicatorSectionVO) {
|
||||||
Indicator indicator = simulation.getRepository().getByCode(indicatorSectionVO.getIndicatorCode(), Indicator.class);
|
Indicator indicator = simulation.getRepository().getByCode(indicatorSectionVO.getIndicatorCode(), Indicator.class);
|
||||||
// 是否被占用,TRUE 占用,FALSE 未占用
|
// 是否被占用,TRUE 占用,FALSE 未占用
|
||||||
boolean isOccupied = indicatorSectionVO.getSectionList()
|
boolean isOccupied = indicator.getSectionList().stream().filter(Section::isCtOccupied).findAny().isEmpty();
|
||||||
.stream()
|
|
||||||
.filter(code -> simulation.getRepository().getByCode(code, Section.class).isCtOccupied())
|
|
||||||
.findAny()
|
|
||||||
.isEmpty();
|
|
||||||
if (isOccupied) {
|
if (isOccupied) {
|
||||||
// 修改区间灯为红色
|
// 修改区间灯为红色
|
||||||
indicator.setAspect(IndicatorStatusEnum.R);
|
indicator.setAspect(IndicatorStatusEnum.R);
|
||||||
@ -97,12 +94,12 @@ public class AssistService {
|
|||||||
deliverIndicator.setAspect(IndicatorStatusEnum.G);
|
deliverIndicator.setAspect(IndicatorStatusEnum.G);
|
||||||
} else {
|
} else {
|
||||||
// 接车进路
|
// 接车进路
|
||||||
Route receiveRoute = simulation.getRepository().getSettingRouteMap().get(receiveIndicator.getRoute().getCode());
|
Route receiveRoute = receiveIndicator.getRoute();
|
||||||
// 发车进路
|
// 发车进路
|
||||||
Route deliverRoute = simulation.getRepository().getSettingRouteMap().get(receiveIndicator.getRoute().getCode());
|
Route deliverRoute = deliverIndicator.getRoute();
|
||||||
// 两个进路都锁闭存在问题
|
// 两个进路都锁闭存在问题
|
||||||
if (receiveRoute.isLock() && deliverRoute.isLock()) {
|
if (receiveRoute.isLock() && deliverRoute.isLock()) {
|
||||||
throw new SimulationException(SimulationExceptionType.System_Fault, "操作异常:进路存在问题");
|
throw new SimulationException(SimulationExceptionType.System_Fault, "操作异常:进路锁闭");
|
||||||
} else if (receiveRoute.isLock() && !deliverRoute.isLock()) { // 亮接、灭发
|
} else if (receiveRoute.isLock() && !deliverRoute.isLock()) { // 亮接、灭发
|
||||||
receiveIndicator.setAspect(IndicatorStatusEnum.Y);
|
receiveIndicator.setAspect(IndicatorStatusEnum.Y);
|
||||||
deliverIndicator.setAspect(IndicatorStatusEnum.No);
|
deliverIndicator.setAspect(IndicatorStatusEnum.No);
|
||||||
@ -120,10 +117,11 @@ public class AssistService {
|
|||||||
* 改方按钮按下校验
|
* 改方按钮按下校验
|
||||||
*/
|
*/
|
||||||
public ButtonValidInterface turnDirectionPressDownValid = (simulation, button) -> {
|
public ButtonValidInterface turnDirectionPressDownValid = (simulation, button) -> {
|
||||||
|
List<Station> stationList = simulation.getRepository().getStationList();
|
||||||
// 当前站位置
|
// 当前站位置
|
||||||
int index = simulation.getRepository().getStationList().indexOf(button.getStation());
|
int index = stationList.indexOf(button.getStation());
|
||||||
// 检查是否是首站
|
// 检查是否是首站
|
||||||
if (index == 0 || index == simulation.getRepository().getSectionList().size() - 1) {
|
if (index == 0 || index == stationList.size() - 1) {
|
||||||
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:首站不可改方");
|
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:首站不可改方");
|
||||||
}
|
}
|
||||||
// 获取区间指示灯
|
// 获取区间指示灯
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
package club.joylink.rtss.simulation.cbtc.build;
|
package club.joylink.rtss.simulation.cbtc.build;
|
||||||
|
|
||||||
|
import club.joylink.rtss.constants.ButtonTypeEnum;
|
||||||
|
import club.joylink.rtss.constants.IndicatorTypeEnum;
|
||||||
|
import club.joylink.rtss.entity.ButtonStand;
|
||||||
|
import club.joylink.rtss.entity.IndicatorSection;
|
||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import club.joylink.rtss.services.draftData.RoutingGenerator;
|
import club.joylink.rtss.services.draftData.RoutingGenerator;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.CalculateService;
|
import club.joylink.rtss.simulation.cbtc.data.CalculateService;
|
||||||
@ -35,22 +39,22 @@ public class InterlockBuilder2 {
|
|||||||
Map<String, MapElement> elementMap = mapDataBuildResult.getDeviceMap();
|
Map<String, MapElement> elementMap = mapDataBuildResult.getDeviceMap();
|
||||||
List<String> errMsgList = mapDataBuildResult.getErrMsgList();
|
List<String> errMsgList = mapDataBuildResult.getErrMsgList();
|
||||||
// ------------侧防start-------------
|
// ------------侧防start-------------
|
||||||
Map<String, RouteFls> flsMap = checkAndBuildRouteFls(logicData.getFlankProtectionList(), elementMap);
|
Map<String, RouteFls> flsMap = InterlockBuilder2.checkAndBuildRouteFls(logicData.getFlankProtectionList(), elementMap);
|
||||||
// ------------侧防end-------------
|
// ------------侧防end-------------
|
||||||
|
|
||||||
// ------------延续保护start-------------
|
// ------------延续保护start-------------
|
||||||
long overlapStart = System.currentTimeMillis();
|
long overlapStart = System.currentTimeMillis();
|
||||||
buildOverlap(logicData, elementMap, errMsgList, flsMap);
|
InterlockBuilder2.buildOverlap(logicData, elementMap, errMsgList, flsMap);
|
||||||
log.debug("构建延续保护耗时:" + (System.currentTimeMillis() - overlapStart));
|
InterlockBuilder2.log.debug("构建延续保护耗时:" + (System.currentTimeMillis() - overlapStart));
|
||||||
// ------------延续保护end-------------
|
// ------------延续保护end-------------
|
||||||
//超限区段
|
//超限区段
|
||||||
buildOverrun(logicData.getOverrunList(), elementMap, errMsgList);
|
InterlockBuilder2.buildOverrun(logicData.getOverrunList(), elementMap, errMsgList);
|
||||||
// 接近区段
|
// 接近区段
|
||||||
buildApproachSections(logicData, elementMap, errMsgList);
|
InterlockBuilder2.buildApproachSections(logicData, elementMap, errMsgList);
|
||||||
// ------------进路start-------------
|
// ------------进路start-------------
|
||||||
long routeStart = System.currentTimeMillis();
|
long routeStart = System.currentTimeMillis();
|
||||||
buildRoute(logicData, elementMap, errMsgList, flsMap);
|
InterlockBuilder2.buildRoute(logicData, elementMap, errMsgList, flsMap);
|
||||||
log.debug("构建进路耗时:" + (System.currentTimeMillis() - routeStart));
|
InterlockBuilder2.log.debug("构建进路耗时:" + (System.currentTimeMillis() - routeStart));
|
||||||
// ------------进路end-------------
|
// ------------进路end-------------
|
||||||
|
|
||||||
// ------------自动信号start-------------
|
// ------------自动信号start-------------
|
||||||
@ -224,30 +228,35 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
// ------------自动折返进路end-------------
|
// ------------自动折返进路end-------------
|
||||||
|
|
||||||
checkBetweenRouteSameDirectionSignal(elementMap, errMsgList);
|
InterlockBuilder2.checkBetweenRouteSameDirectionSignal(elementMap, errMsgList);
|
||||||
|
|
||||||
// ------------交路start-------------
|
// ------------交路start-------------
|
||||||
List<Routing> routingList = checkAndBuildRouting(logicData.getRoutingList(), elementMap, errMsgList);
|
List<Routing> routingList = InterlockBuilder2.checkAndBuildRouting(logicData.getRoutingList(), elementMap, errMsgList);
|
||||||
mapDataBuildResult.setRoutingList(routingList);
|
mapDataBuildResult.setRoutingList(routingList);
|
||||||
// ------------交路end-------------
|
// ------------交路end-------------
|
||||||
|
|
||||||
// ------------站间运行等级start-------------
|
// ------------站间运行等级start-------------
|
||||||
List<StationRunLevel> stationRunLevelList = checkAndBuildStationRunLevel(logicData.getRunLevelList(), elementMap, errMsgList);
|
List<StationRunLevel> stationRunLevelList = InterlockBuilder2.checkAndBuildStationRunLevel(logicData.getRunLevelList(), elementMap, errMsgList);
|
||||||
mapDataBuildResult.setRunLevelList(stationRunLevelList);
|
mapDataBuildResult.setRunLevelList(stationRunLevelList);
|
||||||
// ------------站间运行等级end-------------
|
// ------------站间运行等级end-------------
|
||||||
|
|
||||||
// ------------目的地码start-------------
|
// ------------目的地码start-------------
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
checkAndBuildDestinationCodeDefinition(elementMap, logicData.getDestinationCodeDefinitionList(), mapDataBuildResult.getDestinationMap(), errMsgList);
|
InterlockBuilder2.checkAndBuildDestinationCodeDefinition(elementMap, logicData.getDestinationCodeDefinitionList(), mapDataBuildResult.getDestinationMap(), errMsgList);
|
||||||
log.info("目的地码构建耗时:" + (System.currentTimeMillis() - start));
|
InterlockBuilder2.log.info("目的地码构建耗时:" + (System.currentTimeMillis() - start));
|
||||||
// ------------目的地码end-------------
|
// ------------目的地码end-------------
|
||||||
|
|
||||||
// 根据站间运行等级数据构建路径单元
|
// 根据站间运行等级数据构建路径单元
|
||||||
if (!errMsgList.isEmpty()) {
|
if (!errMsgList.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
buildRoutePathFromStationRunLevel(stationRunLevelList, mapDataBuildResult, errMsgList);
|
InterlockBuilder2.buildRoutePathFromStationRunLevel(stationRunLevelList, mapDataBuildResult, errMsgList);
|
||||||
// buildParkTimes(logicData, elementMap, mapDataBuildResult.getParkTimeMap(), errMsgList);
|
// buildParkTimes(logicData, elementMap, mapDataBuildResult.getParkTimeMap(), errMsgList);
|
||||||
|
|
||||||
|
// 处理指示灯逻辑信息
|
||||||
|
InterlockBuilder2.buildAssistIndicatorLogic(elementMap, errMsgList, logicData.getIndicatorSectionVOList());
|
||||||
|
// 处理按钮逻辑信息
|
||||||
|
InterlockBuilder2.buildAssistButtonLogic(elementMap, errMsgList, logicData.getButtonStandVOList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void buildParkTimes(MapLogicDataNewVO logicData, Map<String, MapElement> elementMap, Map<String, StationParkTime> parkTimeMap,
|
private static void buildParkTimes(MapLogicDataNewVO logicData, Map<String, MapElement> elementMap, Map<String, StationParkTime> parkTimeMap,
|
||||||
@ -317,7 +326,7 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
MapSectionPathVO sectionPathVO = new MapSectionPathVO(route.getStart().isRight(), mapRouteVO.getRouteSectionList(), mapRouteVO.getRouteSwitchList());
|
MapSectionPathVO sectionPathVO = new MapSectionPathVO(route.getStart().isRight(), mapRouteVO.getRouteSectionList(), mapRouteVO.getRouteSwitchList());
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
SectionPath sectionPath = checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
SectionPath sectionPath = InterlockBuilder2.checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
||||||
for (String msg : errorList) {
|
for (String msg : errorList) {
|
||||||
errMsgList.add(String.format("进路[%s(%s)]内区段路径数据异常:%s",
|
errMsgList.add(String.format("进路[%s(%s)]内区段路径数据异常:%s",
|
||||||
route.getName(), route.getCode(), msg));
|
route.getName(), route.getCode(), msg));
|
||||||
@ -446,7 +455,7 @@ public class InterlockBuilder2 {
|
|||||||
signal.getName(), signal.getCode()));
|
signal.getName(), signal.getCode()));
|
||||||
} else {
|
} else {
|
||||||
for (MapSectionPathVO sectionPathVO : sectionPathVOList) {
|
for (MapSectionPathVO sectionPathVO : sectionPathVOList) {
|
||||||
SectionPath sectionPath = checkAndBuildSectionPath(sectionPathVO, elementMap, errMsgList);
|
SectionPath sectionPath = InterlockBuilder2.checkAndBuildSectionPath(sectionPathVO, elementMap, errMsgList);
|
||||||
sectionPathList.add(sectionPath);
|
sectionPathList.add(sectionPath);
|
||||||
}
|
}
|
||||||
signal.setApproachPathList(sectionPathList);
|
signal.setApproachPathList(sectionPathList);
|
||||||
@ -492,7 +501,7 @@ public class InterlockBuilder2 {
|
|||||||
if (!CollectionUtils.isEmpty(pathVOList)) {
|
if (!CollectionUtils.isEmpty(pathVOList)) {
|
||||||
for (MapSectionPathVO sectionPathVO : pathVOList) {
|
for (MapSectionPathVO sectionPathVO : pathVOList) {
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
SectionPath sectionPath = checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
SectionPath sectionPath = InterlockBuilder2.checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
||||||
for (String errmsg : errorList) {
|
for (String errmsg : errorList) {
|
||||||
errMsgList.add(String.format("延续保护[%s(%s)]区段数据异常:%s",
|
errMsgList.add(String.format("延续保护[%s(%s)]区段数据异常:%s",
|
||||||
routeOverlap.getName(), routeOverlap.getCode(), errmsg));
|
routeOverlap.getName(), routeOverlap.getCode(), errmsg));
|
||||||
@ -517,7 +526,7 @@ public class InterlockBuilder2 {
|
|||||||
if (!CollectionUtils.isEmpty(triggerPathVOList)) {
|
if (!CollectionUtils.isEmpty(triggerPathVOList)) {
|
||||||
for (MapSectionPathVO sectionPathVO : triggerPathVOList) {
|
for (MapSectionPathVO sectionPathVO : triggerPathVOList) {
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
SectionPath sectionPath = checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
SectionPath sectionPath = InterlockBuilder2.checkAndBuildSectionPath(sectionPathVO, elementMap, errorList);
|
||||||
for (String errmsg : errorList) {
|
for (String errmsg : errorList) {
|
||||||
errMsgList.add(String.format("延续保护[%s(%s)]触发区段数据异常:%s",
|
errMsgList.add(String.format("延续保护[%s(%s)]触发区段数据异常:%s",
|
||||||
routeOverlap.getName(), routeOverlap.getCode(), errmsg));
|
routeOverlap.getName(), routeOverlap.getCode(), errmsg));
|
||||||
@ -569,13 +578,13 @@ public class InterlockBuilder2 {
|
|||||||
Map<String, RouteFls> map = new HashMap<>();
|
Map<String, RouteFls> map = new HashMap<>();
|
||||||
for (MapRouteFlankProtectionNewVO fpVO : flankProtectionList) {
|
for (MapRouteFlankProtectionNewVO fpVO : flankProtectionList) {
|
||||||
RouteFls routeFls = new RouteFls(fpVO.getCode(), new SwitchElement((Switch) elementMap.get(fpVO.getSource().getSwitchCode()), fpVO.getSource().isNormal()));
|
RouteFls routeFls = new RouteFls(fpVO.getCode(), new SwitchElement((Switch) elementMap.get(fpVO.getSource().getSwitchCode()), fpVO.getSource().isNormal()));
|
||||||
List<RouteFls.FlsElement> level1List = checkAndBuildFlsElementList(fpVO.getLevel1List(), elementMap);
|
List<RouteFls.FlsElement> level1List = InterlockBuilder2.checkAndBuildFlsElementList(fpVO.getLevel1List(), elementMap);
|
||||||
routeFls.setLevel1List(level1List);
|
routeFls.setLevel1List(level1List);
|
||||||
List<RouteFls.FlsElement> level2List = checkAndBuildFlsElementList(fpVO.getLevel2List(), elementMap);
|
List<RouteFls.FlsElement> level2List = InterlockBuilder2.checkAndBuildFlsElementList(fpVO.getLevel2List(), elementMap);
|
||||||
routeFls.setLevel2List(level2List);
|
routeFls.setLevel2List(level2List);
|
||||||
map.put(routeFls.getCode(), routeFls);
|
map.put(routeFls.getCode(), routeFls);
|
||||||
}
|
}
|
||||||
log.debug("构建侧防耗时:" + (System.currentTimeMillis() - start));
|
InterlockBuilder2.log.debug("构建侧防耗时:" + (System.currentTimeMillis() - start));
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,13 +691,13 @@ public class InterlockBuilder2 {
|
|||||||
rightFrontTurnBack = stationBFrontTurnBack;
|
rightFrontTurnBack = stationBFrontTurnBack;
|
||||||
}
|
}
|
||||||
//从左边车站右行站台站台轨开始,构建运行路径--- (不标准的目的地码定义数据会导致运行路径构建错误)
|
//从左边车站右行站台站台轨开始,构建运行路径--- (不标准的目的地码定义数据会导致运行路径构建错误)
|
||||||
Section startSection4RoutePath = selectSection4DestinationCode(leftStation, leftFrontTurnBack, necessarySectionSet, true); //查询路径的起始区段
|
Section startSection4RoutePath = InterlockBuilder2.selectSection4DestinationCode(leftStation, leftFrontTurnBack, necessarySectionSet, true); //查询路径的起始区段
|
||||||
Section endSection4RoutePath = selectSection4DestinationCode(rightStation, rightFrontTurnBack, necessarySectionSet, false); //查询路径的终点区段
|
Section endSection4RoutePath = InterlockBuilder2.selectSection4DestinationCode(rightStation, rightFrontTurnBack, necessarySectionSet, false); //查询路径的终点区段
|
||||||
routes = new ArrayList<>();
|
routes = new ArrayList<>();
|
||||||
//选择并添加进路
|
//选择并添加进路
|
||||||
selectAndAddRoutes(startSection4RoutePath, endSection4RoutePath, true, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
InterlockBuilder2.selectAndAddRoutes(startSection4RoutePath, endSection4RoutePath, true, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
||||||
//选择并添加反向的进路
|
//选择并添加反向的进路
|
||||||
selectAndAddRoutes(endSection4RoutePath, startSection4RoutePath, false, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
InterlockBuilder2.selectAndAddRoutes(endSection4RoutePath, startSection4RoutePath, false, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
||||||
runPath = routes.stream().flatMap(route -> route.getSectionList().stream()).distinct().collect(Collectors.toList());
|
runPath = routes.stream().flatMap(route -> route.getSectionList().stream()).distinct().collect(Collectors.toList());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -705,7 +714,7 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
if (startSection != null) {
|
if (startSection != null) {
|
||||||
routes = new ArrayList<>();
|
routes = new ArrayList<>();
|
||||||
selectAndAddRoutes(startSection, section, true, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
InterlockBuilder2.selectAndAddRoutes(startSection, section, true, stationList, standTrackAdjoinMap, routes, necessaryRoutes, necessarySectionSet);
|
||||||
runPath = routes.stream().flatMap(route -> route.getSectionList().stream()).distinct().collect(Collectors.toList());
|
runPath = routes.stream().flatMap(route -> route.getSectionList().stream()).distinct().collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -940,7 +949,7 @@ public class InterlockBuilder2 {
|
|||||||
SimulationBuilder.SimulationDeviceBuildResult buildResult,
|
SimulationBuilder.SimulationDeviceBuildResult buildResult,
|
||||||
List<String> errMsgList) {
|
List<String> errMsgList) {
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
log.debug("构建进路路径开始:" + start);
|
InterlockBuilder2.log.debug("构建进路路径开始:" + start);
|
||||||
if (CollectionUtils.isEmpty(stationRunLevelList)) {
|
if (CollectionUtils.isEmpty(stationRunLevelList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -974,7 +983,7 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("用时" + (System.currentTimeMillis() - l));
|
System.out.println("用时" + (System.currentTimeMillis() - l));
|
||||||
log.debug("构建进路路径耗时:" + (System.currentTimeMillis() - start));
|
InterlockBuilder2.log.debug("构建进路路径耗时:" + (System.currentTimeMillis() - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
@ -1038,7 +1047,7 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
List<Section> midSectionList = new ArrayList<>(); // 若可到达,记录途经进路的最后一个区段
|
List<Section> midSectionList = new ArrayList<>(); // 若可到达,记录途经进路的最后一个区段
|
||||||
List<String> warningList = new ArrayList<>(); // 警告消息
|
List<String> warningList = new ArrayList<>(); // 警告消息
|
||||||
boolean reachable = isReachable(startSection, endSection, right, 0, null, midSectionList, warningList);
|
boolean reachable = InterlockBuilder2.isReachable(startSection, endSection, right, 0, null, midSectionList, warningList);
|
||||||
if (!reachable) {
|
if (!reachable) {
|
||||||
errMsgList.add(String.format("从区段[%s(%s)]始到区段[%s(%s)]终," +
|
errMsgList.add(String.format("从区段[%s(%s)]始到区段[%s(%s)]终," +
|
||||||
"以进路方式查询无法到达,检测运行图数据或进路/自动信号数据是否有误。辅助信息:【%s】",
|
"以进路方式查询无法到达,检测运行图数据或进路/自动信号数据是否有误。辅助信息:【%s】",
|
||||||
@ -1180,7 +1189,7 @@ public class InterlockBuilder2 {
|
|||||||
if (Objects.nonNull(autoSignal)) { // 自动信号,单一路径
|
if (Objects.nonNull(autoSignal)) { // 自动信号,单一路径
|
||||||
List<Section> sectionList = autoSignal.getSectionList();
|
List<Section> sectionList = autoSignal.getSectionList();
|
||||||
if (CollectionUtils.isEmpty(sectionList)) { // 尽头防护信号机
|
if (CollectionUtils.isEmpty(sectionList)) { // 尽头防护信号机
|
||||||
log.info(String.format("从区段[%s(%s)]始到区段[%s(%s)]终,查询路径找到尽头防护信号[%s(%s)]也没找到",
|
InterlockBuilder2.log.info(String.format("从区段[%s(%s)]始到区段[%s(%s)]终,查询路径找到尽头防护信号[%s(%s)]也没找到",
|
||||||
startSection.getName(), startSection.getCode(),
|
startSection.getName(), startSection.getCode(),
|
||||||
endSection.getName(), endSection.getCode(),
|
endSection.getName(), endSection.getCode(),
|
||||||
startSignal.getName(), startSignal.getCode()));
|
startSignal.getName(), startSignal.getCode()));
|
||||||
@ -1211,7 +1220,7 @@ public class InterlockBuilder2 {
|
|||||||
if (!current.isSwitchTrack() && ((startSignal.isRight() && Objects.isNull(current.getRightSection()))
|
if (!current.isSwitchTrack() && ((startSignal.isRight() && Objects.isNull(current.getRightSection()))
|
||||||
||
|
||
|
||||||
(!startSignal.isRight() && Objects.isNull(current.getLeftSection())))) {
|
(!startSignal.isRight() && Objects.isNull(current.getLeftSection())))) {
|
||||||
log.info(String.format("从区段[%s(%s)]始到区段[%s(%s)]终,查询路径找到尽头区段[%s(%s)]也没找到",
|
InterlockBuilder2.log.info(String.format("从区段[%s(%s)]始到区段[%s(%s)]终,查询路径找到尽头区段[%s(%s)]也没找到",
|
||||||
startSection.getName(), startSection.getCode(),
|
startSection.getName(), startSection.getCode(),
|
||||||
endSection.getName(), endSection.getCode(),
|
endSection.getName(), endSection.getCode(),
|
||||||
current.getName(), current.getCode()));
|
current.getName(), current.getCode()));
|
||||||
@ -1248,7 +1257,7 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Section section : endSectionSet) { // 未找到,递归查询
|
for (Section section : endSectionSet) { // 未找到,递归查询
|
||||||
boolean reachable = isReachable(startSection, endSection, right,
|
boolean reachable = InterlockBuilder2.isReachable(startSection, endSection, right,
|
||||||
++count, section, midSectionList, warningList);
|
++count, section, midSectionList, warningList);
|
||||||
if (reachable) {
|
if (reachable) {
|
||||||
midSectionList.add(section);
|
midSectionList.add(section);
|
||||||
@ -1393,7 +1402,7 @@ public class InterlockBuilder2 {
|
|||||||
|
|
||||||
private static void checkBetweenRouteSameDirectionSignal(Map<String, MapElement> elementMap, List<String> errMsgList) {
|
private static void checkBetweenRouteSameDirectionSignal(Map<String, MapElement> elementMap, List<String> errMsgList) {
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
log.debug("构建自动折返进路开始");
|
InterlockBuilder2.log.debug("构建自动折返进路开始");
|
||||||
if (!CollectionUtils.isEmpty(errMsgList)) { // 数据中本身存在错误,不检查
|
if (!CollectionUtils.isEmpty(errMsgList)) { // 数据中本身存在错误,不检查
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1413,19 +1422,81 @@ public class InterlockBuilder2 {
|
|||||||
}
|
}
|
||||||
// 对应方向信号机存在
|
// 对应方向信号机存在
|
||||||
if (!CollectionUtils.isEmpty(signal.getRouteList())) {
|
if (!CollectionUtils.isEmpty(signal.getRouteList())) {
|
||||||
log.debug(String.format("进路[%s(%s)]内区段[%s(%s)]存在同向信号机[%s(%s)]," +
|
InterlockBuilder2.log.debug(String.format("进路[%s(%s)]内区段[%s(%s)]存在同向信号机[%s(%s)]," +
|
||||||
"此信号机不能是进路始端信号机,请检查进路是否始端/终端信号机选择错误,或者此信号机是自动信号而非进路始端信号机",
|
"此信号机不能是进路始端信号机,请检查进路是否始端/终端信号机选择错误,或者此信号机是自动信号而非进路始端信号机",
|
||||||
route.getName(), route.getCode(),
|
route.getName(), route.getCode(),
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
signal.getName(), signal.getCode()));
|
signal.getName(), signal.getCode()));
|
||||||
} else if (Objects.isNull(signal.getAutoSignal())) {
|
} else if (Objects.isNull(signal.getAutoSignal())) {
|
||||||
log.debug(String.format("进路[%s(%s)]内区段[%s(%s)]存在同向信号机[%s(%s)],此信号机却不是自动信号",
|
InterlockBuilder2.log.debug(String.format("进路[%s(%s)]内区段[%s(%s)]存在同向信号机[%s(%s)],此信号机却不是自动信号",
|
||||||
route.getName(), route.getCode(),
|
route.getName(), route.getCode(),
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
signal.getName(), signal.getCode()));
|
signal.getName(), signal.getCode()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("构建自动折返进路耗时:" + (System.currentTimeMillis() - start));
|
InterlockBuilder2.log.debug("构建自动折返进路耗时:" + (System.currentTimeMillis() - start));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建指示灯的逻辑信息
|
||||||
|
*
|
||||||
|
* @param elementMap 设备信息
|
||||||
|
* @param errMsgList 错误信息
|
||||||
|
* @param indicatorSectionVOList 逻辑关联关系
|
||||||
|
*/
|
||||||
|
private static void buildAssistIndicatorLogic(Map<String, MapElement> elementMap, List<String> errMsgList, List<IndicatorSection> indicatorSectionVOList) {
|
||||||
|
if (!CollectionUtils.isEmpty(indicatorSectionVOList)) {
|
||||||
|
indicatorSectionVOList.stream().forEach(indicatorSection -> {
|
||||||
|
// 获取指示灯
|
||||||
|
Indicator indicator = (Indicator) elementMap.get(indicatorSection.getIndicatorCode());
|
||||||
|
// 有关联的区间信息
|
||||||
|
if (!CollectionUtils.isEmpty(indicatorSection.getSectionList())) {
|
||||||
|
List<Section> sectionList = indicatorSection.getSectionList()
|
||||||
|
.stream()
|
||||||
|
.map(sectionCode -> (Section) elementMap.get(sectionCode))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
indicator.setSectionList(sectionList);
|
||||||
|
}
|
||||||
|
// 获取站台信息
|
||||||
|
if (!StringUtils.isEmpty(indicatorSection.getStandCode())) {
|
||||||
|
Stand stand = (Stand) elementMap.get(indicatorSection.getStandCode());
|
||||||
|
indicator.setStand(stand);
|
||||||
|
}
|
||||||
|
// 获取进路信息
|
||||||
|
if (!StringUtils.isEmpty(indicatorSection.getRouteCode())) {
|
||||||
|
Route route = (Route) elementMap.get(indicatorSection.getRouteCode());
|
||||||
|
indicator.setRoute(route);
|
||||||
|
}
|
||||||
|
// 指示灯类型
|
||||||
|
indicator.setType(IndicatorTypeEnum.getType(indicatorSection.getType()));
|
||||||
|
indicator.reset();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建按钮的逻辑信息
|
||||||
|
*
|
||||||
|
* @param elementMap 设备信息
|
||||||
|
* @param errMsgList 错误信息
|
||||||
|
* @param buttonStandVOList 逻辑关联关系
|
||||||
|
*/
|
||||||
|
private static void buildAssistButtonLogic(Map<String, MapElement> elementMap, List<String> errMsgList, List<ButtonStand> buttonStandVOList) {
|
||||||
|
if (!CollectionUtils.isEmpty(buttonStandVOList)) {
|
||||||
|
buttonStandVOList.stream().forEach(buttonStand -> {
|
||||||
|
// 获取指示灯
|
||||||
|
Button button = (Button) elementMap.get(buttonStand.getButtonCode());
|
||||||
|
// 获取站台信息
|
||||||
|
if (!StringUtils.isEmpty(buttonStand.getStandCode())) {
|
||||||
|
Stand stand = (Stand) elementMap.get(buttonStand.getStandCode());
|
||||||
|
button.setStand(stand);
|
||||||
|
}
|
||||||
|
// 指示灯类型
|
||||||
|
button.setType(ButtonTypeEnum.getType(buttonStand.getType()));
|
||||||
|
button.reset();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package club.joylink.rtss.simulation.cbtc.build;
|
package club.joylink.rtss.simulation.cbtc.build;
|
||||||
|
|
||||||
import club.joylink.rtss.constants.BusinessConsts;
|
import club.joylink.rtss.constants.BusinessConsts;
|
||||||
|
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SignalModel;
|
import club.joylink.rtss.simulation.cbtc.constant.SignalModel;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||||
@ -45,10 +46,10 @@ public class MapDeviceBuilder {
|
|||||||
elementMap.put(zc.getCode(), zc);
|
elementMap.put(zc.getCode(), zc);
|
||||||
});
|
});
|
||||||
// 车站
|
// 车站
|
||||||
buildStation(graphData, elementMap, deviceMap, errMsgList);
|
MapDeviceBuilder.buildStation(graphData, elementMap, deviceMap, errMsgList);
|
||||||
// 区段
|
// 区段
|
||||||
List<MapSectionNewVO> sectionList = graphData.getSectionList();
|
List<MapSectionNewVO> sectionList = graphData.getSectionList();
|
||||||
buildSections(elementMap, deviceMap, errMsgList, sectionList);
|
MapDeviceBuilder.buildSections(elementMap, deviceMap, errMsgList, sectionList);
|
||||||
// 道岔
|
// 道岔
|
||||||
List<MapSwitchVO> switchList = graphData.getSwitchList();
|
List<MapSwitchVO> switchList = graphData.getSwitchList();
|
||||||
switchList.forEach(switchVO -> {
|
switchList.forEach(switchVO -> {
|
||||||
@ -105,7 +106,7 @@ public class MapDeviceBuilder {
|
|||||||
Section section = (Section) elementMap.get(sectionVO.getCode());
|
Section section = (Section) elementMap.get(sectionVO.getCode());
|
||||||
if (Objects.equals(BusinessConsts.Section.SectionType.Type02, sectionVO.getType()) ||
|
if (Objects.equals(BusinessConsts.Section.SectionType.Type02, sectionVO.getType()) ||
|
||||||
Objects.equals(BusinessConsts.Section.SectionType.Type03, sectionVO.getType()) ||
|
Objects.equals(BusinessConsts.Section.SectionType.Type03, sectionVO.getType()) ||
|
||||||
isCross(sectionVO.getType())) { // 逻辑区段/道岔区段/岔心
|
MapDeviceBuilder.isCross(sectionVO.getType())) { // 逻辑区段/道岔区段/岔心
|
||||||
Section parent = (Section) elementMap.get(sectionVO.getParentCode());
|
Section parent = (Section) elementMap.get(sectionVO.getParentCode());
|
||||||
if (Objects.isNull(parent)) {
|
if (Objects.isNull(parent)) {
|
||||||
errMsgList.add(String.format("逻辑区段/道岔区段/岔心[%s(%s)]没用关联(道岔)计轴区段或关联的(道岔)计轴区段不存在",
|
errMsgList.add(String.format("逻辑区段/道岔区段/岔心[%s(%s)]没用关联(道岔)计轴区段或关联的(道岔)计轴区段不存在",
|
||||||
@ -366,7 +367,7 @@ public class MapDeviceBuilder {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// 站台
|
// 站台
|
||||||
List<MapStationStandNewVO> standList = buildStand(graphData, elementMap, errMsgList);
|
List<MapStationStandNewVO> standList = MapDeviceBuilder.buildStand(graphData, elementMap, errMsgList);
|
||||||
// 站台轨关系数据校验
|
// 站台轨关系数据校验
|
||||||
List<Section> standTrackList = elementMap.values().stream()
|
List<Section> standTrackList = elementMap.values().stream()
|
||||||
.filter(mapElement -> Objects.equals(mapElement.getDeviceType(), MapElement.DeviceType.SECTION) &&
|
.filter(mapElement -> Objects.equals(mapElement.getDeviceType(), MapElement.DeviceType.SECTION) &&
|
||||||
@ -390,9 +391,9 @@ public class MapDeviceBuilder {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// PSD 站台屏蔽门
|
// PSD 站台屏蔽门
|
||||||
buildPsd(graphData, elementMap, deviceMap, errMsgList);
|
MapDeviceBuilder.buildPsd(graphData, elementMap, deviceMap, errMsgList);
|
||||||
// ESP 紧急停车按钮
|
// ESP 紧急停车按钮
|
||||||
buildEsp(graphData, elementMap, errMsgList);
|
MapDeviceBuilder.buildEsp(graphData, elementMap, errMsgList);
|
||||||
// 站台逻辑关系数据检查
|
// 站台逻辑关系数据检查
|
||||||
standList.forEach(standVO -> {
|
standList.forEach(standVO -> {
|
||||||
Stand stand = (Stand) elementMap.get(standVO.getCode());
|
Stand stand = (Stand) elementMap.get(standVO.getCode());
|
||||||
@ -407,9 +408,9 @@ public class MapDeviceBuilder {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 区段是否站台轨、转换轨检查
|
// 区段是否站台轨、转换轨检查
|
||||||
checkSectionFunctionType(elementMap, errMsgList);
|
MapDeviceBuilder.checkSectionFunctionType(elementMap, errMsgList);
|
||||||
// 信号机
|
// 信号机
|
||||||
buildSignal(graphData, elementMap, deviceMap, errMsgList);
|
MapDeviceBuilder.buildSignal(graphData, elementMap, deviceMap, errMsgList);
|
||||||
|
|
||||||
// 折返区段左右信号机存在校验
|
// 折返区段左右信号机存在校验
|
||||||
for (Section section : physicalSectionList) {
|
for (Section section : physicalSectionList) {
|
||||||
@ -692,13 +693,19 @@ public class MapDeviceBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 接触网
|
// 接触网
|
||||||
buildCatenary(graphData, elementMap, errMsgList, mapDataBuildResult.getCatenaryMap());
|
MapDeviceBuilder.buildCatenary(graphData, elementMap, errMsgList, mapDataBuildResult.getCatenaryMap());
|
||||||
//应答器
|
//应答器
|
||||||
buildResponderDataRef(graphData, elementMap, errMsgList, mapDataBuildResult.getSectionRespondersMap());
|
MapDeviceBuilder.buildResponderDataRef(graphData, elementMap, errMsgList, mapDataBuildResult.getSectionRespondersMap());
|
||||||
if (mapDataBuildResult.getErrMsgList().isEmpty()) {
|
if (mapDataBuildResult.getErrMsgList().isEmpty()) {
|
||||||
Map<String, Set<Section>> sectionArriveMap = buildNormalStandTrackAdjoinSections(mapDataBuildResult.getDeviceMap());
|
Map<String, Set<Section>> sectionArriveMap = MapDeviceBuilder.buildNormalStandTrackAdjoinSections(mapDataBuildResult.getDeviceMap());
|
||||||
mapDataBuildResult.setSectionArriveNearMap(sectionArriveMap);
|
mapDataBuildResult.setSectionArriveNearMap(sectionArriveMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 构建接、发、区间、辅助指示灯
|
||||||
|
MapDeviceBuilder.buildAssistIndicator(elementMap, errMsgList, graphData.getIndicatorLightList());
|
||||||
|
|
||||||
|
// 构建辅助、改方按钮
|
||||||
|
MapDeviceBuilder.buildAssistButton(elementMap, errMsgList, graphData.getSignalButtonList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<MapStationStandNewVO> buildStand(MapGraphDataNewVO graphData, Map<String, MapElement> elementMap, List<String> errMsgList) {
|
private static List<MapStationStandNewVO> buildStand(MapGraphDataNewVO graphData, Map<String, MapElement> elementMap, List<String> errMsgList) {
|
||||||
@ -856,12 +863,12 @@ public class MapDeviceBuilder {
|
|||||||
Map<String, Set<Section>> sectionDirectionSectionsMap = new HashMap<>();
|
Map<String, Set<Section>> sectionDirectionSectionsMap = new HashMap<>();
|
||||||
for (Section section : standTrackList) {
|
for (Section section : standTrackList) {
|
||||||
Set<Section> rightDirectionList = new HashSet<>();
|
Set<Section> rightDirectionList = new HashSet<>();
|
||||||
sectionDirectionSectionsMap.put(buildSectionDirectionKey(section, true), rightDirectionList);
|
sectionDirectionSectionsMap.put(MapDeviceBuilder.buildSectionDirectionKey(section, true), rightDirectionList);
|
||||||
queryAdjoinSections(section, true, rightDirectionList);
|
MapDeviceBuilder.queryAdjoinSections(section, true, rightDirectionList);
|
||||||
Set<Section> leftDirectionList = new HashSet<>();
|
Set<Section> leftDirectionList = new HashSet<>();
|
||||||
sectionDirectionSectionsMap.put(buildSectionDirectionKey(section, false), leftDirectionList);
|
sectionDirectionSectionsMap.put(MapDeviceBuilder.buildSectionDirectionKey(section, false), leftDirectionList);
|
||||||
queryAdjoinSections(section, false, leftDirectionList);
|
MapDeviceBuilder.queryAdjoinSections(section, false, leftDirectionList);
|
||||||
log.debug(String.format("区段[%s][右向]邻接区段为[%s],[左向]邻接区段为[%s]",
|
MapDeviceBuilder.log.debug(String.format("区段[%s][右向]邻接区段为[%s],[左向]邻接区段为[%s]",
|
||||||
section.debugStr(),
|
section.debugStr(),
|
||||||
String.join(",", rightDirectionList.stream().map(Section::debugStr).collect(Collectors.toList())),
|
String.join(",", rightDirectionList.stream().map(Section::debugStr).collect(Collectors.toList())),
|
||||||
String.join(",", leftDirectionList.stream().map(Section::debugStr).collect(Collectors.toList()))));
|
String.join(",", leftDirectionList.stream().map(Section::debugStr).collect(Collectors.toList()))));
|
||||||
@ -889,7 +896,7 @@ public class MapDeviceBuilder {
|
|||||||
if (next == null) { // 可能到尽头了
|
if (next == null) { // 可能到尽头了
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (checkAdjoinSectionAndAdd(next, rightDirectionList)) {
|
if (MapDeviceBuilder.checkAdjoinSectionAndAdd(next, rightDirectionList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
signal = next.getSignalOf(right);
|
signal = next.getSignalOf(right);
|
||||||
@ -902,7 +909,7 @@ public class MapDeviceBuilder {
|
|||||||
if (signal == null) {
|
if (signal == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
queryAdjoinSections(signal, rightDirectionList);
|
MapDeviceBuilder.queryAdjoinSections(signal, rightDirectionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void queryAdjoinSections(Signal signal, Set<Section> rightDirectionList) {
|
private static void queryAdjoinSections(Signal signal, Set<Section> rightDirectionList) {
|
||||||
@ -915,12 +922,12 @@ public class MapDeviceBuilder {
|
|||||||
}
|
}
|
||||||
List<Section> sectionList = autoSignal.getSectionList();
|
List<Section> sectionList = autoSignal.getSectionList();
|
||||||
for (Section temp : sectionList) {
|
for (Section temp : sectionList) {
|
||||||
if (checkAdjoinSectionAndAdd(temp, rightDirectionList)) {
|
if (MapDeviceBuilder.checkAdjoinSectionAndAdd(temp, rightDirectionList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
signal = temp.getSignalOf(right);
|
signal = temp.getSignalOf(right);
|
||||||
if (signal != null) {
|
if (signal != null) {
|
||||||
queryAdjoinSections(signal, rightDirectionList);
|
MapDeviceBuilder.queryAdjoinSections(signal, rightDirectionList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -932,7 +939,7 @@ public class MapDeviceBuilder {
|
|||||||
List<Section> sectionList = route.getSectionList();
|
List<Section> sectionList = route.getSectionList();
|
||||||
boolean finish = false;
|
boolean finish = false;
|
||||||
for (Section section : sectionList) {
|
for (Section section : sectionList) {
|
||||||
if (checkAdjoinSectionAndAdd(section, rightDirectionList)) {
|
if (MapDeviceBuilder.checkAdjoinSectionAndAdd(section, rightDirectionList)) {
|
||||||
finish = true;
|
finish = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -942,7 +949,7 @@ public class MapDeviceBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Signal next : queryList) {
|
for (Signal next : queryList) {
|
||||||
queryAdjoinSections(next, rightDirectionList);
|
MapDeviceBuilder.queryAdjoinSections(next, rightDirectionList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -985,17 +992,17 @@ public class MapDeviceBuilder {
|
|||||||
}
|
}
|
||||||
elementMap.put(section.getCode(), section);
|
elementMap.put(section.getCode(), section);
|
||||||
section.setRoadType(sectionVO.getRoadType());
|
section.setRoadType(sectionVO.getRoadType());
|
||||||
section.setPhysical(isPhysicalSection(sectionVO.getType()));
|
section.setPhysical(MapDeviceBuilder.isPhysicalSection(sectionVO.getType()));
|
||||||
section.setAxleCounter(isAxleCounterSection(sectionVO, sectionList));
|
section.setAxleCounter(MapDeviceBuilder.isAxleCounterSection(sectionVO, sectionList));
|
||||||
section.setCross(isCross(sectionVO.getType()));
|
section.setCross(MapDeviceBuilder.isCross(sectionVO.getType()));
|
||||||
// 计轴区段和道岔区段,校验实际长度
|
// 计轴区段和道岔区段,校验实际长度
|
||||||
if (isPhysicalSection(sectionVO.getType()) &&
|
if (MapDeviceBuilder.isPhysicalSection(sectionVO.getType()) &&
|
||||||
(Objects.isNull(sectionVO.getLengthFact()) ||
|
(Objects.isNull(sectionVO.getLengthFact()) ||
|
||||||
sectionVO.getLengthFact() <= 0 ||
|
sectionVO.getLengthFact() <= 0 ||
|
||||||
Float.isInfinite(sectionVO.getLengthFact()) ||
|
Float.isInfinite(sectionVO.getLengthFact()) ||
|
||||||
Float.isNaN(sectionVO.getLengthFact()))) {
|
Float.isNaN(sectionVO.getLengthFact()))) {
|
||||||
errMsgList.add(String.format("区段[%s(%s)]实际距离未设置或不为正数", sectionVO.getName(), sectionVO.getCode()));
|
errMsgList.add(String.format("区段[%s(%s)]实际距离未设置或不为正数", sectionVO.getName(), sectionVO.getCode()));
|
||||||
} else if (isPhysicalSection(sectionVO.getType())) {
|
} else if (MapDeviceBuilder.isPhysicalSection(sectionVO.getType())) {
|
||||||
section.setLen(sectionVO.getLengthFact());
|
section.setLen(sectionVO.getLengthFact());
|
||||||
}
|
}
|
||||||
if (Objects.equals(sectionVO.getType(), BusinessConsts.Section.SectionType.Type02)) { // 逻辑区段
|
if (Objects.equals(sectionVO.getType(), BusinessConsts.Section.SectionType.Type02)) { // 逻辑区段
|
||||||
@ -1411,7 +1418,7 @@ public class MapDeviceBuilder {
|
|||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
boolean find = findSectionsOfUnit(unitLeft, unitRight, sectionSet);
|
boolean find = MapDeviceBuilder.findSectionsOfUnit(unitLeft, unitRight, sectionSet);
|
||||||
if (!find) {
|
if (!find) {
|
||||||
errMsgList.add(String.format("接触网[%s]额外区段配置从区段[%s]向右查找不到区段[%s]",
|
errMsgList.add(String.format("接触网[%s]额外区段配置从区段[%s]向右查找不到区段[%s]",
|
||||||
code, leftSection.debugStr(), rightSection.debugStr()));
|
code, leftSection.debugStr(), rightSection.debugStr()));
|
||||||
@ -1421,7 +1428,7 @@ public class MapDeviceBuilder {
|
|||||||
if (error) {
|
if (error) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
boolean finish = findSectionsOfUnit(leftSection, rightSection, sectionSet);
|
boolean finish = MapDeviceBuilder.findSectionsOfUnit(leftSection, rightSection, sectionSet);
|
||||||
if (!finish) {
|
if (!finish) {
|
||||||
errMsgList.add(String.format("接触网配置从区段[%s]向右查找不到区段[%s]",
|
errMsgList.add(String.format("接触网配置从区段[%s]向右查找不到区段[%s]",
|
||||||
leftSection.debugStr(), rightSection.debugStr()));
|
leftSection.debugStr(), rightSection.debugStr()));
|
||||||
@ -1430,7 +1437,7 @@ public class MapDeviceBuilder {
|
|||||||
SectionPosition rightPosition = new SectionPosition(rightSection, line.getRightOffset());
|
SectionPosition rightPosition = new SectionPosition(rightSection, line.getRightOffset());
|
||||||
Catenary catenary = new Catenary(code, "", leftPosition, rightPosition, sectionSet);
|
Catenary catenary = new Catenary(code, "", leftPosition, rightPosition, sectionSet);
|
||||||
elementMap.put(catenary.getCode(), catenary);
|
elementMap.put(catenary.getCode(), catenary);
|
||||||
catenary.getSectionSet().forEach(s -> addCatenaryMap(s, catenary, catenaryMap));
|
catenary.getSectionSet().forEach(s -> MapDeviceBuilder.addCatenaryMap(s, catenary, catenaryMap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1491,7 +1498,7 @@ public class MapDeviceBuilder {
|
|||||||
return true;
|
return true;
|
||||||
if (Objects.equals(type, BusinessConsts.Section.SectionType.Type01)) {
|
if (Objects.equals(type, BusinessConsts.Section.SectionType.Type01)) {
|
||||||
String parentCode = sectionVO.getParentCode();
|
String parentCode = sectionVO.getParentCode();
|
||||||
return sectionList.stream().noneMatch(section -> isCross(section.getType()) && section.getCode().equals(parentCode));
|
return sectionList.stream().noneMatch(section -> MapDeviceBuilder.isCross(section.getType()) && section.getCode().equals(parentCode));
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1500,4 +1507,64 @@ public class MapDeviceBuilder {
|
|||||||
private static boolean isCross(String type) {
|
private static boolean isCross(String type) {
|
||||||
return Objects.equals(type, BusinessConsts.Section.SectionType.Type05);
|
return Objects.equals(type, BusinessConsts.Section.SectionType.Type05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建指示灯
|
||||||
|
*
|
||||||
|
* @param elementMap 资源map
|
||||||
|
* @param errMsgList 错误提示
|
||||||
|
* @param indicatorList 指示灯信息
|
||||||
|
*/
|
||||||
|
private static void buildAssistIndicator(Map<String, MapElement> elementMap
|
||||||
|
, List<String> errMsgList, List<MapIndicatorLightVO> indicatorList) {
|
||||||
|
indicatorList
|
||||||
|
.stream()
|
||||||
|
.filter(mapIndicatorLightVO ->
|
||||||
|
Arrays.stream(DirectionLabelEnum.values())
|
||||||
|
.filter(e -> e.equals(mapIndicatorLightVO.getLabelEnum()))
|
||||||
|
.findAny()
|
||||||
|
.isPresent()
|
||||||
|
)
|
||||||
|
.forEach(mapSignalButtonVO -> {
|
||||||
|
if (elementMap.containsKey(mapSignalButtonVO.getCode())) {
|
||||||
|
errMsgList.add(String.format("指示灯[%s]必须唯一", mapSignalButtonVO.getCode()));
|
||||||
|
} else {
|
||||||
|
Indicator indicator = new Indicator(mapSignalButtonVO.getCode(), mapSignalButtonVO.getName());
|
||||||
|
indicator.setLabel(mapSignalButtonVO.getLabelEnum());
|
||||||
|
Station station = (Station) elementMap.get(mapSignalButtonVO.getStationCode());
|
||||||
|
indicator.setStation(station);
|
||||||
|
elementMap.put(indicator.getCode(), indicator);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建按钮设备
|
||||||
|
*
|
||||||
|
* @param elementMap 设备Map
|
||||||
|
* @param errMsgList 错误列表
|
||||||
|
* @param signalButtonList 按钮列表
|
||||||
|
*/
|
||||||
|
private static void buildAssistButton(Map<String, MapElement> elementMap
|
||||||
|
, List<String> errMsgList, List<MapSignalButtonVO> signalButtonList) {
|
||||||
|
signalButtonList
|
||||||
|
.stream()
|
||||||
|
.filter(mapSignalButtonVO ->
|
||||||
|
Arrays.stream(DirectionLabelEnum.values())
|
||||||
|
.filter(e -> e.equals(mapSignalButtonVO.getLabelEnum()))
|
||||||
|
.findAny()
|
||||||
|
.isPresent()
|
||||||
|
)
|
||||||
|
.forEach(mapSignalButtonVO -> {
|
||||||
|
if (elementMap.containsKey(mapSignalButtonVO.getCode())) {
|
||||||
|
errMsgList.add(String.format("按钮[%s]必须唯一", mapSignalButtonVO.getCode()));
|
||||||
|
} else {
|
||||||
|
Button button = new Button(mapSignalButtonVO.getCode(), mapSignalButtonVO.getName());
|
||||||
|
button.setLabel(mapSignalButtonVO.getLabelEnum());
|
||||||
|
Station station = (Station) elementMap.get(mapSignalButtonVO.getStationCode());
|
||||||
|
button.setStation(station);
|
||||||
|
elementMap.put(button.getCode(), button);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package club.joylink.rtss.simulation.cbtc.data.map;
|
|||||||
|
|
||||||
import club.joylink.rtss.constants.ButtonTypeEnum;
|
import club.joylink.rtss.constants.ButtonTypeEnum;
|
||||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@ -37,12 +36,17 @@ public class Button extends MapNamedElement {
|
|||||||
*/
|
*/
|
||||||
private ButtonTypeEnum type;
|
private ButtonTypeEnum type;
|
||||||
|
|
||||||
|
public Button(String code, String name) {
|
||||||
|
super(code, name, DeviceType.BUTTON);
|
||||||
|
isPressDown = Boolean.FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
protected Button(String code, String name, DeviceType deviceType) {
|
protected Button(String code, String name, DeviceType deviceType) {
|
||||||
super(code, name, deviceType);
|
super(code, name, deviceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
this.isPressDown = Boolean.FALSE;
|
isPressDown = Boolean.FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,11 @@ package club.joylink.rtss.simulation.cbtc.data.map;
|
|||||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||||
import club.joylink.rtss.constants.IndicatorTypeEnum;
|
import club.joylink.rtss.constants.IndicatorTypeEnum;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 指示灯设备
|
* 指示灯设备
|
||||||
*/
|
*/
|
||||||
@ -19,16 +20,6 @@ public class Indicator extends MapNamedElement{
|
|||||||
*/
|
*/
|
||||||
private Station station;
|
private Station station;
|
||||||
|
|
||||||
/**
|
|
||||||
* 站台
|
|
||||||
*/
|
|
||||||
private Stand stand;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 进路
|
|
||||||
*/
|
|
||||||
private Route route;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前信号显示
|
* 当前信号显示
|
||||||
*/
|
*/
|
||||||
@ -39,15 +30,35 @@ public class Indicator extends MapNamedElement{
|
|||||||
*/
|
*/
|
||||||
private DirectionLabelEnum label;
|
private DirectionLabelEnum label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否改方状态
|
||||||
|
*/
|
||||||
|
private boolean isChangeDirection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区段信息
|
||||||
|
*/
|
||||||
|
private List<Section> sectionList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 站台
|
||||||
|
*/
|
||||||
|
private Stand stand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 进路
|
||||||
|
*/
|
||||||
|
private Route route;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 灯类型
|
* 灯类型
|
||||||
*/
|
*/
|
||||||
private IndicatorTypeEnum type;
|
private IndicatorTypeEnum type;
|
||||||
|
|
||||||
/**
|
public Indicator(String code, String name) {
|
||||||
* 是否改方状态
|
super(code, name, DeviceType.INDICATOR);
|
||||||
*/
|
isChangeDirection = Boolean.FALSE;
|
||||||
private boolean isChangeDirection;
|
}
|
||||||
|
|
||||||
protected Indicator(String code, String name, DeviceType deviceType) {
|
protected Indicator(String code, String name, DeviceType deviceType) {
|
||||||
super(code, name, deviceType);
|
super(code, name, deviceType);
|
||||||
@ -55,11 +66,12 @@ public class Indicator extends MapNamedElement{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
this.aspect = getDefaultStatus();
|
aspect = getDefaultStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取默认状态
|
* 获取默认状态
|
||||||
|
*
|
||||||
* @return 默认状态
|
* @return 默认状态
|
||||||
*/
|
*/
|
||||||
public IndicatorStatusEnum getDefaultStatus() {
|
public IndicatorStatusEnum getDefaultStatus() {
|
||||||
@ -76,6 +88,7 @@ public class Indicator extends MapNamedElement{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取进路办理后的指示灯状态
|
* 获取进路办理后的指示灯状态
|
||||||
|
*
|
||||||
* @return 办理状态
|
* @return 办理状态
|
||||||
*/
|
*/
|
||||||
public IndicatorStatusEnum setLockRouteStatus() {
|
public IndicatorStatusEnum setLockRouteStatus() {
|
||||||
|
@ -13,68 +13,136 @@ public abstract class MapElement {
|
|||||||
*/
|
*/
|
||||||
public abstract void reset();
|
public abstract void reset();
|
||||||
|
|
||||||
/** 设备类型 */
|
/**
|
||||||
|
* 设备类型
|
||||||
|
*/
|
||||||
public enum DeviceType {
|
public enum DeviceType {
|
||||||
/** 区段 */
|
/**
|
||||||
|
* 区段
|
||||||
|
*/
|
||||||
SECTION,
|
SECTION,
|
||||||
/** 计轴器 */
|
/**
|
||||||
|
* 计轴器
|
||||||
|
*/
|
||||||
AXLE_COUNTER,
|
AXLE_COUNTER,
|
||||||
/** 道岔 */
|
/**
|
||||||
|
* 道岔
|
||||||
|
*/
|
||||||
SWITCH,
|
SWITCH,
|
||||||
/** 信号机 */
|
/**
|
||||||
|
* 信号机
|
||||||
|
*/
|
||||||
SIGNAL,
|
SIGNAL,
|
||||||
/** 车站 */
|
/**
|
||||||
|
* 车站
|
||||||
|
*/
|
||||||
STATION,
|
STATION,
|
||||||
/** 站台 */
|
/**
|
||||||
|
* 站台
|
||||||
|
*/
|
||||||
STAND,
|
STAND,
|
||||||
/** 屏蔽门 */
|
/**
|
||||||
|
* 屏蔽门
|
||||||
|
*/
|
||||||
PSD,
|
PSD,
|
||||||
/** 紧急停车按钮 */
|
/**
|
||||||
|
* 紧急停车按钮
|
||||||
|
*/
|
||||||
ESP,
|
ESP,
|
||||||
/** 区域控制器 */
|
/**
|
||||||
|
* 区域控制器
|
||||||
|
*/
|
||||||
ZC,
|
ZC,
|
||||||
/** 线路控制器 */
|
/**
|
||||||
|
* 线路控制器
|
||||||
|
*/
|
||||||
LC,
|
LC,
|
||||||
/** 进路 */
|
/**
|
||||||
|
* 进路
|
||||||
|
*/
|
||||||
ROUTE,
|
ROUTE,
|
||||||
/** 进路延续保护 */
|
/**
|
||||||
|
* 进路延续保护
|
||||||
|
*/
|
||||||
OVERLAP,
|
OVERLAP,
|
||||||
/** 超限区段 */
|
/**
|
||||||
|
* 超限区段
|
||||||
|
*/
|
||||||
OVERRUN,
|
OVERRUN,
|
||||||
/** 侧防 */
|
/**
|
||||||
|
* 侧防
|
||||||
|
*/
|
||||||
FLANK_PROTECTION,
|
FLANK_PROTECTION,
|
||||||
/** 自动信号 */
|
/**
|
||||||
|
* 自动信号
|
||||||
|
*/
|
||||||
AUTO_SIGNAL,
|
AUTO_SIGNAL,
|
||||||
/** 自动折返 */
|
/**
|
||||||
|
* 自动折返
|
||||||
|
*/
|
||||||
CYCLE,
|
CYCLE,
|
||||||
/** 列车 */
|
/**
|
||||||
|
* 列车
|
||||||
|
*/
|
||||||
TRAIN,
|
TRAIN,
|
||||||
/** 列车门 */
|
/**
|
||||||
|
* 列车门
|
||||||
|
*/
|
||||||
TRAIN_DOOR,
|
TRAIN_DOOR,
|
||||||
/** 交路 */
|
/**
|
||||||
|
* 交路
|
||||||
|
*/
|
||||||
ROUTING,
|
ROUTING,
|
||||||
/** 站间运行等级 */
|
/**
|
||||||
|
* 站间运行等级
|
||||||
|
*/
|
||||||
RUN_LEVEL,
|
RUN_LEVEL,
|
||||||
/** 方向杆 */
|
/**
|
||||||
|
* 方向杆
|
||||||
|
*/
|
||||||
DIRECTION_ROD,
|
DIRECTION_ROD,
|
||||||
/** 接触网 */
|
/**
|
||||||
|
* 接触网
|
||||||
|
*/
|
||||||
CATENARY,
|
CATENARY,
|
||||||
/**应答器*/
|
/**
|
||||||
|
* 应答器
|
||||||
|
*/
|
||||||
RESPONDER,
|
RESPONDER,
|
||||||
/** 综合后备盘 */
|
/**
|
||||||
|
* 综合后备盘
|
||||||
|
*/
|
||||||
IBP,
|
IBP,
|
||||||
/** 就地控制盘 */
|
/**
|
||||||
|
* 就地控制盘
|
||||||
|
*/
|
||||||
PSL,
|
PSL,
|
||||||
/** 服务器 */
|
/**
|
||||||
|
* 服务器
|
||||||
|
*/
|
||||||
SERVER,
|
SERVER,
|
||||||
/** 广播 */
|
/**
|
||||||
|
* 广播
|
||||||
|
*/
|
||||||
AUDIO,
|
AUDIO,
|
||||||
|
/**
|
||||||
|
* 指示灯
|
||||||
|
*/
|
||||||
|
INDICATOR,
|
||||||
|
/**
|
||||||
|
* 操作按钮
|
||||||
|
*/
|
||||||
|
BUTTON
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 设备唯一编号 */
|
/**
|
||||||
|
* 设备唯一编号
|
||||||
|
*/
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
/** 设备类型 */
|
/**
|
||||||
|
* 设备类型
|
||||||
|
*/
|
||||||
private DeviceType deviceType;
|
private DeviceType deviceType;
|
||||||
|
|
||||||
protected MapElement(String code, DeviceType deviceType) {
|
protected MapElement(String code, DeviceType deviceType) {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
<result column="stand_code" jdbcType="VARCHAR" property="standCode"/>
|
<result column="stand_code" jdbcType="VARCHAR" property="standCode"/>
|
||||||
<result column="next_stand_code" jdbcType="VARCHAR" property="nextStandCode"/>
|
<result column="next_stand_code" jdbcType="VARCHAR" property="nextStandCode"/>
|
||||||
<result column="pre_stand_code" jdbcType="VARCHAR" property="preStandCode"/>
|
<result column="pre_stand_code" jdbcType="VARCHAR" property="preStandCode"/>
|
||||||
|
<result column="type" javaType="VARCHAR" property="type"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Example_Where_Clause">
|
<sql id="Example_Where_Clause">
|
||||||
@ -74,7 +75,7 @@
|
|||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, map_id, button_code, stand_code, next_stand_code, pre_stand_code
|
id, map_id, button_code, stand_code, next_stand_code, pre_stand_code,`type`
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectByExample" parameterType="club.joylink.rtss.entity.ButtonStandExample"
|
<select id="selectByExample" parameterType="club.joylink.rtss.entity.ButtonStandExample"
|
||||||
@ -121,10 +122,10 @@
|
|||||||
|
|
||||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="club.joylink.rtss.entity.ButtonStand"
|
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="club.joylink.rtss.entity.ButtonStand"
|
||||||
useGeneratedKeys="true">
|
useGeneratedKeys="true">
|
||||||
insert into button_stand_route (map_id, button_code,stand_code,next_stand_code,pre_stand_code)
|
insert into button_stand_route (map_id, button_code,stand_code,next_stand_code,pre_stand_code,type)
|
||||||
values (
|
values (
|
||||||
#{mapId,jdbcType=BIGINT}, #{buttonCode,jdbcType=VARCHAR}, #{standCode,jdbcType=VARCHAR},
|
#{mapId,jdbcType=BIGINT}, #{buttonCode,jdbcType=VARCHAR}, #{standCode,jdbcType=VARCHAR},
|
||||||
#{nextStandCode,jdbcType=VARCHAR}, #{preStandCode,jdbcType=VARCHAR}
|
#{nextStandCode,jdbcType=VARCHAR}, #{preStandCode,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@ -137,6 +138,7 @@
|
|||||||
<if test="standCode != null">stand_code,</if>
|
<if test="standCode != null">stand_code,</if>
|
||||||
<if test="nextStandCode != null">next_stand_code,</if>
|
<if test="nextStandCode != null">next_stand_code,</if>
|
||||||
<if test="preStandCode != null">pre_stand_code,</if>
|
<if test="preStandCode != null">pre_stand_code,</if>
|
||||||
|
<if test="type != null">type,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="mapId != null">#{mapId,jdbcType=BIGINT},</if>
|
<if test="mapId != null">#{mapId,jdbcType=BIGINT},</if>
|
||||||
@ -144,6 +146,7 @@
|
|||||||
<if test="standCode != null">#{standCode,jdbcType=VARCHAR},</if>
|
<if test="standCode != null">#{standCode,jdbcType=VARCHAR},</if>
|
||||||
<if test="nextStandCode != null">#{nextStandCode,jdbcType=VARCHAR},</if>
|
<if test="nextStandCode != null">#{nextStandCode,jdbcType=VARCHAR},</if>
|
||||||
<if test="preStandCode != null">#{preStandCode,jdbcType=VARCHAR},</if>
|
<if test="preStandCode != null">#{preStandCode,jdbcType=VARCHAR},</if>
|
||||||
|
<if test="type != null">#{type,jdbcType=VARCHAR},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@ -175,6 +178,9 @@
|
|||||||
<if test="record.preStandCode != null">
|
<if test="record.preStandCode != null">
|
||||||
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR},
|
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.type != null">
|
||||||
|
type = #{record.type,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</set>
|
</set>
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause"/>
|
<include refid="Update_By_Example_Where_Clause"/>
|
||||||
@ -188,7 +194,8 @@
|
|||||||
button_code = #{record.buttonCode,jdbcType=VARCHAR},
|
button_code = #{record.buttonCode,jdbcType=VARCHAR},
|
||||||
stand_code = #{record.standCode,jdbcType=VARCHAR},
|
stand_code = #{record.standCode,jdbcType=VARCHAR},
|
||||||
next_stand_code = #{record.nextStandCode,jdbcType=VARCHAR},
|
next_stand_code = #{record.nextStandCode,jdbcType=VARCHAR},
|
||||||
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR}
|
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR},
|
||||||
|
type = #{record.type,jdbcType=VARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause"/>
|
<include refid="Update_By_Example_Where_Clause"/>
|
||||||
</if>
|
</if>
|
||||||
@ -212,6 +219,9 @@
|
|||||||
<if test="preStandCode != null">
|
<if test="preStandCode != null">
|
||||||
pre_stand_code = #{preStandCode,jdbcType=VARCHAR},
|
pre_stand_code = #{preStandCode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="type != null">
|
||||||
|
type = #{type,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</set>
|
</set>
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
@ -222,7 +232,8 @@
|
|||||||
button_code = #{buttonCode,jdbcType=VARCHAR},
|
button_code = #{buttonCode,jdbcType=VARCHAR},
|
||||||
stand_code = #{standCode,jdbcType=VARCHAR},
|
stand_code = #{standCode,jdbcType=VARCHAR},
|
||||||
next_stand_code = #{nextStandCode,jdbcType=VARCHAR},
|
next_stand_code = #{nextStandCode,jdbcType=VARCHAR},
|
||||||
pre_stand_code = #{preStandCode,jdbcType=VARCHAR}
|
pre_stand_code = #{preStandCode,jdbcType=VARCHAR},
|
||||||
|
type = #{type,jdbcType=VARCHAR}
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
@ -10,6 +10,7 @@
|
|||||||
<result column="next_stand_code" jdbcType="VARCHAR" property="nextStandCode"/>
|
<result column="next_stand_code" jdbcType="VARCHAR" property="nextStandCode"/>
|
||||||
<result column="pre_stand_code" jdbcType="VARCHAR" property="preStandCode"/>
|
<result column="pre_stand_code" jdbcType="VARCHAR" property="preStandCode"/>
|
||||||
<result column="route_code" jdbcType="VARCHAR" property="routeCode"/>
|
<result column="route_code" jdbcType="VARCHAR" property="routeCode"/>
|
||||||
|
<result column="type" jdbcType="VARCHAR" property="type"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Example_Where_Clause">
|
<sql id="Example_Where_Clause">
|
||||||
@ -75,7 +76,7 @@
|
|||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, map_id, indicator_code, sections_code, stand_code, next_stand_code, pre_stand_code, route_code
|
id, map_id, indicator_code, sections_code, stand_code, next_stand_code, pre_stand_code, route_code, type
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectByExample" parameterType="club.joylink.rtss.entity.IndicatorSectionExample"
|
<select id="selectByExample" parameterType="club.joylink.rtss.entity.IndicatorSectionExample"
|
||||||
@ -123,12 +124,12 @@
|
|||||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="club.joylink.rtss.entity.IndicatorSection"
|
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="club.joylink.rtss.entity.IndicatorSection"
|
||||||
useGeneratedKeys="true">
|
useGeneratedKeys="true">
|
||||||
insert into indicator_section_stand_route (
|
insert into indicator_section_stand_route (
|
||||||
map_id, indicator_code, sections_code, stand_code, next_stand_code,pre_stand_code, route_code
|
map_id, indicator_code, sections_code, stand_code, next_stand_code,pre_stand_code, route_code,type
|
||||||
)
|
)
|
||||||
values (
|
values (
|
||||||
#{mapId,jdbcType=BIGINT}, #{indicatorCode,jdbcType=VARCHAR}, #{sectionsCode,jdbcType=VARCHAR},
|
#{mapId,jdbcType=BIGINT}, #{indicatorCode,jdbcType=VARCHAR}, #{sectionsCode,jdbcType=VARCHAR},
|
||||||
#{standCode,jdbcType=VARCHAR},#{nextStandCode,jdbcType=VARCHAR}, #{preStandCode,jdbcType=VARCHAR},
|
#{standCode,jdbcType=VARCHAR},#{nextStandCode,jdbcType=VARCHAR}, #{preStandCode,jdbcType=VARCHAR},
|
||||||
#{routeCode,jdbcType=VARCHAR}
|
#{routeCode,jdbcType=VARCHAR},#{type,jdbcType=VARCHAR}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@ -144,6 +145,7 @@
|
|||||||
<if test="nextStandCode != null">next_stand_code,</if>
|
<if test="nextStandCode != null">next_stand_code,</if>
|
||||||
<if test="preStandCode != null">pre_stand_code,</if>
|
<if test="preStandCode != null">pre_stand_code,</if>
|
||||||
<if test="routeCode != null">route_code,</if>
|
<if test="routeCode != null">route_code,</if>
|
||||||
|
<if test="type != null">type,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="mapId != null">#{mapId,jdbcType=BIGINT},</if>
|
<if test="mapId != null">#{mapId,jdbcType=BIGINT},</if>
|
||||||
@ -153,6 +155,7 @@
|
|||||||
<if test="nextStandCode != null">#{nextStandCode,jdbcType=VARCHAR},</if>
|
<if test="nextStandCode != null">#{nextStandCode,jdbcType=VARCHAR},</if>
|
||||||
<if test="preStandCode != null">#{preStandCode,jdbcType=VARCHAR},</if>
|
<if test="preStandCode != null">#{preStandCode,jdbcType=VARCHAR},</if>
|
||||||
<if test="routeCode != null">#{routeCode,jdbcType=VARCHAR},</if>
|
<if test="routeCode != null">#{routeCode,jdbcType=VARCHAR},</if>
|
||||||
|
<if test="type != null">#{type,jdbcType=VARCHAR},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@ -206,7 +209,8 @@
|
|||||||
stand_code = #{record.standCode,jdbcType=VARCHAR},
|
stand_code = #{record.standCode,jdbcType=VARCHAR},
|
||||||
next_stand_code = #{record.nextStandCode,jdbcType=VARCHAR},
|
next_stand_code = #{record.nextStandCode,jdbcType=VARCHAR},
|
||||||
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR},
|
pre_stand_code = #{record.preStandCode,jdbcType=VARCHAR},
|
||||||
route_code = #{record.routeCode,jdbcType=VARCHAR}
|
route_code = #{record.routeCode,jdbcType=VARCHAR},
|
||||||
|
type = #{record.type,jdbcType=VARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause"/>
|
<include refid="Update_By_Example_Where_Clause"/>
|
||||||
</if>
|
</if>
|
||||||
@ -236,6 +240,9 @@
|
|||||||
<if test="routeCode != null">
|
<if test="routeCode != null">
|
||||||
route_code = #{routeCode,jdbcType=VARCHAR},
|
route_code = #{routeCode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="type != null">
|
||||||
|
type = #{type,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
</set>
|
</set>
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
@ -249,7 +256,8 @@
|
|||||||
stand_code = #{standCode,jdbcType=VARCHAR},
|
stand_code = #{standCode,jdbcType=VARCHAR},
|
||||||
next_stand_code = #{nextStandCode,jdbcType=VARCHAR},
|
next_stand_code = #{nextStandCode,jdbcType=VARCHAR},
|
||||||
pre_stand_code = #{preStandCode,jdbcType=VARCHAR},
|
pre_stand_code = #{preStandCode,jdbcType=VARCHAR},
|
||||||
route_code = #{routeCode,jdbcType=VARCHAR}
|
route_code = #{routeCode,jdbcType=VARCHAR},
|
||||||
|
type = #{type,jdbcType=VARCHAR}
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
Loading…
Reference in New Issue
Block a user