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> cmdList) { ExecutionResult executionResult = new ExecutionResult(); executionResult.setCommandId(form.getCommandId()); executionResult.setCommandName(form.getCommand()); // 执行所有命令 for (Supplier 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 deviceCtrlFuncCMDList = ctrlFuncService.findAllStepCMD(); for (DeviceCtrlFuncCMD deviceCtrlFuncCMD : deviceCtrlFuncCMDList) { if (deviceCtrlFuncCMD.getDeviceCmd().equals(commandName)) { new Thread(() -> run(cmdForm)).start(); return true; } } return false; } }