From 1bf7bfc181dde3300a2b8d554e414aeddab81b0f Mon Sep 17 00:00:00 2001 From: zhuxinyu <1799009482@qq.com> Date: Thu, 6 Apr 2023 18:36:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E4=B8=AD=E5=BF=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=AE=8C=E6=95=B4=E6=80=A7=E7=BB=9F=E8=AE=A1=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E6=8E=A5=E5=8F=A3=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/device/pq/pojo/dto/PublicDTO.java | 11 +++ .../device/pq/pojo/vo/IntegrityIconVO.java | 35 ++++++++++ .../pq/pojo/vo/TerminalOnlineRateDataVO.java | 3 + .../LineIntegrityDataController.java | 15 ++++ .../pq/service/LineIntegrityDataService.java | 4 ++ .../impl/LineIntegrityDataServiceImpl.java | 69 +++++++++++++++++++ 6 files changed, 137 insertions(+) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/PublicDTO.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/IntegrityIconVO.java diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/PublicDTO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/PublicDTO.java new file mode 100644 index 000000000..f6caa5346 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/dto/PublicDTO.java @@ -0,0 +1,11 @@ +package com.njcn.device.pq.pojo.dto; + +import lombok.Data; + +@Data +public class PublicDTO { + + private String id; + + private Double data; +} \ No newline at end of file diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/IntegrityIconVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/IntegrityIconVO.java new file mode 100644 index 000000000..bb57323b9 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/IntegrityIconVO.java @@ -0,0 +1,35 @@ +package com.njcn.harmonic.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IntegrityIconVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * x轴 统计类型 + */ + @ApiModelProperty("x轴 统计类型") + private String type; + + /** + * y轴 数据 + */ + @ApiModelProperty("初始数据") + private Double single; + + /** + * y轴 同比环比数据 + */ + @ApiModelProperty("同比环比数据") + private Double ratio; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java index 10903f1f3..b83e199a1 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java @@ -101,6 +101,9 @@ public class TerminalOnlineRateDataVO implements Serializable { @ApiModelProperty(name = "lineGrade",value = "终端等级") private String lineGrade; + @ApiModelProperty(name = "subScale",value = "变电站电压等级") + private String subScale; + @ApiModelProperty(name = "devicePassRate",value = "终端在线率合格率 0:不合格 1:合格") private Integer valueOver; 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 6ac67096a..f54a11dc7 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 @@ -6,15 +6,18 @@ 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.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; import com.njcn.device.pq.service.LineIntegrityDataService; +import com.njcn.harmonic.pojo.vo.IntegrityIconVO; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +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; @@ -50,4 +53,16 @@ public class LineIntegrityDataController extends BaseController { List integrityDataOfLine = lineIntegrityDataService.getIntegrityDataOfLine(lineIntegrityDataParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,integrityDataOfLine,methodDescribe); } + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getIntegrityIcon") + @ApiOperation("数据完整性图表") + @ApiImplicitParam(name = "integrityIconParam", value = "数据完整性参数", required = true) + public HttpResult> getIntegrityIcon(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam integrityIconParam) { + String methodDescribe = getMethodDescribe("getIntegrityIcon"); + List integrityIconVO = lineIntegrityDataService.getIntegrityIcon(integrityIconParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrityIconVO, methodDescribe); + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java index b2e3959a6..48dc1525b 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java @@ -1,7 +1,9 @@ package com.njcn.device.pq.service; +import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; +import com.njcn.harmonic.pojo.vo.IntegrityIconVO; import java.util.List; @@ -18,4 +20,6 @@ public interface LineIntegrityDataService { * @return 监测点数据完整性树状实体类集合 */ List getIntegrityDataOfLine(LineIntegrityDataParam lineIntegrityDataParam); + + List getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java index dc3d1525c..2ed2a4a77 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java @@ -1,22 +1,30 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.pq.api.AlarmClient; +import com.njcn.device.pq.api.GeneralDeviceInfoClient; import com.njcn.device.pq.enums.DeviceResponseEnum; import com.njcn.device.pq.enums.LineBaseEnum; import com.njcn.device.pq.mapper.LineIntegrityDataMapper; import com.njcn.device.pq.mapper.RStatIntegrityDMapper; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; +import com.njcn.device.pq.pojo.dto.PublicDTO; +import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; +import com.njcn.device.pq.pojo.param.OnlineRateParam; import com.njcn.device.pq.pojo.po.LineDataIntegrity; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; +import com.njcn.device.pq.pojo.vo.RStatIntegrityVO; import com.njcn.device.pq.service.LineIntegrityDataService; import com.njcn.device.pq.utils.DataStatisticsUtil; +import com.njcn.harmonic.pojo.vo.IntegrityIconVO; import com.njcn.influxdb.param.InfluxDBPublicParam; import com.njcn.influxdb.utils.InfluxDBCommUtils; import com.njcn.influxdb.utils.InfluxDbUtils; @@ -30,6 +38,9 @@ import org.influxdb.impl.InfluxDBResultMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.Collator; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -57,6 +68,10 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam) { + integrityIconParam.setServerName(generalInfo.getMicroServiceName()); + List generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(integrityIconParam).getData(); + List out = new ArrayList<>(); + if (!CollectionUtils.isEmpty(generalDeviceDTOList)) { + for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) { + IntegrityIconVO outParam = new IntegrityIconVO(); + List lineIndexes = generalDeviceDTO.getLineIndexes(); + if (CollectionUtils.isEmpty(lineIndexes)) { + continue; + } + outParam.setType(generalDeviceDTO.getName()); + //根据监测点查询数据完整性 + List integrityData = getCondition(lineIndexes, integrityIconParam.getSearchBeginTime(), integrityIconParam.getSearchEndTime()); + outParam.setSingle(integrityData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159)); + //如果存在需要比较的时间,再获取对应数据 + if (StrUtil.isNotBlank(integrityIconParam.getPeriodBeginTime()) && StrUtil.isNotBlank(integrityIconParam.getPeriodEndTime())) { + List compareData = getCondition(lineIndexes, integrityIconParam.getPeriodBeginTime(), integrityIconParam.getPeriodEndTime()); + outParam.setRatio(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159)); + } + out.add(outParam); + } + } + out.sort(new Comparator() { + @Override + public int compare(IntegrityIconVO o1, IntegrityIconVO o2) { + Comparator com = Collator.getInstance(Locale.CHINA); + return com.compare(o1.getType(), o2.getType()); + } + }); + return out; + } + + + private List getCondition(List lineList, String startTime, String endTime) { + List integrityList = new ArrayList<>(); + OnlineRateParam param = new OnlineRateParam(); + param.setIds(lineList); + param.setStartTime(DateUtil.beginOfDay(DateUtil.parse(startTime)).toString()); + param.setEndTime(DateUtil.endOfDay(DateUtil.parse(endTime)).toString()); + List data = rStatIntegrityDMapper.getOnIntegrityByIds(param); + if (!CollectionUtils.isEmpty(data)) { + data.forEach(po -> { + PublicDTO publicDTO = new PublicDTO(); + //数据完整性 保留四位小数 + Double integrity = po.getIntegrityRate() == null ? 3.14159 : BigDecimal.valueOf(Double.parseDouble(po.getIntegrityRate().toString())).setScale(2, RoundingMode.HALF_UP).doubleValue(); + publicDTO.setId(po.getLineIndex()); + publicDTO.setData((integrity > 100.00) ? 100.00 : integrity); + integrityList.add(publicDTO); + }); + } + return integrityList; + } public void getAreaIntegrityData(Map mapAlarm,List proList) { for (LineIntegrityDataVO proItem : proList) {