2025-12-17 10:23:45 +08:00
|
|
|
|
package com.tuoheng.machine.instruction;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 指令接口
|
|
|
|
|
|
* 一个指令包含四个部分:
|
|
|
|
|
|
* a. 判断是否可以执行该指令
|
|
|
|
|
|
* b. 执行远程调用(如MQTT发送)
|
|
|
|
|
|
* c. 等待方法回调,并判断该方法是否成功执行
|
|
|
|
|
|
* d. 等待状态回调,并判断结果是否OK
|
|
|
|
|
|
*/
|
|
|
|
|
|
public interface Instruction {
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取指令名称
|
|
|
|
|
|
*/
|
|
|
|
|
|
String getName();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* a. 判断是否可以执行该指令
|
|
|
|
|
|
*/
|
|
|
|
|
|
boolean canExecute(InstructionContext context);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* b. 执行远程调用(如MQTT发送)
|
|
|
|
|
|
*/
|
|
|
|
|
|
void executeRemoteCall(InstructionContext context) throws Exception;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* c. 获取方法回调配置(可选)
|
|
|
|
|
|
* 返回null表示不需要方法回调
|
|
|
|
|
|
*/
|
|
|
|
|
|
CallbackConfig getMethodCallbackConfig(InstructionContext context);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* d. 获取状态回调配置(可选)
|
|
|
|
|
|
* 返回null表示不需要状态回调
|
|
|
|
|
|
*/
|
|
|
|
|
|
CallbackConfig getStateCallbackConfig(InstructionContext context);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取指令超时时间(毫秒)
|
|
|
|
|
|
*/
|
|
|
|
|
|
default long getTimeoutMs() {
|
|
|
|
|
|
return 60000; // 默认60秒
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 指令执行完成回调(无论成功失败都会调用)
|
|
|
|
|
|
*/
|
|
|
|
|
|
default void onComplete(InstructionContext context, InstructionResult result) {
|
|
|
|
|
|
// 默认空实现
|
|
|
|
|
|
}
|
2025-12-18 10:31:20 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取成功后执行的下一个指令
|
|
|
|
|
|
*/
|
|
|
|
|
|
default Instruction getOnSuccessInstruction() {
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取失败后执行的下一个指令
|
|
|
|
|
|
*/
|
|
|
|
|
|
default Instruction getOnFailureInstruction() {
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取无论成功失败都执行的下一个指令(优先级最高)
|
|
|
|
|
|
*/
|
|
|
|
|
|
default Instruction getAlwaysNextInstruction() {
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据执行结果获取下一个指令
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param success 是否成功
|
|
|
|
|
|
* @return 下一个指令,如果没有则返回null
|
|
|
|
|
|
*/
|
|
|
|
|
|
default Instruction getNextInstruction(boolean success) {
|
|
|
|
|
|
// 优先返回 always 配置
|
|
|
|
|
|
Instruction alwaysNext = getAlwaysNextInstruction();
|
|
|
|
|
|
if (alwaysNext != null) {
|
|
|
|
|
|
return alwaysNext;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 根据成功失败返回对应的指令
|
|
|
|
|
|
if (success) {
|
|
|
|
|
|
return getOnSuccessInstruction();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return getOnFailureInstruction();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-17 10:23:45 +08:00
|
|
|
|
}
|