Browse Source

feat:删除无用功能

master
白凤吉 5 months ago
parent
commit
9e0066f563
  1. 52
      src/main/java/com/qyft/ms/app/model/bo/CraftsStepMethod.java
  2. 35
      src/main/java/com/qyft/ms/app/model/bo/CraftsStepStatus.java
  3. 23
      src/main/java/com/qyft/ms/app/model/bo/TubeSol.java
  4. 14
      src/main/java/com/qyft/ms/app/model/dto/BaseDataDTO.java
  5. 13
      src/main/java/com/qyft/ms/app/model/dto/CmdInjectFluidDTO.java
  6. 14
      src/main/java/com/qyft/ms/app/model/dto/ContainerDTO.java
  7. 14
      src/main/java/com/qyft/ms/app/model/dto/InjectFluid.java
  8. 10
      src/main/java/com/qyft/ms/app/model/dto/LogDTO.java
  9. 11
      src/main/java/com/qyft/ms/app/model/dto/PauseCraftsDto.java
  10. 11
      src/main/java/com/qyft/ms/app/model/dto/ResumeCraftsDto.java
  11. 13
      src/main/java/com/qyft/ms/app/model/dto/StartCraftsDTO.java
  12. 13
      src/main/java/com/qyft/ms/app/model/dto/StartHeatDTO.java
  13. 11
      src/main/java/com/qyft/ms/app/model/dto/StopCraftsDto.java
  14. 10
      src/main/java/com/qyft/ms/app/model/dto/StopTaskDTO.java
  15. 10
      src/main/java/com/qyft/ms/app/model/dto/TaskDTO.java
  16. 35
      src/main/java/com/qyft/ms/app/model/entity/Container.java
  17. 25
      src/main/java/com/qyft/ms/app/model/entity/Crafts.java
  18. 20
      src/main/java/com/qyft/ms/app/model/entity/Ores.java
  19. 20
      src/main/java/com/qyft/ms/app/model/entity/Solutions.java
  20. 30
      src/main/java/com/qyft/ms/app/model/entity/TaskSteps.java
  21. 35
      src/main/java/com/qyft/ms/app/model/entity/Tasks.java
  22. 27
      src/main/java/com/qyft/ms/app/model/vo/BaseDataVO.java
  23. 13
      src/main/java/com/qyft/ms/app/model/vo/ContainerListVO.java
  24. 23
      src/main/java/com/qyft/ms/app/model/vo/CraftsStepResult.java
  25. 30
      src/main/java/com/qyft/ms/app/model/vo/OresCraftsListVO.java
  26. 35
      src/main/java/com/qyft/ms/app/model/vo/TaskListVO.java
  27. 13
      src/main/java/com/qyft/ms/app/service/CMDService.java
  28. 93
      src/main/java/com/qyft/ms/device/controller/DeviceCtrlController.java
  29. 14
      src/main/java/com/qyft/ms/device/controller/TestController.java
  30. 11
      src/main/java/com/qyft/ms/device/mapper/CtrlFuncMapper.java
  31. 11
      src/main/java/com/qyft/ms/device/mapper/CtrlFuncStepMapper.java
  32. 28
      src/main/java/com/qyft/ms/device/model/bo/DeviceOperationalStatus.java
  33. 127
      src/main/java/com/qyft/ms/device/model/bo/DeviceStatus.java
  34. 1
      src/main/java/com/qyft/ms/device/service/DeviceStatusService.java
  35. 166
      src/main/java/com/qyft/ms/device/service/DeviceStepService.java
  36. 28
      src/main/java/com/qyft/ms/device/service/ICtrlFuncService.java
  37. 12
      src/main/java/com/qyft/ms/device/service/ICtrlFuncStepService.java
  38. 132
      src/main/java/com/qyft/ms/device/service/impl/CtrlFuncServiceImpl.java
  39. 20
      src/main/java/com/qyft/ms/device/service/impl/CtrlFuncStepServiceImpl.java
  40. 5
      src/main/resources/mapper/device/CtrlFuncMapper.xml
  41. 5
      src/main/resources/mapper/device/CtrlFuncStepMapper.xml

52
src/main/java/com/qyft/ms/app/model/bo/CraftsStepMethod.java

