【增加辅助按钮、辅助灯操作】
【删除多余代码】
This commit is contained in:
parent
bd59012519
commit
0ed54505bc
@ -1,19 +0,0 @@
|
||||
package club.joylink.rtss.constants;
|
||||
|
||||
/**
|
||||
* 指标灯枚举
|
||||
*/
|
||||
public enum IndicatorStatusEnum {
|
||||
/** 无显示,灭灯 */
|
||||
No,
|
||||
/** 红 */
|
||||
R,
|
||||
/** 绿 */
|
||||
G,
|
||||
/** 黄 */
|
||||
Y,
|
||||
/** 白 */
|
||||
W,
|
||||
/** 白闪(flashing) */
|
||||
WF
|
||||
}
|
@ -7,7 +7,7 @@ import club.joylink.rtss.simulation.cbtc.ATS.operation.annotation.OperateHandler
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.service.assist.ButtonValidInterface;
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.service.assist.StationDirectionService;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Button;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.StationDirection;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@ -35,7 +35,7 @@ public class StationDirectionOperateHandler {
|
||||
validInterface = stationDirectionService.turnDirectionPressDownValid;
|
||||
}
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum
|
||||
, Button.ButtonTypeEnum.CHANGE_DIRECTION, isPressDown, validInterface, null);
|
||||
, StationDirection.ButtonTypeEnum.CHANGE_DIRECTION, isPressDown, validInterface, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -49,8 +49,8 @@ public class StationDirectionOperateHandler {
|
||||
@OperateHandlerMapping(type = Operation.Type.ASSIST_PRESS_MAIN_ASSIST)
|
||||
public void pressMainAssist(Simulation simulation, String stationCode, DirectionLabelEnum labelEnum
|
||||
, Integer pressDown) {
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, Button.ButtonTypeEnum.MAIN_ASSIST
|
||||
, (pressDown == 1), null, null);
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, StationDirection.ButtonTypeEnum.MAIN_ASSIST
|
||||
, (pressDown == 1), null, stationDirectionService.turnAssistThen);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,7 +62,7 @@ public class StationDirectionOperateHandler {
|
||||
*/
|
||||
@OperateHandlerMapping(type = Operation.Type.ASSIST_PRESS_RECEIVE_ASSIST)
|
||||
public void pressReceiveAssist(Simulation simulation, String stationCode, DirectionLabelEnum labelEnum) {
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, Button.ButtonTypeEnum.RECEIVE_ASSIST
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, StationDirection.ButtonTypeEnum.RECEIVE_ASSIST
|
||||
, Boolean.TRUE, stationDirectionService.turnAssistValid, stationDirectionService.receiveAssistThen);
|
||||
}
|
||||
|
||||
@ -75,7 +75,7 @@ public class StationDirectionOperateHandler {
|
||||
*/
|
||||
@OperateHandlerMapping(type = Operation.Type.ASSIST_PRESS_DELIVER_ASSIST)
|
||||
public void pressDeliverAssist(Simulation simulation, String stationCode, DirectionLabelEnum labelEnum) {
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, Button.ButtonTypeEnum.DELIVER_ASSIST
|
||||
stationDirectionService.changeButtonAspect(simulation, stationCode, labelEnum, StationDirection.ButtonTypeEnum.DELIVER_ASSIST
|
||||
, Boolean.TRUE, stationDirectionService.turnAssistValid, stationDirectionService.deliverAssistThen);
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,12 @@
|
||||
package club.joylink.rtss.simulation.cbtc.ATS.service.assist;
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||
import club.joylink.rtss.entity.DraftMapStationDirection;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Route;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Stand;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.StationDirection;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
|
||||
@ -33,7 +35,7 @@ public class StationDirectionService {
|
||||
* @param validMethod 操作检验
|
||||
* @param buttonDoMethod 操作后触发动作
|
||||
*/
|
||||
public void changeButtonAspect(Simulation simulation, String stationCode, DirectionLabelEnum label, Button.ButtonTypeEnum type,
|
||||
public void changeButtonAspect(Simulation simulation, String stationCode, DirectionLabelEnum label, StationDirection.ButtonTypeEnum type,
|
||||
boolean pressDown, ButtonValidInterface validMethod, ButtonThenInterface buttonDoMethod) {
|
||||
Station curStation = getStationByCode(simulation, stationCode);
|
||||
StationDirection stationDirection = curStation.getStationDirectionMap().get(label);
|
||||
@ -62,14 +64,20 @@ public class StationDirectionService {
|
||||
stationDirection.refreshAspectStatus();
|
||||
// 刷新区段占用状态
|
||||
stationDirection.refreshSectionStatus();
|
||||
// 辅助灯状态
|
||||
stationDirection.refreshAssistStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 改方按钮按下校验
|
||||
*/
|
||||
public ButtonValidInterface turnDirectionPressDownValid = (simulation, stationDirection) -> {
|
||||
// 如果处于发辅助状态,说明存在异常情况正在人为处理,直接跳过判断
|
||||
if (stationDirection.isMainAssistStatus() && stationDirection.isDeliverAssistStatus()) {
|
||||
return;
|
||||
}
|
||||
// 区间是否空闲
|
||||
if (IndicatorStatusEnum.R.equals(stationDirection.getSectionAspect())) {
|
||||
if (StationDirection.IndicatorStatusEnum.O.equals(stationDirection.getSectionAspect())) {
|
||||
throw new SimulationException(SimulationExceptionType.Operation_Cannot_handed, "操作异常:区段非空闲");
|
||||
}
|
||||
// 接车进路有锁闭,有车进入
|
||||
@ -111,10 +119,24 @@ public class StationDirectionService {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 总辅助后续操作
|
||||
*/
|
||||
public ButtonThenInterface turnAssistThen = (simulation, stationDirection) -> {
|
||||
// 总辅助弹起后,接发辅助、倒计时重置
|
||||
if (!stationDirection.isMainAssistStatus()) {
|
||||
stationDirection.setReceiveAssistStatus(false);
|
||||
stationDirection.setDeliverAssistStatus(false);
|
||||
stationDirection.getRemain().set(0);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 接辅助按钮后续操作
|
||||
*/
|
||||
public ButtonThenInterface receiveAssistThen = (simulation, stationDirection) -> {
|
||||
// 按下接辅助,弹起发辅助
|
||||
stationDirection.setDeliverAssistStatus(false);
|
||||
// 重新设置倒计时时间
|
||||
stationDirection.getRemain().set(StationDirection.DEFAULT_RECEIVE_DELAY_TIME);
|
||||
};
|
||||
@ -123,6 +145,8 @@ public class StationDirectionService {
|
||||
* 接辅助按钮后续操作
|
||||
*/
|
||||
public ButtonThenInterface deliverAssistThen = (simulation, stationDirection) -> {
|
||||
// 按下发辅助,弹起发辅助
|
||||
stationDirection.setReceiveAssistStatus(false);
|
||||
// 重新设置倒计时时间
|
||||
stationDirection.getRemain().set(StationDirection.DEFAULT_DELIVER_DELAY_TIME);
|
||||
};
|
||||
|
@ -242,8 +242,17 @@ public class CTCLogicLoop {
|
||||
* @param simulation 仿真信息
|
||||
*/
|
||||
private void refreshStationDirection(Simulation simulation) {
|
||||
simulation.getRepository().getStationList().forEach(station -> station.getStationDirectionMap().values().stream()
|
||||
.filter(stationDirection -> stationDirection.getRemain().intValue() != 0)
|
||||
.forEach(stationDirection -> stationDirection.getRemain().decrementAndGet()));
|
||||
simulation.getRepository().getStationList()
|
||||
.forEach(station ->
|
||||
station.getStationDirectionMap().values().stream()
|
||||
.filter(stationDirection -> stationDirection.getRemain().intValue() != 0)
|
||||
.forEach(stationDirection -> {
|
||||
// 如果倒数结束弹起接、发辅助按钮
|
||||
if (stationDirection.getRemain().decrementAndGet() == 0) {
|
||||
stationDirection.setDeliverAssistStatus(false);
|
||||
stationDirection.setReceiveAssistStatus(false);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -699,11 +699,6 @@ public class MapDeviceBuilder {
|
||||
Map<String, Set<Section>> sectionArriveMap = MapDeviceBuilder.buildNormalStandTrackAdjoinSections(mapDataBuildResult.getDeviceMap());
|
||||
mapDataBuildResult.setSectionArriveNearMap(sectionArriveMap);
|
||||
}
|
||||
|
||||
// 构建接、发、区间、辅助指示灯
|
||||
MapDeviceBuilder.buildIndicatorList(elementMap, errMsgList, graphData.getIndicatorLightList());
|
||||
// 构建辅助、改方按钮
|
||||
MapDeviceBuilder.buildButtonList(elementMap, errMsgList, graphData.getSignalButtonList());
|
||||
}
|
||||
|
||||
private static List<MapStationStandNewVO> buildStand(MapGraphDataNewVO graphData, Map<String, MapElement> elementMap, List<String> errMsgList) {
|
||||
@ -1505,69 +1500,4 @@ public class MapDeviceBuilder {
|
||||
private static boolean isCross(String type) {
|
||||
return Objects.equals(type, BusinessConsts.Section.SectionType.Type05);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建指示灯
|
||||
*
|
||||
* @param elementMap 资源map
|
||||
* @param indicatorList 指示灯信息
|
||||
*/
|
||||
private static void buildIndicatorList(Map<String, MapElement> elementMap, List<String> errMsgList
|
||||
, List<MapIndicatorLightVO> indicatorList) {
|
||||
// 区间占用\辅助状态\总辅助\发车辅助\接车辅助\接\发车箭头\复原\事故\闭塞
|
||||
List<String> indicatorTypeList = Arrays.asList(
|
||||
"SectionOccupied", "AssistStatus", "TotalAssist", "DepartAssist", "PickAssist",
|
||||
"PickArrow", "DepartArrow", "Recovery", "Accident", "Occlusion"
|
||||
);
|
||||
indicatorList
|
||||
.stream()
|
||||
.filter(mapIndicatorLightVO -> indicatorTypeList.contains(mapIndicatorLightVO.getType()))
|
||||
.forEach(mapSignalButtonVO -> {
|
||||
if (elementMap.containsKey(mapSignalButtonVO.getCode())) {
|
||||
errMsgList.add("已存在指示灯 " + mapSignalButtonVO.getStationCode());
|
||||
} else {
|
||||
Indicator indicator = new Indicator(mapSignalButtonVO.getCode(), mapSignalButtonVO.getName());
|
||||
indicator.setLabel(mapSignalButtonVO.getLabelEnum());
|
||||
indicator.setTypeStr(mapSignalButtonVO.getType());
|
||||
Station station = (Station) elementMap.get(mapSignalButtonVO.getStationCode());
|
||||
indicator.setStation(station);
|
||||
station.getIndicatorList().add(indicator);
|
||||
elementMap.put(mapSignalButtonVO.getCode(), indicator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建按钮设备
|
||||
*
|
||||
* @param elementMap 设备Map
|
||||
* @param errMsgList 错误日志
|
||||
* @param signalButtonList 按钮列表
|
||||
*/
|
||||
private static void buildButtonList(Map<String, MapElement> elementMap, List<String> errMsgList
|
||||
, List<MapSignalButtonVO> signalButtonList) {
|
||||
// 总、接、发、改方
|
||||
List<MapSignalButtonVO.Type> buttonTypeList = Arrays.asList(
|
||||
MapSignalButtonVO.Type.ASSIST,
|
||||
MapSignalButtonVO.Type.PICK_ASSIST,
|
||||
MapSignalButtonVO.Type.DEPART_ASSIST,
|
||||
MapSignalButtonVO.Type.CHANGE_DIRECTION
|
||||
);
|
||||
signalButtonList
|
||||
.stream()
|
||||
.filter(mapSignalButtonVO -> buttonTypeList.contains(mapSignalButtonVO.getType()))
|
||||
.forEach(mapSignalButtonVO -> {
|
||||
if (elementMap.containsKey(mapSignalButtonVO.getCode())) {
|
||||
errMsgList.add("已存在按钮 " + mapSignalButtonVO.getStationCode());
|
||||
} else {
|
||||
Button button = new Button(mapSignalButtonVO.getCode(), mapSignalButtonVO.getName());
|
||||
button.setLabel(mapSignalButtonVO.getLabelEnum());
|
||||
Station station = (Station) elementMap.get(mapSignalButtonVO.getStationCode());
|
||||
button.setStation(station);
|
||||
button.setTypeStr(mapSignalButtonVO.getType());
|
||||
station.getButtonList().add(button);
|
||||
elementMap.put(mapSignalButtonVO.getCode(), button);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,84 +0,0 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.map;
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.vo.map.graph.MapSignalButtonVO;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 操作按钮
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class Button extends MapNamedElement {
|
||||
/**
|
||||
* 车站
|
||||
*/
|
||||
private Station station;
|
||||
|
||||
/**
|
||||
* 当前信号显示
|
||||
*/
|
||||
private boolean isPressDown;
|
||||
|
||||
/**
|
||||
* 方向标签
|
||||
*/
|
||||
private DirectionLabelEnum label;
|
||||
|
||||
/**
|
||||
* 按钮类型
|
||||
*/
|
||||
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) {
|
||||
super(code, name, deviceType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
isPressDown = Boolean.FALSE;
|
||||
}
|
||||
|
||||
public void setTypeStr(MapSignalButtonVO.Type typeStr) {
|
||||
this.type = getType(typeStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取枚举信息
|
||||
*
|
||||
* @param type 类型
|
||||
* @return 枚举
|
||||
*/
|
||||
public static ButtonTypeEnum getType(MapSignalButtonVO.Type type) {
|
||||
switch (type) {
|
||||
case ASSIST:
|
||||
return ButtonTypeEnum.MAIN_ASSIST;
|
||||
case PICK_ASSIST:
|
||||
return ButtonTypeEnum.DELIVER_ASSIST;
|
||||
case DEPART_ASSIST:
|
||||
return ButtonTypeEnum.RECEIVE_ASSIST;
|
||||
case CHANGE_DIRECTION:
|
||||
return ButtonTypeEnum.CHANGE_DIRECTION;
|
||||
default:
|
||||
return ButtonTypeEnum.NO;
|
||||
}
|
||||
}
|
||||
|
||||
public enum ButtonTypeEnum {
|
||||
// 总辅助
|
||||
MAIN_ASSIST,
|
||||
// 接辅助
|
||||
RECEIVE_ASSIST,
|
||||
// 发辅助
|
||||
DELIVER_ASSIST,
|
||||
// 改方
|
||||
CHANGE_DIRECTION,
|
||||
NO;
|
||||
}
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.map;
|
||||
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 指示灯设备
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class Indicator extends MapNamedElement {
|
||||
/**
|
||||
* 车站
|
||||
*/
|
||||
private Station station;
|
||||
|
||||
/**
|
||||
* 当前信号显示
|
||||
*/
|
||||
private IndicatorStatusEnum aspect;
|
||||
|
||||
/**
|
||||
* 方向标签
|
||||
*/
|
||||
private DirectionLabelEnum label;
|
||||
|
||||
/**
|
||||
* 是否开启
|
||||
*/
|
||||
private boolean on;
|
||||
|
||||
/**
|
||||
* 灯类型
|
||||
*/
|
||||
private IndicatorTypeEnum type;
|
||||
|
||||
public Indicator(String code, String name) {
|
||||
super(code, name, DeviceType.INDICATOR);
|
||||
on = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
on = false;
|
||||
aspect = getDefaultStatus();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取默认状态
|
||||
*
|
||||
* @return 默认状态
|
||||
*/
|
||||
public IndicatorStatusEnum getDefaultStatus() {
|
||||
// 接
|
||||
if (IndicatorTypeEnum.RECEIVE.equals(type)) {
|
||||
return IndicatorStatusEnum.Y;
|
||||
// 发
|
||||
} else if (IndicatorTypeEnum.DELIVER.equals(type)) {
|
||||
return IndicatorStatusEnum.G;
|
||||
} else {
|
||||
return IndicatorStatusEnum.No;
|
||||
}
|
||||
}
|
||||
|
||||
public void setTypeStr(String type) {
|
||||
this.type = getType(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 枚举对应
|
||||
*
|
||||
* @param type 前端类型
|
||||
* @return 枚举值
|
||||
*/
|
||||
public static IndicatorTypeEnum getType(String type) {
|
||||
switch (type) {
|
||||
// 接
|
||||
case "receive":
|
||||
case "PickArrow":
|
||||
return IndicatorTypeEnum.RECEIVE;
|
||||
// 发
|
||||
case "deliver":
|
||||
case "DepartArrow":
|
||||
return IndicatorTypeEnum.DELIVER;
|
||||
// 区间
|
||||
case "section":
|
||||
case "SectionOccupied":
|
||||
return IndicatorTypeEnum.SECTION;
|
||||
//辅助
|
||||
case "assist":
|
||||
case "AssistStatus":
|
||||
case "TotalAssist":
|
||||
case "DepartAssist":
|
||||
case "PickAssist":
|
||||
return IndicatorTypeEnum.ASSIST;
|
||||
//复原
|
||||
case "Recovery":
|
||||
return IndicatorTypeEnum.RECOVERY;
|
||||
//事故
|
||||
case "Accident":
|
||||
return IndicatorTypeEnum.ACCIDENT;
|
||||
//闭塞
|
||||
case "Occlusion":
|
||||
return IndicatorTypeEnum.OCCLUSION;
|
||||
default:
|
||||
return IndicatorTypeEnum.NO;
|
||||
}
|
||||
}
|
||||
|
||||
public enum IndicatorTypeEnum {
|
||||
// 接
|
||||
RECEIVE,
|
||||
// 发
|
||||
DELIVER,
|
||||
// 区间
|
||||
SECTION,
|
||||
// 辅助
|
||||
ASSIST,
|
||||
// 恢复
|
||||
RECOVERY,
|
||||
// 事故
|
||||
ACCIDENT,
|
||||
// 闭塞
|
||||
OCCLUSION,
|
||||
// 无类型
|
||||
NO;
|
||||
|
||||
}
|
||||
}
|
@ -30,8 +30,6 @@ public class Station extends MayOutOfOrderDevice {
|
||||
ldStandList = new ArrayList<>();
|
||||
controlMode = ControlMode.Center;
|
||||
stationDirectionMap = new HashMap<>();
|
||||
buttonList = new ArrayList<>();
|
||||
indicatorList = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -189,16 +187,6 @@ public class Station extends MayOutOfOrderDevice {
|
||||
*/
|
||||
private Map<DirectionLabelEnum, StationDirection> stationDirectionMap;
|
||||
|
||||
/**
|
||||
* 按钮列表
|
||||
*/
|
||||
private List<Button> buttonList;
|
||||
|
||||
/**
|
||||
* 指示灯列表
|
||||
*/
|
||||
private List<Indicator> indicatorList;
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
|
@ -2,7 +2,6 @@ package club.joylink.rtss.simulation.cbtc.data.map;
|
||||
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -53,7 +52,7 @@ public class StationDirection extends MapNamedElement {
|
||||
/**
|
||||
* 处于接、发状态
|
||||
*/
|
||||
private ReceiveAndDeliverModel model;
|
||||
private ReceiveAndDeliverModel runStatus;
|
||||
|
||||
/**
|
||||
* 接车灯状态
|
||||
@ -114,7 +113,7 @@ public class StationDirection extends MapNamedElement {
|
||||
public StationDirection(String code, String name, DirectionLabelEnum labelEnum) {
|
||||
this(code, name);
|
||||
this.labelEnum = labelEnum;
|
||||
this.model = this.getDefaultReceiveAndDeliver();
|
||||
this.runStatus = this.getDefaultReceiveAndDeliver();
|
||||
}
|
||||
|
||||
public StationDirection(String code, String name) {
|
||||
@ -128,33 +127,7 @@ public class StationDirection extends MapNamedElement {
|
||||
@Override
|
||||
public void reset() {
|
||||
this.setDefaultAttribute();
|
||||
this.model = this.getDefaultReceiveAndDeliver();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认属性
|
||||
*/
|
||||
private void setDefaultAttribute() {
|
||||
this.changeDirectionStatus = false;
|
||||
this.mainAssistStatus = false;
|
||||
this.receiveAssistStatus = false;
|
||||
this.deliverAssistStatus = false;
|
||||
this.receiveAspect = IndicatorStatusEnum.No;
|
||||
this.deliverAspect = IndicatorStatusEnum.No;
|
||||
this.sectionAspect = IndicatorStatusEnum.No;
|
||||
this.assistAspect = IndicatorStatusEnum.No;
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认亮灯设置
|
||||
*/
|
||||
private ReceiveAndDeliverModel getDefaultReceiveAndDeliver() {
|
||||
// X、S方向为接车方向默认亮起
|
||||
if (DirectionLabelEnum.X.equals(labelEnum) || DirectionLabelEnum.S.equals(labelEnum)) {
|
||||
return ReceiveAndDeliverModel.RECEIVE;
|
||||
} else { // 其他方向默认发车灯亮起
|
||||
return ReceiveAndDeliverModel.DELIVER;
|
||||
}
|
||||
this.runStatus = this.getDefaultReceiveAndDeliver();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -167,21 +140,21 @@ public class StationDirection extends MapNamedElement {
|
||||
// 发车进路锁闭
|
||||
boolean deliverRouteBlock = this.deliverRouteList.stream().anyMatch(Route::isLock);
|
||||
// 接发状态
|
||||
this.model = receiveRouteBlock ? ReceiveAndDeliverModel.RECEIVE : this.model;
|
||||
this.model = deliverRouteBlock ? ReceiveAndDeliverModel.DELIVER : this.model;
|
||||
this.runStatus = receiveRouteBlock ? ReceiveAndDeliverModel.R : this.runStatus;
|
||||
this.runStatus = deliverRouteBlock ? ReceiveAndDeliverModel.D : this.runStatus;
|
||||
// 接车进路锁闭亮红灯、否则默认
|
||||
IndicatorStatusEnum receiveAspect;
|
||||
// 发车进路锁闭亮红灯、否则默认
|
||||
IndicatorStatusEnum deliverAspect;
|
||||
// 进路区段占用判断点灯颜色
|
||||
if (ReceiveAndDeliverModel.RECEIVE.equals(this.model)) {
|
||||
deliverAspect = IndicatorStatusEnum.No;
|
||||
if (ReceiveAndDeliverModel.R.equals(this.runStatus)) {
|
||||
deliverAspect = IndicatorStatusEnum.F;
|
||||
// 接车进路锁闭
|
||||
receiveAspect = judgeSignalLock() ? IndicatorStatusEnum.R : IndicatorStatusEnum.Y;
|
||||
} else if (ReceiveAndDeliverModel.DELIVER.equals(this.model)) {
|
||||
receiveAspect = IndicatorStatusEnum.No;
|
||||
receiveAspect = judgeSignalLock() ? IndicatorStatusEnum.O : IndicatorStatusEnum.F;
|
||||
} else if (ReceiveAndDeliverModel.D.equals(this.runStatus)) {
|
||||
receiveAspect = IndicatorStatusEnum.F;
|
||||
// 发车进路锁闭
|
||||
deliverAspect = judgeSignalLock() ? IndicatorStatusEnum.R : IndicatorStatusEnum.G;
|
||||
deliverAspect = judgeSignalLock() ? IndicatorStatusEnum.O : IndicatorStatusEnum.F;
|
||||
} else {
|
||||
receiveAspect = this.receiveAspect;
|
||||
deliverAspect = this.receiveAspect;
|
||||
@ -201,7 +174,28 @@ public class StationDirection extends MapNamedElement {
|
||||
// 是否被占用,TRUE 占用,FALSE 未占用
|
||||
boolean isOccupied = this.sectionList.stream().anyMatch(Section::isOccupied);
|
||||
// 占用为红色
|
||||
this.sectionAspect = isOccupied ? IndicatorStatusEnum.R : IndicatorStatusEnum.No;
|
||||
this.sectionAspect = isOccupied ? IndicatorStatusEnum.O : IndicatorStatusEnum.F;
|
||||
}
|
||||
|
||||
/**
|
||||
* 辅助灯状态
|
||||
*/
|
||||
public void refreshAssistStatus() {
|
||||
// 判断改方动作是否完成
|
||||
if (judgeChangeDirectionReady()) {
|
||||
// 倒计时归零
|
||||
this.remain.set(0);
|
||||
// 发车辅助按钮弹起
|
||||
this.deliverAssistStatus = false;
|
||||
// 接车辅助按钮弹起
|
||||
this.receiveAssistStatus = false;
|
||||
}
|
||||
// 如果总辅助、(接发任意一方按下为白灯)
|
||||
if (this.mainAssistStatus && (this.deliverAssistStatus || this.receiveAssistStatus)) {
|
||||
this.assistAspect = IndicatorStatusEnum.O;
|
||||
} else {
|
||||
this.assistAspect = IndicatorStatusEnum.F;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -210,7 +204,7 @@ public class StationDirection extends MapNamedElement {
|
||||
* @param type 按钮类型
|
||||
* @param pressDown 按钮按下抬起
|
||||
*/
|
||||
public void modifyButtonStatus(Button.ButtonTypeEnum type, boolean pressDown) {
|
||||
public void modifyButtonStatus(ButtonTypeEnum type, boolean pressDown) {
|
||||
switch (type) {
|
||||
case CHANGE_DIRECTION:
|
||||
this.changeDirectionStatus = pressDown;
|
||||
@ -227,6 +221,32 @@ public class StationDirection extends MapNamedElement {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认属性
|
||||
*/
|
||||
private void setDefaultAttribute() {
|
||||
this.changeDirectionStatus = false;
|
||||
this.mainAssistStatus = false;
|
||||
this.receiveAssistStatus = false;
|
||||
this.deliverAssistStatus = false;
|
||||
this.receiveAspect = IndicatorStatusEnum.F;
|
||||
this.deliverAspect = IndicatorStatusEnum.F;
|
||||
this.sectionAspect = IndicatorStatusEnum.F;
|
||||
this.assistAspect = IndicatorStatusEnum.F;
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认亮灯设置
|
||||
*/
|
||||
private ReceiveAndDeliverModel getDefaultReceiveAndDeliver() {
|
||||
// X、S方向为接车方向默认亮起
|
||||
if (DirectionLabelEnum.X.equals(labelEnum) || DirectionLabelEnum.S.equals(labelEnum)) {
|
||||
return ReceiveAndDeliverModel.R;
|
||||
} else { // 其他方向默认发车灯亮起
|
||||
return ReceiveAndDeliverModel.D;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果信号灯所在区段任意一边被锁闭
|
||||
*
|
||||
@ -244,10 +264,48 @@ public class StationDirection extends MapNamedElement {
|
||||
return isLock;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断改方是否完成
|
||||
*/
|
||||
private boolean judgeChangeDirectionReady() {
|
||||
boolean isReady = false;
|
||||
// 根据接、发状态获取进路信息
|
||||
ReceiveAndDeliverModel defaultModel = getDefaultReceiveAndDeliver();
|
||||
// 接方向在判断,发车进路办理后就会取消辅助状态
|
||||
if (ReceiveAndDeliverModel.R.equals(defaultModel)) {
|
||||
// 改方按钮是否按下,代表正在改方
|
||||
// 进路已锁闭,发车已就绪
|
||||
isReady = this.changeDirectionStatus && this.deliverRouteList.stream().anyMatch(Route::isLock);
|
||||
} else {
|
||||
// 发车进路需要判断接车进路是否办理
|
||||
isReady = this.receiveRouteList.stream().anyMatch(Route::isLock);
|
||||
}
|
||||
return isReady;
|
||||
}
|
||||
|
||||
public enum ReceiveAndDeliverModel {
|
||||
// 接
|
||||
RECEIVE,
|
||||
R,
|
||||
// 发
|
||||
DELIVER,
|
||||
D,
|
||||
}
|
||||
|
||||
public enum IndicatorStatusEnum {
|
||||
// 占用
|
||||
O,
|
||||
// 空闲
|
||||
F
|
||||
}
|
||||
|
||||
public enum ButtonTypeEnum {
|
||||
// 总辅助
|
||||
MAIN_ASSIST,
|
||||
// 接辅助
|
||||
RECEIVE_ASSIST,
|
||||
// 发辅助
|
||||
DELIVER_ASSIST,
|
||||
// 改方
|
||||
CHANGE_DIRECTION,
|
||||
NO;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.status;
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.StationDirection;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vo.DeviceStatusVO;
|
||||
@ -9,6 +8,7 @@ import club.joylink.rtss.simulation.cbtc.data.vo.StationDirectionStatusVO;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* 车站状态
|
||||
@ -22,27 +22,27 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
/**
|
||||
* 接车、发车模式
|
||||
*/
|
||||
private StationDirection.ReceiveAndDeliverModel model;
|
||||
private StationDirection.ReceiveAndDeliverModel runStatus;
|
||||
|
||||
/**
|
||||
* 接车灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum receiveAspect;
|
||||
private StationDirection.IndicatorStatusEnum receiveAspect;
|
||||
|
||||
/**
|
||||
* 发车灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum deliverAspect;
|
||||
private StationDirection.IndicatorStatusEnum deliverAspect;
|
||||
|
||||
/**
|
||||
* 区间灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum sectionAspect;
|
||||
private StationDirection.IndicatorStatusEnum sectionAspect;
|
||||
|
||||
/**
|
||||
* 辅助灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum assistAspect;
|
||||
private StationDirection.IndicatorStatusEnum assistAspect;
|
||||
|
||||
/**
|
||||
* 改方按钮状态
|
||||
@ -64,11 +64,16 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
*/
|
||||
private boolean deliverAssistStatus;
|
||||
|
||||
/**
|
||||
* 倒计时
|
||||
*/
|
||||
private AtomicInteger remain;
|
||||
|
||||
public StationDirectionStatus(StationDirection stationDirection) {
|
||||
super(stationDirection.getCode(), stationDirection.getDeviceType());
|
||||
this.stationCode = stationDirection.getStation().getCode();
|
||||
this.labelEnum = stationDirection.getLabelEnum();
|
||||
this.model = stationDirection.getModel();
|
||||
this.runStatus = stationDirection.getRunStatus();
|
||||
this.receiveAspect = stationDirection.getReceiveAspect();
|
||||
this.deliverAspect = stationDirection.getDeliverAspect();
|
||||
this.sectionAspect = stationDirection.getSectionAspect();
|
||||
@ -77,6 +82,7 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
this.mainAssistStatus = stationDirection.isMainAssistStatus();
|
||||
this.receiveAssistStatus = stationDirection.isReceiveAssistStatus();
|
||||
this.deliverAssistStatus = stationDirection.isDeliverAssistStatus();
|
||||
this.remain = new AtomicInteger(stationDirection.getRemain().intValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -85,9 +91,9 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
StationDirectionStatusVO status = (StationDirectionStatusVO) statusVO;
|
||||
boolean change = false;
|
||||
// 接车、发车口
|
||||
if (!Objects.equals(labelEnum.getModel(), model)) {
|
||||
this.model = labelEnum.getModel();
|
||||
status.setModel(labelEnum.getModel());
|
||||
if (!Objects.equals(labelEnum.getRunStatus(), runStatus)) {
|
||||
this.runStatus = labelEnum.getRunStatus();
|
||||
status.setRunStatus(labelEnum.getRunStatus());
|
||||
change = true;
|
||||
}
|
||||
// 接车
|
||||
@ -126,23 +132,23 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
status.setMainAssistStatus(mainAssistStatus);
|
||||
change = true;
|
||||
}
|
||||
|
||||
// 接辅助按钮
|
||||
if (!Objects.equals(labelEnum.isReceiveAssistStatus(), receiveAssistStatus)) {
|
||||
this.receiveAssistStatus = labelEnum.isReceiveAssistStatus();
|
||||
status.setReceiveAssistStatus(receiveAssistStatus);
|
||||
change = true;
|
||||
}
|
||||
|
||||
// 发辅助按钮
|
||||
if (!Objects.equals(labelEnum.isDeliverAssistStatus(), deliverAssistStatus)) {
|
||||
this.deliverAssistStatus = labelEnum.isDeliverAssistStatus();
|
||||
status.setDeliverAssistStatus(deliverAssistStatus);
|
||||
change = true;
|
||||
}
|
||||
if (change) {
|
||||
status.setStationCode(labelEnum.getStation().getCode());
|
||||
status.setLabelEnum(labelEnum.getLabelEnum());
|
||||
// 倒计时判断
|
||||
if (!Objects.equals(labelEnum.getRemain().intValue(), remain.intValue())) {
|
||||
this.remain.set(labelEnum.getRemain().intValue());
|
||||
status.setRemain(remain.intValue());
|
||||
change = true;
|
||||
}
|
||||
return change;
|
||||
}
|
||||
@ -150,6 +156,7 @@ public class StationDirectionStatus extends DeviceStatus {
|
||||
@Override
|
||||
public DeviceStatusVO convert2VO(MapElement device) {
|
||||
StationDirectionStatusVO statusVO = new StationDirectionStatusVO((StationDirection) device);
|
||||
statusVO.setRunStatus(runStatus);
|
||||
statusVO.setStationCode(stationCode);
|
||||
statusVO.setLabelEnum(labelEnum);
|
||||
statusVO.setReceiveAspect(receiveAspect);
|
||||
|
@ -1,7 +1,6 @@
|
||||
package club.joylink.rtss.simulation.cbtc.data.vo;
|
||||
|
||||
import club.joylink.rtss.constants.DirectionLabelEnum;
|
||||
import club.joylink.rtss.constants.IndicatorStatusEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.data.map.StationDirection;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@ -17,27 +16,27 @@ public class StationDirectionStatusVO extends DeviceStatusVO {
|
||||
|
||||
private DirectionLabelEnum labelEnum;
|
||||
|
||||
private StationDirection.ReceiveAndDeliverModel model;
|
||||
private StationDirection.ReceiveAndDeliverModel runStatus;
|
||||
|
||||
/**
|
||||
* 接车灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum receiveAspect;
|
||||
private StationDirection.IndicatorStatusEnum receiveAspect;
|
||||
|
||||
/**
|
||||
* 发车灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum deliverAspect;
|
||||
private StationDirection.IndicatorStatusEnum deliverAspect;
|
||||
|
||||
/**
|
||||
* 区间灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum sectionAspect;
|
||||
private StationDirection.IndicatorStatusEnum sectionAspect;
|
||||
|
||||
/**
|
||||
* 辅助灯状态
|
||||
*/
|
||||
private IndicatorStatusEnum assistAspect;
|
||||
private StationDirection.IndicatorStatusEnum assistAspect;
|
||||
|
||||
/**
|
||||
* 改方按钮状态
|
||||
@ -59,6 +58,11 @@ public class StationDirectionStatusVO extends DeviceStatusVO {
|
||||
*/
|
||||
private Boolean deliverAssistStatus;
|
||||
|
||||
/**
|
||||
* 倒计时
|
||||
*/
|
||||
private Integer remain;
|
||||
|
||||
public StationDirectionStatusVO(StationDirection stationDirection) {
|
||||
super(stationDirection.getCode(), stationDirection.getDeviceType());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user