数据中心在线率统计图表接口迁移

This commit is contained in:
zhuxinyu
2023-04-06 19:33:21 +08:00
parent 6f8ecd9e86
commit 836565c1cf
6 changed files with 113 additions and 14 deletions

View File

@@ -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<String> type;
/**
* y轴 数据
*/
private List<Double> single;
/**
* y轴 同比环比数据
*/
private List<Double> ratio;
}

View File

@@ -7,10 +7,12 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pq.mapper.OnlineRateMapper; import com.njcn.device.pq.mapper.OnlineRateMapper;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; 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.OnlineRateParam;
import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam;
import com.njcn.device.pq.pojo.po.OnlineRate; import com.njcn.device.pq.pojo.po.OnlineRate;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD; 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.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO; import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO;
import com.njcn.device.pq.service.TerminalOnlineRateDataService; import com.njcn.device.pq.service.TerminalOnlineRateDataService;
@@ -20,6 +22,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -57,6 +60,16 @@ public class TerminalOnlineRateDataController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateData,methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateData,methodDescribe);
} }
@OperateInfo
@PostMapping("/getOnlineRateDataCensus")
@ApiOperation("终端在线率图表")
@ApiImplicitParam(name = "onlineRateCensusParam", value = "终端在线率参数", required = true)
public HttpResult<OnlineRateCensusVO> 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) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOnlineRateByDevIds") @PostMapping("/getOnlineRateByDevIds")
@ApiOperation("终端在线率(谐波专用)") @ApiOperation("终端在线率(谐波专用)")

View File

@@ -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.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam; 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 com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO;
import java.util.List; import java.util.List;
@@ -20,4 +21,6 @@ public interface TerminalOnlineRateDataService {
* @return * @return
*/ */
List<TerminalOnlineRateDataVO> getOnlineRateData(TerminalOnlineRateDataParam terminalOnlineRateDataParam); List<TerminalOnlineRateDataVO> getOnlineRateData(TerminalOnlineRateDataParam terminalOnlineRateDataParam);
OnlineRateCensusVO getOnlineRateDataCensus(DeviceInfoParam.CompareBusinessParam onlineRateCensusParam);
} }

View File

@@ -191,10 +191,6 @@ public class TerminalMaintainServiceImpl implements TerminalMaintainService {
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
List<DeviceDayFlow> deviceDayFlow = influxDBResultMapper.toPOJO(result, DeviceDayFlow.class); List<DeviceDayFlow> deviceDayFlow = influxDBResultMapper.toPOJO(result, DeviceDayFlow.class);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 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())))); deviceDayFlow.forEach(t-> t.setDate(formatter.format(Date.from(t.getTime()))));
Map<String, List<DeviceDayFlow>> dayFlowMap = deviceDayFlow.stream().collect(Collectors.groupingBy(DeviceDayFlow::getDate)); Map<String, List<DeviceDayFlow>> dayFlowMap = deviceDayFlow.stream().collect(Collectors.groupingBy(DeviceDayFlow::getDate));
List<DeviceDayFlow> list = new ArrayList<>(); List<DeviceDayFlow> list = new ArrayList<>();

View File

@@ -1,21 +1,29 @@
package com.njcn.device.pq.service.impl; package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.graphbuilder.math.func.AvgFunction; import com.graphbuilder.math.func.AvgFunction;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pq.api.AlarmClient; import com.njcn.device.pq.api.AlarmClient;
import com.njcn.device.pq.enums.DeviceResponseEnum; import com.njcn.device.pq.enums.DeviceResponseEnum;
import com.njcn.device.pq.enums.LineBaseEnum; 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.mapper.TerminalOnlineRateDataMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; 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.param.TerminalOnlineRateDataParam;
import com.njcn.device.pq.pojo.po.TerminalOnlineRateData; import com.njcn.device.pq.pojo.po.TerminalOnlineRateData;
import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; 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.pojo.vo.TerminalOnlineRateDataVO;
import com.njcn.device.pq.service.IRStatOnlinerateDService; import com.njcn.device.pq.service.IRStatOnlinerateDService;
import com.njcn.device.pq.service.TerminalOnlineRateDataService; import com.njcn.device.pq.service.TerminalOnlineRateDataService;
@@ -35,6 +43,7 @@ import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@@ -55,7 +64,7 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
private final TerminalOnlineRateDataMapper terminalOnlineRateDataMapper; private final TerminalOnlineRateDataMapper terminalOnlineRateDataMapper;
private final InfluxDbUtils influxDbUtils; private final GeneralInfo generalInfo;
private final GeneralDeviceService generalDeviceService; private final GeneralDeviceService generalDeviceService;
@@ -63,6 +72,9 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
private final DicDataFeignClient dicDataFeignClient; 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<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(onlineRateCensusParam,Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
List<String> type = new ArrayList<>();
List<Double> single = new ArrayList<>(), ratio = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO: generalDeviceDTOList){
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
if (CollectionUtils.isEmpty(deviceIndexes)) {
continue;
}
type.add(generalDeviceDTO.getName());
//根据终端索引集查询在线率
List<PublicDTO> 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<PublicDTO> 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<PublicDTO> getCondition(List<String> deviceIndexes, String searchBeginTime, String searchEndTime) {
List<PublicDTO> 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<RStatOnlinerateVO> 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;
}
/** /**
* 处理变电站 * 处理变电站
* *

View File

@@ -42,8 +42,6 @@ public class OnlineRateDataServiceImpl implements OnlineRateDataService {
private final OnlineRateDataMapper onlineRateDataMapper; private final OnlineRateDataMapper onlineRateDataMapper;
private final InfluxDbUtils influxDbUtils;
private final GeneralDeviceInfoClient generalDeviceInfoClient; private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final GeneralInfo generalInfo; private final GeneralInfo generalInfo;
@@ -142,11 +140,7 @@ public class OnlineRateDataServiceImpl implements OnlineRateDataService {
return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList()); return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
} }
/**
* influxDB相关操作
* 查询终端的在线率
* 前端要求: 返回百分比数据
*/
private List<PublicDTO> getCondition(List<String> deviceIndexes, String startTime, String endTime) { private List<PublicDTO> getCondition(List<String> deviceIndexes, String startTime, String endTime) {
List<PublicDTO> publicDTOList = new ArrayList<>(); List<PublicDTO> publicDTOList = new ArrayList<>();
OnlineRateParam param=new OnlineRateParam(); OnlineRateParam param=new OnlineRateParam();