@ -1,52 +0,0 @@
package com.qyft.ms.app.model.bo;
import lombok.Data;
/**
* 工艺步骤执行方法
*/
@Data
public class CraftsStepMethod {
/**
* 上升托盘
*/
public static final String UP_TRAY = "upTray";
/**
* 降下托盘
*/
public static final String DOWN_TRAY = "downTray";
/**
* 加液
*/
public static final String ADD_LIQUID = "addLiquid";
/**
* 移动到溶液位置
*/
public static final String MOVE_TO_SOL = "moveToSol";
/**
* 移动到加热器位置
*/
public static final String MOVE_TO_HEAT = "moveToHeat";
/**
* 摇晃
*/
public static final String SHAKING = "shaking";
/**
* 开始加热
*/
public static final String START_HEATING = "startHeating";
/**
* 停止加热
*/
public static final String STOP_HEATING = "stopHeating";
/**
* 拍照
*/
public static final String TAKE_PHOTO = "takePhoto";
/**
* 等待
*/
public static final String DELAY = "delay";
}

35
src/main/java/com/qyft/ms/app/model/bo/CraftsStepStatus.java

@ -1,35 +0,0 @@
package com.qyft.ms.app.model.bo;
import lombok.Data;
/**
* 工艺步骤执行状态
*/
@Data
public class CraftsStepStatus {
/**
* 未执行
*/
public static final int NOT_EXECUTED = 0;
/**
* 正在执行
*/
public static final int IN_PROGRESS = 1;
/**
* 暂停执行
*/
public static final int PAUSED = 2;
/**
* 停止执行
*/
public static final int STOPPED = 3;
/**
* 执行错误
*/
public static final int ERROR = 4;
/**
* 执行完成
*/
public static final int FINISH = 6;
}

23
src/main/java/com/qyft/ms/app/model/bo/TubeSol.java

@ -1,23 +0,0 @@
package com.qyft.ms.app.model.bo;
import lombok.Data;
/**
* 试管添加溶液
*/
@Data
public class TubeSol {
/**
* 需要添加溶液的试管编号
*/
private Integer tubeNum;
/**
* 溶液id
*/
private Long solId;
/**
* 加液量
*/
private Integer volume;
}

14
src/main/java/com/qyft/ms/app/model/dto/BaseDataDTO.java

@ -1,14 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class BaseDataDTO {
@Schema(description = "加热区id")
private Long id;
@Schema(description = "温度")
private Long temperature;
@Schema(description = "工艺id")
private Long craftId;
}

13
src/main/java/com/qyft/ms/app/model/dto/CmdInjectFluidDTO.java

@ -1,13 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class CmdInjectFluidDTO {
@Schema(description = "指令id")
private String commandId;
@Schema(description = "加液数据list")
private InjectFluid[] injectFluids;
}

14
src/main/java/com/qyft/ms/app/model/dto/ContainerDTO.java

@ -1,14 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class ContainerDTO {
@Schema(description = "容器id")
private Long id;
@Schema(description = "溶液id")
private Long solutionId;
@Schema(description = "已使用容量")
private Integer capacityUsed;
}

14
src/main/java/com/qyft/ms/app/model/dto/InjectFluid.java

@ -1,14 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class InjectFluid {
@Schema(description = "试管编号")
private Integer tubeNum;
@Schema(description = "溶液id")
private Integer solutionId;
@Schema(description = "容量")
private Integer volume;
}

10
src/main/java/com/qyft/ms/app/model/dto/LogDTO.java

@ -1,10 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class LogDTO {
@Schema(description = "日志信息")
private String text;
}

11
src/main/java/com/qyft/ms/app/model/dto/PauseCraftsDto.java

@ -1,11 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "暂停执行工艺")
@Data
public class PauseCraftsDto {
@Schema(description = "加热区id")
private String heatId;
}

11
src/main/java/com/qyft/ms/app/model/dto/ResumeCraftsDto.java

@ -1,11 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "恢复执行工艺")
@Data
public class ResumeCraftsDto {
@Schema(description = "加热区id")
private String heatId;
}

13
src/main/java/com/qyft/ms/app/model/dto/StartCraftsDTO.java

@ -1,13 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "开始工艺")
@Data
public class StartCraftsDTO {
@Schema(description = "工艺id")
private Long craftId;
@Schema(description = "加热区id")
private String heatId;
}

13
src/main/java/com/qyft/ms/app/model/dto/StartHeatDTO.java

@ -1,13 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class StartHeatDTO {
@Schema(description = "指令id")
private String commandId;
@Schema(description = "加液数据list")
private Integer[] heatIds;
}

11
src/main/java/com/qyft/ms/app/model/dto/StopCraftsDto.java

@ -1,11 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "恢复执行工艺")
@Data
public class StopCraftsDto {
@Schema(description = "加热区id")
private String heatId;
}

10
src/main/java/com/qyft/ms/app/model/dto/StopTaskDTO.java

@ -1,10 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class StopTaskDTO {
@Schema(description = "实验id")
private Long taskId;
}

10
src/main/java/com/qyft/ms/app/model/dto/TaskDTO.java

@ -1,10 +0,0 @@
package com.qyft.ms.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class TaskDTO {
@Schema(description = "实验名称")
private String name;
}

