From 59aad2c89c87ee4ef4410b69a8c2734ac05d8266 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Fri, 29 Aug 2025 16:07:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/common/config/GeneralInfo.java | 6 ++ .../java/com/njcn/oss/constant/OssPath.java | 11 +++ .../com/njcn/oss/utils/FileStorageUtil.java | 78 ++++++++++++++++++- .../njcn/device/biz/enums/RunFlagEnum.java | 14 +++- .../njcn/device/biz/utils/COverlimitUtil.java | 5 +- .../service/impl/TerminalBaseServiceImpl.java | 2 +- 6 files changed, 109 insertions(+), 7 deletions(-) diff --git a/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java b/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java index a3f4eda05..40a48b0a5 100644 --- a/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java +++ b/pqs-common/common-core/src/main/java/com/njcn/common/config/GeneralInfo.java @@ -36,6 +36,12 @@ public class GeneralInfo { @Value("${business.tempPath}") private String businessTempPath; + /** + * 本地存储目录 + */ + @Value("${business.localStoragePath:f:\\localStoragePath}") + private String localStorePath; + /*** * 文件存储方式 * 1:本地磁盘 diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java index 1cf97845b..65bdd4035 100644 --- a/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java +++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/constant/OssPath.java @@ -156,4 +156,15 @@ public interface OssPath { */ String DATA_CLEAN="dataClean/"; + + + /*** + * 组态Json文件oss路径 + */ + String CONFIGURATIONPATH = "configuration/"; + /*** + * 组态Json文件oss文件名 + */ + String CONFIGURATIONNAME = "configuration.json"; + } diff --git a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java index aa1adc877..cbdaf06c1 100644 --- a/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java +++ b/pqs-common/common-oss/src/main/java/com/njcn/oss/utils/FileStorageUtil.java @@ -1,6 +1,7 @@ package com.njcn.oss.utils; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.UUID; import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.huawei.obs.util.OBSUtil; @@ -24,6 +25,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -72,7 +78,7 @@ public class FileStorageUtil { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { filePath = dir + minIoUtils.minFileName(multipartFile.getOriginalFilename()); obsUtil.uploadMultipart(multipartFile, filePath); - } else { + } else if(generalInfo.getBusinessFileStorage() == GeneralConstant.MINIO_OSS){ try { //把名称存入数据 MinIoUploadResDTO minIoUploadResDTO = minIoUtils.upload(multipartFile, minIossProperties.getBucket(), dir); @@ -80,6 +86,30 @@ public class FileStorageUtil { } catch (Exception e) { throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR); } + }else { + try { + // 确保目录存在 + Path uploadPath = Paths.get(generalInfo.getLocalStorePath()); + if (!Files.exists(uploadPath)) { + Files.createDirectories(uploadPath); + } + + // 生成本地文件名(可以添加时间戳或UUID防止重名) + String originalFilename = multipartFile.getOriginalFilename(); + String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")); + String newFilename = UUID.randomUUID().toString() + fileExtension; + + // 构建完整路径 + Path filePathPath = uploadPath.resolve(newFilename); + + // 保存文件 + multipartFile.transferTo(filePathPath.toFile()); + + // 返回相对路径或完整路径,根据需求调整 + filePath = dir + File.separator + newFilename; + } catch (IOException e) { + throw new BusinessException("本地文件上传失败: " + e.getMessage()); + } } return filePath; } @@ -122,7 +152,7 @@ public class FileStorageUtil { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { filePath = dir + minIoUtils.minFileName(fileName); obsUtil.uploadStream(inputStream, filePath); - } else { + } else if (generalInfo.getBusinessFileStorage() == GeneralConstant.MINIO_OSS){ try { //把名称存入数据 MinIoUploadResDTO minIoUploadResDTO = minIoUtils.uploadStream(inputStream, minIossProperties.getBucket(), dir, minIoUtils.minFileName(fileName)); @@ -130,6 +160,33 @@ public class FileStorageUtil { } catch (Exception e) { throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR); } + }else { + // 本地存储逻辑 + try { + // 1. 获取本地存储路径 + String localStoragePath = generalInfo.getLocalStorePath(); + + // 2. 确保目录存在(如果不存在则创建) + File targetDir = new File(localStoragePath +File.separator+ dir); + if (!targetDir.exists()) { + boolean created = targetDir.mkdirs(); + if (!created) { + throw new IOException("本地文档目录创建失败: " + targetDir.getAbsolutePath()); + } + } + + // 3. 生成最终文件路径 + String finalFileName = minIoUtils.minFileName(fileName); // 可选:是否重命名文件 + File targetFile = new File(targetDir, finalFileName); + + // 4. 写入文件(使用 try-with-resources 确保流关闭) + Files.copy(inputStream, targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + + // 5. 返回相对路径 + filePath = dir + finalFileName; + } catch (IOException e) { + throw new BusinessException(OssResponseEnum.UPLOAD_FILE_ERROR,e.getMessage()); + } } return filePath; } @@ -185,8 +242,11 @@ public class FileStorageUtil { try { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { inputStream = obsUtil.downloadStream(filePath); - } else { + } else if(generalInfo.getBusinessFileStorage() == GeneralConstant.MINIO_OSS) { inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath); + }else { + Path path = Paths.get(generalInfo.getLocalStorePath()+File.separator+filePath); + inputStream = Files.newInputStream(path); } } catch (Exception exception) { throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); @@ -206,8 +266,18 @@ public class FileStorageUtil { try { if (generalInfo.getBusinessFileStorage() == GeneralConstant.HUAWEI_OBS) { inputStream = obsUtil.downloadStream(filePath); - } else { + } else if(generalInfo.getBusinessFileStorage() == GeneralConstant.MINIO_OSS){ inputStream = minIoUtils.downloadStream(minIossProperties.getBucket(), filePath); + }else { + // 本地存储处理 + Path path = Paths.get(generalInfo.getLocalStorePath()+File.separator+filePath); + System.out.println("下载文件路径:"+generalInfo.getLocalStorePath()+File.separator+filePath); + inputStream = Files.newInputStream(path); + + // 设置下载文件名(从路径中提取) + String fileName = path.getFileName().toString(); + response.setHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); } } catch (Exception exception) { throw new BusinessException(OssResponseEnum.DOWNLOAD_FILE_STREAM_ERROR); diff --git a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/enums/RunFlagEnum.java b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/enums/RunFlagEnum.java index 72c8ce892..6729de403 100644 --- a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/enums/RunFlagEnum.java +++ b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/enums/RunFlagEnum.java @@ -16,7 +16,19 @@ public enum RunFlagEnum { CHECK(1, "检修"), STOP(2, "停运"), TEST(3, "调试"), - QUIT(4, "退运"); + QUIT(4, "退运"), + + + + + + + + GW_FLAG(0,"主网"), + PW_FLAG(1,"配网"), + + + ; /** * 状态 diff --git a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/utils/COverlimitUtil.java b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/utils/COverlimitUtil.java index 82d4f368b..1cfd630b4 100644 --- a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/utils/COverlimitUtil.java +++ b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/utils/COverlimitUtil.java @@ -1,10 +1,13 @@ package com.njcn.device.biz.utils; +import com.njcn.device.biz.enums.RunFlagEnum; import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.system.enums.DicDataEnum; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Objects; + /** * pqs @@ -50,7 +53,7 @@ public class COverlimitUtil { threeVoltageUnbalance(overlimit); interharmonicCurrent(overlimit,voltageLevel); - if(lineType == 1) { + if(Objects.equals(lineType, RunFlagEnum.PW_FLAG.getStatus())) { //配网 Float[] iHarmTem = new Float[49]; for (int i = 0; i <= 48; i++) { diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java index 1d64edcbe..2bac34db4 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java @@ -2947,7 +2947,7 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple DictData dictData = dicDataFeignClient.getDicDataByNameAndTypeName(terminalBaseExcel.getSubvScale(), DicDataTypeEnum.DEV_VOLTAGE_STAND.getName()).getData(); lineDetailMapper.insert(lineDetail); - Overlimit overlimit = new Overlimit(temp.getId(), dictData.getValue(), terminalBaseExcel.getShortCapacity(), terminalBaseExcel.getStandardCapacity(), terminalBaseExcel.getDealCapacity(), terminalBaseExcel.getDevCapacity()); + Overlimit overlimit = COverlimitUtil.globalAssemble(Float.parseFloat(dictData.getValue()),terminalBaseExcel.getDealCapacity(),terminalBaseExcel.getDevCapacity(),terminalBaseExcel.getShortCapacity(),null,null); overlimit.setId(temp.getId()); overlimitMapper.insert(overlimit); }