运维中心数据完整性统计图标接口迁移

This commit is contained in:
zhuxinyu
2023-04-06 18:36:14 +08:00
parent b0f3824d7c
commit 1bf7bfc181
6 changed files with 137 additions and 0 deletions

View File

@@ -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<LineIntegrityDataVO> 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<List<IntegrityIconVO>> getIntegrityIcon(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam integrityIconParam) {
String methodDescribe = getMethodDescribe("getIntegrityIcon");
List<IntegrityIconVO> integrityIconVO = lineIntegrityDataService.getIntegrityIcon(integrityIconParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrityIconVO, methodDescribe);
}
}

View File

@@ -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<LineIntegrityDataVO> getIntegrityDataOfLine(LineIntegrityDataParam lineIntegrityDataParam);
List<IntegrityIconVO> getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam);
}

View File

@@ -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<LineIntegrityDataM
private final RStatIntegrityDMapper rStatIntegrityDMapper;
private final GeneralInfo generalInfo;
private final GeneralDeviceInfoClient generalDeviceInfoClient;
/**
* 监测点数据完整性
*
@@ -182,6 +197,60 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl<LineIntegrityDataM
}
}
@Override
public List<IntegrityIconVO> getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam) {
integrityIconParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(integrityIconParam).getData();
List<IntegrityIconVO> out = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
IntegrityIconVO outParam = new IntegrityIconVO();
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
outParam.setType(generalDeviceDTO.getName());
//根据监测点查询数据完整性
List<PublicDTO> 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<PublicDTO> 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<IntegrityIconVO>() {
@Override
public int compare(IntegrityIconVO o1, IntegrityIconVO o2) {
Comparator<Object> com = Collator.getInstance(Locale.CHINA);
return com.compare(o1.getType(), o2.getType());
}
});
return out;
}
private List<PublicDTO> getCondition(List<String> lineList, String startTime, String endTime) {
List<PublicDTO> 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<RStatIntegrityVO> 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<Integer, Integer> mapAlarm,List<LineIntegrityDataVO> proList) {
for (LineIntegrityDataVO proItem : proList) {