From e545186cb02b44e2c65baee0e8ebeb4813689860 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Mon, 7 Apr 2025 20:11:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E8=B6=8A?= =?UTF-8?q?=E7=BA=BF=E8=AF=A6=E6=83=85=E8=BF=9C=E7=A8=8B=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/DataLimitRateDetailFeignClient.java | 8 +- ...tRateDetailFeignClientFallbackFactory.java | 8 +- .../pojo/dto/DataLimitRateDetailTimeDto.java | 69 ++++++++++++++ .../DataLimitRateDetailController.java | 11 ++- .../service/IDataLimitRateDetail.java | 10 ++ .../InfluxdbDataLimitRateDetailImpl.java | 6 ++ .../RelationDataLimitRateDetailImpl.java | 91 ++++++++++++++++--- 7 files changed, 182 insertions(+), 21 deletions(-) create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailTimeDto.java diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java index 110744b..613447f 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java @@ -1,14 +1,11 @@ package com.njcn.dataProcess.api; -import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.ServerInfo; -import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.dataProcess.api.fallback.DataLimitRateDetailFeignClientFallbackFactory; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; -import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; -import io.swagger.annotations.ApiOperation; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -32,4 +29,7 @@ public interface DataLimitRateDetailFeignClient { @PostMapping("/getLimitRateDetailTime") HttpResult> getLimitRateDetailTime(@RequestParam("id") String id, @RequestParam("time") String time); + + @PostMapping("/getLimitRateDetailTimeList") + HttpResult> getLimitRateDetailTimeList(@RequestBody LineCountEvaluateParam lineParam); } diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java index abdb0c5..73e7932 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java @@ -6,7 +6,7 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.dataProcess.api.DataLimitRateDetailFeignClient; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; -import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; import com.njcn.dataProcess.util.DataProcessingEnumUtil; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; @@ -56,6 +56,12 @@ public class DataLimitRateDetailFeignClientFallbackFactory implements FallbackFa log.error("{}异常,降级处理,异常为:{}","根据监测点id获取所有超标时间",cause.toString()); throw new BusinessException(finalExceptionEnum); } + + @Override + public HttpResult> getLimitRateDetailTimeList(LineCountEvaluateParam lineParam) { + log.error("{}异常,降级处理,异常为:{}","获取原始数据越线时间",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailTimeDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailTimeDto.java new file mode 100644 index 0000000..a9dcea6 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailTimeDto.java @@ -0,0 +1,69 @@ +package com.njcn.dataProcess.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author web2023 + */ +@Data +public class DataLimitRateDetailTimeDto implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + private String lineId; + + /** + * 合格率时间 + */ + private String time; + + /** + * 闪变越限次数 + */ + private List flickerOvertime; + + /** + * 频率偏差越限次数 + */ + private List freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + private List voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + private List ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + private List uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + private List iNegOvertime; + + /** + * 电压谐波含有率越限次数 + */ + private List uharmOvertime; + + /** + * 电流谐波幅值越限次数 + */ + private List iharmOvertime; + + /** + * 0.5次间谐波电压限值次数 + */ + private List inuharmOvertime; + + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java index 2328d75..3c45140 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java @@ -10,7 +10,7 @@ import com.njcn.dataProcess.annotation.InsertBean; import com.njcn.dataProcess.annotation.QueryBean; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; -import com.njcn.dataProcess.pojo.dto.DataLimitTargetDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; import com.njcn.dataProcess.service.IDataLimitRateDetail; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; @@ -67,6 +67,13 @@ public class DataLimitRateDetailController extends BaseController { List rawData = limitRateDetailInsert.getRawData(lineParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rawData, methodDescribe); } - + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getLimitRateDetailTimeList") + @ApiOperation("获取原始数据越线时间") + public HttpResult> getLimitRateDetailTimeList(@RequestBody LineCountEvaluateParam lineParam) { + String methodDescribe = getMethodDescribe("getLimitRateDetailTimeList"); + List rawData = limitRateDetailInsert.getLimitRateDetailTime(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rawData, methodDescribe); + } } diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataLimitRateDetail.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataLimitRateDetail.java index 3c7b3b9..fc2196c 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataLimitRateDetail.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IDataLimitRateDetail.java @@ -3,6 +3,7 @@ package com.njcn.dataProcess.service; import com.github.jeffreyning.mybatisplus.service.IMppService; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; import java.util.List; @@ -24,6 +25,15 @@ public interface IDataLimitRateDetail extends IMppService */ List getLimitRateDetailTime(String id,String time); + + /** + * 稳态超标时间 + * @param lineParam + * @return + */ + List getLimitRateDetailTime(LineCountEvaluateParam lineParam); + + /** * 批量插入数据 * @param limitRateDetailList diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataLimitRateDetailImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataLimitRateDetailImpl.java index 2e97533..801ffec 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataLimitRateDetailImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbDataLimitRateDetailImpl.java @@ -4,6 +4,7 @@ import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.dataProcess.dao.relation.mapper.RStatLimitRateDetailRelationMapper; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; import com.njcn.dataProcess.service.IDataLimitRateDetail; import lombok.RequiredArgsConstructor; @@ -26,6 +27,11 @@ public class InfluxdbDataLimitRateDetailImpl extends MppServiceImpl getLimitRateDetailTime(LineCountEvaluateParam lineParam) { + return Collections.emptyList(); + } + @Override public void batchInsertion(List limitRateList) { diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java index e75cee7..8b51eb7 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java @@ -1,14 +1,14 @@ package com.njcn.dataProcess.service.impl.relation; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.dataProcess.dao.relation.mapper.RStatLimitRateDetailRelationMapper; -import com.njcn.dataProcess.pojo.dto.AbnormalData; +import com.njcn.dataProcess.pojo.dto.*; import com.njcn.dataProcess.param.LineCountEvaluateParam; -import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; import com.njcn.dataProcess.service.IDataLimitRateDetail; import lombok.RequiredArgsConstructor; @@ -16,6 +16,9 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -60,19 +63,44 @@ public class RelationDataLimitRateDetailImpl extends MppServiceImpl fieldType = field.getType(); System.out.println("Field name: " + field.getName() + ", Type: " + fieldType.getName()); } - } catch (SecurityException |IllegalAccessException e) { + } catch (SecurityException | IllegalAccessException e) { e.printStackTrace(); } - if (CollUtil.isNotEmpty(json)){ - List times = json.stream().map(AbnormalData.Json::getTime).collect(Collectors.toList()); - String join = String.join(",", times); - String[] split = join.split(","); - return Arrays.stream(split).distinct().collect(Collectors.toList()); - } + return getString(json); } return Collections.emptyList(); } + + + @Override + public List getLimitRateDetailTime(LineCountEvaluateParam lineParam) { + List info = new ArrayList<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(CollUtil.isNotEmpty(lineParam.getLineId()), RStatLimitRateDetailD::getLineId, lineParam.getLineId()) + .ge(RStatLimitRateDetailD::getTime, lineParam.getStartTime()) + .le(RStatLimitRateDetailD::getTime, lineParam.getEndTime()); + + List list = this.list(lambdaQueryWrapper); + DataLimitRateDetailTimeDto dto; + for (RStatLimitRateDetailD detailD : list) { + dto = new DataLimitRateDetailTimeDto(); + dto.setLineId(detailD.getLineId()); + dto.setTime(detailD.getTime().format((DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)))); + dto.setFlickerOvertime(toList(detailD.getFlickerOvertime())); + dto.setFreqDevOvertime(toList(detailD.getFreqDevOvertime())); + dto.setVoltageDevOvertime(toList(detailD.getVoltageDevOvertime())); + dto.setUbalanceOvertime(toList(detailD.getUbalanceOvertime())); + dto.setUaberranceOvertime(toList(detailD.getUaberranceOvertime())); + dto.setINegOvertime(toList(detailD.getINegOvertime())); + dto.setUharmOvertime(toList(detailD,2,25,"uharm")); + dto.setIharmOvertime(toList(detailD,2,25,"iharm")); + dto.setInuharmOvertime(toList(detailD,1,16,"inuharm")); + info.add(dto); + } + return info; + } + @Override public void batchInsertion(List limitRateList) { List result = new ArrayList<>(); @@ -88,17 +116,52 @@ public class RelationDataLimitRateDetailImpl extends MppServiceImpl getRawData(LineCountEvaluateParam lineParam) { List result = new ArrayList<>(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(CollUtil.isNotEmpty(lineParam.getLineId()),RStatLimitRateDetailD::getLineId,lineParam.getLineId()) - .ge(RStatLimitRateDetailD::getTime,lineParam.getStartTime()) - .le(RStatLimitRateDetailD::getTime,lineParam.getEndTime()); + lambdaQueryWrapper.in(CollUtil.isNotEmpty(lineParam.getLineId()), RStatLimitRateDetailD::getLineId, lineParam.getLineId()) + .ge(RStatLimitRateDetailD::getTime, lineParam.getStartTime()) + .le(RStatLimitRateDetailD::getTime, lineParam.getEndTime()); List list = this.list(lambdaQueryWrapper); - list.forEach(item->{ + list.forEach(item -> { DataLimitRateDetailDto dto = new DataLimitRateDetailDto(); - BeanUtils.copyProperties(item,dto); + BeanUtils.copyProperties(item, dto); result.add(dto); }); return result; } + + private List toList(RStatLimitRateDetailD detailD,Integer start, Integer end, String targetName){ + List json = new ArrayList<>(); + for (int i = start; i <= end; i++) { + // 构造方法名 + String methodName = targetName + i + "Overtime"; + try { + // 获取 DataHarmDto 类的 getVx 方法 + Method getVMethod = RStatLimitRateDetailD.class.getMethod(methodName); + String value = (String) getVMethod.invoke(detailD); + json.addAll(JSON.parseArray(value, AbnormalData.Json.class)); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + return getString(json); + } + private List toList(String json){ + List jsons = JSON.parseArray(json, AbnormalData.Json.class); + return getString(jsons); + } + + private List getString(List jsons) { + if (CollUtil.isNotEmpty(jsons)){ + List times = jsons.stream().map(AbnormalData.Json::getTime).collect(Collectors.toList()); + String join = String.join(",", times); + String[] split = join.split(","); + return Arrays.stream(split).distinct().collect(Collectors.toList()); + } + return new ArrayList<>(); + } }