diff --git a/pqs-common/common-minio/pom.xml b/pqs-common/common-minio/pom.xml
new file mode 100644
index 000000000..17fba24b2
--- /dev/null
+++ b/pqs-common/common-minio/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ pqs-common
+ com.njcn
+ 1.0.0
+
+ 4.0.0
+ common-minio
+ minioss的公共信息
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ com.njcn
+ common-core
+ ${project.version}
+
+
+ com.njcn
+ common-web
+ ${project.version}
+
+
+ me.tongfei
+ progressbar
+
+
+ com.squareup.okhttp3
+ okhttp
+
+
+ io.minio
+ minio
+
+
+ com.squareup.okhttp3
+ okhttp
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/MinIoUploadResDTO.java b/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/MinIoUploadResDTO.java
new file mode 100644
index 000000000..6447b79a5
--- /dev/null
+++ b/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/MinIoUploadResDTO.java
@@ -0,0 +1,24 @@
+package com.njcn.minio.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2022年10月16日 18:40
+ */
+@Data
+public class MinIoUploadResDTO implements Serializable {
+
+ private static final long serialVersionUID = 475040120689218785L;
+ private String minFileName;
+ private String minFileUrl;
+
+ public MinIoUploadResDTO(String minFileName, String minFileUrl) {
+ this.minFileName = minFileName;
+ this.minFileUrl = minFileUrl;
+ }
+
+}
diff --git a/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/Result.java b/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/Result.java
new file mode 100644
index 000000000..4e466f4d0
--- /dev/null
+++ b/pqs-common/common-minio/src/main/java/com/njcn/minio/bo/Result.java
@@ -0,0 +1,104 @@
+package com.njcn.minio.bo;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2022年10月16日 18:41
+ */
+public class Result implements Serializable {
+
+ private static final long serialVersionUID = 6273326371984994386L;
+ private Integer code;
+ private String msg;
+ private T data;
+
+ private Result() {
+ this.code = 200;
+ this.msg = "OK";
+ }
+
+ private Result(T data) {
+ this.code = 200;
+ this.msg = "OK";
+ this.setData(data);
+ }
+
+ private Result(Integer code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ private Result(Integer code, String msg, T data) {
+ this.code = code;
+ this.msg = msg;
+ this.data = data;
+ }
+
+ public Result setError(Integer code, String msg) {
+ this.setCode(code);
+ this.setMsg(msg);
+ return this;
+ }
+
+ public boolean isSuccess() {
+ return this.getCode().equals(200);
+ }
+
+ public static Result ok() {
+ return new Result();
+ }
+
+ public static Result ok(T data) {
+ return new Result(data);
+ }
+
+ public static Result ok(Integer code, String msg) {
+ return new Result(code, msg);
+ }
+
+ public static Result ok(Integer code, String msg, T data) {
+ return new Result(code, msg, data);
+ }
+
+ public static Result error() {
+ return new Result(500, "failed");
+ }
+
+ public static Result error(String msg) {
+ return new Result(500, msg);
+ }
+
+ public static Result error(Integer code, String msg) {
+ return new Result(code, msg);
+ }
+
+ public static Result error(Integer code, String msg, T data) {
+ return new Result(code, msg, data);
+ }
+
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return this.msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getData() {
+ return this.data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+}
diff --git a/pqs-common/common-minio/src/main/java/com/njcn/minio/config/MinIoProperties.java b/pqs-common/common-minio/src/main/java/com/njcn/minio/config/MinIoProperties.java
new file mode 100644
index 000000000..08b22ed43
--- /dev/null
+++ b/pqs-common/common-minio/src/main/java/com/njcn/minio/config/MinIoProperties.java
@@ -0,0 +1,35 @@
+package com.njcn.minio.config;
+
+import io.minio.MinioClient;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2022年10月16日 18:37
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "min.io")
+public class MinIoProperties {
+
+ /**
+ * Minio 服务端ip
+ */
+ private String endpoint;
+
+ private String accessKey;
+
+ private String secretKey;
+
+ private String bucket;
+
+ @Bean
+ public MinioClient getMinioClient() {
+ return MinioClient.builder()
+ .endpoint(endpoint).credentials(accessKey, secretKey).build();
+ }
+}
diff --git a/pqs-common/common-minio/src/main/java/com/njcn/minio/utils/MinIoUtils.java b/pqs-common/common-minio/src/main/java/com/njcn/minio/utils/MinIoUtils.java
new file mode 100644
index 000000000..04237d254
--- /dev/null
+++ b/pqs-common/common-minio/src/main/java/com/njcn/minio/utils/MinIoUtils.java
@@ -0,0 +1,595 @@
+package com.njcn.minio.utils;
+
+import com.njcn.minio.bo.MinIoUploadResDTO;
+import com.njcn.minio.config.MinIoProperties;
+import io.minio.*;
+import io.minio.Result;
+import io.minio.http.Method;
+import io.minio.messages.Bucket;
+import io.minio.messages.DeleteError;
+import io.minio.messages.DeleteObject;
+import io.minio.messages.Item;
+import lombok.SneakyThrows;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.*;
+
+
+@Configuration
+@EnableConfigurationProperties({MinIoProperties.class})
+public class MinIoUtils {
+
+ @Resource
+ private MinioClient instance;
+
+ private static final String SEPARATOR_DOT = ".";
+
+ private static final String SEPARATOR_ACROSS = "-";
+
+ private static final String SEPARATOR_STR = "";
+
+ // 存储桶名称
+ private static final String chunkBucKet = "miniobucket";
+
+ /**
+ * 不排序
+ */
+ public final static boolean NOT_SORT = false;
+
+ /**
+ * 排序
+ */
+ public final static boolean SORT = true;
+
+ /**
+ * 默认过期时间(分钟)
+ */
+ private final static Integer DEFAULT_EXPIRY = 60;
+
+ /**
+ * 删除分片
+ */
+ public final static boolean DELETE_CHUNK_OBJECT = true;
+ /**
+ * 不删除分片
+ */
+ public final static boolean NOT_DELETE_CHUNK_OBJECT = false;
+
+ /**
+ * 判断桶是否存在
+ * @param bucketName 桶名
+ * @return boolean
+ * @author exe.wangtaotao
+ * @date 2020/10/21 16:33
+ */
+ public boolean bucketExists(String bucketName) {
+ try {
+ return instance.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+
+ /**
+ * 创建存储桶
+ * 创建 bucket
+ *
+ * @param bucketName 桶名
+ */
+ public void makeBucket(String bucketName) {
+ try {
+ boolean isExist = bucketExists(bucketName);
+ if (!isExist) {
+ instance.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @return java.util.List
+ * @Description 获取文件存储服务的所有存储桶名称
+ * @author exe.wangtaotao
+ * @date 2020/10/21 16:35
+ */
+ public List listBucketNames() {
+ List bucketList = listBuckets();
+ List bucketListName = new ArrayList<>();
+ for (Bucket bucket : bucketList) {
+ bucketListName.add(bucket.name());
+ }
+ return bucketListName;
+ }
+
+ /**
+ * @return java.util.List
+ * @Description 列出所有存储桶
+ */
+ @SneakyThrows
+ private List listBuckets() {
+ return instance.listBuckets();
+ }
+
+
+ /**
+ * 获取对象文件名称列表
+ *
+ * @param bucketName 存储桶名称
+ * @param prefix 对象名称前缀(文件夹 /xx/xx/xxx.jpg 中的 /xx/xx/)
+ * @return objectNames
+ */
+ public List listObjectNames(String bucketName, String prefix) {
+ return listObjectNames(bucketName, prefix, NOT_SORT);
+ }
+
+
+ /**
+ * 获取对象文件名称列表
+ *
+ * @param bucketName 存储桶名称
+ * @param prefix 对象名称前缀(文件夹 /xx/xx/xxx.jpg 中的 /xx/xx/)
+ * @param sort 是否排序(升序)
+ * @return objectNames
+ */
+ @SneakyThrows
+ public List listObjectNames(String bucketName, String prefix, Boolean sort) {
+ boolean flag = bucketExists(bucketName);
+ if (flag) {
+ ListObjectsArgs listObjectsArgs;
+ if (null == prefix) {
+ listObjectsArgs = ListObjectsArgs.builder()
+ .bucket(bucketName)
+ .recursive(true)
+ .build();
+ } else {
+ listObjectsArgs = ListObjectsArgs.builder()
+ .bucket(bucketName)
+ .prefix(prefix)
+ .recursive(true)
+ .build();
+ }
+ Iterable> chunks = instance.listObjects(listObjectsArgs);
+ List chunkPaths = new ArrayList<>();
+ for (Result- item : chunks) {
+ chunkPaths.add(item.get().objectName());
+ }
+ if (sort) {
+ chunkPaths.sort(new Str2IntComparator(false));
+ }
+ return chunkPaths;
+ }
+ return new ArrayList<>();
+ }
+
+ /**
+ * 在桶下创建文件夹,文件夹层级结构根据参数决定
+ *
+ * @param bucket 桶名称
+ * @param WotDir 格式为 xxx/xxx/xxx/
+ */
+ @SneakyThrows
+ public String createDirectory(String bucket, String WotDir) {
+ if (!this.bucketExists(bucket)) {
+ return null;
+ }
+ instance.putObject(PutObjectArgs.builder().bucket(bucket).object(WotDir).stream(
+ new ByteArrayInputStream(new byte[]{}), 0, -1)
+ .build());
+ return WotDir;
+ }
+
+
+ /**
+ * 删除一个文件
+ *
+ * @param bucketName 桶名称
+ * @param objectName /xx/xx/xxx.jpg
+ */
+ @SneakyThrows
+ public boolean removeObject(String bucketName, String objectName) {
+
+ if (!bucketExists(bucketName)) {
+ return false;
+ }
+ instance.removeObject(
+ RemoveObjectArgs.builder()
+ .bucket(bucketName)
+ .object(objectName)
+ .build());
+ return true;
+ }
+
+ /**
+ * @param bucketName 桶名称
+ * @param objectNames /xx/xx/xxx.jpg
+ * @return java.util.List
+ * @Description 删除指定桶的多个文件对象, 返回删除错误的对象列表,全部删除成功,返回空列表
+ * @author exe.wangtaotao
+ * @date 2020/10/21 16:43
+ */
+ @SneakyThrows
+ public List removeObjects(String bucketName, List objectNames) {
+ if (!bucketExists(bucketName)) {
+ return new ArrayList<>();
+ }
+ List deleteObjects = new ArrayList<>(objectNames.size());
+ for (String objectName : objectNames) {
+ deleteObjects.add(new DeleteObject(objectName));
+ }
+ List deleteErrorNames = new ArrayList<>();
+ Iterable> results = instance.removeObjects(
+ RemoveObjectsArgs.builder()
+ .bucket(bucketName)
+ .objects(deleteObjects)
+ .build());
+ for (Result result : results) {
+ DeleteError error = result.get();
+ deleteErrorNames.add(error.objectName());
+ }
+ return deleteErrorNames;
+ }
+
+
+ /**
+ * 获取访问对象的外链地址
+ * 获取文件的下载url
+ *
+ * @param bucketName 存储桶名称
+ * @param objectName 对象名称
+ * @param expiry 过期时间(分钟) 最大为7天 超过7天则默认最大值
+ * @return viewUrl
+ */
+ @SneakyThrows
+ public String getObjectUrl(String bucketName, String objectName, Integer expiry) {
+ expiry = expiryHandle(expiry);
+ return instance.getPresignedObjectUrl(
+ GetPresignedObjectUrlArgs.builder()
+ .method(Method.GET)
+ .bucket(bucketName)
+ .object(objectName)
+ .expiry(expiry)
+ .build()
+ );
+ }
+
+
+ /**
+ * 创建上传文件对象的外链
+ *
+ * @param bucketName 存储桶名称
+ * @param objectName 欲上传文件对象的名称
+ * @return uploadUrl
+ */
+ public String createUploadUrl(String bucketName, String objectName) {
+ return createUploadUrl(bucketName, objectName, DEFAULT_EXPIRY);
+ }
+
+ /**
+ * 创建上传文件对象的外链
+ *
+ * @param bucketName 存储桶名称
+ * @param objectName 欲上传文件对象的名称
+ * @param expiry 过期时间(分钟) 最大为7天 超过7天则默认最大值
+ * @return uploadUrl
+ */
+ @SneakyThrows
+ public String createUploadUrl(String bucketName, String objectName, Integer expiry) {
+ expiry = expiryHandle(expiry);
+ return instance.getPresignedObjectUrl(
+ GetPresignedObjectUrlArgs.builder()
+ .method(Method.PUT)
+ .bucket(bucketName)
+ .object(objectName)
+ .expiry(expiry)
+ .build()
+ );
+ }
+
+
+// /**
+// * 批量下载
+// *
+// * @param directory
+// * @return
+// */
+// @SneakyThrows
+// public List downLoadMore(String bucket, String directory) {
+// Iterable> objs = instance.listObjects(ListObjectsArgs.builder().bucket(bucket).prefix(directory).useUrlEncodingType(false).build());
+// List list = new ArrayList<>();
+// for (io.minio.Result
- result : objs) {
+// String objectName = null;
+// objectName = result.get().objectName();
+// ObjectStat statObject = instance.statObject(StatObjectArgs.builder().bucket(bucket).object(objectName).build());
+// if (statObject != null && statObject.length() > 0) {
+// String fileurl = instance.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucket).object(statObject.name()).method(Method.GET).build());
+// list.add(fileurl);
+// }
+// }
+// return list;
+// }
+//
+
+ /**
+ * @param multipartFile 文件
+ * @param bucketName 桶名
+ * @param directory image/
+ * @return java.lang.String
+ * @Description 文件上传
+ * @author exe.wangtaotao
+ * @date 2020/10/21 13:45
+ */
+ public MinIoUploadResDTO upload(MultipartFile multipartFile, String bucketName, String directory) throws Exception {
+ if (!this.bucketExists(bucketName)) {
+ this.makeBucket(bucketName);
+ }
+ InputStream inputStream = multipartFile.getInputStream();
+ directory = Optional.ofNullable(directory).orElse("");
+ String minFileName = directory + minFileName(multipartFile.getOriginalFilename());
+ //上传文件到指定目录
+ instance.putObject(PutObjectArgs.builder()
+ .bucket(bucketName)
+ .object(minFileName)
+ .contentType(multipartFile.getContentType())
+ .stream(inputStream, inputStream.available(), -1)
+ .build());
+ inputStream.close();
+ // 返回生成文件名、访问路径
+ return new MinIoUploadResDTO(minFileName, getObjectUrl(bucketName, minFileName, DEFAULT_EXPIRY));
+ }
+
+ /**
+ * @param response
+ * @return java.lang.String
+ * @Description 下载文件
+ * @author exe.wangtaotao
+ * @date 2020/10/21 15:18
+ */
+ public void download(HttpServletResponse response, String bucketName, String minFileName) throws Exception {
+ InputStream fileInputStream = instance.getObject(GetObjectArgs.builder()
+ .bucket(bucketName)
+ .object(minFileName).build());
+ response.setHeader("Content-Disposition", "attachment;filename=" + minFileName);
+ response.setContentType("application/force-download");
+ response.setCharacterEncoding("UTF-8");
+ IOUtils.copy(fileInputStream, response.getOutputStream());
+ }
+
+
+ /**
+ * 批量创建分片上传外链
+ *
+ * @param bucketName 存储桶名称
+ * @param objectMD5 欲上传分片文件主文件的MD5
+ * @param chunkCount 分片数量
+ * @return uploadChunkUrls
+ */
+ public List createUploadChunkUrlList(String bucketName, String objectMD5, Integer chunkCount) {
+ if (null == bucketName) {
+ bucketName = chunkBucKet;
+ }
+ if (null == objectMD5) {
+ return null;
+ }
+ objectMD5 += "/";
+ if (null == chunkCount || 0 == chunkCount) {
+ return null;
+ }
+ List urlList = new ArrayList<>(chunkCount);
+ for (int i = 1; i <= chunkCount; i++) {
+ String objectName = objectMD5 + i + ".chunk";
+ urlList.add(createUploadUrl(bucketName, objectName, DEFAULT_EXPIRY));
+ }
+ return urlList;
+ }
+
+ /**
+ * 创建指定序号的分片文件上传外链
+ *
+ * @param bucketName 存储桶名称
+ * @param objectMD5 欲上传分片文件主文件的MD5
+ * @param partNumber 分片序号
+ * @return uploadChunkUrl
+ */
+ public String createUploadChunkUrl(String bucketName, String objectMD5, Integer partNumber) {
+ if (null == bucketName) {
+ bucketName = chunkBucKet;
+ }
+ if (null == objectMD5) {
+ return null;
+ }
+ objectMD5 += "/" + partNumber + ".chunk";
+ return createUploadUrl(bucketName, objectMD5, DEFAULT_EXPIRY);
+ }
+
+
+ /**
+ * 获取分片文件名称列表
+ *
+ * @param bucketName 存储桶名称
+ * @param ObjectMd5 对象Md5
+ * @return objectChunkNames
+ */
+ public List listChunkObjectNames(String bucketName, String ObjectMd5) {
+ if (null == bucketName) {
+ bucketName = chunkBucKet;
+ }
+ if (null == ObjectMd5) {
+ return null;
+ }
+ return listObjectNames(bucketName, ObjectMd5, SORT);
+ }
+
+ /**
+ * 获取分片名称地址HashMap key=分片序号 value=分片文件地址
+ *
+ * @param bucketName 存储桶名称
+ * @param ObjectMd5 对象Md5
+ * @return objectChunkNameMap
+ */
+ public Map mapChunkObjectNames(String bucketName, String ObjectMd5) {
+ if (null == bucketName) {
+ bucketName = chunkBucKet;
+ }
+ if (null == ObjectMd5) {
+ return null;
+ }
+ List chunkPaths = listObjectNames(bucketName, ObjectMd5);
+ if (null == chunkPaths || chunkPaths.size() == 0) {
+ return null;
+ }
+ Map chunkMap = new HashMap<>(chunkPaths.size());
+ for (String chunkName : chunkPaths) {
+ Integer partNumber = Integer.parseInt(chunkName.substring(chunkName.indexOf("/") + 1, chunkName.lastIndexOf(".")));
+ chunkMap.put(partNumber, chunkName);
+ }
+ return chunkMap;
+ }
+
+
+ /**
+ * 合并分片文件成对象文件
+ *
+ * @param chunkBucKetName 分片文件所在存储桶名称
+ * @param composeBucketName 合并后的对象文件存储的存储桶名称
+ * @param chunkNames 分片文件名称集合
+ * @param objectName 合并后的对象文件名称
+ * @return true/false
+ */
+ @SneakyThrows
+ public boolean composeObject(String chunkBucKetName, String composeBucketName, List chunkNames, String objectName, boolean isDeleteChunkObject) {
+ if (null == chunkBucKetName) {
+ chunkBucKetName = chunkBucKet;
+ }
+ List sourceObjectList = new ArrayList<>(chunkNames.size());
+ for (String chunk : chunkNames) {
+ sourceObjectList.add(
+ ComposeSource.builder()
+ .bucket(chunkBucKetName)
+ .object(chunk)
+ .build()
+ );
+ }
+ instance.composeObject(
+ ComposeObjectArgs.builder()
+ .bucket(composeBucketName)
+ .object(objectName)
+ .sources(sourceObjectList)
+ .build()
+ );
+ if (isDeleteChunkObject) {
+ removeObjects(chunkBucKetName, chunkNames);
+ }
+ return true;
+ }
+
+ /**
+ * 合并分片文件成对象文件
+ *
+ * @param bucketName 存储桶名称
+ * @param chunkNames 分片文件名称集合
+ * @param objectName 合并后的对象文件名称
+ * @return true/false
+ */
+ public boolean composeObject(String bucketName, List chunkNames, String objectName) {
+ return composeObject(chunkBucKet, bucketName, chunkNames, objectName, NOT_DELETE_CHUNK_OBJECT);
+ }
+
+ /**
+ * 合并分片文件成对象文件
+ *
+ * @param bucketName 存储桶名称
+ * @param chunkNames 分片文件名称集合
+ * @param objectName 合并后的对象文件名称
+ * @return true/false
+ */
+ public boolean composeObject(String bucketName, List chunkNames, String objectName, boolean isDeleteChunkObject) {
+ return composeObject(chunkBucKet, bucketName, chunkNames, objectName, isDeleteChunkObject);
+ }
+
+ /**
+ * 合并分片文件,合并成功后删除分片文件
+ *
+ * @param bucketName 存储桶名称
+ * @param chunkNames 分片文件名称集合
+ * @param objectName 合并后的对象文件名称
+ * @return true/false
+ */
+ public boolean composeObjectAndRemoveChunk(String bucketName, List chunkNames, String objectName) {
+ return composeObject(chunkBucKet, bucketName, chunkNames, objectName, DELETE_CHUNK_OBJECT);
+ }
+
+
+ /**
+ * @param originalFileName 原始名称
+ * @return java.lang.String
+ * @Description 生成上传文件名
+ * @author exe.wangtaotao
+ * @date 2020/10/21 15:07
+ */
+ private String minFileName(String originalFileName) {
+ String suffix = originalFileName;
+ if (originalFileName.contains(SEPARATOR_DOT)) {
+ suffix = originalFileName.substring(originalFileName.lastIndexOf(SEPARATOR_DOT));
+ }
+ return UUID.randomUUID().toString().replace(SEPARATOR_ACROSS, SEPARATOR_STR).toUpperCase() + suffix;
+ }
+
+
+ /**
+ * 将分钟数转换为秒数
+ *
+ * @param expiry 过期时间(分钟数)
+ * @return expiry
+ */
+ private static int expiryHandle(Integer expiry) {
+ expiry = expiry * 60;
+ if (expiry > 604800) {
+ return 604800;
+ }
+ return expiry;
+ }
+
+ static class Str2IntComparator implements Comparator {
+ private final boolean reverseOrder; // 是否倒序
+
+ public Str2IntComparator(boolean reverseOrder) {
+ this.reverseOrder = reverseOrder;
+ }
+
+ @Override
+ public int compare(String arg0, String arg1) {
+ Integer intArg0 = Integer.parseInt(arg0.substring(arg0.indexOf("/") + 1, arg0.lastIndexOf(".")));
+ Integer intArg1 = Integer.parseInt(arg1.substring(arg1.indexOf("/") + 1, arg1.lastIndexOf(".")));
+ if (reverseOrder) {
+ return intArg1 - intArg0;
+ } else {
+ return intArg0 - intArg1;
+ }
+ }
+ }
+
+ /***
+ * 根据url地址获取对象名称
+ * @author hongawen
+ * @date 2022/10/17 20:05
+ * @param objectUrl 对象地址
+ * @return String 对象名称
+ */
+ public static String getObjectNameByUrl(String objectUrl) {
+ if(objectUrl.indexOf("?") < 0){
+ return "unknownFile";
+ }
+ String objectName = objectUrl.substring(0, objectUrl.indexOf("?"));
+ return objectName.substring(objectName.lastIndexOf("/") + 1);
+ }
+}
diff --git a/pqs-common/pom.xml b/pqs-common/pom.xml
index 7dfe0edd9..cfd3d1c8a 100644
--- a/pqs-common/pom.xml
+++ b/pqs-common/pom.xml
@@ -22,6 +22,7 @@
common-influxdb
common-poi
common-echarts
+ common-minio
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/Param.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/Param.java
index b83c5980b..f5d36619f 100644
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/Param.java
+++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/constant/Param.java
@@ -62,13 +62,4 @@ public interface Param {
String PHASIC_TYPE = "phasic_type";
String PARENT_ID = "0";
- /**
- * 算法处理
- */
- String TARGET_FREQ = "freq";
- String TARGET_RMS = "rms";
- String TARGET_RMS_LVR = "rms_lvr";
- String TARGET_V_THD = "v_thd";
- String TARGET_V_UNBALANCE = "v_unbalance";
-
}
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
index abb53039c..ad4859128 100644
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
+++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/enums/HarmonicResponseEnum.java
@@ -26,14 +26,7 @@ public enum HarmonicResponseEnum {
CUSTOM_TYPE("A00555","字典中未查询到报表模板类型"),
CUSTOM_REPORT_ACTIVE("A00556","不存在激活的自定义报告模板"),
CUSTOM_REPORT_EMPTY("A00557","自定义报表模板异常,模板数据为空"),
-
- ALGORITHM_LINE_EMPTY("A00558","算法监测点数据为空"),
- ALGORITHM_FREP_RULE("A00559","该监测点频率数据异常"),
- ALGORITHM_RMS_RULE("A00560","该监测点相变压数据异常"),
- ALGORITHM_RMS_LVR_RULE("A00561","该监测点线变压数据异常"),
- ALGORITHM_V_THD_RULE("A00562","该监测点电压总谐波畸变率数据异常"),
- ALGORITHM_V_UNBALANCE_RULE("A00563","该监测点负序电压不平衡度数据异常"),
- ALGORITHM_DATA_ERROR("A00564","未获取到data数据"),
+ CUSTOM_REPORT_FILE("A00558","上传文件服务器错误,请检查数据"),
;
private final String code;
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/AlgorithmSearchParam.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/AlgorithmSearchParam.java
deleted file mode 100644
index 213f0f6ef..000000000
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/AlgorithmSearchParam.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.njcn.harmonic.pojo.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * 算法通用查询参数
- *
- * @author qijian
- * @date 2022/10/26
- */
-@Data
-public class AlgorithmSearchParam {
-
- @ApiModelProperty(name = "id",value = "编号")
- private String id;
-
- @ApiModelProperty(name = "type",value = "时间类型")
- private Integer type;
-
- @ApiModelProperty(name = "datadate",value = "查询时间")
- private String datadate;
-
-
-}
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/DataV.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/DataV.java
deleted file mode 100644
index c3532cac6..000000000
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/DataV.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.njcn.harmonic.pojo.po;
-
-import lombok.Data;
-import org.influxdb.annotation.Column;
-import org.influxdb.annotation.Measurement;
-
-import java.time.Instant;
-
-/**
- * DataV influxDB别名映射表
- *
- * @author qijian
- * @version 1.0.0
- * @createTime 2022/10/27 15:27
- */
-@Data
-@Measurement(name = "data_v")
-public class DataV {
-
- @Column(name = "time")
- private Instant time;
-
- @Column(name = "line_id")
- private String lineId;
-
- @Column(name = "freq_max")
- private Double frepMAX;
-
- @Column(name = "freq_min")
- private Double frepMIN;
-
- @Column(name = "rms_max")
- private Double rmsMAX;
-
- @Column(name = "rms_min")
- private Double rmsMIN;
-
- @Column(name = "rms_lvr_max")
- private Double rmsLvrMAX;
-
- @Column(name = "rms_lvr_min")
- private Double rmsLvrMIN;
-
- @Column(name = "v_thd_max")
- private Double vThdMAX;
-
- @Column(name = "v_thd_min")
- private Double vThdMIN;
-
- @Column(name = "v_unbalance_max")
- private Double vUnbalanceMAX;
-
- @Column(name = "v_unbalance_min")
- private Double vUnbalanceMIN;
-
-}
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/PmsAbnormalRules.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/PmsAbnormalRules.java
deleted file mode 100644
index 3652ee8f8..000000000
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/PmsAbnormalRules.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.njcn.harmonic.pojo.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * (PmsAbnormalRules)实体类
- *
- * @author qijian
- * @since 2022-10-27 14:49:22
- */
-@Data
-@TableName(value = "pms_abnormal_rules")
-public class PmsAbnormalRules implements Serializable {
- private static final long serialVersionUID = -68797682413850371L;
- /**
- * 主键
- */
- private String id;
- /**
- * 规则类型(字典 0 数据异常 1......)
- */
- private Integer type;
- /**
- * 指标名称
- */
- private String targetName;
- /**
- * 对应字段
- */
- private String target;
- /**
- * 下限
- */
- private Double lowerLimit;
- /**
- * 上限
- */
- private Double upperLimit;
-
-}
-
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpIntegrityD.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpIntegrityD.java
deleted file mode 100644
index 02a7faf29..000000000
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpIntegrityD.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.njcn.harmonic.pojo.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * (RMpIntegrityD)实体类
- *
- * @author qijian
- * @since 2022-10-26 14:10:32
- */
-@Data
-@TableName(value = "r_mp_integrity_d")
-public class RMpIntegrityD implements Serializable {
- private static final long serialVersionUID = 320784653665837465L;
- /**
- * 监测点id
- */
- private String measurementPointId;
- /**
- * 生成数据的时间,每天统计一次
- */
- private Date dataDate;
- /**
- * 有效接入分钟数量
- */
- private Integer effectiveMinuteCount;
- /**
- * 频率平均值指标数据个数
- */
- private Integer freqCount;
- /**
- * 相电压有效值平均值指标数据个数
- */
- private Integer phaseVoltageCount;
- /**
- * 线电压有效值平均值指标数据个数
- */
- private Integer lineVoltageCount;
- /**
- * 电压总谐波畸变率平均值指标数据个数
- */
- private Integer vThdCount;
- /**
- * 三相电压不平衡度平均值指标数据个数
- */
- private Integer unbalanceCount;
- /**
- * 监测点短时闪变、电压波动类指标数据个数
- */
- private Integer pstCount;
- /**
- * 监测点长时闪变指标数据个数
- */
- private Integer pltCount;
-
-}
-
diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatAbnormalD.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatAbnormalD.java
deleted file mode 100644
index a7e8d5d49..000000000
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatAbnormalD.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.njcn.harmonic.pojo.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * (RStatAbnormalD)实体类
- *
- * @author qijian
- * @since 2022-10-27 14:49:43
- */
-@Data
-@TableName(value = "r_stat_abnormal_d")
-public class RStatAbnormalD implements Serializable {
- private static final long serialVersionUID = 130540916944391303L;
- /**
- * 时间
- */
- private Date dataDate;
- /**
- * 监测点ID
- */
- private String measurementPointId;
- /**
- * 数据是否异常(0异常,1正常)
- */
- private Integer valueAlarm;
-
-}
-
diff --git a/pqs-harmonic/harmonic-boot/pom.xml b/pqs-harmonic/harmonic-boot/pom.xml
index 12fae3af9..b896515f6 100644
--- a/pqs-harmonic/harmonic-boot/pom.xml
+++ b/pqs-harmonic/harmonic-boot/pom.xml
@@ -60,6 +60,11 @@
event-api
${project.version}
+
+ com.njcn
+ common-minio
+ ${project.version}
+
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataExceptionController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataExceptionController.java
deleted file mode 100644
index da726468f..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataExceptionController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.njcn.harmonic.controller;
-
-import com.njcn.common.pojo.annotation.OperateInfo;
-import com.njcn.common.pojo.enums.common.LogEnum;
-import com.njcn.common.pojo.enums.response.CommonResponseEnum;
-import com.njcn.common.pojo.response.HttpResult;
-import com.njcn.common.utils.HttpResultUtil;
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-import com.njcn.harmonic.service.DataExceptionService;
-import com.njcn.web.controller.BaseController;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author qijian
- * @date 2022/10/26
- * 数据是否异常
- */
-@Validated
-@Slf4j
-@RestController
-@RequestMapping("/dataException")
-@Api(tags = "数据是否异常")
-@AllArgsConstructor
-public class DataExceptionController extends BaseController {
-
- private final DataExceptionService dataExceptionService;
-
- @OperateInfo(info = LogEnum.BUSINESS_COMMON)
- @PostMapping("/lineDataException")
- @ApiOperation("监测点数据是否异常")
- @ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true)
- public HttpResult lineDataException(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) {
- String methodDescribe = getMethodDescribe("lineDataException");
- boolean res = dataExceptionService.lineDataException(algorithmSearchParam);
- if(res){
- return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
- }else {
- return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
- }
-
- }
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataIntegrityRateController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataIntegrityRateController.java
deleted file mode 100644
index 4d6a72e35..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/DataIntegrityRateController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.njcn.harmonic.controller;
-
-import com.njcn.common.pojo.annotation.OperateInfo;
-import com.njcn.common.pojo.enums.common.LogEnum;
-import com.njcn.common.pojo.enums.response.CommonResponseEnum;
-import com.njcn.common.pojo.response.HttpResult;
-import com.njcn.common.utils.HttpResultUtil;
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-import com.njcn.harmonic.service.DataIntegrityRateService;
-import com.njcn.web.controller.BaseController;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author qijian
- * @date 2022/10/26
- * 数据完整率算法
- */
-@Validated
-@Slf4j
-@RestController
-@RequestMapping("/dataIntegrityRate")
-@Api(tags = "数据完整率算法")
-@AllArgsConstructor
-public class DataIntegrityRateController extends BaseController {
-
- private final DataIntegrityRateService dataIntegrityRateService;
-
- @OperateInfo(info = LogEnum.BUSINESS_COMMON)
- @PostMapping("/lineDataIntegrityRate")
- @ApiOperation("监测点日数据完整率")
- @ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true)
- public HttpResult lineDataIntegrityRate(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) {
- String methodDescribe = getMethodDescribe("lineDataIntegrityRate");
- boolean res = dataIntegrityRateService.lineDataIntegrityRate(algorithmSearchParam);
- if(res){
- return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
- }else {
- return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
- }
-
- }
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java
index 5e367db50..7496ae099 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/PollutionSubstationController.java
@@ -6,8 +6,13 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.common.utils.LogUtil;
+import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
+import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
+import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
+import com.njcn.harmonic.pojo.vo.PollutionVO;
+import com.njcn.harmonic.service.IPollutionService;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -41,6 +46,9 @@ public class PollutionSubstationController extends BaseController {
private final PollutionSubstationService pollutionSubstationService;
+ private final IPollutionService pollutionService;
+
+
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPollutionSubstationData")
@ApiOperation("按变电站及指标类型展示污染")
@@ -52,5 +60,37 @@ public class PollutionSubstationController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult (CommonResponseEnum.SUCCESS, list, methodDescribe);
}
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/deptSubstationRelations")
+ @ApiOperation("污区图-部门变电站关系")
+ @ApiImplicitParam(name = "param", value = "实体参数", required = true)
+ public HttpResult
> deptSubstationRelations(@RequestBody HarmonicPublicParam param) {
+ String methodDescribe = getMethodDescribe("deptSubstationRelations");
+ LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
+ List list = pollutionSubstationService.getDeptSubstationRelations(param);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/getSubstationInfoById")
+ @ApiOperation("污区图-根据部门获取变电站详情")
+ @ApiImplicitParam(name = "param", value = "部门参数", required = true)
+ public HttpResult> getSubstationInfoById(@RequestBody HarmonicPublicParam param) {
+ String methodDescribe = getMethodDescribe("getSubstationInfoById");
+ LogUtil.njcnDebug(log, "{},部门参数:{}", methodDescribe, param);
+ List list = pollutionSubstationService.getSubstationInfoById(param);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/getLineInfoById")
+ @ApiOperation("污区图-根据变电站获取监测点详情")
+ @ApiImplicitParam(name = "param", value = "变电站参数", required = true)
+ public HttpResult> getLineInfoById(@RequestBody HarmonicPublicParam param) {
+ String methodDescribe = getMethodDescribe("getLineInfoById");
+ LogUtil.njcnDebug(log, "{},变电站参数:{}", methodDescribe, param);
+ List list = pollutionSubstationService.getLineInfoById(param);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/PmsAbnormalRulesMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/PmsAbnormalRulesMapper.java
deleted file mode 100644
index c0432d6a7..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/PmsAbnormalRulesMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.njcn.harmonic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.njcn.harmonic.pojo.po.PmsAbnormalRules;
-
-/**
- * PmsAbnormalRulesMapper
- *
- * @author qijian
- * @date 2022/10/26
- */
-public interface PmsAbnormalRulesMapper extends BaseMapper {
-
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RMpIntegrityDMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RMpIntegrityDMapper.java
deleted file mode 100644
index 908c761fd..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RMpIntegrityDMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.njcn.harmonic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.njcn.harmonic.pojo.po.RMpIntegrityD;
-
-/**
- * RMpIntegrityDMapper
- *
- * @author qijian
- * @date 2022/10/26
- */
-public interface RMpIntegrityDMapper extends BaseMapper {
-
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatAbnormalDMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatAbnormalDMapper.java
deleted file mode 100644
index 47464fd72..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatAbnormalDMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.njcn.harmonic.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.njcn.harmonic.pojo.po.RStatAbnormalD;
-
-/**
- * RStatAbnormalDMapper
- *
- * @author qijian
- * @date 2022/10/26
- */
-public interface RStatAbnormalDMapper extends BaseMapper {
-
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
index 92f9631a3..b9c946367 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/CustomReportService.java
@@ -31,7 +31,7 @@ public interface CustomReportService {
* @author qijian
* @date 2022/10/18
*/
- boolean updateCustomReportTemplate(ReportTemplateParam reportTemplateParam);
+ boolean updateCustomReportTemplate(ReportTemplateParam.UpdateReportTemplateParam reportTemplateParam);
/**
* 根据id获取模板
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataExceptionService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataExceptionService.java
deleted file mode 100644
index 3fe269b18..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataExceptionService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.njcn.harmonic.service;
-
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-
-/**
- * 数据是否异常
- *
- * @author qijian
- * @version 1.0.0
- * @createTime 2022/10/26 - 10:09
- */
-public interface DataExceptionService {
-
- /**
- * 监测点数据是否异常
- * @author qijian
- * @date 2022/10/26
- */
- boolean lineDataException(AlgorithmSearchParam algorithmSearchParam);
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataIntegrityRateService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataIntegrityRateService.java
deleted file mode 100644
index 8fcbec654..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/DataIntegrityRateService.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.njcn.harmonic.service;
-
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-
-/**
- * 数据完整率算法
- *
- * @author qijian
- * @version 1.0.0
- * @createTime 2022/10/26 - 10:09
- */
-public interface DataIntegrityRateService {
-
- /**
- * 监测点日数据完整率
- * @author qijian
- * @date 2022/10/26
- */
- boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam);
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java
index eaa2cc6cd..95ce639d2 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/PollutionSubstationService.java
@@ -1,9 +1,13 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
+import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
+import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
+import com.njcn.harmonic.pojo.vo.PollutionVO;
import java.util.List;
/**
@@ -26,4 +30,29 @@ public interface PollutionSubstationService extends IService getPollutionSubstationData(PollutionSubstationQuryParam pollutionSubstationQuryParam);
+ /**
+ * @Description: getDeptSubstationRelations
+ * @Param: [param]
+ * @return: java.util.List
+ * @Author: clam
+ * @Date: 2022/11/3
+ */
+ List getDeptSubstationRelations(HarmonicPublicParam param);
+ /**
+ * @Description: getSubstationInfoById
+ * @Param: [param]
+ * @return: java.util.List
+ * @Author: clam
+ * @Date: 2022/11/3
+ */
+ List getSubstationInfoById(HarmonicPublicParam param);
+
+ /**
+ * @Description: getLineInfoById
+ * @Param: [param]
+ * @return: java.util.List
+ * @Author: clam
+ * @Date: 2022/11/3
+ */
+ List getLineInfoById(HarmonicPublicParam param);
}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
index 40b88d042..c6bd76aff 100644
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
+++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/CustomReportServiceImpl.java
@@ -7,6 +7,7 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.harmonic.enums.HarmonicResponseEnum;
@@ -29,19 +30,30 @@ import com.njcn.influxdb.config.InfluxDbConfig;
import com.njcn.influxdb.param.InfluxDBSqlConstant;
import com.njcn.influxdb.param.InfluxDBTableConstant;
import com.njcn.influxdb.utils.InfluxDbUtils;
+import com.njcn.minio.bo.MinIoUploadResDTO;
+import com.njcn.minio.config.MinIoProperties;
+import com.njcn.minio.utils.MinIoUtils;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.web.utils.WebUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.BeanUtils;
+import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
+import java.io.*;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -75,6 +87,14 @@ public class CustomReportServiceImpl implements CustomReportService {
private final DeptTempMapper deptTempMapper;
+ private final GeneralInfo generalInfo;
+
+ @Resource
+ private MinIoUtils minIoUtils;
+
+ @Resource
+ private MinIoProperties minIoProperties;
+
@Resource
private InfluxDbConfig influxDbConfig;
@@ -89,6 +109,10 @@ public class CustomReportServiceImpl implements CustomReportService {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
}
+ //文件上传到Minio服务器,存入文件名
+ MinIoUploadResDTO minIoUploadResDTO = contentToMinio(reportTemplateParam.getContent());
+ reportTemplateParam.setContent(minIoUploadResDTO.getMinFileName());
+
//新增模板表
ExcelRptTemp excelRptTemp = new ExcelRptTemp();
BeanUtils.copyProperties(reportTemplateParam, excelRptTemp);
@@ -110,7 +134,7 @@ public class CustomReportServiceImpl implements CustomReportService {
}
@Override
- public boolean updateCustomReportTemplate(ReportTemplateParam reportTemplateParam) {
+ public boolean updateCustomReportTemplate(ReportTemplateParam.UpdateReportTemplateParam reportTemplateParam) {
checkName(reportTemplateParam, true);
//检验模板json数据规范
@@ -120,6 +144,14 @@ public class CustomReportServiceImpl implements CustomReportService {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
}
+ //删除之前的文件
+ ExcelRptTemp excelRptTempOld = excelRptTempMapper.selectById(reportTemplateParam.getId());
+ minIoUtils.removeObject(minIoProperties.getBucket(), excelRptTempOld.getContent());
+
+ //文件上传到Minio服务器,存入文件名
+ MinIoUploadResDTO minIoUploadResDTO = contentToMinio(reportTemplateParam.getContent());
+ reportTemplateParam.setContent(minIoUploadResDTO.getMinFileName());
+
//修改模板数据
ExcelRptTemp excelRptTemp = new ExcelRptTemp();
BeanUtils.copyProperties(reportTemplateParam, excelRptTemp);
@@ -159,10 +191,12 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override
public ExcelRptTemp getCustomReportTemplateById(String id) {
- return excelRptTempMapper.selectById(id);
+ ExcelRptTemp excelRptTemp = excelRptTempMapper.selectById(id);
+ String contentUrl = minIoUtils.getObjectUrl(minIoProperties.getBucket(), excelRptTemp.getContent(), 7 * 24 * 60 * 60);
+ excelRptTemp.setContent(contentUrl);
+ return excelRptTemp;
}
-
@Override
public List getTemplateList(ReportSearchParam reportSearchParam) {
return excelRptTempMapper.getReportTemplateList(reportSearchParam);
@@ -203,7 +237,9 @@ public class CustomReportServiceImpl implements CustomReportService {
List reportTemplateDTOList = new ArrayList<>();
JSONArray jsonArray = null;
try {
- jsonArray = JSONUtil.parseArray(excelRptTemp.getContent());
+ //通过文件服务器获取
+ String objectUrl = minIoUtils.getObjectUrl(minIoProperties.getBucket(), excelRptTemp.getContent(), 7 * 24 * 60 * 60);
+ jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
jsonArray.forEach(item -> {
JSONObject jsonObject = (JSONObject) item;
JSONArray itemArr = (JSONArray) jsonObject.get("celldata");
@@ -294,7 +330,9 @@ public class CustomReportServiceImpl implements CustomReportService {
});
}
- String content = jsonArray.toString();
+ //文件上传到Minio服务器,存入文件名
+ MinIoUploadResDTO minIoUploadResDTO = contentToMinio(jsonArray.toString());
+ String content = minIoUploadResDTO.getMinFileName();
//根据模板激活状态,判断是否进库(未激活不进库,已激活进库)
if (DataStateEnum.ENABLE.getCode().equals(reportSearchParam.getActivation())) {
//存入报表库
@@ -309,7 +347,7 @@ public class CustomReportServiceImpl implements CustomReportService {
excelRptMapper.insert(excelRpt);
}
- return content;
+ return minIoUtils.getObjectUrl(minIoProperties.getBucket(), content, 7 * 24 * 60 * 60);
}
@Override
@@ -468,4 +506,105 @@ public class CustomReportServiceImpl implements CustomReportService {
endList.add(data);
}
+ /**
+ * 上传文件到Minio
+ *
+ * @param content 文件
+ * @return 成功标记
+ */
+ private MinIoUploadResDTO contentToMinio(String content) {
+ //上传到minio
+ String businessTempPath = generalInfo.getBusinessTempPath();
+ File file = stringToFile(content, businessTempPath + File.separator + "a.json");
+ MultipartFile multiFile = getMultipartFile(file);
+ try {
+ //把名称存入数据
+ MinIoUploadResDTO upload = minIoUtils.upload(multiFile, minIoProperties.getBucket(), "report/");
+ return upload;
+ } catch (Exception e) {
+ throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_FILE);
+ }
+ }
+
+ /**
+ * 将字符串写入指定文件
+ *
+ * @param res 原字符串
+ * @param filePath 文件路径
+ * @return 成功标记
+ */
+ public File stringToFile(String res, String filePath) {
+ boolean flag = true;
+ BufferedReader bufferedReader = null;
+ BufferedWriter bufferedWriter = null;
+ File distFile = new File(filePath);
+ try {
+ if (!distFile.getParentFile().exists()){
+ distFile.getParentFile().mkdirs();
+ }
+ bufferedReader = new BufferedReader(new StringReader(res));
+ bufferedWriter = new BufferedWriter(new FileWriter(distFile));
+ //先清空
+ bufferedWriter.write("");
+ char buf[] = new char[1024]; //字符缓冲区
+ int len;
+ while ((len = bufferedReader.read(buf)) != -1) {
+ bufferedWriter.write(buf, 0, len);
+ }
+ bufferedWriter.flush();
+ bufferedReader.close();
+ bufferedWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (bufferedReader != null) {
+ try {
+ bufferedReader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return distFile;
+ }
+
+ /**
+ * 将文件转成Multipart
+ *
+ * @param file 文件
+ * @return 成功标记
+ */
+ private MultipartFile getMultipartFile(File file) {
+ FileItem item = new DiskFileItemFactory().createItem("file"
+ , MediaType.MULTIPART_FORM_DATA_VALUE
+ , true
+ , file.getName());
+ try (InputStream input = new FileInputStream(file);
+ OutputStream os = item.getOutputStream()) {
+ // 流转移
+ IOUtils.copy(input, os);
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Invalid file: " + e, e);
+ }
+
+ return new CommonsMultipartFile(item);
+ }
+
+ /**
+ * 将文件Url转成String
+ *
+ * @param objectUrl 文件url
+ * @return 成功标记
+ */
+ private String urlToString(String objectUrl) throws IOException {
+ URL url = new URL(objectUrl);
+ BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
+ StringBuffer buffer = new StringBuffer();
+ String line = " ";
+ while ((line = in.readLine()) != null){
+ buffer.append(line);
+ }
+ return buffer.toString();
+ }
+
}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataExceptionServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataExceptionServiceImpl.java
deleted file mode 100644
index c4ec703d6..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataExceptionServiceImpl.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.njcn.harmonic.service.impl;
-
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.njcn.common.pojo.exception.BusinessException;
-import com.njcn.device.pq.api.LineFeignClient;
-import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
-import com.njcn.harmonic.constant.Param;
-import com.njcn.harmonic.enums.HarmonicResponseEnum;
-import com.njcn.harmonic.mapper.PmsAbnormalRulesMapper;
-import com.njcn.harmonic.mapper.RStatAbnormalDMapper;
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-import com.njcn.harmonic.pojo.po.DataV;
-import com.njcn.harmonic.pojo.po.PmsAbnormalRules;
-import com.njcn.harmonic.pojo.po.RStatAbnormalD;
-import com.njcn.harmonic.service.DataExceptionService;
-import com.njcn.influxdb.config.InfluxDbConfig;
-import com.njcn.influxdb.param.InfluxDBPublicParam;
-import com.njcn.influxdb.param.InfluxDBSqlConstant;
-import com.njcn.influxdb.param.InfluxDBTableConstant;
-import com.njcn.influxdb.utils.InfluxDbUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.influxdb.dto.QueryResult;
-import org.influxdb.impl.InfluxDBResultMapper;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 数据是否异常
- *
- * @author qijian
- * @version 1.0.0
- * @createTime 2022/10/26 - 10:09
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class DataExceptionServiceImpl implements DataExceptionService {
-
- private final InfluxDbUtils influxDbUtils;
-
- private final LineFeignClient lineFeignClient;
-
- private final PmsAbnormalRulesMapper pmsAbnormalRulesMapper;
-
- private final RStatAbnormalDMapper rStatAbnormalDMapper;
-
- @Resource
- private InfluxDbConfig influxDbConfig;
-
- /**
- * 监测点数据是否异常
- * @author qijian
- * @date 2022/10/26
- */
- @Override
- public boolean lineDataException(AlgorithmSearchParam algorithmSearchParam) {
- //测试
-// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", "");
- //初始化
- InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
- String searchSql;
- String sql;
- QueryResult query;
- DataV dataV;
- Date date = DateUtil.parse(algorithmSearchParam.getDatadate());
- String lineId = algorithmSearchParam.getId();
-
- //入库数据初始化
- RStatAbnormalD rStatAbnormalD = new RStatAbnormalD();
- rStatAbnormalD.setDataDate(date);
- rStatAbnormalD.setMeasurementPointId(lineId);
- rStatAbnormalD.setValueAlarm(0);
-
- //1、取出规则
- List pmsAbnormalRules = pmsAbnormalRulesMapper.selectList(null);
-
- //2、取出电压
- List lineIds = new ArrayList<>();
- lineIds.add(lineId);
- List lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData();
- if (lineDetailList.size() == 0){
- throw new BusinessException(HarmonicResponseEnum.ALGORITHM_LINE_EMPTY);
- }
- String scale = lineDetailList.get(0).getScale().replace("kV","");
-
- //3、根据规则表进行判断
- //取前四项进行比较(相别为A)
- searchSql = "MAX(freq) as freq_max,MIN(freq) as freq_min,MAX(rms) as rms_max,MIN(rms) as rms_min,MAX(rms_lvr) as rms_lvr_max,MIN(rms_lvr) as rms_lvr_min,MAX(v_thd) as v_thd_max,MIN(v_thd) as v_thd_min ";
- sql = getAppend(lineId, date, searchSql, "A");
- query = influxDbUtils.query(sql);
- dataV = resultMapper.toPOJO(query, DataV.class).get(0);
-
- //开始判断业务
- HarmonicResponseEnum harmonicResponseEnum = null;
- for (PmsAbnormalRules pmsAbnormalRule : pmsAbnormalRules) {
- //每项数据进行上下限比较(MAX和MIN),若有一项不在数据范围内,则为异常
- switch (pmsAbnormalRule.getTarget()) {
- case Param.TARGET_FREQ:
- //频率:正常比较
- if (dataV.getFrepMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getFrepMAX() > pmsAbnormalRule.getUpperLimit()){
- harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_FREP_RULE;
- }
- break;
- case Param.TARGET_RMS:
- //相电压有效值特殊处理:在【0.85p.u.,1.2p.u.】之间;p.u=电压等级/1.732
- pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * (Double.parseDouble(scale) / 1.732)));
- pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * (Double.parseDouble(scale) / 1.732)));
- if (dataV.getRmsMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsMAX() > pmsAbnormalRule.getUpperLimit()){
- harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_RMS_RULE;
- }
- break;
- case Param.TARGET_RMS_LVR:
- //线电压有效值特殊处理:在【0.85p.u.,1.2p.u.】之间;p.u=电压等级
- pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * Double.parseDouble(scale)));
- pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * Double.parseDouble(scale)));
- if (dataV.getRmsLvrMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsLvrMAX() > pmsAbnormalRule.getUpperLimit()){
- harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_RMS_LVR_RULE;
- }
- break;
- case Param.TARGET_V_THD:
- //电压总谐波畸变率:正常比较
- if (dataV.getVThdMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVThdMAX() > pmsAbnormalRule.getUpperLimit()){
- harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_V_THD_RULE;
- }
- break;
- case Param.TARGET_V_UNBALANCE:
- //三相不平衡度:正常比较(相别为T)
- searchSql = "MAX(v_unbalance) as v_unbalance_max,MIN(v_unbalance) as v_unbalance_min ";
- sql = getAppend(lineId, date, searchSql, "T");
- query = influxDbUtils.query(sql);
- dataV = resultMapper.toPOJO(query, DataV.class).get(0);
- if (dataV.getVUnbalanceMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVUnbalanceMAX() > pmsAbnormalRule.getUpperLimit()){
- harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_V_UNBALANCE_RULE;
- }
- break;
- default:
- break;
- }
-
- if (harmonicResponseEnum != null){
- //入库
- LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(RStatAbnormalD::getMeasurementPointId, lineId).eq(RStatAbnormalD::getDataDate, date);
- RStatAbnormalD rStatAbnormalDOne = rStatAbnormalDMapper.selectOne(lambdaQueryWrapper);
- if (Objects.isNull(rStatAbnormalDOne)){
- rStatAbnormalDMapper.insert(rStatAbnormalD);
- }
- throw new BusinessException(harmonicResponseEnum);
- }
-
- }
- return true;
- }
-
- /**
- * 拼装sql
- * @param id,date,searchSql,tableName 参数
- * @return 结果
- */
- private String getAppend(String id, Date date, String searchSql,String type) {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(InfluxDBSqlConstant.SELECT).append(searchSql)
- .append(InfluxDBSqlConstant.FROM).append(InfluxDBPublicParam.DATA_V)
- .append(InfluxDBSqlConstant.WHERE).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(DateUtil.beginOfDay(date)).append(InfluxDBSqlConstant.QM)
- .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.LE).append(InfluxDBSqlConstant.QM).append(DateUtil.endOfDay(date)).append(InfluxDBSqlConstant.QM)
- .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(id).append(InfluxDBSqlConstant.QM)
- .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.AVG).append(InfluxDBSqlConstant.QM);
- if (InfluxDBTableConstant.PHASE_TYPE_T.equals(type)){
- stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_T).append(InfluxDBSqlConstant.QM);
- }else{
- stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_A).append(InfluxDBSqlConstant.QM);
- }
- return stringBuilder.toString();
- }
-}
diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataIntegrityRateServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataIntegrityRateServiceImpl.java
deleted file mode 100644
index 8a7cdfa40..000000000
--- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/DataIntegrityRateServiceImpl.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package com.njcn.harmonic.service.impl;
-
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.njcn.common.pojo.exception.BusinessException;
-import com.njcn.device.pq.api.LineFeignClient;
-import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
-import com.njcn.harmonic.enums.HarmonicResponseEnum;
-import com.njcn.harmonic.mapper.RMpIntegrityDMapper;
-import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
-import com.njcn.harmonic.pojo.po.RMpIntegrityD;
-import com.njcn.harmonic.service.DataIntegrityRateService;
-import com.njcn.influxdb.config.InfluxDbConfig;
-import com.njcn.influxdb.param.InfluxDBPublicParam;
-import com.njcn.influxdb.param.InfluxDBSqlConstant;
-import com.njcn.influxdb.param.InfluxDBTableConstant;
-import com.njcn.influxdb.utils.InfluxDbUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.influxdb.dto.QueryResult;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 数据完整率算法
- *
- * @author qijian
- * @version 1.0.0
- * @createTime 2022/10/26 - 10:09
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class DataIntegrityRateServiceImpl implements DataIntegrityRateService {
-
- private final InfluxDbUtils influxDbUtils;
-
- private final RMpIntegrityDMapper rMpIntegrityDMapper;
-
- private final LineFeignClient lineFeignClient;
-
- @Resource
- private InfluxDbConfig influxDbConfig;
-
- /**
- * 监测点日数据完整率
- * @author qijian
- * @date 2022/10/26
- */
- @Override
- public boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam) {
- //测试
-// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", "");
- //初始化
- String searchSql;
- String tableName;
- String sql;
- QueryResult query;
- QueryResult.Series series;
- List columns;
- List> values;
- RMpIntegrityD rMpIntegrityD = new RMpIntegrityD();
- Date date = DateUtil.parse(algorithmSearchParam.getDatadate());
-
- //1、有效接入分钟数量:根据监测点编号获取统计间隔,1440 / 统计间隔 = 有效接入分钟数量
- List lineIds = new ArrayList<>();
- lineIds.add(algorithmSearchParam.getId());
- List lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData();
- if (lineDetailList.size() == 0){
- throw new BusinessException(HarmonicResponseEnum.ALGORITHM_LINE_EMPTY);
- }
- Integer effectiveMinuteCount = 1440 / lineDetailList.get(0).getTimeInterval();
- rMpIntegrityD.setEffectiveMinuteCount(effectiveMinuteCount);
-
- //2、根据data_v表获取五项稳态指标日数量(count)
- searchSql = "count(freq) as freqCount,count(rms) as phaseVoltageCount,count(rms_lvr) as lineVoltageCount,count(v_thd) as vThdCount,count(v_unbalance) as unbalanceCount ";
- tableName = InfluxDBPublicParam.DATA_V;
- sql = getAppend(algorithmSearchParam.getId(), date, searchSql, tableName);
- query = influxDbUtils.query(sql);
- series = getSeries(query);
-
- if (Objects.nonNull(series.getColumns())){
- columns = series.getColumns();
- values = series.getValues();
- for (List