From 7b6fd159c05a25f2d4c0324044cd5374718160e6 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Mon, 10 Mar 2025 18:14:08 +0800 Subject: [PATCH] =?UTF-8?q?=20=E7=9B=91=E6=B5=8B=E7=82=B9=E7=A8=B3?= =?UTF-8?q?=E6=80=81=E6=8C=87=E6=A0=87=E8=B6=8A=E9=99=90=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=20=20=E7=BB=88=E7=AB=AF=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/algorithm/ExecutionCenter.java | 78 +- .../algorithm/executor/DeviceExecutor.java | 40 + .../service/line/IDataOnlineRateService.java | 20 + .../line/IDataCrossingServiceImpl.java | 1188 +++++++---------- .../line/IDataOnlineRateServiceImpl.java | 150 +++ .../api/DataLimitRateDetailFeignClient.java | 25 + .../api/PqsCommunicateFeignClient.java | 47 + ...tRateDetailFeignClientFallbackFactory.java | 48 + ...CommunicateFeignClientFallbackFactory.java | 62 + .../dataProcess/po/influx/PqsCommunicate.java | 54 + .../dataProcess/pojo/dto/AbnormalData.java | 32 + .../pojo/dto/DataLimitDetailDto.java | 17 + .../pojo/dto/DataLimitRateDetailDto.java | 385 ++++++ .../pojo/dto/PqsCommunicateDto.java | 23 + .../pojo/dto/RStatOnlineRateDto.java | 38 + .../pojo/po/RStatLimitRateDetailD.java | 469 +++++++ .../dataProcess/pojo/po/RStatOnlineRateD.java | 47 + .../controller/DataLimitRateController.java | 2 +- .../DataLimitRateDetailController.java | 58 + .../controller/PqsCommunicateController.java | 74 + .../dao/imapper/PqsCommunicateMapper.java | 16 + .../RStatLimitRateDetailRelationMapper.java | 17 + .../dataProcess/service/ILimitRateDetail.java | 22 + .../dataProcess/service/IPqsCommunicate.java | 37 + .../influxdb/InfluxdbLimitRateDetailImpl.java | 26 + .../influxdb/InfluxdbPqsCommunicateImpl.java | 118 ++ .../relation/RelationLimitRateDetailImpl.java | 36 + .../relation/RelationPqsCommunicateImpl.java | 36 + 28 files changed, 2413 insertions(+), 752 deletions(-) create mode 100644 algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java create mode 100644 algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java create mode 100644 algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/PqsCommunicateFeignClient.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/PqsCommunicateFeignClientFallbackFactory.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/po/influx/PqsCommunicate.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitDetailDto.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/PqsCommunicateDto.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/RStatOnlineRateDto.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java create mode 100644 data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/PqsCommunicateController.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/imapper/PqsCommunicateMapper.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatLimitRateDetailRelationMapper.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/ILimitRateDetail.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IPqsCommunicate.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbLimitRateDetailImpl.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbPqsCommunicateImpl.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationLimitRateDetailImpl.java create mode 100644 data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationPqsCommunicateImpl.java diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java index 4811726..5061eda 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/ExecutionCenter.java @@ -192,45 +192,45 @@ public class ExecutionCenter extends BaseController { } } -// @OperateInfo(info = LogEnum.BUSINESS_COMMON) -// @ApiOperation("装置算法执行链") -// @PostMapping("/deviceExecutor") -// @Async("asyncExecutor") -// public void deviceExecutor(@RequestBody BaseParam baseParam) { -// String methodDescribe = getMethodDescribe("deviceExecutor"); -// //手动判断参数是否合法, -// CalculatedParam calculatedParam = judgeExecuteParam(baseParam); -// DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); -// // 设备索引 -// if (CollectionUtils.isEmpty(calculatedParam.getIdList())) { -// Dept data = deptFeignClient.getRootDept().getData(); -// deptGetLineParam.setDeptId(data.getId()); -// List list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData(); -// DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0); -// List devList = dto.getDeviceList(); -// calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList())); -// } -// LiteflowResponse liteflowResponse; -// if (baseParam.isRepair()) { -// //补招时,起始日期、截止日期必填 -// DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT); -// DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT); -// long betweenDay = DateUtil.betweenDay(startDate, endDate, true); -// //递增日期执行算法链 -// for (int i = 0; i < betweenDay; i++) { -// if (i != 0) { -// startDate = DateUtil.offsetDay(startDate, 1); -// } -// calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN)); -// liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam); -// dealResponse(calculatedParam, liteflowResponse, methodDescribe); -// } -// } else { -// //非补招 -// liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam); -// dealResponse(calculatedParam, liteflowResponse, methodDescribe); -// } -// } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("装置算法执行链") + @PostMapping("/deviceExecutor") + @Async("asyncExecutor") + public void deviceExecutor(@RequestBody BaseParam baseParam) { + String methodDescribe = getMethodDescribe("deviceExecutor"); + //手动判断参数是否合法, + CalculatedParam calculatedParam = judgeExecuteParam(baseParam); + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + // 设备索引 + if (CollectionUtils.isEmpty(calculatedParam.getIdList())) { + Dept data = deptFeignClient.getRootDept().getData(); + deptGetLineParam.setDeptId(data.getId()); + List list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData(); + DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0); + List devList = dto.getDeviceList(); + calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList())); + } + LiteflowResponse liteflowResponse; + if (baseParam.isRepair()) { + //补招时,起始日期、截止日期必填 + DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT); + DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT); + long betweenDay = DateUtil.betweenDay(startDate, endDate, true); + //递增日期执行算法链 + for (int i = 0; i < betweenDay; i++) { + if (i != 0) { + startDate = DateUtil.offsetDay(startDate, 1); + } + calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN)); + liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam); + dealResponse(calculatedParam, liteflowResponse, methodDescribe); + } + } else { + //非补招 + liteflowResponse = flowExecutor.execute2Resp("device", calculatedParam); + dealResponse(calculatedParam, liteflowResponse, methodDescribe); + } + } // // @OperateInfo(info = LogEnum.BUSINESS_COMMON) // @ApiOperation("单位监测点算法执行链") diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java new file mode 100644 index 0000000..07b415f --- /dev/null +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/executor/DeviceExecutor.java @@ -0,0 +1,40 @@ +package com.njcn.algorithm.executor; + +import com.njcn.algorithm.service.line.IDataOnlineRateService; +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import com.yomahub.liteflow.enums.NodeTypeEnum; +import lombok.RequiredArgsConstructor; + + +/** + * @author hongawen + * @version 1.0.0 + * @date 2023年11月06日 15:59 + */ +@LiteflowComponent +@RequiredArgsConstructor +public class DeviceExecutor extends BaseExecutor { + + private final IDataOnlineRateService onlineRateService; + + + /** + * 算法名: 暂无-----终端在线率_日表(r_stat_onlinerate_d) + * + * @author xuyang + * @date 2023年11月30日 10:25 + */ + @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "deviceOnlineRate", nodeType = NodeTypeEnum.COMMON) + public boolean deviceOnlineRateAccess(NodeComponent bindCmp) { + return isAccess(bindCmp); + } + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "deviceOnlineRate", nodeType = NodeTypeEnum.COMMON) + public void deviceOnlineRateProcess(NodeComponent bindCmp) { + onlineRateService.dataOnlineRate(bindCmp.getRequestData()); + } + + +} diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java new file mode 100644 index 0000000..5fd4e7b --- /dev/null +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/service/line/IDataOnlineRateService.java @@ -0,0 +1,20 @@ +package com.njcn.algorithm.service.line; + + +import com.njcn.algorithm.pojo.bo.CalculatedParam; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/10 11:19 + */ +public interface IDataOnlineRateService { + + /*** + * 装置数据在线率_日表 + * @author xuyang + * @date 2023/11/09 10:08 + * @param calculatedParam 查询条件 + */ + void dataOnlineRate(CalculatedParam calculatedParam); +} diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java index 66ccf1c..f0c5019 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataCrossingServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.service.line.IDataCrossingService; import com.njcn.dataProcess.api.*; @@ -19,12 +21,14 @@ import com.njcn.influx.pojo.constant.InfluxDBTableConstant; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.lang.reflect.Method; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; @@ -58,12 +62,14 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { @Resource private DataHarmRateVFeignClient dataHarmRateVFeignClient; @Resource - private DataLimitRateFeignClient dataLimitRateFeignClient; + private DataLimitRateFeignClient dataLimitRateFeignClient; + @Resource + private DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient; @Override public void limitRateHandler(CalculatedParam calculatedParam) { - logger.info("{},dataV表转r_stat_data_v_d算法开始=====》", LocalDateTime.now()); - List result = new ArrayList<>(); + logger.info("{},limitRate表转r_stat_limit_rate_d算法开始=====》", LocalDateTime.now()); + List result = new ArrayList<>(); //远程接口获取分钟数据 LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); @@ -176,11 +182,10 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { .collect(Collectors.groupingBy(DataVDto::getLineId)); /** - * 功能描述:获取influxDB -> data_plt -> 长时间闪变 -> 最大值 + * 功能描述:获取influxDB -> data_plt -> 长时间闪变 -> 最大值(原始算法去掉了) */ Map> dataPlt = dataFlickerAllTime.stream() .filter(x -> phase.contains(x.getPhasicType())) - .filter(x -> InfluxDBTableConstant.MAX.equals(x.getValueType())) .collect(Collectors.groupingBy(DataPltDto::getLineId)); for (String item : lineIds) { @@ -205,7 +210,13 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (CollUtil.isNotEmpty(result)) { //存储数据 - dataLimitRateFeignClient.batchInsertion(result); + List dataLimitRate = result.stream().map(DataLimitDetailDto::getDataLimitRate).filter(x-> ObjectUtil.isNotNull(x)).collect(Collectors.toList()); + dataLimitRateFeignClient.batchInsertion(dataLimitRate); + } + if (CollUtil.isNotEmpty(result)) { + //存储数据 + List detail = result.stream().map(DataLimitDetailDto::getDataLimitRateDetail).filter(x-> ObjectUtil.isNotNull(x)).collect(Collectors.toList()); + dataLimitRateDetailFeignClient.batchInsertion(detail); } } @@ -218,20 +229,20 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { * @Author: clam * @Date: 2022/10/18 */ - private List getData(String dataDate, - Overlimit overlimit, - List allTimeList, - List flickerAllTimeList, - List dataHarmRateVPOList, - List dataIPOList, - List dataInHarmVPOList, - List dataVPOList, - List dataVPOUnbalanceList, - List dataIPONegList, - List dataVPOFreqList, - List dataVPODevList, - List dataPltPOList) { - List result = new ArrayList<>(); + private List getData(String dataDate, + Overlimit overlimit, + List allTimeList, + List flickerAllTimeList, + List dataHarmRateVPOList, + List dataIPOList, + List dataInHarmVPOList, + List dataVPOList, + List dataVPOUnbalanceList, + List dataIPONegList, + List dataVPOFreqList, + List dataVPODevList, + List dataPltPOList) { + List result = new ArrayList<>(); Map> harmRateVByPhaseType = new HashMap<>(); Map> dataIByPhaseType = new HashMap<>(); @@ -241,15 +252,6 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { Map> dataPltPhaseType = new HashMap<>(); - Map> harmRateVByTime = new HashMap<>(); - Map> dataIByTime = new HashMap<>(); - Map> dataInHarmVByTime = new HashMap<>(); - Map> dataVByTime = new HashMap<>(); - Map> dataVUnbalanceByTime = new HashMap<>(); - Map> dataINegByTime = new HashMap<>(); - Map> dataVFreqByTime = new HashMap<>(); - Map> dataVDevByTime = new HashMap<>(); - Map> dataPltByTime = new HashMap<>(); Integer allTime = 0; Integer flickerAllTime = 0; if (!CollectionUtils.isEmpty(allTimeList)) { @@ -260,41 +262,26 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { } if (!CollectionUtils.isEmpty(dataHarmRateVPOList)) { harmRateVByPhaseType = dataHarmRateVPOList.stream().collect(Collectors.groupingBy(DataHarmDto::getPhasicType)); - harmRateVByTime = dataHarmRateVPOList.stream().collect(Collectors.groupingBy(DataHarmDto::getMinTime)); } if (!CollectionUtils.isEmpty(dataIPOList)) { dataIByPhaseType = dataIPOList.stream().collect(Collectors.groupingBy(DataIDto::getPhasicType)); - dataIByTime = dataIPOList.stream().collect(Collectors.groupingBy(DataIDto::getMinTime)); } if (!CollectionUtils.isEmpty(dataInHarmVPOList)) { dataInHarmVPhaseType = dataInHarmVPOList.stream().collect(Collectors.groupingBy(DataHarmDto::getPhasicType)); - dataInHarmVByTime = dataInHarmVPOList.stream().collect(Collectors.groupingBy(DataHarmDto::getMinTime)); } if (!CollectionUtils.isEmpty(dataVPOList)) { dataVPhaseType = dataVPOList.stream().collect(Collectors.groupingBy(DataVDto::getPhasicType)); - dataVByTime = dataVPOList.stream().collect(Collectors.groupingBy(DataVDto::getMinTime)); - } - if (!CollectionUtils.isEmpty(dataVPOUnbalanceList)) { - dataVUnbalanceByTime = dataVPOUnbalanceList.stream().collect(Collectors.groupingBy(DataVDto::getMinTime)); - } - if (!CollectionUtils.isEmpty(dataIPONegList)) { - dataINegByTime = dataIPONegList.stream().collect(Collectors.groupingBy(DataIDto::getMinTime)); - } - if (!CollectionUtils.isEmpty(dataVPOFreqList)) { - dataVFreqByTime = dataVPOFreqList.stream().collect(Collectors.groupingBy(DataVDto::getMinTime)); } if (!CollectionUtils.isEmpty(dataVPODevList)) { dataVDevPhaseType = dataVPODevList.stream().collect(Collectors.groupingBy(DataVDto::getPhasicType)); - dataVDevByTime = dataVPODevList.stream().collect(Collectors.groupingBy(DataVDto::getMinTime)); } if (!CollectionUtils.isEmpty(dataPltPOList)) { dataPltPhaseType = dataPltPOList.stream().collect(Collectors.groupingBy(DataPltDto::getPhasicType)); - dataPltByTime = dataPltPOList.stream().collect(Collectors.groupingBy(DataPltDto::getMinTime)); } - DataLimitRateDto a = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_A, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_A), dataIByPhaseType.get(PhaseType.PHASE_A), dataInHarmVPhaseType.get(PhaseType.PHASE_A), dataVPhaseType.get(PhaseType.PHASE_A), dataVDevPhaseType.get(PhaseType.PHASE_A), dataPltPhaseType.get(PhaseType.PHASE_A)); - DataLimitRateDto b = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_B, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_B), dataIByPhaseType.get(PhaseType.PHASE_B), dataInHarmVPhaseType.get(PhaseType.PHASE_B), dataVPhaseType.get(PhaseType.PHASE_B), dataVDevPhaseType.get(PhaseType.PHASE_B), dataPltPhaseType.get(PhaseType.PHASE_B)); - DataLimitRateDto c = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_C, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_C), dataIByPhaseType.get(PhaseType.PHASE_C), dataInHarmVPhaseType.get(PhaseType.PHASE_C), dataVPhaseType.get(PhaseType.PHASE_C), dataVDevPhaseType.get(PhaseType.PHASE_C), dataPltPhaseType.get(PhaseType.PHASE_C)); - DataLimitRateDto t = limitRateDataT(dataDate, overlimit, allTime, flickerAllTime, overlimit.getId(), harmRateVByTime, dataIByTime, dataInHarmVByTime, dataVByTime, dataVUnbalanceByTime, dataINegByTime, dataVFreqByTime, dataVDevByTime, dataPltByTime); + DataLimitDetailDto a = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_A, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_A), dataIByPhaseType.get(PhaseType.PHASE_A), dataInHarmVPhaseType.get(PhaseType.PHASE_A), dataVPhaseType.get(PhaseType.PHASE_A), dataVDevPhaseType.get(PhaseType.PHASE_A), dataPltPhaseType.get(PhaseType.PHASE_A)); + DataLimitDetailDto b = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_B, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_B), dataIByPhaseType.get(PhaseType.PHASE_B), dataInHarmVPhaseType.get(PhaseType.PHASE_B), dataVPhaseType.get(PhaseType.PHASE_B), dataVDevPhaseType.get(PhaseType.PHASE_B), dataPltPhaseType.get(PhaseType.PHASE_B)); + DataLimitDetailDto c = limitRateData(dataDate, overlimit, allTime, flickerAllTime, PhaseType.PHASE_C, overlimit.getId(), harmRateVByPhaseType.get(PhaseType.PHASE_C), dataIByPhaseType.get(PhaseType.PHASE_C), dataInHarmVPhaseType.get(PhaseType.PHASE_C), dataVPhaseType.get(PhaseType.PHASE_C), dataVDevPhaseType.get(PhaseType.PHASE_C), dataPltPhaseType.get(PhaseType.PHASE_C)); + DataLimitDetailDto t = limitRateDataT(dataDate, overlimit, allTime, flickerAllTime, overlimit.getId(), dataHarmRateVPOList, dataIPOList, dataInHarmVPOList, dataVPOList, dataVPOUnbalanceList, dataIPONegList, dataVPOFreqList, dataVPODevList, dataPltPOList); result.add(a); result.add(b); result.add(c); @@ -310,225 +297,93 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { * @Author: clam * @Date: 2022/10/18 */ - public DataLimitRateDto limitRateData(String dataDate, - Overlimit overlimit, - Integer allTime, - Integer flickerAllTime, - String phasicType, String lineId, - List dataHarmRateVPOList, - List dataIPOList, - List dataInHarmVPOList, - List dataVPOList, - List dataVPODevList, - List dataPltPOList) { - int v2 = 0, v3 = 0, v4 = 0, v5 = 0, v6 = 0, v7 = 0, v8 = 0, v9 = 0, v10 = 0, v11 = 0, v12 = 0, v13 = 0, v14 = 0, v15 = 0, v16 = 0, v17 = 0, v18 = 0, v19 = 0, v20 = 0, v21 = 0, v22 = 0, v23 = 0, v24 = 0, v25 = 0; - int i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0; - int uHarm1 = 0, uHarm2 = 0, uHarm3 = 0, uHarm4 = 0, uHarm5 = 0, uHarm6 = 0, uHarm7 = 0, uHarm8 = 0, uHarm9 = 0, uHarm10 = 0, uHarm11 = 0, uHarm12 = 0, uHarm13 = 0, uHarm14 = 0, uHarm15 = 0, uHarm16 = 0; - int thd = 0, uDev = 0, flicker = 0; - //2-25次谐波电压含有率 + public DataLimitDetailDto limitRateData(String dataDate, + Overlimit overlimit, + Integer allTime, + Integer flickerAllTime, + String phasicType, String lineId, + List dataHarmRateVPOList, + List dataIPOList, + List dataInHarmVPOList, + List dataVPOList, + List dataVPODevList, + List dataPltPOList) { + List thd = new ArrayList<>(), uDev = new ArrayList<>(), flicker = new ArrayList<>(), freqDev = new ArrayList<>(), uAberrance = new ArrayList<>(), iNeg = new ArrayList<>(); + DataLimitDetailDto dto = new DataLimitDetailDto(); + DataLimitRateDto limitRate = new DataLimitRateDto(); + // 初始化 v 系列列表 + List[] v = new List[24]; + for (int i = 0; i < 24; i++) { + v[i] = new ArrayList<>(); + } + // 处理数据 if (!CollectionUtils.isEmpty(dataHarmRateVPOList)) { for (DataHarmDto item : dataHarmRateVPOList) { - if (item.getV2() > overlimit.getUharm2() && item.getV2() >= 0.0 && item.getV2() <= 30.0) { - v2++; - } - if (item.getV3() > overlimit.getUharm3() && item.getV3() >= 0.0 && item.getV3() <= 30.0) { - v3++; - } - if (item.getV4() > overlimit.getUharm4() && item.getV4() >= 0.0 && item.getV4() <= 30.0) { - v4++; - } - if (item.getV5() > overlimit.getUharm5() && item.getV5() >= 0.0 && item.getV5() <= 30.0) { - v5++; - } - if (item.getV6() > overlimit.getUharm6() && item.getV6() >= 0.0 && item.getV6() <= 30.0) { - v6++; - } - if (item.getV7() > overlimit.getUharm7() && item.getV7() >= 0.0 && item.getV7() <= 30.0) { - v7++; - } - if (item.getV8() > overlimit.getUharm8() && item.getV8() >= 0.0 && item.getV8() <= 30.0) { - v8++; - } - if (item.getV9() > overlimit.getUharm9() && item.getV9() >= 0.0 && item.getV9() <= 30.0) { - v9++; - } - if (item.getV10() > overlimit.getUharm10() && item.getV10() >= 0.0 && item.getV10() <= 30.0) { - v10++; - } - if (item.getV11() > overlimit.getUharm11() && item.getV11() >= 0.0 && item.getV11() <= 30.0) { - v11++; - } - if (item.getV12() > overlimit.getUharm12() && item.getV12() >= 0.0 && item.getV12() <= 30.0) { - v12++; - } - if (item.getV13() > overlimit.getUharm13() && item.getV13() >= 0.0 && item.getV13() <= 30.0) { - v13++; - } - if (item.getV14() > overlimit.getUharm14() && item.getV14() >= 0.0 && item.getV14() <= 30.0) { - v14++; - } - if (item.getV15() > overlimit.getUharm15() && item.getV15() >= 0.0 && item.getV15() <= 30.0) { - v15++; - } - if (item.getV16() > overlimit.getUharm16() && item.getV16() >= 0.0 && item.getV16() <= 30.0) { - v16++; - } - if (item.getV17() > overlimit.getUharm17() && item.getV17() >= 0.0 && item.getV17() <= 30.0) { - v17++; - } - if (item.getV18() > overlimit.getUharm18() && item.getV18() >= 0.0 && item.getV18() <= 30.0) { - v18++; - } - if (item.getV19() > overlimit.getUharm19() && item.getV19() >= 0.0 && item.getV19() <= 30.0) { - v19++; - } - if (item.getV20() > overlimit.getUharm20() && item.getV20() >= 0.0 && item.getV20() <= 30.0) { - v20++; - } - if (item.getV21() > overlimit.getUharm21() && item.getV21() >= 0.0 && item.getV21() <= 30.0) { - v21++; - } - if (item.getV22() > overlimit.getUharm22() && item.getV22() >= 0.0 && item.getV22() <= 30.0) { - v22++; - } - if (item.getV23() > overlimit.getUharm23() && item.getV23() >= 0.0 && item.getV23() <= 30.0) { - v23++; - } - if (item.getV24() > overlimit.getUharm24() && item.getV24() >= 0.0 && item.getV24() <= 30.0) { - v24++; - } - if (item.getV25() > overlimit.getUharm25() && item.getV25() >= 0.0 && item.getV25() <= 30.0) { - v25++; + for (int i = 2; i < 26; i++) { + try { + // 获取 DataHarmDto 类的 getVx 方法 + Method getVMethod = DataHarmDto.class.getMethod("getV" + i); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit && value >= 0.0 && value <= 30.0) { + addAbnormalData(v[i - 2], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } } } } - //2-25次谐波电流 + + // 初始化 i 系列列表 + List[] i = new List[24]; + for (int j = 0; j < 24; j++) { + i[j] = new ArrayList<>(); + } + // 处理数据 if (!CollectionUtils.isEmpty(dataIPOList)) { for (DataIDto item : dataIPOList) { - if (item.getI2() > overlimit.getIharm2() && item.getI2() >= 0.0 && item.getI2() <= 30.0) { - i2++; - } - if (item.getI3() > overlimit.getIharm3() && item.getI3() >= 0.0 && item.getI3() <= 30.0) { - i3++; - } - if (item.getI4() > overlimit.getIharm4() && item.getI4() >= 0.0 && item.getI4() <= 30.0) { - i4++; - } - if (item.getI5() > overlimit.getIharm5() && item.getI5() >= 0.0 && item.getI5() <= 30.0) { - i5++; - } - if (item.getI6() > overlimit.getIharm6() && item.getI6() >= 0.0 && item.getI6() <= 30.0) { - i6++; - } - if (item.getI7() > overlimit.getIharm7() && item.getI7() >= 0.0 && item.getI7() <= 30.0) { - i7++; - } - if (item.getI8() > overlimit.getIharm8() && item.getI8() >= 0.0 && item.getI8() <= 30.0) { - i8++; - } - if (item.getI9() > overlimit.getIharm9() && item.getI9() >= 0.0 && item.getI9() <= 30.0) { - i9++; - } - if (item.getI10() > overlimit.getIharm10() && item.getI10() >= 0.0 && item.getI10() <= 30.0) { - i10++; - } - if (item.getI11() > overlimit.getIharm11() && item.getI11() >= 0.0 && item.getI11() <= 30.0) { - i11++; - } - if (item.getI12() > overlimit.getIharm12() && item.getI12() >= 0.0 && item.getI12() <= 30.0) { - i12++; - } - if (item.getI13() > overlimit.getIharm13() && item.getI13() >= 0.0 && item.getI13() <= 30.0) { - i13++; - } - if (item.getI14() > overlimit.getIharm14() && item.getI14() >= 0.0 && item.getI14() <= 30.0) { - i14++; - } - if (item.getI15() > overlimit.getIharm15() && item.getI15() >= 0.0 && item.getI15() <= 30.0) { - i15++; - } - if (item.getI16() > overlimit.getIharm16() && item.getI16() >= 0.0 && item.getI16() <= 30.0) { - i16++; - } - if (item.getI17() > overlimit.getIharm17() && item.getI17() >= 0.0 && item.getI17() <= 30.0) { - i17++; - } - if (item.getI18() > overlimit.getIharm18() && item.getI18() >= 0.0 && item.getI18() <= 30.0) { - i18++; - } - if (item.getI19() > overlimit.getIharm19() && item.getI19() >= 0.0 && item.getI19() <= 30.0) { - i19++; - } - if (item.getI20() > overlimit.getIharm20() && item.getI20() >= 0.0 && item.getI20() <= 30.0) { - i20++; - } - if (item.getI21() > overlimit.getIharm21() && item.getI21() >= 0.0 && item.getI21() <= 30.0) { - i21++; - } - if (item.getI22() > overlimit.getIharm22() && item.getI22() >= 0.0 && item.getI22() <= 30.0) { - i22++; - } - if (item.getI23() > overlimit.getIharm23() && item.getI23() >= 0.0 && item.getI23() <= 30.0) { - i23++; - } - if (item.getI24() > overlimit.getIharm24() && item.getI24() >= 0.0 && item.getI24() <= 30.0) { - i24++; - } - if (item.getI25() > overlimit.getIharm25() && item.getI25() >= 0.0 && item.getI25() <= 30.0) { - i25++; + for (int j = 2; j < 26; j++) { + try { + // 获取 DataHarmDto 类的 getIx 方法 + Method getVMethod = DataIDto.class.getMethod("getI" + j); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit && value >= 0.0 && value <= 30.0) { + addAbnormalData(i[j - 2], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } } } } - //0.5-15.5次间谐波电压含有率 + // 初始化 uHarm 系列列表 + List[] uHarm = new List[16]; + for (int j = 0; j < 16; j++) { + uHarm[j] = new ArrayList<>(); + } + // 处理数据 if (!CollectionUtils.isEmpty(dataInHarmVPOList)) { for (DataHarmDto item : dataInHarmVPOList) { - if (item.getV1() > overlimit.getInuharm1() && item.getV1() >= 0.0 && item.getV1() <= 30.0) { - uHarm1++; - } - if (item.getV2() > overlimit.getInuharm2() && item.getV2() >= 0.0 && item.getV2() <= 30.0) { - uHarm2++; - } - if (item.getV3() > overlimit.getInuharm3() && item.getV3() >= 0.0 && item.getV3() <= 30.0) { - uHarm3++; - } - if (item.getV4() > overlimit.getInuharm4() && item.getV4() >= 0.0 && item.getV4() <= 30.0) { - uHarm4++; - } - if (item.getV5() > overlimit.getInuharm5() && item.getV5() >= 0.0 && item.getV5() <= 30.0) { - uHarm5++; - } - if (item.getV6() > overlimit.getInuharm6() && item.getV6() >= 0.0 && item.getV6() <= 30.0) { - uHarm6++; - } - if (item.getV7() > overlimit.getInuharm7() && item.getV7() >= 0.0 && item.getV7() <= 30.0) { - uHarm7++; - } - if (item.getV8() > overlimit.getInuharm8() && item.getV8() >= 0.0 && item.getV8() <= 30.0) { - uHarm8++; - } - if (item.getV9() > overlimit.getInuharm9() && item.getV9() >= 0.0 && item.getV9() <= 30.0) { - uHarm9++; - } - if (item.getV10() > overlimit.getInuharm10() && item.getV10() >= 0.0 && item.getV10() <= 30.0) { - uHarm10++; - } - if (item.getV11() > overlimit.getInuharm11() && item.getV11() >= 0.0 && item.getV11() <= 30.0) { - uHarm11++; - } - if (item.getV12() > overlimit.getInuharm12() && item.getV12() >= 0.0 && item.getV12() <= 30.0) { - uHarm12++; - } - if (item.getV13() > overlimit.getInuharm13() && item.getV13() >= 0.0 && item.getV13() <= 30.0) { - uHarm13++; - } - if (item.getV14() > overlimit.getInuharm14() && item.getV14() >= 0.0 && item.getV14() <= 30.0) { - uHarm14++; - } - if (item.getV15() > overlimit.getInuharm15() && item.getV15() >= 0.0 && item.getV15() <= 30.0) { - uHarm15++; - } - if (item.getV16() > overlimit.getInuharm16() && item.getV16() >= 0.0 && item.getV16() <= 30.0) { - uHarm16++; + for (int j = 1; j < 17; j++) { + try { + // 获取 DataHarmDto 类的 getVx 方法 + Method getVMethod = DataHarmDto.class.getMethod("getV" + j); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit && value >= 0.0 && value <= 30.0) { + addAbnormalData(uHarm[j - 1], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } } } } @@ -536,21 +391,20 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataVPOList)) { for (DataVDto item : dataVPOList) { if (item.getVThd() > overlimit.getUaberrance() && item.getVThd() >= 0.0 && item.getVThd() <= 30.0) { - thd++; + addAbnormalData(thd, item.getMinTime(), item.getValueType(), item.getVThd(), overlimit.getUaberrance()); } } } //电压上偏差、电压下偏差(根据vl_dev的正负判断是用哪个值判断越限) if (!CollectionUtils.isEmpty(dataVPODevList)) { for (DataVDto item : dataVPODevList) { - if (item.getVlDev() >= 0) { if (item.getVlDev() > overlimit.getVoltageDev() && item.getVlDev() >= 0.0 && item.getVlDev() <= 20.0) { - uDev++; + addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); } } else { if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) && Math.abs(item.getVuDev()) <= 20.0) { - uDev++; + addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); } } } @@ -559,503 +413,413 @@ public class IDataCrossingServiceImpl implements IDataCrossingService { if (!CollectionUtils.isEmpty(dataPltPOList)) { for (DataPltDto item : dataPltPOList) { if (item.getPlt() > overlimit.getFlicker() && item.getPlt() >= 0 && item.getPlt() <= 20) { - flicker++; + addAbnormalData(flicker, item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); } } } - DataLimitRateDto limitRate = new DataLimitRateDto(); limitRate.setLineId(lineId); limitRate.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN)); limitRate.setPhasicType(phasicType); limitRate.setAllTime(allTime); limitRate.setFlickerAllTime(flickerAllTime); - limitRate.setUaberranceOvertime(thd); - limitRate.setINegOvertime(0); - limitRate.setFreqDevOvertime(0); - limitRate.setUharm2Overtime(v2); - limitRate.setUharm3Overtime(v3); - limitRate.setUharm4Overtime(v4); - limitRate.setUharm5Overtime(v5); - limitRate.setUharm6Overtime(v6); - limitRate.setUharm7Overtime(v7); - limitRate.setUharm8Overtime(v8); - limitRate.setUharm9Overtime(v9); - limitRate.setUharm10Overtime(v10); - limitRate.setUharm11Overtime(v11); - limitRate.setUharm12Overtime(v12); - limitRate.setUharm13Overtime(v13); - limitRate.setUharm14Overtime(v14); - limitRate.setUharm15Overtime(v15); - limitRate.setUharm16Overtime(v16); - limitRate.setUharm17Overtime(v17); - limitRate.setUharm18Overtime(v18); - limitRate.setUharm19Overtime(v19); - limitRate.setUharm20Overtime(v20); - limitRate.setUharm21Overtime(v21); - limitRate.setUharm22Overtime(v22); - limitRate.setUharm23Overtime(v23); - limitRate.setUharm24Overtime(v24); - limitRate.setUharm25Overtime(v25); - limitRate.setIharm2Overtime(i2); - limitRate.setIharm3Overtime(i3); - limitRate.setIharm4Overtime(i4); - limitRate.setIharm5Overtime(i5); - limitRate.setIharm6Overtime(i6); - limitRate.setIharm7Overtime(i7); - limitRate.setIharm8Overtime(i8); - limitRate.setIharm9Overtime(i9); - limitRate.setIharm10Overtime(i10); - limitRate.setIharm11Overtime(i11); - limitRate.setIharm12Overtime(i12); - limitRate.setIharm13Overtime(i13); - limitRate.setIharm14Overtime(i14); - limitRate.setIharm15Overtime(i15); - limitRate.setIharm16Overtime(i16); - limitRate.setIharm17Overtime(i17); - limitRate.setIharm18Overtime(i18); - limitRate.setIharm19Overtime(i19); - limitRate.setIharm20Overtime(i20); - limitRate.setIharm21Overtime(i21); - limitRate.setIharm22Overtime(i22); - limitRate.setIharm23Overtime(i23); - limitRate.setIharm24Overtime(i24); - limitRate.setIharm25Overtime(i25); - limitRate.setInuharm1Overtime(uHarm1); - limitRate.setInuharm2Overtime(uHarm2); - limitRate.setInuharm3Overtime(uHarm3); - limitRate.setInuharm4Overtime(uHarm4); - limitRate.setInuharm5Overtime(uHarm5); - limitRate.setInuharm6Overtime(uHarm6); - limitRate.setInuharm7Overtime(uHarm7); - limitRate.setInuharm8Overtime(uHarm8); - limitRate.setInuharm9Overtime(uHarm9); - limitRate.setInuharm10Overtime(uHarm10); - limitRate.setInuharm11Overtime(uHarm11); - limitRate.setInuharm12Overtime(uHarm12); - limitRate.setInuharm13Overtime(uHarm13); - limitRate.setInuharm14Overtime(uHarm14); - limitRate.setInuharm15Overtime(uHarm15); - limitRate.setInuharm16Overtime(uHarm16); - limitRate.setUbalanceOvertime(0); - limitRate.setVoltageDevOvertime(uDev); - limitRate.setFlickerOvertime(flicker); - return limitRate; + + limitRate.setFlickerOvertime(flicker.size()); + limitRate.setUaberranceOvertime(thd.size()); + limitRate.setINegOvertime(iNeg.size()); + limitRate.setFreqDevOvertime(freqDev.size()); + limitRate.setUbalanceOvertime(uAberrance.size()); + limitRate.setVoltageDevOvertime(uDev.size()); + dto.setDataLimitRate(getDataLimitRateDto(limitRate, v, i, uHarm)); + + DataLimitRateDetailDto detail = new DataLimitRateDetailDto(); + int detailAllTime = flicker.size() + uAberrance.size() + iNeg.size() + freqDev.size() + thd.size() + uDev.size() + + v[0].size() + v[1].size() + v[2].size() + v[3].size() + v[4].size() + v[5].size() + v[6].size() + v[7].size() + v[8].size() + v[9].size() + v[11].size() + v[12].size() + v[13].size() + v[14].size() + v[15].size() + v[16].size() + v[17].size() + v[18].size() + v[19].size() + v[20].size() + v[21].size() + v[22].size() + v[23].size() + + i[0].size() + i[1].size() + i[2].size() + i[3].size() + i[4].size() + i[5].size() + i[6].size() + i[7].size() + i[8].size() + i[9].size() + i[10].size() + i[11].size() + i[12].size() + i[13].size() + i[14].size() + i[15].size() + i[16].size() + i[17].size() + i[18].size() + i[19].size() + i[20].size() + i[21].size() + i[22].size() + i[23].size() + + uHarm[0].size() + uHarm[1].size() + uHarm[2].size() + uHarm[3].size() + uHarm[4].size() + uHarm[5].size() + uHarm[6].size() + uHarm[7].size() + uHarm[8].size() + uHarm[9].size() + uHarm[10].size() + uHarm[11].size() + uHarm[12].size() + uHarm[13].size() + uHarm[14].size() + uHarm[15].size(); + detail.setLineId(lineId); + detail.setPhasicType(phasicType); + detail.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN)); + detail.setAllTime(detailAllTime); + detail.setFlickerAllTime(flicker.size()); + detail.setFlickerOvertime(JSON.toJSONString(flicker)); + detail.setUaberranceOvertime(JSON.toJSONString(uAberrance)); + detail.setINegOvertime(JSON.toJSONString(iNeg)); + detail.setFreqDevOvertime(JSON.toJSONString(freqDev)); + detail.setUbalanceOvertime(JSON.toJSONString(thd)); + detail.setVoltageDevOvertime(JSON.toJSONString(uDev)); + detail.setUharm2Overtime(JSON.toJSONString(v[0])); + detail.setUharm3Overtime(JSON.toJSONString(v[1])); + detail.setUharm4Overtime(JSON.toJSONString(v[2])); + detail.setUharm5Overtime(JSON.toJSONString(v[3])); + detail.setUharm6Overtime(JSON.toJSONString(v[4])); + detail.setUharm7Overtime(JSON.toJSONString(v[5])); + detail.setUharm8Overtime(JSON.toJSONString(v[6])); + detail.setUharm9Overtime(JSON.toJSONString(v[7])); + detail.setUharm10Overtime(JSON.toJSONString(v[8])); + detail.setUharm11Overtime(JSON.toJSONString(v[9])); + detail.setUharm12Overtime(JSON.toJSONString(v[10])); + detail.setUharm13Overtime(JSON.toJSONString(v[11])); + detail.setUharm14Overtime(JSON.toJSONString(v[12])); + detail.setUharm15Overtime(JSON.toJSONString(v[13])); + detail.setUharm16Overtime(JSON.toJSONString(v[14])); + detail.setUharm17Overtime(JSON.toJSONString(v[15])); + detail.setUharm18Overtime(JSON.toJSONString(v[16])); + detail.setUharm19Overtime(JSON.toJSONString(v[17])); + detail.setUharm20Overtime(JSON.toJSONString(v[18])); + detail.setUharm21Overtime(JSON.toJSONString(v[19])); + detail.setUharm22Overtime(JSON.toJSONString(v[20])); + detail.setUharm23Overtime(JSON.toJSONString(v[21])); + detail.setUharm24Overtime(JSON.toJSONString(v[22])); + detail.setUharm25Overtime(JSON.toJSONString(v[23])); + detail.setIharm2Overtime(JSON.toJSONString(i[0])); + detail.setIharm3Overtime(JSON.toJSONString(i[1])); + detail.setIharm4Overtime(JSON.toJSONString(i[2])); + detail.setIharm5Overtime(JSON.toJSONString(i[3])); + detail.setIharm6Overtime(JSON.toJSONString(i[4])); + detail.setIharm7Overtime(JSON.toJSONString(i[5])); + detail.setIharm8Overtime(JSON.toJSONString(i[6])); + detail.setIharm9Overtime(JSON.toJSONString(i[7])); + detail.setIharm10Overtime(JSON.toJSONString(i[8])); + detail.setIharm11Overtime(JSON.toJSONString(i[9])); + detail.setIharm12Overtime(JSON.toJSONString(i[10])); + detail.setIharm13Overtime(JSON.toJSONString(i[11])); + detail.setIharm14Overtime(JSON.toJSONString(i[12])); + detail.setIharm15Overtime(JSON.toJSONString(i[13])); + detail.setIharm16Overtime(JSON.toJSONString(i[14])); + detail.setIharm17Overtime(JSON.toJSONString(i[15])); + detail.setIharm18Overtime(JSON.toJSONString(i[16])); + detail.setIharm19Overtime(JSON.toJSONString(i[17])); + detail.setIharm20Overtime(JSON.toJSONString(i[18])); + detail.setIharm21Overtime(JSON.toJSONString(i[19])); + detail.setIharm22Overtime(JSON.toJSONString(i[20])); + detail.setIharm23Overtime(JSON.toJSONString(i[21])); + detail.setIharm24Overtime(JSON.toJSONString(i[22])); + detail.setIharm25Overtime(JSON.toJSONString(i[23])); + detail.setInuharm1Overtime(JSON.toJSONString(uHarm[0])); + detail.setInuharm2Overtime(JSON.toJSONString(uHarm[1])); + detail.setInuharm3Overtime(JSON.toJSONString(uHarm[2])); + detail.setInuharm4Overtime(JSON.toJSONString(uHarm[3])); + detail.setInuharm5Overtime(JSON.toJSONString(uHarm[4])); + detail.setInuharm6Overtime(JSON.toJSONString(uHarm[5])); + detail.setInuharm7Overtime(JSON.toJSONString(uHarm[6])); + detail.setInuharm8Overtime(JSON.toJSONString(uHarm[7])); + detail.setInuharm9Overtime(JSON.toJSONString(uHarm[8])); + detail.setInuharm10Overtime(JSON.toJSONString(uHarm[9])); + detail.setInuharm11Overtime(JSON.toJSONString(uHarm[10])); + detail.setInuharm12Overtime(JSON.toJSONString(uHarm[11])); + detail.setInuharm13Overtime(JSON.toJSONString(uHarm[12])); + detail.setInuharm14Overtime(JSON.toJSONString(uHarm[13])); + detail.setInuharm15Overtime(JSON.toJSONString(uHarm[14])); + detail.setInuharm16Overtime(JSON.toJSONString(uHarm[15])); + dto.setDataLimitRateDetail(detail); + return dto; } - public DataLimitRateDto limitRateDataT( + public DataLimitDetailDto limitRateDataT( String dataDate, Overlimit overlimit, Integer allTime, Integer flickerAllTime, String lineId, - Map> map1, - Map> map2, - Map> map3, - Map> map4, - Map> map5, - Map> map6, - Map> map7, - Map> map8, - Map> map9) { + List dataHarmRateVPOList, + List dataIPOList, + List dataInHarmVPOList, + List dataVPOList, + List dataVPOUnbalanceList, + List dataIPONegList, + List dataVPOFreqList, + List dataVPODevList, + List dataPltPOList) { + DataLimitDetailDto dto = new DataLimitDetailDto(); DataLimitRateDto limitRate = new DataLimitRateDto(); - int v2 = 0, v3 = 0, v4 = 0, v5 = 0, v6 = 0, v7 = 0, v8 = 0, v9 = 0, v10 = 0, v11 = 0, v12 = 0, v13 = 0, v14 = 0, v15 = 0, v16 = 0, v17 = 0, v18 = 0, v19 = 0, v20 = 0, v21 = 0, v22 = 0, v23 = 0, v24 = 0, v25 = 0; - int i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0; - int uHarm1 = 0, uHarm2 = 0, uHarm3 = 0, uHarm4 = 0, uHarm5 = 0, uHarm6 = 0, uHarm7 = 0, uHarm8 = 0, uHarm9 = 0, uHarm10 = 0, uHarm11 = 0, uHarm12 = 0, uHarm13 = 0, uHarm14 = 0, uHarm15 = 0, uHarm16 = 0; - int thd = 0, uDev = 0, flicker = 0, freqDev = 0, uAberrance = 0, iNeg = 0; - //2-25次谐波电压含有率 - for (String time : map1.keySet()) { - List list = map1.get(time); - List l2 = list.stream().filter(s -> s.getV2() > overlimit.getUharm2() && s.getV2() >= 0.0 && s.getV2() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l2)) { - v2++; - } - List l3 = list.stream().filter(s -> s.getV3() > overlimit.getUharm3() && s.getV3() >= 0.0 && s.getV3() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l3)) { - v3++; - } - List l4 = list.stream().filter(s -> s.getV4() > overlimit.getUharm4() && s.getV4() >= 0.0 && s.getV4() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l4)) { - v4++; - } - List l5 = list.stream().filter(s -> s.getV5() > overlimit.getUharm5() && s.getV5() >= 0.0 && s.getV5() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l5)) { - v5++; - } - List l6 = list.stream().filter(s -> s.getV6() > overlimit.getUharm6() && s.getV6() >= 0.0 && s.getV6() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l6)) { - v6++; - } - List l7 = list.stream().filter(s -> s.getV7() > overlimit.getUharm7() && s.getV7() >= 0.0 && s.getV7() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l7)) { - v7++; - } - List l8 = list.stream().filter(s -> s.getV8() > overlimit.getUharm8() && s.getV8() >= 0.0 && s.getV8() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l8)) { - v8++; - } - List l9 = list.stream().filter(s -> s.getV9() > overlimit.getUharm9() && s.getV9() >= 0.0 && s.getV9() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l9)) { - v9++; - } - List l10 = list.stream().filter(s -> s.getV10() > overlimit.getUharm10() && s.getV10() >= 0.0 && s.getV10() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l10)) { - v10++; - } - List l11 = list.stream().filter(s -> s.getV11() > overlimit.getUharm11() && s.getV11() >= 0.0 && s.getV11() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l11)) { - v11++; - } - List l12 = list.stream().filter(s -> s.getV12() > overlimit.getUharm12() && s.getV12() >= 0.0 && s.getV12() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l12)) { - v12++; - } - List l13 = list.stream().filter(s -> s.getV13() > overlimit.getUharm13() && s.getV13() >= 0.0 && s.getV13() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l13)) { - v13++; - } - List l14 = list.stream().filter(s -> s.getV14() > overlimit.getUharm14() && s.getV14() >= 0.0 && s.getV14() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l14)) { - v14++; - } - List l15 = list.stream().filter(s -> s.getV15() > overlimit.getUharm15() && s.getV15() >= 0.0 && s.getV15() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l15)) { - v15++; - } - List l16 = list.stream().filter(s -> s.getV16() > overlimit.getUharm16() && s.getV16() >= 0.0 && s.getV16() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l16)) { - v16++; - } - List l17 = list.stream().filter(s -> s.getV17() > overlimit.getUharm17() && s.getV17() >= 0.0 && s.getV17() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l17)) { - v17++; - } - List l18 = list.stream().filter(s -> s.getV18() > overlimit.getUharm18() && s.getV18() >= 0.0 && s.getV18() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l18)) { - v18++; - } - List l19 = list.stream().filter(s -> s.getV19() > overlimit.getUharm19() && s.getV19() >= 0.0 && s.getV19() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l19)) { - v19++; - } - List l20 = list.stream().filter(s -> s.getV20() > overlimit.getUharm20() && s.getV20() >= 0.0 && s.getV20() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l20)) { - v20++; - } - List l21 = list.stream().filter(s -> s.getV21() > overlimit.getUharm21() && s.getV21() >= 0.0 && s.getV21() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l21)) { - v21++; - } - List l22 = list.stream().filter(s -> s.getV22() > overlimit.getUharm22() && s.getV22() >= 0.0 && s.getV22() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l22)) { - v22++; - } - List l23 = list.stream().filter(s -> s.getV23() > overlimit.getUharm23() && s.getV23() >= 0.0 && s.getV23() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l23)) { - v23++; - } - List l24 = list.stream().filter(s -> s.getV24() > overlimit.getUharm24() && s.getV24() >= 0.0 && s.getV24() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l24)) { - v24++; - } - List l25 = list.stream().filter(s -> s.getV25() > overlimit.getUharm25() && s.getV25() >= 0.0 && s.getV25() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l25)) { - v25++; + List thd = new ArrayList<>(), uDev = new ArrayList<>(), flicker = new ArrayList<>(), freqDev = new ArrayList<>(), uAberrance = new ArrayList<>(), iNeg = new ArrayList<>(); + // 初始化 v 系列列表 + List[] v = new List[24]; + for (int i = 0; i < 24; i++) { + v[i] = new ArrayList<>(); + } + // 处理数据 + if (!CollectionUtils.isEmpty(dataHarmRateVPOList)) { + for (DataHarmDto item : dataHarmRateVPOList) { + for (int i = 2; i < 26; i++) { + try { + // 获取 DataHarmDto 类的 getVx 方法 + Method getVMethod = DataHarmDto.class.getMethod("getV" + i); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit) { + addAbnormalData(v[i - 2], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } } - //2-25次谐波电流 - for (String time : map2.keySet()) { - List list = map2.get(time); - List l2 = list.stream().filter(s -> s.getI2() > overlimit.getIharm2() && s.getI2() >= 0.0 && s.getI2() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l2)) { - i2++; - } - List l3 = list.stream().filter(s -> s.getI3() > overlimit.getIharm3() && s.getI3() >= 0.0 && s.getI3() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l3)) { - i3++; - } - List l4 = list.stream().filter(s -> s.getI4() > overlimit.getIharm4() && s.getI4() >= 0.0 && s.getI4() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l4)) { - i4++; - } - List l5 = list.stream().filter(s -> s.getI5() > overlimit.getIharm5() && s.getI5() >= 0.0 && s.getI5() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l5)) { - i5++; - } - List l6 = list.stream().filter(s -> s.getI6() > overlimit.getIharm6() && s.getI6() >= 0.0 && s.getI6() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l6)) { - i6++; - } - List l7 = list.stream().filter(s -> s.getI7() > overlimit.getIharm7() && s.getI7() >= 0.0 && s.getI7() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l7)) { - i7++; - } - List l8 = list.stream().filter(s -> s.getI8() > overlimit.getIharm8() && s.getI8() >= 0.0 && s.getI8() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l8)) { - i8++; - } - List l9 = list.stream().filter(s -> s.getI9() > overlimit.getIharm9() && s.getI9() >= 0.0 && s.getI9() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l9)) { - i9++; - } - List l10 = list.stream().filter(s -> s.getI10() > overlimit.getIharm10() && s.getI10() >= 0.0 && s.getI10() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l10)) { - i10++; - } - List l11 = list.stream().filter(s -> s.getI11() > overlimit.getIharm11() && s.getI11() >= 0.0 && s.getI11() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l11)) { - i11++; - } - List l12 = list.stream().filter(s -> s.getI12() > overlimit.getIharm12() && s.getI12() >= 0.0 && s.getI12() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l12)) { - i12++; - } - List l13 = list.stream().filter(s -> s.getI13() > overlimit.getIharm13() && s.getI13() >= 0.0 && s.getI13() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l13)) { - i13++; - } - List l14 = list.stream().filter(s -> s.getI14() > overlimit.getIharm14() && s.getI14() >= 0.0 && s.getI14() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l14)) { - i14++; - } - List l15 = list.stream().filter(s -> s.getI15() > overlimit.getIharm15() && s.getI15() >= 0.0 && s.getI15() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l15)) { - i15++; - } - List l16 = list.stream().filter(s -> s.getI16() > overlimit.getIharm16() && s.getI16() >= 0.0 && s.getI16() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l16)) { - i16++; - } - List l17 = list.stream().filter(s -> s.getI17() > overlimit.getIharm17() && s.getI17() >= 0.0 && s.getI17() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l17)) { - i17++; - } - List l18 = list.stream().filter(s -> s.getI18() > overlimit.getIharm18() && s.getI18() >= 0.0 && s.getI18() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l18)) { - i18++; - } - List l19 = list.stream().filter(s -> s.getI19() > overlimit.getIharm19() && s.getI19() >= 0.0 && s.getI19() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l19)) { - i19++; - } - List l20 = list.stream().filter(s -> s.getI20() > overlimit.getIharm20() && s.getI20() >= 0.0 && s.getI20() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l20)) { - i20++; - } - List l21 = list.stream().filter(s -> s.getI21() > overlimit.getIharm21() && s.getI21() >= 0.0 && s.getI21() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l21)) { - i21++; - } - List l22 = list.stream().filter(s -> s.getI22() > overlimit.getIharm22() && s.getI22() >= 0.0 && s.getI22() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l22)) { - i22++; - } - List l23 = list.stream().filter(s -> s.getI23() > overlimit.getIharm23() && s.getI23() >= 0.0 && s.getI23() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l23)) { - i23++; - } - List l24 = list.stream().filter(s -> s.getI24() > overlimit.getIharm24() && s.getI24() >= 0.0 && s.getI24() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l24)) { - i24++; - } - List l25 = list.stream().filter(s -> s.getI25() > overlimit.getIharm25() && s.getI25() >= 0.0 && s.getI25() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l25)) { - i25++; + + // 初始化 i 系列列表 + List[] i = new List[24]; + for (int j = 0; j < 24; j++) { + i[j] = new ArrayList<>(); + } + // 处理数据 + if (!CollectionUtils.isEmpty(dataIPOList)) { + for (DataIDto item : dataIPOList) { + for (int j = 2; j < 26; j++) { + try { + // 获取 DataHarmDto 类的 getIx 方法 + Method getVMethod = DataIDto.class.getMethod("getI" + j); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit ) { + addAbnormalData(i[j - 2], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } } - //0.5-15.5次间谐波电压含有率 - for (String time : map3.keySet()) { - List list3 = map3.get(time); - List l2 = list3.stream().filter(s -> s.getV1() > overlimit.getInuharm1() && s.getV1() >= 0.0 && s.getV1() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l2)) { - uHarm1++; - } - List l3 = list3.stream().filter(s -> s.getV2() > overlimit.getInuharm2() && s.getV2() >= 0.0 && s.getV2() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l3)) { - uHarm2++; - } - List l4 = list3.stream().filter(s -> s.getV3() > overlimit.getInuharm3() && s.getV3() >= 0.0 && s.getV3() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l4)) { - uHarm3++; - } - List l5 = list3.stream().filter(s -> s.getV4() > overlimit.getInuharm4() && s.getV4() >= 0.0 && s.getV4() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l5)) { - uHarm4++; - } - List l6 = list3.stream().filter(s -> s.getV5() > overlimit.getInuharm5() && s.getV5() >= 0.0 && s.getV5() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l6)) { - uHarm5++; - } - List l7 = list3.stream().filter(s -> s.getV6() > overlimit.getInuharm6() && s.getV6() >= 0.0 && s.getV6() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l7)) { - uHarm6++; - } - List l8 = list3.stream().filter(s -> s.getV7() > overlimit.getInuharm7() && s.getV7() >= 0.0 && s.getV7() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l8)) { - uHarm7++; - } - List l9 = list3.stream().filter(s -> s.getV8() > overlimit.getInuharm8() && s.getV8() >= 0.0 && s.getV8() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l9)) { - uHarm8++; - } - List l10 = list3.stream().filter(s -> s.getV9() > overlimit.getInuharm9() && s.getV9() >= 0.0 && s.getV9() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l10)) { - uHarm9++; - } - List l11 = list3.stream().filter(s -> s.getV10() > overlimit.getInuharm10() && s.getV10() >= 0.0 && s.getV10() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l11)) { - uHarm10++; - } - List l12 = list3.stream().filter(s -> s.getV11() > overlimit.getInuharm11() && s.getV11() >= 0.0 && s.getV11() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l12)) { - uHarm11++; - } - List l13 = list3.stream().filter(s -> s.getV12() > overlimit.getInuharm12() && s.getV12() >= 0.0 && s.getV12() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l13)) { - uHarm12++; - } - List l14 = list3.stream().filter(s -> s.getV13() > overlimit.getInuharm13() && s.getV13() >= 0.0 && s.getV13() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l14)) { - uHarm13++; - } - List l15 = list3.stream().filter(s -> s.getV14() > overlimit.getInuharm14() && s.getV14() >= 0.0 && s.getV14() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l15)) { - uHarm14++; - } - List l16 = list3.stream().filter(s -> s.getV15() > overlimit.getInuharm15() && s.getV15() >= 0.0 && s.getV15() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l16)) { - uHarm15++; - } - List l17 = list3.stream().filter(s -> s.getV16() > overlimit.getInuharm16() && s.getV16() >= 0.0 && s.getV16() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l17)) { - uHarm16++; + // 初始化 uHarm 系列列表 + List[] uHarm = new List[16]; + for (int j = 0; j < 16; j++) { + uHarm[j] = new ArrayList<>(); + } + // 处理数据 + if (!CollectionUtils.isEmpty(dataInHarmVPOList)) { + for (DataHarmDto item : dataInHarmVPOList) { + for (int j = 1; j < 17; j++) { + try { + // 获取 DataHarmDto 类的 getVx 方法 + Method getVMethod = DataHarmDto.class.getMethod("getV" + j); + Double value = (Double) getVMethod.invoke(item); + // 获取 Overlimit 类的 getUharmx 方法 + Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j); + float limit = (float) getUharmMethod.invoke(overlimit); + if (value > limit ) { + addAbnormalData(uHarm[j - 1], item.getValueType(), item.getMinTime(), value, limit); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } } //电压总谐波畸变率 - for (String time : map4.keySet()) { - List list = map4.get(time); - List l = list.stream().filter(s -> s.getVThd() > overlimit.getUaberrance() && s.getVThd() >= 0.0 && s.getVThd() <= 30.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l)) { - thd++; + if (!CollectionUtils.isEmpty(dataVPOList)) { + for (DataVDto item : dataVPOList) { + if (item.getVThd() > overlimit.getUaberrance() ) { + addAbnormalData(thd, item.getMinTime(), item.getValueType(), item.getVThd(), overlimit.getUaberrance()); + } } } //三相电压不平衡度 - for (String time : map5.keySet()) { - List list = map5.get(time); - List l = list.stream().filter(s -> s.getVUnbalance() > overlimit.getUbalance() && s.getVUnbalance() >= 0.0 && s.getVUnbalance() <= 40.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l)) { - uAberrance++; + if (!CollectionUtils.isEmpty(dataVPOUnbalanceList)) { + for (DataVDto item : dataVPOUnbalanceList) { + if (item.getVUnbalance() > overlimit.getUbalance() ) { + addAbnormalData(uAberrance, item.getMinTime(), item.getValueType(), item.getVUnbalance(), overlimit.getUbalance()); + } } } //负序电流 - for (String time : map6.keySet()) { - List list = map6.get(time); - List l = list.stream().filter(s -> s.getINeg() > overlimit.getINeg()).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l)) { - iNeg++; + if (!CollectionUtils.isEmpty(dataIPONegList)) { + for (DataIDto item : dataIPONegList) { + if (item.getINeg() > overlimit.getINeg()) { + addAbnormalData(iNeg, item.getMinTime(), item.getValueType(), item.getINeg(), overlimit.getINeg()); + } } } //频率偏差 - for (String time : map7.keySet()) { - List list = map7.get(time); - List l = list.stream().filter(s -> s.getFreqDev() > overlimit.getFreqDev() && Math.abs(s.getFreqDev()) <= 7.5).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l)) { - freqDev++; + if (!CollectionUtils.isEmpty(dataVPOFreqList)) { + for (DataVDto item : dataVPOFreqList) { + if (item.getFreqDev() > overlimit.getFreqDev() ) { + addAbnormalData(freqDev, item.getMinTime(), item.getValueType(), item.getFreqDev(), overlimit.getFreqDev()); + } } } - //电压上偏差、电压下偏差 - for (String time : map8.keySet()) { - List list = map8.get(time); - List l1 = list.stream().filter(s -> s.getVlDev() >= 0.0 && s.getVlDev() <= 20.0 && s.getVlDev() > overlimit.getVoltageDev()).collect(Collectors.toList()); - List l2 = list.stream().filter(s -> s.getVuDev() >= -20.0 && s.getVuDev() <= 0.0 && Math.abs(s.getVuDev()) > Math.abs(overlimit.getUvoltageDev())).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l1) || !CollectionUtils.isEmpty(l2)) { - uDev++; + + //电压上偏差、电压下偏差(根据vl_dev的正负判断是用哪个值判断越限) + if (!CollectionUtils.isEmpty(dataVPODevList)) { + for (DataVDto item : dataVPODevList) { + if (item.getVlDev() >= 0) { + if (item.getVlDev() > overlimit.getVoltageDev() ) { + addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + } + } else { + if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) ) { + addAbnormalData(uDev, item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev()); + } + } } } //长时间闪变 - for (String time : map9.keySet()) { - List list = map9.get(time); - List l = list.stream().filter(s -> s.getPlt() > overlimit.getFlicker() && s.getPlt() >= 0.0 && s.getPlt() <= 20.0).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(l)) { - flicker++; + if (!CollectionUtils.isEmpty(dataPltPOList)) { + for (DataPltDto item : dataPltPOList) { + if (item.getPlt() > overlimit.getFlicker() ) { + addAbnormalData(flicker, item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker()); + } } } limitRate.setLineId(lineId); - limitRate.setPhasicType("T"); - limitRate.setAllTime(allTime); limitRate.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN)); + limitRate.setPhasicType(PhaseType.PHASE_T); + limitRate.setAllTime(allTime); limitRate.setFlickerAllTime(flickerAllTime); - limitRate.setUaberranceOvertime(thd); - limitRate.setINegOvertime(iNeg); - limitRate.setFreqDevOvertime(freqDev); - limitRate.setUharm2Overtime(v2); - limitRate.setUharm3Overtime(v3); - limitRate.setUharm4Overtime(v4); - limitRate.setUharm5Overtime(v5); - limitRate.setUharm6Overtime(v6); - limitRate.setUharm7Overtime(v7); - limitRate.setUharm8Overtime(v8); - limitRate.setUharm9Overtime(v9); - limitRate.setUharm10Overtime(v10); - limitRate.setUharm11Overtime(v11); - limitRate.setUharm12Overtime(v12); - limitRate.setUharm13Overtime(v13); - limitRate.setUharm14Overtime(v14); - limitRate.setUharm15Overtime(v15); - limitRate.setUharm16Overtime(v16); - limitRate.setUharm17Overtime(v17); - limitRate.setUharm18Overtime(v18); - limitRate.setUharm19Overtime(v19); - limitRate.setUharm20Overtime(v20); - limitRate.setUharm21Overtime(v21); - limitRate.setUharm22Overtime(v22); - limitRate.setUharm23Overtime(v23); - limitRate.setUharm24Overtime(v24); - limitRate.setUharm25Overtime(v25); - limitRate.setIharm2Overtime(i2); - limitRate.setIharm3Overtime(i3); - limitRate.setIharm4Overtime(i4); - limitRate.setIharm5Overtime(i5); - limitRate.setIharm6Overtime(i6); - limitRate.setIharm7Overtime(i7); - limitRate.setIharm8Overtime(i8); - limitRate.setIharm9Overtime(i9); - limitRate.setIharm10Overtime(i10); - limitRate.setIharm11Overtime(i11); - limitRate.setIharm12Overtime(i12); - limitRate.setIharm13Overtime(i13); - limitRate.setIharm14Overtime(i14); - limitRate.setIharm15Overtime(i15); - limitRate.setIharm16Overtime(i16); - limitRate.setIharm17Overtime(i17); - limitRate.setIharm18Overtime(i18); - limitRate.setIharm19Overtime(i19); - limitRate.setIharm20Overtime(i20); - limitRate.setIharm21Overtime(i21); - limitRate.setIharm22Overtime(i22); - limitRate.setIharm23Overtime(i23); - limitRate.setIharm24Overtime(i24); - limitRate.setIharm25Overtime(i25); - limitRate.setInuharm1Overtime(uHarm1); - limitRate.setInuharm2Overtime(uHarm2); - limitRate.setInuharm3Overtime(uHarm3); - limitRate.setInuharm4Overtime(uHarm4); - limitRate.setInuharm5Overtime(uHarm5); - limitRate.setInuharm6Overtime(uHarm6); - limitRate.setInuharm7Overtime(uHarm7); - limitRate.setInuharm8Overtime(uHarm8); - limitRate.setInuharm9Overtime(uHarm9); - limitRate.setInuharm10Overtime(uHarm10); - limitRate.setInuharm11Overtime(uHarm11); - limitRate.setInuharm12Overtime(uHarm12); - limitRate.setInuharm13Overtime(uHarm13); - limitRate.setInuharm14Overtime(uHarm14); - limitRate.setInuharm15Overtime(uHarm15); - limitRate.setInuharm16Overtime(uHarm16); - limitRate.setUbalanceOvertime(uAberrance); - limitRate.setVoltageDevOvertime(uDev); - limitRate.setFlickerOvertime(flicker); + limitRate.setUaberranceOvertime(thd.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setINegOvertime(iNeg.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setFreqDevOvertime(freqDev.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUbalanceOvertime(uAberrance.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setVoltageDevOvertime(uDev.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setFlickerOvertime(flicker.stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm2Overtime(v[0].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm3Overtime(v[1].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm4Overtime(v[2].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm5Overtime(v[3].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm6Overtime(v[4].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm7Overtime(v[5].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm8Overtime(v[6].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm9Overtime(v[7].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm10Overtime(v[8].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm11Overtime(v[9].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm12Overtime(v[10].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm13Overtime(v[11].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm14Overtime(v[12].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm15Overtime(v[13].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm16Overtime(v[14].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm17Overtime(v[15].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm18Overtime(v[16].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm19Overtime(v[17].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm20Overtime(v[18].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm21Overtime(v[19].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm22Overtime(v[20].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm23Overtime(v[21].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm24Overtime(v[22].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setUharm25Overtime(v[23].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm2Overtime(i[0].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm3Overtime(i[1].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm4Overtime(i[2].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm5Overtime(i[3].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm6Overtime(i[4].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm7Overtime(i[5].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm8Overtime(i[6].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm9Overtime(i[7].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm10Overtime(i[8].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm11Overtime(i[9].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm12Overtime(i[10].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm13Overtime(i[11].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm14Overtime(i[12].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm15Overtime(i[13].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm16Overtime(i[14].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm17Overtime(i[15].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm18Overtime(i[16].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm19Overtime(i[17].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm20Overtime(i[18].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm21Overtime(i[19].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm22Overtime(i[20].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm23Overtime(i[21].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm24Overtime(i[22].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setIharm25Overtime(i[23].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm1Overtime(uHarm[0].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm2Overtime(uHarm[1].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm3Overtime(uHarm[2].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm4Overtime(uHarm[3].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm5Overtime(uHarm[4].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm6Overtime(uHarm[5].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm7Overtime(uHarm[6].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm8Overtime(uHarm[7].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm9Overtime(uHarm[8].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm10Overtime(uHarm[9].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm11Overtime(uHarm[10].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm12Overtime(uHarm[11].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm13Overtime(uHarm[12].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm14Overtime(uHarm[13].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm15Overtime(uHarm[14].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + limitRate.setInuharm16Overtime(uHarm[15].stream().map(AbnormalData::getTime).distinct().collect(Collectors.toList()).size()); + dto.setDataLimitRate(limitRate); + return dto; + } + + + private DataLimitRateDto getDataLimitRateDto(DataLimitRateDto limitRate, List[] v, List[] i, List[] uHarm) { + limitRate.setUharm2Overtime(v[0].size()); + limitRate.setUharm3Overtime(v[1].size()); + limitRate.setUharm4Overtime(v[2].size()); + limitRate.setUharm5Overtime(v[3].size()); + limitRate.setUharm6Overtime(v[4].size()); + limitRate.setUharm7Overtime(v[5].size()); + limitRate.setUharm8Overtime(v[6].size()); + limitRate.setUharm9Overtime(v[7].size()); + limitRate.setUharm10Overtime(v[8].size()); + limitRate.setUharm11Overtime(v[9].size()); + limitRate.setUharm12Overtime(v[10].size()); + limitRate.setUharm13Overtime(v[11].size()); + limitRate.setUharm14Overtime(v[12].size()); + limitRate.setUharm15Overtime(v[13].size()); + limitRate.setUharm16Overtime(v[14].size()); + limitRate.setUharm17Overtime(v[15].size()); + limitRate.setUharm18Overtime(v[16].size()); + limitRate.setUharm19Overtime(v[17].size()); + limitRate.setUharm20Overtime(v[18].size()); + limitRate.setUharm21Overtime(v[19].size()); + limitRate.setUharm22Overtime(v[20].size()); + limitRate.setUharm23Overtime(v[21].size()); + limitRate.setUharm24Overtime(v[22].size()); + limitRate.setUharm25Overtime(v[23].size()); + limitRate.setIharm2Overtime(i[0].size()); + limitRate.setIharm3Overtime(i[1].size()); + limitRate.setIharm4Overtime(i[2].size()); + limitRate.setIharm5Overtime(i[3].size()); + limitRate.setIharm6Overtime(i[4].size()); + limitRate.setIharm7Overtime(i[5].size()); + limitRate.setIharm8Overtime(i[6].size()); + limitRate.setIharm9Overtime(i[7].size()); + limitRate.setIharm10Overtime(i[8].size()); + limitRate.setIharm11Overtime(i[9].size()); + limitRate.setIharm12Overtime(i[10].size()); + limitRate.setIharm13Overtime(i[11].size()); + limitRate.setIharm14Overtime(i[12].size()); + limitRate.setIharm15Overtime(i[13].size()); + limitRate.setIharm16Overtime(i[14].size()); + limitRate.setIharm17Overtime(i[15].size()); + limitRate.setIharm18Overtime(i[16].size()); + limitRate.setIharm19Overtime(i[17].size()); + limitRate.setIharm20Overtime(i[18].size()); + limitRate.setIharm21Overtime(i[19].size()); + limitRate.setIharm22Overtime(i[20].size()); + limitRate.setIharm23Overtime(i[21].size()); + limitRate.setIharm24Overtime(i[22].size()); + limitRate.setIharm25Overtime(i[23].size()); + limitRate.setInuharm1Overtime(uHarm[0].size()); + limitRate.setInuharm2Overtime(uHarm[1].size()); + limitRate.setInuharm3Overtime(uHarm[2].size()); + limitRate.setInuharm4Overtime(uHarm[3].size()); + limitRate.setInuharm5Overtime(uHarm[4].size()); + limitRate.setInuharm6Overtime(uHarm[5].size()); + limitRate.setInuharm7Overtime(uHarm[6].size()); + limitRate.setInuharm8Overtime(uHarm[7].size()); + limitRate.setInuharm9Overtime(uHarm[8].size()); + limitRate.setInuharm10Overtime(uHarm[9].size()); + limitRate.setInuharm11Overtime(uHarm[10].size()); + limitRate.setInuharm12Overtime(uHarm[11].size()); + limitRate.setInuharm13Overtime(uHarm[12].size()); + limitRate.setInuharm14Overtime(uHarm[13].size()); + limitRate.setInuharm15Overtime(uHarm[14].size()); + limitRate.setInuharm16Overtime(uHarm[15].size()); return limitRate; } + + private void addAbnormalData(List list, String valueType, String time, double value, float overLimitValue) { + AbnormalData data = new AbnormalData(); + data.setTime(time); + data.setValueType(valueType); + data.setValue(value); + data.setOverLimitValue(overLimitValue); + list.add(data); + } } diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java new file mode 100644 index 0000000..ff22e59 --- /dev/null +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java @@ -0,0 +1,150 @@ +package com.njcn.algorithm.serviceimpl.line; + + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.njcn.algorithm.pojo.bo.CalculatedParam; +import com.njcn.algorithm.service.line.IDataOnlineRateService; +import com.njcn.dataProcess.api.PqsCommunicateFeignClient; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.pojo.dto.RStatOnlineRateDto; +import com.njcn.dataProcess.util.TimeUtils; +import com.njcn.device.pq.pojo.po.RStatOnlinerateD; +import com.njcn.influx.deprecated.InfluxDBPublicParam; +import com.njcn.influx.pojo.po.PqsCommunicate; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/10 11:19 + */ +@Service +@RequiredArgsConstructor +public class IDataOnlineRateServiceImpl implements IDataOnlineRateService { + private final static Integer NUM = 100; + private final Integer online = 1; + private final Integer offline = 0; + @Resource + private PqsCommunicateFeignClient communicateFeignClient; + + @Override + public void dataOnlineRate(CalculatedParam calculatedParam) { + + LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); + lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); + lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); + List devList = calculatedParam.getIdList(); + + List> pendingIds = ListUtils.partition(devList, 1); + List outCommunicateData = new ArrayList<>(); + for (List dev : pendingIds) { + lineParam.setLineId(dev); + List data = communicateFeignClient.getRawDataLatest(lineParam).getData(); + outCommunicateData.addAll(data); + } + List list = new ArrayList<>(); + Date dateOut = DateUtil.parse(calculatedParam.getDataDate()); + for (PqsCommunicateDto pqsCommunicate : outCommunicateData) { + RStatOnlineRateDto.Detail onlineRateDpo = new RStatOnlineRateDto.Detail(); + Date newDate = DateUtil.parse(pqsCommunicate.getTime()); + lineParam.setLineId(Arrays.asList(pqsCommunicate.getDevId())); + RStatOnlineRateDto onLineRate = onLineMinute(newDate, dateOut, pqsCommunicate.getType(), lineParam); + onlineRateDpo.setTimeId(calculatedParam.getDataDate()); + onlineRateDpo.setDevIndex(pqsCommunicate.getDevId()); + onlineRateDpo.setOnlineMin(onLineRate.getOnlineMin()); + onlineRateDpo.setOfflineMin(onLineRate.getOfflineMin()); + list.add(onlineRateDpo); + } + if (CollectionUtil.isNotEmpty(list)) { + System.out.println(); + } + } + + /** + * new的时间和当前统计时间 不是/是 同一天 + */ + private RStatOnlineRateDto onLineMinute(Date newDate, Date date, Integer type, LineCountEvaluateParam lineParam) { + RStatOnlineRateDto onLineRate = new RStatOnlineRateDto(); + Integer minute = 0; + /*new的时间和当前统计时间是同一天*/ + if (DateUtil.isSameDay(newDate, date)) { + minute = processData(newDate, date, type, lineParam); + } else { + /*new的时间和当前统计时间不是同一天*/ + Date nowDate = new Date(); + /*数据补招的情况下*/ + if (DateUtil.between(date, nowDate, DateUnit.DAY) > DateUtil.between(newDate, nowDate, DateUnit.DAY)) { + minute = processData(newDate, date, null, lineParam); + } else { + if (online.equals(type)) { + minute = InfluxDBPublicParam.DAY_MINUTE; + } + } + } + onLineRate.setOnlineMin(minute); + onLineRate.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE - minute); + return onLineRate; + } + + private Integer processData(Date newDate, Date date, Integer type,LineCountEvaluateParam lineParam) { + int minute = 0; + List communicateData = communicateFeignClient.getRawData(lineParam).getData(); + /*当前统计时间内存在多条数据*/ + if (communicateData.size() > 1) { + Date lastTime = null; + long onlineTime = 0; + long offlineTime = 0; + for (int i = 0; i < communicateData.size(); i++) { + long differ; + if (i == 0) { + /*首次比较取统计时间*/ + differ = DateUtil.between(date, DateUtil.parse(communicateData.get(i).getTime()), DateUnit.MINUTE); + } else { + /*后续取上一次数据时间*/ + differ = DateUtil.between(lastTime, DateUtil.parse(communicateData.get(i).getTime()), DateUnit.MINUTE); + } + if (online.equals(communicateData.get(i).getType())) { + offlineTime = offlineTime + differ; + } else { + onlineTime = onlineTime + differ; + } + lastTime = DateUtil.parse(communicateData.get(i).getTime()); + } + if (online.equals(communicateData.get(communicateData.size() - 1).getType())) { + minute = InfluxDBPublicParam.DAY_MINUTE - (int) offlineTime; + } else { + minute = (int) onlineTime; + } + } else { + if (type != null) { + /*当前统计时间内仅有一条数据*/ + long differ = DateUtil.between(date, newDate, DateUnit.MINUTE); + if (online.equals(type)) { + minute = InfluxDBPublicParam.DAY_MINUTE - (int) differ; + } + } else { + List communicateDataOld = communicateFeignClient.getRawDataEnd(lineParam).getData(); + if (communicateDataOld.size() > 0) { + if (online.equals(communicateDataOld.get(0).getType())) { + minute = InfluxDBPublicParam.DAY_MINUTE; + } + } + } + } + return minute; + } +} 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 new file mode 100644 index 0000000..69501c1 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/DataLimitRateDetailFeignClient.java @@ -0,0 +1,25 @@ +package com.njcn.dataProcess.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.fallback.DataLimitRateDetailFeignClientFallbackFactory; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 9:30 + */ +@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/dataLimitRateDetail", fallbackFactory = DataLimitRateDetailFeignClientFallbackFactory.class, contextId = "dataLimitRateDetail") +public interface DataLimitRateDetailFeignClient { + + @PostMapping("/batchInsertion") + HttpResult batchInsertion(@RequestBody List dataIDTOList); + +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/PqsCommunicateFeignClient.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/PqsCommunicateFeignClient.java new file mode 100644 index 0000000..3bc21b8 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/PqsCommunicateFeignClient.java @@ -0,0 +1,47 @@ +package com.njcn.dataProcess.api; + +import com.njcn.common.pojo.constant.ServerInfo; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.fallback.DataInharmVFeignClientFallbackFactory; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/10 11:23 + */ +@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/pqsCommunicate", fallbackFactory = DataInharmVFeignClientFallbackFactory.class, contextId = "pqsCommunicate") +public interface PqsCommunicateFeignClient { + + + /** + * 获取取出最新装置数据 + * @Author: wr + * @Date: 2025/3/10 11:25 + */ + @PostMapping("/getRawDataLatest") + HttpResult> getRawDataLatest(@RequestBody LineCountEvaluateParam lineParam); + + /** + * 获取原始数据 + * @Author: wr + * @Date: 2025/3/10 11:23 + */ + @PostMapping("/getRawData") + HttpResult> getRawData(@RequestBody LineCountEvaluateParam lineParam); + + /** + * 获取是否有当天最后一条数据 + * @Author: wr + * @Date: 2025/3/10 11:23 + */ + @PostMapping("/getRawDataEnd") + HttpResult> getRawDataEnd(@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 new file mode 100644 index 0000000..203bde8 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/DataLimitRateDetailFeignClientFallbackFactory.java @@ -0,0 +1,48 @@ +package com.njcn.dataProcess.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.DataLimitRateDetailFeignClient; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.util.DataProcessingEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 9:30 + */ +@Slf4j +@Component +public class DataLimitRateDetailFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public DataLimitRateDetailFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = DataProcessingEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new DataLimitRateDetailFeignClient() { + + @Override + public HttpResult batchInsertion(List dataIDTOList) { + log.error("{}异常,降级处理,异常为:{}","批量插入数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/PqsCommunicateFeignClientFallbackFactory.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/PqsCommunicateFeignClientFallbackFactory.java new file mode 100644 index 0000000..f36afbd --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/api/fallback/PqsCommunicateFeignClientFallbackFactory.java @@ -0,0 +1,62 @@ +package com.njcn.dataProcess.api.fallback; + +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.dataProcess.api.PqsCommunicateFeignClient; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.util.DataProcessingEnumUtil; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + + +/** + * @author denghuajun + * @version 1.0.0 + * @date 2022年01月05日 15:08 + */ +@Slf4j +@Component +public class PqsCommunicateFeignClientFallbackFactory implements FallbackFactory { + + + /** + * 输出远程请求接口异常日志 + * @param cause RPC请求异常 + */ + @Override + public PqsCommunicateFeignClient create(Throwable cause) { + //判断抛出异常是否为解码器抛出的业务异常 + Enum exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; + if(cause.getCause() instanceof BusinessException){ + BusinessException businessException = (BusinessException) cause.getCause(); + exceptionEnum = DataProcessingEnumUtil.getExceptionEnum(businessException.getResult()); + } + Enum finalExceptionEnum = exceptionEnum; + return new PqsCommunicateFeignClient() { + + + @Override + public HttpResult> getRawDataLatest(LineCountEvaluateParam lineParam) { + log.error("{}异常,降级处理,异常为:{}","获取取出最新装置数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getRawData(LineCountEvaluateParam lineParam) { + log.error("{}异常,降级处理,异常为:{}","获取原始数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getRawDataEnd(LineCountEvaluateParam lineParam) { + log.error("{}异常,降级处理,异常为:{}","获取是否有当天最后一条数据",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; + } +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/po/influx/PqsCommunicate.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/po/influx/PqsCommunicate.java new file mode 100644 index 0000000..3a026f5 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/po/influx/PqsCommunicate.java @@ -0,0 +1,54 @@ +package com.njcn.dataProcess.po.influx; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.njcn.dataProcess.dto.DataFlucDTO; +import com.njcn.influx.utils.InstantDateSerializer; +import lombok.Data; +import org.influxdb.annotation.Column; +import org.influxdb.annotation.Measurement; +import org.influxdb.annotation.TimeColumn; + +import java.time.Instant; +import java.time.ZoneId; +import java.util.Objects; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + */ +@Data +@Measurement(name = "pqs_communicate") +public class PqsCommunicate { + + @TimeColumn + @Column(name = "time",tag = true) + @JsonSerialize(using = InstantDateSerializer.class) + private Instant time; + + @Column(name = "id",tag = true) + private String devId; + + @Column(name = "description") + private String description; + + @Column(name = "type") + private Integer type; + + + + public static PqsCommunicate relationToInfluxDB(PqsCommunicate pqsCommunicate) { + if (pqsCommunicate == null) { + return null; + } + PqsCommunicate influxDBDataFluc = new PqsCommunicate(); + Instant instant = pqsCommunicate.getTime().atZone(ZoneId.systemDefault()).toInstant(); + influxDBDataFluc.setTime(instant); + influxDBDataFluc.setDevId(pqsCommunicate.devId); + influxDBDataFluc.setDescription(pqsCommunicate.getDescription()); + influxDBDataFluc.setType(pqsCommunicate.type); + return influxDBDataFluc; + } + +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java new file mode 100644 index 0000000..d78beee --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java @@ -0,0 +1,32 @@ +package com.njcn.dataProcess.pojo.dto; + + +import lombok.Data; + +/** + * @author wr + * @description + * @date 2025/3/7 13:32 + */ +@Data +public class AbnormalData { + + /** + * 超标时间 + */ + private String time; + + /** + * 数据类型(最大值:max、最小值:min、平均值:avg、95值:cp95) + */ + private String valueType; + /** + * 异常值 + */ + private Double value; + + /** + * 限值 + */ + private float overLimitValue; +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitDetailDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitDetailDto.java new file mode 100644 index 0000000..4b99ba1 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitDetailDto.java @@ -0,0 +1,17 @@ +package com.njcn.dataProcess.pojo.dto; + + +import lombok.Data; + +/** + * @author wr + * @description + * @date 2025/3/7 13:32 + */ +@Data +public class DataLimitDetailDto { + + + private DataLimitRateDto dataLimitRate; + private DataLimitRateDetailDto dataLimitRateDetail; +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java new file mode 100644 index 0000000..45ac002 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/DataLimitRateDetailDto.java @@ -0,0 +1,385 @@ +package com.njcn.dataProcess.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author web2023 + */ +@Data +public class DataLimitRateDetailDto implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + private String lineId; + + /** + * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 + */ + private String phasicType; + + /** + * 合格率时间 + */ + private LocalDate time; + + /** + * 总计算次数 + */ + private Integer allTime; + /** + * 闪变总计算次数 + */ + private Integer flickerAllTime; + /** + * 闪变越限次数 + */ + private String flickerOvertime; + + /** + * 频率偏差越限次数 + */ + private String freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + private String voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + private String ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + private String uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + private String iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + private String uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + private String uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + private String uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + private String uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + private String uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + private String uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + private String uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + private String uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + private String uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + private String uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + private String uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + private String uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + private String uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + private String uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + private String uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + private String uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + private String uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + private String uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + private String uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + private String uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + private String uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + private String uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + private String uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + private String uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + private String iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + private String iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + private String iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + private String iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + private String iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + private String iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + private String iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + private String iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + private String iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + private String iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + private String iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + private String iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + private String iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + private String iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + private String iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + private String iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + private String iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + private String iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + private String iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + private String iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + private String iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + private String iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + private String iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + private String iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + private String inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + private String inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + private String inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + private String inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + private String inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + private String inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + private String inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + private String inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + private String inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + private String inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + private String inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + private String inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + private String inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + private String inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + private String inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + private String inuharm16Overtime; +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/PqsCommunicateDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/PqsCommunicateDto.java new file mode 100644 index 0000000..8c9c1ed --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/PqsCommunicateDto.java @@ -0,0 +1,23 @@ +package com.njcn.dataProcess.pojo.dto; + +import lombok.Data; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/10 10:01 + */ +@Data +public class PqsCommunicateDto { + + private String time; + + private String devId; + + private String description; + + private Integer type; + + +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/RStatOnlineRateDto.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/RStatOnlineRateDto.java new file mode 100644 index 0000000..fcd3df4 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/RStatOnlineRateDto.java @@ -0,0 +1,38 @@ +package com.njcn.dataProcess.pojo.dto; + +import lombok.Data; + + +/** + * @Description: 在线率日表 + * @Author: wr + * @Date: 2025/3/10 11:28 + */ +@Data +public class RStatOnlineRateDto { + + private static final long serialVersionUID = 1L; + + /** + * 在线条数 + */ + private Integer onlineMin; + + /** + * 离线条数 + */ + private Integer offlineMin; + + @Data + public static class Detail extends RStatOnlineRateDto{ + /** + * 日期 + */ + private String timeId; + + /** + * 装置id + */ + private String devIndex; + } +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java new file mode 100644 index 0000000..0e17959 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatLimitRateDetailD.java @@ -0,0 +1,469 @@ +package com.njcn.dataProcess.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@TableName(value = "r_stat_limit_rate_detail_d") +public class RStatLimitRateDetailD implements Serializable { + /** + * 监测点ID合格率的变电站/装置/母线/线路序号 + */ + @MppMultiId + @TableField(value = "my_index") + private String lineId; + + /** + * 数据类型,’A’表示A相,’B’表示B相,’C’表示C相,’’M’表示ABC三项总和,T’表示总 + */ + @MppMultiId + @TableField(value = "phasic_type") + private String phasicType; + + /** + * 合格率时间 + */ + @MppMultiId + @TableField(value = "time_id") + @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") + private LocalDate time; + + /** + * 总计算次数 + */ + @TableField(value = "all_time") + private Integer allTime; + + /** + * 闪变总计算次数 + */ + @TableField(value = "flicker_all_time") + private Integer flickerAllTime; + + /** + * 闪变越限次数 + */ + @TableField(value = "flicker_overtime") + private String flickerOvertime; + + + /** + * 频率偏差越限次数 + */ + @TableField(value = "freq_dev_overtime") + private String freqDevOvertime; + + /** + * 电压偏差越限次数 + */ + @TableField(value = "voltage_dev_overtime") + private String voltageDevOvertime; + + /** + * 三相电压不平衡度越限次数 + */ + @TableField(value = "ubalance_overtime") + private String ubalanceOvertime; + + /** + * 电压谐波畸变率越限次数 + */ + @TableField(value = "uaberrance_overtime") + private String uaberranceOvertime; + + /** + * 负序电流限值次数 + */ + @TableField(value = "i_neg_overtime") + private String iNegOvertime; + + /** + * 2次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_2_overtime") + private String uharm2Overtime; + + /** + * 3次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_3_overtime") + private String uharm3Overtime; + + /** + * 4次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_4_overtime") + private String uharm4Overtime; + + /** + * 5次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_5_overtime") + private String uharm5Overtime; + + /** + * 6次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_6_overtime") + private String uharm6Overtime; + + /** + * 7次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_7_overtime") + private String uharm7Overtime; + + /** + * 8次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_8_overtime") + private String uharm8Overtime; + + /** + * 9次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_9_overtime") + private String uharm9Overtime; + + /** + * 10次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_10_overtime") + private String uharm10Overtime; + + /** + * 11次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_11_overtime") + private String uharm11Overtime; + + /** + * 12次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_12_overtime") + private String uharm12Overtime; + + /** + * 13次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_13_overtime") + private String uharm13Overtime; + + /** + * 14次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_14_overtime") + private String uharm14Overtime; + + /** + * 15次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_15_overtime") + private String uharm15Overtime; + + /** + * 16次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_16_overtime") + private String uharm16Overtime; + + /** + * 17次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_17_overtime") + private String uharm17Overtime; + + /** + * 18次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_18_overtime") + private String uharm18Overtime; + + /** + * 19次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_19_overtime") + private String uharm19Overtime; + + /** + * 20次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_20_overtime") + private String uharm20Overtime; + + /** + * 21次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_21_overtime") + private String uharm21Overtime; + + /** + * 22次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_22_overtime") + private String uharm22Overtime; + + /** + * 23次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_23_overtime") + private String uharm23Overtime; + + /** + * 24次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_24_overtime") + private String uharm24Overtime; + + /** + * 25次电压谐波含有率越限次数 + */ + @TableField(value = "uharm_25_overtime") + private String uharm25Overtime; + + /** + * 2次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_2_overtime") + private String iharm2Overtime; + + /** + * 3次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_3_overtime") + private String iharm3Overtime; + + /** + * 4次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_4_overtime") + private String iharm4Overtime; + + /** + * 5次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_5_overtime") + private String iharm5Overtime; + + /** + * 6次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_6_overtime") + private String iharm6Overtime; + + /** + * 7次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_7_overtime") + private String iharm7Overtime; + + /** + * 8次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_8_overtime") + private String iharm8Overtime; + + /** + * 9次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_9_overtime") + private String iharm9Overtime; + + /** + * 10次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_10_overtime") + private String iharm10Overtime; + + /** + * 11次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_11_overtime") + private String iharm11Overtime; + + /** + * 12次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_12_overtime") + private String iharm12Overtime; + + /** + * 13次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_13_overtime") + private String iharm13Overtime; + + /** + * 14次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_14_overtime") + private String iharm14Overtime; + + /** + * 15次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_15_overtime") + private String iharm15Overtime; + + /** + * 16次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_16_overtime") + private String iharm16Overtime; + + /** + * 17次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_17_overtime") + private String iharm17Overtime; + + /** + * 18次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_18_overtime") + private String iharm18Overtime; + + /** + * 19次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_19_overtime") + private String iharm19Overtime; + + /** + * 20次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_20_overtime") + private String iharm20Overtime; + + /** + * 21次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_21_overtime") + private String iharm21Overtime; + + /** + * 22次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_22_overtime") + private String iharm22Overtime; + + /** + * 23次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_23_overtime") + private String iharm23Overtime; + + /** + * 24次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_24_overtime") + private String iharm24Overtime; + + /** + * 25次电流谐波幅值越限次数 + */ + @TableField(value = "iharm_25_overtime") + private String iharm25Overtime; + + /** + * 0.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_1_overtime") + private String inuharm1Overtime; + + /** + * 1.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_2_overtime") + private String inuharm2Overtime; + + /** + * 2.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_3_overtime") + private String inuharm3Overtime; + + /** + * 3.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_4_overtime") + private String inuharm4Overtime; + + /** + * 4.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_5_overtime") + private String inuharm5Overtime; + + /** + * 5.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_6_overtime") + private String inuharm6Overtime; + + /** + * 6.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_7_overtime") + private String inuharm7Overtime; + + /** + * 7.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_8_overtime") + private String inuharm8Overtime; + + /** + * 8.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_9_overtime") + private String inuharm9Overtime; + + /** + * 9.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_10_overtime") + private String inuharm10Overtime; + + /** + * 10.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_11_overtime") + private String inuharm11Overtime; + + /** + * 11.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_12_overtime") + private String inuharm12Overtime; + + /** + * 12.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_13_overtime") + private String inuharm13Overtime; + + /** + * 13.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_14_overtime") + private String inuharm14Overtime; + + /** + * 14.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_15_overtime") + private String inuharm15Overtime; + + /** + * 15.5次间谐波电压限值次数 + */ + @TableField(value = "inuharm_16_overtime") + private String inuharm16Overtime; +} diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java new file mode 100644 index 0000000..0bba5c4 --- /dev/null +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/RStatOnlineRateD.java @@ -0,0 +1,47 @@ +package com.njcn.dataProcess.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Description: 在线率日表 + * @Author: wr + * @Date: 2025/3/10 11:28 + */ +@Data +@TableName("r_stat_onlinerate_d") +public class RStatOnlineRateD { + + private static final long serialVersionUID = 1L; + + /** + * 日期 + */ + @MppMultiId + @TableField(value = "time_id") + private LocalDateTime timeId; + + /** + * 装置id + */ + @MppMultiId + @TableField(value = "dev_index") + private String devIndex; + + /** + * 在线条数 + */ + @TableField(value = "online_min") + private Integer onlineMin; + + /** + * 离线条数 + */ + @TableField(value = "offline_min") + private Integer offlineMin; + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateController.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateController.java index 79024ed..a31d1af 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateController.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateController.java @@ -30,7 +30,7 @@ import java.util.List; @Controller @RestController @RequestMapping("/dataLimitRate") -@Api(tags = "电压类数据获取") +@Api(tags = "监测点稳态指标越限次数获取") public class DataLimitRateController extends BaseController { @QueryBean 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 new file mode 100644 index 0000000..0e141c5 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/DataLimitRateDetailController.java @@ -0,0 +1,58 @@ +package com.njcn.dataProcess.controller; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +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.dataProcess.annotation.InsertBean; +import com.njcn.dataProcess.annotation.QueryBean; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.service.ILimitRate; +import com.njcn.dataProcess.service.ILimitRateDetail; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +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; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0 + * @data 2024/11/6 19:48 + */ +@Validated +@Slf4j +@Controller +@RestController +@RequestMapping("/dataLimitRateDetail") +@Api(tags = "监测点稳态指标越限详情获取") +public class DataLimitRateDetailController extends BaseController { + + @QueryBean + private ILimitRateDetail limitRateDetailQuery; + + @InsertBean + private ILimitRateDetail limitRateDetailInsert; + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD) + @PostMapping("/batchInsertion") + @ApiOperation("批量插入") + public HttpResult batchInsertion(@RequestBody List dataVDTOList) { + String methodDescribe = getMethodDescribe("batchInsertion"); + limitRateDetailInsert.batchInsertion(dataVDTOList); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/PqsCommunicateController.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/PqsCommunicateController.java new file mode 100644 index 0000000..17170ca --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/controller/PqsCommunicateController.java @@ -0,0 +1,74 @@ +package com.njcn.dataProcess.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.dataProcess.annotation.InsertBean; +import com.njcn.dataProcess.annotation.QueryBean; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.service.IPqsCommunicate; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +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; + +import java.util.List; + +/** + * @author hongawen + * @version 1.0 + * @data 2024/11/6 19:48 + */ +@Validated +@Slf4j +@Controller +@RestController +@RequestMapping("/pqsCommunicate") +@Api(tags = "装置在线原始获取") +public class PqsCommunicateController extends BaseController { + + @QueryBean + private IPqsCommunicate pqsCommunicateCvtQuery; + + @InsertBean + private IPqsCommunicate pqsCommunicateInsert; + + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getRawDataLatest") + @ApiOperation("获取取出最新装置数据") + public HttpResult> getRawDataLatest(@RequestBody LineCountEvaluateParam lineParam) { + String methodDescribe = getMethodDescribe("getRawDataLatest"); + List rawData = pqsCommunicateCvtQuery.getRawDataLatest(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rawData, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getRawData") + @ApiOperation("获取原始数据") + public HttpResult> getRawData(@RequestBody LineCountEvaluateParam lineParam) { + String methodDescribe = getMethodDescribe("getRawData"); + List rawData = pqsCommunicateCvtQuery.getRawData(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rawData, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getRawDataEnd") + @ApiOperation("获取是否有当天最后一条数据") + public HttpResult> getRawDataEnd(@RequestBody LineCountEvaluateParam lineParam) { + String methodDescribe = getMethodDescribe("getRawData"); + List rawData = pqsCommunicateCvtQuery.getRawDataEnd(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rawData, methodDescribe); + } + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/imapper/PqsCommunicateMapper.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/imapper/PqsCommunicateMapper.java new file mode 100644 index 0000000..4ab62bc --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/imapper/PqsCommunicateMapper.java @@ -0,0 +1,16 @@ +package com.njcn.dataProcess.dao.imapper; + +import com.njcn.dataProcess.po.influx.PqsCommunicate; +import com.njcn.influx.base.InfluxDbBaseMapper; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/10 9:49 + */ +public interface PqsCommunicateMapper extends InfluxDbBaseMapper { + + + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatLimitRateDetailRelationMapper.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatLimitRateDetailRelationMapper.java new file mode 100644 index 0000000..45becb6 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/dao/relation/mapper/RStatLimitRateDetailRelationMapper.java @@ -0,0 +1,17 @@ +package com.njcn.dataProcess.dao.relation.mapper; + +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/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/ILimitRateDetail.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/ILimitRateDetail.java new file mode 100644 index 0000000..7501452 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/ILimitRateDetail.java @@ -0,0 +1,22 @@ +package com.njcn.dataProcess.service; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; + +import java.util.List; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/6 10:22 + */ +public interface ILimitRateDetail extends IMppService { + + /** + * 批量插入数据 + * @param limitRateDetailList + */ + void batchInsertion(List limitRateDetailList); +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IPqsCommunicate.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IPqsCommunicate.java new file mode 100644 index 0000000..287daed --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/IPqsCommunicate.java @@ -0,0 +1,37 @@ +package com.njcn.dataProcess.service; + + +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/6 10:22 + */ +public interface IPqsCommunicate { + + /** + * 取出最新装置数据 + * @param lineParam + * @return + */ + List getRawDataLatest(LineCountEvaluateParam lineParam); + + /** + * 获取时间范围数据 + * @param lineParam + * @return + */ + List getRawData(LineCountEvaluateParam lineParam); + + /** + *是否有当天最后一条数据 + * @param lineParam + * @return + */ + List getRawDataEnd(LineCountEvaluateParam lineParam); + +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbLimitRateDetailImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbLimitRateDetailImpl.java new file mode 100644 index 0000000..123e66a --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbLimitRateDetailImpl.java @@ -0,0 +1,26 @@ +package com.njcn.dataProcess.service.impl.influxdb; + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.dataProcess.dao.relation.mapper.RStatLimitRateDetailRelationMapper; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; +import com.njcn.dataProcess.service.ILimitRateDetail; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 10:13 + */ +@Service("InfluxdbLimitRateDetailImpl") +@RequiredArgsConstructor +public class InfluxdbLimitRateDetailImpl extends MppServiceImpl implements ILimitRateDetail { + + @Override + public void batchInsertion(List limitRateList) { + + } +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbPqsCommunicateImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbPqsCommunicateImpl.java new file mode 100644 index 0000000..86ceca5 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/influxdb/InfluxdbPqsCommunicateImpl.java @@ -0,0 +1,118 @@ +package com.njcn.dataProcess.service.impl.influxdb; + +import com.njcn.dataProcess.dao.imapper.PqsCommunicateMapper; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.po.influx.DataV; +import com.njcn.dataProcess.po.influx.PqsCommunicate; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.service.IPqsCommunicate; +import com.njcn.influx.query.InfluxQueryWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 10:13 + */ +@Service("InfluxdbPqsCommunicateImpl") +@RequiredArgsConstructor +public class InfluxdbPqsCommunicateImpl implements IPqsCommunicate { + + @Resource + private PqsCommunicateMapper pqsCommunicateMapper; + private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); + + @Override + public List getRawDataLatest(LineCountEvaluateParam lineParam) { + List result = new ArrayList<>(); + InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class); + influxQueryWrapper.regular(PqsCommunicate::getDevId, lineParam.getLineId()) + .select(PqsCommunicate::getTime) + .select(PqsCommunicate::getDevId) + .select(PqsCommunicate::getDescription) + .select(PqsCommunicate::getType) + .timeDesc() + .limit(1); + List list = pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); + list.forEach(item -> { + PqsCommunicateDto dto = new PqsCommunicateDto(); + BeanUtils.copyProperties(item, dto); + dto.setTime(DATE_TIME_FORMATTER.format(item.getTime())); + result.add(dto); + }); + return result; + } + + /** + * @Description: 获取时间段内的数据 + * @Param: + * @return: java.util.List + * @Author: clam + * @Date: 2025/02/24 + */ + @Override + public List getRawData(LineCountEvaluateParam lineParam) { + List result = new ArrayList<>(); + List list = getMinuteDataV(lineParam); + list.forEach(item -> { + PqsCommunicateDto dto = new PqsCommunicateDto(); + BeanUtils.copyProperties(item, dto); + dto.setTime(DATE_TIME_FORMATTER.format(item.getTime())); + result.add(dto); + }); + return result; + + } + + @Override + public List getRawDataEnd(LineCountEvaluateParam lineParam) { + List result = new ArrayList<>(); + InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class); + influxQueryWrapper.regular(PqsCommunicate::getDevId, lineParam.getLineId()) + .select(PqsCommunicate::getTime) + .select(PqsCommunicate::getDevId) + .select(PqsCommunicate::getDescription) + .select(PqsCommunicate::getType) + .le(PqsCommunicate::getTime, lineParam.getEndTime()) + .timeDesc() + .limit(1); + List list = pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); + list.forEach(item -> { + PqsCommunicateDto dto = new PqsCommunicateDto(); + BeanUtils.copyProperties(item, dto); + dto.setTime(DATE_TIME_FORMATTER.format(item.getTime())); + result.add(dto); + }); + return result; + } + + /** + * 按监测点集合、时间条件获取dataV分钟数据 + * timeMap参数来判断是否进行数据出来 timeMap为空则不进行数据处理 + * 剔除异常数据,这里会有三种情况判断 + * 1.无异常数据,则直接返回集合; + * 2.异常数据和无异常数据参杂,剔除异常数据,只计算正常数据; + * 3.全是异常数据,则使用异常数据进行计算,但是日表中需要标记出来,此数据有异常 + */ + public List getMinuteDataV(LineCountEvaluateParam lineParam) { + InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class); + influxQueryWrapper.regular(PqsCommunicate::getDevId, lineParam.getLineId()) + .select(PqsCommunicate::getTime) + .select(PqsCommunicate::getDevId) + .select(PqsCommunicate::getDescription) + .select(PqsCommunicate::getType) + .between(PqsCommunicate::getTime, lineParam.getStartTime(), lineParam.getEndTime()) + .timeAsc(); + return pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); + } +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationLimitRateDetailImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationLimitRateDetailImpl.java new file mode 100644 index 0000000..d01a273 --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationLimitRateDetailImpl.java @@ -0,0 +1,36 @@ +package com.njcn.dataProcess.service.impl.relation; + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.dataProcess.dao.relation.mapper.RStatLimitRateDetailRelationMapper; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD; +import com.njcn.dataProcess.service.ILimitRateDetail; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +/** + * @Description: + * @Author: wr + * @Date: 2025/3/7 10:13 + */ +@Service("RelationLimitRateDetailImpl") +@RequiredArgsConstructor +public class RelationLimitRateDetailImpl extends MppServiceImpl implements ILimitRateDetail { + + + @Override + public void batchInsertion(List limitRateList) { + List result = new ArrayList<>(); + limitRateList.forEach(item->{ + RStatLimitRateDetailD limitRate = new RStatLimitRateDetailD(); + BeanUtils.copyProperties(item, limitRate); + result.add(limitRate); + }); + this.saveOrUpdateBatchByMultiId(result); + } +} diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationPqsCommunicateImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationPqsCommunicateImpl.java new file mode 100644 index 0000000..11088eb --- /dev/null +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationPqsCommunicateImpl.java @@ -0,0 +1,36 @@ +package com.njcn.dataProcess.service.impl.relation; + +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto; +import com.njcn.dataProcess.service.IPqsCommunicate; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +/** + * @author hongawen + * @version 1.0 + * @data 2024/11/7 11:02 + */ +@Service("RelationPqsCommunicateImpl") +@RequiredArgsConstructor +public class RelationPqsCommunicateImpl implements IPqsCommunicate { + + + @Override + public List getRawDataLatest(LineCountEvaluateParam lineParam) { + return Collections.emptyList(); + } + + @Override + public List getRawData(LineCountEvaluateParam lineParam) { + return Collections.emptyList(); + } + + @Override + public List getRawDataEnd(LineCountEvaluateParam lineParam) { + return Collections.emptyList(); + } +}