35
src/main/java/com/qyft/ms/app/model/entity/Container.java

@ -1,35 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
@Schema(description = "容器表")
@TableName("container")
@Data
public class Container {
@NotBlank
@Schema(description = "容器id")
private Long id;
@NotBlank
@Schema(description = "类型 0 溶液 1 废液")
private Long type;
@Schema(description = "溶液id")
private Long solutionId;
@Schema(description = "机器id")
private String pumpId;
@NotBlank
@Schema(description = "总容量")
private Integer capacityTotal;
@NotBlank
@Schema(description = "使用容量")
private Integer capacityUsed;
}

25
src/main/java/com/qyft/ms/app/model/entity/Crafts.java

@ -1,25 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.ms.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "工艺")
@TableName("crafts")
@Data
public class Crafts extends BaseEntity {
@NotBlank
@Schema(description = "工艺名称")
private String name;
@Schema(description = "工艺步骤")
private String steps;
@Schema(description = "矿石ID")
private Long oresId;
}

20
src/main/java/com/qyft/ms/app/model/entity/Ores.java

@ -1,20 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.ms.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "矿石")
@TableName("ores")
@Data
public class Ores extends BaseEntity {
@NotBlank()
@Schema(description = "矿石名称")
private String name;
}

20
src/main/java/com/qyft/ms/app/model/entity/Solutions.java

@ -1,20 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.ms.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "溶液")
@TableName("solutions")
@Data
public class Solutions extends BaseEntity {
@NotBlank()
@Schema(description = "溶液名称")
private String name;
}

30
src/main/java/com/qyft/ms/app/model/entity/TaskSteps.java

@ -1,30 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
@Schema(description = "实验步骤")
@TableName("task_steps")
@Data
public class TaskSteps {
@NotBlank
@Schema(description = "id")
private Long id;
@NotBlank
@Schema(description = "实验id")
private Long taskId;
@NotBlank
@Schema(description = "步骤描述")
private String stepDescription;
@NotBlank
@Schema(description = "创建时间")
private String createTime;
}

35
src/main/java/com/qyft/ms/app/model/entity/Tasks.java

@ -1,35 +0,0 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.ms.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "实验")
@TableName("tasks")
@Data
public class Tasks extends BaseEntity {
@NotBlank
@Schema(description = "实验名称")
private String name;
@NotBlank
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "创建人")
private Long createUser;
@Schema(description = "结束时间")
private String endTime;
@Schema(description = "状态 1 执行中 2 执行完毕")
private Integer status;
@Schema(description = "是否删除 0 未删除 1 已删除")
private Integer isDeleted;
}

27
src/main/java/com/qyft/ms/app/model/vo/BaseDataVO.java

@ -1,27 +0,0 @@
package com.qyft.ms.app.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = false)
@Schema(description = "容器")
@Data
public class BaseDataVO {
@Schema(description = "加热区")
List<SysSettingVO> heat_area;
@Schema(description = "加液区")
List<SysSettingVO> solution_area;
@Schema(description = "拍子区域")
List<SysSettingVO> lid_area;
@Schema(description = "系统配置")
List<SysSettingVO> sys_setting;
@Schema(description = "容器数据")
List<ContainerListVO> containers;
}

13
src/main/java/com/qyft/ms/app/model/vo/ContainerListVO.java

@ -1,13 +0,0 @@
package com.qyft.ms.app.model.vo;
import com.qyft.ms.app.model.entity.Container;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "容器")
@Data
public class ContainerListVO extends Container {
}

23
src/main/java/com/qyft/ms/app/model/vo/CraftsStepResult.java

@ -1,23 +0,0 @@
package com.qyft.ms.app.model.vo;
import lombok.Data;
/**
* 工艺步骤执行状态
*/
@Data
public class CraftsStepResult {
/**
* 加热区id
*/
private String heatId;
/**
* 0 (未执行)1 (正在执行)2 (暂停执行)3 (停止执行)4(执行错误)6(执行完成)
*/
private Integer status;
/**
* 当前工艺执行的方法数组下标
*/
private Integer methodIndex;
}

30
src/main/java/com/qyft/ms/app/model/vo/OresCraftsListVO.java

@ -1,30 +0,0 @@
package com.qyft.ms.app.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qyft.ms.app.model.entity.Crafts;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "矿石工艺视图")
@Data
public class OresCraftsListVO {
@Schema(description = "矿石id")
private Long id;
@Schema(description = "矿石名称")
private String oresName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "该矿石下工艺列表")
private List<Crafts> craftsList;
}

35
src/main/java/com/qyft/ms/app/model/vo/TaskListVO.java

