终端运行评价接口

This commit is contained in:
2025-05-12 10:08:23 +08:00
parent b9c0114c67
commit 1e3af78bb5
6 changed files with 225 additions and 35 deletions

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
@@ -25,7 +26,7 @@ public class RStatOnlinerateD {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@MppMultiId @MppMultiId
private LocalDateTime timeId; private LocalDate timeId;
@MppMultiId @MppMultiId
private String devIndex; private String devIndex;

View File

@@ -2,6 +2,8 @@ package com.njcn.device.pq.pojo.vo;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @Author: cdf * @Author: cdf
* @CreateTime: 2025-05-08 * @CreateTime: 2025-05-08
@@ -21,4 +23,14 @@ public class TerminalEvaluateAreaVO {
private Double integrity; private Double integrity;
private Double qualified; private Double qualified;
@Data
public static class lastWeekTrendVO{
private List<String> name;
private List<List<Double>> score;
private List<String> date;
}
} }

View File

@@ -78,4 +78,15 @@ public class DeviceRunEvaluateController extends BaseController {
} }
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
@PostMapping("/lastWeekTrend")
@ApiOperation("最近一周终端评价趋势")
public HttpResult<TerminalEvaluateAreaVO.lastWeekTrendVO> lastWeekTrend(@RequestBody DeviceInfoParam.BusinessParam businessParam) {
String methodDescribe = getMethodDescribe("lastWeekTrend");
TerminalEvaluateAreaVO.lastWeekTrendVO result = deviceRunEvaluateService.lastWeekTrend(businessParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -31,4 +31,7 @@ public interface DeviceRunEvaluateService {
List<TerminalEvaluateAreaVO> areaTerminalStatistic(DeviceInfoParam.BusinessParam businessParam); List<TerminalEvaluateAreaVO> areaTerminalStatistic(DeviceInfoParam.BusinessParam businessParam);
TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam);
} }

View File

