From 836565c1cfc65b0978eb6319750acdb4ee11afa3 Mon Sep 17 00:00:00 2001 From: zhuxinyu <1799009482@qq.com> Date: Thu, 6 Apr 2023 19:33:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=BF=83=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8E=87=E7=BB=9F=E8=AE=A1=E5=9B=BE=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/pq/pojo/vo/OnlineRateCensusVO.java | 29 ++++++++ .../TerminalOnlineRateDataController.java | 13 ++++ .../TerminalOnlineRateDataService.java | 3 + .../impl/TerminalMaintainServiceImpl.java | 6 +- .../TerminalOnlineRateDataServiceImpl.java | 66 ++++++++++++++++++- .../impl/OnlineRateDataServiceImpl.java | 10 +-- 6 files changed, 113 insertions(+), 14 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/OnlineRateCensusVO.java diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/OnlineRateCensusVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/OnlineRateCensusVO.java new file mode 100644 index 000000000..2f717610a --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/OnlineRateCensusVO.java @@ -0,0 +1,29 @@ +package com.njcn.device.pq.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class OnlineRateCensusVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * x轴 统计类型 + */ + private List type; + + /** + * y轴 数据 + */ + private List single; + + /** + * y轴 同比环比数据 + */ + private List ratio; + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java index b464df06f..b36265ca2 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalOnlineRateDataController.java @@ -7,10 +7,12 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; import com.njcn.device.pq.mapper.OnlineRateMapper; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; +import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.OnlineRateParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; import com.njcn.device.pq.pojo.po.OnlineRate; import com.njcn.device.pq.pojo.po.RStatOnlinerateD; +import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO; import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO; import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO; import com.njcn.device.pq.service.TerminalOnlineRateDataService; @@ -20,6 +22,7 @@ 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; @@ -57,6 +60,16 @@ public class TerminalOnlineRateDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateData,methodDescribe); } + @OperateInfo + @PostMapping("/getOnlineRateDataCensus") + @ApiOperation("终端在线率图表") + @ApiImplicitParam(name = "onlineRateCensusParam", value = "终端在线率参数", required = true) + public HttpResult getOnlineRateDataCensus(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam onlineRateCensusParam){ + String methodDescribe = getMethodDescribe("getOnlineRateDataCensus"); + OnlineRateCensusVO onlineRateCensusVO = terminalOnlineRateDataService.getOnlineRateDataCensus(onlineRateCensusParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateCensusVO,methodDescribe); + } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/getOnlineRateByDevIds") @ApiOperation("终端在线率(谐波专用)") diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalOnlineRateDataService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalOnlineRateDataService.java index c3a2b81a3..a80f36562 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalOnlineRateDataService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/TerminalOnlineRateDataService.java @@ -2,6 +2,7 @@ package com.njcn.device.pq.service; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; +import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO; import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO; import java.util.List; @@ -20,4 +21,6 @@ public interface TerminalOnlineRateDataService { * @return */ List getOnlineRateData(TerminalOnlineRateDataParam terminalOnlineRateDataParam); + + OnlineRateCensusVO getOnlineRateDataCensus(DeviceInfoParam.CompareBusinessParam onlineRateCensusParam); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalMaintainServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalMaintainServiceImpl.java index 591700799..6e2b307af 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalMaintainServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalMaintainServiceImpl.java @@ -126,7 +126,7 @@ public class TerminalMaintainServiceImpl implements TerminalMaintainService { } @Override - public boolean updateRunFlagManage(TerminalParam terminalParam){ + public boolean updateRunFlagManage(TerminalParam terminalParam) { //终端状态管理 List tem = new ArrayList<>(); terminalParam.getIds().forEach(item-> { @@ -191,10 +191,6 @@ public class TerminalMaintainServiceImpl implements TerminalMaintainService { InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); List deviceDayFlow = influxDBResultMapper.toPOJO(result, DeviceDayFlow.class); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); -// Instant time = deviceDayFlow.get(0).getTime(); -// System.out.println(time); -// Date from = Date.from(time); -// System.out.println(from); deviceDayFlow.forEach(t-> t.setDate(formatter.format(Date.from(t.getTime())))); Map> dayFlowMap = deviceDayFlow.stream().collect(Collectors.groupingBy(DeviceDayFlow::getDate)); List list = new ArrayList<>(); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java index d3f8cb404..67f42b944 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java @@ -1,21 +1,29 @@ package com.njcn.device.pq.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.graphbuilder.math.func.AvgFunction; +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.enums.DeviceResponseEnum; import com.njcn.device.pq.enums.LineBaseEnum; +import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; import com.njcn.device.pq.mapper.TerminalOnlineRateDataMapper; 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.OnlineRateParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; import com.njcn.device.pq.pojo.po.TerminalOnlineRateData; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; +import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO; +import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO; import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO; import com.njcn.device.pq.service.IRStatOnlinerateDService; import com.njcn.device.pq.service.TerminalOnlineRateDataService; @@ -35,6 +43,7 @@ import org.influxdb.impl.InfluxDBResultMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -55,7 +64,7 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData private final TerminalOnlineRateDataMapper terminalOnlineRateDataMapper; - private final InfluxDbUtils influxDbUtils; + private final GeneralInfo generalInfo; private final GeneralDeviceService generalDeviceService; @@ -63,6 +72,9 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData private final DicDataFeignClient dicDataFeignClient; + private final RStatOnlinerateDMapper onlineRateMapper; + + /** @@ -157,6 +169,58 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData } + @Override + public OnlineRateCensusVO getOnlineRateDataCensus(DeviceInfoParam.CompareBusinessParam onlineRateCensusParam) { + OnlineRateCensusVO onlineRateCensusVO = new OnlineRateCensusVO(); + onlineRateCensusParam.setServerName(generalInfo.getMicroServiceName()); + List generalDeviceDTOList = generalDeviceService.getDeviceInfo(onlineRateCensusParam,Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); + List type = new ArrayList<>(); + List single = new ArrayList<>(), ratio = new ArrayList<>(); + if (!CollectionUtils.isEmpty(generalDeviceDTOList)) { + for (GeneralDeviceDTO generalDeviceDTO: generalDeviceDTOList){ + List deviceIndexes = generalDeviceDTO.getDeviceIndexes(); + if (CollectionUtils.isEmpty(deviceIndexes)) { + continue; + } + type.add(generalDeviceDTO.getName()); + //根据终端索引集查询在线率 + List onlineRateList = getCondition(deviceIndexes, onlineRateCensusParam.getSearchBeginTime(), onlineRateCensusParam.getSearchEndTime()); + single.add(onlineRateList.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159)); + //如果存在需要比较的时间,再获取对应数据 + if(StrUtil.isNotBlank(onlineRateCensusParam.getPeriodBeginTime()) && StrUtil.isNotBlank(onlineRateCensusParam.getPeriodEndTime())){ + List compareData = getCondition(deviceIndexes, onlineRateCensusParam.getPeriodBeginTime(), onlineRateCensusParam.getPeriodEndTime()); + ratio.add(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159)); + } + } + } + onlineRateCensusVO.setType(type); + onlineRateCensusVO.setSingle(single); + onlineRateCensusVO.setRatio(ratio); + + + return onlineRateCensusVO; + } + + private List getCondition(List deviceIndexes, String searchBeginTime, String searchEndTime) { + List publicDTOList = new ArrayList<>(); + OnlineRateParam param=new OnlineRateParam(); + param.setIds(deviceIndexes); + param.setStartTime( DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toString()); + param.setEndTime( DateUtil.endOfDay(DateUtil.parse(searchEndTime)).toString()); + List data = onlineRateMapper.getOnlineRateByDevIds(param); + if (CollUtil.isNotEmpty(data)) { + data.forEach(po -> { + PublicDTO publicDTO = new PublicDTO(); + //终端在线率 保留两位小数 + Double onlineRate = po.getOnlineRate() == null ? null : BigDecimal.valueOf(Double.parseDouble(po.getOnlineRate().toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + publicDTO.setId(po.getDevIndex()); + publicDTO.setData(onlineRate); + publicDTOList.add(publicDTO); + }); + } + return publicDTOList; + } + /** * 处理变电站 * diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/OnlineRateDataServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/OnlineRateDataServiceImpl.java index 4cbf1689a..2b33aacfe 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/OnlineRateDataServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/OnlineRateDataServiceImpl.java @@ -42,8 +42,6 @@ public class OnlineRateDataServiceImpl implements OnlineRateDataService { private final OnlineRateDataMapper onlineRateDataMapper; - private final InfluxDbUtils influxDbUtils; - private final GeneralDeviceInfoClient generalDeviceInfoClient; private final GeneralInfo generalInfo; @@ -142,16 +140,12 @@ public class OnlineRateDataServiceImpl implements OnlineRateDataService { return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList()); } - /** - * influxDB相关操作 - * 查询终端的在线率 - * 前端要求: 返回百分比数据 - */ + private List getCondition(List deviceIndexes, String startTime, String endTime) { List publicDTOList = new ArrayList<>(); OnlineRateParam param=new OnlineRateParam(); param.setIds(deviceIndexes); - param.setStartTime( DateUtil.beginOfDay(DateUtil.parse(startTime)).toString()); + param.setStartTime(DateUtil.beginOfDay(DateUtil.parse(startTime)).toString()); param.setEndTime( DateUtil.endOfDay(DateUtil.parse(endTime)).toString()); List data = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData(); if (CollUtil.isNotEmpty(data)) {