Browse Source

现场代码同步

master
白凤吉 3 months ago
parent
commit
ab11cb7267
  1. 3
      src/main/java/com/iflytop/gd/app/cmd/FanStartCommand.java
  2. 3
      src/main/java/com/iflytop/gd/app/cmd/FanStopCommand.java
  3. 8
      src/main/java/com/iflytop/gd/app/controller/AuthController.java
  4. 42
      src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java
  5. 46
      src/main/java/com/iflytop/gd/app/controller/TasksController.java
  6. 1
      src/main/java/com/iflytop/gd/app/controller/UserController.java
  7. 6
      src/main/java/com/iflytop/gd/app/core/device/DeviceState.java
  8. 4
      src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java
  9. 1
      src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java
  10. 7
      src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java
  11. 13
      src/main/java/com/iflytop/gd/app/model/dto/GetAllTasksDTO.java
  12. 13
      src/main/java/com/iflytop/gd/app/model/entity/Tasks.java
  13. 2
      src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java
  14. 35
      src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java
  15. 16
      src/main/java/com/iflytop/gd/app/model/vo/TaskStepsVO.java
  16. 39
      src/main/java/com/iflytop/gd/app/service/DeviceInitService.java
  17. 17
      src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java
  18. 34
      src/main/java/com/iflytop/gd/app/service/DeviceStateService.java
  19. 2
      src/main/java/com/iflytop/gd/app/service/OresService.java
  20. 8
      src/main/java/com/iflytop/gd/app/service/TaskStepsService.java
  21. 123
      src/main/java/com/iflytop/gd/app/service/TasksService.java
  22. 7
      src/main/java/com/iflytop/gd/app/service/UserService.java
  23. 4
      src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java
  24. 5
      src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java
  25. 8
      src/main/java/com/iflytop/gd/hardware/controller/ServoController.java
  26. 23
      src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java
  27. 3
      src/main/resources/sql/init.sql

3
src/main/java/com/iflytop/gd/app/cmd/FanStartCommand.java

@ -4,6 +4,7 @@ import cn.hutool.json.JSONArray;
import com.iflytop.gd.app.core.BaseCommandHandler; import com.iflytop.gd.app.core.BaseCommandHandler;
import com.iflytop.gd.app.model.dto.CmdDTO; import com.iflytop.gd.app.model.dto.CmdDTO;
import com.iflytop.gd.app.service.DeviceCommandUtilService; import com.iflytop.gd.app.service.DeviceCommandUtilService;
import com.iflytop.gd.app.service.DeviceStateService;
import com.iflytop.gd.common.annotation.CommandMapping; import com.iflytop.gd.common.annotation.CommandMapping;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,6 +22,7 @@ import java.util.concurrent.CompletableFuture;
@CommandMapping("fan_start") @CommandMapping("fan_start")
public class FanStartCommand extends BaseCommandHandler { public class FanStartCommand extends BaseCommandHandler {
private final DeviceCommandUtilService deviceCommandUtilService; private final DeviceCommandUtilService deviceCommandUtilService;
private final DeviceStateService deviceStateService;
@Override @Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) { public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
@ -30,6 +32,7 @@ public class FanStartCommand extends BaseCommandHandler {
String heatId = heatIdJsonArray.getStr(i); String heatId = heatIdJsonArray.getStr(i);
HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId); HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId);
deviceCommandUtilService.fanStart(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId); deviceCommandUtilService.fanStart(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId);
deviceStateService.setHeatModuleStateFanOpen(heatModuleId, true);
} }
}); });
} }

3
src/main/java/com/iflytop/gd/app/cmd/FanStopCommand.java

@ -4,6 +4,7 @@ import cn.hutool.json.JSONArray;
import com.iflytop.gd.app.core.BaseCommandHandler; import com.iflytop.gd.app.core.BaseCommandHandler;
import com.iflytop.gd.app.model.dto.CmdDTO; import com.iflytop.gd.app.model.dto.CmdDTO;
import com.iflytop.gd.app.service.DeviceCommandUtilService; import com.iflytop.gd.app.service.DeviceCommandUtilService;
import com.iflytop.gd.app.service.DeviceStateService;
import com.iflytop.gd.common.annotation.CommandMapping; import com.iflytop.gd.common.annotation.CommandMapping;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,6 +22,7 @@ import java.util.concurrent.CompletableFuture;
@CommandMapping("fan_stop") @CommandMapping("fan_stop")
public class FanStopCommand extends BaseCommandHandler { public class FanStopCommand extends BaseCommandHandler {
private final DeviceCommandUtilService deviceCommandUtilService; private final DeviceCommandUtilService deviceCommandUtilService;
private final DeviceStateService deviceStateService;
@Override @Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) { public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
@ -30,6 +32,7 @@ public class FanStopCommand extends BaseCommandHandler {
String heatId = heatIdJsonArray.getStr(i); String heatId = heatIdJsonArray.getStr(i);
HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId); HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId);
deviceCommandUtilService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId); deviceCommandUtilService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId);
deviceStateService.setHeatModuleStateFanOpen(heatModuleId, false);
} }
}); });
} }

8
src/main/java/com/iflytop/gd/app/controller/AuthController.java