@@ -1,15 +1,20 @@
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.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
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.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.pq.mapper.RStatIntegrityDMapper; import com.njcn.device.pq.mapper.RStatIntegrityDMapper;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DevRunEvaluateParam; import com.njcn.device.pq.pojo.param.DevRunEvaluateParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.DevDetailVO; import com.njcn.device.pq.pojo.vo.DevDetailVO;
@@ -28,12 +33,14 @@ import com.njcn.harmonic.pojo.param.RStatLimitQueryParam;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.supervision.api.UserLedgerFeignClient; import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.param.user.UserReportParam; import com.njcn.supervision.pojo.param.user.UserReportParam;
import com.njcn.supervision.pojo.vo.user.NewUserReportVO;
import com.njcn.supervision.pojo.vo.user.UserLedgerVO; import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -218,35 +225,41 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
} }
@Override @Override
public List<TerminalEvaluateAreaVO> areaTerminalStatistic(DeviceInfoParam.BusinessParam businessParam) { public List<TerminalEvaluateAreaVO> areaTerminalStatistic(DeviceInfoParam.BusinessParam businessParam) {
List<TerminalEvaluateAreaVO> result = new ArrayList<>(); List<TerminalEvaluateAreaVO> result = new ArrayList<>();
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(businessParam, Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()), Stream.of(PowerFlagEnum.REAL_DEVICE.getCode()).collect(Collectors.toList())); List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(businessParam, Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()), Stream.of(PowerFlagEnum.REAL_DEVICE.getCode()).collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) { if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) {
if (generalDeviceDTOList.size() == 1 && generalDeviceDTOList.get(0).getIndex().equals(businessParam.getDeptIndex())) { if (generalDeviceDTOList.size() == 1 && generalDeviceDTOList.get(0).getIndex().equals(businessParam.getDeptIndex())) {
List<UserLedgerVO> userLedgerVOList = userLedgerFeignClient.selectUserList(new UserReportParam()).getData();
Map<String, UserLedgerVO> userReportVOMap = userLedgerVOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
//已经最底层,展示电站和用户场站 //已经最底层,展示电站和用户场站
List<MonitorInfoDTO> lineDetailList = lineMapper.getLineListByIds(generalDeviceDTOList.get(0).getLineIndexes()); List<MonitorInfoDTO> lineDetailList = lineMapper.getLineListByIds(generalDeviceDTOList.get(0).getLineIndexes());
List<String> ids = lineDetailList.stream().map(MonitorInfoDTO::getId).distinct().collect(Collectors.toList());
List<String> devIds = lineDetailList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>();
List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>();
getData(rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,ids,devIds,businessParam.getSearchBeginTime(),businessParam.getSearchEndTime());
List<MonitorInfoDTO> detailList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); List<MonitorInfoDTO> detailList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(detailList)) { if (CollUtil.isNotEmpty(detailList)) {
List<String> ids = detailList.stream().map(MonitorInfoDTO::getId).distinct().collect(Collectors.toList()); List<String> objIds = detailList.stream().map(MonitorInfoDTO::getObjId).distinct().collect(Collectors.toList());
List<String> devIds = detailList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList()); Map<String,NewUserReportVO> userReportVOMap = getUserLedgerByObjIds(objIds);
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>();
List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>();
getData(rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList, ids, devIds, businessParam.getSearchBeginTime(), businessParam.getSearchEndTime());
Map<String, List<MonitorInfoDTO>> map = detailList.stream().collect(Collectors.groupingBy(MonitorInfoDTO::getObjId)); Map<String, List<MonitorInfoDTO>> map = detailList.stream().collect(Collectors.groupingBy(MonitorInfoDTO::getObjId));
map.forEach((objId, list) -> { map.forEach((objId, list) -> {
UserLedgerVO userLedgerVO = userReportVOMap.get(objId); NewUserReportVO userLedgerVO = userReportVOMap.get(objId);
List<String> lineIds = list.stream().map(MonitorInfoDTO::getId).collect(Collectors.toList()); commDataCat(list,rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,result,userLedgerVO.getProjectName());
List<String> devList = list.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).collect(Collectors.toList()); });
List<RStatIntegrityD> temIntegrityList = rStatIntegrityDList.stream().filter(it -> lineIds.contains(it.getLineIndex())).collect(Collectors.toList()); }
List<RStatLimitRateDPO> temlimitList = rStatLimitRateDPOList.stream().filter(it -> lineIds.contains(it.getLineId())).collect(Collectors.toList()); List<MonitorInfoDTO> otherDetailList = lineDetailList.stream().filter(it -> StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
List<RStatOnlinerateD> onlineList = rStatOnlinerateDList.stream().filter(it -> devList.contains(it.getDevIndex())).collect(Collectors.toList()); if(CollUtil.isNotEmpty(otherDetailList)){
List<String> subIds = otherDetailList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList());
result.add(getScoreData(userLedgerVO.getProjectName(), devList, temIntegrityList, onlineList, temlimitList)); List<Line> subList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId,subIds));
Map<String,Line> subMap = subList.stream().collect(Collectors.toMap(Line::getId,Function.identity()));
Map<String, List<MonitorInfoDTO>> map = otherDetailList.stream().collect(Collectors.groupingBy(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]));
map.forEach((subId, list) -> {
String name = subMap.get(subId).getName();
commDataCat(list,rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,result,name);
}); });
} }
} else { } else {
@@ -254,28 +267,114 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>(); List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>(); List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>();
List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>(); List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>();
getData(rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList, generalDeviceDTO.getLineIndexes(), generalDeviceDTO.getDeviceIndexes(), businessParam.getSearchBeginTime(), businessParam.getSearchEndTime()); getData(rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,generalDeviceDTO.getLineIndexes(),generalDeviceDTO.getDeviceIndexes(),businessParam.getSearchBeginTime(),businessParam.getSearchEndTime());
result.add(getScoreData(generalDeviceDTO.getName(), generalDeviceDTO.getDeviceIndexes(), rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList)); result.add(getScoreData(generalDeviceDTO.getName(),generalDeviceDTO.getDeviceIndexes(),rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList));
} }
} }
} }
return result; return result;
} }
private TerminalEvaluateAreaVO getScoreData(String name, List<String> devIds, List<RStatIntegrityD> rStatIntegrityDList, List<RStatOnlinerateD> rStatOnlinerateDList, List<RStatLimitRateDPO> rStatLimitRateDPOList) { @Override
public TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam) {
TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrendVO = new TerminalEvaluateAreaVO.lastWeekTrendVO();
List<String> nameList = new ArrayList<>();
List<List<Double>> scoreList = new ArrayList<>();
List<String> dateList = new ArrayList<>();
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(businessParam, Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()), Stream.of(PowerFlagEnum.REAL_DEVICE.getCode()).collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) {
DateTime end = DateUtil.parse(businessParam.getSearchBeginTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
DateTime start = DateUtil.offsetDay(end,-7);
List<DateTime> dateRange = DateUtil.rangeToList(start, end, DateField.DAY_OF_MONTH);
for (DateTime dateTime :dateRange){
dateList.add(DateUtil.format(dateTime,DatePattern.NORM_DATE_PATTERN));
}
if (generalDeviceDTOList.size() == 1 && generalDeviceDTOList.get(0).getIndex().equals(businessParam.getDeptIndex())) {
List<MonitorInfoDTO> lineDetailList = lineMapper.getLineListByIds(generalDeviceDTOList.get(0).getLineIndexes());
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>();
List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>();
getRangeData2(rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,generalDeviceDTOList.get(0).getLineIndexes(),generalDeviceDTOList.get(0).getDeviceIndexes(),DateUtil.format(start,DatePattern.NORM_DATE_PATTERN),DateUtil.format(end,DatePattern.NORM_DATE_PATTERN));
Map<String,List<MonitorInfoDTO>> lineMap = lineDetailList.stream().collect(Collectors.groupingBy(MonitorInfoDTO::getObjId));
lineMap.forEach((key,detailList)->{
if (StrUtil.isNotBlank(key)) {
List<String> objIds = detailList.stream().map(MonitorInfoDTO::getObjId).distinct().collect(Collectors.toList());
Map<String,NewUserReportVO> userReportVOMap = getUserLedgerByObjIds(objIds);
Map<String, List<MonitorInfoDTO>> map = detailList.stream().collect(Collectors.groupingBy(MonitorInfoDTO::getObjId));
map.forEach((objId, list) -> {
NewUserReportVO userLedgerVO = userReportVOMap.get(objId);
nameList.add(userLedgerVO.getProjectName());
rangeCatData(list,dateRange,rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,scoreList);
});
} else {
List<String> subIds = detailList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList());
List<Line> subList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId,subIds));
Map<String,Line> subMap = subList.stream().collect(Collectors.toMap(Line::getId,Function.identity()));
Map<String, List<MonitorInfoDTO>> map = detailList.stream().collect(Collectors.groupingBy(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]));
map.forEach((subId, list) -> {
String name = subMap.get(subId).getName();
nameList.add(name);
rangeCatData(list,dateRange,rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,scoreList);
});
}
});
}else {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
if (CollUtil.isEmpty(generalDeviceDTO.getLineIndexes())) {
continue;
}
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
List<RStatOnlinerateD> rStatOnlinerateDList = new ArrayList<>();
List<RStatLimitRateDPO> rStatLimitRateDPOList = new ArrayList<>();
getRangeData(rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList, generalDeviceDTO.getLineIndexes(), generalDeviceDTO.getDeviceIndexes(), DateUtil.format(start, DatePattern.NORM_DATE_PATTERN), DateUtil.format(end, DatePattern.NORM_DATE_PATTERN));
nameList.add(generalDeviceDTO.getName());
List<Double> scoreDetailList = new ArrayList<>();
for (DateTime day : dateRange) {
List<RStatIntegrityD> temIntegrityList = rStatIntegrityDList.stream().filter(it -> it.getTimeId().equals(day.toLocalDateTime().toLocalDate())).collect(Collectors.toList());
List<RStatOnlinerateD> temOnlinerateList = rStatOnlinerateDList.stream().filter(it -> it.getTimeId().equals(day.toLocalDateTime().toLocalDate())).collect(Collectors.toList());
List<RStatLimitRateDPO> temLimitRateList = rStatLimitRateDPOList.stream().filter(it -> it.getTime().equals(day.toLocalDateTime().toLocalDate())).collect(Collectors.toList());
TerminalEvaluateAreaVO terminalEvaluateAreaVO = getScoreData("", generalDeviceDTO.getDeviceIndexes(), temIntegrityList, temOnlinerateList, temLimitRateList);
scoreDetailList.add(terminalEvaluateAreaVO.getScore());
}
scoreList.add(scoreDetailList);
}
}
}
lastWeekTrendVO.setDate(dateList);
lastWeekTrendVO.setScore(scoreList);
lastWeekTrendVO.setName(nameList);
return lastWeekTrendVO;
}
private Map<String,NewUserReportVO> getUserLedgerByObjIds(List<String> objIds){
List<NewUserReportVO> userReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData();
return userReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity()));
}
private void commDataCat(List<MonitorInfoDTO> list,List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList,List<TerminalEvaluateAreaVO> result,String name){
List<String> lineIds = list.stream().map(MonitorInfoDTO::getId).collect(Collectors.toList());
List<String> devList = list.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).collect(Collectors.toList());
List<RStatIntegrityD> temIntegrityList = rStatIntegrityDList.stream().filter(it->lineIds.contains(it.getLineIndex())).collect(Collectors.toList());
List<RStatLimitRateDPO> temlimitList = rStatLimitRateDPOList.stream().filter(it->lineIds.contains(it.getLineId())).collect(Collectors.toList());
List<RStatOnlinerateD> onlineList = rStatOnlinerateDList.stream().filter(it->devList.contains(it.getDevIndex())).collect(Collectors.toList());
result.add(getScoreData(name,devList,temIntegrityList,onlineList,temlimitList));
}
private TerminalEvaluateAreaVO getScoreData(String name,List<String> devIds,List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList) {
double integrityRate = 0; double integrityRate = 0;
double onlineRate = 0; double onlineRate = 0;
double qualifiedRate = 0; double qualifiedRate = 0;
double pingFen;
TerminalEvaluateAreaVO terminalEvaluateAreaVO = new TerminalEvaluateAreaVO(); TerminalEvaluateAreaVO terminalEvaluateAreaVO = new TerminalEvaluateAreaVO();
terminalEvaluateAreaVO.setName(name); terminalEvaluateAreaVO.setName(name);
terminalEvaluateAreaVO.setCount(devIds.size()); terminalEvaluateAreaVO.setCount(devIds.size());
if (CollectionUtil.isNotEmpty(rStatIntegrityDList)) { if (CollectionUtil.isNotEmpty(rStatIntegrityDList)) {
integrityRate = rStatIntegrityDList.stream().mapToDouble(it -> (double) it.getRealTime() / it.getDueTime()).average().orElse(0); integrityRate = rStatIntegrityDList.stream().mapToDouble(it -> (double) it.getRealTime() / it.getDueTime()).average().orElse(0);
terminalEvaluateAreaVO.setIntegrity(NumberUtil.round(integrityRate * 100, 2).doubleValue()); terminalEvaluateAreaVO.setIntegrity(NumberUtil.round(integrityRate*100,2).doubleValue());
} }
if (CollectionUtil.isNotEmpty(rStatOnlinerateDList)) { if (CollectionUtil.isNotEmpty(rStatOnlinerateDList)) {
onlineRate = rStatOnlinerateDList.stream().mapToDouble(it -> (double) it.getOnlineRate() / it.getOnlineRate() + it.getOfflineMin()).average().orElse(0); onlineRate = rStatOnlinerateDList.stream().mapToDouble(it -> (double) it.getOnlineMin() / (it.getOnlineMin() + it.getOfflineMin())).average().orElse(0);
terminalEvaluateAreaVO.setOnline(NumberUtil.round(onlineRate * 100, 2).doubleValue()); terminalEvaluateAreaVO.setOnline(NumberUtil.round(onlineRate*100,2).doubleValue());
} }
if (CollectionUtil.isNotEmpty(rStatLimitRateDPOList)) { if (CollectionUtil.isNotEmpty(rStatLimitRateDPOList)) {
qualifiedRate = rStatLimitRateDPOList.stream().mapToDouble(it -> { qualifiedRate = rStatLimitRateDPOList.stream().mapToDouble(it -> {
@@ -290,20 +389,34 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
return 1 - ((double) (limit) / it.getAllTime() * 25); return 1 - ((double) (limit) / it.getAllTime() * 25);
} }
}).average().orElse(0); }).average().orElse(0);
terminalEvaluateAreaVO.setQualified(NumberUtil.round(qualifiedRate * 100, 2).doubleValue()); terminalEvaluateAreaVO.setQualified(NumberUtil.round(qualifiedRate*100,2).doubleValue());
double pingFen = integrityRate * 0.5 + onlineRate * 0.2 + qualifiedRate * 0.3;
terminalEvaluateAreaVO.setScore(BigDecimal.valueOf(pingFen * 100).setScale(2, RoundingMode.HALF_UP).doubleValue());
} }
pingFen = integrityRate * 0.5 + onlineRate * 0.2 + qualifiedRate * 0.3;
terminalEvaluateAreaVO.setScore(BigDecimal.valueOf(pingFen*100).setScale(2, RoundingMode.HALF_UP).doubleValue());
return terminalEvaluateAreaVO; return terminalEvaluateAreaVO;
} }
private void rangeCatData(List<MonitorInfoDTO> list,List<DateTime> dateRange,List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList,List<List<Double>> scoreList){
List<String> lineIds = list.stream().map(MonitorInfoDTO::getId).collect(Collectors.toList());
List<String> devList = list.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).collect(Collectors.toList());
List<Double> scoreDetailList = new ArrayList<>();
for (DateTime day : dateRange) {
List<RStatIntegrityD> temIntegrityList = rStatIntegrityDList.stream().filter(it -> it.getTimeId().equals(day.toLocalDateTime().toLocalDate()) && lineIds.contains(it.getLineIndex())).collect(Collectors.toList());
List<RStatOnlinerateD> temOnlinerateList = rStatOnlinerateDList.stream().filter(it -> it.getTimeId().equals(day.toLocalDateTime().toLocalDate())&& devList.contains(it.getDevIndex())).collect(Collectors.toList());
List<RStatLimitRateDPO> temLimitRateList = rStatLimitRateDPOList.stream().filter(it -> it.getTime().equals(day.toLocalDateTime().toLocalDate()) && lineIds.contains(it.getLineId())).collect(Collectors.toList());
TerminalEvaluateAreaVO terminalEvaluateAreaVO = getScoreData("", new ArrayList<>(), temIntegrityList, temOnlinerateList, temLimitRateList);
scoreDetailList.add(terminalEvaluateAreaVO.getScore());
}
scoreList.add(scoreDetailList);
}
private void getData(List<RStatIntegrityD> rStatIntegrityDList, List<RStatOnlinerateD> rStatOnlinerateDList, List<RStatLimitRateDPO> rStatLimitRateDPOList, List<String> lineIds, List<String> devIds, String startTime, String endTime) {
if (CollUtil.isNotEmpty(lineIds)) { private void getData(List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList,List<String> lineIds,List<String> devIds,String startTime,String endTime){
if(CollUtil.isNotEmpty(lineIds)){
rStatIntegrityDList.addAll(integrityDMapper.selectList(new QueryWrapper<RStatIntegrityD>() rStatIntegrityDList.addAll(integrityDMapper.selectList(new QueryWrapper<RStatIntegrityD>()
.select("sum(real_time) as realTime,sum(due_time) as dueTime,line_index as lineIndex") .select("sum(real_time) as realTime,sum(due_time) as dueTime,line_index as lineIndex")
.in(CollUtil.isNotEmpty(lineIds), "line_index", lineIds) .in("line_index", lineIds)
.between("time_id", startTime, endTime) .between("time_id",startTime,endTime)
.groupBy("line_index"))); .groupBy("line_index")));
RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam(); RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam();
rStatLimitQueryParam.setIds(lineIds); rStatLimitQueryParam.setIds(lineIds);
@@ -311,14 +424,63 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
rStatLimitQueryParam.setEndDate(endTime); rStatLimitQueryParam.setEndDate(endTime);
rStatLimitRateDPOList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData()); rStatLimitRateDPOList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData());
} }
if (CollectionUtil.isNotEmpty(devIds)) { if(CollectionUtil.isNotEmpty(devIds)) {
rStatOnlinerateDList.addAll(onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>() rStatOnlinerateDList.addAll(onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>()
.select("sum(online_min) as onlineMin,sum(offline_min) as offlineMin,dev_index as devIndex") .select("sum(online_min) as onlineMin,sum(offline_min) as offlineMin,dev_index as devIndex")
.in(CollUtil.isNotEmpty(devIds), "dev_index", devIds) .in( "dev_index", devIds)
.between("time_id", startTime, endTime) .between("time_id",startTime,endTime)
.groupBy("dev_index"))); .groupBy("dev_index")));
} }
} }
private void getRangeData(List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList,List<String> lineIds,List<String> devIds,String startTime,String endTime){
if(CollUtil.isNotEmpty(lineIds)){
rStatIntegrityDList.addAll(integrityDMapper.selectList(new QueryWrapper<RStatIntegrityD>()
.select("time_id as timeId,sum(real_time) as realTime,sum(due_time) as dueTime")
.in("line_index", lineIds)
.between("time_id",startTime,endTime)
.groupBy("time_id")));
RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam();
rStatLimitQueryParam.setIds(lineIds);
rStatLimitQueryParam.setDate(startTime);
rStatLimitQueryParam.setEndDate(endTime);
rStatLimitRateDPOList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData());
}
if(CollectionUtil.isNotEmpty(devIds)) {
rStatOnlinerateDList.addAll(onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>()
.select("time_id as timeId,sum(online_min) as onlineMin,sum(offline_min) as offlineMin")
.in( "dev_index", devIds)
.between("time_id",startTime,endTime)
.groupBy("time_id")));
}
}
private void getRangeData2(List<RStatIntegrityD> rStatIntegrityDList,List<RStatOnlinerateD> rStatOnlinerateDList,List<RStatLimitRateDPO> rStatLimitRateDPOList,List<String> lineIds,List<String> devIds,String startTime,String endTime){
if(CollUtil.isNotEmpty(lineIds)){
rStatIntegrityDList.addAll(integrityDMapper.selectList(new QueryWrapper<RStatIntegrityD>()
.select("time_id as timeId,line_index as lineIndex,sum(real_time) as realTime,sum(due_time) as dueTime")
.in("line_index", lineIds)
.between("time_id",startTime,endTime)
.groupBy("time_id,line_index")));
RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam();
rStatLimitQueryParam.setIds(lineIds);
rStatLimitQueryParam.setDate(startTime);
rStatLimitQueryParam.setEndDate(endTime);
rStatLimitRateDPOList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData());
}
if(CollectionUtil.isNotEmpty(devIds)) {
rStatOnlinerateDList.addAll(onLineRateDMapper.selectList(new QueryWrapper<RStatOnlinerateD>()
.select("time_id as timeId,dev_index as devIndex,sum(online_min) as onlineMin,sum(offline_min) as offlineMin")
.in( "dev_index", devIds)
.between("time_id",startTime,endTime)
.groupBy("time_id,dev_index")));
}
}
} }

View File

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@@ -50,7 +51,7 @@ public class OnlineRateServiceImpl extends MppServiceImpl<RStatOnlineRateDMapper
LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),
DatePattern.NORM_DATETIME_PATTERN DatePattern.NORM_DATETIME_PATTERN
); );
LocalDateTime dateTime = LocalDateTime.parse(data,DatePattern.NORM_DATETIME_FORMATTER); LocalDate dateTime = LocalDate.parse(data,DatePattern.NORM_DATETIME_FORMATTER);
List<PqsCommunicate> outCommunicateData = new ArrayList<>(); List<PqsCommunicate> outCommunicateData = new ArrayList<>();
for (String dev : devList){ for (String dev : devList){
List<PqsCommunicate> communicateData = getCommunicateData(dev); List<PqsCommunicate> communicateData = getCommunicateData(dev);