diff --git a/src/main/java/com/iflytop/gd/app/cmd/FanStartCommand.java b/src/main/java/com/iflytop/gd/app/cmd/FanStartCommand.java index 686e33b..feb9bd0 100644 --- a/src/main/java/com/iflytop/gd/app/cmd/FanStartCommand.java +++ b/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.model.dto.CmdDTO; 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.enums.HeatModuleCode; import lombok.RequiredArgsConstructor; @@ -21,6 +22,7 @@ import java.util.concurrent.CompletableFuture; @CommandMapping("fan_start") public class FanStartCommand extends BaseCommandHandler { private final DeviceCommandUtilService deviceCommandUtilService; + private final DeviceStateService deviceStateService; @Override public CompletableFuture handle(CmdDTO cmdDTO) { @@ -30,6 +32,7 @@ public class FanStartCommand extends BaseCommandHandler { String heatId = heatIdJsonArray.getStr(i); HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId); deviceCommandUtilService.fanStart(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId); + deviceStateService.setHeatModuleStateFanOpen(heatModuleId, true); } }); } diff --git a/src/main/java/com/iflytop/gd/app/cmd/FanStopCommand.java b/src/main/java/com/iflytop/gd/app/cmd/FanStopCommand.java index a3f47a0..1bfe714 100644 --- a/src/main/java/com/iflytop/gd/app/cmd/FanStopCommand.java +++ b/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.model.dto.CmdDTO; 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.enums.HeatModuleCode; import lombok.RequiredArgsConstructor; @@ -21,6 +22,7 @@ import java.util.concurrent.CompletableFuture; @CommandMapping("fan_stop") public class FanStopCommand extends BaseCommandHandler { private final DeviceCommandUtilService deviceCommandUtilService; + private final DeviceStateService deviceStateService; @Override public CompletableFuture handle(CmdDTO cmdDTO) { @@ -30,6 +32,7 @@ public class FanStopCommand extends BaseCommandHandler { String heatId = heatIdJsonArray.getStr(i); HeatModuleCode heatModuleId = HeatModuleCode.valueOf(heatId); deviceCommandUtilService.fanClose(cmdDTO.getCommandId(), cmdDTO.getCommand(), heatModuleId); + deviceStateService.setHeatModuleStateFanOpen(heatModuleId, false); } }); } diff --git a/src/main/java/com/iflytop/gd/app/controller/AuthController.java b/src/main/java/com/iflytop/gd/app/controller/AuthController.java index 4cf3699..e1c8894 100644 --- a/src/main/java/com/iflytop/gd/app/controller/AuthController.java +++ b/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.iflytop.gd.app.model.dto.LoginDTO; 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.common.enums.data.Deleted; import com.iflytop.gd.common.result.Result; @@ -27,13 +28,14 @@ import java.util.Objects; public class AuthController { private final UserService userService; + private final DeviceStateService deviceStateService; @Operation(summary = "账号密码登录") @PostMapping("/login") public Result login(@Valid @RequestBody LoginDTO loginDTO) { 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())) { - userService.setCurrentUser(user); + deviceStateService.setCurrentUser(user); user.setPassword(null); return Result.success(user); } @@ -43,13 +45,13 @@ public class AuthController { @Operation(summary = "用户登出") @PostMapping("/logout") public Result logout() { - userService.clearCurrentUser(); + deviceStateService.setCurrentUser(null); return Result.success(); } @Operation(summary = "获取当前登录用户") @GetMapping("/current") public Result current() { - return Result.success(userService.getCurrentUser()); + return Result.success(deviceStateService.getDeviceState().getCurrentUser()); } } diff --git a/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java b/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java index 065f43a..513cc5c 100644 --- a/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java +++ b/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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; 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; /** @@ -74,4 +79,41 @@ public class DeviceParamController { return Result.failed(); } + @Operation(summary = "上传csv文件覆盖数据库配置") + @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public Result uploadFile(@RequestPart("file") MultipartFile file) { + //文件后缀检查 + if (!file.getOriginalFilename().endsWith(".csv")) { + return Result.failed(".csv"); + } + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(file.getInputStream(), StandardCharsets.UTF_8))) { + String line; + //是否含有表头 + boolean isHeader = true; + List 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(); + } + } diff --git a/src/main/java/com/iflytop/gd/app/controller/TasksController.java b/src/main/java/com/iflytop/gd/app/controller/TasksController.java index 8d58dc5..bf08b77 100644 --- a/src/main/java/com/iflytop/gd/app/controller/TasksController.java +++ b/src/main/java/com/iflytop/gd/app/controller/TasksController.java @@ -1,12 +1,13 @@ package com.iflytop.gd.app.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.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.common.base.BasePageQuery; import com.iflytop.gd.common.result.PageResult; import com.iflytop.gd.common.result.Result; import io.swagger.v3.oas.annotations.Operation; @@ -26,51 +27,48 @@ public class TasksController { @Operation(summary = "实验列表") @GetMapping("/list") - public PageResult getAllTasks(BasePageQuery pageQuery) { - IPage result = tasksService.getPage(pageQuery); + public PageResult list(GetAllTasksDTO getAllTasksDTO) { + IPage result = tasksService.page(new Page<>(getAllTasksDTO.getPageNum(), getAllTasksDTO.getPageSize()), new LambdaQueryWrapper().like(Tasks::getName, "%" + getAllTasksDTO.getName() + "%")); return PageResult.success(result); } @Operation(summary = "实验详情") @GetMapping("/{id}") - public Result detail(@PathVariable Long id) { - return Result.success(tasksService.selectById(id)); + public Result detail(@PathVariable Long id) { + return Result.success(tasksService.detail(id)); } @Operation(summary = "获取正在进行的实验") - @GetMapping("/getIngTask") - public Result getIngTask() { - return Result.success(tasksService.getIngTask()); + @GetMapping("/current") + public Result getCurrent() { + return Result.success(tasksService.getCurrent()); } - @Operation(summary = "添加新实验") + @Operation(summary = "开始新实验") @PostMapping("/") - public Result addTask(@RequestBody TaskDTO dto) { - if (tasksService.getIngTask() != null) { + public Result start(@RequestBody TaskDTO dto) { + if (tasksService.getCurrent() != null) { return Result.failed("存在正在运行的实验,请先停止"); } - return Result.success(tasksService.addTask(dto.getName())); + return Result.success(tasksService.start(dto.getName())); } @Operation(summary = "更新实验") @PutMapping("/") - public Result updateTask(@RequestBody Tasks task) { - + public Result updateTask(@RequestBody Tasks task) { return Result.success(tasksService.updateById(task)); } @Operation(summary = "删除实验") @DeleteMapping("/{ids}") - public Result 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") - public Result stopTask(@RequestBody StopTaskDTO dto) { - if (dto.getTaskId() != null) { - return Result.success(tasksService.stopTask(dto.getTaskId())); - } - return Result.failed("停止实验失败"); + public Result stop() { + tasksService.stop(); + return Result.success(); } } diff --git a/src/main/java/com/iflytop/gd/app/controller/UserController.java b/src/main/java/com/iflytop/gd/app/controller/UserController.java index b13fd62..38ae25e 100644 --- a/src/main/java/com/iflytop/gd/app/controller/UserController.java +++ b/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.metadata.IPage; 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.service.UserService; import com.iflytop.gd.common.base.BasePageQuery; diff --git a/src/main/java/com/iflytop/gd/app/core/device/DeviceState.java b/src/main/java/com/iflytop/gd/app/core/device/DeviceState.java index 0395439..c41f8ab 100644 --- a/src/main/java/com/iflytop/gd/app/core/device/DeviceState.java +++ b/src/main/java/com/iflytop/gd/app/core/device/DeviceState.java @@ -1,5 +1,7 @@ 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 lombok.Data; @@ -27,4 +29,8 @@ public class DeviceState { private boolean selfTest = false; @Schema(description = "是否是急停状态,true为急停") private boolean emergencyStop = false; + @Schema(description = "当前登录用户") + private User currentUser; + @Schema(description = "当前实验") + private Tasks currentTasks; } diff --git a/src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java b/src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java index 5aa76c8..e5ec510 100644 --- a/src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java +++ b/src/main/java/com/iflytop/gd/app/core/device/HeatModuleState.java @@ -26,10 +26,10 @@ public class HeatModuleState { private boolean capExist = false; @Schema(description = "加热器目标温度") - private double targetTemperature = 0.0; + private Double targetTemperature = null; @Schema(description = "加热器当前温度") - private double temperature = 0.0; + private Double temperature = null; public HeatModuleState(HeatModuleCode moduleCode) { this.moduleCode = moduleCode; diff --git a/src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java b/src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java index 6cded2a..d6e7853 100644 --- a/src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java +++ b/src/main/java/com/iflytop/gd/app/mapper/TaskStepsMapper.java @@ -11,5 +11,4 @@ import java.util.List; */ @Mapper public interface TaskStepsMapper extends BaseMapper { - List getTaskStepsByTaskId(Long taskId); } diff --git a/src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java b/src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java index fc0ff97..7505181 100644 --- a/src/main/java/com/iflytop/gd/app/mapper/TasksMapper.java +++ b/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.extension.plugins.pagination.Page; import com.iflytop.gd.app.model.entity.Tasks; -import com.iflytop.gd.app.model.vo.TaskListVO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -13,11 +12,5 @@ import java.util.List; */ @Mapper public interface TasksMapper extends BaseMapper { - Page selectPage(Page page); - TaskListVO selectById(Long id); - - Integer removeByIds(List ids); - - int stopTask(Long taskId); } diff --git a/src/main/java/com/iflytop/gd/app/model/dto/GetAllTasksDTO.java b/src/main/java/com/iflytop/gd/app/model/dto/GetAllTasksDTO.java new file mode 100644 index 0000000..f41ef1f --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/iflytop/gd/app/model/entity/Tasks.java b/src/main/java/com/iflytop/gd/app/model/entity/Tasks.java index 8599609..6b08e9a 100644 --- a/src/main/java/com/iflytop/gd/app/model/entity/Tasks.java +++ b/src/main/java/com/iflytop/gd/app/model/entity/Tasks.java @@ -1,12 +1,15 @@ package com.iflytop.gd.app.model.entity; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import com.iflytop.gd.common.base.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDateTime; + @EqualsAndHashCode(callSuper = true) @Schema(description = "实验") @TableName("tasks") @@ -19,14 +22,16 @@ public class Tasks extends BaseEntity { @NotBlank @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 = "创建人") private Long createUser; - @Schema(description = "结束时间") - private String endTime; - @Schema(description = "状态 1 执行中 2 执行完毕") private Integer status; diff --git a/src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java b/src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java index d0f5384..1a7d372 100644 --- a/src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java +++ b/src/main/java/com/iflytop/gd/app/model/vo/SetCraftsVO.java @@ -10,11 +10,13 @@ public class SetCraftsVO { @Schema(description = "工艺名称") private String craftsName; + @Schema(description = "工艺名称") private Long craftsId; @Schema(description = "矿石名称") private String oresName; + @Schema(description = "矿石ID") private Long oresId; } diff --git a/src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java b/src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java deleted file mode 100644 index c23ad4f..0000000 --- a/src/main/java/com/iflytop/gd/app/model/vo/TaskListVO.java +++ /dev/null @@ -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 steps; -} diff --git a/src/main/java/com/iflytop/gd/app/model/vo/TaskStepsVO.java b/src/main/java/com/iflytop/gd/app/model/vo/TaskStepsVO.java new file mode 100644 index 0000000..031366e --- /dev/null +++ b/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 steps; +} diff --git a/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java b/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java index 7ac60a9..751d325 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceInitService.java +++ b/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.model.bo.DeviceInitializationData; 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.ContainerType; import com.iflytop.gd.common.enums.HeatModuleCode; @@ -50,6 +51,7 @@ public class DeviceInitService { private final LeisaiServoDriver leisaiServoDriver; private final ActionOvertimeConstant actionOvertimeConstant; private final OutputIOCtrlDriver outputIOCtrlDriver; + private final DeviceParamConfigService deviceParamConfigService; @PostConstruct 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(LeisaiServoMId.MainXSV, CmdId.step_motor_easy_move_to_zero, 300 * 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()) { 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 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 { diff --git a/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java b/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java index 20b5f8b..c0261b2 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java +++ b/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java @@ -1,6 +1,7 @@ package com.iflytop.gd.app.service; 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.iflytop.gd.app.mapper.DeviceParamConfigMapper; import com.iflytop.gd.app.model.entity.DeviceParamConfig; @@ -67,6 +68,22 @@ public class DeviceParamConfigService extends ServiceImpl() + .eq(DeviceParamConfig::getMid, moduleId) + .eq(DeviceParamConfig::getRegIndex, regIndex) + .set(DeviceParamConfig::getRegVal, regVal)); + + } + + /** * 列出所有 ModuleId,返回 VO 列表 * * @return List diff --git a/src/main/java/com/iflytop/gd/app/service/DeviceStateService.java b/src/main/java/com/iflytop/gd/app/service/DeviceStateService.java index 1433fcb..802ba5d 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceStateService.java +++ b/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.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.HeatModuleCode; import lombok.RequiredArgsConstructor; @@ -139,6 +141,20 @@ public class DeviceStateService { 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) { HeatModuleState heatModuleState = null; for (HeatModuleState t : deviceState.getHeatModule()) { @@ -162,7 +178,7 @@ public class DeviceStateService { } } assert heatModuleState != null; - double oldValue = heatModuleState.getTargetTemperature(); + Double oldValue = heatModuleState.getTargetTemperature(); heatModuleState.setTargetTemperature(targetTemperature); support.firePropertyChange("setHeatModuleStateTargetTemperature", oldValue, targetTemperature); } @@ -176,7 +192,7 @@ public class DeviceStateService { } } assert heatModuleState != null; - double oldValue = heatModuleState.getTemperature(); + Double oldValue = heatModuleState.getTemperature(); heatModuleState.setTemperature(temperature); support.firePropertyChange("setHeatModuleStateTemperature", oldValue, temperature); } @@ -320,4 +336,18 @@ public class DeviceStateService { 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); + } + + + } diff --git a/src/main/java/com/iflytop/gd/app/service/OresService.java b/src/main/java/com/iflytop/gd/app/service/OresService.java index 00207b2..091eb11 100644 --- a/src/main/java/com/iflytop/gd/app/service/OresService.java +++ b/src/main/java/com/iflytop/gd/app/service/OresService.java @@ -34,7 +34,7 @@ public class OresService extends ServiceImpl { Page oresPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); // 分页查询矿石数据 - IPage oresIPage = this.baseMapper.selectPage(oresPage, new QueryWrapper()); + IPage oresIPage = this.baseMapper.selectPage(oresPage, new QueryWrapper<>()); // 获取矿石ID列表 List oresIds = oresIPage.getRecords().stream() diff --git a/src/main/java/com/iflytop/gd/app/service/TaskStepsService.java b/src/main/java/com/iflytop/gd/app/service/TaskStepsService.java index 8cf451d..33da7cf 100644 --- a/src/main/java/com/iflytop/gd/app/service/TaskStepsService.java +++ b/src/main/java/com/iflytop/gd/app/service/TaskStepsService.java @@ -14,13 +14,5 @@ import java.util.List; @Service @RequiredArgsConstructor public class TaskStepsService extends ServiceImpl { - private final TaskStepsMapper taskStepsMapper; - public List getTaskStepsByTaskId(Long taskId) { - return taskStepsMapper.getTaskStepsByTaskId(taskId); - } - - public int addTaskSteps(TaskSteps taskSteps) { - return this.baseMapper.insert(taskSteps); - } } diff --git a/src/main/java/com/iflytop/gd/app/service/TasksService.java b/src/main/java/com/iflytop/gd/app/service/TasksService.java index bbef049..fd499b6 100644 --- a/src/main/java/com/iflytop/gd/app/service/TasksService.java +++ b/src/main/java/com/iflytop/gd/app/service/TasksService.java @@ -1,22 +1,18 @@ 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.iflytop.gd.app.mapper.TaskStepsMapper; import com.iflytop.gd.app.mapper.TasksMapper; import com.iflytop.gd.app.model.entity.TaskSteps; 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 org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.Arrays; +import java.util.Date; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -25,95 +21,64 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class TasksService extends ServiceImpl { - - private final TasksMapper tasksMapper; - private final UserService userService; - private final TaskStepsMapper taskStepsMapper; private final TaskStepsService taskStepsService; - - public IPage getPage(BasePageQuery pageQuery) { - // 构建分页对象 - Page page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); - - - IPage tasksIPage = tasksMapper.selectPage(page); - - - List taskIds = tasksIPage.getRecords().stream() - .map(TaskListVO::getId) - .toList(); - - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("task_id", taskIds); - List list = taskStepsMapper.selectList(queryWrapper); - - - Map> map = list.stream() - .collect(Collectors.groupingBy(TaskSteps::getTaskId)); - - - List 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 steps = map.get(task.getId()); - taskListVO.setSteps(steps); - - return taskListVO; - }).collect(Collectors.toList()); - - - Page 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 = taskStepsMapper.selectList(new QueryWrapper().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 = 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.setName(taskName); - User user = userService.getCurrentUser(); - tasks.setCreateUser(user.getId()); + tasks.setCreateUser(deviceStateService.getDeviceState().getCurrentUser().getId()); tasks.setStatus(1); tasks.setIsDeleted(0); - tasksMapper.insert(tasks); + tasks.setStartTime(LocalDateTime.now()); + this.save(tasks); TaskSteps taskSteps = new TaskSteps(); taskSteps.setTaskId(tasks.getId()); taskSteps.setStepDescription("开始实验"); - taskStepsService.addTaskSteps(taskSteps); + taskStepsService.save(taskSteps); + deviceStateService.setCurrentTasks(tasks); return tasks; } - public Tasks getIngTask() { - return tasksMapper.selectOne(new QueryWrapper().eq("status", 1)); + public Tasks getCurrent() { + return deviceStateService.getDeviceState().getCurrentTasks(); } - public int removeByIds(String ids) { - List idsArr = Arrays.stream(ids.split(",")) + public boolean deleteTasks(String idsStr) { + List ids = Arrays.stream(idsStr.split(",")) .map(Long::parseLong) - .collect(Collectors.toList()); - return tasksMapper.removeByIds(idsArr); + .toList(); + for (Long id : ids) { + List 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); + } } } diff --git a/src/main/java/com/iflytop/gd/app/service/UserService.java b/src/main/java/com/iflytop/gd/app/service/UserService.java index bf1c0cd..098db34 100644 --- a/src/main/java/com/iflytop/gd/app/service/UserService.java +++ b/src/main/java/com/iflytop/gd/app/service/UserService.java @@ -1,6 +1,7 @@ package com.iflytop.gd.app.service; 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.model.entity.User; import com.iflytop.gd.common.enums.data.Deleted; @@ -19,9 +20,6 @@ import java.util.List; @Service @RequiredArgsConstructor public class UserService extends ServiceImpl { - @Getter - @Setter - private User currentUser; public boolean deleteUser(String idsStr) { List ids = Arrays.stream(idsStr.split(",")) @@ -37,7 +35,4 @@ public class UserService extends ServiceImpl { return true; } - public void clearCurrentUser() { - currentUser = null; - } } diff --git a/src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java b/src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java index fe58cd7..9e9c15c 100644 --- a/src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java +++ b/src/main/java/com/iflytop/gd/common/enums/data/DevicePositionCode.java @@ -8,6 +8,10 @@ import lombok.Getter; @Getter public enum DevicePositionCode { /** + * 预充防滴落距离 + */ + antiDripDistance(DevicePositionType.DISTANCE, "预充防滴落距离"), + /** * 试管间距距离 */ testTubeSpacing(DevicePositionType.DISTANCE, "试管间距距离"), diff --git a/src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java b/src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java index bfb0680..0a04264 100644 --- a/src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java +++ b/src/main/java/com/iflytop/gd/hardware/controller/AcidPumpController.java @@ -1,7 +1,10 @@ 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.type.Servo.MiniServoRegIndex; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,12 +20,14 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j public class AcidPumpController { private final AcidPumpDriver driver; + private final DeviceParamConfigService deviceParamConfigService; @PostMapping("/set-speed") public void setSpeed(@RequestParam StepMotorMId stepMotorMId, @RequestParam int speed) { log.info("Setting acid pump speed to: {}", speed); try { driver.setSpeed(stepMotorMId, speed); + deviceParamConfigService.setModuleAndReg(stepMotorMId.mid.name(), StepMotorRegIndex.kreg_step_motor_default_velocity.regIndex.name(),speed); } catch (Exception e) { log.error("Failed to set speed for acid pump: {}", e.getMessage()); } diff --git a/src/main/java/com/iflytop/gd/hardware/controller/ServoController.java b/src/main/java/com/iflytop/gd/hardware/controller/ServoController.java index 8ca3d19..a92722c 100644 --- a/src/main/java/com/iflytop/gd/hardware/controller/ServoController.java +++ b/src/main/java/com/iflytop/gd/hardware/controller/ServoController.java @@ -1,10 +1,12 @@ package com.iflytop.gd.hardware.controller; +import com.iflytop.gd.app.service.DeviceParamConfigService; import com.iflytop.gd.common.result.Result; import com.iflytop.gd.hardware.type.Servo.DeviceServoId; import com.iflytop.gd.hardware.type.Servo.MiniServoRegIndex; import com.iflytop.gd.hardware.exception.HardwareException; 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.tags.Tag; import lombok.RequiredArgsConstructor; @@ -23,6 +25,7 @@ import java.util.Map; @Slf4j public class ServoController { private final ServoService servoService; + private final DeviceParamConfigService deviceParamConfigService; // 获取设备列表 @PostMapping("/get-device-list") @@ -88,7 +91,6 @@ public class ServoController { servoService.rotate(deviceId, 0); return Result.success(); } - @PostMapping("/rotate-with-torque") @Operation(summary = "旋转(力矩)") public Result rotateWithTorque(@RequestParam DeviceServoId deviceId, @RequestParam Integer pos) throws HardwareException { @@ -110,6 +112,7 @@ public class ServoController { @RequestParam DeviceServoId deviceId, @RequestParam Integer val) throws HardwareException { servoService.setLimitVelocity(deviceId, val); + deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_limit_velocity.regIndex.name(),val); return Result.success(); } @@ -119,6 +122,7 @@ public class ServoController { @RequestParam DeviceServoId deviceId, @RequestParam Integer val) throws HardwareException { servoService.setLimitTorque(deviceId, val); + deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_limit_torque.regIndex.name(),val); return Result.success(); } @@ -128,6 +132,7 @@ public class ServoController { @RequestParam DeviceServoId deviceId, @RequestParam Integer val) throws HardwareException { servoService.setProtectiveTorque(deviceId, val); + deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), MiniServoRegIndex.kreg_mini_servo_protective_torque.regIndex.name(),val); return Result.success(); } @@ -138,6 +143,7 @@ public class ServoController { @RequestParam MiniServoRegIndex reg, @RequestParam Integer val) throws HardwareException { servoService.setReg(deviceId, reg, val); + deviceParamConfigService.setModuleAndReg(deviceId.getServoMId().mid.name(), reg.regIndex.name(),val); return Result.success(); } diff --git a/src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java b/src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java index f247849..4f289b8 100644 --- a/src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java +++ b/src/main/java/com/iflytop/gd/hardware/controller/StepMotorController.java @@ -1,5 +1,6 @@ package com.iflytop.gd.hardware.controller; +import com.iflytop.gd.app.service.DeviceParamConfigService; import com.iflytop.gd.common.result.Result; import com.iflytop.gd.hardware.exception.HardwareException; import com.iflytop.gd.hardware.service.StepMotorService; @@ -24,6 +25,7 @@ import java.util.Map; @Slf4j public class StepMotorController { private final StepMotorService stepMotorService; + private final DeviceParamConfigService deviceParamConfigService; // 获取设备列表 @PostMapping("/get-device-list") @@ -142,6 +144,7 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer mres) throws HardwareException { stepMotorService.setMres(deviceId, mres); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_mres.regIndex.name(),mres); return Result.success(); } @@ -151,6 +154,7 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer irun) throws HardwareException { stepMotorService.setIRUN(deviceId, irun); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_irun.regIndex.name(),irun); return Result.success(); } @@ -160,6 +164,7 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer ihold) throws HardwareException { stepMotorService.setIHOLD(deviceId, ihold); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_ihold.regIndex.name(),ihold); return Result.success(); } @@ -169,6 +174,10 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer v) throws HardwareException { 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(); } @@ -178,6 +187,8 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer v) throws HardwareException { stepMotorService.setV1(deviceId, v); + //参数保存到数据库 + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_v1.regIndex.name(),v); return Result.success(); } @@ -187,6 +198,8 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer acc) throws HardwareException { 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(); } @@ -196,6 +209,8 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer acc) throws HardwareException { 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(); } @@ -205,6 +220,7 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer v) throws HardwareException { stepMotorService.setDefaultVel(deviceId, v); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_default_velocity.regIndex.name(),v); return Result.success(); } @@ -216,6 +232,9 @@ public class StepMotorController { @RequestParam Integer mid, @RequestParam Integer high) throws HardwareException { 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(); } @@ -226,6 +245,8 @@ public class StepMotorController { @RequestParam Integer pulse, @RequestParam Integer denominator) throws HardwareException { 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(); } @@ -235,6 +256,7 @@ public class StepMotorController { @RequestParam DeviceStepMotorId deviceId, @RequestParam Integer dzero) throws HardwareException { stepMotorService.setDZero(deviceId, dzero); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),StepMotorRegIndex.kreg_step_motor_dzero_pos.regIndex.name(),dzero); return Result.success(); } @@ -253,6 +275,7 @@ public class StepMotorController { @RequestParam StepMotorRegIndex reg, @RequestParam Integer val) throws HardwareException { stepMotorService.setReg(deviceId, reg, val); + deviceParamConfigService.setModuleAndReg(deviceId.getStepMotorMId().mid.name(),reg.regIndex.name(),val); return Result.success(); } diff --git a/src/main/resources/sql/init.sql b/src/main/resources/sql/init.sql index 6483d7b..238cc8a 100644 --- a/src/main/resources/sql/init.sql +++ b/src/main/resources/sql/init.sql @@ -48,6 +48,7 @@ CREATE TABLE IF NOT EXISTS container pump_id TEXT, capacity_total INTEGER, capacity_used INTEGER, + filled REAL, create_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 ( id INTEGER PRIMARY KEY AUTOINCREMENT, - m_id text, + mid text, reg_index text, reg_val INTEGER, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,