@ -1,35 +0,0 @@
package com.qyft.ms.app.model.vo;
import com.qyft.ms.app.model.entity.TaskSteps;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = false)
@Data
public class TaskListVO {
@Schema(description = "实验id")
private Long id;
@Schema(description = "实验名称")
private String name;
@NotBlank
@Schema(description = "开始时间")
private String startTime;
@Schema(description = "创建人")
private Long createUser;
@Schema(description = "结束时间")
private String endTime;
@Schema(description = "状态 1 执行中 2 执行完毕")
private Integer status;
@Schema(description = "实验步骤")
private List<TaskSteps> steps;
}

13
src/main/java/com/qyft/ms/app/service/CMDService.java

@ -4,13 +4,13 @@ import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.constant.WebSocketMessageType;
import com.qyft.ms.app.common.result.CMDResultCode;
import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
import com.qyft.ms.device.service.ICtrlFuncService;
import com.qyft.ms.app.model.form.CMDForm;
import com.qyft.ms.app.model.vo.ExecutionResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
@ -20,7 +20,6 @@ import java.util.function.Supplier;
public class CMDService {
private final WebSocketService webSocketService;
private final ICtrlFuncService ctrlFuncService;
CMDForm form;
private void run(List<Supplier<Boolean>> cmdList) {
@ -45,14 +44,8 @@ public class CMDService {
}
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;
}
}
List<Supplier<Boolean>> cmdList = new ArrayList<>();
new Thread(() -> run(cmdList)).start();
return false;
}

93
src/main/java/com/qyft/ms/device/controller/DeviceCtrlController.java

@ -1,93 +0,0 @@
package com.qyft.ms.device.controller;
import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
import com.qyft.ms.device.model.entity.CtrlFunc;
import com.qyft.ms.device.model.form.CtrlFuncForm;
import com.qyft.ms.device.model.vo.DeviceCtrlFuncVO;
import com.qyft.ms.device.service.ICtrlFuncService;
import com.qyft.ms.system.common.result.Result;
import com.qyft.ms.system.common.result.ResultCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "设备控制")
@RestController
@RequestMapping("/api/device")
@RequiredArgsConstructor
@Slf4j
public class DeviceCtrlController {
private final ICtrlFuncService ctrlFuncService;
@Operation(summary = "获取所有设备控制方法步骤")
@GetMapping("/ctrl/step")
public Result<List<DeviceCtrlFuncCMD>> getAllCtrlFuncStep() {
List<DeviceCtrlFuncCMD> ctrlFuncList = ctrlFuncService.findAllStepCMD();
return Result.success(ctrlFuncList);
}
@Operation(summary = "获取所有设备控制方法")
@GetMapping("/ctrl")
public Result<List<CtrlFunc>> getAllCtrlFunc() {
List<CtrlFunc> ctrlFuncList = ctrlFuncService.findAll();
return Result.success(ctrlFuncList);
}
@Operation(summary = "根据id获取设备控制方法与步骤")
@GetMapping("/ctrl/{id}")
public Result<DeviceCtrlFuncVO> getById(@PathVariable Long id) {
DeviceCtrlFuncVO ctrlFuncVO = ctrlFuncService.findVOById(id);
return Result.success(ctrlFuncVO);
}
@Operation(summary = "添加设备控制方法与步骤")
@PostMapping("/ctrl")
public Result<String> addCtrlFunc(@RequestBody CtrlFuncForm ctrlFuncForm) {
long count = ctrlFuncService.countFuncCmdByFuncCmd(ctrlFuncForm.getFuncCmd());
if (count > 0) {
return Result.failed(ResultCode.DATA_ALREADY_EXISTS);
}
boolean isSuccess = ctrlFuncService.addCtrlFunc(ctrlFuncForm);
if (isSuccess) {
return Result.success();
}
return Result.failed();
}
@Operation(summary = "更新设备控制方法与步骤")
@PutMapping("/ctrl/{id}")
public Result<String> updateCtrlFunc(@PathVariable Long id, @RequestBody CtrlFuncForm ctrlFuncForm) {
CtrlFunc currentCtrlFunc = ctrlFuncService.getById(id);
if (currentCtrlFunc != null && !currentCtrlFunc.getFuncCmd().equals(ctrlFuncForm.getFuncCmd())) {
//改了指令需要判断指令是否重复
long count = ctrlFuncService.countFuncCmdByFuncCmd(ctrlFuncForm.getFuncCmd());
if (count > 0) {
return Result.failed(ResultCode.DATA_ALREADY_EXISTS);
}
}
boolean isSuccess = ctrlFuncService.updateCtrlFunc(id, ctrlFuncForm);
if (isSuccess) {
return Result.success();
}
return Result.failed();
}
@Operation(summary = "删除设备控制方法")
@DeleteMapping("/ctrl/{ids}")
public Result<String> deleteCtrlFunc(@Parameter(description = "设备控制方法ID,多个以英文逗号(,)分割") @PathVariable String ids) {
boolean isSuccess = ctrlFuncService.deleteCtrlFunc(ids);
if (isSuccess) {
return Result.success();
}
return Result.failed();
}
}

