rMpInfluenceMHandler(@RequestBody LineParam jobParam) {
+ log.info(LocalDateTime.now() + "rMpInfluenceMHandler开始执行");
+ String methodDescribe = getMethodDescribe("rMpInfluenceMHandler");
+ irMpEmissionMService.rMpInfluenceMHandler(jobParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
+
+ }
+}
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIExcessRateMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIExcessRateMMapper.java
new file mode 100644
index 000000000..7e8a17bf0
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIExcessRateMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
+
+/**
+ *
+ * 风电场发射特性-月表/各次谐波电流超标占比 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface RMpEmissionIExcessRateMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIMMapper.java
new file mode 100644
index 000000000..da7d884c4
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionIMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpEmissionIM;
+
+/**
+ *
+ * 风电场发射特性-月表/各次谐波电流含有率 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface RMpEmissionIMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionMMapper.java
new file mode 100644
index 000000000..bc8c53940
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpEmissionMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpEmissionM;
+
+/**
+ *
+ * 发射特性-月表 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface RMpEmissionMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceMMapper.java
new file mode 100644
index 000000000..0a4872b6e
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpInfluenceM;
+
+/**
+ *
+ * 风电场影响特性-月表 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface RMpInfluenceMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVExcessRateMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVExcessRateMMapper.java
new file mode 100644
index 000000000..489c86835
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVExcessRateMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压超标占比 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface RMpInfluenceVExcessRateMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVMMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVMMapper.java
new file mode 100644
index 000000000..f9d6fe86c
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RMpInfluenceVMMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压含有率 Mapper 接口
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface RMpInfluenceVMMapper extends MppBaseMapper {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIExcessRateMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIExcessRateMMapper.xml
new file mode 100644
index 000000000..f12f6a679
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIExcessRateMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIMMapper.xml
new file mode 100644
index 000000000..d59db6113
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionIMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionMMapper.xml
new file mode 100644
index 000000000..059b135a9
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpEmissionMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceMMapper.xml
new file mode 100644
index 000000000..f1fdde542
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVExcessRateMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVExcessRateMMapper.xml
new file mode 100644
index 000000000..b3fa770ad
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVExcessRateMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVMMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVMMapper.xml
new file mode 100644
index 000000000..b80c1dce5
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/mapping/RMpInfluenceVMMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIExcessRateMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIExcessRateMService.java
new file mode 100644
index 000000000..d8e73ac10
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIExcessRateMService.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
+
+/**
+ *
+ * 发射特性-月表/各次谐波电流超标占比 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface IRMpEmissionIExcessRateMService extends IMppService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIMService.java
new file mode 100644
index 000000000..07f4c0842
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionIMService.java
@@ -0,0 +1,17 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpEmissionIM;
+
+/**
+ *
+ * 发射特性-月表/各次谐波电流含有率 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface IRMpEmissionIMService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionMService.java
new file mode 100644
index 000000000..29188ef73
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpEmissionMService.java
@@ -0,0 +1,25 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpEmissionM;
+import com.njcn.prepare.harmonic.pojo.param.LineParam;
+
+/**
+ *
+ * 发射特性-月表 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+public interface IRMpEmissionMService extends IMppService {
+
+ /**
+ * @Description: 发射特性算法(r_mp_emission_m)
+ * @param jobParam
+ * @Author: wr
+ * @Date: 2023/10/16 13:30
+ */
+ void rMpEmissionMHandler(LineParam jobParam);
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceMService.java
new file mode 100644
index 000000000..cd56c4033
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceMService.java
@@ -0,0 +1,24 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpInfluenceM;
+import com.njcn.prepare.harmonic.pojo.param.LineParam;
+
+/**
+ *
+ * 影响特性-月表 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface IRMpInfluenceMService extends IMppService {
+
+ /**
+ * @Description: 影响特性算法(r_mp_emission_m)
+ * @param jobParam
+ * @Author: wr
+ * @Date: 2023/10/16 13:30
+ */
+ void rMpInfluenceMHandler(LineParam jobParam);
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVExcessRateMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVExcessRateMService.java
new file mode 100644
index 000000000..f262d7125
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVExcessRateMService.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压超标占比 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface IRMpInfluenceVExcessRateMService extends IMppService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVMService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVMService.java
new file mode 100644
index 000000000..c0a22ce9a
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/IRMpInfluenceVMService.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压含有率 服务类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+public interface IRMpInfluenceVMService extends IMppService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIExcessRateMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIExcessRateMServiceImpl.java
new file mode 100644
index 000000000..9550bff87
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIExcessRateMServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIExcessRateMMapper;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIExcessRateMService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 发射特性-月表/各次谐波电流超标占比 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+@Service
+public class RMpEmissionIExcessRateMServiceImpl extends MppServiceImpl implements IRMpEmissionIExcessRateMService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIMServiceImpl.java
new file mode 100644
index 000000000..9249068dc
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionIMServiceImpl.java
@@ -0,0 +1,23 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.harmonic.pojo.po.RMpEmissionIM;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIMMapper;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIMService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+
+/**
+ *
+ * 发射特性-月表/各次谐波电流含有率 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+@Service
+@RequiredArgsConstructor
+public class RMpEmissionIMServiceImpl extends MppServiceImpl implements IRMpEmissionIMService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionMServiceImpl.java
new file mode 100644
index 000000000..05f300c20
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpEmissionMServiceImpl.java
@@ -0,0 +1,363 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
+import com.njcn.device.biz.pojo.param.DeptGetLineParam;
+import com.njcn.device.pq.pojo.po.DeptLine;
+import com.njcn.harmonic.pojo.po.RMpEmissionIExcessRateM;
+import com.njcn.harmonic.pojo.po.RMpEmissionIM;
+import com.njcn.harmonic.pojo.po.RMpEmissionM;
+import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
+import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
+import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
+import com.njcn.harmonic.utils.PubUtils;
+import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionIMMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpEmissionMMapper;
+import com.njcn.prepare.harmonic.pojo.param.LineParam;
+import com.njcn.prepare.harmonic.service.mysql.day.IRStatDataIDService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIExcessRateMService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionIMService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpEmissionMService;
+import com.njcn.user.api.DeptFeignClient;
+import com.njcn.user.pojo.po.Dept;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import lombok.RequiredArgsConstructor;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+
+
+/**
+ *
+ * 发射特性-月表 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-16
+ */
+@Service
+@RequiredArgsConstructor
+public class RMpEmissionMServiceImpl extends MppServiceImpl implements IRMpEmissionMService {
+
+ private final CommTerminalGeneralClient commTerminalGeneralClient;
+ private final DeptFeignClient deptFeignClient;
+ private final IRStatDataIDService dataIVService;
+ private final RStatLimitRateDMapper rStatLimitRateDMapper;
+ private final IRMpEmissionIMService irMpEmissionIMService;
+ private final IRMpEmissionIExcessRateMService irMpEmissionIExcessRateMService;
+
+ @Override
+ @Async("asyncExecutor")
+ @Transactional(rollbackFor = {Exception.class})
+ public void rMpEmissionMHandler(LineParam jobParam) {
+ List rMpEmissionMS = new ArrayList<>();
+ List rMpEmissionIMS = new ArrayList<>();
+ List rMpEmissionIExcessRateMS = new ArrayList<>();
+
+ Dept data = deptFeignClient.getRootDept().getData();
+ DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
+ deptGetLineParam.setDeptId(data.getId());
+ List data1 = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
+ //监测点id
+ List line;
+ for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : data1) {
+ line = new ArrayList<>();
+ Map>lineBaseMap = new HashMap<>();
+
+ List lineBaseList = new ArrayList<>();
+ if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ lineBaseList.addAll(deptGetChildrenMoreDTO.getLineBaseList());
+ }
+ if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ lineBaseList.addAll(deptGetChildrenMoreDTO.getPwMonitorIds());
+ }
+
+ if (CollUtil.isNotEmpty(lineBaseList)) {
+ line.addAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId())).map(LineDevGetDTO::getPointId).collect(Collectors.toList()));
+ lineBaseMap.putAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId()))
+ .collect(Collectors.groupingBy(LineDevGetDTO::getLineTag, Collectors.mapping(LineDevGetDTO::getPointId, Collectors.toList()))));
+
+ }
+
+
+ if (CollUtil.isNotEmpty(line)) {
+ //获取data_I数据
+ List dataIDPOList = dataIVService.list(new LambdaQueryWrapper().in(RStatDataIDPO::getLineId, line).eq(RStatDataIDPO::getPhaseType, "T").eq(RStatDataIDPO::getValueType, "CP95").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatDataIDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatDataIDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
+
+ //获取rStatLimitRate
+ List rStatLimitRateMS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper().in(RStatLimitRateDPO::getLineId, line).eq(RStatLimitRateDPO::getPhasicType, "T").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatLimitRateDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatLimitRateDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
+
+ //根据监测点进行分组
+ for (String key : lineBaseMap.keySet()) {
+ //rMpEmissionMS
+ rMpEmissionAdd(jobParam, rMpEmissionMS, deptGetChildrenMoreDTO, lineBaseMap, dataIDPOList, rStatLimitRateMS, key);
+ //rMpEmissionIMS
+ rMpEmissionIAdd(jobParam, rMpEmissionIMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
+ //rMpEmissionIExcessRateMS
+ rMpEmissionIExcessRateAdd(jobParam, rMpEmissionIExcessRateMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
+ }
+
+ }
+
+ }
+
+ if (CollUtil.isNotEmpty(rMpEmissionMS)) {
+ this.saveOrUpdateBatchByMultiId(rMpEmissionMS, 500);
+ }
+ if (CollUtil.isNotEmpty(rMpEmissionIMS)) {
+ irMpEmissionIMService.saveOrUpdateBatchByMultiId(rMpEmissionIMS, 500);
+ }
+ if (CollUtil.isNotEmpty(rMpEmissionIExcessRateMS)) {
+ irMpEmissionIExcessRateMService.saveOrUpdateBatchByMultiId(rMpEmissionIExcessRateMS, 500);
+ }
+ }
+
+ private void rMpEmissionIExcessRateAdd(LineParam jobParam, List rMpEmissionIExcessRateMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List rStatLimitRateMS, String key) {
+ RMpEmissionIExcessRateM rMpEmissionIExcessRateM = new RMpEmissionIExcessRateM();
+ rMpEmissionIExcessRateM.setMonitorTag(key);
+ rMpEmissionIExcessRateM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpEmissionIExcessRateM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ rMpEmissionIExcessRateM.setIExcessRate2(iExcessRateI(rStatLimitRateDPOS,"iharm2Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate3(iExcessRateI(rStatLimitRateDPOS,"iharm3Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate4(iExcessRateI(rStatLimitRateDPOS,"iharm4Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate5(iExcessRateI(rStatLimitRateDPOS,"iharm5Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate6(iExcessRateI(rStatLimitRateDPOS,"iharm6Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate7(iExcessRateI(rStatLimitRateDPOS,"iharm7Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate8(iExcessRateI(rStatLimitRateDPOS,"iharm8Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate9(iExcessRateI(rStatLimitRateDPOS,"iharm9Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate10(iExcessRateI(rStatLimitRateDPOS,"iharm10Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate11(iExcessRateI(rStatLimitRateDPOS,"iharm11Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate12(iExcessRateI(rStatLimitRateDPOS,"iharm12Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate13(iExcessRateI(rStatLimitRateDPOS,"iharm13Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate14(iExcessRateI(rStatLimitRateDPOS,"iharm14Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate15(iExcessRateI(rStatLimitRateDPOS,"iharm15Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate16(iExcessRateI(rStatLimitRateDPOS,"iharm16Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate17(iExcessRateI(rStatLimitRateDPOS,"iharm17Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate18(iExcessRateI(rStatLimitRateDPOS,"iharm18Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate19(iExcessRateI(rStatLimitRateDPOS,"iharm19Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate20(iExcessRateI(rStatLimitRateDPOS,"iharm20Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate21(iExcessRateI(rStatLimitRateDPOS,"iharm21Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate22(iExcessRateI(rStatLimitRateDPOS,"iharm22Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate23(iExcessRateI(rStatLimitRateDPOS,"iharm23Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate24(iExcessRateI(rStatLimitRateDPOS,"iharm24Overtime","allTime"));
+ rMpEmissionIExcessRateM.setIExcessRate25(iExcessRateI(rStatLimitRateDPOS,"iharm25Overtime","allTime"));
+ } else {
+ rMpEmissionIExcessRateM.setIExcessRate2(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate3(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate4(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate5(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate6(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate7(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate8(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate9(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate10(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate11(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate12(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate13(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate14(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate15(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate16(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate17(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate18(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate19(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate20(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate21(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate22(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate23(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate24(0.0);
+ rMpEmissionIExcessRateM.setIExcessRate25(0.0);
+
+ }
+ rMpEmissionIExcessRateMS.add(rMpEmissionIExcessRateM);
+ }
+
+ private void rMpEmissionIAdd(LineParam jobParam, List rMpEmissionIMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List rStatLimitRateMS, String key) {
+ RMpEmissionIM rMpEmissionIM = new RMpEmissionIM();
+ rMpEmissionIM.setMonitorTag(key);
+ rMpEmissionIM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpEmissionIM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ rMpEmissionIM.setIRate2(iRateI(rStatLimitRateDPOS, "iharm2Overtime"));
+ rMpEmissionIM.setIRate3(iRateI(rStatLimitRateDPOS, "iharm3Overtime"));
+ rMpEmissionIM.setIRate4(iRateI(rStatLimitRateDPOS, "iharm4Overtime"));
+ rMpEmissionIM.setIRate5(iRateI(rStatLimitRateDPOS, "iharm5Overtime"));
+ rMpEmissionIM.setIRate6(iRateI(rStatLimitRateDPOS, "iharm6Overtime"));
+ rMpEmissionIM.setIRate7(iRateI(rStatLimitRateDPOS, "iharm7Overtime"));
+ rMpEmissionIM.setIRate8(iRateI(rStatLimitRateDPOS, "iharm8Overtime"));
+ rMpEmissionIM.setIRate9(iRateI(rStatLimitRateDPOS, "iharm9Overtime"));
+ rMpEmissionIM.setIRate10(iRateI(rStatLimitRateDPOS, "iharm10Overtime"));
+ rMpEmissionIM.setIRate11(iRateI(rStatLimitRateDPOS, "iharm11Overtime"));
+ rMpEmissionIM.setIRate12(iRateI(rStatLimitRateDPOS, "iharm12Overtime"));
+ rMpEmissionIM.setIRate13(iRateI(rStatLimitRateDPOS, "iharm13Overtime"));
+ rMpEmissionIM.setIRate14(iRateI(rStatLimitRateDPOS, "iharm14Overtime"));
+ rMpEmissionIM.setIRate15(iRateI(rStatLimitRateDPOS, "iharm15Overtime"));
+ rMpEmissionIM.setIRate16(iRateI(rStatLimitRateDPOS, "iharm16Overtime"));
+ rMpEmissionIM.setIRate17(iRateI(rStatLimitRateDPOS, "iharm17Overtime"));
+ rMpEmissionIM.setIRate18(iRateI(rStatLimitRateDPOS, "iharm18Overtime"));
+ rMpEmissionIM.setIRate19(iRateI(rStatLimitRateDPOS, "iharm19Overtime"));
+ rMpEmissionIM.setIRate20(iRateI(rStatLimitRateDPOS, "iharm20Overtime"));
+ rMpEmissionIM.setIRate21(iRateI(rStatLimitRateDPOS, "iharm21Overtime"));
+ rMpEmissionIM.setIRate22(iRateI(rStatLimitRateDPOS, "iharm22Overtime"));
+ rMpEmissionIM.setIRate23(iRateI(rStatLimitRateDPOS, "iharm23Overtime"));
+ rMpEmissionIM.setIRate24(iRateI(rStatLimitRateDPOS, "iharm24Overtime"));
+ rMpEmissionIM.setIRate25(iRateI(rStatLimitRateDPOS, "iharm25Overtime"));
+ } else {
+ rMpEmissionIM.setIRate2(0.0);
+ rMpEmissionIM.setIRate3(0.0);
+ rMpEmissionIM.setIRate4(0.0);
+ rMpEmissionIM.setIRate5(0.0);
+ rMpEmissionIM.setIRate6(0.0);
+ rMpEmissionIM.setIRate7(0.0);
+ rMpEmissionIM.setIRate8(0.0);
+ rMpEmissionIM.setIRate9(0.0);
+ rMpEmissionIM.setIRate10(0.0);
+ rMpEmissionIM.setIRate11(0.0);
+ rMpEmissionIM.setIRate12(0.0);
+ rMpEmissionIM.setIRate13(0.0);
+ rMpEmissionIM.setIRate14(0.0);
+ rMpEmissionIM.setIRate15(0.0);
+ rMpEmissionIM.setIRate16(0.0);
+ rMpEmissionIM.setIRate17(0.0);
+ rMpEmissionIM.setIRate18(0.0);
+ rMpEmissionIM.setIRate19(0.0);
+ rMpEmissionIM.setIRate20(0.0);
+ rMpEmissionIM.setIRate21(0.0);
+ rMpEmissionIM.setIRate22(0.0);
+ rMpEmissionIM.setIRate23(0.0);
+ rMpEmissionIM.setIRate24(0.0);
+ rMpEmissionIM.setIRate25(0.0);
+ }
+ rMpEmissionIMS.add(rMpEmissionIM);
+ }
+
+ /**
+ * @param jobParam 查询参数
+ * @param rMpEmissionMS 对象
+ * @param deptGetChildrenMoreDTO 部门监测点对象
+ * @param lineBaseMap 监测点id-监测点标签
+ * @param dataIDPOList
+ * @param rStatLimitRateMS
+ * @param key
+ * @Description: 发电特性对象赋值
+ * @Author: wr
+ * @Date: 2023/10/17 11:18
+ */
+ private void rMpEmissionAdd(LineParam jobParam, List rMpEmissionMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List dataIDPOList, List rStatLimitRateMS, String key) {
+ RMpEmissionM rMpEmissionM = new RMpEmissionM();
+ rMpEmissionM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpEmissionM.setMonitorTag(key);
+ rMpEmissionM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+
+ List rStatDataIDPOS = dataIDPOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ //获取负序电流不平衡度
+ if (CollUtil.isNotEmpty(rStatDataIDPOS)) {
+ double asDouble = rStatDataIDPOS.stream().filter(x -> x.getINeg() != null).mapToDouble(RStatDataIDPO::getINeg).max().getAsDouble();
+ rMpEmissionM.setNegativeSequenceCurrentUnbalance(asDouble);
+ } else {
+ rMpEmissionM.setNegativeSequenceCurrentUnbalance(0.0);
+ }
+
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ //获取负序电流不平衡度平均超标天数、占比,各次谐波电流平均超标天数
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ long iNegOverDay = rStatLimitRateDPOS.stream().filter(x -> x.getINegOvertime() > 0).count();
+ rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessDayAvg(iNegOverDay != 0 ? NumberUtil.round(iNegOverDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
+ //获取所有超标次数
+ double sum = rStatLimitRateDPOS.stream().filter(x -> x.getINegOvertime() > 0).mapToDouble(RStatLimitRateDPO::getINegOvertime).sum();
+ double allSum = rStatLimitRateDPOS.stream().filter(x -> x.getAllTime() > 0).mapToDouble(RStatLimitRateDPO::getINegOvertime).sum();
+ rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessRate(sum != 0 ? NumberUtil.round(allSum / allSum * 1.0, 2).doubleValue() : 0.0);
+ long uHarmDay = rStatLimitRateDPOS.stream().filter(x -> filterNotQualifiedIharmData(x)).count();
+ rMpEmissionM.setIExcessDayAvg(uHarmDay != 0 ? NumberUtil.round(uHarmDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
+ } else {
+ rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessDayAvg(0.0);
+ rMpEmissionM.setNegativeSequenceCurrentUnbalanceExcessRate(0.0);
+ rMpEmissionM.setIExcessDayAvg(0.0);
+ }
+ rMpEmissionMS.add(rMpEmissionM);
+ }
+
+
+ private boolean filterNotQualifiedIharmData(RStatLimitRateDPO t) {
+ int i = t.getIharm2Overtime() + t.getIharm3Overtime() + t.getIharm4Overtime() + t.getIharm5Overtime() + t.getIharm6Overtime() + t.getIharm7Overtime() + t.getIharm8Overtime() + t.getIharm9Overtime() + t.getIharm10Overtime() + t.getIharm11Overtime() + t.getIharm12Overtime() + t.getIharm13Overtime() + t.getIharm14Overtime() + t.getIharm15Overtime() + t.getIharm16Overtime() + t.getIharm17Overtime() + t.getIharm18Overtime() + t.getIharm19Overtime() + t.getIharm20Overtime() + t.getIharm21Overtime() + t.getIharm22Overtime() + t.getIharm23Overtime() + t.getIharm24Overtime() + t.getIharm25Overtime();
+ if (i > 0) {
+ return true;
+ }
+ return false;
+ }
+
+ //获取平均超标天数
+ private Double iRateI(List value, String attribute) {
+ int size = value.size();
+ Field field;
+ try {
+ field = RStatLimitRateDPO.class.getDeclaredField(attribute);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ }
+ field.setAccessible(true);
+ List nums = value.stream().map(temp -> {
+ Integer o;
+ try {
+ o = (Integer) field.get(temp);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ return o.intValue();
+ }).collect(Collectors.toList());
+ long num = nums.stream().filter(x -> x > 0).count();
+ return num != 0 ? NumberUtil.round(num / size * 1.0, 2).doubleValue() : 0.0;
+ }
+
+ private Double iExcessRateI(List value, String attribute,String allTime) {
+ Field excessRateField;
+ Field allTimeField;
+ try {
+ excessRateField = RStatLimitRateDPO.class.getDeclaredField(attribute);
+ allTimeField = RStatLimitRateDPO.class.getDeclaredField(allTime);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ }
+ excessRateField.setAccessible(true);
+ allTimeField.setAccessible(true);
+
+ List nums = value.stream().map(x->{
+ Double o;
+ try {
+ Integer rate = (Integer) excessRateField.get(x);
+ Integer num = (Integer) allTimeField.get(x);
+ o= rate != 0 ? NumberUtil.round(rate / num * 1.0, 2).doubleValue() : 0.0;
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ return o.doubleValue();
+
+ }).collect(Collectors.toList());
+ return PubUtils.dataLimits(nums.stream().collect(Collectors.averagingDouble(Double::doubleValue))*100);
+ }
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceMServiceImpl.java
new file mode 100644
index 000000000..9dedac1a5
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceMServiceImpl.java
@@ -0,0 +1,361 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
+import com.njcn.device.biz.pojo.param.DeptGetLineParam;
+import com.njcn.harmonic.pojo.po.*;
+import com.njcn.harmonic.pojo.po.day.RStatDataVDPO;
+import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
+import com.njcn.harmonic.utils.PubUtils;
+import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceMMapper;
+import com.njcn.prepare.harmonic.pojo.param.LineParam;
+import com.njcn.prepare.harmonic.service.mysql.day.IRStatDataVDService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
+import com.njcn.user.api.DeptFeignClient;
+import com.njcn.user.pojo.po.Dept;
+import lombok.RequiredArgsConstructor;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 影响特性-月表 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+@Service
+@RequiredArgsConstructor
+public class RMpInfluenceMServiceImpl extends MppServiceImpl implements IRMpInfluenceMService {
+
+ private final CommTerminalGeneralClient commTerminalGeneralClient;
+ private final DeptFeignClient deptFeignClient;
+ private final IRStatDataVDService dataVDService;
+ private final RStatLimitRateDMapper rStatLimitRateDMapper;
+ private final IRMpInfluenceVMService irMpInfluenceVMService;
+ private final IRMpInfluenceVExcessRateMService irMpInfluenceVExcessRateMService;
+
+
+ @Override
+ @Async("asyncExecutor")
+ @Transactional(rollbackFor = {Exception.class})
+ public void rMpInfluenceMHandler(LineParam jobParam) {
+ List rMpInfluenceMS = new ArrayList<>();
+ List rMpInfluenceVMS = new ArrayList<>();
+ List rMpInfluenceVExcessRateMS = new ArrayList<>();
+
+ Dept data = deptFeignClient.getRootDept().getData();
+ DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
+ deptGetLineParam.setDeptId(data.getId());
+ List data1 = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
+ //监测点id
+ List line;
+ for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : data1) {
+ line = new ArrayList<>();
+ Map> lineBaseMap = new HashMap<>();
+
+ List lineBaseList = new ArrayList<>();
+ if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ lineBaseList.addAll(deptGetChildrenMoreDTO.getLineBaseList());
+ }
+ if(CollUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ lineBaseList.addAll(deptGetChildrenMoreDTO.getPwMonitorIds());
+ }
+
+ if (CollUtil.isNotEmpty(lineBaseList)) {
+ line.addAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId())).map(LineDevGetDTO::getPointId).collect(Collectors.toList()));
+ lineBaseMap.putAll(lineBaseList.stream().filter(x -> StrUtil.isNotBlank(x.getPointId()))
+ .collect(Collectors.groupingBy(LineDevGetDTO::getLineTag, Collectors.mapping(LineDevGetDTO::getPointId, Collectors.toList()))));
+
+ }
+
+
+ if (CollUtil.isNotEmpty(line)) {
+ //获取data_v数据
+ List dataVDPOList = dataVDService.list(new LambdaQueryWrapper()
+ .in(RStatDataVDPO::getLineId, line)
+ .eq(RStatDataVDPO::getPhasicType, "T")
+ .eq(RStatDataVDPO::getValueType, "CP95")
+ .ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatDataVDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime())))
+ .le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatDataVDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime())))
+ );
+
+ //获取rStatLimitRate
+ List rStatLimitRateMS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper().in(RStatLimitRateDPO::getLineId, line).eq(RStatLimitRateDPO::getPhasicType, "T").ge(StrUtil.isNotBlank(jobParam.getBeginTime()), RStatLimitRateDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(jobParam.getBeginTime()))).le(StrUtil.isNotBlank(jobParam.getEndTime()), RStatLimitRateDPO::getTime, DateUtil.endOfDay(DateUtil.parse(jobParam.getEndTime()))));
+
+ //根据监测点进行分组
+ for (String key : lineBaseMap.keySet()) {
+ //rMpEmissionMS
+ rMpInfluenceAdd(jobParam, rMpInfluenceMS, deptGetChildrenMoreDTO, lineBaseMap, dataVDPOList, rStatLimitRateMS, key);
+ //rMpEmissionIMS
+ rMpInfluenceVAdd(jobParam, rMpInfluenceVMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
+ //rMpInfluenceVExcessRateMS
+ rMpInfluenceRateAdd(jobParam, rMpInfluenceVExcessRateMS, deptGetChildrenMoreDTO, lineBaseMap, rStatLimitRateMS, key);
+ }
+
+ }
+
+ }
+
+ if (CollUtil.isNotEmpty(rMpInfluenceMS)) {
+ this.saveOrUpdateBatchByMultiId(rMpInfluenceMS, 500);
+ }
+ if (CollUtil.isNotEmpty(rMpInfluenceVMS)) {
+ irMpInfluenceVMService.saveOrUpdateBatchByMultiId(rMpInfluenceVMS, 500);
+ }
+ if (CollUtil.isNotEmpty(rMpInfluenceVExcessRateMS)) {
+ irMpInfluenceVExcessRateMService.saveOrUpdateBatchByMultiId(rMpInfluenceVExcessRateMS, 500);
+ }
+ }
+
+ private void rMpInfluenceRateAdd(LineParam jobParam, List rMpInfluenceVExcessRateMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List rStatLimitRateMS, String key) {
+ RMpInfluenceVExcessRateM rMpInfluenceVExcessRateM = new RMpInfluenceVExcessRateM();
+ rMpInfluenceVExcessRateM.setMonitorTag(key);
+ rMpInfluenceVExcessRateM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpInfluenceVExcessRateM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ rMpInfluenceVExcessRateM.setVExcessRate2(iExcessRateI(rStatLimitRateDPOS,"uharm2Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate3(iExcessRateI(rStatLimitRateDPOS,"uharm3Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate4(iExcessRateI(rStatLimitRateDPOS,"uharm4Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate5(iExcessRateI(rStatLimitRateDPOS,"uharm5Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate6(iExcessRateI(rStatLimitRateDPOS,"uharm6Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate7(iExcessRateI(rStatLimitRateDPOS,"uharm7Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate8(iExcessRateI(rStatLimitRateDPOS,"uharm8Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate9(iExcessRateI(rStatLimitRateDPOS,"uharm9Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate10(iExcessRateI(rStatLimitRateDPOS,"uharm10Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate11(iExcessRateI(rStatLimitRateDPOS,"uharm11Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate12(iExcessRateI(rStatLimitRateDPOS,"uharm12Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate13(iExcessRateI(rStatLimitRateDPOS,"uharm13Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate14(iExcessRateI(rStatLimitRateDPOS,"uharm14Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate15(iExcessRateI(rStatLimitRateDPOS,"uharm15Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate16(iExcessRateI(rStatLimitRateDPOS,"uharm16Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate17(iExcessRateI(rStatLimitRateDPOS,"uharm17Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate18(iExcessRateI(rStatLimitRateDPOS,"uharm18Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate19(iExcessRateI(rStatLimitRateDPOS,"uharm19Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate20(iExcessRateI(rStatLimitRateDPOS,"uharm20Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate21(iExcessRateI(rStatLimitRateDPOS,"uharm21Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate22(iExcessRateI(rStatLimitRateDPOS,"uharm22Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate23(iExcessRateI(rStatLimitRateDPOS,"uharm23Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate24(iExcessRateI(rStatLimitRateDPOS,"uharm24Overtime","allTime"));
+ rMpInfluenceVExcessRateM.setVExcessRate25(iExcessRateI(rStatLimitRateDPOS,"uharm25Overtime","allTime"));
+ } else {
+ rMpInfluenceVExcessRateM.setVExcessRate2(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate3(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate4(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate5(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate6(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate7(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate8(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate9(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate10(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate11(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate12(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate13(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate14(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate15(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate16(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate17(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate18(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate19(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate20(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate21(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate22(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate23(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate24(0.0);
+ rMpInfluenceVExcessRateM.setVExcessRate25(0.0);
+
+ }
+ rMpInfluenceVExcessRateMS.add(rMpInfluenceVExcessRateM);
+ }
+
+ private void rMpInfluenceVAdd(LineParam jobParam, List rMpInfluenceVMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List rStatLimitRateMS, String key) {
+ RMpInfluenceVM rMpInfluenceVM = new RMpInfluenceVM();
+ rMpInfluenceVM.setMonitorTag(key);
+ rMpInfluenceVM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpInfluenceVM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ rMpInfluenceVM.setVRate2(iRateV(rStatLimitRateDPOS, "uharm2Overtime"));
+ rMpInfluenceVM.setVRate3(iRateV(rStatLimitRateDPOS, "uharm3Overtime"));
+ rMpInfluenceVM.setVRate4(iRateV(rStatLimitRateDPOS, "uharm4Overtime"));
+ rMpInfluenceVM.setVRate5(iRateV(rStatLimitRateDPOS, "uharm5Overtime"));
+ rMpInfluenceVM.setVRate6(iRateV(rStatLimitRateDPOS, "uharm6Overtime"));
+ rMpInfluenceVM.setVRate7(iRateV(rStatLimitRateDPOS, "uharm7Overtime"));
+ rMpInfluenceVM.setVRate8(iRateV(rStatLimitRateDPOS, "uharm8Overtime"));
+ rMpInfluenceVM.setVRate9(iRateV(rStatLimitRateDPOS, "uharm9Overtime"));
+ rMpInfluenceVM.setVRate10(iRateV(rStatLimitRateDPOS, "uharm10Overtime"));
+ rMpInfluenceVM.setVRate11(iRateV(rStatLimitRateDPOS, "uharm11Overtime"));
+ rMpInfluenceVM.setVRate12(iRateV(rStatLimitRateDPOS, "uharm12Overtime"));
+ rMpInfluenceVM.setVRate13(iRateV(rStatLimitRateDPOS, "uharm13Overtime"));
+ rMpInfluenceVM.setVRate14(iRateV(rStatLimitRateDPOS, "uharm14Overtime"));
+ rMpInfluenceVM.setVRate15(iRateV(rStatLimitRateDPOS, "uharm15Overtime"));
+ rMpInfluenceVM.setVRate16(iRateV(rStatLimitRateDPOS, "uharm16Overtime"));
+ rMpInfluenceVM.setVRate17(iRateV(rStatLimitRateDPOS, "uharm17Overtime"));
+ rMpInfluenceVM.setVRate18(iRateV(rStatLimitRateDPOS, "uharm18Overtime"));
+ rMpInfluenceVM.setVRate19(iRateV(rStatLimitRateDPOS, "uharm19Overtime"));
+ rMpInfluenceVM.setVRate20(iRateV(rStatLimitRateDPOS, "uharm20Overtime"));
+ rMpInfluenceVM.setVRate21(iRateV(rStatLimitRateDPOS, "uharm21Overtime"));
+ rMpInfluenceVM.setVRate22(iRateV(rStatLimitRateDPOS, "uharm22Overtime"));
+ rMpInfluenceVM.setVRate23(iRateV(rStatLimitRateDPOS, "uharm23Overtime"));
+ rMpInfluenceVM.setVRate24(iRateV(rStatLimitRateDPOS, "uharm24Overtime"));
+ rMpInfluenceVM.setVRate25(iRateV(rStatLimitRateDPOS, "uharm25Overtime"));
+ } else {
+ rMpInfluenceVM.setVRate2(0.0);
+ rMpInfluenceVM.setVRate3(0.0);
+ rMpInfluenceVM.setVRate4(0.0);
+ rMpInfluenceVM.setVRate5(0.0);
+ rMpInfluenceVM.setVRate6(0.0);
+ rMpInfluenceVM.setVRate7(0.0);
+ rMpInfluenceVM.setVRate8(0.0);
+ rMpInfluenceVM.setVRate9(0.0);
+ rMpInfluenceVM.setVRate10(0.0);
+ rMpInfluenceVM.setVRate11(0.0);
+ rMpInfluenceVM.setVRate12(0.0);
+ rMpInfluenceVM.setVRate13(0.0);
+ rMpInfluenceVM.setVRate14(0.0);
+ rMpInfluenceVM.setVRate15(0.0);
+ rMpInfluenceVM.setVRate16(0.0);
+ rMpInfluenceVM.setVRate17(0.0);
+ rMpInfluenceVM.setVRate18(0.0);
+ rMpInfluenceVM.setVRate19(0.0);
+ rMpInfluenceVM.setVRate20(0.0);
+ rMpInfluenceVM.setVRate21(0.0);
+ rMpInfluenceVM.setVRate22(0.0);
+ rMpInfluenceVM.setVRate23(0.0);
+ rMpInfluenceVM.setVRate24(0.0);
+ rMpInfluenceVM.setVRate25(0.0);
+ }
+ rMpInfluenceVMS.add(rMpInfluenceVM);
+ }
+
+ /**
+ * @param jobParam 查询参数
+ * @param rMpEmissionMS 对象
+ * @param deptGetChildrenMoreDTO 部门监测点对象
+ * @param lineBaseMap 监测点id-监测点标签
+ * @param dataVDPOList
+ * @param rStatLimitRateMS
+ * @param key
+ * @Description: 发电特性对象赋值
+ * @Author: wr
+ * @Date: 2023/10/17 11:18
+ */
+ private void rMpInfluenceAdd(LineParam jobParam, List rMpEmissionMS, DeptGetChildrenMoreDTO deptGetChildrenMoreDTO, Map> lineBaseMap, List dataVDPOList, List rStatLimitRateMS, String key) {
+ RMpInfluenceM rMpInfluenceM = new RMpInfluenceM();
+ rMpInfluenceM.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rMpInfluenceM.setMonitorTag(key);
+ rMpInfluenceM.setDataDate(DateUtil.parse(jobParam.getDataDate()));
+
+ //获取监测点
+ List lineIds = lineBaseMap.get(key);
+
+ List rStatDataVDPOS = dataVDPOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ //获取负序电流不平衡度
+ if (CollUtil.isNotEmpty(rStatDataVDPOS)) {
+ double asDouble = rStatDataVDPOS.stream().filter(x -> x.getVNeg() != null).mapToDouble(RStatDataVDPO::getVNeg).max().getAsDouble();
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalance(asDouble);
+ } else {
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalance(0.0);
+ }
+
+ List rStatLimitRateDPOS = rStatLimitRateMS.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
+ //获取负序电流不平衡度平均超标天数、占比,各次谐波电流平均超标天数
+ if (CollUtil.isNotEmpty(rStatLimitRateDPOS)) {
+ long iNegOverDay = rStatLimitRateDPOS.stream().filter(x -> x.getVoltageDevOvertime() > 0).count();
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessDayAvg(iNegOverDay != 0 ? NumberUtil.round(iNegOverDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
+ //获取所有超标次数
+ double sum = rStatLimitRateDPOS.stream().filter(x -> x.getVoltageDevOvertime() > 0).mapToDouble(RStatLimitRateDPO::getVoltageDevOvertime).sum();
+ double allSum = rStatLimitRateDPOS.stream().filter(x -> x.getAllTime() > 0).mapToDouble(RStatLimitRateDPO::getVoltageDevOvertime).sum();
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessRate(sum != 0 ? NumberUtil.round(allSum / allSum * 1.0, 2).doubleValue() : 0.0);
+ long uHarmDay = rStatLimitRateDPOS.stream().filter(x -> filterNotQualifiedUharmData(x)).count();
+ rMpInfluenceM.setVExcessDayAvg(uHarmDay != 0 ? NumberUtil.round(uHarmDay / rStatLimitRateDPOS.size() * 1.0, 2).doubleValue() : 0.0);
+ } else {
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessDayAvg(0.0);
+ rMpInfluenceM.setNegativeSequenceVoltageUnbalanceExcessRate(0.0);
+ rMpInfluenceM.setVExcessDayAvg(0.0);
+ }
+ rMpEmissionMS.add(rMpInfluenceM);
+ }
+
+
+ private boolean filterNotQualifiedUharmData(RStatLimitRateDPO t) {
+ if (t.getUharm2Overtime() != 0 || t.getUharm3Overtime() != 0 || t.getUharm4Overtime() != 0 || t.getUharm5Overtime() != 0 || t.getUharm6Overtime() != 0 || t.getUharm7Overtime() != 0 || t.getUharm8Overtime() != 0 || t.getUharm9Overtime() != 0 || t.getUharm10Overtime() != 0 || t.getUharm11Overtime() != 0 || t.getUharm12Overtime() != 0 || t.getUharm13Overtime() != 0 || t.getUharm14Overtime() != 0 || t.getUharm15Overtime() != 0 || t.getUharm16Overtime() != 0 || t.getUharm17Overtime() != 0 || t.getUharm18Overtime() != 0 || t.getUharm19Overtime() != 0 || t.getUharm20Overtime() != 0 || t.getUharm21Overtime() != 0 || t.getUharm22Overtime() != 0 || t.getUharm23Overtime() != 0 || t.getUharm24Overtime() != 0 || t.getUharm25Overtime() != 0) {
+ return true;
+ }
+ return false;
+ }
+
+ //获取平均超标天数
+ private Double iRateV(List value, String attribute) {
+ int size = value.size();
+ Field field;
+ try {
+ field = RStatLimitRateDPO.class.getDeclaredField(attribute);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ }
+ field.setAccessible(true);
+ List nums = value.stream().map(temp -> {
+ Integer o;
+ try {
+ o = (Integer) field.get(temp);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ return o.intValue();
+ }).collect(Collectors.toList());
+ long num = nums.stream().filter(x -> x > 0).count();
+ return num != 0 ? NumberUtil.round(num / size * 1.0, 2).doubleValue() : 0.0;
+ }
+
+ private Double iExcessRateI(List value, String attribute,String allTime) {
+ Field excessRateField;
+ Field allTimeField;
+ try {
+ excessRateField = RStatLimitRateDPO.class.getDeclaredField(attribute);
+ allTimeField = RStatLimitRateDPO.class.getDeclaredField(allTime);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ }
+ excessRateField.setAccessible(true);
+ allTimeField.setAccessible(true);
+
+ List nums = value.stream().map(x->{
+ Double o;
+ try {
+ Integer rate = (Integer) excessRateField.get(x);
+ Integer num = (Integer) allTimeField.get(x);
+ o= rate != 0 ? NumberUtil.round(rate / num * 1.0, 2).doubleValue() : 0.0;
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ return o.doubleValue();
+
+ }).collect(Collectors.toList());
+ return PubUtils.dataLimits(nums.stream().collect(Collectors.averagingDouble(Double::doubleValue))*100);
+ }
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVExcessRateMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVExcessRateMServiceImpl.java
new file mode 100644
index 000000000..99b7404a1
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVExcessRateMServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVExcessRateM;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceVExcessRateMMapper;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpInfluenceVExcessRateMService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压超标占比 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+@Service
+public class RMpInfluenceVExcessRateMServiceImpl extends MppServiceImpl implements IRMpInfluenceVExcessRateMService {
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVMServiceImpl.java
new file mode 100644
index 000000000..eb41fe3c1
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RMpInfluenceVMServiceImpl.java
@@ -0,0 +1,20 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.harmonic.pojo.po.RMpInfluenceVM;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RMpInfluenceVMMapper;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.IRMpInfluenceVMService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 风电场影响特性-月表/各次谐波电压含有率 服务实现类
+ *
+ *
+ * @author wr
+ * @since 2023-10-17
+ */
+@Service
+public class RMpInfluenceVMServiceImpl extends MppServiceImpl implements IRMpInfluenceVMService {
+
+}