From f8ffe767dcb9e455145991e27e9ddf6350432b6d Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 26 Nov 2025 11:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=80=E5=8C=97=E5=AE=8C=E6=95=B4=E6=80=A7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E9=87=8D=E6=96=B0=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/device/pq/pojo/vo/LineDetailVO.java | 13 +++ .../pq/pojo/vo/common/DeviceOnlineRate.java | 31 +++++++ .../LineIntegrityDataController.java | 12 ++- .../pq/service/IRStatIntegrityDService.java | 4 + .../impl/RStatIntegrityDServiceImpl.java | 87 ++++++++++++++++++- .../device/line/mapper/mapping/LineMapper.xml | 14 ++- .../line/service/impl/LineServiceImpl.java | 7 ++ .../mapper/RStatIntegrityDMapper.java | 8 ++ .../mapper/mapping/RStatIntegrityDMapper.xml | 24 +++++ .../service/impl/GridServiceImpl.java | 11 ++- .../mapper/RStatLimitRateDMapper.java | 2 +- 11 files changed, 204 insertions(+), 9 deletions(-) diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java index f2c2cb7ac..56288e833 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java @@ -15,6 +15,9 @@ import java.time.LocalDateTime; @Data public class LineDetailVO implements Serializable { + @ApiModelProperty("部门名称") + private String deptName; + @ApiModelProperty("供电公司名称") private String gdName; @@ -92,6 +95,16 @@ public class LineDetailVO implements Serializable { @ApiModelProperty("已用流量占比") private Float flowProportion; + + @ApiModelProperty("电网标志 0-电网侧;1-非电网侧") + private Integer powerFlag; + + @ApiModelProperty(name = "监测点运行状态") + private String lineRunType; + + @ApiModelProperty(name = "终端厂家") + private String manufacturer; + } @Data diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/common/DeviceOnlineRate.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/common/DeviceOnlineRate.java index d5e45547c..52e83db7d 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/common/DeviceOnlineRate.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/common/DeviceOnlineRate.java @@ -84,4 +84,35 @@ public class DeviceOnlineRate { private String onlineRate; } + @Data + public static class LineDetail { + + @ApiModelProperty("地市") + private String cit; + + @ApiModelProperty("供电公司") + private String company; + + @ApiModelProperty("变电站") + private String subStation; + + @ApiModelProperty("终端ID") + private String deviceId; + + @ApiModelProperty("终端名称") + private String deviceName; + + @ApiModelProperty("终端厂家") + private String manufacturer; + + @ApiModelProperty("终端IP") + private String ip; + + @ApiModelProperty("监测点运行状态") + private String runFlag; + + @ApiModelProperty("数据完整性") + private Double integrity; + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java index def286ee9..e638ea77a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java @@ -2,7 +2,6 @@ package com.njcn.device.pq.controller; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.enums.common.LogEnum; @@ -17,6 +16,7 @@ import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; +import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate; import com.njcn.device.pq.service.IRStatIntegrityDService; import com.njcn.device.pq.service.LineIntegrityDataService; import com.njcn.harmonic.pojo.vo.IntegrityIconVO; @@ -148,4 +148,14 @@ public class LineIntegrityDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,flag,methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/data") + @ApiOperation("监测点数据完整性(冀北)") + @ApiImplicitParam(name = "param", value = "参数实体", required = true) + public HttpResult getData(@RequestBody DeviceInfoParam.BusinessParam param) { + String methodDescribe = getMethodDescribe("getData"); + DeviceOnlineRate rate = irStatIntegrityDService.getData(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe); + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java index 8cbebcd06..9023dc9a2 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/IRStatIntegrityDService.java @@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.github.jeffreyning.mybatisplus.service.IMppService; import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO; +import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; +import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate; import java.util.List; @@ -33,4 +35,6 @@ public interface IRStatIntegrityDService extends IMppService { List getLineDataQuality(LineDataQualityParam lineDataQualityParam); Boolean saveOrUpdateData(List monitorIntegrityDTOList); + + DeviceOnlineRate getData(DeviceInfoParam.BusinessParam param); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java index 46426942d..cdfd9d156 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java @@ -1,30 +1,41 @@ package com.njcn.device.pq.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.device.common.service.GeneralDeviceService; import com.njcn.device.line.mapper.LineDetailMapper; import com.njcn.device.line.mapper.LineMapper; +import com.njcn.device.line.service.LineService; +import com.njcn.device.pq.enums.RunFlagEnum; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; +import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO; +import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam; import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.po.Line; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.pojo.vo.LineDetailDataVO; +import com.njcn.device.pq.pojo.vo.LineDetailVO; +import com.njcn.device.pq.pojo.vo.RStatIntegrityVO; +import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate; import com.njcn.device.pq.service.IRStatIntegrityDService; import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -43,11 +54,11 @@ import java.util.stream.Collectors; public class RStatIntegrityDServiceImpl extends MppServiceImpl implements IRStatIntegrityDService { private final RStatOnlinerateDMapper onlineRateMapper; - private final RStatIntegrityDMapper rStatIntegrityDMapper; - private final LineMapper lineMapper; private final LineDetailMapper lineDetailMapper; + private final GeneralDeviceService deviceService; + private final LineService lineService; @Override public Float getTotalIntegrityByLineIds(LineBaseQueryParam param) { @@ -124,4 +135,76 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl deviceInfo = deviceService.getDeviceInfo(param, null, Collections.singletonList(1)); + if (CollUtil.isNotEmpty(deviceInfo)) { + List lineIds = deviceInfo.stream() + .flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList()) + .stream() + .distinct() + .collect(Collectors.toList()); + rate.setTotalNum(lineIds.size()); + //获取所有监测点的数据完整性 + List lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds,param.getSearchBeginTime(),param.getSearchEndTime()); + //获取所有监测点信息信息 + List LineInfoByIds = lineService.getLineDetailByIds(lineIds); + + rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo)?calculateIntegrityRate(lineIntegrityRateInfo,90):lineIds.size()); + rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,lineIds).toString()); + List citDetailList=new ArrayList<>(); + DeviceOnlineRate.CitDetail citDetail; + DeviceOnlineRate.LineDetail detail; + for (GeneralDeviceDTO dto : deviceInfo) { + //获取部门终端集合 + List citDevOnRate = lineIntegrityRateInfo.stream().filter(x -> dto.getLineIndexes().contains(x.getLineIndex())).collect(Collectors.toList()); + Map onlineRateByDevMap = citDevOnRate.stream() + .collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate)); + citDetail=new DeviceOnlineRate.CitDetail(); + citDetail.setCitName(dto.getName()); + citDetail.setCitTotalNum(dto.getLineIndexes().size()); + citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate)?calculateIntegrityRate(lineIntegrityRateInfo,90):dto.getLineIndexes().size()); + citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,dto.getLineIndexes()).toString()); + List detailList = new ArrayList<>(); + List lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList()); + for (LineDetailVO.Detail line : lineDetail) { + detail = new DeviceOnlineRate.LineDetail(); + detail.setCit(line.getDeptName()); + detail.setCompany(line.getGdName()); + detail.setSubStation(line.getSubName()); + detail.setDeviceId(line.getDevId()); + detail.setDeviceName(line.getDevName()); + detail.setManufacturer(line.getManufacturer()); + detail.setIp(line.getIp()); + detail.setRunFlag(RunFlagEnum.getRunFlagRemarkByStatus(Integer.valueOf(line.getLineRunType()))); + detail.setIntegrity(onlineRateByDevMap.getOrDefault(line.getLineId(), 0.0)); + detailList.add(detail); + } + citDetail.setDetailList(detailList); + citDetailList.add(citDetail); + } + rate.setCitDetailList(citDetailList); + } + return rate; + } + + private Double calculateIntegrityRate(List lineIntegrityRateInfo ,List deviceIds){ + List list = lineIntegrityRateInfo.stream().filter(x -> deviceIds.contains(x.getLineIndex())).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(list)){ + BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getDueTime).sum()); + BigDecimal offlineMin =BigDecimal.valueOf( list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum()); + BigDecimal sumMin= onlineMin.add(offlineMin); + return sumMin.doubleValue(); + } + return 0.0; + } + + private Integer calculateIntegrityRate(List onlineRateByDev,Integer limit){ + return (int) onlineRateByDev.stream().filter(x -> x.getIntegrityRate() < limit).count(); + } + + } diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/mapper/mapping/LineMapper.xml index 8ec1d18fe..5eff136fe 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/mapper/mapping/LineMapper.xml @@ -1535,11 +1535,13 @@ + + + diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java index 223b991aa..841e9e07c 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java @@ -890,6 +890,10 @@ public class GridServiceImpl implements IGridService { int allTime = list33.stream() .mapToInt(RStatLimitRateDPO::getAllTime) .sum(); + //总闪变次数 + int allFlickerTime = list33.stream() + .mapToInt(RStatLimitRateDPO::getFlickerAllTime) + .sum(); //电压偏差 int devTime = list33.stream() .mapToInt(RStatLimitRateDPO::getVoltageDevOvertime) @@ -910,11 +914,14 @@ public class GridServiceImpl implements IGridService { int ubalanceTime = list33.stream() .mapToInt(RStatLimitRateDPO::getUbalanceOvertime) .sum(); - comAssess.setQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - (devTime + freqTime + thdTime + pltTime + ubalanceTime) * 100.0 / (allTime * 5))); + //计算总稳态合格率 + double all1 = 100 - (devTime + freqTime + thdTime + ubalanceTime) * 100.0 / (allTime * 4); + double all2 = 100 - pltTime * 100.0 / allFlickerTime; + comAssess.setQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, (all1 + all2) / 2.0)); comAssess.setVDevQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - devTime * 100.0 / allTime)); comAssess.setFreqQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - freqTime * 100.0 / allTime)); comAssess.setHarmQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - thdTime * 100.0 / allTime)); - comAssess.setFlickerQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - pltTime * 100.0 / allTime)); + comAssess.setFlickerQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - pltTime * 100.0 / allFlickerTime)); comAssess.setUnbalanceQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - ubalanceTime * 100.0 / allTime)); } } diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/rstatlimitrate/mapper/RStatLimitRateDMapper.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/rstatlimitrate/mapper/RStatLimitRateDMapper.java index 804b2e7af..86474aaa9 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/rstatlimitrate/mapper/RStatLimitRateDMapper.java +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/rstatlimitrate/mapper/RStatLimitRateDMapper.java @@ -57,7 +57,7 @@ public interface RStatLimitRateDMapper extends BaseMapper { * @param list * @param startTime * @param endTime - * @return + * @return111 */ List getAssessTargetRate( @Param("ids") List list, @Param("statTime") String startTime,