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

5 months ago
  1. package com.qyft.ms.service;
  2. import cn.hutool.json.JSONUtil;
  3. import com.qyft.ms.common.constant.WebSocketMessageType;
  4. import com.qyft.ms.common.result.CMDResultCode;
  5. import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
  6. import com.qyft.ms.device.service.ICtrlFuncService;
  7. import com.qyft.ms.model.form.CMDForm;
  8. import com.qyft.ms.model.vo.ExecutionResult;
  9. import lombok.RequiredArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.stereotype.Service;
  12. import java.util.List;
  13. import java.util.function.Supplier;
  14. @Slf4j
  15. @RequiredArgsConstructor
  16. @Service
  17. public class CMDService {
  18. private final WebSocketService webSocketService;
  19. private final ICtrlFuncService ctrlFuncService;
  20. CMDForm form;
  21. private void run(List<Supplier<Boolean>> cmdList) {
  22. ExecutionResult executionResult = new ExecutionResult();
  23. executionResult.setCommandId(form.getCommandId());
  24. executionResult.setCommandName(form.getCommand());
  25. // 执行所有命令
  26. for (Supplier<Boolean> command : cmdList) {
  27. boolean result = command.get();
  28. if (!result) {
  29. log.error("指令执行异常: {}", JSONUtil.toJsonStr(form));
  30. executionResult.setStatus(CMDResultCode.FAILURE.getCode());
  31. executionResult.setMessage(CMDResultCode.FAILURE.getMsg());
  32. webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
  33. return;
  34. }
  35. }
  36. executionResult.setStatus(CMDResultCode.SUCCESS.getCode());
  37. executionResult.setMessage(CMDResultCode.SUCCESS.getMsg());
  38. webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
  39. }
  40. public boolean executeCommand(CMDForm cmdForm) {
  41. String commandName = cmdForm.getCommand();
  42. List<DeviceCtrlFuncCMD> deviceCtrlFuncCMDList = ctrlFuncService.findAllStepCMD();
  43. for (DeviceCtrlFuncCMD deviceCtrlFuncCMD : deviceCtrlFuncCMDList) {
  44. if (deviceCtrlFuncCMD.getDeviceCmd().equals(commandName)) {
  45. new Thread(() -> run(cmdForm)).start();
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. }