diff --git a/src/main/java/com/iflytop/sgs/app/controller/DeviceParamController.java b/src/main/java/com/iflytop/sgs/app/controller/DeviceParamController.java new file mode 100644 index 0000000..a826cc1 --- /dev/null +++ b/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> getList() { + 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 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 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(); + } + +}