Browse Source

fix:设备参数配置

master
王梦远 2 months ago
parent
commit
aef2d570dd
  1. 121
      src/main/java/com/iflytop/sgs/app/controller/DeviceParamController.java

121
src/main/java/com/iflytop/sgs/app/controller/DeviceParamController.java

@ -0,0 +1,121 @@
package com.iflytop.sgs.app.controller;
import com.iflytop.sgs.app.model.entity.DeviceParamConfig;
import com.iflytop.sgs.app.model.vo.DeviceParamGroupVO;
import com.iflytop.sgs.app.model.vo.ModuleIdVO;
import com.iflytop.sgs.app.model.vo.RegIndexVO;
import com.iflytop.sgs.app.service.api.DeviceParamConfigService;
import com.iflytop.sgs.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.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
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>> getList() {
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> delete(@Parameter(description = "矿石ID,多个以英文逗号(,)分割") @PathVariable String ids) {
boolean isSuccess = deviceParamConfigService.deleteDeviceParam(ids);
if (isSuccess) {
return Result.success();
}
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();
}
}
Loading…
Cancel
Save