Browse Source

feat: 指令加入实验记录

master
guoapeng 6 months ago
parent
commit
f3e84ced32
  1. 10
      src/main/java/com/qyft/gd/common/constant/Commands.java
  2. 7
      src/main/java/com/qyft/gd/controller/TasksController.java
  3. 10
      src/main/java/com/qyft/gd/model/dto/StopTaskDTO.java
  4. 54
      src/main/java/com/qyft/gd/service/CMDService.java
  5. 5
      src/main/java/com/qyft/gd/service/TasksService.java
  6. 9
      src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java

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

7
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<Integer> addTask(@RequestBody TaskDTO dto) {
public Result<Tasks> addTask(@RequestBody TaskDTO dto) {
return Result.success(tasksService.addTask(dto.getName()));
}
@ -56,7 +57,7 @@ public class TasksController {
@Operation(summary = "停止实验")
@PostMapping("/stop")
public Result<Integer> stopTask(@Parameter(description = "实验id") @RequestParam Long taskId) {
return Result.success(tasksService.stopTask(taskId));
public Result<Integer> stopTask(@RequestBody StopTaskDTO dto) {
return Result.success(tasksService.stopTask(dto.getTaskId()));
}
}

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

54
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<String, Function<Map<String, Object>, List<Supplier<Boolean>>>> commandMap;
CMDForm form;
Map<String, String> 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<Supplier<Boolean>> openDoor(Map<String, Object> params) {
List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.openDoor());
return cmdList;
}
// 关门
public List<Supplier<Boolean>> closeDoor(Map<String, Object> params) {
List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.closeDoor());
return cmdList;
}
// 机械臂爪子开启
public List<Supplier<Boolean>> openClaw(Map<String, Object> 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<Supplier<Boolean>> 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;
}

5
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<Tasks> {
IPage<TaskListVO> 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);
}

9
src/main/java/com/qyft/gd/service/impl/TasksServiceImpl.java

@ -88,7 +88,7 @@ public class TasksServiceImpl extends ServiceImpl<TasksMapper, Tasks> 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<TasksMapper, Tasks> 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<Tasks>().eq("status", 1));
}
@Override

Loading…
Cancel
Save