From 1f32999d272076d5fdb659276fff90a153ca475e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Tue, 29 Apr 2025 10:21:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=BE=E5=A4=87=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E4=B8=8E?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gd/app/controller/DeviceParamController.java | 77 +++++++++++++++++++ .../gd/app/model/entity/DeviceParamConfig.java | 4 +- .../gd/app/model/vo/DeviceParamGroupVO.java | 36 +++++++++ .../com/iflytop/gd/app/model/vo/ModuleIdVO.java | 18 +++++ .../com/iflytop/gd/app/model/vo/RegIndexVO.java | 16 ++++ .../gd/app/service/DeviceParamConfigService.java | 86 ++++++++++++++++++++++ 6 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java create mode 100644 src/main/java/com/iflytop/gd/app/model/vo/DeviceParamGroupVO.java create mode 100644 src/main/java/com/iflytop/gd/app/model/vo/ModuleIdVO.java create mode 100644 src/main/java/com/iflytop/gd/app/model/vo/RegIndexVO.java diff --git a/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java b/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java new file mode 100644 index 0000000..8457b05 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java @@ -0,0 +1,77 @@ +package com.iflytop.gd.app.controller; + +import com.iflytop.gd.app.model.entity.DeviceParamConfig; +import com.iflytop.gd.app.model.vo.DeviceParamGroupVO; +import com.iflytop.gd.app.model.vo.ModuleIdVO; +import com.iflytop.gd.app.model.vo.RegIndexVO; +import com.iflytop.gd.app.service.DeviceParamConfigService; +import com.iflytop.gd.common.result.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 设备参数配置 + */ +@Tag(name = "设备参数配置") +@RestController +@RequestMapping("/api/device-param") +@RequiredArgsConstructor +@Slf4j +public class DeviceParamController { + + private final DeviceParamConfigService deviceParamConfigService; + + @Operation(summary = "获取所有设备配置") + @GetMapping("/list") + public Result> listGroupedParams() { + List vos = deviceParamConfigService.listGroupedByModule(); + return Result.success(vos); + } + + @Operation(summary = "获取所有设备模块") + @GetMapping("/modules") + public Result> listAllModules() { + List vos = deviceParamConfigService.listAllModuleIds(); + return Result.success(vos); + } + + @Operation(summary = "获取所有设备模块配置项") + @GetMapping("/reg-indices") + public Result> listAllRegIndices() { + List vos = deviceParamConfigService.listAllRegIndices(); + return Result.success(vos); + } + + + @Operation(summary = "添加新配置") + @PostMapping("") + public Result add(@Valid @RequestBody DeviceParamConfig deviceParamConfig) { + deviceParamConfigService.save(deviceParamConfig); + return Result.success(); + } + + @Operation(summary = "修改配置") + @PutMapping("") + public Result update(@Valid @RequestBody DeviceParamConfig deviceParamConfig) { + deviceParamConfigService.updateById(deviceParamConfig); + return Result.success(); + } + + @Operation(summary = "删除配置") + @DeleteMapping("/{ids}") + public Result deleteOres(@Parameter(description = "矿石ID,多个以英文逗号(,)分割") @PathVariable String ids) { + boolean isSuccess = deviceParamConfigService.deleteDeviceParam(ids); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + +} diff --git a/src/main/java/com/iflytop/gd/app/model/entity/DeviceParamConfig.java b/src/main/java/com/iflytop/gd/app/model/entity/DeviceParamConfig.java index 913fa92..53b1804 100644 --- a/src/main/java/com/iflytop/gd/app/model/entity/DeviceParamConfig.java +++ b/src/main/java/com/iflytop/gd/app/model/entity/DeviceParamConfig.java @@ -3,6 +3,7 @@ package com.iflytop.gd.app.model.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.iflytop.gd.infrastructure.repository.base.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,14 +15,15 @@ import lombok.EqualsAndHashCode; public class DeviceParamConfig extends BaseEntity { @NotNull + @NotBlank @Schema(description = "模块标识") private String mid; @NotNull + @NotBlank @Schema(description = "寄存器索引") private String regIndex; - @NotNull @Schema(description = "寄存器值") private Integer regVal; diff --git a/src/main/java/com/iflytop/gd/app/model/vo/DeviceParamGroupVO.java b/src/main/java/com/iflytop/gd/app/model/vo/DeviceParamGroupVO.java new file mode 100644 index 0000000..6aab59e --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/model/vo/DeviceParamGroupVO.java @@ -0,0 +1,36 @@ +package com.iflytop.gd.app.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * 按模块分组的设备参数视图 + */ +@Data +@Schema(description = "按模块分组的设备参数") +public class DeviceParamGroupVO { + + @Schema(description = "模块标识(ModuleId.name),如 DoorM") + private String mid; + + @Schema(description = "该模块下的所有寄存器项") + private List reg; + + public DeviceParamGroupVO(String mid, List reg) { + this.mid = mid; + this.reg = reg; + } + + @AllArgsConstructor + @Data + @Schema(description = "单个寄存器项") + public static class ParamItem { + @Schema(description = "寄存器索引名,如 kreg_step_motor_pos") + private String name; + @Schema(description = "值") + private Integer value; + } +} diff --git a/src/main/java/com/iflytop/gd/app/model/vo/ModuleIdVO.java b/src/main/java/com/iflytop/gd/app/model/vo/ModuleIdVO.java new file mode 100644 index 0000000..9e59b4b --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/model/vo/ModuleIdVO.java @@ -0,0 +1,18 @@ +package com.iflytop.gd.app.model.vo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * ModuleId 的展示视图 + */ +@Data +@AllArgsConstructor +@Schema(description = "ModuleId 的展示视图") +public class ModuleIdVO { + @Schema(description = "枚举常量名称,如 DoorM") + private String name; + + @Schema(description = "枚举描述") + private String description; +} diff --git a/src/main/java/com/iflytop/gd/app/model/vo/RegIndexVO.java b/src/main/java/com/iflytop/gd/app/model/vo/RegIndexVO.java new file mode 100644 index 0000000..294939e --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/model/vo/RegIndexVO.java @@ -0,0 +1,16 @@ +package com.iflytop.gd.app.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * RegIndex 的展示视图 + */ +@Data +@AllArgsConstructor +@Schema(description = "RegIndex 的展示视图") +public class RegIndexVO { + @Schema(description = "枚举常量名称,如 kreg_step_motor_pos") + private String name; +} 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 d9b73ed..25c4a05 100644 --- a/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java +++ b/src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java @@ -1,11 +1,22 @@ package com.iflytop.gd.app.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iflytop.gd.app.mapper.DeviceParamConfigMapper; import com.iflytop.gd.app.model.entity.DeviceParamConfig; +import com.iflytop.gd.app.model.vo.DeviceParamGroupVO; +import com.iflytop.gd.app.model.vo.ModuleIdVO; +import com.iflytop.gd.app.model.vo.RegIndexVO; +import com.iflytop.gd.infrastructure.drivers.ModuleId; +import com.iflytop.gd.infrastructure.drivers.RegIndex; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * 设备参数配置服务 */ @@ -13,4 +24,79 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class DeviceParamConfigService extends ServiceImpl { private final DeviceParamConfigMapper deviceParamConfigMapper; + + /** + * 按 ModuleId 分组,列出每个模块下的 regIndex + regVal + */ + public List listGroupedByModule() { + // 拉取所有配置记录 + List all = this.list(); + + // 按 mid 分组 + Map> grouped = all.stream() + .collect(Collectors.groupingBy(DeviceParamConfig::getMid)); + + // 构造 VO 列表 + return grouped.entrySet().stream() + .map(entry -> { + String moduleId = entry.getKey(); + List items = entry.getValue().stream() + .map(cfg -> new DeviceParamGroupVO.ParamItem( + cfg.getRegIndex(), + cfg.getRegVal() + )) + .collect(Collectors.toList()); + return new DeviceParamGroupVO(moduleId, items); + }) + .collect(Collectors.toList()); + } + + /** + * 根据模块标识和寄存器索引查询设备参数配置 + * + * @param moduleId 模块枚举 + * @param regIndex 寄存器索引 + * @return 唯一匹配的 DeviceParamConfig,找不到返回 null + */ + public DeviceParamConfig getByModuleAndReg(ModuleId moduleId, RegIndex regIndex) { + return deviceParamConfigMapper.selectOne( + new LambdaQueryWrapper() + .eq(DeviceParamConfig::getMid, moduleId.name()) + .eq(DeviceParamConfig::getRegIndex, regIndex.name()) + ); + } + + /** + * 列出所有 ModuleId,返回 VO 列表 + * + * @return List + */ + public List listAllModuleIds() { + return Arrays.stream(ModuleId.values()) + .map(e -> new ModuleIdVO( + e.name(), // 枚举常量名 + e.name // 描述字段 + )) + .collect(Collectors.toList()); + } + + /** + * 列出所有寄存器索引枚举,返回 VO 列表 + * + * @return List + */ + public List listAllRegIndices() { + return Arrays.stream(RegIndex.values()) + .map(e -> new RegIndexVO( + e.name() // 枚举常量名 + )) + .collect(Collectors.toList()); + } + + public boolean deleteDeviceParam(String idsStr) { + List ids = Arrays.stream(idsStr.split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + return this.removeByIds(ids); + } }