@ -3,6 +3,7 @@ package com.iflytop.gd.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.iflytop.gd.app.model.dto.LoginDTO; import com.iflytop.gd.app.model.dto.LoginDTO;
import com.iflytop.gd.app.model.entity.User; import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.app.service.DeviceStateService;
import com.iflytop.gd.app.service.UserService; import com.iflytop.gd.app.service.UserService;
import com.iflytop.gd.common.enums.data.Deleted; import com.iflytop.gd.common.enums.data.Deleted;
import com.iflytop.gd.common.result.Result; import com.iflytop.gd.common.result.Result;
@ -27,13 +28,14 @@ import java.util.Objects;
public class AuthController { public class AuthController {
private final UserService userService; private final UserService userService;
private final DeviceStateService deviceStateService;
@Operation(summary = "账号密码登录") @Operation(summary = "账号密码登录")
@PostMapping("/login") @PostMapping("/login")
public Result<User> login(@Valid @RequestBody LoginDTO loginDTO) { public Result<User> login(@Valid @RequestBody LoginDTO loginDTO) {
User user = userService.getOne(new LambdaQueryWrapper<>(User.class).eq(User::getUsername, loginDTO.getUsername())); User user = userService.getOne(new LambdaQueryWrapper<>(User.class).eq(User::getUsername, loginDTO.getUsername()));
if (user != null && !Objects.equals(user.getDeleted(), Deleted.ENABLE) && user.getPassword().equals(loginDTO.getPassword())) { if (user != null && !Objects.equals(user.getDeleted(), Deleted.ENABLE) && user.getPassword().equals(loginDTO.getPassword())) {
userService.setCurrentUser(user);
deviceStateService.setCurrentUser(user);
user.setPassword(null); user.setPassword(null);
return Result.success(user); return Result.success(user);
} }
@ -43,13 +45,13 @@ public class AuthController {
@Operation(summary = "用户登出") @Operation(summary = "用户登出")
@PostMapping("/logout") @PostMapping("/logout")
public Result<String> logout() { public Result<String> logout() {
userService.clearCurrentUser();
deviceStateService.setCurrentUser(null);
return Result.success(); return Result.success();
} }
@Operation(summary = "获取当前登录用户") @Operation(summary = "获取当前登录用户")
@GetMapping("/current") @GetMapping("/current")
public Result<User> current() { public Result<User> current() {
return Result.success(userService.getCurrentUser());
return Result.success(deviceStateService.getDeviceState().getCurrentUser());
} }
} }

42
src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java

@ -12,8 +12,13 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -74,4 +79,41 @@ public class DeviceParamController {
return Result.failed(); return Result.failed();
} }
@Operation(summary = "上传csv文件覆盖数据库配置")
@PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Result<String> uploadFile(@RequestPart("file") MultipartFile file) {
//文件后缀检查
if (!file.getOriginalFilename().endsWith(".csv")) {
return Result.failed("<UNK>.csv<UNK>");
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(file.getInputStream(), StandardCharsets.UTF_8))) {
String line;
//是否含有表头
boolean isHeader = true;
List<DeviceParamConfig> deviceParamConfigList = new ArrayList<>();
while ((line = reader.readLine()) != null) {
if (isHeader) {
isHeader = false;
continue; // 跳过CSV文件的标题行
}
String[] data = line.split(",");
if (data.length >= 4) { // 假设CSV文件至少包含4列
DeviceParamConfig deviceParamConfig = new DeviceParamConfig();
deviceParamConfig.setId(Long.valueOf(data[0]));
deviceParamConfig.setMid(String.valueOf(data[1]));
deviceParamConfig.setRegIndex(String.valueOf(data[2]));
deviceParamConfig.setRegVal(Integer.valueOf(data[3]));
deviceParamConfigService.save(deviceParamConfig);
deviceParamConfigList.add(deviceParamConfig);
}
}
deviceParamConfigService.saveOrUpdateBatch(deviceParamConfigList);
} catch (IOException e) {
log.error("csv文件导入数据库失败:{}", e.getMessage());
throw new RuntimeException(e);
}
return Result.success();
}
} }

46
src/main/java/com/iflytop/gd/app/controller/TasksController.java

@ -1,12 +1,13 @@
package com.iflytop.gd.app.controller; package com.iflytop.gd.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iflytop.gd.app.model.dto.StopTaskDTO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iflytop.gd.app.model.dto.GetAllTasksDTO;
import com.iflytop.gd.app.model.dto.TaskDTO; import com.iflytop.gd.app.model.dto.TaskDTO;
import com.iflytop.gd.app.model.entity.Tasks; import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.vo.TaskListVO;
import com.iflytop.gd.app.model.vo.TaskStepsVO;
import com.iflytop.gd.app.service.TasksService; import com.iflytop.gd.app.service.TasksService;
import com.iflytop.gd.common.base.BasePageQuery;
import com.iflytop.gd.common.result.PageResult; import com.iflytop.gd.common.result.PageResult;
import com.iflytop.gd.common.result.Result; import com.iflytop.gd.common.result.Result;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -26,51 +27,48 @@ public class TasksController {
@Operation(summary = "实验列表") @Operation(summary = "实验列表")
@GetMapping("/list") @GetMapping("/list")
public PageResult<TaskListVO> getAllTasks(BasePageQuery pageQuery) {
IPage<TaskListVO> result = tasksService.getPage(pageQuery);
public PageResult<Tasks> list(GetAllTasksDTO getAllTasksDTO) {
IPage<Tasks> result = tasksService.page(new Page<>(getAllTasksDTO.getPageNum(), getAllTasksDTO.getPageSize()), new LambdaQueryWrapper<Tasks>().like(Tasks::getName, "%" + getAllTasksDTO.getName() + "%"));
return PageResult.success(result); return PageResult.success(result);
} }
@Operation(summary = "实验详情") @Operation(summary = "实验详情")
@GetMapping("/{id}") @GetMapping("/{id}")
public Result<TaskListVO> detail(@PathVariable Long id) {
return Result.success(tasksService.selectById(id));
public Result<TaskStepsVO> detail(@PathVariable Long id) {
return Result.success(tasksService.detail(id));
} }
@Operation(summary = "获取正在进行的实验") @Operation(summary = "获取正在进行的实验")
@GetMapping("/getIngTask")
public Result<Tasks> getIngTask() {
return Result.success(tasksService.getIngTask());
@GetMapping("/current")
public Result<Tasks> getCurrent() {
return Result.success(tasksService.getCurrent());
} }
@Operation(summary = "添加新实验")
@Operation(summary = "开始新实验")
@PostMapping("/") @PostMapping("/")
public Result<Tasks> addTask(@RequestBody TaskDTO dto) {
if (tasksService.getIngTask() != null) {
public Result<Tasks> start(@RequestBody TaskDTO dto) {
if (tasksService.getCurrent() != null) {
return Result.failed("存在正在运行的实验,请先停止"); return Result.failed("存在正在运行的实验,请先停止");
} }
return Result.success(tasksService.addTask(dto.getName()));
return Result.success(tasksService.start(dto.getName()));
} }
@Operation(summary = "更新实验") @Operation(summary = "更新实验")
@PutMapping("/") @PutMapping("/")
public Result<Boolean> updateTask(@RequestBody Tasks task) {
public Result<?> updateTask(@RequestBody Tasks task) {
return Result.success(tasksService.updateById(task)); return Result.success(tasksService.updateById(task));
} }
@Operation(summary = "删除实验") @Operation(summary = "删除实验")
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public Result<Integer> deleteTask(@Parameter(description = "实验ID,多个以英文逗号(,)分割") @PathVariable String ids) {
return Result.success(tasksService.removeByIds(ids));
public Result<?> deleteTask(@Parameter(description = "ID,多个以英文逗号(,)分割") @PathVariable String ids) {
return Result.success(tasksService.deleteTasks(ids));
} }
@Operation(summary = "停止实验")
@Operation(summary = "停止当前实验")
@PostMapping("/stop") @PostMapping("/stop")
public Result<Integer> stopTask(@RequestBody StopTaskDTO dto) {
if (dto.getTaskId() != null) {
return Result.success(tasksService.stopTask(dto.getTaskId()));
}
return Result.failed("停止实验失败");
public Result<Integer> stop() {
tasksService.stop();
return Result.success();
} }
} }

