From f3e84ced32e36ba7e5f9882a24ffb975b12f3546 Mon Sep 17 00:00:00 2001 From: guoapeng Date: Fri, 21 Feb 2025 11:24:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8C=87=E4=BB=A4=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/qyft/gd/common/constant/Commands.java | 10 ++++ .../com/qyft/gd/controller/TasksController.java | 7 +-- .../java/com/qyft/gd/model/dto/StopTaskDTO.java | 10 ++++ src/main/java/com/qyft/gd/service/CMDService.java | 54 +++++++++++++++++++++- .../java/com/qyft/gd/service/TasksService.java | 5 +- .../com/qyft/gd/service/impl/TasksServiceImpl.java | 9 +++- 6 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/qyft/gd/model/dto/StopTaskDTO.java diff --git a/src/main/java/com/qyft/gd/common/constant/Commands.java b/src/main/java/com/qyft/gd/common/constant/Commands.java index 74d75a2..6476835 100644 --- a/src/main/java/com/qyft/gd/common/constant/Commands.java +++ b/src/main/java/com/qyft/gd/common/constant/Commands.java @@ -104,4 +104,14 @@ public class Commands { */ public static final String CLOSE_CLAW = "closeClaw"; + /** + * 开门 + */ + public static final String OPEN_DOOR = "openDoor"; + + /** + * 关门 + */ + public static final String CLOSE_DOOR = "closeDoor"; + } diff --git a/src/main/java/com/qyft/gd/controller/TasksController.java b/src/main/java/com/qyft/gd/controller/TasksController.java index 496be5f..b94d194 100644 --- a/src/main/java/com/qyft/gd/controller/TasksController.java +++ b/src/main/java/com/qyft/gd/controller/TasksController.java @@ -1,6 +1,7 @@ package com.qyft.gd.controller; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qyft.gd.model.dto.StopTaskDTO; import com.qyft.gd.model.dto.TaskDTO; import com.qyft.gd.model.entity.Tasks; import com.qyft.gd.model.vo.TaskListVO; @@ -37,7 +38,7 @@ public class TasksController { @Operation(summary = "添加新实验") @PostMapping("/") - public Result addTask(@RequestBody TaskDTO dto) { + public Result addTask(@RequestBody TaskDTO dto) { return Result.success(tasksService.addTask(dto.getName())); } @@ -56,7 +57,7 @@ public class TasksController { @Operation(summary = "停止实验") @PostMapping("/stop") - public Result stopTask(@Parameter(description = "实验id") @RequestParam Long taskId) { - return Result.success(tasksService.stopTask(taskId)); + public Result stopTask(@RequestBody StopTaskDTO dto) { + return Result.success(tasksService.stopTask(dto.getTaskId())); } } diff --git a/src/main/java/com/qyft/gd/model/dto/StopTaskDTO.java b/src/main/java/com/qyft/gd/model/dto/StopTaskDTO.java new file mode 100644 index 0000000..faa3952 --- /dev/null +++ b/src/main/java/com/qyft/gd/model/dto/StopTaskDTO.java @@ -0,0 +1,10 @@ +package com.qyft.gd.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class StopTaskDTO { + @Schema(description = "实验id") + private Long taskId; +} diff --git a/src/main/java/com/qyft/gd/service/CMDService.java b/src/main/java/com/qyft/gd/service/CMDService.java index 7369116..0fae0d6 100644 --- a/src/main/java/com/qyft/gd/service/CMDService.java +++ b/src/main/java/com/qyft/gd/service/CMDService.java @@ -5,6 +5,8 @@ import com.qyft.gd.common.constant.Commands; import com.qyft.gd.common.constant.WebSocketMessageType; import com.qyft.gd.common.result.CMDResultCode; import com.qyft.gd.device.service.DeviceService; +import com.qyft.gd.model.entity.TaskSteps; +import com.qyft.gd.model.entity.Tasks; import com.qyft.gd.model.form.CMDForm; import com.qyft.gd.model.vo.ExecutionResult; import lombok.extern.slf4j.Slf4j; @@ -18,19 +20,43 @@ import java.util.function.Supplier; @Service public class CMDService { + private final TasksService tasksService; + private final TaskStepsService taskStepsService; DeviceService deviceService; WebSocketService webSocketService; BaseDataService baseDataService; Map, List>>> commandMap; CMDForm form; + Map cmdMap; @Autowired - public CMDService(DeviceService deviceService , WebSocketService webSocketService, BaseDataService baseDataService) { + public CMDService(DeviceService deviceService , WebSocketService webSocketService, BaseDataService baseDataService, TasksService tasksService, TaskStepsService taskStepsService) { this.deviceService = deviceService; this.webSocketService = webSocketService; this.baseDataService = baseDataService; + this.cmdMap = new HashMap<>(); + cmdMap.put("openDoor", "开门"); + cmdMap.put("closeDoor", "关门"); + cmdMap.put("upTray", "抬起托盘"); + cmdMap.put("downTray", "降下托盘"); + cmdMap.put("injectFluid", "添加溶液"); + cmdMap.put("moveToActionArea", "移至加液"); + cmdMap.put("startShakeUp", "摇匀试管架"); + cmdMap.put("stopShakeUp", "停止摇匀试管架"); + cmdMap.put("startHeat", "开始加热"); + cmdMap.put("stopHeat", "停止加热"); + cmdMap.put("takePhoto", "拍照"); + cmdMap.put("takeOffCap", "取试管架盖"); + cmdMap.put("putBackCap", "装回试管架盖"); + cmdMap.put("moveMachineArm", "机械臂移动至指定坐标"); + cmdMap.put("moveTube", "移动单个试管"); + cmdMap.put("moveToHeatArea", "移至加热区"); + cmdMap.put("openClaw", "机械臂爪子开启"); + cmdMap.put("closeClaw", "机械臂爪子关闭"); // 初始化命令映射 this.commandMap = new HashMap<>(); + commandMap.put(Commands.OPEN_DOOR, this::openDoor); + commandMap.put(Commands.CLOSE_DOOR, this::closeDoor); commandMap.put(Commands.UP_TRAY, this::upTray); commandMap.put(Commands.DOWN_TRAY, this::downTray); commandMap.put(Commands.INJECT_FLUID, this::injectFluid); @@ -47,6 +73,22 @@ public class CMDService { commandMap.put(Commands.MOVE_TO_HEAT_AREA, this::moveToHeatArea); commandMap.put(Commands.OPEN_CLAW, this::openClaw); commandMap.put(Commands.CLOSE_CLAW, this::closeClaw); + this.tasksService = tasksService; + this.taskStepsService = taskStepsService; + } + + // 开门 + public List> openDoor(Map params) { + List> cmdList = new ArrayList<>(); + cmdList.add(() -> deviceService.openDoor()); + return cmdList; + } + + // 关门 + public List> closeDoor(Map params) { + List> cmdList = new ArrayList<>(); + cmdList.add(() -> deviceService.closeDoor()); + return cmdList; } // 机械臂爪子开启 public List> openClaw(Map params) { @@ -293,6 +335,9 @@ public class CMDService { int z = Integer.parseInt(tubePositionArr[2]); // 泵id String pumpId = baseDataService.getPumpIdBySolutionId((Integer) params.get("solutionId")); + if(params.get("flowRate") != null) { + cmdList.add(() -> deviceService.setFlowRate(Integer.parseInt(pumpId), (Integer) params.get("flowRate"))); + } cmdList.add(() -> deviceService.moveLiquidArmToPoint(x,y,z)); cmdList.add(() -> deviceService.addLiquid(Long.valueOf(pumpId), ((Integer)params.get("volume")))); return cmdList; @@ -352,6 +397,13 @@ public class CMDService { return false; } List> cmdList = command.apply(form.getParams()); + Tasks tasks = tasksService.getIngTask(); + if (tasks != null) { + TaskSteps taskSteps = new TaskSteps(); + taskSteps.setTaskId(tasks.getId()); + taskSteps.setStepDescription("执行指令:" + cmdMap.get(commandName)); + taskStepsService.addTaskSteps(taskSteps); + } initExecutorThread(cmdList); return true; } diff --git a/src/main/java/com/qyft/gd/service/TasksService.java b/src/main/java/com/qyft/gd/service/TasksService.java index a97f25c..33e0d5e 100644 --- a/src/main/java/com/qyft/gd/service/TasksService.java +++ b/src/main/java/com/qyft/gd/service/TasksService.java @@ -12,7 +12,10 @@ import com.qyft.gd.system.common.base.BasePageQuery; public interface TasksService extends IService { IPage getPage(BasePageQuery pageQuery); TaskListVO selectById(Long id); - int addTask(String taskName); + Tasks addTask(String taskName); + + Tasks getIngTask(); + int removeByIds(String ids); int stopTask(Long taskId); } diff --git a/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java b/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java index 733fd93..a81d63e 100644 --- a/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java +++ b/src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java @@ -88,7 +88,7 @@ public class TasksServiceImpl extends ServiceImpl implements } @Override - public int addTask(String taskName) { + public Tasks addTask(String taskName) { Tasks tasks = new Tasks(); tasks.setName(taskName); User user = userService.currentUser(); @@ -100,7 +100,12 @@ public class TasksServiceImpl extends ServiceImpl implements taskSteps.setTaskId(tasks.getId()); taskSteps.setStepDescription("开始实验"); taskStepsService.addTaskSteps(taskSteps); - return Math.toIntExact(tasks.getId()); + return tasks; + } + + @Override + public Tasks getIngTask() { + return tasksMapper.selectOne(new QueryWrapper().eq("status", 1)); } @Override