【实训道岔定反、单锁解、转动联动验证处理】

This commit is contained in:
weizhihong 2023-02-10 18:26:44 +08:00
parent 0a817bdb82
commit 382d28ca31

View File

@ -12,6 +12,7 @@ import club.joylink.rtss.simulation.cbtc.*;
import club.joylink.rtss.simulation.cbtc.conversation.Conversation;
import club.joylink.rtss.simulation.cbtc.conversation.ConversationManagerService;
import club.joylink.rtss.simulation.cbtc.conversation.ConversationMessage;
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationMessageVO;
import club.joylink.rtss.simulation.cbtc.data.vo.Training2MessageVO;
import club.joylink.rtss.simulation.cbtc.event.SimulationOperationEvent;
@ -70,6 +71,15 @@ public class Training2Service {
Operation.Type.Conversation_Chat_Audio_Base64.name()
);
/**
* 实训步骤执行道岔联动元素存在当前步骤元素
*/
private static final List<String> CHECK_SWITCH_STATUS_LIST = Arrays.asList(
Operation.Type.Switch_Turn.name(),
Operation.Type.Switch_Normal_Position.name(), Operation.Type.Switch_Reverse_Position.name(),
Operation.Type.Switch_Single_Lock.name(), Operation.Type.Switch_Single_Unlock.name()
);
@Autowired
private AtsOperationDispatcher atsOperationDispatcher;
@ -392,11 +402,14 @@ public class Training2Service {
if (CONVERSATION_LIST.contains(simCommand2.getOperationType().name()) && CONVERSATION_LIST.contains(event.getOperate())) {
checkSimOperationConversation(simCommand2, simulation, step, event.getOperate());
startFlag = Boolean.TRUE;
} else if (simCommand2.getOperationType().name().equals(event.getOperate()) && compareParams(event.getParams(), simCommand2.getParams())) {
simCommand2.doOperated(); // 标识已操作过
simCommand2.doCompletion();
startFlag = Boolean.TRUE;
} else if (checkSwitchLinkOperation(simulation, simCommand2, event)) {
simCommand2.doOperated(); // 标识已操作过
simCommand2.doCompletion();
startFlag = Boolean.TRUE;
}
// 指令执行后启动仿真
if (simulation.isPause() && startFlag) {
@ -757,6 +770,30 @@ public class Training2Service {
}
}
/**
* 检查是否是道岔联动操作
* @param simulation
* @param event
* @return
*/
private boolean checkSwitchLinkOperation(Simulation simulation, Operation2.SimCommand2 simCommand2, SimulationOperationEvent event) {
boolean flag = CHECK_SWITCH_STATUS_LIST.contains(simCommand2.getOperationType().name()) && CHECK_SWITCH_STATUS_LIST.contains(event.getOperate());
if (flag) {
flag = simCommand2.getParams() != null && event.getParams() != null;
}
if (flag) {
String eventSwitchCode = event.getParams().getOrDefault("switchCode", "").toString();
Switch aSwitch = simulation.getRepository().getByCode(eventSwitchCode, Switch.class);
Switch linkedSwitch = aSwitch.queryLinkedSwitch();
flag = Objects.nonNull(linkedSwitch);
if (flag) {
String simComSwitchCode = simCommand2.getParams().getOrDefault("switchCode", "").toString();
flag = Objects.equals(simComSwitchCode, linkedSwitch.getCode());
}
}
return flag;
}
/**
* 对比事件与操作参数
*/