Browse Source

feat:设备参数配置相关接口与方法

tags/freeze
白凤吉 3 months ago
parent
commit
1f32999d27
  1. 77
      src/main/java/com/iflytop/gd/app/controller/DeviceParamController.java
  2. 4
      src/main/java/com/iflytop/gd/app/model/entity/DeviceParamConfig.java
  3. 36
      src/main/java/com/iflytop/gd/app/model/vo/DeviceParamGroupVO.java
  4. 18
      src/main/java/com/iflytop/gd/app/model/vo/ModuleIdVO.java
  5. 16
      src/main/java/com/iflytop/gd/app/model/vo/RegIndexVO.java
  6. 86
      src/main/java/com/iflytop/gd/app/service/DeviceParamConfigService.java

77
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<List<DeviceParamGroupVO>> listGroupedParams() {
List<DeviceParamGroupVO> vos = deviceParamConfigService.listGroupedByModule();
return Result.success(vos);
}
@Operation(summary = "获取所有设备模块")
@GetMapping("/modules")
public Result<List<ModuleIdVO>> listAllModules() {
List<ModuleIdVO> vos = deviceParamConfigService.listAllModuleIds();
return Result.success(vos);
}
@Operation(summary = "获取所有设备模块配置项")
@GetMapping("/reg-indices")
public Result<List<RegIndexVO>> listAllRegIndices() {
List<RegIndexVO> vos = deviceParamConfigService.listAllRegIndices();
return Result.success(vos);
}
@Operation(summary = "添加新配置")
@PostMapping("")
public Result<String> add(@Valid @RequestBody DeviceParamConfig deviceParamConfig) {
deviceParamConfigService.save(deviceParamConfig);
return Result.success();
}
@Operation(summary = "修改配置")
@PutMapping("")
public Result<String> update(@Valid @RequestBody DeviceParamConfig deviceParamConfig) {
deviceParamConfigService.updateById(deviceParamConfig);
return Result.success();
}
@Operation(summary = "删除配置")
@DeleteMapping("/{ids}")
public Result<String> deleteOres(@Parameter(description = "矿石ID,多个以英文逗号(,)分割") @PathVariable String ids) {
boolean isSuccess = deviceParamConfigService.deleteDeviceParam(ids);
if (isSuccess) {
return Result.success();
}
return Result.failed();
}
}

4
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;

36
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<ParamItem> reg;
public DeviceParamGroupVO(String mid, List<ParamItem> 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;
}
}

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

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

86
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<DeviceParamConfigMapper, DeviceParamConfig> {
private final DeviceParamConfigMapper deviceParamConfigMapper;
/**
* ModuleId 分组列出每个模块下的 regIndex + regVal
*/
public List<DeviceParamGroupVO> listGroupedByModule() {
// 拉取所有配置记录
List<DeviceParamConfig> all = this.list();
// mid 分组
Map<String, List<DeviceParamConfig>> grouped = all.stream()
.collect(Collectors.groupingBy(DeviceParamConfig::getMid));
// 构造 VO 列表
return grouped.entrySet().stream()
.map(entry -> {
String moduleId = entry.getKey();
List<DeviceParamGroupVO.ParamItem> 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<DeviceParamConfig>()
.eq(DeviceParamConfig::getMid, moduleId.name())
.eq(DeviceParamConfig::getRegIndex, regIndex.name())
);
}
/**
* 列出所有 ModuleId返回 VO 列表
*
* @return List<ModuleIdVO>
*/
public List<ModuleIdVO> listAllModuleIds() {
return Arrays.stream(ModuleId.values())
.map(e -> new ModuleIdVO(
e.name(), // 枚举常量名
e.name // 描述字段
))
.collect(Collectors.toList());
}
/**
* 列出所有寄存器索引枚举返回 VO 列表
*
* @return List<RegIndexVO>
*/
public List<RegIndexVO> listAllRegIndices() {
return Arrays.stream(RegIndex.values())
.map(e -> new RegIndexVO(
e.name() // 枚举常量名
))
.collect(Collectors.toList());
}
public boolean deleteDeviceParam(String idsStr) {
List<Long> ids = Arrays.stream(idsStr.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
return this.removeByIds(ids);
}
}
Loading…
Cancel
Save