1
src/main/java/com/iflytop/gd/app/controller/UserController.java

@ -3,7 +3,6 @@ package com.iflytop.gd.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iflytop.gd.app.model.entity.Ores;
import com.iflytop.gd.app.model.entity.User; import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.app.service.UserService; import com.iflytop.gd.app.service.UserService;
import com.iflytop.gd.common.base.BasePageQuery; import com.iflytop.gd.common.base.BasePageQuery;

6
src/main/java/com/iflytop/gd/app/core/device/DeviceState.java

@ -1,5 +1,7 @@
package com.iflytop.gd.app.core.device; package com.iflytop.gd.app.core.device;
import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.entity.User;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@ -27,4 +29,8 @@ public class DeviceState {
private boolean selfTest = false; private boolean selfTest = false;
@Schema(description = "是否是急停状态,true为急停") @Schema(description = "是否是急停状态,true为急停")
private boolean emergencyStop = false; private boolean emergencyStop = false;
@Schema(description = "当前登录用户")
private User currentUser;
@Schema(description = "当前实验")
private Tasks currentTasks;
} }

4
src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java

@ -26,10 +26,10 @@ public class HeatModuleState {
private boolean capExist = false; private boolean capExist = false;
@Schema(description = "加热器目标温度") @Schema(description = "加热器目标温度")
private double targetTemperature = 0.0;
private Double targetTemperature = null;
@Schema(description = "加热器当前温度") @Schema(description = "加热器当前温度")
private double temperature = 0.0;
private Double temperature = null;
public HeatModuleState(HeatModuleCode moduleCode) { public HeatModuleState(HeatModuleCode moduleCode) {
this.moduleCode = moduleCode; this.moduleCode = moduleCode;

1
src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java

@ -11,5 +11,4 @@ import java.util.List;
*/ */
@Mapper @Mapper
public interface TaskStepsMapper extends BaseMapper<TaskSteps> { public interface TaskStepsMapper extends BaseMapper<TaskSteps> {
List<TaskSteps> getTaskStepsByTaskId(Long taskId);
} }

7
src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java

@ -3,7 +3,6 @@ package com.iflytop.gd.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iflytop.gd.app.model.entity.Tasks; import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.vo.TaskListVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
@ -13,11 +12,5 @@ import java.util.List;
*/ */
@Mapper @Mapper
public interface TasksMapper extends BaseMapper<Tasks> { public interface TasksMapper extends BaseMapper<Tasks> {
Page<TaskListVO> selectPage(Page<TaskListVO> page);
TaskListVO selectById(Long id);
Integer removeByIds(List<Long> ids);
int stopTask(Long taskId);
} }

13
src/main/java/com/iflytop/gd/app/model/dto/GetAllTasksDTO.java

@ -0,0 +1,13 @@
package com.iflytop.gd.app.model.dto;
import com.iflytop.gd.common.base.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class GetAllTasksDTO extends BasePageQuery {
@Schema(description = "实验名称")
private String name;
}

13
src/main/java/com/iflytop/gd/app/model/entity/Tasks.java

@ -1,12 +1,15 @@
package com.iflytop.gd.app.model.entity; package com.iflytop.gd.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iflytop.gd.common.base.BaseEntity; import com.iflytop.gd.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Schema(description = "实验") @Schema(description = "实验")
@TableName("tasks") @TableName("tasks")
@ -19,14 +22,16 @@ public class Tasks extends BaseEntity {
@NotBlank @NotBlank
@Schema(description = "开始时间") @Schema(description = "开始时间")
private String startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@Schema(description = "结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
@Schema(description = "创建人") @Schema(description = "创建人")
private Long createUser; private Long createUser;
@Schema(description = "结束时间")
private String endTime;
@Schema(description = "状态 1 执行中 2 执行完毕") @Schema(description = "状态 1 执行中 2 执行完毕")
private Integer status; private Integer status;

2
src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java

@ -10,11 +10,13 @@ public class SetCraftsVO {
@Schema(description = "工艺名称") @Schema(description = "工艺名称")
private String craftsName; private String craftsName;
@Schema(description = "工艺名称") @Schema(description = "工艺名称")
private Long craftsId; private Long craftsId;
@Schema(description = "矿石名称") @Schema(description = "矿石名称")
private String oresName; private String oresName;
@Schema(description = "矿石ID") @Schema(description = "矿石ID")
private Long oresId; private Long oresId;
} }

35
src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java

@ -1,35 +0,0 @@
package com.iflytop.gd.app.model.vo;
import com.iflytop.gd.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;
}

16
src/main/java/com/iflytop/gd/app/model/vo/TaskStepsVO.java

@ -0,0 +1,16 @@
package com.iflytop.gd.app.model.vo;
import com.iflytop.gd.app.model.entity.TaskSteps;
import com.iflytop.gd.app.model.entity.Tasks;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = false)
@Data
public class TaskStepsVO extends Tasks {
@Schema(description = "实验步骤")
private List<TaskSteps> steps;
}

39
src/main/java/com/iflytop/gd/app/service/DeviceInitService.java

@ -5,6 +5,7 @@ import com.iflytop.gd.app.core.device.HeatModuleState;
import com.iflytop.gd.app.core.device.SolutionContainerState; import com.iflytop.gd.app.core.device.SolutionContainerState;
import com.iflytop.gd.app.model.bo.DeviceInitializationData; import com.iflytop.gd.app.model.bo.DeviceInitializationData;
import com.iflytop.gd.app.model.entity.Container; import com.iflytop.gd.app.model.entity.Container;
import com.iflytop.gd.app.model.entity.DeviceParamConfig;
import com.iflytop.gd.common.enums.ContainerCode; import com.iflytop.gd.common.enums.ContainerCode;
import com.iflytop.gd.common.enums.ContainerType; import com.iflytop.gd.common.enums.ContainerType;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
@ -50,6 +51,7 @@ public class DeviceInitService {
private final LeisaiServoDriver leisaiServoDriver; private final LeisaiServoDriver leisaiServoDriver;
private final ActionOvertimeConstant actionOvertimeConstant; private final ActionOvertimeConstant actionOvertimeConstant;
private final OutputIOCtrlDriver outputIOCtrlDriver; private final OutputIOCtrlDriver outputIOCtrlDriver;
private final DeviceParamConfigService deviceParamConfigService;
@PostConstruct @PostConstruct
public void init() { public void init() {
@ -86,7 +88,7 @@ public class DeviceInitService {
/** /**
* 设置各动作超时时间 * 设置各动作超时时间
*/ */
public void initOvertime(){
public void initOvertime() {
actionOvertimeConstant.pushNewConfig(StepMotorMId.DOOR_MOTOR_MID, CmdId.step_motor_easy_move_to_zero, 90 * 1000); actionOvertimeConstant.pushNewConfig(StepMotorMId.DOOR_MOTOR_MID, CmdId.step_motor_easy_move_to_zero, 90 * 1000);
actionOvertimeConstant.pushNewConfig(LeisaiServoMId.MainXSV, CmdId.step_motor_easy_move_to_zero, 300 * 1000); actionOvertimeConstant.pushNewConfig(LeisaiServoMId.MainXSV, CmdId.step_motor_easy_move_to_zero, 300 * 1000);
actionOvertimeConstant.pushNewConfig(LeisaiServoMId.MainYSV, CmdId.step_motor_easy_move_to_zero, 120 * 1000); actionOvertimeConstant.pushNewConfig(LeisaiServoMId.MainYSV, CmdId.step_motor_easy_move_to_zero, 120 * 1000);
@ -129,28 +131,23 @@ public class DeviceInitService {
if (deviceStateService.getDeviceState().isVirtual() || deviceStateService.getDeviceState().isInitComplete()) { if (deviceStateService.getDeviceState().isVirtual() || deviceStateService.getDeviceState().isInitComplete()) {
return; return;
} }
try {
// 使用 ClassPathResource 来从类路径加载 CSV 文件并使用 InputStream 读取
ClassPathResource resource = new ClassPathResource("init/zapp_sub_module_reg_initial_value.csv");
try (CSVReader reader = new CSVReader(new InputStreamReader(resource.getInputStream()))) {
reader.readNext(); // 跳过表头
String[] line;
while ((line = reader.readNext()) != null) {
DeviceInitializationData data = new DeviceInitializationData();
data.setId(Integer.parseInt(line[0]));
data.setMid(line[1]);
data.setRegIndex(line[2]);
data.setRegInitVal(Integer.parseInt(line[3]));
sendToDevice(data);
}
//从数据库中读取数据通过串口进行数据初始化
List<DeviceParamConfig> deviceParamConfigs = deviceParamConfigService.list();
for (DeviceParamConfig deviceParamConfig : deviceParamConfigs) {
DeviceInitializationData data = new DeviceInitializationData();
data.setId(Math.toIntExact(deviceParamConfig.getId()));
data.setMid(deviceParamConfig.getMid());
data.setRegIndex(deviceParamConfig.getRegIndex());
data.setRegInitVal(deviceParamConfig.getRegVal());
try {
sendToDevice(data);
} catch (Exception e) {
log.error("设备初始化写入参数失败,2秒后重试", e);
Thread.sleep(2000);
initDeviceSetData();
} }
} catch (Exception e) {
log.error("设备初始化写入参数失败,2秒后重试", e);
// 如果发生错误可以递归调用重试如果需要
Thread.sleep(2000);
initDeviceSetData();
} }
} }
public void sendToDevice(DeviceInitializationData data) throws Exception { public void sendToDevice(DeviceInitializationData data) throws Exception {

17
src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java

@ -1,6 +1,7 @@
package com.iflytop.gd.app.service; package com.iflytop.gd.app.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.gd.app.mapper.DeviceParamConfigMapper; import com.iflytop.gd.app.mapper.DeviceParamConfigMapper;
import com.iflytop.gd.app.model.entity.DeviceParamConfig; import com.iflytop.gd.app.model.entity.DeviceParamConfig;
@ -67,6 +68,22 @@ public class DeviceParamConfigService extends ServiceImpl<DeviceParamConfigMappe
} }
/** /**
* 根据模块标识和寄存器索引设置设备参数配置
*
* @param moduleId 模块枚举
* @param regIndex 寄存器索引
* @param regVal 寄存器值
* @return 唯一匹配的 DeviceParamConfig找不到返回 null
*/
public int setModuleAndReg(String moduleId, String regIndex, Integer regVal) {
return deviceParamConfigMapper.update(new LambdaUpdateWrapper<DeviceParamConfig>()
.eq(DeviceParamConfig::getMid, moduleId)
.eq(DeviceParamConfig::getRegIndex, regIndex)
.set(DeviceParamConfig::getRegVal, regVal));
}
/**
* 列出所有 ModuleId返回 VO 列表 * 列出所有 ModuleId返回 VO 列表
* *
* @return List<ModuleIdVO> * @return List<ModuleIdVO>

34
src/main/java/com/iflytop/gd/app/service/DeviceStateService.java

@ -2,6 +2,8 @@ package com.iflytop.gd.app.service;
import com.iflytop.gd.app.core.device.*; import com.iflytop.gd.app.core.device.*;
import com.iflytop.gd.app.core.listener.DeviceStateListener; import com.iflytop.gd.app.core.listener.DeviceStateListener;
import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.common.enums.ContainerCode; import com.iflytop.gd.common.enums.ContainerCode;
import com.iflytop.gd.common.enums.HeatModuleCode; import com.iflytop.gd.common.enums.HeatModuleCode;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -139,6 +141,20 @@ public class DeviceStateService {
support.firePropertyChange("setHeatModuleStateHeating", oldValue, heating); support.firePropertyChange("setHeatModuleStateHeating", oldValue, heating);
} }
public synchronized void setHeatModuleStateFanOpen(HeatModuleCode heatModuleId, boolean fanOpen) {
HeatModuleState heatModuleState = null;
for (HeatModuleState t : deviceState.getHeatModule()) {
if (heatModuleId.equals(t.getModuleCode())) {
heatModuleState = t;
break;
}
}
assert heatModuleState != null;
boolean oldValue = heatModuleState.isFanOpen();
heatModuleState.setFanOpen(fanOpen);
support.firePropertyChange("setHeatModuleStateFanOpen", oldValue, fanOpen);
}
public synchronized void setHeatModuleStateCapExist(HeatModuleCode heatModuleId, boolean capStatus) { public synchronized void setHeatModuleStateCapExist(HeatModuleCode heatModuleId, boolean capStatus) {
HeatModuleState heatModuleState = null; HeatModuleState heatModuleState = null;
for (HeatModuleState t : deviceState.getHeatModule()) { for (HeatModuleState t : deviceState.getHeatModule()) {
@ -162,7 +178,7 @@ public class DeviceStateService {
} }
} }
assert heatModuleState != null; assert heatModuleState != null;
double oldValue = heatModuleState.getTargetTemperature();
Double oldValue = heatModuleState.getTargetTemperature();
heatModuleState.setTargetTemperature(targetTemperature); heatModuleState.setTargetTemperature(targetTemperature);
support.firePropertyChange("setHeatModuleStateTargetTemperature", oldValue, targetTemperature); support.firePropertyChange("setHeatModuleStateTargetTemperature", oldValue, targetTemperature);
} }
@ -176,7 +192,7 @@ public class DeviceStateService {
} }
} }
assert heatModuleState != null; assert heatModuleState != null;
double oldValue = heatModuleState.getTemperature();
Double oldValue = heatModuleState.getTemperature();
heatModuleState.setTemperature(temperature); heatModuleState.setTemperature(temperature);
support.firePropertyChange("setHeatModuleStateTemperature", oldValue, temperature); support.firePropertyChange("setHeatModuleStateTemperature", oldValue, temperature);
} }
@ -320,4 +336,18 @@ public class DeviceStateService {
support.firePropertyChange("setTubeStateAddSolution", oldValue, addSolution); support.firePropertyChange("setTubeStateAddSolution", oldValue, addSolution);
} }
public synchronized void setCurrentUser(User currentUser) {
User oldValue = deviceState.getCurrentUser();
deviceState.setCurrentUser(currentUser);
support.firePropertyChange("setCurrentUser", oldValue, currentUser);
}
public synchronized void setCurrentTasks(Tasks currentTasks) {
User oldValue = deviceState.getCurrentUser();
deviceState.setCurrentTasks(currentTasks);
support.firePropertyChange("setCurrentTasks", oldValue, currentTasks);
}
} }

2
src/main/java/com/iflytop/gd/app/service/OresService.java

@ -34,7 +34,7 @@ public class OresService extends ServiceImpl<OresMapper, Ores> {
Page<Ores> oresPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); Page<Ores> oresPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
// 分页查询矿石数据 // 分页查询矿石数据
IPage<Ores> oresIPage = this.baseMapper.selectPage(oresPage, new QueryWrapper<Ores>());
IPage<Ores> oresIPage = this.baseMapper.selectPage(oresPage, new QueryWrapper<>());
// 获取矿石ID列表 // 获取矿石ID列表
List<Long> oresIds = oresIPage.getRecords().stream() List<Long> oresIds = oresIPage.getRecords().stream()

8
src/main/java/com/iflytop/gd/app/service/TaskStepsService.java

@ -14,13 +14,5 @@ import java.util.List;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TaskStepsService extends ServiceImpl<TaskStepsMapper, TaskSteps> { public class TaskStepsService extends ServiceImpl<TaskStepsMapper, TaskSteps> {
private final TaskStepsMapper taskStepsMapper;
public List<TaskSteps> getTaskStepsByTaskId(Long taskId) {
return taskStepsMapper.getTaskStepsByTaskId(taskId);
}
public int addTaskSteps(TaskSteps taskSteps) {
return this.baseMapper.insert(taskSteps);
}
} }

123
src/main/java/com/iflytop/gd/app/service/TasksService.java

@ -1,22 +1,18 @@
package com.iflytop.gd.app.service; package com.iflytop.gd.app.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.gd.app.mapper.TaskStepsMapper;
import com.iflytop.gd.app.mapper.TasksMapper; import com.iflytop.gd.app.mapper.TasksMapper;
import com.iflytop.gd.app.model.entity.TaskSteps; import com.iflytop.gd.app.model.entity.TaskSteps;
import com.iflytop.gd.app.model.entity.Tasks; import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.app.model.vo.TaskListVO;
import com.iflytop.gd.common.base.BasePageQuery;
import com.iflytop.gd.app.model.vo.TaskStepsVO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -25,95 +21,64 @@ import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TasksService extends ServiceImpl<TasksMapper, Tasks> { public class TasksService extends ServiceImpl<TasksMapper, Tasks> {
private final TasksMapper tasksMapper;
private final UserService userService;
private final TaskStepsMapper taskStepsMapper;
private final TaskStepsService taskStepsService; private final TaskStepsService taskStepsService;
public IPage<TaskListVO> getPage(BasePageQuery pageQuery) {
// 构建分页对象
Page<TaskListVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
IPage<TaskListVO> tasksIPage = tasksMapper.selectPage(page);
List<Long> taskIds = tasksIPage.getRecords().stream()
.map(TaskListVO::getId)
.toList();
QueryWrapper<TaskSteps> queryWrapper = new QueryWrapper<>();
queryWrapper.in("task_id", taskIds);
List<TaskSteps> list = taskStepsMapper.selectList(queryWrapper);
Map<Long, List<TaskSteps>> map = list.stream()
.collect(Collectors.groupingBy(TaskSteps::getTaskId));
List<TaskListVO> taskList = tasksIPage.getRecords().stream().map(task -> {
TaskListVO taskListVO = new TaskListVO();
taskListVO.setId(task.getId());
taskListVO.setName(task.getName());
taskListVO.setStatus(task.getStatus());
taskListVO.setStartTime(task.getStartTime());
taskListVO.setEndTime(task.getEndTime());
taskListVO.setCreateUser(task.getCreateUser());
List<TaskSteps> steps = map.get(task.getId());
taskListVO.setSteps(steps);
return taskListVO;
}).collect(Collectors.toList());
Page<TaskListVO> resultPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
resultPage.setTotal(tasksIPage.getTotal());
resultPage.setRecords(taskList);
return resultPage;
}
public TaskListVO selectById(Long id) {
TaskListVO taskListVO = tasksMapper.selectById(id);
List<TaskSteps> taskSteps = taskStepsMapper.selectList(new QueryWrapper<TaskSteps>().eq("task_id", id));
taskListVO.setSteps(taskSteps);
return taskListVO;
private final DeviceStateService deviceStateService;
public TaskStepsVO detail(Long id) {
Tasks tasks = this.getById(id);
List<TaskSteps> taskSteps = taskStepsService.list(new LambdaQueryWrapper<>(TaskSteps.class).eq(TaskSteps::getTaskId, id));
TaskStepsVO taskStepsVO = new TaskStepsVO();
taskStepsVO.setId(tasks.getId());
taskStepsVO.setName(tasks.getName());
taskStepsVO.setStartTime(tasks.getStartTime());
taskStepsVO.setEndTime(tasks.getEndTime());
taskStepsVO.setCreateUser(tasks.getCreateUser());
taskStepsVO.setStatus(tasks.getStatus());
taskStepsVO.setIsDeleted(tasks.getIsDeleted());
taskStepsVO.setSteps(taskSteps);
return taskStepsVO;
} }
public Tasks addTask(String taskName) {
public Tasks start(String taskName) {
Tasks tasks = new Tasks(); Tasks tasks = new Tasks();
tasks.setName(taskName); tasks.setName(taskName);
User user = userService.getCurrentUser();
tasks.setCreateUser(user.getId());
tasks.setCreateUser(deviceStateService.getDeviceState().getCurrentUser().getId());
tasks.setStatus(1); tasks.setStatus(1);
tasks.setIsDeleted(0); tasks.setIsDeleted(0);
tasksMapper.insert(tasks);
tasks.setStartTime(LocalDateTime.now());
this.save(tasks);
TaskSteps taskSteps = new TaskSteps(); TaskSteps taskSteps = new TaskSteps();
taskSteps.setTaskId(tasks.getId()); taskSteps.setTaskId(tasks.getId());
taskSteps.setStepDescription("开始实验"); taskSteps.setStepDescription("开始实验");
taskStepsService.addTaskSteps(taskSteps);
taskStepsService.save(taskSteps);
deviceStateService.setCurrentTasks(tasks);
return tasks; return tasks;
} }
public Tasks getIngTask() {
return tasksMapper.selectOne(new QueryWrapper<Tasks>().eq("status", 1));
public Tasks getCurrent() {
return deviceStateService.getDeviceState().getCurrentTasks();
} }
public int removeByIds(String ids) {
List<Long> idsArr = Arrays.stream(ids.split(","))
public boolean deleteTasks(String idsStr) {
List<Long> ids = Arrays.stream(idsStr.split(","))
.map(Long::parseLong) .map(Long::parseLong)
.collect(Collectors.toList());
return tasksMapper.removeByIds(idsArr);
.toList();
for (Long id : ids) {
List<TaskSteps> taskSteps = taskStepsService.list(new LambdaQueryWrapper<>(TaskSteps.class).eq(TaskSteps::getTaskId, id));
taskStepsService.removeByIds(taskSteps.stream().map(TaskSteps::getId).collect(Collectors.toList()));
this.removeById(id);
}
return true;
} }
public int stopTask(Long taskId) {
TaskSteps taskSteps = new TaskSteps();
taskSteps.setTaskId(taskId);
taskSteps.setStepDescription("结束实验");
taskStepsService.addTaskSteps(taskSteps);
return tasksMapper.stopTask(taskId);
public void stop() {
Tasks tasks = deviceStateService.getDeviceState().getCurrentTasks();
if (tasks != null) {
tasks.setStatus(2);
tasks.setEndTime(LocalDateTime.now());
this.updateById(tasks);
deviceStateService.setCurrentTasks(null);
}
} }
} }

7
src/main/java/com/iflytop/gd/app/service/UserService.java

@ -1,6 +1,7 @@
package com.iflytop.gd.app.service; package com.iflytop.gd.app.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.gd.app.core.device.DeviceState;
import com.iflytop.gd.app.mapper.UserMapper; import com.iflytop.gd.app.mapper.UserMapper;
import com.iflytop.gd.app.model.entity.User; import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.common.enums.data.Deleted; import com.iflytop.gd.common.enums.data.Deleted;
@ -19,9 +20,6 @@ import java.util.List;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class UserService extends ServiceImpl<UserMapper, User> { public class UserService extends ServiceImpl<UserMapper, User> {
@Getter
@Setter
private User currentUser;
public boolean deleteUser(String idsStr) { public boolean deleteUser(String idsStr) {
List<Long> ids = Arrays.stream(idsStr.split(",")) List<Long> ids = Arrays.stream(idsStr.split(","))
@ -37,7 +35,4 @@ public class UserService extends ServiceImpl<UserMapper, User> {
return true; return true;
} }
public void clearCurrentUser() {
currentUser = null;
}
} }

4
src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java

@ -8,6 +8,10 @@ import lombok.Getter;
@Getter @Getter
public enum DevicePositionCode { public enum DevicePositionCode {
/** /**
* 预充防滴落距离
*/
antiDripDistance(DevicePositionType.DISTANCE, "预充防滴落距离"),
/**
* 试管间距距离 * 试管间距距离
*/ */
testTubeSpacing(DevicePositionType.DISTANCE, "试管间距距离"), testTubeSpacing(DevicePositionType.DISTANCE, "试管间距距离"),

5
src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java

@ -1,7 +1,10 @@
package com.iflytop.gd.hardware.controller; package com.iflytop.gd.hardware.controller;
import com.iflytop.gd.app.service.DeviceParamConfigService;
import com.iflytop.gd.hardware.drivers.StepMotorDriver.AcidPumpDriver; import com.iflytop.gd.hardware.drivers.StepMotorDriver.AcidPumpDriver;
import com.iflytop.gd.hardware.type.Servo.MiniServoRegIndex;
import com.iflytop.gd.hardware.type.StepMotor.StepMotorMId; import com.iflytop.gd.hardware.type.StepMotor.StepMotorMId;
import com.iflytop.gd.hardware.type.StepMotor.StepMotorRegIndex;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -17,12 +20,14 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
public class AcidPumpController { public class AcidPumpController {
private final AcidPumpDriver driver; private final AcidPumpDriver driver;
private final DeviceParamConfigService deviceParamConfigService;
@PostMapping("/set-speed") @PostMapping("/set-speed")
public void setSpeed(@RequestParam StepMotorMId stepMotorMId, @RequestParam int speed) { public void setSpeed(@RequestParam StepMotorMId stepMotorMId, @RequestParam int speed) {
log.info("Setting acid pump speed to: {}", speed); log.info("Setting acid pump speed to: {}", speed);
try { try {
driver.setSpeed(stepMotorMId, speed); driver.setSpeed(stepMotorMId, speed);
deviceParamConfigService.setModuleAndReg(stepMotorMId.mid.name(), StepMotorRegIndex.kreg_step_motor_default_velocity.regIndex.name(),speed);
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to set speed for acid pump: {}", e.getMessage()); log.error("Failed to set speed for acid pump: {}", e.getMessage());
} }

8
src/main/java/com/iflytop/gd/hardware/controller/ServoController.java

@ -1,10 +1,12 @@
package com.iflytop.gd.hardware.controller; package com.iflytop.gd.hardware.controller;
import com.iflytop.gd.app.service.DeviceParamConfigService;
import com.iflytop.gd.common.result.Result; import com.iflytop.gd.common.result.Result;
import com.iflytop.gd.hardware.type.Servo.DeviceServoId; import com.iflytop.gd.hardware.type.Servo.DeviceServoId;
import com.iflytop.gd.hardware.type.Servo.MiniServoRegIndex; import com.iflytop.gd.hardware.type.Servo.MiniServoRegIndex;
import com.iflytop.gd.hardware.exception.HardwareException; import com.iflytop.gd.hardware.exception.HardwareException;
import com.iflytop.gd.hardware.service.ServoService; import com.iflytop.gd.hardware.service.ServoService;
import com.iflytop.gd.hardware.type.StepMotor.StepMotorRegIndex;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -23,6 +25,7 @@ import java.util.Map;
@Slf4j @Slf4j
public class ServoController { public class ServoController {
private final ServoService servoService; private final ServoService servoService;
private final DeviceParamConfigService deviceParamConfigService;
// 获取设备列表 // 获取设备列表
@PostMapping("/get-device-list") @PostMapping("/get-device-list")
@ -88,7 +91,6 @@ public class ServoController {
servoService.rotate(deviceId, 0); servoService.rotate(deviceId, 0);
return Result.success(); return Result.success();
} }
@PostMapping("/rotate-with-torque") @PostMapping("/rotate-with-torque")
@Operation(summary = "旋转(力矩)") @Operation(summary = "旋转(力矩)")
public Result<?> rotateWithTorque(@RequestParam DeviceServoId deviceId, @RequestParam Integer pos) throws HardwareException { public Result<?> rotateWithTorque(@RequestParam DeviceServoId deviceId, @RequestParam Integer pos) throws HardwareException {
@ -110,6 +112,7 @@ public class ServoController {
@RequestParam DeviceServoId deviceId, @RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException { @RequestParam Integer val) throws HardwareException {
servoService.setLimitVelocity(deviceId, val); servoService.setLimitVelocity(deviceId, val);
deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_limit_velocity.regIndex.name(),val);
return Result.success(); return Result.success();
} }
@ -119,6 +122,7 @@ public class ServoController {
@RequestParam DeviceServoId deviceId, @RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException { @RequestParam Integer val) throws HardwareException {
servoService.setLimitTorque(deviceId, val); servoService.setLimitTorque(deviceId, val);
deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_limit_torque.regIndex.name(),val);
return Result.success(); return Result.success();
} }
@ -128,6 +132,7 @@ public class ServoController {
@RequestParam DeviceServoId deviceId, @RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException { @RequestParam Integer val) throws HardwareException {
servoService.setProtectiveTorque(deviceId, val); servoService.setProtectiveTorque(deviceId, val);
deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_protective_torque.regIndex.name(),val);
return Result.success(); return Result.success();
} }
@ -138,6 +143,7 @@ public class ServoController {
@RequestParam MiniServoRegIndex reg, @RequestParam MiniServoRegIndex reg,
@RequestParam Integer val) throws HardwareException { @RequestParam Integer val) throws HardwareException {
servoService.setReg(deviceId, reg, val); servoService.setReg(deviceId, reg, val);
deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), reg.regIndex.name(),val);
return Result.success(); return Result.success();
} }

23
src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java

@ -1,5 +1,6 @@
package com.iflytop.gd.hardware.controller; package com.iflytop.gd.hardware.controller;
import com.iflytop.gd.app.service.DeviceParamConfigService;
import com.iflytop.gd.common.result.Result; import com.iflytop.gd.common.result.Result;
import com.iflytop.gd.hardware.exception.HardwareException; import com.iflytop.gd.hardware.exception.HardwareException;
import com.iflytop.gd.hardware.service.StepMotorService; import com.iflytop.gd.hardware.service.StepMotorService;
@ -24,6 +25,7 @@ import java.util.Map;
@Slf4j @Slf4j
public class StepMotorController { public class StepMotorController {
private final StepMotorService stepMotorService; private final StepMotorService stepMotorService;
private final DeviceParamConfigService deviceParamConfigService;
// 获取设备列表 // 获取设备列表
@PostMapping("/get-device-list") @PostMapping("/get-device-list")
@ -142,6 +144,7 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer mres) throws HardwareException { @RequestParam Integer mres) throws HardwareException {
stepMotorService.setMres(deviceId, mres); stepMotorService.setMres(deviceId, mres);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_mres.regIndex.name(),mres);
return Result.success(); return Result.success();
} }
@ -151,6 +154,7 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer irun) throws HardwareException { @RequestParam Integer irun) throws HardwareException {
stepMotorService.setIRUN(deviceId, irun); stepMotorService.setIRUN(deviceId, irun);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_irun.regIndex.name(),irun);
return Result.success(); return Result.success();
} }
@ -160,6 +164,7 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer ihold) throws HardwareException { @RequestParam Integer ihold) throws HardwareException {
stepMotorService.setIHOLD(deviceId, ihold); stepMotorService.setIHOLD(deviceId, ihold);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_ihold.regIndex.name(),ihold);
return Result.success(); return Result.success();
} }
@ -169,6 +174,10 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer v) throws HardwareException { @RequestParam Integer v) throws HardwareException {
stepMotorService.setStartAndStopVel(deviceId, v); stepMotorService.setStartAndStopVel(deviceId, v);
//开始速度参数保存到数据库
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_vstart.regIndex.name(),v);
//停止速度参数保存到数据库
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_vstop.regIndex.name(),v);
return Result.success(); return Result.success();
} }
@ -178,6 +187,8 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer v) throws HardwareException { @RequestParam Integer v) throws HardwareException {
stepMotorService.setV1(deviceId, v); stepMotorService.setV1(deviceId, v);
//参数保存到数据库
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_v1.regIndex.name(),v);
return Result.success(); return Result.success();
} }
@ -187,6 +198,8 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer acc) throws HardwareException { @RequestParam Integer acc) throws HardwareException {
stepMotorService.setA1AndD1(deviceId, acc); stepMotorService.setA1AndD1(deviceId, acc);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_a1.regIndex.name(),acc);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_d1.regIndex.name(),acc);
return Result.success(); return Result.success();
} }
@ -196,6 +209,8 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer acc) throws HardwareException { @RequestParam Integer acc) throws HardwareException {
stepMotorService.setAmaxAndDmax(deviceId, acc); stepMotorService.setAmaxAndDmax(deviceId, acc);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_amax.regIndex.name(),acc);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_dmax.regIndex.name(),acc);
return Result.success(); return Result.success();
} }
@ -205,6 +220,7 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer v) throws HardwareException { @RequestParam Integer v) throws HardwareException {
stepMotorService.setDefaultVel(deviceId, v); stepMotorService.setDefaultVel(deviceId, v);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_default_velocity.regIndex.name(),v);
return Result.success(); return Result.success();
} }
@ -216,6 +232,9 @@ public class StepMotorController {
@RequestParam Integer mid, @RequestParam Integer mid,
@RequestParam Integer high) throws HardwareException { @RequestParam Integer high) throws HardwareException {
stepMotorService.setSpeed(deviceId, low, mid, high); stepMotorService.setSpeed(deviceId, low, mid, high);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_low_velocity.regIndex.name(),low);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_mid_velocity.regIndex.name(),mid);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_high_velocity.regIndex.name(),high);
return Result.success(); return Result.success();
} }
@ -226,6 +245,8 @@ public class StepMotorController {
@RequestParam Integer pulse, @RequestParam Integer pulse,
@RequestParam Integer denominator) throws HardwareException { @RequestParam Integer denominator) throws HardwareException {
stepMotorService.setOneCirclePulse(deviceId, pulse, denominator); stepMotorService.setOneCirclePulse(deviceId, pulse, denominator);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_one_circle_pulse.regIndex.name(),pulse);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_one_circle_pulse_denominator.regIndex.name(),denominator);
return Result.success(); return Result.success();
} }
@ -235,6 +256,7 @@ public class StepMotorController {
@RequestParam DeviceStepMotorId deviceId, @RequestParam DeviceStepMotorId deviceId,
@RequestParam Integer dzero) throws HardwareException { @RequestParam Integer dzero) throws HardwareException {
stepMotorService.setDZero(deviceId, dzero); stepMotorService.setDZero(deviceId, dzero);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_dzero_pos.regIndex.name(),dzero);
return Result.success(); return Result.success();
} }
@ -253,6 +275,7 @@ public class StepMotorController {
@RequestParam StepMotorRegIndex reg, @RequestParam StepMotorRegIndex reg,
@RequestParam Integer val) throws HardwareException { @RequestParam Integer val) throws HardwareException {
stepMotorService.setReg(deviceId, reg, val); stepMotorService.setReg(deviceId, reg, val);
deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),reg.regIndex.name(),val);
return Result.success(); return Result.success();
} }

3
src/main/resources/sql/init.sql

@ -48,6 +48,7 @@ CREATE TABLE IF NOT EXISTS container
pump_id TEXT, pump_id TEXT,
capacity_total INTEGER, capacity_total INTEGER,
capacity_used INTEGER, capacity_used INTEGER,
filled REAL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
); );
@ -153,7 +154,7 @@ CREATE TABLE IF NOT EXISTS task_steps
CREATE TABLE IF NOT EXISTS device_param_config CREATE TABLE IF NOT EXISTS device_param_config
( (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
m_id text,
mid text,
reg_index text, reg_index text,
reg_val INTEGER, reg_val INTEGER,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

Loading…
Cancel
Save