14
src/main/java/com/qyft/ms/device/controller/TestController.java

@ -1,8 +1,8 @@
package com.qyft.ms.device.controller;
import com.qyft.ms.device.model.bo.DeviceStatus;
import com.qyft.ms.device.service.DeviceTcpCMDService;
import com.qyft.ms.device.service.DeviceStatusService;
import com.qyft.ms.device.service.DeviceTcpCMDService;
import com.qyft.ms.system.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -10,7 +10,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "测试")
@ -29,15 +28,4 @@ public class TestController {
return Result.success(deviceStatus);
}
@Operation(summary = "触发测试报警")
@GetMapping("/alarmTest")
public Result<DeviceStatus> alarmTest(@RequestParam String code, @RequestParam String msg, @RequestParam String module) {
boolean success = deviceTcpCMDService.alarmTest(code, msg, module);
if (success) {
return Result.success();
} else {
return Result.failed("触发测试报警失败");
}
}
}

11
src/main/java/com/qyft/ms/device/mapper/CtrlFuncMapper.java

@ -1,11 +0,0 @@
package com.qyft.ms.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qyft.ms.device.model.entity.CtrlFunc;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CtrlFuncMapper extends BaseMapper<CtrlFunc> {
}

11
src/main/java/com/qyft/ms/device/mapper/CtrlFuncStepMapper.java

@ -1,11 +0,0 @@
package com.qyft.ms.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qyft.ms.device.model.entity.CtrlFuncStep;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CtrlFuncStepMapper extends BaseMapper<CtrlFuncStep> {
}

28
src/main/java/com/qyft/ms/device/model/bo/DeviceOperationalStatus.java

@ -3,36 +3,8 @@ package com.qyft.ms.device.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Schema(description = "设备业务操作状态")
@Data
public class DeviceOperationalStatus {
@Schema(description = "托盘列表")
private List<Tray> trayList = new ArrayList<>();
/**
* 托盘
*/
@Data
static class Tray {
@Schema(description = "所在加热区id")
private Long heatId;
@Schema(description = "是否在加液区")
private boolean isSolutionArea;
@Schema(description = "试管列表")
private List<Tube> tubeList;
}
/**
* 试管
*/
@Data
static class Tube {
@Schema(description = "试管编号")
private Integer tubeNum;
@Schema(description = "试管内是否有样品")
private boolean isSample;
}
}

127
src/main/java/com/qyft/ms/device/model/bo/DeviceStatus.java

@ -3,8 +3,6 @@ package com.qyft.ms.device.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 设备当前状态
*/
@ -12,129 +10,4 @@ import java.util.List;
@Data
public class DeviceStatus {
@Schema(description = "是否是急停状态,true为急停")
private Boolean emergencyStop;
@Schema(description = "门状态,true为开启状态,false为关闭状态")
private Boolean doorStatus;
@Schema(description = "导轨机械臂状态")
private RailArm railArm;
@Schema(description = "加液操作区属性")
private LiquidArea liquidArea;
@Schema(description = "加热操作区属性")
private List<HeatArea> heatArea;
@Schema(description = "碱容器状态")
private LiquidBucket alkaliBucket;
/**
* 导轨机械臂属性
*/
@Data
public static class RailArm {
@Schema(description = "当前所在x坐标")
private Integer x;
@Schema(description = "当前所在y坐标")
private Integer y;
@Schema(description = "当前所在z坐标")
private Integer z;
@Schema(description = "当前轴1角度")
private Double joint1;
@Schema(description = "当前轴2角度")
private Double joint2;
@Schema(description = "当前机械臂(轴3)上下移动距离")
private Integer distance;
@Schema(description = "当前导轨移动距离")
private Double railDistance;
@Schema(description = "当前夹爪移动距离")
private Double clawDistance;
@Schema(description = "夹爪状态,true为张开状态,false为闭合状态")
private Boolean clawStatus;
@Schema(description = "导轨是否在原点,true为在原点")
private Boolean isZeroPos;
@Schema(description = "导轨是否在限位点,true为在限位点")
private Boolean isLimitPos;
}
/**
* 加液操作区属性
*/
@Data
public static class LiquidArea {
@Schema(description = "加液机械臂状态")
private LiquidArm liquidArm;
@Schema(description = "是否正在摇匀,true为正在摇匀,false为停止摇匀")
private Boolean isShaking;
@Schema(description = "是否存在托盘,true为存在托盘,false为无托盘")
private Boolean liquidTray;
@Schema(description = "溶液容器状态")
private List<LiquidBucket> solutionBucket;
}
/**
* 加热操作区属性
*/
@Data
public static class HeatArea {
@Schema(description = "加热器设备id")
private String hardwareId;
@Schema(description = "托盘状态,0为无托盘,1为有托盘,2为托盘抬起")
private Integer trayStatus;
@Schema(description = "是否正在加热,true为正在加热,false为未加热")
private Boolean isHeating;
@Schema(description = "拍子状态,true为存在拍子,false无拍子")
private Boolean capStatus;
@Schema(description = "拍子密封状态,true为已密封,false为未密封")
private Boolean isSealed;
@Schema(description = "加热器当前温度")
private Double temperature;
}
/**
* 加液机械臂属性
*/
@Data
public static class LiquidArm {
@Schema(description = "当前所在x坐标")
private Integer x;
@Schema(description = "当前所在y坐标")
private Integer y;
@Schema(description = "当前所在z坐标")
private Integer z;
@Schema(description = "当前轴1角度")
private Double joint1;
@Schema(description = "当前轴2角度")
private Double joint2;
@Schema(description = "加液泵状态")
private List<Pump> pump;
}
/**
* 泵属性
*/
@Data
public static class Pump {
@Schema(description = "加液泵id")
private String pumpId;
@Schema(description = "是否正在加液,true正在加液,false未运行")
private Integer isPumping;
}
@Data
public static class LiquidBucket {
@Schema(description = "容器是否为空,true为空,false不为空")
private Boolean isEmpty;
@Schema(description = "容器是否为满,true为满,false不满")
private Boolean isFull;
}
}

