diff --git a/src/main/java/club/joylink/rtss/services/MapSystemService.java b/src/main/java/club/joylink/rtss/services/MapSystemService.java index 4907a9c12..da7fcc420 100644 --- a/src/main/java/club/joylink/rtss/services/MapSystemService.java +++ b/src/main/java/club/joylink/rtss/services/MapSystemService.java @@ -67,7 +67,7 @@ public class MapSystemService implements IMapSystemService { for (MapPrdTypeEnum value : MapPrdTypeEnum.values()) { if (MapPrdTypeEnum.CTC.equals(value)) { MapVO mapDetail = iMapService.getMapDetail(mapId); - if (!mapDetail.getConfigVO().isHasCTC()) { + if (!mapDetail.getConfigVO().isRailway()) { continue; } } diff --git a/src/main/java/club/joylink/rtss/services/RunPlanDraftService.java b/src/main/java/club/joylink/rtss/services/RunPlanDraftService.java index cbcb4cb30..18c141442 100644 --- a/src/main/java/club/joylink/rtss/services/RunPlanDraftService.java +++ b/src/main/java/club/joylink/rtss/services/RunPlanDraftService.java @@ -829,7 +829,7 @@ public class RunPlanDraftService implements IRunPlanDraftService { Map> serviceMap = planVO.getTripList().stream().collect(Collectors.groupingBy(RunPlanTripVO::getServiceNumber)); serviceMap.forEach((s, trips) -> { trips.sort(Comparator.comparing(RunPlanTripVO::getStartTime)); - if (!map.getConfigVO().isHasCTC()) { + if (!map.getConfigVO().isRailway()) { if(Objects.isNull(trips.get(0).getIsOutbound()) || !trips.get(0).getIsOutbound()){ errorList.add(String.format("服务号[%s]首班车次[%s]不是出库", s, trips.get(0).getTripNumber())); } @@ -839,7 +839,7 @@ public class RunPlanDraftService implements IRunPlanDraftService { if (departTime.isBefore(LocalTime.of(2, 0))) { errorList.add(String.format("服务号[%s]首班车次发车时间[%s]过早,应不早于02:00", s, departTime)); } - if (!map.getConfigVO().isHasCTC()) { + if (!map.getConfigVO().isRailway()) { if(Objects.isNull(trips.get(trips.size() - 1).getIsInbound()) || !trips.get(trips.size() - 1).getIsInbound()){ errorList.add(String.format("服务号[%s]最后一班车次[%s]不是回库", s, trips.get(trips.size() - 1).getTripNumber())); } diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/AtpSectionService.java b/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/AtpSectionService.java index b9af7ee8b..5c2dd07d3 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/AtpSectionService.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/AtpSectionService.java @@ -82,7 +82,7 @@ public class AtpSectionService { SimulationDataRepository repository = simulation.getRepository(); MapConfig config = repository.getConfig(); boolean switchSingleHandle = config.isSwitchSingleHandle(); - boolean isHasCTC = config.isHasCTC(); // 大铁逻辑 + boolean isRailway = config.isRailway(); // 大铁逻辑 if (train.isCommunicable()) { // 通信车占用 // 车尾位置追加不确定性距离:(速度*2)m SectionPosition trainTailPosition = CalculateService @@ -111,7 +111,7 @@ public class AtpSectionService { for (Section section : sectionList) { if (section.isSwitchAxleCounterSection()) { Section switchSection = section.getLogicList().get(0); - if (switchSingleHandle && isHasCTC) { + if (switchSingleHandle && isRailway) { atpSectionList.addAll(handleSingleSwitchPosition(section, right)); } else { atpSectionList.addAll(switchSection.getSwitchAxleSectionsBySwitchPosition()); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/GroundAtpApiServiceImpl.java b/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/GroundAtpApiServiceImpl.java index 1fe02e8ea..43e944825 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/GroundAtpApiServiceImpl.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/ATP/ground/GroundAtpApiServiceImpl.java @@ -75,7 +75,7 @@ public class GroundAtpApiServiceImpl implements GroundAtpApiService { } })); // 大铁逻辑 - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { // 非通信车占用 nctSectionMap.forEach(((train, sections) -> { // 判断车头所在位置 diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainMonitorService.java b/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainMonitorService.java index 1d1d11e50..703c53d10 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainMonitorService.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainMonitorService.java @@ -83,7 +83,7 @@ public class AtsTrainMonitorService { } } // ATS自动进路触发 - if (!simulation.getRepository().getConfig().isHasCTC()) { + if (!simulation.getRepository().getConfig().isRailway()) { this.atsTriggerRouteService.tryTrigger(simulation, trainInfo); } // // PIS语音自动触发 diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainService.java b/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainService.java index 64ff872b0..547e020c4 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainService.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/ATS/service/AtsTrainService.java @@ -123,7 +123,7 @@ public class AtsTrainService { throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL, String.format("不存在车组号为[%s]的车次", groupNumber)); } - if (repository.getConfig().isHasCTC()) {// 大铁、删除列车 + if (repository.getConfig().isRailway()) {// 大铁、删除列车 // if (!trainInfo.isStop()) { // throw new SimulationException(SimulationExceptionType.Operation_Handle_FAIL, String.format("列车[%s]未停稳的车次", groupNumber)); // } diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiApiServiceImpl2.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiApiServiceImpl2.java index 393002b03..8ecb97983 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiApiServiceImpl2.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiApiServiceImpl2.java @@ -206,7 +206,7 @@ public class CiApiServiceImpl2 implements CiApiService { @Override public void humanCancel(Simulation simulation, String routeCode) { Route route = simulation.getRepository().getByCode(routeCode, Route.class); - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { BusinessExceptionAssertEnum.OPERATION_FAIL.assertTrue(route.isApproachLock(), "进路未接近锁闭,不能人解"); } @@ -216,7 +216,7 @@ public class CiApiServiceImpl2 implements CiApiService { @Override public void sectionFaultUnlock(Simulation simulation, String sectionCode) { Section section = simulation.getRepository().getByCode(sectionCode, Section.class); - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { if (!section.isFaultLock()) { return; } @@ -406,7 +406,7 @@ public class CiApiServiceImpl2 implements CiApiService { throw BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.exception("signalCode和routeCode不能都为空"); } // 判断是否要进行进路判断,大铁可以不对进路判断 - boolean firstCheck = config.isHasCTC() ? false : config.isGuideNeedRouteSettingFirst(); + boolean firstCheck = config.isRailway() ? false : config.isGuideNeedRouteSettingFirst(); //条件检查 if (firstCheck) { List routeList = signal.getRouteList(); @@ -420,7 +420,7 @@ public class CiApiServiceImpl2 implements CiApiService { // if (config.isSomeCommandNeedInit()) { // BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(signal.isInit(), signal.debugStr() + "未初始化"); // } - if (!simulation.getRepository().getConfig().isHasCTC()) { + if (!simulation.getRepository().getConfig().isRailway()) { BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(signal.isDefaultAspect(), String.format("信号机[%s]需处于关闭状态", signal.getCode())); } @@ -445,7 +445,7 @@ public class CiApiServiceImpl2 implements CiApiService { this.signalService.tryControlSignalAspectAccordingLevel(simulation, signal, signal.getSignalModel().getGuideAspect()); } else if (!CollectionUtils.isEmpty(signal.getRouteList())) { List collect; - if (config.isHasCTC()) { // 大铁配置引导进路 + if (config.isRailway()) { // 大铁配置引导进路 collect = getCtcGuideRouteList(repository, signal); if (collect == null) { return; @@ -468,7 +468,7 @@ public class CiApiServiceImpl2 implements CiApiService { } } } - if (repository.getConfig().isHasCTC() && signal.isHigherThanGuideLevel()) { + if (repository.getConfig().isRailway() && signal.isHigherThanGuideLevel()) { Route lockedRoute = signal.getLockedRoute(); if (lockedRoute != null && lockedRoute.getFirstLogicSection().isOccupied()) { signal.guideDelayStart(); @@ -521,7 +521,7 @@ public class CiApiServiceImpl2 implements CiApiService { Station deviceStation = station; boolean restartFlag = Objects.nonNull(deviceStation.getRestartTime()) && deviceStation.getRestartTime().isBefore(LocalTime.now()); // 是否大铁设备 - boolean hasCTCFlag = simulation.getRepository().getConfig().isHasCTC(); + boolean hasCTCFlag = simulation.getRepository().getConfig().isRailway(); // 大铁异常提示语 String exceptionMsg = hasCTCFlag ? "无效操作:车站未下电" : "无效操作或连锁机重启过8分钟需手动解锁"; // 是否需要重启 diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiLogic.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiLogic.java index be5edb31d..776ee0c97 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiLogic.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/CiLogic.java @@ -50,7 +50,7 @@ public class CiLogic { } // 区间灯点灯逻辑 - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { // 车站 simulation.getRepository().getStationList().stream().forEach(station -> { // 允许自律状态刷新 @@ -81,7 +81,7 @@ public class CiLogic { signalControlService.controlLightOfSignal(simulation, signal); //控制通过信号机的显示:信号机前第一个区段被占用开红灯;第二个区段被占用开黄灯;否则开绿灯 if (signal.isPassingSignal()) { - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { boolean right = signal.isRight(); Section section = signal.getSection(); Section one = section.getNextSection(right); @@ -160,7 +160,7 @@ public class CiLogic { CiLogic.log.info("进路[{}]联锁条件不满足,关闭信号", route.debugStr()); signalControlService.tryControlSignalAspectAccordingLevel(simulation, start, start.getDefaultAspect()); - if (config.isHasCTC()) //大铁线路暂时限制自动重开信号 + if (config.isRailway()) //大铁线路暂时限制自动重开信号 start.setForbidden(true); } else if (start.isDefaultAspect() && !start.isForbidden() && !start.isBlockade() && start.isSupportMainAspect()) { CiLogic.log.info("进路[{}]联锁条件满足,开放信号", route.debugStr()); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/device/CiService.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/device/CiService.java index bf04c2d01..89d5f599e 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CI/device/CiService.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CI/device/CiService.java @@ -173,7 +173,7 @@ public class CiService { || (!signal.isCbtcMode() && Signal.SignalFault.LIGHTING_UNIT_FAULT_HEAD.equals(signal.getFault()))) return level; // 大铁情况下做判断 - if (simulation.getRepository().getConfig().isHasCTC() && !Signal.SignalType.SHUNTING.equals(signal.getType())) { + if (simulation.getRepository().getConfig().isRailway() && !Signal.SignalType.SHUNTING.equals(signal.getType())) { // 如果当前进路在列表中不存在,则信号灯不开放 boolean isCanHandle = simulation.getRepository().getStationList().stream() .filter(station -> station.getCode().equals(route.getStart().getStation().getCode()) diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/CTCLogicLoop.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/CTCLogicLoop.java index 03eb0a5be..51d08a9c5 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/CTCLogicLoop.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/CTCLogicLoop.java @@ -131,7 +131,11 @@ public class CTCLogicLoop { */ private void routeSequenceTrigger(Simulation simulation) { LocalDateTime correctSystemTime = simulation.getCorrectSystemTime(); - for (RouteSequence routeSequence : simulation.getCtcRepository().getRouteSequenceMap().values()) { + SimulationDataRepository repository = simulation.getRepository(); + for (Map.Entry entry : simulation.getCtcRepository().getRouteSequenceMap().entrySet()) { + String stationCode = entry.getKey(); + Station station = repository.getByCode(stationCode, Station.class); + RouteSequence routeSequence = entry.getValue(); for (RouteSequence.Line line : routeSequence.getLines()) { if (line.isTriggered()) continue; @@ -148,8 +152,10 @@ public class CTCLogicLoop { continue; } } - if (line.isAutoTrigger() && correctSystemTime.toLocalTime().isAfter(line.getPlanTime())) { - ctcService.setRoute(simulation, line.getRouteCode(), line.getTripNumber(), false, null); + if (!station.isInterlockControl()) { //非非常站控模式下才能自动触发进路 + if (line.isAutoTrigger() && correctSystemTime.toLocalTime().isAfter(line.getPlanTime())) { + ctcService.setRoute(simulation, line.getRouteCode(), line.getTripNumber(), false, null); + } } } } @@ -323,8 +329,6 @@ public class CTCLogicLoop { /** * 运行计划发送变化事件 - * - * @param simulation 仿真实体 */ private void sendRunPlanChangeMessage(Simulation simulation) { Map ctcRunPlanVOMap = simulation.getCtcRepository().getRunPlanStatusVOMap(); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/data/CtcRepository.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/data/CtcRepository.java index de3277ec1..f025e60fc 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/data/CtcRepository.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/data/CtcRepository.java @@ -8,6 +8,8 @@ import club.joylink.rtss.simulation.cbtc.CTC.data.vo.RouteSequenceVO; import club.joylink.rtss.simulation.cbtc.CTC.data.vo.TrackViewVO; import club.joylink.rtss.simulation.cbtc.Simulation; import club.joylink.rtss.simulation.cbtc.build.SimulationBuilder; +import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository; +import club.joylink.rtss.simulation.cbtc.data.map.MapConfig; import club.joylink.rtss.simulation.cbtc.data.map.Station; import club.joylink.rtss.simulation.cbtc.member.SimulationMember; import lombok.Getter; @@ -129,6 +131,7 @@ public class CtcRepository { private final CopyOnWriteArrayList tickets = new CopyOnWriteArrayList<>(); public void reset(Simulation simulation) { + MapConfig config = simulation.getRepository().getConfig(); // 仿真运行数据直接清空 this.ctcZoneRepository.reset(); this.ctcEffectRepository.reset(); @@ -146,8 +149,11 @@ public class CtcRepository { dispatchCommandMap.clear(); stationRegisterMap.clear(); SimulationBuilder.buildCtcStationRunPlanLog(simulation); - SimulationBuilder.generateRouteSequence(simulation); - buildTrackViewData(simulation); +// SimulationBuilder.generateRouteSequence(simulation); + if (config.isHasCTC()) { + buildRouteSequence(simulation); + buildTrackViewData(simulation); + } ticketIdGenerator = new AtomicInteger(0); tickets.clear(); for (Station station : simulation.getRepository().getStationList()) { @@ -155,6 +161,33 @@ public class CtcRepository { } } + public void buildRouteSequence(Simulation simulation) { + SimulationDataRepository repository = simulation.getRepository(); + AtomicInteger idGenerator = getRouteSequenceIdGenerator(); + Map> stationLineMap = new HashMap<>(); + for (Station station : repository.getStationList()) { + stationLineMap.put(station.getCode(), new ArrayList<>()); + } + for (CtcStationRunPlanLog plan : getAllRunPlanList()) { + List lines = stationLineMap.get(plan.getStation().getCode()); + CtcStationRunPlanLog.RunPlanItem arriveRunPlan = plan.getArriveRunPlan(); + if (arriveRunPlan != null) { + RouteSequence.Line line = RouteSequence.buildLine(arriveRunPlan, false, idGenerator); + lines.add(line); + } + CtcStationRunPlanLog.RunPlanItem departRunPlan = plan.getDepartRunPlan(); + if (departRunPlan != null) { + RouteSequence.Line line = RouteSequence.buildLine(departRunPlan, true, idGenerator); + lines.add(line); + } + } + Map routeSequenceMap = getRouteSequenceMap(); + for (Station station : repository.getStationList()) { + RouteSequence routeSequence = new RouteSequence(station, stationLineMap.get(station.getCode())); + routeSequenceMap.put(station.getCode(), routeSequence); + } + } + /** * 构建占线板股道视图数据 */ diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/service/CTCService.java b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/service/CTCService.java index 4e3b1989b..5d0a6b5b6 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/service/CTCService.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/CTC/service/CTCService.java @@ -6,7 +6,6 @@ import club.joylink.rtss.simulation.cbtc.CTC.data.CtcRepository; import club.joylink.rtss.simulation.cbtc.CTC.data.CtcStationRunPlanLog; import club.joylink.rtss.simulation.cbtc.CTC.data.RouteSequence; import club.joylink.rtss.simulation.cbtc.Simulation; -import club.joylink.rtss.simulation.cbtc.build.SimulationBuilder; import club.joylink.rtss.simulation.cbtc.data.map.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -65,9 +64,11 @@ public class CTCService { * 该方法应该在车务终端发送阶段计划之后调用 */ public void regenerateRouteSequenceAndTrackView(Simulation simulation) { - SimulationBuilder.generateRouteSequence(simulation); - CtcRepository ctcRepository = simulation.getCtcRepository(); - ctcRepository.buildTrackViewData(simulation); + if (simulation.getRepository().getConfig().isHasCTC()) { + CtcRepository ctcRepository = simulation.getCtcRepository(); + ctcRepository.buildRouteSequence(simulation); + ctcRepository.buildTrackViewData(simulation); + } } /** diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/DeviceStatusServiceImpl.java b/src/main/java/club/joylink/rtss/simulation/cbtc/DeviceStatusServiceImpl.java index f4085c279..883b129fe 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/DeviceStatusServiceImpl.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/DeviceStatusServiceImpl.java @@ -37,7 +37,7 @@ public class DeviceStatusServiceImpl implements DeviceStatusService { private void initStationControlMode(Simulation simulation) { SimulationDataRepository repository = simulation.getRepository(); MapConfig config = repository.getConfig(); - if (!config.isHasCTC()) + if (!config.isRailway()) return; for (Station station : repository.getStationList()) { station.setControlMode(Station.ControlMode.Local); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/Simulation.java b/src/main/java/club/joylink/rtss/simulation/cbtc/Simulation.java index 99f699d88..356973b33 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/Simulation.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/Simulation.java @@ -576,7 +576,7 @@ public class Simulation extends club.joylink.rtss.simulation.Simulation member.setCommand(null)); diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/SimulationLifeCycleServiceImpl.java b/src/main/java/club/joylink/rtss/simulation/cbtc/SimulationLifeCycleServiceImpl.java index 060896d6d..57a9fc65c 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/SimulationLifeCycleServiceImpl.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/SimulationLifeCycleServiceImpl.java @@ -198,7 +198,7 @@ public class SimulationLifeCycleServiceImpl implements SimulationLifeCycleServic iscsLogicLoop.addJob(simulation); ////////////////////////////////////////////// // simulationRealDeviceConnectManager.addJobs(simulation); - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { ctcLogicLoop.addJobs(simulation); } } diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/build/SimulationBuilder.java b/src/main/java/club/joylink/rtss/simulation/cbtc/build/SimulationBuilder.java index 9e0382a6d..6d741cb60 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/build/SimulationBuilder.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/build/SimulationBuilder.java @@ -19,6 +19,7 @@ import club.joylink.rtss.vo.client.iscs.device.IscsDeviceVO; import club.joylink.rtss.vo.client.iscs.systemRes.IscsSystemResourcesVO; import club.joylink.rtss.vo.client.runplan.RunPlanVO; import club.joylink.rtss.vo.client.schedulingNew.SchedulingPlanNewVO; +import club.joylink.rtss.vo.map.MapFunctionConfig; import club.joylink.rtss.vo.map.MapVO; import club.joylink.rtss.vo.map.RealLineConfigVO; import club.joylink.rtss.vo.map.logic.MapStationParkingTimeVO; @@ -46,7 +47,8 @@ public class SimulationBuilder { simulation.setProject(buildParams.getLoginUserInfo().getProject()); } // 线路配置参数 - simulation.getRepository().setConfig(buildConfig(buildParams.getMap().getConfigVO())); + simulation.getRepository().setConfig(buildConfig(buildParams.getMap().getConfigVO(), + buildParams.getMap().getGraphDataNew().getMapFunctionConfig())); simulation.getRepository().getConfig() .setRouteLikeHa1(buildParams.getMap().getGraphDataNew().getGenerateConfig().isLikeHa1()); simulation.getRepository().getConfig() @@ -80,7 +82,7 @@ public class SimulationBuilder { buildParams.getMap(), mapDataBuildResult.getErrMsgList()); if (!CollectionUtils.isEmpty(mapDataBuildResult.getErrMsgList())) { // 存在数据异常 mapDataBuildResult.getErrMsgList().forEach(errMsg -> log.warn(String.format("地图数据异常:%s", errMsg))); - if (!buildParams.getMap().getConfigVO().isHasCTC()) { + if (!buildParams.getMap().getConfigVO().isRailway()) { simulation.setMapDataError(true); } simulation.addDataErrMsgs(mapDataBuildResult.getErrMsgList()); @@ -94,9 +96,9 @@ public class SimulationBuilder { // 加载车辆段route path loadDepotInOutRoutePath(simulation); // CTC行车日志数据结构构建 - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { buildCtcStationRunPlanLog(simulation); - generateRouteSequence(simulation); +// generateRouteSequence(simulation); } return simulation; } @@ -318,7 +320,7 @@ public class SimulationBuilder { RunPlanBuilder.RunPlanBuildResult runPlanBuildResult = RunPlanBuilder.buildRunDiagram(simulation.getRepository().getDeviceMap(), runPlan); simulation.setPlanLoaded(true); - if (!simulation.getRepository().getConfig().isHasCTC() && !CollectionUtils.isEmpty(runPlanBuildResult.getErrMsgList())) { // 数据异常 + if (!simulation.getRepository().getConfig().isRailway() && !CollectionUtils.isEmpty(runPlanBuildResult.getErrMsgList())) { // 数据异常 runPlanBuildResult.getErrMsgList().forEach(errMsg -> log.warn(String.format("运行图数据异常:%s", errMsg))); simulation.setPlanDataError(true); simulation.addDataErrMsgs(runPlanBuildResult.getErrMsgList()); @@ -330,7 +332,7 @@ public class SimulationBuilder { List errMsgList = checkRunPlanAndBuildLostRoutePaths(runPlanBuildResult.getServerTripMap(), simulation.getRepository().getRoutePathMap()); if (!errMsgList.isEmpty()) { - if (!simulation.getRepository().getConfig().isHasCTC()) { + if (!simulation.getRepository().getConfig().isRailway()) { simulation.setMapDataError(true); } simulation.addDataErrMsgs(errMsgList); @@ -463,11 +465,14 @@ public class SimulationBuilder { return result; } - public static MapConfig buildConfig(RealLineConfigVO configVO) { + public static MapConfig buildConfig(RealLineConfigVO configVO, MapFunctionConfig mapFunctionConfig) { MapConfig mapConfig = new MapConfig(); if (Objects.nonNull(configVO)) { mapConfig.copyConfigBy(configVO); } + if (mapFunctionConfig != null) { + mapConfig.copyConfigBy(mapFunctionConfig); + } return mapConfig; } diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/MapConfig.java b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/MapConfig.java index 7762c1d72..1c6923609 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/MapConfig.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/MapConfig.java @@ -2,6 +2,7 @@ package club.joylink.rtss.simulation.cbtc.data.map; import club.joylink.rtss.simulation.cbtc.constant.RunLevel; import club.joylink.rtss.simulation.cbtc.member.SimulationMember; +import club.joylink.rtss.vo.map.MapFunctionConfig; import club.joylink.rtss.vo.map.RealLineConfigVO; import lombok.Getter; import lombok.Setter; @@ -229,10 +230,14 @@ public class MapConfig { private boolean updateTripPlanByServiceNumber; /** - * 有CTC系统(大铁) + * 大铁线路 */ + private boolean railway; + private boolean hasCTC; + private boolean hasTDCS; + private Set needConfirmConnectMembers = Stream.of(DISPATCHER, STATION_SUPERVISOR, MAINTAINER, ELECTRIC_DISPATCHER).collect(Collectors.toSet()); @@ -287,10 +292,17 @@ public class MapConfig { setTripNumberIsUnique(configVO.isTripNumberIsUnique()); setStandTbStrategyIsInvalid(configVO.isStandTbStrategyIsInvalid()); setUpdateTripPlanByServiceNumber(configVO.isUpdateTripPlanByServiceNumber()); - setHasCTC(configVO.isHasCTC()); + setRailway(configVO.isRailway()); } } + public void copyConfigBy(MapFunctionConfig mapFunctionConfig) { + if (mapFunctionConfig == null) + return; + this.hasCTC = mapFunctionConfig.isHasCTC(); + this.hasTDCS = mapFunctionConfig.isHasTDCS(); + } + public boolean isNoParkingServiceNumber(String serviceNumber) { if (StringUtils.hasText(noParkingSM)) { if (noParkingSM.contains("-")) { diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Station.java b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Station.java index 4b7881250..6ee2ed9a2 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Station.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/data/map/Station.java @@ -524,6 +524,10 @@ public class Station extends MayOutOfOrderDevice { } } + public boolean isInterlockControl() { + return ControlMode.Interlock.equals(controlMode); + } + /** * 获取该方向的正常站台 */ diff --git a/src/main/java/club/joylink/rtss/simulation/cbtc/member/MemberManager.java b/src/main/java/club/joylink/rtss/simulation/cbtc/member/MemberManager.java index 0670c6d2b..2232374a6 100644 --- a/src/main/java/club/joylink/rtss/simulation/cbtc/member/MemberManager.java +++ b/src/main/java/club/joylink/rtss/simulation/cbtc/member/MemberManager.java @@ -49,7 +49,7 @@ public class MemberManager { this.addRole(simulation, SimulationMember.Type.DEPOT_DISPATCHER, station.getName() + "调度", station); } // 大铁CTC - if (simulation.getRepository().getConfig().isHasCTC()) { + if (simulation.getRepository().getConfig().isRailway()) { // this.addRole(simulation, SimulationMember.Type.RAIL_CTC, null, station); this.addRole(simulation, SimulationMember.Type.STATION_ASSISTANT, null, station); } diff --git a/src/main/java/club/joylink/rtss/vo/map/RealLineConfigVO.java b/src/main/java/club/joylink/rtss/vo/map/RealLineConfigVO.java index 1145dbc74..825719dec 100644 --- a/src/main/java/club/joylink/rtss/vo/map/RealLineConfigVO.java +++ b/src/main/java/club/joylink/rtss/vo/map/RealLineConfigVO.java @@ -216,9 +216,9 @@ public class RealLineConfigVO { private boolean updateTripPlanByServiceNumber; /** - * 有CTC系统(大铁) + * 大铁线路 */ - private boolean hasCTC; + private boolean railway; public static RealLineConfigVO parseJsonStr(String configData) { if (StringUtils.hasText(configData)) {