From 764a7b19535bb0aa8f2b717bd2ec9fb9a923efea Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Wed, 1 Jul 2026 10:28:50 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E9=80=82=E9=85=8D=E8=BE=BD?= =?UTF-8?q?=E5=AE=81=E7=8E=B0=E5=9C=BA=E6=96=B0=E8=83=BD=E6=BA=90=E5=9C=BA?= =?UTF-8?q?=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IDataLimitRateDetailService.java | 20 ++++ .../impl/PowerStatisticsServiceImpl.java | 5 +- .../RStatLimitRateDetailRelationMapper.java | 17 +++ .../impl/RelationDataLimitRateDetailImpl.java | 103 ++++++++++++++++++ 4 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IDataLimitRateDetailService.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RStatLimitRateDetailRelationMapper.java create mode 100644 pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RelationDataLimitRateDetailImpl.java diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IDataLimitRateDetailService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IDataLimitRateDetailService.java new file mode 100644 index 000000000..6f3e988db --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/IDataLimitRateDetailService.java @@ -0,0 +1,20 @@ +package com.njcn.harmonic.service; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; + +import java.util.List; + +public interface IDataLimitRateDetailService extends IMppService { + + + /** + * 稳态超标时间 + * @param lineParam + * @return + */ + List getLimitRateDetailTime(LineCountEvaluateParam lineParam); + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/activepowerrange/impl/PowerStatisticsServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/activepowerrange/impl/PowerStatisticsServiceImpl.java index 09d7f0368..696c8d870 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/activepowerrange/impl/PowerStatisticsServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/activepowerrange/impl/PowerStatisticsServiceImpl.java @@ -18,6 +18,7 @@ import com.njcn.device.pq.api.OverLimitClient; import com.njcn.harmonic.constant.Param; import com.njcn.harmonic.pojo.param.PowerStatisticsParam; import com.njcn.harmonic.pojo.vo.*; +import com.njcn.harmonic.service.IDataLimitRateDetailService; import com.njcn.harmonic.service.activepowerrange.PowerStatisticsService; import com.njcn.harmonic.service.activepowerrange.RActivePowerRangeService; import com.njcn.influx.service.CommonService; @@ -61,7 +62,7 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService { private final DataInharmVFeignClient dataInharmVFeignClient; private final DataHarmRateVFeignClient dataHarmRateVFeignClient; private final OverLimitClient overLimitClient; - private final DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient; + private final IDataLimitRateDetailService iDataLimitRateDetailService; private List times = Arrays.asList("0~10%", "10~20%", "20~30%", "30~40%", "40~50%", "50~60%", "60~70%", "70~80%", "80~90%", "90~100%"); @@ -111,7 +112,7 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService { lineCountEvaluateParam.setStartTime(powerStatisticsParam.getSearchBeginTime()); lineCountEvaluateParam.setEndTime(powerStatisticsParam.getSearchEndTime()); //获取超标数据 - List dtoList = dataLimitRateDetailFeignClient.getLimitRateDetailTimeList(lineCountEvaluateParam).getData(); + List dtoList = iDataLimitRateDetailService.getLimitRateDetailTime(lineCountEvaluateParam); Map timeDateMap = dtoList.stream().collect(Collectors.toMap(x -> x.getTime(), Function.identity())); List timeId = rActivePowerRangePO.getTimeId(); String times = reflexObjValue(rActivePowerRangePO, "minsTime" + powerStatisticsParam.getField()).toString().replace("null", ""); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RStatLimitRateDetailRelationMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RStatLimitRateDetailRelationMapper.java new file mode 100644 index 000000000..4381ecdc9 --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RStatLimitRateDetailRelationMapper.java @@ -0,0 +1,17 @@ +package com.njcn.harmonic.service.impl; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; + + +/** + *

+ * Mapper 接口 + *

+ * @author web2023 + */ +public interface RStatLimitRateDetailRelationMapper extends MppBaseMapper { + + + +} diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RelationDataLimitRateDetailImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RelationDataLimitRateDetailImpl.java new file mode 100644 index 000000000..1a1b08f7c --- /dev/null +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/RelationDataLimitRateDetailImpl.java @@ -0,0 +1,103 @@ +package com.njcn.harmonic.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.AbnormalData; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailTimeDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; +import com.njcn.harmonic.service.IDataLimitRateDetailService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +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.List; +import java.util.stream.Collectors; + +/** + * @Author: cdf + * @CreateTime: 2026-07-01 + * @Description: + */ +@Service() +@RequiredArgsConstructor +public class RelationDataLimitRateDetailImpl extends MppServiceImpl implements IDataLimitRateDetailService { + + + + @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()) + .orderByAsc(RStatLimitRateDetailD::getTime) + ; + + 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,"getUharm")); + dto.setIharmOvertime(toList(detailD,2,25,"getIharm")); + dto.setInuharmOvertime(toList(detailD,1,16,"getInuharm")); + info.add(dto); + } + return info; + } + + 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); + if(StrUtil.isNotBlank(value)){ + 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<>(); + } +}