1
src/main/java/com/qyft/ms/device/service/DeviceStatusService.java

@ -19,7 +19,6 @@ public class DeviceStatusService {
private final DeviceStatus deviceStatus = new DeviceStatus();
/**
* 设备业务状态
* -- GETTER --
* 更新设备业务操作状态
*/
@Getter

166
src/main/java/com/qyft/ms/device/service/DeviceStepService.java

@ -1,166 +0,0 @@
package com.qyft.ms.device.service;
import com.qyft.ms.app.model.bo.TubeSol;
import com.qyft.ms.app.service.CMDService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 设备步骤操作
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class DeviceStepService {
CMDService cmdService;
/**
* 抬起托盘
*
* @param heatId 加热区id
*/
public boolean upTray(String heatId) {
// Map<String, Object> params = Map.of("heatId", heatId);
// List<Supplier<Boolean>> cmdList = cmdService.upTray(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 降下托盘
*
* @param heatId 加热区id
*/
public boolean downTray(String heatId) {
// Map<String, Object> params = Map.of("heatId", heatId);
// List<Supplier<Boolean>> cmdList = cmdService.downTray(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 添加溶液
*
* @param tubeSolList 需要添加溶液的试管与溶液
*/
public boolean addLiquid(List<TubeSol> tubeSolList) {
// for (TubeSol tubeSol : tubeSolList) {
// Map<String, Object> params = Map.of("tubeNum", tubeSol.getTubeNum(), "solutionId", tubeSol.getSolId(), "volume", tubeSol.getVolume());
// List<Supplier<Boolean>> cmdList = cmdService.downTray(params);
// boolean result = cmdList.stream().allMatch(Supplier::get);
// if (!result) {
// return false;
// }
// }
return true;
}
/**
* 将指定加热区的托盘移至加液区
*
* @param heatId 加热区id
*/
public boolean moveToSol(String heatId) {
// Map<String, Object> params = Map.of("heatId", heatId);
// List<Supplier<Boolean>> cmdList = cmdService.moveToActionArea(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 移至加热
*
* @param heatId 加热区id
*/
public boolean moveToHeat(String heatId) {
// Map<String, Object> params = Map.of("heatId", heatId);
// List<Supplier<Boolean>> cmdList = cmdService.moveToHeatArea(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 摇匀
*
* @param second 摇匀时间
*/
public boolean shaking(int second) {
// Map<String, Object> params = Map.of();
// List<Supplier<Boolean>> cmdList = cmdService.startShakeUp(params);
// boolean result = cmdList.stream().allMatch(Supplier::get);
// if (result) {
// this.delay(second);
// cmdList = cmdService.stopShakeUp(params);
// result = cmdList.stream().allMatch(Supplier::get);
// return result;
// }
// return false;
return true;
}
/**
* 开始加热
*
* @param heatId 加热区id
* @param temperature 目标温度
*/
public boolean startHeating(String heatId, double temperature) {
// Map<String, Object> params = Map.of("heatId", heatId, "temperature", temperature);
// List<Supplier<Boolean>> cmdList = cmdService.startHeat(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 停止加热
*
* @param heatId 加热区id
*/
public boolean stopHeating(String heatId) {
// Map<String, Object> params = Map.of("heatId", heatId);
// List<Supplier<Boolean>> cmdList = cmdService.stopHeat(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
/**
* 停止加热
*/
public boolean takePhoto() {
// Map<String, Object> params = Map.of();
// List<Supplier<Boolean>> cmdList = cmdService.takePhoto(params);
// return cmdList.stream().allMatch(Supplier::get);
return true;
}
//移至异常
public boolean moveToExc() {
return true;
}
//移除异常
public boolean moveOutToExc() {
return true;
}
/**
* 等待
*
* @param second
*/
public boolean delay(int second) {
try {
Thread.sleep(second * 1000L);
return true;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return false;
}
}

28
src/main/java/com/qyft/ms/device/service/ICtrlFuncService.java

@ -1,28 +0,0 @@
package com.qyft.ms.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
import com.qyft.ms.device.model.entity.CtrlFunc;
import com.qyft.ms.device.model.form.CtrlFuncForm;
import com.qyft.ms.device.model.vo.DeviceCtrlFuncVO;
import java.util.List;
public interface ICtrlFuncService extends IService<CtrlFunc> {
List<DeviceCtrlFuncCMD> findAllStepCMD();
List<CtrlFunc> findAll();
DeviceCtrlFuncVO findVOById(Long id);
long countFuncCmdByFuncCmd(String funcCmd);
boolean addCtrlFunc(CtrlFuncForm ctrlFuncForm);
boolean updateCtrlFunc(Long id, CtrlFuncForm ctrlFuncForm);
boolean deleteCtrlFunc(String idsStr);
}

12
src/main/java/com/qyft/ms/device/service/ICtrlFuncStepService.java

@ -1,12 +0,0 @@
package com.qyft.ms.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qyft.ms.device.model.entity.CtrlFuncStep;
import java.util.List;
public interface ICtrlFuncStepService extends IService<CtrlFuncStep> {
List<CtrlFuncStep> selectListByFuncCmd(String funcCmd);
}

132
src/main/java/com/qyft/ms/device/service/impl/CtrlFuncServiceImpl.java

@ -1,132 +0,0 @@
package com.qyft.ms.device.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qyft.ms.device.mapper.CtrlFuncMapper;
import com.qyft.ms.device.model.bo.DeviceCtrlFuncCMD;
import com.qyft.ms.device.model.entity.CtrlFunc;
import com.qyft.ms.device.model.entity.CtrlFuncStep;
import com.qyft.ms.device.model.form.CtrlFuncForm;
import com.qyft.ms.device.model.vo.DeviceCtrlFuncVO;
import com.qyft.ms.device.service.ICtrlFuncService;
import com.qyft.ms.device.service.ICtrlFuncStepService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@Service
public class CtrlFuncServiceImpl extends ServiceImpl<CtrlFuncMapper, CtrlFunc> implements ICtrlFuncService {
private final ICtrlFuncStepService ctrlFuncStepService;
private static final List<DeviceCtrlFuncCMD> ctrlFuncDeviceCMDList = new ArrayList<>();
static {
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开门", "openDoor", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("关门", "closeDoor", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂运动到指定点位", "moveRailArmToPoint", "{\"x\":0,\"y\":0,\"z\":0}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂相对运动", "moveRailArmRelative", "{\"x\":0,\"y\":0,\"z\":0}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至指定加热区上方", "moveToHeatArea", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至加液区上方", "moveToActionArea", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至拍子存放区上方", "moveToCapArea", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("打开导轨机械臂夹爪", "openClaw", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("收合导轨机械臂夹爪", "closeClaw", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区密封拍子", "sealLidOn", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区解除密封拍子", "sealLidOff", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("拍子存放区高度向上一个级别", "capHeightUp", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("拍子存放区高度向下移动一个级别", "capHeightDown", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区开始加热", "startHeating", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区停止加热", "stopHeating", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区抬起托盘", "raiseTray", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区放下托盘", "lowerTray", "{\"heatId\":2}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("依次添加溶液", "addLiquid", "{\"tubeSolList\":[{\"tubeNum\":1,\"solId\":15,\"volume\":20}]}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开始摇匀", "startShaking", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("停止摇匀", "stopShaking", "{}"));
ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("拍照", "takePhoto", "{}"));
}
@Override
public List<DeviceCtrlFuncCMD> findAllStepCMD() {
return ctrlFuncDeviceCMDList;
}
@Override
public List<CtrlFunc> findAll() {
return this.baseMapper.selectList(null);
}
@Override
public DeviceCtrlFuncVO findVOById(Long id) {
CtrlFunc ctrlFunc = this.getById(id);
List<CtrlFuncStep> ctrlFuncStepList = ctrlFuncStepService.selectListByFuncCmd(ctrlFunc.getFuncCmd());
DeviceCtrlFuncVO ctrlFuncVO = new DeviceCtrlFuncVO();
ctrlFuncVO.setId(ctrlFunc.getId());
ctrlFuncVO.setName(ctrlFunc.getName());
ctrlFuncVO.setFuncCmd(ctrlFunc.getFuncCmd());
ctrlFuncVO.setFuncCmd(ctrlFunc.getFuncCmd());
ctrlFuncVO.setCtrlFuncStepList(ctrlFuncStepList);
return ctrlFuncVO;
}
@Override
public long countFuncCmdByFuncCmd(String funcCmd) {
return this.count(new LambdaQueryWrapper<CtrlFunc>().eq(CtrlFunc::getFuncCmd, funcCmd));
}
@Override
public boolean addCtrlFunc(CtrlFuncForm ctrlFuncForm) {
CtrlFunc ctrlFunc = new CtrlFunc();
ctrlFunc.setFuncCmd(ctrlFuncForm.getFuncCmd());
ctrlFunc.setName(ctrlFuncForm.getName());
if (this.save(ctrlFunc)) {
return reSaveCtrlFunc(ctrlFuncForm, ctrlFunc);
}
return false;
}
@Override
public boolean updateCtrlFunc(Long id, CtrlFuncForm ctrlFuncForm) {
CtrlFunc ctrlFunc = this.getById(id);
if (ctrlFunc != null) {
ctrlFunc.setFuncCmd(ctrlFuncForm.getFuncCmd());
ctrlFunc.setName(ctrlFuncForm.getName());
if (this.updateById(ctrlFunc)) {
return reSaveCtrlFunc(ctrlFuncForm, ctrlFunc);
}
}
return false;
}
@Override
public boolean deleteCtrlFunc(String idsStr) {
List<Long> ids = Arrays.stream(idsStr.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
for (Long id : ids) {
String funcCmd = this.getById(id).getFuncCmd();
ctrlFuncStepService.remove(new LambdaQueryWrapper<CtrlFuncStep>().eq(CtrlFuncStep::getFuncCmd, funcCmd));
}
return this.removeByIds(ids);
}
private boolean reSaveCtrlFunc(CtrlFuncForm ctrlFuncForm, CtrlFunc ctrlFunc) {
ctrlFuncStepService.remove(new LambdaQueryWrapper<CtrlFuncStep>().eq(CtrlFuncStep::getFuncCmd, ctrlFunc.getFuncCmd()));
List<CtrlFuncForm.CtrlFuncStepForm> ctrlFuncStepFormList = ctrlFuncForm.getCtrlFuncStepList();
List<CtrlFuncStep> ctrlFuncStepList = ctrlFuncStepFormList.stream()
.map(ctrlFuncStepForm -> {
CtrlFuncStep ctrlFuncStep = new CtrlFuncStep();
ctrlFuncStep.setFuncCmd(ctrlFunc.getFuncCmd());
ctrlFuncStep.setDeviceCmd(ctrlFuncStepForm.getDeviceCmd());
ctrlFuncStep.setRemarks(ctrlFuncStepForm.getRemarks());
ctrlFuncStep.setParams(JSONUtil.toJsonStr(ctrlFuncStepForm.getParams()));
return ctrlFuncStep;
}).toList();
return ctrlFuncStepService.saveBatch(ctrlFuncStepList);
}
}

20
src/main/java/com/qyft/ms/device/service/impl/CtrlFuncStepServiceImpl.java

@ -1,20 +0,0 @@
package com.qyft.ms.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qyft.ms.device.mapper.CtrlFuncStepMapper;
import com.qyft.ms.device.model.entity.CtrlFuncStep;
import com.qyft.ms.device.service.ICtrlFuncStepService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CtrlFuncStepServiceImpl extends ServiceImpl<CtrlFuncStepMapper, CtrlFuncStep> implements ICtrlFuncStepService {
@Override
public List<CtrlFuncStep> selectListByFuncCmd(String funcCmd) {
return this.list(new LambdaQueryWrapper<CtrlFuncStep>().eq(CtrlFuncStep::getFuncCmd, funcCmd));
}
}

5
src/main/resources/mapper/device/CtrlFuncMapper.xml

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qyft.ms.device.mapper.CtrlFuncMapper">
</mapper>

5
src/main/resources/mapper/device/CtrlFuncStepMapper.xml

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qyft.ms.device.mapper.CtrlFuncStepMapper">
</mapper>
Loading…
Cancel
Save