故障录波配置更新
This commit is contained in:
parent
2004430ed7
commit
82033f4873
@ -137,4 +137,10 @@ public class SysEquipment extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
@TableField(value = "nominal_capacity")
|
@TableField(value = "nominal_capacity")
|
||||||
private Double nominalCapacity;
|
private Double nominalCapacity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 故障录波格式
|
||||||
|
*/
|
||||||
|
@TableField(value = "fdr_format")
|
||||||
|
private String fdrFormat;
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
package com.das.modules.fdr.controller;
|
package com.das.modules.fdr.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.das.common.result.R;
|
import com.das.common.result.R;
|
||||||
|
import com.das.modules.equipment.entity.SysEquipment;
|
||||||
import com.das.modules.fdr.domain.FileNode;
|
import com.das.modules.fdr.domain.FileNode;
|
||||||
import com.das.modules.fdr.service.FaultRecorderService;
|
import com.das.modules.fdr.service.FaultRecorderService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 故障录波controller
|
* 故障录波controller
|
||||||
@ -24,8 +25,23 @@ public class FaultRecorderController {
|
|||||||
private FaultRecorderService faultRecorderService;
|
private FaultRecorderService faultRecorderService;
|
||||||
|
|
||||||
@RequestMapping(value = "/files", method = RequestMethod.POST)
|
@RequestMapping(value = "/files", method = RequestMethod.POST)
|
||||||
public R<List<FileNode>> findList(@RequestParam(required = false) String name, String startTime, String endTime) {
|
public R<List<FileNode>> findList(@RequestBody JSONObject jsonObject) {
|
||||||
List<FileNode> result = faultRecorderService.getDirOrFileList(name,startTime,endTime);
|
String code = jsonObject.getString("deviceCode");
|
||||||
|
String startTime = jsonObject.getString("startTime");
|
||||||
|
String endTime = jsonObject.getString("endTime");
|
||||||
|
List<FileNode> result = faultRecorderService.getDirOrFileList(code,startTime,endTime);
|
||||||
return R.success(result);
|
return R.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/parseData", method = RequestMethod.POST)
|
||||||
|
public R<Map<String, List<String>>> parseData(@RequestBody JSONObject jsonObject) {
|
||||||
|
Map<String, List<String>> dataCurve = faultRecorderService.getDataCurve(jsonObject.getString("url"), jsonObject.getString("deviceCode"));
|
||||||
|
return R.success(dataCurve);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/updateFdrConfig", method = RequestMethod.POST)
|
||||||
|
public void updateFdrConfig(@RequestBody SysEquipment sysEquipment){
|
||||||
|
|
||||||
|
faultRecorderService.updateFdrConfig(sysEquipment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.das.modules.fdr.domain.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FdrFormatVo {
|
||||||
|
|
||||||
|
private String timeFormat;
|
||||||
|
|
||||||
|
private String delimite;
|
||||||
|
|
||||||
|
private Integer validStartLine;
|
||||||
|
}
|
@ -1,19 +1,27 @@
|
|||||||
package com.das.modules.fdr.service;
|
package com.das.modules.fdr.service;
|
||||||
|
|
||||||
|
import com.das.modules.equipment.entity.SysEquipment;
|
||||||
import com.das.modules.fdr.domain.FileNode;
|
import com.das.modules.fdr.domain.FileNode;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public interface FaultRecorderService {
|
public interface FaultRecorderService {
|
||||||
List<FileNode> getDirOrFileList(String name,String startTime, String endTime);
|
List<FileNode> getDirOrFileList(String name,String startTime, String endTime);
|
||||||
|
|
||||||
|
Map<String, List<String>> getDataCurve(String url, String deviceCode);
|
||||||
|
|
||||||
|
void updateFdrConfig(SysEquipment sysEquipment);
|
||||||
|
|
||||||
String upload(String parent, String folderName, MultipartFile file);
|
String upload(String parent, String folderName, MultipartFile file);
|
||||||
|
|
||||||
void readFileToSteam(String path, OutputStream stream);
|
void readFileToSteam(String path, OutputStream stream);
|
||||||
|
|
||||||
void download(String path, Path tempDir);
|
void download(String path, Path tempDir);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.das.modules.fdr.config.MinioProperties;
|
|||||||
import com.das.modules.fdr.domain.FileNode;
|
import com.das.modules.fdr.domain.FileNode;
|
||||||
import io.micrometer.common.util.StringUtils;
|
import io.micrometer.common.util.StringUtils;
|
||||||
import io.minio.*;
|
import io.minio.*;
|
||||||
|
import io.minio.errors.*;
|
||||||
import io.minio.messages.Item;
|
import io.minio.messages.Item;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -14,6 +15,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -198,7 +201,6 @@ public class MinioViewsServcie {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 递归方式 计算文件的大小
|
// 递归方式 计算文件的大小
|
||||||
public long getTotalSizeOfFilesInDir(File file) {
|
public long getTotalSizeOfFilesInDir(File file) {
|
||||||
if (file.isFile()) {
|
if (file.isFile()) {
|
||||||
@ -215,4 +217,21 @@ public class MinioViewsServcie {
|
|||||||
}
|
}
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InputStream getFileStream(String url) throws IOException {
|
||||||
|
|
||||||
|
InputStream inputStream = null;
|
||||||
|
try {
|
||||||
|
inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(minioProperties.getBucket()).object(url).build());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("获取文件失败");
|
||||||
|
}finally {
|
||||||
|
if (inputStream != null){
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputStream;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,62 @@
|
|||||||
package com.das.modules.fdr.service.impl;
|
package com.das.modules.fdr.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.das.common.constant.FileConstants;
|
import com.das.common.constant.FileConstants;
|
||||||
|
import com.das.common.exceptions.ServiceException;
|
||||||
|
import com.das.modules.equipment.entity.SysEquipment;
|
||||||
|
import com.das.modules.equipment.mapper.SysEquipmentMapper;
|
||||||
|
import com.das.modules.fdr.config.MinioProperties;
|
||||||
import com.das.modules.fdr.domain.FileNode;
|
import com.das.modules.fdr.domain.FileNode;
|
||||||
|
import com.das.modules.fdr.domain.vo.FdrFormatVo;
|
||||||
import com.das.modules.fdr.service.FaultRecorderService;
|
import com.das.modules.fdr.service.FaultRecorderService;
|
||||||
import com.das.modules.fdr.service.MinioViewsServcie;
|
import com.das.modules.fdr.service.MinioViewsServcie;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import io.micrometer.common.util.StringUtils;
|
import io.micrometer.common.util.StringUtils;
|
||||||
|
import io.minio.GetObjectArgs;
|
||||||
|
import io.minio.MinioClient;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.checkerframework.checker.units.qual.A;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class FaultRecorderServiceImpl implements FaultRecorderService {
|
public class FaultRecorderServiceImpl implements FaultRecorderService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MinioViewsServcie minioViewsServcie;
|
private MinioViewsServcie minioViewsServcie;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
MinioClient minioClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MinioProperties minioProperties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SysEquipmentMapper sysEquipmentMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FileNode> getDirOrFileList(String name, String startTime, String endTime) {
|
public List<FileNode> getDirOrFileList(String name, String startTime, String endTime) {
|
||||||
List<FileNode> fileResult = new ArrayList<>();
|
List<FileNode> fileResult = new ArrayList<>();
|
||||||
List<String> monthsBetween = getMonthsBetween(startTime, endTime);
|
List<String> monthsBetween = getMonthsBetween(startTime, endTime);
|
||||||
for (String item : monthsBetween){
|
for (String item : monthsBetween) {
|
||||||
String directoryName = name + FileConstants.FILE_SEPARATOR + item.substring(0,item.indexOf("-")) + FileConstants.FILE_SEPARATOR + item.substring(item.indexOf("-")+1);
|
String directoryName = name + FileConstants.FILE_SEPARATOR + item.substring(0, item.indexOf("-")) + FileConstants.FILE_SEPARATOR + item.substring(item.indexOf("-") + 1);
|
||||||
List<FileNode> fileTree = minioViewsServcie.getFileTree(directoryName);
|
List<FileNode> fileTree = minioViewsServcie.getFileTree(directoryName);
|
||||||
fileResult.addAll(fileTree);
|
fileResult.addAll(fileTree);
|
||||||
}
|
}
|
||||||
@ -71,4 +97,96 @@ public class FaultRecorderServiceImpl implements FaultRecorderService {
|
|||||||
}
|
}
|
||||||
return months;
|
return months;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, List<String>> getDataCurve(String url, String deviceCode) {
|
||||||
|
Map<String, List<String>> resultMap = null;
|
||||||
|
InputStream fileStream;
|
||||||
|
try {
|
||||||
|
fileStream = minioViewsServcie.getFileStream(url);
|
||||||
|
//根据device Code查询故障录波格式
|
||||||
|
QueryWrapper<SysEquipment> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("CODE", deviceCode);
|
||||||
|
SysEquipment sysEquipment = sysEquipmentMapper.selectOne(queryWrapper);
|
||||||
|
if (sysEquipment == null) {
|
||||||
|
throw new ServiceException("设备不存在,请选择正确设备");
|
||||||
|
}
|
||||||
|
|
||||||
|
FdrFormatVo fdrFormatVo = JSON.parseObject(sysEquipment.getFdrFormat(), FdrFormatVo.class);
|
||||||
|
|
||||||
|
|
||||||
|
// 解析文件内容
|
||||||
|
List<List<String>> parsedData = parseFile(fileStream, fdrFormatVo.getDelimite(), fdrFormatVo.getValidStartLine());
|
||||||
|
resultMap = parseDataCurve(parsedData, fdrFormatVo.getTimeFormat());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateFdrConfig(SysEquipment sysEquipment) {
|
||||||
|
sysEquipmentMapper.updateById(sysEquipment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<List<String>> parseFile(InputStream inputStream, String delimiter, int validStartLine) {
|
||||||
|
|
||||||
|
List<List<String>> result = new ArrayList<>();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
|
||||||
|
String line;
|
||||||
|
int lineNumber = 0;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
lineNumber++;
|
||||||
|
// 忽略有效行之前的行
|
||||||
|
if (lineNumber < validStartLine) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按照分隔符分割行数据
|
||||||
|
String[] values = line.split(delimiter);
|
||||||
|
List<String> lineData = new ArrayList<>();
|
||||||
|
for (String value : values) {
|
||||||
|
lineData.add(value.trim());
|
||||||
|
}
|
||||||
|
result.add(lineData);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
log.error("文件解析失败");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, List<String>> parseDataCurve(List<List<String>> data, String timeFormat) throws ParseException {
|
||||||
|
List<String> listField = data.get(0);
|
||||||
|
Map<String, List<String>> map = new HashMap<>();
|
||||||
|
data.remove(0);
|
||||||
|
for (List<String> item : data) {
|
||||||
|
for (int i = 0; i < item.size(); i++) {
|
||||||
|
if (map.get(listField.get(i)) == null) {
|
||||||
|
List<String> valueList = new ArrayList<>();
|
||||||
|
valueList.add(item.get(i));
|
||||||
|
map.put(listField.get(i), valueList);
|
||||||
|
} else {
|
||||||
|
List<String> valueList = map.get(listField.get(i));
|
||||||
|
valueList.add(item.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<String> list = map.get(listField.get(0));
|
||||||
|
List<String> timeList = new ArrayList<>();
|
||||||
|
for (String item : list) {
|
||||||
|
long timestamp = convertToTimestamp(item, timeFormat);
|
||||||
|
timeList.add(String.valueOf(timestamp));
|
||||||
|
map.put(listField.get(0), timeList);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long convertToTimestamp(String time, String pattern) throws ParseException {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
||||||
|
return sdf.parse(time).getTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user