diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/dataClean/MonitorBaseParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/dataClean/MonitorBaseParam.java index ebcbb0224..89eac7e55 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/dataClean/MonitorBaseParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/dataClean/MonitorBaseParam.java @@ -29,9 +29,11 @@ public class MonitorBaseParam extends BaseParam { @ApiModelProperty(value = "预警天数阈值") private Integer warnDayLimit; + @ApiModelProperty(value = "异常测点集合") private List monitorIds; - private String monitorId; + @ApiModelProperty(value = "指标id") + private String targetKey; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/DetailAbnormalVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/DetailAbnormalVO.java index f16cb0425..2819b2985 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/DetailAbnormalVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/DetailAbnormalVO.java @@ -18,9 +18,12 @@ public class DetailAbnormalVO { private Long timeSum; + private String targetKey; - + /** + * 异常实体 + */ @Data public static class DetailAbnormalInnerVO{ @@ -45,4 +48,27 @@ public class DetailAbnormalVO { private String cp95; } + + @Data + public static class DetailLimitInnerVO{ + + //时间 + private String time; + + private String targetKey; + + //指标类型 + private String targetName; + + //相别 + private String phaseType; + + //类型 + private String type; + + //最大 + private String val; + + + } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/JsonBaseVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/JsonBaseVO.java new file mode 100644 index 000000000..ef8e4db95 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/JsonBaseVO.java @@ -0,0 +1,22 @@ +package com.njcn.device.pq.pojo.vo.dataClean; + +import lombok.Data; + +/** + * @Author: cdf + * @CreateTime: 2025-04-01 + * @Description: + */ +@Data +public class JsonBaseVO { + + private String time; + + private String value; + + private String phasic; + + private String valueType; + + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/PowerQualityIndicatorsVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/PowerQualityIndicatorsVO.java index 893ac54a5..d6d523754 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/PowerQualityIndicatorsVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/PowerQualityIndicatorsVO.java @@ -1,5 +1,6 @@ package com.njcn.device.pq.pojo.vo.dataClean; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -10,22 +11,31 @@ import lombok.Data; @Data public class PowerQualityIndicatorsVO { + @ApiModelProperty(name = "monitorId",value = "监测点id") private String monitorId; //监测点名称 + @ApiModelProperty(name = "monitorName",value = "监测点名称") private String monitorName; //所属终端名称 + @ApiModelProperty(name = "devName",value = "所属终端名称") private String devName; //所属电站 + @ApiModelProperty(name = "stationName",value = "所属电站") private String stationName; //监测对象类型 + @ApiModelProperty(name = "objType",value = "监测对象类型") private String objType; //监测对象名称 + @ApiModelProperty(name = "objName",value = "监测对象名称") private String objName; //电压等级 + @ApiModelProperty(name = "voltageLevel",value = "电压等级") private String voltageLevel; //异常天数 + @ApiModelProperty(name = "abnormalDay",value = "异常天数") private Integer abnormalDay; //严重度 + @ApiModelProperty(name = "severity",value = "严重度") private Integer severity; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyMonitorVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyMonitorVO.java index 4f6be16ea..8c9a8705a 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyMonitorVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyMonitorVO.java @@ -20,12 +20,12 @@ public class VerifyMonitorVO { @ApiModelProperty(value = "异常测点数量",name = "abnormalNum") private Integer abnormalNum; - - private List targetList; + @ApiModelProperty(value = "时间范围异常测点数量",name = "mapList") private List> mapList; + private List monitorAlarmInfo; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyTargetVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyTargetVO.java index 2696f325c..25c0e82cc 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyTargetVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/dataClean/VerifyTargetVO.java @@ -1,5 +1,6 @@ package com.njcn.device.pq.pojo.vo.dataClean; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @@ -13,13 +14,19 @@ import java.util.Set; @Data public class VerifyTargetVO { + + @ApiModelProperty(value = "唯一标识",name = "key") private String key; + @ApiModelProperty(value = "指标中文名称",name = "targetName") private String targetName; + @ApiModelProperty(value = "范围描述",name = "rangeDesc") private String rangeDesc; + @ApiModelProperty(value = "异常测点集合",name = "ids") private Set ids; + @ApiModelProperty(value = "排序",name = "sort") private Integer sort; } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataVerifyController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataVerifyController.java index 16749815b..299b63878 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataVerifyController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataVerifyController.java @@ -10,6 +10,7 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.device.pq.pojo.param.dataClean.MonitorBaseParam; import com.njcn.device.pq.pojo.vo.dataClean.DetailAbnormalVO; +import com.njcn.device.pq.pojo.vo.dataClean.PowerQualityIndicatorsVO; import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO; import com.njcn.device.pq.service.IDataVerifyService; import io.swagger.annotations.Api; @@ -47,20 +48,29 @@ public class DataVerifyController extends BaseController { */ @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getMonitorVerifyData") - @ApiOperation("获取异常监测点相关信息") + @ApiOperation("异常-获取异常数据主页面") public HttpResult getMonitorVerifyData(@RequestBody MonitorBaseParam monitorBaseParam){ String methodDescribe = getMethodDescribe("getMonitorVerifyData"); VerifyMonitorVO verifyMonitorVO = iDataVerifyService.getMonitorVerifyData(monitorBaseParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, verifyMonitorVO, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getMonitorVerifyDay") + @ApiOperation("异常-更新按钮-获取异常数据列表") + public HttpResult> getMonitorVerifyDay(@RequestBody MonitorBaseParam monitorBaseParam){ + String methodDescribe = getMethodDescribe("getMonitorVerifyDay"); + List list = iDataVerifyService.getMonitorVerifyDay(monitorBaseParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + /** * 弹框-获取异常监测点列表 */ @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/monitorAbnormalTable") - @ApiOperation("弹框-获取异常监测点列表") + @ApiOperation("异常-弹框-获取异常监测点列表") public HttpResult> monitorAbnormalTable(@RequestBody MonitorBaseParam monitorBaseParam){ String methodDescribe = getMethodDescribe("monitorAbnormalDetail"); List page = iDataVerifyService.monitorAbnormalTable(monitorBaseParam); @@ -91,9 +101,44 @@ public class DataVerifyController extends BaseController { @ApiOperation("获取稳态告警数据") public HttpResult getMonitorLimitData(@RequestBody MonitorBaseParam monitorBaseParam){ String methodDescribe = getMethodDescribe("getMonitorLimitData"); - VerifyMonitorVO verifyMonitorVO = iDataVerifyService.getMonitorVerifyData(monitorBaseParam); + VerifyMonitorVO verifyMonitorVO = iDataVerifyService.getMonitorLimitData(monitorBaseParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, verifyMonitorVO, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getMonitorLimitDataDay") + @ApiOperation("更新按钮-获取稳态告警数据") + public HttpResult> getMonitorLimitDataDay(@RequestBody MonitorBaseParam monitorBaseParam){ + String methodDescribe = getMethodDescribe("getMonitorLimitDataDay"); + List verifyMonitorVO = iDataVerifyService.getMonitorLimitDataDay(monitorBaseParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, verifyMonitorVO, methodDescribe); + } + + /** + * 弹框-获取异常监测点列表 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/monitorLimitTable") + @ApiOperation("弹框-获取稳态告警监测点列表") + public HttpResult> monitorLimitTable(@RequestBody MonitorBaseParam monitorBaseParam){ + String methodDescribe = getMethodDescribe("monitorLimitTable"); + List list = iDataVerifyService.monitorLimitTable(monitorBaseParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + + /** + * 获取稳态告警监测点相关信息 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/monitorLimitTableDetail") + @ApiOperation("弹框-获取稳态告警监测点列表详情") + public HttpResult> monitorLimitTableDetail(@RequestBody MonitorBaseParam monitorBaseParam){ + String methodDescribe = getMethodDescribe("monitorLimitTableDetail"); + List list = iDataVerifyService.monitorLimitTableDetail(monitorBaseParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDataVerifyService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDataVerifyService.java index 814ac0ec5..0ab01aa9c 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDataVerifyService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IDataVerifyService.java @@ -6,6 +6,7 @@ import com.njcn.device.pq.pojo.param.dataClean.MonitorBaseParam; import com.njcn.device.pq.pojo.po.DataVerify; import com.njcn.device.pq.pojo.vo.dataClean.DetailAbnormalVO; +import com.njcn.device.pq.pojo.vo.dataClean.PowerQualityIndicatorsVO; import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO; import java.util.List; @@ -24,6 +25,8 @@ public interface IDataVerifyService extends IService { VerifyMonitorVO getMonitorVerifyData(MonitorBaseParam monitorBaseParam); + List getMonitorVerifyDay(MonitorBaseParam monitorBaseParam); + List monitorAbnormalTable(MonitorBaseParam monitorBaseParam); @@ -34,4 +37,11 @@ public interface IDataVerifyService extends IService { VerifyMonitorVO getMonitorLimitData(MonitorBaseParam monitorBaseParam); + List getMonitorLimitDataDay(MonitorBaseParam monitorBaseParam); + + List monitorLimitTable(MonitorBaseParam monitorBaseParam); + + List monitorLimitTableDetail(MonitorBaseParam monitorBaseParam); + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java index 4fee0a7e4..42641b1af 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java @@ -3,13 +3,24 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.*; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.C; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.dataProcess.api.DataLimitRateDetailFeignClient; +import com.njcn.dataProcess.api.DataLimitRateFeignClient; +import com.njcn.dataProcess.api.DataLimitTargetFeignClient; import com.njcn.dataProcess.api.PqReasonableRangeFeignClient; import com.njcn.dataProcess.enums.DataCleanEnum; import com.njcn.dataProcess.param.DataCleanParam; +import com.njcn.dataProcess.param.LineCountEvaluateParam; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; +import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; +import com.njcn.dataProcess.pojo.dto.DataLimitTargetDto; import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.pq.constant.Param; @@ -22,13 +33,11 @@ import com.njcn.device.pq.pojo.po.DataVerify; import com.njcn.device.pq.pojo.po.Line; import com.njcn.device.pq.pojo.po.LineDetail; import com.njcn.device.pq.pojo.vo.AreaLineInfoVO; -import com.njcn.device.pq.pojo.vo.dataClean.DetailAbnormalVO; -import com.njcn.device.pq.pojo.vo.dataClean.PowerQualityIndicatorsVO; -import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO; -import com.njcn.device.pq.pojo.vo.dataClean.VerifyTargetVO; +import com.njcn.device.pq.pojo.vo.dataClean.*; import com.njcn.device.pq.service.CommTerminalService; import com.njcn.device.pq.service.IDataVerifyService; import com.njcn.device.pq.service.LineService; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.supervision.api.UserLedgerFeignClient; import com.njcn.supervision.pojo.vo.user.NewUserReportVO; import com.njcn.supervision.pojo.vo.user.UserLedgerVO; @@ -42,6 +51,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.lang.reflect.Field; import java.text.DateFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -50,6 +60,7 @@ import java.util.*; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.njcn.device.pq.constant.Param.freq; @@ -68,6 +79,9 @@ public class DataVerifyServiceImpl extends ServiceImpl monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime()))) - .in(DataVerify::getLineId, monitorIds).orderByAsc(DataVerify::getTime); - List dataVerifyList = this.list(lambdaQueryWrapper); + List dataVerifyList = commQuery(monitorIds, monitorBaseParam); VerifyMonitorVO verifyMonitorVO = new VerifyMonitorVO(); verifyMonitorVO.setRunNum(monitorIds.size()); - int count = dataVerifyList.stream().collect(Collectors.groupingBy(DataVerify::getLineId)).size(); - verifyMonitorVO.setAbnormalNum(count); - - List> mapList = getRangeAbnormalMonitor(monitorBaseParam, dataVerifyList); - verifyMonitorVO.setMapList(mapList); + verifyMonitorVO.setAbnormalNum(dataVerifyList.stream().collect(Collectors.groupingBy(DataVerify::getLineId)).size()); + verifyMonitorVO.setMapList(getRangeAbnormalMonitor(monitorBaseParam, dataVerifyList)); verifyMonitorVO.setTargetList(getAbnormalTarget(dataVerifyList)); verifyMonitorVO.setMonitorAlarmInfo(getAbnormalTable(dataVerifyList, monitorBaseParam)); return verifyMonitorVO; } + @Override + public List getMonitorVerifyDay(MonitorBaseParam monitorBaseParam) { + List monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam); + List dataVerifyList = commQuery(monitorIds, monitorBaseParam); + return getAbnormalTable(dataVerifyList, monitorBaseParam); + } + @Override public List monitorAbnormalTable(MonitorBaseParam monitorBaseParam) { List result = new ArrayList<>(); @@ -108,10 +128,15 @@ public class DataVerifyServiceImpl extends ServiceImpl lineDetailMap = lineDetailList.stream().collect(Collectors.toMap(LineDevGetDTO::getPointId, Function.identity())); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime()))) + lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), + DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime()))) .in(DataVerify::getLineId, monitorBaseParam.getMonitorIds()).orderByAsc(DataVerify::getTime); + if(StrUtil.isNotBlank(monitorBaseParam.getTargetKey())){ + String[] target = monitorBaseParam.getTargetKey().split(SEPARATOR); + lambdaQueryWrapper.eq(DataVerify::getIndexCode,target[0]).eq(DataVerify::getIndexTable,target[1]); + } List dataVerifyList = this.list(lambdaQueryWrapper); - Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)))); + Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DATE_FORMAT))); dataMap.forEach((dateStr, data) -> { Map> lineMap = data.stream().collect(Collectors.groupingBy(DataVerify::getLineId)); lineMap.forEach((lineId, lineList) -> { @@ -122,6 +147,7 @@ public class DataVerifyServiceImpl extends ServiceImpl monitorAbnormalTableDetail(MonitorBaseParam monitorBaseParam) { - DataCleanParam dataCleanParam = new DataCleanParam(); - dataCleanParam.setSystemType(DataCleanEnum.Pqs.getCode()); - List pqReasonableRangeDtoList = pqReasonableRangeFeignClient.getData(dataCleanParam).getData(); - Map dtoMap = pqReasonableRangeDtoList.stream().collect(Collectors.toMap(it -> it.getIndexCode() + it.getInfluxdbTableName(), Function.identity())); - + Map dtoMap = getStandRange(); List result = new ArrayList<>(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime()))) - .eq(DataVerify::getLineId, monitorBaseParam.getMonitorId()).orderByAsc(DataVerify::getTime); + .in(DataVerify::getLineId, monitorBaseParam.getMonitorIds()).orderByAsc(DataVerify::getTime); + if(StrUtil.isNotBlank(monitorBaseParam.getTargetKey())){ + String[] queryTarget = monitorBaseParam.getTargetKey().split(SEPARATOR); + lambdaQueryWrapper.eq(DataVerify::getIndexCode,queryTarget[0]).eq(DataVerify::getIndexTable,queryTarget[1]); + } + List dataVerifyList = this.list(lambdaQueryWrapper); - Map> listMap = dataVerifyList.stream().collect(Collectors.groupingBy(DataVerify::getTime)); + Map> listMap = dataVerifyList.stream().collect(Collectors.groupingBy(DataVerify::getTime,TreeMap::new, + Collectors.toList())); listMap.forEach((time, timeList) -> { - Map> indexMap = timeList.stream().collect(Collectors.groupingBy(it->it.getIndexCode()+"&"+it.getIndexTable()+"&"+it.getIndexName())); + Map> indexMap = timeList.stream().collect(Collectors.groupingBy(it -> it.getIndexCode() + SEPARATOR + it.getIndexTable() + SEPARATOR + it.getIndexName())); indexMap.forEach((target, list) -> { + String[] temKey = target.split(SEPARATOR); + PqReasonableRangeDto pqReasonableRangeDto = dtoMap.get(temKey[0] + temKey[1]); + String unit; + if(StrUtil.isNotBlank(pqReasonableRangeDto.getUnit())){ + unit = pqReasonableRangeDto.getUnit(); + }else { + unit = ""; + } + Map> phaseMap = list.stream().collect(Collectors.groupingBy(DataVerify::getPhasicType)); phaseMap.forEach((phaseKey, valueList) -> { DetailAbnormalVO.DetailAbnormalInnerVO vo = new DetailAbnormalVO.DetailAbnormalInnerVO(); vo.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); - String[] temKey = target.split("&"); vo.setTargetName(temKey[2]); - vo.setTargetKey(temKey[0]+temKey[1]); + vo.setTargetKey(temKey[0] + temKey[1]); vo.setPhaseType(phaseKey); - valueList.forEach(it->{ - switch (it.getValueType()){ + vo.setRangeDesc(pqReasonableRangeDto.getMinValue() +unit+ " ~ " + pqReasonableRangeDto.getMaxValue()+unit); + valueList.forEach(it -> { + switch (it.getValueType()) { case "AVG": vo.setAvg(it.getAbnormalValue().toString()); break; @@ -169,10 +206,8 @@ public class DataVerifyServiceImpl extends ServiceImpl monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam); + LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam(); + lineCountEvaluateParam.setLineId(monitorIds); + lineCountEvaluateParam.setStartTime(monitorBaseParam.getSearchBeginTime()); + lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchEndTime()); + List limitTarget = dataLimitTargetFeignClient.getRawData(lineCountEvaluateParam).getData(); + List limitList = limitTarget.stream().filter(it -> it.getAllTime() > 0).collect(Collectors.toList()); + long abnormalCount = limitList.stream().map(DataLimitTargetDto::getLineId).distinct().count(); + VerifyMonitorVO verifyMonitorVO = new VerifyMonitorVO(); + verifyMonitorVO.setRunNum(monitorIds.size()); + verifyMonitorVO.setAbnormalNum((int) abnormalCount); - return null; + List> mapList = getRangeLimitMonitor(monitorBaseParam, limitList); + verifyMonitorVO.setMapList(mapList); + verifyMonitorVO.setMonitorAlarmInfo(getLimitTable(limitList, monitorBaseParam)); + verifyMonitorVO.setTargetList(assLimitTarget(limitTarget)); + return verifyMonitorVO; } + @Override + public List getMonitorLimitDataDay(MonitorBaseParam monitorBaseParam) { + List monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam); + LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam(); + lineCountEvaluateParam.setLineId(monitorIds); + lineCountEvaluateParam.setStartTime(monitorBaseParam.getSearchBeginTime()); + lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchEndTime()); + List limitTarget = dataLimitTargetFeignClient.getRawData(lineCountEvaluateParam).getData(); + List limitList = limitTarget.stream().filter(it -> it.getAllTime() > 0).collect(Collectors.toList()); + return getLimitTable(limitList, monitorBaseParam); + } + + @Override + public List monitorLimitTable(MonitorBaseParam monitorBaseParam) { + List result = new ArrayList<>(); + LambdaQueryWrapper lineDetailQuery = new LambdaQueryWrapper<>(); + lineDetailQuery.select(LineDetail::getId, LineDetail::getTimeInterval).in(LineDetail::getId, monitorBaseParam.getMonitorIds()); + List lineDetailList = lineMapper.getMonitorListDetail(monitorBaseParam.getMonitorIds()); + Map lineDetailMap = lineDetailList.stream().collect(Collectors.toMap(LineDevGetDTO::getPointId, Function.identity())); + + LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam(); + lineCountEvaluateParam.setLineId(monitorBaseParam.getMonitorIds()); + lineCountEvaluateParam.setStartTime(monitorBaseParam.getSearchBeginTime()); + lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchEndTime()); + List dataLimitRateDetailDtoList = dataLimitRateDetailFeignClient.getRawData(lineCountEvaluateParam).getData(); + Map> limitMap = dataLimitRateDetailDtoList.stream().collect(Collectors.groupingBy(DataLimitRateDetailDto::getTime)); + + limitMap.forEach((date, list) -> { + Map map = list.stream().collect(Collectors.toMap(DataLimitRateDetailDto::getLineId, Function.identity())); + map.forEach((lineId, line) -> { + LineDevGetDTO lineInfoVO = lineDetailMap.get(lineId); + Integer timeInterval = lineInfoVO.getTimeInterval(); + Set timeSet = new HashSet<>(); + List specialTargetList = new ArrayList<>(); + String jonsStr = ""; + if (monitorBaseParam.getTargetKey().equals(DicDataEnum.VOLTAGE_DEV.getCode())) { + //电压偏差 + jonsStr = line.getVoltageDevOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.FLICKER.getCode())) { + jonsStr = line.getFlickerOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.phase_Voltage.getCode())) { + jonsStr = line.getUbalanceOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.FREQUENCY_DEV.getCode())) { + jonsStr = line.getFreqDevOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.NEG_CURRENT.getCode())) { + jonsStr = line.getINegOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.THD_V.getCode())) { + jonsStr = line.getUaberranceOvertime(); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.HARMONIC_VOLTAGE.getCode())) { + for (int i = 2; i <= 25; i++) { + String uHarmKey = "uharm" + i + "Overtime"; + String json = getFieldValueForDetail(line, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json); + } + } + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.HARMONIC_CURRENT.getCode())) { + for (int i = 2; i <= 25; i++) { + String uHarmKey = "iharm" + i + "Overtime"; + String json = getFieldValueForDetail(line, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json); + } + } + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) { + for (int i = 1; i <= 16; i++) { + String uHarmKey = "inuharm" + i + "Overtime"; + String json = getFieldValueForDetail(line, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json); + } + } + } + + if (CollUtil.isNotEmpty(specialTargetList)) { + for (String str : specialTargetList) { + JSONArray jsonArray = new JSONArray(str); + List jsonBaseVOList = jsonArray.toList(JsonBaseVO.class); + jsonBaseVOList.forEach(it -> { + timeSet.addAll(Arrays.asList(it.getTime().split(StrUtil.COMMA))); + }); + } + } else { + JSONArray jsonArray = new JSONArray(jonsStr); + List jsonBaseVOList = jsonArray.toList(JsonBaseVO.class); + jsonBaseVOList.forEach(it -> { + timeSet.addAll(Arrays.asList(it.getTime().split(StrUtil.COMMA))); + }); + } + + DetailAbnormalVO detailAbnormalVO = new DetailAbnormalVO(); + detailAbnormalVO.setMonitorId(lineId); + detailAbnormalVO.setDate(date.format(DATE_FORMAT)); + detailAbnormalVO.setMonitorName(lineInfoVO.getPointName()); + detailAbnormalVO.setTimeSum((long) timeSet.size() * timeInterval); + detailAbnormalVO.setTargetKey(monitorBaseParam.getTargetKey()); + result.add(detailAbnormalVO); + }); + }); + return result; + } + + @Override + public List monitorLimitTableDetail(MonitorBaseParam monitorBaseParam) { + List result = new ArrayList<>(); + + LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam(); + lineCountEvaluateParam.setLineId(Stream.of(monitorBaseParam.getMonitorIds().get(0)).collect(Collectors.toList())); + lineCountEvaluateParam.setStartTime(monitorBaseParam.getSearchBeginTime()); + lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchBeginTime()); + List dtoList = dataLimitRateDetailFeignClient.getRawData(lineCountEvaluateParam).getData(); + + if (CollUtil.isNotEmpty(dtoList)) { + DataLimitRateDetailDto dto = dtoList.get(0); + JSONArray jsonArray = new JSONArray(); + List specialTargetList = new ArrayList<>(); + + if (monitorBaseParam.getTargetKey().equals(DicDataEnum.VOLTAGE_DEV.getCode())) { + //电压偏差 + jsonArray = new JSONArray(dto.getVoltageDevOvertime()); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.FLICKER.getCode())) { + jsonArray = new JSONArray(dto.getFlickerOvertime()); + }else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.phase_Voltage.getCode())) { + jsonArray = new JSONArray(dto.getUbalanceOvertime()); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.FREQUENCY_DEV.getCode())) { + jsonArray = new JSONArray(dto.getFreqDevOvertime()); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.NEG_CURRENT.getCode())) { + jsonArray = new JSONArray(dto.getINegOvertime()); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.THD_V.getCode())) { + jsonArray = new JSONArray(dto.getUaberranceOvertime()); + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.HARMONIC_VOLTAGE.getCode())) { + for (int i = 2; i <= 25; i++) { + String uHarmKey = "uharm" + i + "Overtime"; + String json = getFieldValueForDetail(dto, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json+SEPARATOR+i); + } + } + + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.HARMONIC_CURRENT.getCode())) { + for (int i = 2; i <= 25; i++) { + String uHarmKey = "iharm" + i + "Overtime"; + String json = getFieldValueForDetail(dto, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json+SEPARATOR+i); + } + } + + } else if (monitorBaseParam.getTargetKey().equals(DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) { + for (int i = 1; i <= 16; i++) { + String uHarmKey = "inuharm" + i + "Overtime"; + String json = getFieldValueForDetail(dto, uHarmKey); + if (StrUtil.isNotBlank(json)) { + specialTargetList.add(json+SEPARATOR+i); + } + } + } + + if(CollUtil.isNotEmpty(specialTargetList)){ + for(String strJson : specialTargetList){ + String[] temStr = strJson.split(SEPARATOR); + JSONArray jsonTem = new JSONArray(temStr[0]); + dealJsonArr(jsonTem,result,monitorBaseParam,temStr[1]); + } + }else { + dealJsonArr(jsonArray,result,monitorBaseParam,null); + } + } + return result; + } + + + /** + * 处理json数组 + */ + private void dealJsonArr(JSONArray jsonArray,List result,MonitorBaseParam monitorBaseParam,String count){ + List jsonBaseVOList = jsonArray.toList(JsonBaseVO.class); + Map> jsonMap = jsonBaseVOList.stream().collect(Collectors.groupingBy(JsonBaseVO::getPhasic)); + jsonMap.forEach((phasic, list) -> { + Map> valueTypeMap = list.stream().collect(Collectors.groupingBy(JsonBaseVO::getValueType)); + DetailAbnormalVO.DetailLimitInnerVO vo = new DetailAbnormalVO.DetailLimitInnerVO(); + valueTypeMap.forEach((valueTypeId, vList) -> { + vList.forEach(it -> { + String[] timeArr = it.getTime().split(StrUtil.COMMA); + String[] valArr = it.getValue().split(StrUtil.COMMA); + for(int i = 0;i commQuery(List monitorIds, MonitorBaseParam monitorBaseParam) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime()))) + .in(DataVerify::getLineId, monitorIds).orderByAsc(DataVerify::getTime); + return this.list(lambdaQueryWrapper); + } + + + private List assLimitTarget(List limitList) { + List verifyTargetVOList = new ArrayList<>(); + Set FLICKER = new HashSet<>(); + Set VOLTAGE_DEV = new HashSet<>(); + Set HARMONIC_VOLTAGE = new HashSet<>(); + Set HARMONIC_CURRENT = new HashSet<>(); + Set INTERHARMONIC_VOLTAGE = new HashSet<>(); + Set FREQUENCY_DEV = new HashSet<>(); + Set NEG_CURRENT = new HashSet<>(); + Set THD_V = new HashSet<>(); + Set phase_Voltage = new HashSet<>(); + limitList.forEach(it -> { + if (it.getFlickerOvertime() > 0) { + FLICKER.add(it.getLineId()); + } + if (it.getFreqDevOvertime() > 0) { + FREQUENCY_DEV.add(it.getLineId()); + } + if (it.getVoltageDevOvertime() > 0) { + VOLTAGE_DEV.add(it.getLineId()); + } + if (it.getINegOvertime() > 0) { + NEG_CURRENT.add(it.getLineId()); + } + if (it.getUaberranceOvertime() > 0) { + THD_V.add(it.getLineId()); + } + if (it.getUbalanceOvertime() > 0) { + phase_Voltage.add(it.getLineId()); + } + for (int i = 2; i <= 25; i++) { + String uHarmKey = "uharm" + i + "Overtime"; + String iHarmKey = "iharm" + i + "Overtime"; + String inuHarmKey = "inuharm" + i + "Overtime"; + if (getFieldValue(it, uHarmKey) != null && getFieldValue(it, uHarmKey) == 1) { + HARMONIC_VOLTAGE.add(it.getLineId()); + } + if (getFieldValue(it, iHarmKey) != null && getFieldValue(it, iHarmKey) == 1) { + HARMONIC_CURRENT.add(it.getLineId()); + } + if (getFieldValue(it, inuHarmKey) != null && getFieldValue(it, inuHarmKey) == 1) { + INTERHARMONIC_VOLTAGE.add(it.getLineId()); + } + } + }); + + Map> overLimitCount = new HashMap<>(); + overLimitCount.put(DicDataEnum.FLICKER.getCode() + SEPARATOR + DicDataEnum.FLICKER.getName(), FLICKER); + overLimitCount.put(DicDataEnum.VOLTAGE_DEV.getCode() + SEPARATOR + DicDataEnum.VOLTAGE_DEV.getName(), VOLTAGE_DEV); + overLimitCount.put(DicDataEnum.HARMONIC_VOLTAGE.getCode() + SEPARATOR + DicDataEnum.HARMONIC_VOLTAGE.getName(), HARMONIC_VOLTAGE); + overLimitCount.put(DicDataEnum.HARMONIC_CURRENT.getCode() + SEPARATOR + DicDataEnum.HARMONIC_CURRENT.getName(), HARMONIC_CURRENT); + overLimitCount.put(DicDataEnum.INTERHARMONIC_VOLTAGE.getCode() + SEPARATOR + DicDataEnum.INTERHARMONIC_VOLTAGE.getName(), INTERHARMONIC_VOLTAGE); + overLimitCount.put(DicDataEnum.FREQUENCY_DEV.getCode() + SEPARATOR + DicDataEnum.FREQUENCY_DEV.getName(), FREQUENCY_DEV); + overLimitCount.put(DicDataEnum.NEG_CURRENT.getCode() + SEPARATOR + DicDataEnum.NEG_CURRENT.getName(), NEG_CURRENT); + overLimitCount.put(DicDataEnum.THD_V.getCode() + SEPARATOR + DicDataEnum.THD_V.getName(), THD_V); + overLimitCount.put(DicDataEnum.phase_Voltage.getCode() + SEPARATOR + DicDataEnum.phase_Voltage.getName(), phase_Voltage); + + overLimitCount.forEach((key, set) -> { + String[] str = key.split(SEPARATOR); + VerifyTargetVO verifyTargetVO = new VerifyTargetVO(); + verifyTargetVO.setTargetName(str[1]); + verifyTargetVO.setIds(set); + verifyTargetVO.setKey(str[0]); + verifyTargetVOList.add(verifyTargetVO); + }); + return verifyTargetVOList; + } + + private Integer getFieldValue(DataLimitTargetDto dto, String fieldName) { + try { + Field field = DataLimitTargetDto.class.getDeclaredField(fieldName); + field.setAccessible(true); + return (Integer) field.get(dto); + } catch (NoSuchFieldException | IllegalAccessException e) { + logger.error("反射方法异常:{}", e.getMessage()); + return null; + } + } + + private String getFieldValueForDetail(DataLimitRateDetailDto dto, String fieldName) { + try { + Field field = DataLimitRateDetailDto.class.getDeclaredField(fieldName); + field.setAccessible(true); + return (String) field.get(dto); + } catch (NoSuchFieldException | IllegalAccessException e) { + logger.error("反射方法异常:{}", e.getMessage()); + return null; + } + } + + private List> getRangeLimitMonitor(MonitorBaseParam monitorBaseParam, List limitList) { + List> result = new ArrayList<>(); + DateTime startTime = DateUtil.parse(monitorBaseParam.getSearchBeginTime()); + DateTime endTime = DateUtil.parse(monitorBaseParam.getSearchEndTime()); + if (startTime.year() == endTime.year() && startTime.month() == endTime.month()) { + DateRange ranged = DateUtil.range(DateUtil.parse(monitorBaseParam.getSearchBeginTime()), DateUtil.parse(monitorBaseParam.getSearchEndTime()), DateField.DAY_OF_MONTH); + Map map = limitList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DATE_FORMAT), + Collectors.mapping(DataLimitTargetDto::getLineId, Collectors.collectingAndThen(Collectors.toSet(), Set::size)))); + for (DateTime dateTime : ranged) { + Map rangeMap = new HashMap<>(); + String time = DateUtil.format(dateTime,DATE_FORMAT); + rangeMap.put("time", time); + rangeMap.put("val", map.getOrDefault(time, 0)); + result.add(rangeMap); + } + } else { + //不在一个月则展示月数据 + DateRange ranged = DateUtil.range(DateUtil.parse(monitorBaseParam.getSearchBeginTime()), DateUtil.parse(monitorBaseParam.getSearchEndTime()), DateField.MONTH); + if (CollUtil.isNotEmpty(limitList)) { + Map map = limitList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_MONTH_PATTERN)), + Collectors.mapping(DataLimitTargetDto::getLineId, Collectors.collectingAndThen(Collectors.toSet(), Set::size)))); + for (DateTime dateTime : ranged) { + Map rangeMap = new HashMap<>(); + String time = DateUtil.format(dateTime, DateTimeFormatter.ofPattern(DatePattern.NORM_MONTH_PATTERN)); + rangeMap.put("time", time); + rangeMap.put("val", map.getOrDefault(time, 0)); + result.add(rangeMap); + } + } + } + return result; + } + + /** * 时间范围异常测点数量 */ @@ -196,11 +577,11 @@ public class DataVerifyServiceImpl extends ServiceImpl map = dataVerifyList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)), + Map map = dataVerifyList.stream().collect(Collectors.groupingBy(it -> it.getTime().format(DATE_FORMAT), Collectors.mapping(DataVerify::getLineId, Collectors.collectingAndThen(Collectors.toSet(), Set::size)))); for (DateTime dateTime : ranged) { Map rangeMap = new HashMap<>(); - String time = DateUtil.format(dateTime, DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)); + String time = DateUtil.format(dateTime,DATE_FORMAT); rangeMap.put("time", time); rangeMap.put("val", map.getOrDefault(time, 0)); result.add(rangeMap); @@ -223,159 +604,124 @@ public class DataVerifyServiceImpl extends ServiceImpl getAbnormalTarget(List dataVerifyList) { - List voList = new ArrayList<>(); - Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(it -> it.getIndexCode() + it.getIndexTable(), Collectors.mapping(DataVerify::getLineId, Collectors.toSet()))); - /* Pattern patternPhasic = Pattern.compile("v_(2|[3-9]|[1-4][0-9]|50)\\$DataHarmPhasicV"); - Pattern patternRate = Pattern.compile("v_(2|[3-9]|[1-4][0-9]|50)\\$DataHarmRateV"); - Pattern patternInRate = Pattern.compile("v_(2|[3-9]|[1-4][0-9]|50)\\$DataInHarmRateV"); - - Set harmPhasicSet = new HashSet<>(); - Set harmVSet = new HashSet<>(); - Set inHarmVSet = new HashSet<>(); - Set vRmsSet = new HashSet<>();*/ - - DataCleanParam dataCleanParam = new DataCleanParam(); - dataCleanParam.setSystemType(DataCleanEnum.Pqs.getCode()); - List pqReasonableRangeDtoList = pqReasonableRangeFeignClient.getData(dataCleanParam).getData(); - Map dtoMap = pqReasonableRangeDtoList.stream().collect(Collectors.toMap(it -> it.getIndexCode() + it.getInfluxdbTableName(), Function.identity())); - + Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(it -> + it.getIndexCode() + it.getIndexTable(), Collectors.mapping(DataVerify::getLineId, Collectors.toSet()))); + Map rangeMap = getStandRange(); //正序、负序和零序电压 List result = new ArrayList<>(); dataMap.forEach((key, num) -> { - if (dtoMap.containsKey(key)) { - PqReasonableRangeDto desc = dtoMap.get(key); - assEmb(num, desc, result); + if (rangeMap.containsKey(key)) { + PqReasonableRangeDto desc = rangeMap.get(key); + assembleEntity(num, desc, result); } else { logger.error("存在未知异常指标: {}", key); } - - - - /* if((DataCleanEnum.Freq.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.Freq.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.FreqDev.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.FreqDev.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.RmsV.getCode()+DataCleanEnum.DataV).equals(key) || (DataCleanEnum.RmsLvr.getCode()+DataCleanEnum.DataV).equals(key)){ - vRmsSet.addAll(num); - }else if((DataCleanEnum.VuDev.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VuDev.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.RmsI.getCode()+DataCleanEnum.DataI).equals(key)){ - desc = dtoMap.get(DataCleanEnum.RmsI.getCode()+DataCleanEnum.DataI); - assEmb(num,desc,result); - }else if((DataCleanEnum.VThd.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VThd.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.V_1.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.V_1.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.V_1.getCode()+DataCleanEnum.DataHarmPhasicV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.V_1.getCode()+DataCleanEnum.DataHarmPhasicV); - assEmb(num,desc,result); - }else if((DataCleanEnum.V.getCode()+DataCleanEnum.DataHarmPhasicV).equals(key)){ - harmPhasicSet.addAll(num); - }else if((DataCleanEnum.V_Rate.getCode()+DataCleanEnum.DataV).equals(key)){ - harmVSet.addAll(num); - }else if((DataCleanEnum.V_InHarm.getCode()+DataCleanEnum.DataInHarmV).equals(key)){ - harmVSet.addAll(num); - }else if((DataCleanEnum.VZero.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VZero.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.VPos.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VPos.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.VNeg.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VNeg.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.VUnbalance.getCode()+DataCleanEnum.DataV).equals(key)){ - desc = dtoMap.get(DataCleanEnum.VUnbalance.getCode()+DataCleanEnum.DataV); - assEmb(num,desc,result); - }else if((DataCleanEnum.Fluc.getCode()+DataCleanEnum.DataFluc).equals(key)){ - desc = dtoMap.get(DataCleanEnum.Fluc.getCode()+DataCleanEnum.DataFluc); - assEmb(num,desc,result); - }else if((DataCleanEnum.Plt.getCode()+DataCleanEnum.DataPlt).equals(key)){ - desc = dtoMap.get(DataCleanEnum.Plt.getCode()+DataCleanEnum.DataPlt); - assEmb(num,desc,result); - }else if((DataCleanEnum.Pst.getCode()+DataCleanEnum.DataPlt).equals(key)){ - desc = dtoMap.get(DataCleanEnum.Pst.getCode()+DataCleanEnum.DataPlt); - assEmb(num,desc,result); - }else { - logger.warn("存在未知异常指标: {}", key); - }*/ - }); - - /* PqReasonableRangeDto desc = dtoMap.get(DataCleanEnum.V.getCode()+DataCleanEnum.DataHarmPhasicV); - assEmb(harmPhasicSet,desc,result); - desc = dtoMap.get(DataCleanEnum.V_Rate.getCode()+DataCleanEnum.DataHarmRateV); - assEmb(harmVSet,desc,result); - desc = dtoMap.get(DataCleanEnum.V_InHarm.getCode()+DataCleanEnum.DataInHarmV); - assEmb(inHarmVSet,desc,result); - desc = dtoMap.get(DataCleanEnum.RmsV.getCode()+DataCleanEnum.DataV); - assEmb(vRmsSet,desc,result);*/ - Map vMap = result.stream().collect(Collectors.toMap(VerifyTargetVO::getKey, Function.identity())); - Integer sort = 0; - Iterator> iterator = dtoMap.entrySet().iterator(); + Iterator> iterator = rangeMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); - if (vMap.containsKey(entry.getKey())) { - vMap.get(entry.getKey()).setSort(sort); - } else { + if (!vMap.containsKey(entry.getKey())) { PqReasonableRangeDto dto = entry.getValue(); - VerifyTargetVO verifyTargetVO = new VerifyTargetVO(); - verifyTargetVO.setKey(dto.getIndexCode() + dto.getInfluxdbTableName()); - verifyTargetVO.setTargetName(dto.getIndexName()); - verifyTargetVO.setIds(new HashSet<>()); - verifyTargetVO.setRangeDesc(dto.getMinValue() + "~" + dto.getMaxValue()); - verifyTargetVO.setSort(sort); - result.add(verifyTargetVO); + assembleEntity(new HashSet<>(),dto,result); } - sort++; } - voList = result.stream().sorted(Comparator.comparing(VerifyTargetVO::getSort)).collect(Collectors.toList()); - return voList; + return result.stream().sorted(Comparator.comparing(VerifyTargetVO::getSort)).collect(Collectors.toList()); } - private void assEmb(Set ids, PqReasonableRangeDto dto, List result) { + /** + *组装实体 + */ + private void assembleEntity(Set ids, PqReasonableRangeDto dto, List result) { VerifyTargetVO verifyTargetVO = new VerifyTargetVO(); - verifyTargetVO.setKey(dto.getIndexCode() + dto.getInfluxdbTableName()); + verifyTargetVO.setKey(dto.getIndexCode() +SEPARATOR+ dto.getInfluxdbTableName()); verifyTargetVO.setTargetName(dto.getIndexName()); verifyTargetVO.setIds(ids); - verifyTargetVO.setRangeDesc(dto.getMinValue() + "~" + dto.getMaxValue()); + verifyTargetVO.setSort(dto.getSort()); + String unit = ""; + if(StrUtil.isNotBlank(dto.getUnit())){ + unit = dto.getUnit(); + } + verifyTargetVO.setRangeDesc(dto.getMinValue()+unit + " ~ " + dto.getMaxValue()+unit); result.add(verifyTargetVO); } + /** + * 获取异常范围标准 + */ + private Map getStandRange(){ + DataCleanParam dataCleanParam = new DataCleanParam(); + dataCleanParam.setSystemType(DataCleanEnum.Pqs.getCode()); + List pqReasonableRangeDtoList = pqReasonableRangeFeignClient.getData(dataCleanParam).getData(); + return pqReasonableRangeDtoList.stream().collect(Collectors.toMap(it -> it.getIndexCode() + it.getInfluxdbTableName(), Function.identity())); + } + + public List getAbnormalTable(List dataVerifyList, MonitorBaseParam monitorBaseParam) { List result = new ArrayList<>(); Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(DataVerify::getLineId)); dataMap.forEach((key, list) -> { List dateList = list.stream().map(it -> it.getTime().toLocalDate()).distinct().sorted(Comparator.comparing(Function.identity())).collect(Collectors.toList()); - Integer warnDay = monitorBaseParam.getWarnDayLimit(); - Integer alarmDay = monitorBaseParam.getAlarmDayLimit(); - //检查是否有连续指定天数的告警 - boolean warnFlag = verData(dateList, warnDay); - boolean alarmFlag = verData(dateList, alarmDay); - if (warnFlag) { - PowerQualityIndicatorsVO vo = new PowerQualityIndicatorsVO(); - vo.setMonitorId(key); - if (alarmFlag) { - vo.setSeverity(1); - } else { - vo.setSeverity(0); - } - vo.setAbnormalDay(dateList.size()); - result.add(vo); - } + processTable(monitorBaseParam,dateList,result,key); }); + dealTableResult(result); + return result; + } + + + + + + + + public List getLimitTable(List dataVerifyList, MonitorBaseParam monitorBaseParam) { + List result = new ArrayList<>(); + Map> dataMap = dataVerifyList.stream().collect(Collectors.groupingBy(DataLimitTargetDto::getLineId)); + dataMap.forEach((key, list) -> { + List dateList = list.stream().map(DataLimitTargetDto::getTime).distinct().sorted(Comparator.comparing(Function.identity())).collect(Collectors.toList()); + processTable(monitorBaseParam,dateList,result,key); + }); + dealTableResult(result); + return result; + } + + + + /** + * 判断测点是否存在连续异常数据 + */ + private void processTable(MonitorBaseParam monitorBaseParam,List dateList,List result,String lineId) { + Integer warnDay = monitorBaseParam.getWarnDayLimit(); + Integer alarmDay = monitorBaseParam.getAlarmDayLimit(); + //检查是否有连续指定天数的告警 + boolean warnFlag = verData(dateList, warnDay); + boolean alarmFlag = verData(dateList, alarmDay); + if (warnFlag) { + PowerQualityIndicatorsVO vo = new PowerQualityIndicatorsVO(); + vo.setMonitorId(lineId); + if (alarmFlag) { + vo.setSeverity(1); + } else { + vo.setSeverity(0); + } + vo.setAbnormalDay(dateList.size()); + result.add(vo); + } + } + + private void dealTableResult(List result){ if (CollUtil.isNotEmpty(result)) { List dicTreePOList = dictTreeFeignClient.queryAllByType(Integer.valueOf(DicDataEnum.Obj_Type.getCode())).getData(); Map sysDicTreePOMap = dicTreePOList.stream().collect(Collectors.toMap(SysDicTreePO::getId, Function.identity())); @@ -402,9 +748,14 @@ public class DataVerifyServiceImpl extends ServiceImpl dateList, Integer day) { for (int i = 0; i <= dateList.size() - day; i++) { boolean isConsecutive = true; @@ -421,4 +772,7 @@ public class DataVerifyServiceImpl extends ServiceImpl> queryFirstNodeList() { + @ApiOperation("查询所有类型大类节点") + public HttpResult> queryFirstNodeList(@RequestParam("type") Integer type) { String methodDescribe = getMethodDescribe("queryFirstNodeList"); - List result = sysDicTreePOService.queryFirstNodeList(); + List result = sysDicTreePOService.queryFirstNodeList(type); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/SysDicTreePOService.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/SysDicTreePOService.java index ed211ceca..a39165ada 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/service/SysDicTreePOService.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/SysDicTreePOService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.system.pojo.param.DictTreeParam; import com.njcn.system.pojo.po.SysDicTreePO; import com.njcn.system.pojo.vo.DictTreeVO; +import io.swagger.models.auth.In; import java.util.List; @@ -62,7 +63,7 @@ public interface SysDicTreePOService extends IService { * 查询所有大类节点 * @date 2023/12/18 */ - List queryFirstNodeList(); + List queryFirstNodeList(Integer type); /** * 根据code查询自动树 diff --git a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/SysDicTreePOServiceImpl.java b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/SysDicTreePOServiceImpl.java index 2afd764cf..701c08e40 100644 --- a/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/SysDicTreePOServiceImpl.java +++ b/pqs-system/system-boot/src/main/java/com/njcn/system/service/impl/SysDicTreePOServiceImpl.java @@ -166,9 +166,9 @@ public class SysDicTreePOServiceImpl extends ServiceImpl queryFirstNodeList() { + public List queryFirstNodeList(Integer type) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(SysDicTreePO::getPid,"0").eq(SysDicTreePO::getStatus,0); + lambdaQueryWrapper.eq(SysDicTreePO::getPid,"0").eq(SysDicTreePO::getStatus,0).eq(SysDicTreePO::getType,type); return this.list(lambdaQueryWrapper); }