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
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;
|
|
}
|
|
|
|
|
|
|
|
}
|