From 1244a5613e63c5394cf2f6c42911540e481e3743 Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Wed, 22 Nov 2023 15:02:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E6=B5=8B=E7=82=B9=E5=9F=BA=E5=87=86?= =?UTF-8?q?=E6=B0=B4=E5=B9=B3=E8=AF=84=E4=BC=B0=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../harmonic/pojo/po/RMpBenchmarkLevelD.java | 51 +++++++ .../harmonic/pojo/po/RMpBenchmarkLevelM.java | 3 + .../harmonic/pojo/po/RMpBenchmarkLevelQ.java | 3 + .../harmonic/pojo/po/RMpBenchmarkLevelY.java | 3 + .../prepare/executor/MeasurementExecutor.java | 43 ++++++ .../mapper/mysql/day/RStatDataPltDMapper.java | 11 ++ .../mapper/mysql/day/RStatDataVDMapper.java | 6 + .../mysql/day/mapping/RStatDataPltDMapper.xml | 20 +++ .../mysql/day/mapping/RStatDataVDMapper.xml | 70 ++++++++++ .../RMpBenchmarkLevelDMapper.java | 10 ++ .../RMpBenchmarkLevelMMapper.java | 10 ++ .../RMpBenchmarkLevelQMapper.java | 10 ++ .../RMpBenchmarkLevelYMapper.java | 11 ++ .../IRMpBenchmarkLevelDService.java | 19 +++ .../IRMpBenchmarkLevelMService.java | 19 +++ .../IRMpBenchmarkLevelQService.java | 20 +++ .../IRMpBenchmarkLevelYService.java | 20 +++ .../impl/RMpBenchmarkLevelDServiceImpl.java | 103 +++++++++++++++ .../impl/RMpBenchmarkLevelMServiceImpl.java | 124 ++++++++++++++++++ .../impl/RMpBenchmarkLevelQServiceImpl.java | 122 +++++++++++++++++ .../impl/RMpBenchmarkLevelYServiceImpl.java | 122 +++++++++++++++++ 21 files changed, 800 insertions(+) create mode 100644 pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelD.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelDMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelMMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelQMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelYMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelDService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelMService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelQService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelYService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelDServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelMServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelQServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelYServiceImpl.java diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelD.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelD.java new file mode 100644 index 000000000..b04082fb4 --- /dev/null +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelD.java @@ -0,0 +1,51 @@ +package com.njcn.harmonic.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 【基准水平-日】 + * @author xuyang + * @TableName r_mp_benchmark_level_d + */ +@Data +@TableName("r_mp_benchmark_level_d") +public class RMpBenchmarkLevelD implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 监测点ID + */ + @MppMultiId + private String measurementPointId; + + /** + * 生成数据的时间,每月统计一次 + */ + @MppMultiId + private Date dataDate; + + /** + * 电压统计值 + */ + private Double voltageAvg; + + /** + * 三相电压不平衡统计值 + */ + private Double unbalanceAvg; + + /** + * 电压总谐波畸变率统计值 + */ + private Double vthdAvg; + + /** + * 长时间闪变统计值 + */ + private Double flickerAvg; +} \ No newline at end of file diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelM.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelM.java index c573125af..88b27d6db 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelM.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelM.java @@ -1,6 +1,7 @@ package com.njcn.harmonic.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import lombok.Data; import java.io.Serializable; @@ -19,11 +20,13 @@ public class RMpBenchmarkLevelM implements Serializable { /** * 监测点ID */ + @MppMultiId private String measurementPointId; /** * 生成数据的时间,每月统计一次 */ + @MppMultiId private Date dataDate; /** diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelQ.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelQ.java index 6cf2e4b2a..c7b408203 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelQ.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelQ.java @@ -1,6 +1,7 @@ package com.njcn.harmonic.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import lombok.Data; import java.io.Serializable; @@ -20,11 +21,13 @@ public class RMpBenchmarkLevelQ implements Serializable { /** * 监测点ID */ + @MppMultiId private String measurementPointId; /** * 生成数据的时间,每季统计一次 */ + @MppMultiId private Date dataDate; /** diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelY.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelY.java index 8682808ca..e307043ac 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelY.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RMpBenchmarkLevelY.java @@ -1,6 +1,7 @@ package com.njcn.harmonic.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,11 +21,13 @@ public class RMpBenchmarkLevelY implements Serializable { /** * 监测点ID */ + @MppMultiId private String measurementPointId; /** * 生成数据的时间,每年统计一次 */ + @MppMultiId private Date dataDate; /** 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 1195cb43b..d1ef88136 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 @@ -10,6 +10,10 @@ import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService; import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailService; import com.njcn.prepare.harmonic.service.mysql.line.RMpMonitorEvaluateDService; import com.njcn.prepare.harmonic.service.mysql.line.*; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelDService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelMService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelQService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelYService; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowMethod; import com.yomahub.liteflow.core.NodeComponent; @@ -53,6 +57,10 @@ public class MeasurementExecutor extends BaseExecutor { private final PollutionService pollutionService; private final RStatDevSignalDPOService rStatDevSignalDPOService; private final RMpDevEvaluateDetailPOService rMpDevEvaluateDetailPOService; + private final IRMpBenchmarkLevelDService irMpBenchmarkLevelDService; + private final IRMpBenchmarkLevelMService irMpBenchmarkLevelMService; + private final IRMpBenchmarkLevelQService irmBenchmarkLevelQService; + private final IRMpBenchmarkLevelYService irMpBenchmarkLevelYService; /** * 算法名: 3.3.1.1-----监测点评价 @@ -388,5 +396,40 @@ public class MeasurementExecutor extends BaseExecutor { public void rMpDevEvaluateDetailProcess(NodeComponent bindCmp) { rMpDevEvaluateDetailPOService.devEvaluateDetail(bindCmp.getRequestData()); } + + /** + * 算法名: 3.4.1.9.1-----监测点基准水平评估_日、月、季、年统计(r_mp_benchmark_level_d、r_mp_benchmark_level_m、r_mp_benchmark_level_q、r_mp_benchmark_level_y) + * + * @author xuyang + * @date 2023年11月21日 14:40 + */ + @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rMpBenchmarkLevel", nodeType = NodeTypeEnum.COMMON) + public boolean rMpBenchmarkLevelAccess(NodeComponent bindCmp) { + return isAccess(bindCmp); + } + @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rMpBenchmarkLevel", nodeType = NodeTypeEnum.COMMON) + public void rMpBenchmarkLevelProcess(NodeComponent bindCmp) { + String tag = bindCmp.getTag(); + CalculatedParam calculatedParam = bindCmp.getRequestData(); + if (Objects.equals(tag,"r_mp_benchmark_level_d")){ + //日表 + irMpBenchmarkLevelDService.benchmarkLevelD(calculatedParam); + } else if (Objects.equals(tag,"r_mp_benchmark_level_m")){ + if (!calculatedParam.isRepair()) { + //月表 + irMpBenchmarkLevelMService.benchmarkLevelM(calculatedParam); + } + } else if (Objects.equals(tag,"r_mp_benchmark_level_q")) { + if (!calculatedParam.isRepair()) { + //季表 + irmBenchmarkLevelQService.benchmarkLevelQ(calculatedParam); + } + } else if (Objects.equals(tag,"r_mp_benchmark_level_y")) { + if (!calculatedParam.isRepair()) { + //年表 + irMpBenchmarkLevelYService.benchmarkLevelY(calculatedParam); + } + } + } /********************************************算法负责人:xy结束***********************************************************/ } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataPltDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataPltDMapper.java index abf101455..6bbd2ed61 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataPltDMapper.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataPltDMapper.java @@ -1,7 +1,18 @@ package com.njcn.prepare.harmonic.mapper.mysql.day; +import cn.hutool.core.date.DateTime; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; import com.njcn.harmonic.pojo.po.day.RStatDataPltDPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface RStatDataPltDMapper extends MppBaseMapper { + + /** + * 获取监测点基准水平评估 + */ + List getBenchmarkLevel(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime, @Param("list") List list); + + } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java index 13628ba2c..f14e8fd8a 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java @@ -1,5 +1,6 @@ package com.njcn.prepare.harmonic.mapper.mysql.day; +import cn.hutool.core.date.DateTime; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; import com.njcn.harmonic.pojo.po.day.RStatDataVDPO; import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; @@ -24,4 +25,9 @@ public interface RStatDataVDMapper extends MppBaseMapper { List getAvgDayData(@Param("startTime") String time, @Param("endTime") String endTime, @Param("list") List list); List getTargetWarnD(@Param("time") String time, @Param("list") List list); + + /** + * 获取监测点基准水平评估 + */ + List getBenchmarkLevel(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime, @Param("list") List list); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataPltDMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataPltDMapper.xml index c6dc2a909..02cccb50a 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataPltDMapper.xml +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataPltDMapper.xml @@ -2,4 +2,24 @@ + + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml index 3a4487afe..153ac8750 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml @@ -317,4 +317,74 @@ + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelDMapper.java new file mode 100644 index 000000000..44c8c1a4a --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelDMapper.java @@ -0,0 +1,10 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; + +/** + * xuyang + */ +public interface RMpBenchmarkLevelDMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelMMapper.java new file mode 100644 index 000000000..d11815aae --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelMMapper.java @@ -0,0 +1,10 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelM; + +/** + * xuyang + */ +public interface RMpBenchmarkLevelMMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelQMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelQMapper.java new file mode 100644 index 000000000..fb25771e8 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelQMapper.java @@ -0,0 +1,10 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelQ; + +/** + * xuyang + */ +public interface RMpBenchmarkLevelQMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelYMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelYMapper.java new file mode 100644 index 000000000..a63da24c3 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpBenchmarkLevelYMapper.java @@ -0,0 +1,11 @@ +package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelQ; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelY; + +/** + * xuyang + */ +public interface RMpBenchmarkLevelYMapper extends MppBaseMapper { +} \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelDService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelDService.java new file mode 100644 index 000000000..14cb6fecd --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelDService.java @@ -0,0 +1,19 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; + +/** + * 监测点基准水平评估_月 + * xuyang + * 2023-11-21 + */ +public interface IRMpBenchmarkLevelDService extends IMppService { + + /** + * @Description: 监测点基准水平评估_日 + * @author: xuyang + */ + void benchmarkLevelD(CalculatedParam calculatedParam); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelMService.java new file mode 100644 index 000000000..fa3c3a365 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelMService.java @@ -0,0 +1,19 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelM; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; + +/** + * 监测点基准水平评估_月 + * xuyang + * 2023-11-21 + */ +public interface IRMpBenchmarkLevelMService extends IMppService { + + /** + * @Description: 监测点基准水平评估_月 + * @author: xuyang + */ + void benchmarkLevelM(CalculatedParam calculatedParam); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelQService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelQService.java new file mode 100644 index 000000000..04ece84a2 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelQService.java @@ -0,0 +1,20 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelQ; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; + +/** + * 监测点基准水平评估_季 + * xuyang + * 2023-11-21 + */ +public interface IRMpBenchmarkLevelQService extends IMppService { + + /** + * @Description: 监测点基准水平评估_季 + * @author: xuyang + */ + void benchmarkLevelQ(CalculatedParam calculatedParam); + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelYService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelYService.java new file mode 100644 index 000000000..a1ce95473 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpBenchmarkLevelYService.java @@ -0,0 +1,20 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm; + +import com.github.jeffreyning.mybatisplus.service.IMppService; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelY; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; + +/** + * 监测点基准水平评估_年 + * xuyang + * 2023-11-21 + */ +public interface IRMpBenchmarkLevelYService extends IMppService { + + /** + * @Description: 监测点基准水平评估_年 + * @author: xuyang + */ + void benchmarkLevelY(CalculatedParam calculatedParam); + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelDServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelDServiceImpl.java new file mode 100644 index 000000000..0583502dd --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelDServiceImpl.java @@ -0,0 +1,103 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelM; +import com.njcn.harmonic.pojo.po.day.RStatDataPltDPO; +import com.njcn.harmonic.pojo.po.day.RStatDataVDPO; +import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataPltDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataVDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpBenchmarkLevelDMapper; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelDService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 类的介绍:监测点基准水平评估_月 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/11/21 14:50 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class RMpBenchmarkLevelDServiceImpl extends MppServiceImpl implements IRMpBenchmarkLevelDService { + + private final RStatDataVDMapper rStatDataVDMapper; + + private final RStatDataPltDMapper rStatDataPltDMapper; + + @Override + @Transactional(rollbackFor = {Exception.class}) + public void benchmarkLevelD(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>监测点基准水平评估_日统计算法开始"); + List result = new ArrayList<>(); + List vList = new ArrayList<>(); + List pltList = new ArrayList<>(); + Map> map1 = new HashMap<>(); + Map> map2 = new HashMap<>(); + List lineIds = calculatedParam.getIdList(); + DateTime beginDay = DateUtil.beginOfDay(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + DateTime endDay = DateUtil.endOfDay(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + //查询电压表 + vList.addAll(rStatDataVDMapper.getBenchmarkLevel(beginDay,endDay,pendingId)); + //查询长闪表 + pltList.addAll(rStatDataPltDMapper.getBenchmarkLevel(beginDay,endDay,pendingId)); + } + if (CollectionUtil.isNotEmpty(vList)){ + map1 = vList.stream().collect(Collectors.groupingBy(RStatDataVDPO::getLineId)); + } + if (CollectionUtil.isNotEmpty(pltList)){ + map2 = pltList.stream().collect(Collectors.groupingBy(RStatDataPltDPO::getLineId)); + } + for (String item : lineIds) { + RMpBenchmarkLevelD rMpBenchmarkLevel = new RMpBenchmarkLevelD(); + rMpBenchmarkLevel.setMeasurementPointId(item); + rMpBenchmarkLevel.setDataDate(beginDay); + //初始化数据 + rMpBenchmarkLevel.setVoltageAvg(0.0); + rMpBenchmarkLevel.setUnbalanceAvg(0.0); + rMpBenchmarkLevel.setVthdAvg(0.0); + rMpBenchmarkLevel.setFlickerAvg(0.0); + //稳态-有数据处理 + List l1 = map1.get(item); + if (CollectionUtil.isNotEmpty(l1)){ + double vAvg = l1.stream().mapToDouble(RStatDataVDPO::getRms).average().getAsDouble(); + double vUnbalanceAvg = l1.stream().mapToDouble(RStatDataVDPO::getVUnbalance).average().getAsDouble(); + double vThdAvg = l1.stream().mapToDouble(RStatDataVDPO::getVThd).average().getAsDouble(); + rMpBenchmarkLevel.setVoltageAvg(vAvg); + rMpBenchmarkLevel.setUnbalanceAvg(vUnbalanceAvg); + rMpBenchmarkLevel.setVthdAvg(vThdAvg); + } + List l2 = map2.get(item); + if (CollectionUtil.isNotEmpty(l2)){ + double pltAvg = l2.stream().mapToDouble(RStatDataPltDPO::getPlt).average().getAsDouble(); + rMpBenchmarkLevel.setFlickerAvg(pltAvg); + } + result.add(rMpBenchmarkLevel); + } + if (CollectionUtil.isNotEmpty(result)){ + this.saveOrUpdateBatchByMultiId(result,100); + } + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelMServiceImpl.java new file mode 100644 index 000000000..7757bf24d --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelMServiceImpl.java @@ -0,0 +1,124 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelM; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpBenchmarkLevelMMapper; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelDService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelMService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 类的介绍:监测点基准水平评估_月 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/11/21 14:50 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class RMpBenchmarkLevelMServiceImpl extends MppServiceImpl implements IRMpBenchmarkLevelMService { + + private final IRMpBenchmarkLevelDService irMpBenchmarkLevelDService; + + @Override + @Transactional(rollbackFor = {Exception.class}) + public void benchmarkLevelM(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>监测点基准水平评估_月统计算法开始"); + List result = new ArrayList<>(); + List dList = new ArrayList<>(); + Map> map = new HashMap<>(); + List lineIds = calculatedParam.getIdList(); + DateTime beginMonth = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + DateTime endMonth = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.in(RMpBenchmarkLevelD::getMeasurementPointId,pendingId) + .between(RMpBenchmarkLevelD::getDataDate,beginMonth,endMonth); + dList.addAll(irMpBenchmarkLevelDService.list(lambdaQueryWrapper)); + } + if (CollectionUtil.isNotEmpty(dList)){ + map = dList.stream().collect(Collectors.groupingBy(RMpBenchmarkLevelD::getMeasurementPointId)); + } + for (String item : lineIds) { + RMpBenchmarkLevelM rMpBenchmarkLevel = new RMpBenchmarkLevelM(); + rMpBenchmarkLevel.setMeasurementPointId(item); + rMpBenchmarkLevel.setDataDate(beginMonth); + //初始化数据 + rMpBenchmarkLevel.setVoltageAvg(0.0); + rMpBenchmarkLevel.setVoltageSd(0.0); + rMpBenchmarkLevel.setUnbalanceAvg(0.0); + rMpBenchmarkLevel.setUnbalanceSd(0.0); + rMpBenchmarkLevel.setVthdAvg(0.0); + rMpBenchmarkLevel.setVthdSd(0.0); + rMpBenchmarkLevel.setFlickerAvg(0.0); + rMpBenchmarkLevel.setFlickerSd(0.0); + rMpBenchmarkLevel.setEventAvg(0.0); + rMpBenchmarkLevel.setEventSd(0.0); + rMpBenchmarkLevel.setRiseAvg(0.0); + rMpBenchmarkLevel.setRiseSd(0.0); + rMpBenchmarkLevel.setInterruptAvg(0.0); + rMpBenchmarkLevel.setInterruptSd(0.0); + //稳态-有数据处理 + List day = map.get(item); + if (CollectionUtil.isNotEmpty(day)){ + //均值 + double d1 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVoltageAvg).average().orElse(0.0); + double d2 = day.stream().mapToDouble(RMpBenchmarkLevelD::getUnbalanceAvg).average().orElse(0.0); + double d3 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVthdAvg).average().orElse(0.0); + double d4 = day.stream().mapToDouble(RMpBenchmarkLevelD::getFlickerAvg).average().orElse(0.0); + rMpBenchmarkLevel.setVoltageAvg(d1); + rMpBenchmarkLevel.setUnbalanceAvg(d2); + rMpBenchmarkLevel.setVthdAvg(d3); + rMpBenchmarkLevel.setFlickerAvg(d4); + //标准差 + List l1 = day.stream().map(RMpBenchmarkLevelD::getVoltageAvg).collect(Collectors.toList()); + List l2 = day.stream().map(RMpBenchmarkLevelD::getUnbalanceAvg).collect(Collectors.toList()); + List l3 = day.stream().map(RMpBenchmarkLevelD::getVthdAvg).collect(Collectors.toList()); + List l4 = day.stream().map(RMpBenchmarkLevelD::getFlickerAvg).collect(Collectors.toList()); + rMpBenchmarkLevel.setVoltageSd(calculateStandardDeviation(l1,d1)); + rMpBenchmarkLevel.setUnbalanceSd(calculateStandardDeviation(l2,d2)); + rMpBenchmarkLevel.setVthdSd(calculateStandardDeviation(l3,d3)); + rMpBenchmarkLevel.setFlickerSd(calculateStandardDeviation(l4,d4)); + } + //暂态-暂无算法计算,默认为0 + result.add(rMpBenchmarkLevel); + } + if (CollectionUtil.isNotEmpty(result)){ + this.saveOrUpdateBatchByMultiId(result,100); + } + } + + private static double calculateStandardDeviation(List data, double mean) { + return Math.sqrt(calculateVariance(data, mean)); + } + + private static double calculateVariance(List data, double mean) { + return data.stream() + .mapToDouble(Double::doubleValue) + .map(value -> Math.pow(value - mean, 2)) + .average() + .orElse(0.0); + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelQServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelQServiceImpl.java new file mode 100644 index 000000000..82a4ec7ce --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelQServiceImpl.java @@ -0,0 +1,122 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelQ; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpBenchmarkLevelQMapper; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelDService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelQService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 类的介绍:监测点基准水平评估_月 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/11/21 14:50 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class RMpBenchmarkLevelQServiceImpl extends MppServiceImpl implements IRMpBenchmarkLevelQService { + + private final IRMpBenchmarkLevelDService irMpBenchmarkLevelDService; + + @Override + public void benchmarkLevelQ(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>监测点基准水平评估_季统计算法开始"); + List result = new ArrayList<>(); + List dList = new ArrayList<>(); + Map> map = new HashMap<>(); + List lineIds = calculatedParam.getIdList(); + DateTime beginMonth = DateUtil.beginOfQuarter(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + DateTime endMonth = DateUtil.endOfQuarter(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.in(RMpBenchmarkLevelD::getMeasurementPointId,pendingId) + .between(RMpBenchmarkLevelD::getDataDate,beginMonth,endMonth); + dList.addAll(irMpBenchmarkLevelDService.list(lambdaQueryWrapper)); + } + if (CollectionUtil.isNotEmpty(dList)){ + map = dList.stream().collect(Collectors.groupingBy(RMpBenchmarkLevelD::getMeasurementPointId)); + } + for (String item : lineIds) { + RMpBenchmarkLevelQ rMpBenchmarkLevel = new RMpBenchmarkLevelQ(); + rMpBenchmarkLevel.setMeasurementPointId(item); + rMpBenchmarkLevel.setDataDate(beginMonth); + //初始化数据 + rMpBenchmarkLevel.setVoltageAvg(0.0); + rMpBenchmarkLevel.setVoltageSd(0.0); + rMpBenchmarkLevel.setUnbalanceAvg(0.0); + rMpBenchmarkLevel.setUnbalanceSd(0.0); + rMpBenchmarkLevel.setVthdAvg(0.0); + rMpBenchmarkLevel.setVthdSd(0.0); + rMpBenchmarkLevel.setFlickerAvg(0.0); + rMpBenchmarkLevel.setFlickerSd(0.0); + rMpBenchmarkLevel.setEventAvg(0.0); + rMpBenchmarkLevel.setEventSd(0.0); + rMpBenchmarkLevel.setRiseAvg(0.0); + rMpBenchmarkLevel.setRiseSd(0.0); + rMpBenchmarkLevel.setInterruptAvg(0.0); + rMpBenchmarkLevel.setInterruptSd(0.0); + //稳态-有数据处理 + List day = map.get(item); + if (CollectionUtil.isNotEmpty(day)){ + //均值 + double d1 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVoltageAvg).average().orElse(0.0); + double d2 = day.stream().mapToDouble(RMpBenchmarkLevelD::getUnbalanceAvg).average().orElse(0.0); + double d3 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVthdAvg).average().orElse(0.0); + double d4 = day.stream().mapToDouble(RMpBenchmarkLevelD::getFlickerAvg).average().orElse(0.0); + rMpBenchmarkLevel.setVoltageAvg(d1); + rMpBenchmarkLevel.setUnbalanceAvg(d2); + rMpBenchmarkLevel.setVthdAvg(d3); + rMpBenchmarkLevel.setFlickerAvg(d4); + //标准差 + List l1 = day.stream().map(RMpBenchmarkLevelD::getVoltageAvg).collect(Collectors.toList()); + List l2 = day.stream().map(RMpBenchmarkLevelD::getUnbalanceAvg).collect(Collectors.toList()); + List l3 = day.stream().map(RMpBenchmarkLevelD::getVthdAvg).collect(Collectors.toList()); + List l4 = day.stream().map(RMpBenchmarkLevelD::getFlickerAvg).collect(Collectors.toList()); + rMpBenchmarkLevel.setVoltageSd(calculateStandardDeviation(l1,d1)); + rMpBenchmarkLevel.setUnbalanceSd(calculateStandardDeviation(l2,d2)); + rMpBenchmarkLevel.setVthdSd(calculateStandardDeviation(l3,d3)); + rMpBenchmarkLevel.setFlickerSd(calculateStandardDeviation(l4,d4)); + } + //暂态-暂无算法计算,默认为0 + result.add(rMpBenchmarkLevel); + } + if (CollectionUtil.isNotEmpty(result)){ + this.saveOrUpdateBatchByMultiId(result,100); + } + } + + private static double calculateStandardDeviation(List data, double mean) { + return Math.sqrt(calculateVariance(data, mean)); + } + + private static double calculateVariance(List data, double mean) { + return data.stream() + .mapToDouble(Double::doubleValue) + .map(value -> Math.pow(value - mean, 2)) + .average() + .orElse(0.0); + } + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelYServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelYServiceImpl.java new file mode 100644 index 000000000..ccaefd8ee --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpBenchmarkLevelYServiceImpl.java @@ -0,0 +1,122 @@ +package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelD; +import com.njcn.harmonic.pojo.po.RMpBenchmarkLevelY; +import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpBenchmarkLevelYMapper; +import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelDService; +import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpBenchmarkLevelYService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 类的介绍:监测点基准水平评估_月 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/11/21 14:50 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class RMpBenchmarkLevelYServiceImpl extends MppServiceImpl implements IRMpBenchmarkLevelYService { + + private final IRMpBenchmarkLevelDService irMpBenchmarkLevelDService; + + @Override + public void benchmarkLevelY(CalculatedParam calculatedParam) { + log.info(LocalDateTime.now()+"===>监测点基准水平评估_年统计算法开始"); + List result = new ArrayList<>(); + List dList = new ArrayList<>(); + Map> map = new HashMap<>(); + List lineIds = calculatedParam.getIdList(); + DateTime beginMonth = DateUtil.beginOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + DateTime endMonth = DateUtil.endOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); + //以尺寸100分片,查询数据 + List> pendingIds = ListUtils.partition(lineIds,100); + for (List pendingId : pendingIds) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.in(RMpBenchmarkLevelD::getMeasurementPointId,pendingId) + .between(RMpBenchmarkLevelD::getDataDate,beginMonth,endMonth); + dList.addAll(irMpBenchmarkLevelDService.list(lambdaQueryWrapper)); + } + if (CollectionUtil.isNotEmpty(dList)){ + map = dList.stream().collect(Collectors.groupingBy(RMpBenchmarkLevelD::getMeasurementPointId)); + } + for (String item : lineIds) { + RMpBenchmarkLevelY rMpBenchmarkLevel = new RMpBenchmarkLevelY(); + rMpBenchmarkLevel.setMeasurementPointId(item); + rMpBenchmarkLevel.setDataDate(beginMonth); + //初始化数据 + rMpBenchmarkLevel.setVoltageAvg(0.0); + rMpBenchmarkLevel.setVoltageSd(0.0); + rMpBenchmarkLevel.setUnbalanceAvg(0.0); + rMpBenchmarkLevel.setUnbalanceSd(0.0); + rMpBenchmarkLevel.setVthdAvg(0.0); + rMpBenchmarkLevel.setVthdSd(0.0); + rMpBenchmarkLevel.setFlickerAvg(0.0); + rMpBenchmarkLevel.setFlickerSd(0.0); + rMpBenchmarkLevel.setEventAvg(0.0); + rMpBenchmarkLevel.setEventSd(0.0); + rMpBenchmarkLevel.setRiseAvg(0.0); + rMpBenchmarkLevel.setRiseSd(0.0); + rMpBenchmarkLevel.setInterruptAvg(0.0); + rMpBenchmarkLevel.setInterruptSd(0.0); + //稳态-有数据处理 + List day = map.get(item); + if (CollectionUtil.isNotEmpty(day)){ + //均值 + double d1 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVoltageAvg).average().orElse(0.0); + double d2 = day.stream().mapToDouble(RMpBenchmarkLevelD::getUnbalanceAvg).average().orElse(0.0); + double d3 = day.stream().mapToDouble(RMpBenchmarkLevelD::getVthdAvg).average().orElse(0.0); + double d4 = day.stream().mapToDouble(RMpBenchmarkLevelD::getFlickerAvg).average().orElse(0.0); + rMpBenchmarkLevel.setVoltageAvg(d1); + rMpBenchmarkLevel.setUnbalanceAvg(d2); + rMpBenchmarkLevel.setVthdAvg(d3); + rMpBenchmarkLevel.setFlickerAvg(d4); + //标准差 + List l1 = day.stream().map(RMpBenchmarkLevelD::getVoltageAvg).collect(Collectors.toList()); + List l2 = day.stream().map(RMpBenchmarkLevelD::getUnbalanceAvg).collect(Collectors.toList()); + List l3 = day.stream().map(RMpBenchmarkLevelD::getVthdAvg).collect(Collectors.toList()); + List l4 = day.stream().map(RMpBenchmarkLevelD::getFlickerAvg).collect(Collectors.toList()); + rMpBenchmarkLevel.setVoltageSd(calculateStandardDeviation(l1,d1)); + rMpBenchmarkLevel.setUnbalanceSd(calculateStandardDeviation(l2,d2)); + rMpBenchmarkLevel.setVthdSd(calculateStandardDeviation(l3,d3)); + rMpBenchmarkLevel.setFlickerSd(calculateStandardDeviation(l4,d4)); + } + //暂态-暂无算法计算,默认为0 + result.add(rMpBenchmarkLevel); + } + if (CollectionUtil.isNotEmpty(result)){ + this.saveOrUpdateBatchByMultiId(result,100); + } + } + + private static double calculateStandardDeviation(List data, double mean) { + return Math.sqrt(calculateVariance(data, mean)); + } + + private static double calculateVariance(List data, double mean) { + return data.stream() + .mapToDouble(Double::doubleValue) + .map(value -> Math.pow(value - mean, 2)) + .average() + .orElse(0.0); + } + +}