You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.1 KiB

package com.qyft.ms.service;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.common.constant.WebSocketMessageType;
import com.qyft.ms.common.result.CMDResultCode;
import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
import com.qyft.ms.device.service.ICtrlFuncService;
import com.qyft.ms.model.form.CMDForm;
import com.qyft.ms.model.vo.ExecutionResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.function.Supplier;
@Slf4j
@RequiredArgsConstructor
@Service
public class CMDService {
private final WebSocketService webSocketService;
private final ICtrlFuncService ctrlFuncService;
CMDForm form;
private void run(List<Supplier<Boolean>> cmdList) {
ExecutionResult executionResult = new ExecutionResult();
executionResult.setCommandId(form.getCommandId());
executionResult.setCommandName(form.getCommand());
// 执行所有命令
for (Supplier<Boolean> command : cmdList) {
boolean result = command.get();
if (!result) {
log.error("指令执行异常: {}", JSONUtil.toJsonStr(form));
executionResult.setStatus(CMDResultCode.FAILURE.getCode());
executionResult.setMessage(CMDResultCode.FAILURE.getMsg());
webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
return;
}
}
executionResult.setStatus(CMDResultCode.SUCCESS.getCode());
executionResult.setMessage(CMDResultCode.SUCCESS.getMsg());
webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
}
public boolean executeCommand(CMDForm cmdForm) {
String commandName = cmdForm.getCommand();
List<DeviceCtrlFuncCMD> deviceCtrlFuncCMDList = ctrlFuncService.findAllStepCMD();
for (DeviceCtrlFuncCMD deviceCtrlFuncCMD : deviceCtrlFuncCMDList) {
if (deviceCtrlFuncCMD.getDeviceCmd().equals(commandName)) {
new Thread(() -> run(cmdForm)).start();
return true;
}
}
return false;
}
}