冀北终端评价列表
This commit is contained in:
@@ -14,6 +14,9 @@ import java.util.List;
|
|||||||
@Data
|
@Data
|
||||||
public class DeviceRunEvaluateVO {
|
public class DeviceRunEvaluateVO {
|
||||||
|
|
||||||
|
@ApiModelProperty("终端id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
@ApiModelProperty("名称")
|
@ApiModelProperty("名称")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@@ -40,4 +43,29 @@ public class DeviceRunEvaluateVO {
|
|||||||
@ApiModelProperty("终端id集合")
|
@ApiModelProperty("终端id集合")
|
||||||
private List<String> devIds;
|
private List<String> devIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Detail {
|
||||||
|
|
||||||
|
@ApiModelProperty("名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty("评价")
|
||||||
|
private BigDecimal score;
|
||||||
|
|
||||||
|
@ApiModelProperty("终端数量")
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
@ApiModelProperty("在线率")
|
||||||
|
private BigDecimal online;
|
||||||
|
|
||||||
|
@ApiModelProperty("数据完整性")
|
||||||
|
private BigDecimal integrity;
|
||||||
|
|
||||||
|
@ApiModelProperty("异常率")
|
||||||
|
private BigDecimal qualified;
|
||||||
|
|
||||||
|
@ApiModelProperty("终端信息")
|
||||||
|
List<DeviceRunEvaluateVO> list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,4 +76,14 @@ public class DeviceRunEvaluateController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
|
||||||
|
@PostMapping("/getRunEvaluateInfo")
|
||||||
|
@ApiOperation("终端评价列表(冀北)")
|
||||||
|
public HttpResult<List<DeviceRunEvaluateVO.Detail>> getRunEvaluateInfo(@RequestBody DeviceInfoParam.BusinessParam businessParam) {
|
||||||
|
String methodDescribe = getMethodDescribe("getRunEvaluateInfo");
|
||||||
|
List<DeviceRunEvaluateVO.Detail> runEvaluate = deviceRunEvaluateService.getRunEvaluate(businessParam);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, runEvaluate, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,4 +34,13 @@ public interface DeviceRunEvaluateService {
|
|||||||
|
|
||||||
|
|
||||||
TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam);
|
TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 获取终端列表
|
||||||
|
* @param param
|
||||||
|
* @return: java.util.List<com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO.Detail>
|
||||||
|
* @Author: wr
|
||||||
|
* @Date: 2025/11/27 10:24
|
||||||
|
*/
|
||||||
|
List<DeviceRunEvaluateVO.Detail> getRunEvaluate(DeviceInfoParam.BusinessParam param);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,27 +6,29 @@ import cn.hutool.core.date.DatePattern;
|
|||||||
import cn.hutool.core.date.DateTime;
|
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.ObjectUtil;
|
||||||
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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.njcn.device.common.mapper.onlinerate.OnLineRateMapper;
|
||||||
import com.njcn.device.common.service.GeneralDeviceService;
|
import com.njcn.device.common.service.GeneralDeviceService;
|
||||||
import com.njcn.device.line.mapper.LineMapper;
|
import com.njcn.device.line.mapper.LineMapper;
|
||||||
import com.njcn.device.line.service.DeptLineService;
|
import com.njcn.device.line.service.DeptLineService;
|
||||||
|
import com.njcn.device.line.service.LineService;
|
||||||
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.param.OnlineRateParam;
|
||||||
import com.njcn.device.pq.pojo.po.Line;
|
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.*;
|
||||||
import com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO;
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.njcn.device.pq.enums.LineBaseEnum;
|
import com.njcn.device.pq.enums.LineBaseEnum;
|
||||||
import com.njcn.device.pq.enums.PowerFlagEnum;
|
import com.njcn.device.pq.enums.PowerFlagEnum;
|
||||||
import com.njcn.device.pq.enums.RunFlagEnum;
|
import com.njcn.device.pq.enums.RunFlagEnum;
|
||||||
import com.njcn.device.pq.pojo.dto.MonitorInfoDTO;
|
import com.njcn.device.pq.pojo.dto.MonitorInfoDTO;
|
||||||
import com.njcn.device.pq.pojo.vo.TerminalEvaluateAreaVO;
|
|
||||||
import com.njcn.device.pq.service.DeviceRunEvaluateService;
|
import com.njcn.device.pq.service.DeviceRunEvaluateService;
|
||||||
import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper;
|
import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper;
|
||||||
import com.njcn.harmonic.api.RStatLimitRateDClient;
|
import com.njcn.harmonic.api.RStatLimitRateDClient;
|
||||||
@@ -62,7 +64,9 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
|
|||||||
private final LineMapper lineMapper;
|
private final LineMapper lineMapper;
|
||||||
private final UserLedgerFeignClient userLedgerFeignClient;
|
private final UserLedgerFeignClient userLedgerFeignClient;
|
||||||
private final DeptLineService deptLineService;
|
private final DeptLineService deptLineService;
|
||||||
|
private final GeneralDeviceService deviceService;
|
||||||
|
private final OnLineRateMapper onLineRateMapper;
|
||||||
|
private final LineService lineService;
|
||||||
/**
|
/**
|
||||||
* 数据完整性:50%
|
* 数据完整性:50%
|
||||||
*/
|
*/
|
||||||
@@ -334,6 +338,126 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
|
|||||||
return lastWeekTrendVO;
|
return lastWeekTrendVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceRunEvaluateVO.Detail> getRunEvaluate(DeviceInfoParam.BusinessParam param) {
|
||||||
|
List<DeviceRunEvaluateVO.Detail> info = new ArrayList<>();
|
||||||
|
//获取终端台账类信息
|
||||||
|
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, ObjectUtil.isNull(param.getLineRunFlag()) ? null : Arrays.asList(param.getLineRunFlag()), Arrays.asList(1));
|
||||||
|
if (CollUtil.isNotEmpty(deviceInfo)) {
|
||||||
|
List<String> deviceIds = deviceInfo.stream()
|
||||||
|
.flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList())
|
||||||
|
.stream()
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<String> lineIds = deviceInfo.stream()
|
||||||
|
.flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList())
|
||||||
|
.stream()
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
//获取所有监测点信息信息
|
||||||
|
List<DevDetailVO> lineDeviceByDevIds = lineMapper.getLineDeviceByDevIds(param.getPowerFlag(), lineIds, deviceIds);
|
||||||
|
RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam();
|
||||||
|
rStatLimitQueryParam.setIds(lineIds);
|
||||||
|
rStatLimitQueryParam.setDate(param.getSearchBeginTime());
|
||||||
|
rStatLimitQueryParam.setEndDate(param.getSearchEndTime());
|
||||||
|
OnlineRateParam onlineRateParam = new OnlineRateParam();
|
||||||
|
onlineRateParam.setIds(deviceIds);
|
||||||
|
onlineRateParam.setStartTime(param.getSearchBeginTime());
|
||||||
|
onlineRateParam.setEndTime(param.getSearchEndTime());
|
||||||
|
DeviceRunEvaluateVO.Detail detail;
|
||||||
|
//完整率
|
||||||
|
List<RStatIntegrityVO> integrityList = integrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
|
||||||
|
//超标率
|
||||||
|
List<RStatLimitRateDPO> limitRatePOList = rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData();
|
||||||
|
//获取所有终端在线率
|
||||||
|
List<RStatOnlinerateVO> onlineRateByDev = onLineRateMapper.getOnlineRateByDevIds(onlineRateParam);
|
||||||
|
|
||||||
|
for (GeneralDeviceDTO dto : deviceInfo) {
|
||||||
|
detail = new DeviceRunEvaluateVO.Detail();
|
||||||
|
detail.setName(dto.getName());
|
||||||
|
detail.setCount(dto.getDeviceIndexes().size());
|
||||||
|
detail.setOnline(onLineRate(onlineRateByDev, dto.getDeviceIndexes()));
|
||||||
|
detail.setIntegrity(integrity(integrityList, dto.getLineIndexes()));
|
||||||
|
detail.setQualified(limitRate(limitRatePOList, dto.getLineIndexes()));
|
||||||
|
detail.setScore(ONINTEGRITY.multiply(detail.getIntegrity())
|
||||||
|
.add(ONLINERATE.multiply(detail.getOnline())
|
||||||
|
.add(LIMITRATE.multiply(detail.getQualified()))).stripTrailingZeros());
|
||||||
|
Map<String, List<DevDetailVO>> dev = lineDeviceByDevIds
|
||||||
|
.stream()
|
||||||
|
.filter(x -> dto.getDeviceIndexes().contains(x.getDevId()))
|
||||||
|
.collect(Collectors.groupingBy(DevDetailVO::getDevId));
|
||||||
|
List<DeviceRunEvaluateVO> deviceDetail = new ArrayList<>();
|
||||||
|
if (CollUtil.isNotEmpty(dev)) {
|
||||||
|
dev.forEach((key, value) -> {
|
||||||
|
List<String> ids = value.stream().map(DevDetailVO::getLineId).distinct().collect(Collectors.toList());
|
||||||
|
DeviceRunEvaluateVO evaluateVO = new DeviceRunEvaluateVO();
|
||||||
|
evaluateVO.setId(value.get(0).getDevId());
|
||||||
|
evaluateVO.setName(value.get(0).getDevName());
|
||||||
|
evaluateVO.setSubName(value.get(0).getSubName());
|
||||||
|
evaluateVO.setIp(value.get(0).getIp());
|
||||||
|
evaluateVO.setOnLineRate(onLineRate(onlineRateByDev, Arrays.asList(key)));
|
||||||
|
evaluateVO.setIntegrityRate(integrity(integrityList, ids));
|
||||||
|
evaluateVO.setPassRate(limitRate(limitRatePOList, ids));
|
||||||
|
evaluateVO.setEvaluate(ONINTEGRITY.multiply(evaluateVO.getIntegrityRate())
|
||||||
|
.add(ONLINERATE.multiply(evaluateVO.getOnLineRate())
|
||||||
|
.add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros());
|
||||||
|
deviceDetail.add(evaluateVO);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
detail.setList(deviceDetail);
|
||||||
|
info.add(detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal integrity(List<RStatIntegrityVO> integrityList, List<String> lineIds) {
|
||||||
|
//监测完整率
|
||||||
|
List<RStatIntegrityVO> integrityDS = integrityList.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isNotEmpty(integrityDS)) {
|
||||||
|
double realTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getRealTime).sum();
|
||||||
|
double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getDueTime).sum();
|
||||||
|
return NumberUtil.round(Math.min(realTime * 100 / dueTime, 100), 2);
|
||||||
|
} else {
|
||||||
|
return new BigDecimal(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal onLineRate(List<RStatOnlinerateVO> onlineRateByDev, List<String> devIds) {
|
||||||
|
//终端在线率
|
||||||
|
List<RStatOnlinerateVO> onlineRateDS = onlineRateByDev.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isNotEmpty(onlineRateDS)) {
|
||||||
|
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOnlineMin).sum();
|
||||||
|
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOfflineMin).sum();
|
||||||
|
return NumberUtil.round(Math.min(onlineTime * 100.0 / (onlineTime + offlineTime), 100), 2);
|
||||||
|
} else {
|
||||||
|
return new BigDecimal(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal limitRate(List<RStatLimitRateDPO> limitRatePOList, List<String> lineIds) {
|
||||||
|
//超标信息
|
||||||
|
List<RStatLimitRateDPO> limitRateDPOS = limitRatePOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
|
||||||
|
if (CollUtil.isNotEmpty(limitRateDPOS)) {
|
||||||
|
double overTime = limitRateDPOS.stream().mapToDouble(x -> (x.getUaberranceOvertime() +
|
||||||
|
x.getUharm2Overtime() + x.getUharm3Overtime() + x.getUharm4Overtime() + x.getUharm5Overtime() +
|
||||||
|
x.getUharm6Overtime() + x.getUharm7Overtime() + x.getUharm8Overtime() + x.getUharm9Overtime() +
|
||||||
|
x.getUharm10Overtime() + x.getUharm11Overtime() + x.getUharm12Overtime() + x.getUharm13Overtime() + x.getUharm14Overtime() +
|
||||||
|
x.getUharm15Overtime() + x.getUharm16Overtime() + x.getUharm17Overtime() + x.getUharm18Overtime() + x.getUharm19Overtime() +
|
||||||
|
x.getUharm20Overtime() + x.getUharm21Overtime() + x.getUharm22Overtime() + x.getUharm23Overtime() + x.getUharm24Overtime() +
|
||||||
|
x.getUharm25Overtime())).sum();
|
||||||
|
double allTime = limitRateDPOS.stream().mapToDouble(x -> x.getAllTime() * 25.0).sum();
|
||||||
|
if (allTime == 0) {
|
||||||
|
return new BigDecimal(0);
|
||||||
|
} else {
|
||||||
|
return NumberUtil.round(Math.min((1 - (overTime * 1.0 / allTime)) * 100, 100), 2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return new BigDecimal(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Map<String, NewUserReportVO> getUserLedgerByObjIds(List<String> objIds) {
|
private Map<String, NewUserReportVO> getUserLedgerByObjIds(List<String> objIds) {
|
||||||
List<NewUserReportVO> userReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData();
|
List<NewUserReportVO> userReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData();
|
||||||
return userReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity()));
|
return userReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity()));
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.njcn.device.device.service.impl;
|
package com.njcn.device.device.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.njcn.device.common.service.GeneralDeviceService;
|
import com.njcn.device.common.service.GeneralDeviceService;
|
||||||
import com.njcn.device.device.service.OnLineRateService;
|
import com.njcn.device.device.service.OnLineRateService;
|
||||||
@@ -35,7 +36,7 @@ public class OnLineRateServiceImpl extends ServiceImpl<OnLineRateMapper, RStatOn
|
|||||||
public DeviceOnlineRate deviceOnlineRateInfo(DeviceInfoParam.BusinessParam param) {
|
public DeviceOnlineRate deviceOnlineRateInfo(DeviceInfoParam.BusinessParam param) {
|
||||||
DeviceOnlineRate rate = new DeviceOnlineRate();
|
DeviceOnlineRate rate = new DeviceOnlineRate();
|
||||||
//获取终端台账类信息
|
//获取终端台账类信息
|
||||||
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, null, Arrays.asList(1));
|
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, ObjectUtil.isNull(param.getLineRunFlag()) ? null : Arrays.asList(param.getLineRunFlag()), Arrays.asList(1));
|
||||||
if (CollUtil.isNotEmpty(deviceInfo)) {
|
if (CollUtil.isNotEmpty(deviceInfo)) {
|
||||||
List<String> deviceIds = deviceInfo.stream()
|
List<String> deviceIds = deviceInfo.stream()
|
||||||
.flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList())
|
.flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList())
|
||||||
|
|||||||
Reference in New Issue
Block a user