From b9c0114c671733b460e7e2e1486633b68a20dff5 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Fri, 9 May 2025 16:05:01 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=8C=E6=88=90=E5=BC=82=E5=B8=B8=E7=BB=88?= =?UTF-8?q?=E7=AB=AF=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pq/pojo/param/DevRunEvaluateParam.java | 42 +++ .../njcn/device/pq/pojo/vo/DevDetailVO.java | 32 +++ .../pq/pojo/vo/DeviceRunEvaluateVO.java | 9 +- .../DeviceRunEvaluateController.java | 13 +- .../com/njcn/device/pq/mapper/LineMapper.java | 5 + .../device/pq/mapper/mapping/LineMapper.xml | 35 +++ .../device/pq/service/DeptLineService.java | 12 + .../pq/service/DeviceRunEvaluateService.java | 8 +- .../pq/service/impl/DeptLineServiceImpl.java | 31 +++ .../impl/DeviceRunEvaluateServiceImpl.java | 252 ++++++++++-------- 10 files changed, 328 insertions(+), 111 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DevRunEvaluateParam.java create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DevDetailVO.java diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DevRunEvaluateParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DevRunEvaluateParam.java new file mode 100644 index 000000000..855f1235e --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DevRunEvaluateParam.java @@ -0,0 +1,42 @@ +package com.njcn.device.pq.pojo.param; + +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Range; + +import java.util.List; + +/** + * + * + * @author wr + * @createTime: 2023-04-03 + */ +@Data +@ApiModel +public class DevRunEvaluateParam { + + @ApiModelProperty(name = "orgId", value = "部门id") + private String orgId; + + /** + * 0-电网侧 + * 1-非电网侧 + */ + @ApiModelProperty("电网侧标识") + @Range(min = 0, max = 2, message = "电网侧标识" + ValidMessage.PARAM_FORMAT_ERROR) + private Integer powerFlag; + + @ApiModelProperty(name = "ids", value = "设备id") + private List ids; + + @ApiModelProperty(name = "startTime", value = "开始时间") + private String startTime; + + @ApiModelProperty(name = "endTime", value = "结束时间") + private String endTime; + + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DevDetailVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DevDetailVO.java new file mode 100644 index 000000000..4c5979b6b --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DevDetailVO.java @@ -0,0 +1,32 @@ +package com.njcn.device.pq.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wr + * @description + * @date 2025/5/9 11:26 + */ +@Data +public class DevDetailVO { + + @ApiModelProperty(name = "lineId",value = "监测点索引") + private String lineId; + + @ApiModelProperty(name = "lineName",value = "监测点名称") + private String lineName; + + @ApiModelProperty(name = "devId",value = "终端id") + private String devId; + + @ApiModelProperty(name = "devName",value = "终端名称") + private String devName; + + @ApiModelProperty(name = "subName",value = "变电站名称") + private String subName; + + @ApiModelProperty(name = "subName",value = "对象id(新能源用户)") + private String ObjId; + +} diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceRunEvaluateVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceRunEvaluateVO.java index 6354d3755..e4469a51a 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceRunEvaluateVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/DeviceRunEvaluateVO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; +import java.util.List; /** * @author wr @@ -16,6 +17,8 @@ public class DeviceRunEvaluateVO { @ApiModelProperty("名称") private String name; + @ApiModelProperty("变电站名称") + private String subName; @ApiModelProperty("评价") private BigDecimal evaluate; @@ -28,5 +31,9 @@ public class DeviceRunEvaluateVO { @ApiModelProperty("合格率") private BigDecimal passRate; - + @Data + public static class Info extends DeviceRunEvaluateVO{ + @ApiModelProperty("终端id集合") + private List devIds; + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceRunEvaluateController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceRunEvaluateController.java index 0f60fcf96..21704893f 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceRunEvaluateController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeviceRunEvaluateController.java @@ -5,6 +5,7 @@ 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.DevRunEvaluateParam; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO; import com.njcn.common.pojo.annotation.OperateInfo; @@ -51,12 +52,20 @@ public class DeviceRunEvaluateController extends BaseController { @OperateInfo(info = LogEnum.SYSTEM_COMMON) @PostMapping("/getRunEvaluate") @ApiOperation("终端运行评价") - public HttpResult> getRunEvaluate(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam param) { + public HttpResult> getRunEvaluate(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam param) { String methodDescribe = getMethodDescribe("getRunEvaluate"); - List runEvaluate = deviceRunEvaluateService.getRunEvaluate(param); + List runEvaluate = deviceRunEvaluateService.getRunEvaluate(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, runEvaluate, methodDescribe); } + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getRunEvaluateDetail") + @ApiOperation("终端运行评价") + public HttpResult> getRunEvaluateDetail(@RequestBody @Validated DevRunEvaluateParam param) { + String methodDescribe = getMethodDescribe("getRunEvaluateDetail"); + List runEvaluate = deviceRunEvaluateService.getRunEvaluateDetail(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, runEvaluate, methodDescribe); + } @OperateInfo(info = LogEnum.SYSTEM_COMMON) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java index 8a7e058a5..d4d12c56e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java @@ -573,4 +573,9 @@ public interface LineMapper extends BaseMapper { List getLineByDeviceId(@Param("id") String id); List getLineAndLineDetail(); + + + List getLineDeviceByDevIds(@Param("powerFlag") Integer powerFlag, + @Param("lineIds") List lineIds, + @Param("devIds") List devIds); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml index 50c72c4ea..46a86aaee 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml @@ -1834,4 +1834,39 @@ pq_line t1 inner join pq_line_detail t2 on t1.id = t2.id where t1.state = 1 + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java index 48ac3ae1d..2de2bb978 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeptLineService.java @@ -6,6 +6,7 @@ import com.njcn.device.biz.pojo.dto.SubGetBase; import com.njcn.device.biz.pojo.dto.TerminalGetBase; import com.njcn.device.biz.pojo.param.SubstationParam; import com.njcn.device.pq.pojo.po.DeptLine; +import com.njcn.device.pq.pojo.vo.DevDetailVO; import com.njcn.device.pq.pojo.vo.LineDeviceStateVO; import com.njcn.web.pojo.param.DeptLineParam; @@ -128,4 +129,15 @@ public interface DeptLineService extends IService { DeptLine getLineByLineIds(String ids); List getLineDetailByDeptId(String id); + + + /** + * 根据部门id和终端id筛选信息 + * @param orgId + * @return + */ + List getLineDetailByDeptIdAndDevIds(String orgId,Integer powerFlag, List devIds); + + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceRunEvaluateService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceRunEvaluateService.java index 63f2a67ad..2fdfd4f8e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceRunEvaluateService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DeviceRunEvaluateService.java @@ -1,5 +1,6 @@ package com.njcn.device.pq.service; +import com.njcn.device.pq.pojo.param.DevRunEvaluateParam; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO; @@ -20,7 +21,12 @@ public interface DeviceRunEvaluateService { * @param deviceInfoParam * @return */ - List getRunEvaluate(DeviceInfoParam.CompareBusinessParam deviceInfoParam); + List getRunEvaluate(DeviceInfoParam.CompareBusinessParam deviceInfoParam); + + /** + * 获取终端信息 + */ + List getRunEvaluateDetail(DevRunEvaluateParam param); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java index 9d5d9a83c..2d76b350b 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeptLineServiceImpl.java @@ -16,8 +16,11 @@ import com.njcn.device.pq.mapper.LineDetailMapper; import com.njcn.device.pq.mapper.LineMapper; import com.njcn.device.pq.pojo.po.DeptLine; import com.njcn.device.pq.pojo.po.LineDetail; +import com.njcn.device.pq.pojo.vo.DevDetailVO; import com.njcn.device.pq.pojo.vo.LineDeviceStateVO; import com.njcn.device.pq.service.DeptLineService; +import com.njcn.supervision.api.UserLedgerFeignClient; +import com.njcn.supervision.pojo.vo.user.NewUserReportVO; import com.njcn.system.api.DictTreeFeignClient; import com.njcn.system.enums.DicTreeEnum; import com.njcn.system.pojo.vo.DictTreeVO; @@ -32,8 +35,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -50,6 +55,7 @@ public class DeptLineServiceImpl extends ServiceImpl i private final LineMapper lineMapper; private final DictTreeFeignClient dictTreeFeignClient; private final LineDetailMapper detailMapper; + private final UserLedgerFeignClient userLedgerFeignClient; @Override @@ -195,5 +201,30 @@ public class DeptLineServiceImpl extends ServiceImpl i return lineDeviceStateVO; } + @Override + public List getLineDetailByDeptIdAndDevIds(String orgId,Integer powerFlag, List devIds) { + List lineByDeptId = this.getLineNodeByDeptId(orgId); + List lineDeviceByDevIds = lineMapper.getLineDeviceByDevIds(powerFlag,lineByDeptId, devIds); + if(CollUtil.isNotEmpty(lineDeviceByDevIds)){ + List objIds = lineDeviceByDevIds.stream() + .filter(x -> StrUtil.isNotBlank(x.getObjId())) + .map(DevDetailVO::getObjId) + .distinct() + .collect(Collectors.toList()); + if(CollUtil.isNotEmpty(objIds)){ + List data = userLedgerFeignClient.getUserReportByIds(objIds).getData(); + Map userMap = data.stream().collect(Collectors.toMap(NewUserReportVO::getId, NewUserReportVO::getProjectName)); + for (DevDetailVO lineDeviceByDevId : lineDeviceByDevIds) { + if(StrUtil.isNotBlank(lineDeviceByDevId.getObjId())){ + if(userMap.containsKey(lineDeviceByDevId.getObjId())){ + lineDeviceByDevId.setSubName(userMap.get(lineDeviceByDevId.getObjId())); + } + } + } + } + } + return lineDeviceByDevIds; + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java index e3fd95cbf..259188211 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java @@ -8,9 +8,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.device.pq.mapper.RStatIntegrityDMapper; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; +import com.njcn.device.pq.pojo.param.DevRunEvaluateParam; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatOnlinerateD; +import com.njcn.device.pq.pojo.vo.DevDetailVO; import com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO; import cn.hutool.core.collection.CollectionUtil; import com.njcn.device.pq.enums.LineBaseEnum; @@ -19,6 +21,7 @@ import com.njcn.device.pq.enums.RunFlagEnum; import com.njcn.device.pq.mapper.LineMapper; import com.njcn.device.pq.pojo.dto.MonitorInfoDTO; import com.njcn.device.pq.pojo.vo.TerminalEvaluateAreaVO; +import com.njcn.device.pq.service.DeptLineService; import com.njcn.device.pq.service.DeviceRunEvaluateService; import com.njcn.harmonic.api.RStatLimitRateDClient; import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; @@ -31,12 +34,9 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; -import java.util.Map; import java.util.function.Function; import java.util.stream.Stream; @@ -55,6 +55,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { private final RStatIntegrityDMapper integrityDMapper; private final LineMapper lineMapper; private final UserLedgerFeignClient userLedgerFeignClient; + private final DeptLineService deptLineService; /** * 数据完整性:50% @@ -71,8 +72,8 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { @Override - public List getRunEvaluate(DeviceInfoParam.CompareBusinessParam param) { - List info = new ArrayList<>(); + public List getRunEvaluate(DeviceInfoParam.CompareBusinessParam param) { + List info = new ArrayList<>(); List deptDeviceInfos = generalDeviceService.getDeviceInfo(param, Arrays.asList(0), Arrays.asList(1)); //监测点id集合 List lineIds = deptDeviceInfos.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList()); @@ -83,94 +84,18 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { List onIntegrityList = new ArrayList<>(); if (CollUtil.isNotEmpty(lineIds)) { - RStatLimitQueryParam limitQueryParam = new RStatLimitQueryParam(); - limitQueryParam.setIds(lineIds); - limitQueryParam.setDate(param.getSearchBeginTime()); - limitQueryParam.setEndDate(param.getSearchEndTime()); - limitRateList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(limitQueryParam).getData()); - - //监测点完整性 - onIntegrityList.addAll(integrityDMapper.selectList(new QueryWrapper() - .select("sum(real_time) as realTime,sum(due_time) as dueTime,line_index as lineIndex") - .in(CollUtil.isNotEmpty(lineIds), "line_index", lineIds) - .ge(StrUtil.isNotBlank(param.getSearchBeginTime()), "time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(param.getSearchEndTime()), "time_id", DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))) - .groupBy("line_index"))); - //终端在线率 - onlineRateList.addAll(onLineRateDMapper.selectList(new QueryWrapper() - .select("sum(online_min) as onlineMin,sum(offline_min) as offlineMin,dev_index as devIndex") - .in(CollUtil.isNotEmpty(devIds), "dev_index", devIds) - .ge(StrUtil.isNotBlank(param.getSearchBeginTime()), "time_id", DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))) - .le(StrUtil.isNotBlank(param.getSearchEndTime()), "time_id", DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))) - .groupBy("dev_index"))); + setList(param.getSearchBeginTime(), param.getSearchEndTime(), devIds, lineIds, limitRateList, onIntegrityList, onlineRateList); } - DeviceRunEvaluateVO evaluateVO; + DeviceRunEvaluateVO.Info evaluateVO; for (GeneralDeviceDTO deptDeviceInfo : deptDeviceInfos) { List lineIndexes = deptDeviceInfo.getLineIndexes(); + List devIndexes = deptDeviceInfo.getLineIndexes(); if (CollUtil.isNotEmpty(lineIndexes)) { - evaluateVO = new DeviceRunEvaluateVO(); + evaluateVO = new DeviceRunEvaluateVO.Info(); evaluateVO.setName(deptDeviceInfo.getName()); - //监测完整率 - List integrityDS = onIntegrityList.stream().filter(x -> lineIndexes.contains(x.getLineIndex())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(integrityDS)) { - double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum(); - double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum(); - evaluateVO.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2)); - } else { - evaluateVO.setIntegrityRate(new BigDecimal(0)); - } - //终端在线率 - List onlineRateDS = onlineRateList.stream().filter(x -> deptDeviceInfo.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(onlineRateDS)) { - double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum(); - double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum(); - evaluateVO.setOnLineRate(NumberUtil.round(onlineTime * 100.0 / (onlineTime + offlineTime), 2)); - } else { - evaluateVO.setOnLineRate(new BigDecimal(0)); - } - //终端在线率 - List limitRateDPOS = limitRateList.stream().filter(x -> lineIndexes.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) { - evaluateVO.setPassRate(new BigDecimal(0)); - } else { - evaluateVO.setPassRate(NumberUtil.round(overTime * 100.0 / allTime, 2)); - } - } else { - evaluateVO.setPassRate(new BigDecimal(0)); - } - evaluateVO.setEvaluate( - ONINTEGRITY.multiply(evaluateVO.getIntegrityRate()) - .add(ONLINERATE.multiply(evaluateVO.getOnLineRate()) - .add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros() - ); + evaluateVO.setDevIds(deptDeviceInfo.getDeviceIndexes()); + setEvaluate(devIndexes, lineIndexes, onIntegrityList, evaluateVO, onlineRateList, limitRateList); info.add(evaluateVO); } @@ -179,6 +104,119 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { return info; } + private void setEvaluate(List devIds, List lineIds, List onIntegrityList, DeviceRunEvaluateVO evaluateVO, List onlineRateList, List limitRateList) { + //监测完整率 + List integrityDS = onIntegrityList.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(integrityDS)) { + double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum(); + double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum(); + evaluateVO.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2)); + } else { + evaluateVO.setIntegrityRate(new BigDecimal(0)); + } + //终端在线率 + List onlineRateDS = onlineRateList.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(onlineRateDS)) { + double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum(); + double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum(); + evaluateVO.setOnLineRate(NumberUtil.round(onlineTime * 100.0 / (onlineTime + offlineTime), 2)); + } else { + evaluateVO.setOnLineRate(new BigDecimal(0)); + } + //超标信息 + List limitRateDPOS = limitRateList.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) { + evaluateVO.setPassRate(new BigDecimal(0)); + } else { + evaluateVO.setPassRate(NumberUtil.round((1 - (overTime * 1.0 / allTime)) * 100, 2)); + } + } else { + evaluateVO.setPassRate(new BigDecimal(0)); + } + evaluateVO.setEvaluate( + ONINTEGRITY.multiply(evaluateVO.getIntegrityRate()) + .add(ONLINERATE.multiply(evaluateVO.getOnLineRate()) + .add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros() + ); + } + + private void setList(String beginTime, String endTime, List devIds, List lineIds, List limitRateList, List onIntegrityList, List onlineRateList) { + RStatLimitQueryParam limitQueryParam = new RStatLimitQueryParam(); + limitQueryParam.setIds(lineIds); + limitQueryParam.setDate(beginTime); + limitQueryParam.setEndDate(endTime); + limitRateList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(limitQueryParam).getData()); + //监测点完整性 + onIntegrityList.addAll(integrityDMapper.selectList(new QueryWrapper() + .select("sum(real_time) as realTime,sum(due_time) as dueTime,line_index as lineIndex") + .in(CollUtil.isNotEmpty(lineIds), "line_index", lineIds) + .ge(StrUtil.isNotBlank(beginTime), "time_id", DateUtil.beginOfDay(DateUtil.parse(beginTime))) + .le(StrUtil.isNotBlank(endTime), "time_id", DateUtil.endOfDay(DateUtil.parse(endTime))) + .groupBy("line_index"))); + //终端在线率 + onlineRateList.addAll(onLineRateDMapper.selectList(new QueryWrapper() + .select("sum(online_min) as onlineMin,sum(offline_min) as offlineMin,dev_index as devIndex") + .in(CollUtil.isNotEmpty(devIds), "dev_index", devIds) + .ge(StrUtil.isNotBlank(beginTime), "time_id", DateUtil.beginOfDay(DateUtil.parse(beginTime))) + .le(StrUtil.isNotBlank(endTime), "time_id", DateUtil.endOfDay(DateUtil.parse(endTime))) + .groupBy("dev_index"))); + } + + + @Override + public List getRunEvaluateDetail(DevRunEvaluateParam param) { + List info = new ArrayList<>(); + List devDetailVOList = deptLineService.getLineDetailByDeptIdAndDevIds(param.getOrgId(), param.getPowerFlag(), param.getIds()); + if (CollUtil.isNotEmpty(devDetailVOList)) { + List limitRateList = new ArrayList<>(); + List onlineRateList = new ArrayList<>(); + List onIntegrityList = new ArrayList<>(); + List devIds = devDetailVOList.stream().map(DevDetailVO::getDevId).distinct().collect(Collectors.toList()); + List lineIds = devDetailVOList.stream().map(DevDetailVO::getLineId).distinct().collect(Collectors.toList()); + setList(param.getStartTime(), param.getEndTime(), devIds, lineIds, limitRateList, onIntegrityList, onlineRateList); + Map> devDetailMap = devDetailVOList.stream() + .collect(Collectors.groupingBy(x -> x.getDevId() + "_" + x.getDevName() + "_" + x.getSubName())); + devDetailMap.forEach((key, value) -> { + String[] split = key.split("_"); + DeviceRunEvaluateVO vo = new DeviceRunEvaluateVO(); + vo.setName(split[1]); + vo.setSubName(split[2]); + setEvaluate(Arrays.asList(split[0]), + value.stream().map(DevDetailVO::getLineId).distinct().collect(Collectors.toList()), + onIntegrityList, vo, onlineRateList, limitRateList); + info.add(vo); + }); + } + return info; + } + @Override public List areaTerminalStatistic(DeviceInfoParam.BusinessParam businessParam) { @@ -193,22 +231,22 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { List detailList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(detailList)) { List ids = detailList.stream().map(MonitorInfoDTO::getId).distinct().collect(Collectors.toList()); - List devIds = detailList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList()); + List devIds = detailList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList()); List rStatIntegrityDList = new ArrayList<>(); List rStatOnlinerateDList = new ArrayList<>(); List rStatLimitRateDPOList = new ArrayList<>(); - getData(rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,ids,devIds,businessParam.getSearchBeginTime(),businessParam.getSearchEndTime()); + getData(rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList, ids, devIds, businessParam.getSearchBeginTime(), businessParam.getSearchEndTime()); Map> map = detailList.stream().collect(Collectors.groupingBy(MonitorInfoDTO::getObjId)); map.forEach((objId, list) -> { UserLedgerVO userLedgerVO = userReportVOMap.get(objId); List lineIds = list.stream().map(MonitorInfoDTO::getId).collect(Collectors.toList()); - List devList = list.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).collect(Collectors.toList()); - List temIntegrityList = rStatIntegrityDList.stream().filter(it->lineIds.contains(it.getLineIndex())).collect(Collectors.toList()); - List temlimitList = rStatLimitRateDPOList.stream().filter(it->lineIds.contains(it.getLineId())).collect(Collectors.toList()); - List onlineList = rStatOnlinerateDList.stream().filter(it->devList.contains(it.getDevIndex())).collect(Collectors.toList()); + List devList = list.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).collect(Collectors.toList()); + List temIntegrityList = rStatIntegrityDList.stream().filter(it -> lineIds.contains(it.getLineIndex())).collect(Collectors.toList()); + List temlimitList = rStatLimitRateDPOList.stream().filter(it -> lineIds.contains(it.getLineId())).collect(Collectors.toList()); + List onlineList = rStatOnlinerateDList.stream().filter(it -> devList.contains(it.getDevIndex())).collect(Collectors.toList()); - result.add(getScoreData(userLedgerVO.getProjectName(),devList,temIntegrityList,onlineList,temlimitList)); + result.add(getScoreData(userLedgerVO.getProjectName(), devList, temIntegrityList, onlineList, temlimitList)); }); } } else { @@ -216,15 +254,15 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { List rStatIntegrityDList = new ArrayList<>(); List rStatOnlinerateDList = new ArrayList<>(); List rStatLimitRateDPOList = new ArrayList<>(); - getData(rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList,generalDeviceDTO.getLineIndexes(),generalDeviceDTO.getDeviceIndexes(),businessParam.getSearchBeginTime(),businessParam.getSearchEndTime()); - result.add(getScoreData(generalDeviceDTO.getName(),generalDeviceDTO.getDeviceIndexes(),rStatIntegrityDList,rStatOnlinerateDList,rStatLimitRateDPOList)); + getData(rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList, generalDeviceDTO.getLineIndexes(), generalDeviceDTO.getDeviceIndexes(), businessParam.getSearchBeginTime(), businessParam.getSearchEndTime()); + result.add(getScoreData(generalDeviceDTO.getName(), generalDeviceDTO.getDeviceIndexes(), rStatIntegrityDList, rStatOnlinerateDList, rStatLimitRateDPOList)); } } } return result; } - private TerminalEvaluateAreaVO getScoreData(String name,List devIds,List rStatIntegrityDList,List rStatOnlinerateDList,List rStatLimitRateDPOList) { + private TerminalEvaluateAreaVO getScoreData(String name, List devIds, List rStatIntegrityDList, List rStatOnlinerateDList, List rStatLimitRateDPOList) { double integrityRate = 0; double onlineRate = 0; double qualifiedRate = 0; @@ -233,11 +271,11 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { terminalEvaluateAreaVO.setCount(devIds.size()); if (CollectionUtil.isNotEmpty(rStatIntegrityDList)) { 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)) { onlineRate = rStatOnlinerateDList.stream().mapToDouble(it -> (double) it.getOnlineRate() / it.getOnlineRate() + 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)) { qualifiedRate = rStatLimitRateDPOList.stream().mapToDouble(it -> { @@ -252,20 +290,20 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { return 1 - ((double) (limit) / it.getAllTime() * 25); } }).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()); + terminalEvaluateAreaVO.setScore(BigDecimal.valueOf(pingFen * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); } return terminalEvaluateAreaVO; } - private void getData(List rStatIntegrityDList,List rStatOnlinerateDList,List rStatLimitRateDPOList,List lineIds,List devIds,String startTime,String endTime){ - if(CollUtil.isNotEmpty(lineIds)){ + private void getData(List rStatIntegrityDList, List rStatOnlinerateDList, List rStatLimitRateDPOList, List lineIds, List devIds, String startTime, String endTime) { + if (CollUtil.isNotEmpty(lineIds)) { rStatIntegrityDList.addAll(integrityDMapper.selectList(new QueryWrapper() .select("sum(real_time) as realTime,sum(due_time) as dueTime,line_index as lineIndex") .in(CollUtil.isNotEmpty(lineIds), "line_index", lineIds) - .between("time_id",startTime,endTime) + .between("time_id", startTime, endTime) .groupBy("line_index"))); RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam(); rStatLimitQueryParam.setIds(lineIds); @@ -273,11 +311,11 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { rStatLimitQueryParam.setEndDate(endTime); rStatLimitRateDPOList.addAll(rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData()); } - if(CollectionUtil.isNotEmpty(devIds)) { + if (CollectionUtil.isNotEmpty(devIds)) { rStatOnlinerateDList.addAll(onLineRateDMapper.selectList(new QueryWrapper() .select("sum(online_min) as onlineMin,sum(offline_min) as offlineMin,dev_index as devIndex") .in(CollUtil.isNotEmpty(devIds), "dev_index", devIds) - .between("time_id",startTime,endTime) + .between("time_id", startTime, endTime) .groupBy("dev_index"))); } }