From 8bef9db9c85129cf63b8b704f0ac1f2cebd13c99 Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Tue, 14 Nov 2023 20:17:28 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=97=E6=B3=95=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/po/RMpDevEvaluateDetailPO.java | 5 +- .../harmonic/pojo/po/RStatDevSignalDPO.java | 4 +- .../prepare/executor/MeasurementExecutor.java | 35 ++++ .../RMpDevEvaluateDetailController.java | 4 +- .../RStatDevSignalController.java | 4 +- .../Impl/area/PrimaryGridDataServiceImpl.java | 7 +- .../RMpDevEvaluateDetailPOServiceImpl.java | 174 +++++++++++++----- .../device/RStatDevSignalDPOServiceImpl.java | 126 +++++++++---- .../Impl/line/NormalLimitServiceImpl.java | 6 +- .../area/IRMpMonitorAlarmCountMService.java | 1 - .../area/RMpDevEvaluateDetailPOService.java | 8 +- .../device/RStatDevSignalDPOService.java | 9 +- 12 files changed, 289 insertions(+), 94 deletions(-) diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpDevEvaluateDetailPO.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpDevEvaluateDetailPO.java index 6a46d221d..3fa90e05a 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpDevEvaluateDetailPO.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpDevEvaluateDetailPO.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import lombok.Data; +import java.time.LocalDate; import java.util.Date; /** @@ -24,10 +25,10 @@ import java.util.Date; @TableName(value = "r_mp_dev_evaluate_detail") public class RMpDevEvaluateDetailPO { /** - * 生成数据的时间,每月统计一次 + * 生成数据的时间,每日统计一次 */ @MppMultiId(value = "data_date") - private Date dataDate; + private LocalDate dataDate; /** * 终端id diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatDevSignalDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatDevSignalDPO.java index 9c3d61efb..e6056065c 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatDevSignalDPO.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatDevSignalDPO.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.time.LocalDate; import java.util.Date; import com.github.jeffreyning.mybatisplus.anno.MppMultiId; @@ -23,7 +25,7 @@ public class RStatDevSignalDPO { * 更新时间 */ @MppMultiId(value = "data_date") - private Date dataDate; + private LocalDate dataDate; /** * 终端Id diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/executor/MeasurementExecutor.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/executor/MeasurementExecutor.java index 8853b6008..3dd55a208 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/executor/MeasurementExecutor.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/executor/MeasurementExecutor.java @@ -2,7 +2,9 @@ package com.njcn.prepare.executor; import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.service.mysql.area.IRMpMonitorAlarmCountMService; +import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService; import com.njcn.prepare.harmonic.service.mysql.area.RMpTargetWarnDService; +import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService; import com.njcn.prepare.harmonic.service.mysql.line.DayDataService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService; @@ -49,6 +51,9 @@ public class MeasurementExecutor extends BaseExecutor { private final IRMpMonitorAlarmCountMService rMpMonitorAlarmCountMService; private final PollutionService pollutionService; + private final RStatDevSignalDPOService rStatDevSignalDPOService; + private final RMpDevEvaluateDetailPOService rMpDevEvaluateDetailPOService; + private final NormalLimitService normLimitService; /** * 算法名: 3.3.1.1-----监测点评价 @@ -343,6 +348,36 @@ public class MeasurementExecutor extends BaseExecutor { } } + /** + * 算法名: 3.3.3.1-----终端通信管理_日统计(r_stat_dev_signal_d) + * + * @author xuyang + * @date 2023年11月14日 13:51 + */ + @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rStatDevSignal", nodeType = NodeTypeEnum.COMMON) + public boolean rStatDevSignalAccess(NodeComponent bindCmp) { + return isAccess(bindCmp); + } + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rStatDevSignal", nodeType = NodeTypeEnum.COMMON) + public void rStatDevSignalProcess(NodeComponent bindCmp) { + rStatDevSignalDPOService.devSignalD(bindCmp.getRequestData()); + } + + /** + * 算法名: 3.3.3.2-----终端数据评价_日统计(r_mp_dev_evaluate_detail) + * + * @author xuyang + * @date 2023年11月14日 16:06 + */ + @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rMpDevEvaluateDetail", nodeType = NodeTypeEnum.COMMON) + public boolean rMpDevEvaluateDetailAccess(NodeComponent bindCmp) { + return isAccess(bindCmp); + } + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rMpDevEvaluateDetail", nodeType = NodeTypeEnum.COMMON) + public void rMpDevEvaluateDetailProcess(NodeComponent bindCmp) { + rMpDevEvaluateDetailPOService.devEvaluateDetail(bindCmp.getRequestData()); + } + /********************************************算法负责人:xy结束***********************************************************/ diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java index d097f21dd..92b43f314 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RMpDevEvaluateDetailController.java @@ -97,10 +97,10 @@ public class RMpDevEvaluateDetailController extends BaseController { deviceParam.setDataDate(item); deviceParam.setBeginTime(item + " " + "00:00:00"); deviceParam.setEndTime(item + " " + "23:59:59"); - rMpDevEvaluateDetailPOService.handler(deviceParam); +// rMpDevEvaluateDetailPOService.handler(deviceParam); } } else { - rMpDevEvaluateDetailPOService.handler(deviceParam); +// rMpDevEvaluateDetailPOService.handler(deviceParam); } return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java index fe85efb34..796edecbf 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatDevSignalController.java @@ -98,10 +98,10 @@ public class RStatDevSignalController extends BaseController { deviceParam.setDataDate(item); deviceParam.setBeginTime(item + " " + "00:00:00"); deviceParam.setEndTime(item + " " + "23:59:59"); - rStatDevSignalDPOService.eventdetailHandler(deviceParam); +// rStatDevSignalDPOService.eventdetailHandler(deviceParam); } } else { - rStatDevSignalDPOService.eventdetailHandler(deviceParam); +// rStatDevSignalDPOService.eventdetailHandler(deviceParam); } return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/PrimaryGridDataServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/PrimaryGridDataServiceImpl.java index 2378c4e51..270817561 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/PrimaryGridDataServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/PrimaryGridDataServiceImpl.java @@ -1,6 +1,8 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.area; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; @@ -117,9 +119,6 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService { List deviceIds = primaryGridDataIntegrityParam.getDeviceId(); String dataDate = primaryGridDataIntegrityParam.getDataDate(); List rMpDevEvaluateDetailPOList = new ArrayList<>(); - - final Date tempDate = new SimpleDateFormat("yyyy-MM-dd").parse(dataDate); - deviceIds.forEach(deviceId -> { double dev_data_rate = 0.00; /*获取终端下的监测点集合*/ @@ -144,7 +143,7 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService { } RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); rMpDevEvaluateDetailPO.setDeviceId(deviceId); - rMpDevEvaluateDetailPO.setDataDate(tempDate); + rMpDevEvaluateDetailPO.setDataDate(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_FORMATTER)); rMpDevEvaluateDetailPO.setDevDataRate(dev_data_rate); rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO); }); diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java index d5b8ba21c..9af707082 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RMpDevEvaluateDetailPOServiceImpl.java @@ -1,29 +1,45 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.area; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.github.jknack.handlebars.internal.antlr.misc.Array2DHashSet; import com.njcn.common.utils.PubUtils; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO; +import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.mapper.mysql.area.RMpDevEvaluateDetailPOMapper; +import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper; import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper; +import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO; import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; import com.njcn.prepare.harmonic.pojo.po.RMpDevSolveDetailPO; +import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; import com.njcn.prepare.harmonic.service.mysql.area.RMpDevEvaluateDetailPOService; import com.njcn.prepare.harmonic.service.mysql.device.RMpDevSolveDetailPOService; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.SetUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; /** * @@ -36,60 +52,128 @@ import java.util.List; */ @Service @RequiredArgsConstructor +@Slf4j public class RMpDevEvaluateDetailPOServiceImpl extends MppServiceImpl implements RMpDevEvaluateDetailPOService{ private final ROperatingMonitorDMapper rOperatingMonitorDMapper; private final RMpDevSolveDetailPOService rMpDevSolveDetailPOService; private final DecimalFormat df = new DecimalFormat("#.00"); + private final RMpMonitorEvaluateDMapper revaluateDMapper; + private final CommTerminalGeneralClient commTerminalGeneralClient; + +// @Override +// @Transactional(rollbackFor = {Exception.class}) +// @Async("asyncExecutor") +// @SneakyThrows +// public void handler(DeviceParam deviceParam) { +// +// List rMpDevEvaluateDetailPOList = new ArrayList<>(); +// Date date = DateUtil.parse(deviceParam.getDataDate()); +// QueryWrapper wrapper = new QueryWrapper<>(); +// QueryWrapper wrapper1 = new QueryWrapper<>(); +// +// deviceParam.getDetailList().forEach(temp -> { +// +// RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); +// rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId()); +// rMpDevEvaluateDetailPO.setDataDate(date); +// +// wrapper.clear(); +// wrapper1.clear(); +// wrapper1.select(RMpDevSolveDetailPO.COL_DEFECT_SEVERITY). +// eq(RMpDevSolveDetailPO.COL_DEVICE_ID,temp.getDevId()). +// eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",deviceParam.getDataDate()); +// RMpDevSolveDetailPO one = rMpDevSolveDetailPOService.getOne(wrapper1); +// Double defectSeverity = PubUtils.getDefectSeverity(one.getDefectSeverity()); +// rMpDevEvaluateDetailPO.setDevScore(Double.valueOf(df.format(defectSeverity/3))); +// +// List rOperatingMonitorDPOS = new ArrayList<>(); +// +// List lineIds = temp.getLineIds(); +// if(CollUtil.isNotEmpty(lineIds)){ +// wrapper.in("measurement_point_id", lineIds); +// rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(wrapper); +// } +// double asDouble1=0.00 ,asDouble2=0.00,aDouble=0.00; +// if(rOperatingMonitorDPOS.size()>0){ +// asDouble1= rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble(); +// asDouble2 = rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble(); +// long count = rOperatingMonitorDPOS.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count(); +// aDouble = Double.valueOf(count) / rOperatingMonitorDPOS.size(); +// } +// rMpDevEvaluateDetailPO.setDevDataRate(Double.valueOf(df.format(asDouble1))); +// rMpDevEvaluateDetailPO.setDevTargetRate(Double.valueOf(df.format(asDouble2))); +// rMpDevEvaluateDetailPO.setDevEffectiveRate(Double.valueOf(df.format(aDouble))); +// rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO); +// +// }); +// this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,500); +// } + + @Override @Transactional(rollbackFor = {Exception.class}) @Async("asyncExecutor") @SneakyThrows - public void handler(DeviceParam deviceParam) { - + public void devEvaluateDetail(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>终端评价详情-日统计算法开始"); List rMpDevEvaluateDetailPOList = new ArrayList<>(); - Date date = DateUtil.parse(deviceParam.getDataDate()); - QueryWrapper wrapper = new QueryWrapper<>(); - QueryWrapper wrapper1 = new QueryWrapper<>(); - - deviceParam.getDetailList().forEach(temp -> { - - RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); - rMpDevEvaluateDetailPO.setDeviceId(temp.getDevId()); - rMpDevEvaluateDetailPO.setDataDate(date); - - wrapper.clear(); - wrapper1.clear(); - wrapper1.select(RMpDevSolveDetailPO.COL_DEFECT_SEVERITY). - eq(RMpDevSolveDetailPO.COL_DEVICE_ID,temp.getDevId()). - eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",deviceParam.getDataDate()); - RMpDevSolveDetailPO one = rMpDevSolveDetailPOService.getOne(wrapper1); - Double defectSeverity = PubUtils.getDefectSeverity(one.getDefectSeverity()); - rMpDevEvaluateDetailPO.setDevScore(Double.valueOf(df.format(defectSeverity/3))); - - List rOperatingMonitorDPOS = new ArrayList<>(); - - List lineIds = temp.getLineIds(); - if(CollUtil.isNotEmpty(lineIds)){ - wrapper.in("measurement_point_id", lineIds); - rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(wrapper); + List operatingMonitorList = new ArrayList<>(); + List devSolveDetailList = new ArrayList<>(); + List lineDevGetList = new ArrayList<>(); + List deviceList = new ArrayList<>(); + List lineIds = calculatedParam.getIdList(); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + //获取监测点评价详情 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ROperatingMonitorDPO::getMeasurementPointId,pendingId) + .eq(ROperatingMonitorDPO::getDataDate,calculatedParam.getDataDate()); + List ls = rOperatingMonitorDMapper.selectList(lambdaQueryWrapper); + operatingMonitorList.addAll(ls); + //监测点详情 + lineDevGetList.addAll(commTerminalGeneralClient.getMonitorDetailList(pendingId).getData()); + } + Map> map1 = operatingMonitorList.stream().collect(Collectors.groupingBy(ROperatingMonitorDPO::getDevId)); + Map> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); + //获取装置集合 + map2.forEach((k,v)->{ + if (!deviceList.contains(k)){ + deviceList.add(k); } - double asDouble1=0.00 ,asDouble2=0.00,aDouble=0.00; - if(rOperatingMonitorDPOS.size()>0){ - asDouble1= rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble(); - asDouble2 = rOperatingMonitorDPOS.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble(); - long count = rOperatingMonitorDPOS.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count(); - aDouble = Double.valueOf(count) / rOperatingMonitorDPOS.size(); - } - rMpDevEvaluateDetailPO.setDevDataRate(Double.valueOf(df.format(asDouble1))); - rMpDevEvaluateDetailPO.setDevTargetRate(Double.valueOf(df.format(asDouble2))); - rMpDevEvaluateDetailPO.setDevEffectiveRate(Double.valueOf(df.format(aDouble))); - rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO); - }); - this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,500); + //以尺寸100分片,查询装置数据 + List> devIds = ListUtils.partition(deviceList,100); + for (List devId : devIds) { + //获取终端消缺明细数据 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(RMpDevSolveDetailPO::getDeviceId,devId) + .eq(RMpDevSolveDetailPO::getDataDate,calculatedParam.getDataDate()); + List ls = rMpDevSolveDetailPOService.list(lambdaQueryWrapper); + devSolveDetailList.addAll(ls); + } + Map> map3 = devSolveDetailList.stream().collect(Collectors.groupingBy(RMpDevSolveDetailPO::getDeviceId)); + map2.forEach((k,v)->{ + RMpDevEvaluateDetailPO rMpDevEvaluateDetailPO = new RMpDevEvaluateDetailPO(); + rMpDevEvaluateDetailPO.setDeviceId(k); + rMpDevEvaluateDetailPO.setDataDate(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_FORMATTER)); + rMpDevEvaluateDetailPO.setDevScore(Objects.isNull(map3.get(k)) ? null: PubUtils.getDefectSeverity(map3.get(k).get(0).getDefectSeverity())); + if (!Objects.isNull(map1.get(k))){ + List ls = map1.get(k); + double d1 = ls.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble(); + double d2 = ls.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble(); + rMpDevEvaluateDetailPO.setDevDataRate(d1); + rMpDevEvaluateDetailPO.setDevTargetRate(d2); + long count = ls.stream().filter(po -> po.getIsUnusual() == 1 && po.getDataIntegrityRate().compareTo(new BigDecimal(0.95)) == 1).count(); + double d3 = (double) count / ls.size(); + rMpDevEvaluateDetailPO.setDevEffectiveRate(d3); + } + rMpDevEvaluateDetailPOList.add(rMpDevEvaluateDetailPO); + }); + if (CollectionUtil.isNotEmpty(rMpDevEvaluateDetailPOList)){ + this.saveOrUpdateBatchByMultiId(rMpDevEvaluateDetailPOList,100); + } } - - } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java index b6016ebca..e12ff36c1 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/RStatDevSignalDPOServiceImpl.java @@ -1,9 +1,16 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.device; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.LineDevGetDTO; +import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.mapper.mysql.line.RMpMonitorEvaluateDMapper; import com.njcn.prepare.harmonic.pojo.mysql.RMpMonitorEvaluateDPO; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; @@ -12,6 +19,10 @@ import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.MapUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -20,9 +31,10 @@ import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; import com.njcn.prepare.harmonic.service.mysql.device.RStatDevSignalDPOService; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; /** * Description: @@ -33,49 +45,99 @@ import java.util.List; */ @Service @RequiredArgsConstructor +@Slf4j public class RStatDevSignalDPOServiceImpl extends MppServiceImpl implements RStatDevSignalDPOService { private final RMpMonitorEvaluateDMapper revaluateDMapper; private final DicDataFeignClient dicDataFeignClient; + private final CommTerminalGeneralClient commTerminalGeneralClient; + @Override @Transactional(rollbackFor = {Exception.class}) @Async("asyncExecutor") @SneakyThrows - public void eventdetailHandler(DeviceParam deviceParam) { - List rStatDevSignalDPOList = new ArrayList<>(); - Date date = DateUtil.parse(deviceParam.getDataDate()); - QueryWrapper wrapper = new QueryWrapper<>(); + public void devSignalD(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>终端通信管理日统计算法开始"); + List lineDevGetList = new ArrayList<>(); + List rStatDevSignalList = new ArrayList<>(); + List evaluateList = new ArrayList<>(); DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData(); - deviceParam.getDetailList().forEach(temp -> { + List lineIds = calculatedParam.getIdList(); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + //获取监测点评价详情 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(RMpMonitorEvaluateDPO::getMeasurementPointId,pendingId) + .eq(RMpMonitorEvaluateDPO::getDataDate,calculatedParam.getDataDate()); + List ls = revaluateDMapper.selectList(lambdaQueryWrapper); + evaluateList.addAll(ls); + //监测点详情 + lineDevGetList.addAll(commTerminalGeneralClient.getMonitorDetailList(pendingId).getData()); + } + Map> map1 = evaluateList.stream().collect(Collectors.groupingBy(RMpMonitorEvaluateDPO::getDeviceId)); + Map> map2 = lineDevGetList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId)); - RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO(); - rStatDevSignalDPO.setDeviceId(temp.getDevId()); - rStatDevSignalDPO.setDeviceStatus(data.getId()); - rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime()); - rStatDevSignalDPO.setDataDate(date); - /** - * 1、运行状态:设备下任意一个监测点有效接入分钟数(effective_minute_count > 0)为在线状态,反之离线状态 - */ - Integer effective_minute_count = 0; - List lineIds = temp.getLineIds(); - if (CollUtil.isNotEmpty(lineIds)) { - wrapper.clear(); - wrapper.select("sum(effective_minute_count) as effective_minute_count "); - wrapper.eq("device_id", temp.getDevId()); - wrapper.in("measurement_point_id", lineIds); - RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = revaluateDMapper.selectOne(wrapper); - effective_minute_count = rMpMonitorEvaluateDPO.getEffectiveMinuteCount(); + map2.forEach((k,v)->{ + RStatDevSignalDPO rStatDevSignal = new RStatDevSignalDPO(); + rStatDevSignal.setDeviceId(k); + rStatDevSignal.setDeviceStatus(data.getId()); + if (!Objects.isNull(v.get(0).getUpdateTime())){ + rStatDevSignal.setUpdateTime(v.get(0).getUpdateTime().format(DatePattern.NORM_DATETIME_FORMATTER)); } - String runStatus = "0"; - if (effective_minute_count > 0 && temp.getDeviceStatus().equals("1")) { - runStatus = "1"; + rStatDevSignal.setDataDate(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_FORMATTER)); + if (CollectionUtil.isNotEmpty(map1.get(k))){ + int count = map1.get(k).stream().mapToInt(RMpMonitorEvaluateDPO::getEffectiveMinuteCount).sum(); + if (count > 0){ + rStatDevSignal.setRunStatus("1"); + } else { + rStatDevSignal.setRunStatus("0"); + } + } else { + rStatDevSignal.setRunStatus("0"); } - rStatDevSignalDPO.setRunStatus(runStatus); - rStatDevSignalDPOList.add(rStatDevSignalDPO); - + rStatDevSignalList.add(rStatDevSignal); }); - this.saveOrUpdateBatchByMultiId(rStatDevSignalDPOList, 500); + if (CollectionUtil.isNotEmpty(rStatDevSignalList)){ + this.saveOrUpdateBatchByMultiId(rStatDevSignalList, 100); + } } + +// public void eventdetailHandler(DeviceParam deviceParam) { +// List rStatDevSignalDPOList = new ArrayList<>(); +// Date date = DateUtil.parse(deviceParam.getDataDate()); +// QueryWrapper wrapper = new QueryWrapper<>(); +// DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUNNING.getCode()).getData(); +// deviceParam.getDetailList().forEach(temp -> { +// +// RStatDevSignalDPO rStatDevSignalDPO = new RStatDevSignalDPO(); +// rStatDevSignalDPO.setDeviceId(temp.getDevId()); +// rStatDevSignalDPO.setDeviceStatus(data.getId()); +// rStatDevSignalDPO.setUpdateTime(temp.getUpdateTime()); +// rStatDevSignalDPO.setDataDate(date); +// /** +// * 1、运行状态:设备下任意一个监测点有效接入分钟数(effective_minute_count > 0)为在线状态,反之离线状态 +// */ +// Integer effective_minute_count = 0; +// List lineIds = temp.getLineIds(); +// if (CollUtil.isNotEmpty(lineIds)) { +// wrapper.clear(); +// wrapper.select("sum(effective_minute_count) as effective_minute_count "); +// wrapper.eq("device_id", temp.getDevId()); +// wrapper.in("measurement_point_id", lineIds); +// RMpMonitorEvaluateDPO rMpMonitorEvaluateDPO = revaluateDMapper.selectOne(wrapper); +// effective_minute_count = rMpMonitorEvaluateDPO.getEffectiveMinuteCount(); +// } +// String runStatus = "0"; +// if (effective_minute_count > 0 && temp.getDeviceStatus().equals("1")) { +// runStatus = "1"; +// } +// rStatDevSignalDPO.setRunStatus(runStatus); +// rStatDevSignalDPOList.add(rStatDevSignalDPO); +// +// }); +// this.saveOrUpdateBatchByMultiId(rStatDevSignalDPOList, 500); +// } } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/NormalLimitServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/NormalLimitServiceImpl.java index 1786fce8c..f5bda1b04 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/NormalLimitServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/NormalLimitServiceImpl.java @@ -259,12 +259,12 @@ public class NormalLimitServiceImpl extends ServiceImpl>> inMap, String phasic,Map overLimit, Boolean flag,MpSurplusAbnormalD mpSurplusAbnormalCp95,MpSurplusAbnormalD mpSurplusAbnormalAvg,MpSurplusAbnormalD mpSurplusAbnormalMax,MpSurplusAbnormalD mpSurplusAbnormalMin - ,int start,int count,int type,String overTag,String temTag){ + ,int start,int count,int type,String overTag,String temTag){ if (inMap.containsKey(phasic)) { List> mapList = inMap.get(phasic); diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRMpMonitorAlarmCountMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRMpMonitorAlarmCountMService.java index 9abfa8cfc..03ac6b79a 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRMpMonitorAlarmCountMService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/IRMpMonitorAlarmCountMService.java @@ -1,7 +1,6 @@ package com.njcn.prepare.harmonic.service.mysql.area; import com.njcn.prepare.bo.CalculatedParam; -import com.njcn.prepare.harmonic.pojo.param.LineParam; /** *

diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java index 0c7ea9a30..7496364a1 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RMpDevEvaluateDetailPOService.java @@ -2,6 +2,7 @@ package com.njcn.prepare.harmonic.service.mysql.area; import com.github.jeffreyning.mybatisplus.service.IMppService; import com.njcn.harmonic.pojo.po.RMpDevEvaluateDetailPO; +import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; @@ -16,6 +17,11 @@ import com.njcn.prepare.harmonic.pojo.param.DeviceParam; */ public interface RMpDevEvaluateDetailPOService extends IMppService { +// void handler(DeviceParam deviceParam); - void handler(DeviceParam deviceParam); + /** + * 终端评价详情表_日统计 + * @param calculatedParam + */ + void devEvaluateDetail(CalculatedParam calculatedParam); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java index 254c543db..b1bf901ba 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/RStatDevSignalDPOService.java @@ -1,6 +1,7 @@ package com.njcn.prepare.harmonic.service.mysql.device; import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.param.DeviceParam; import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; @@ -13,6 +14,12 @@ import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO; */ public interface RStatDevSignalDPOService extends IMppService { - void eventdetailHandler(DeviceParam deviceParam); +// void eventdetailHandler(DeviceParam deviceParam); + + /** + * 终端通信管理_日统计 + * @param calculatedParam + */ + void devSignalD(CalculatedParam calculatedParam); }