diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RMpEventDetailDNewPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RMpEventDetailDNewPO.java
new file mode 100644
index 000000000..2ce9c7d1a
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RMpEventDetailDNewPO.java
@@ -0,0 +1,46 @@
+package com.njcn.prepare.harmonic.pojo.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * zbj
+ */
+
+/**
+ * 监测点暂态指标超标明细日表
+ */
+@Data
+public class RMpEventDetailDNewPO {
+ /**
+ * 监测点ID
+ */
+ private String measurementPointId;
+
+ /**
+ * 时间
+ */
+ private Date dataDate;
+
+ /**
+ * 电压暂升发生次数
+ */
+ private Integer swellTimes;
+
+ /**
+ * 电压暂降发生次数
+ */
+ private Integer sagTimes;
+
+ /**
+ * 短时中断发生次数
+ */
+ private Integer interruptTimes;
+
+ /**
+ * 电压等级
+ */
+ private String voltage;
+}
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventVoltageDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventVoltageDPO.java
new file mode 100644
index 000000000..8c4f856a4
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventVoltageDPO.java
@@ -0,0 +1,49 @@
+package com.njcn.prepare.harmonic.pojo.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zbj
+ * @since 2023-06-06
+ */
+@Data
+@TableName("r_stat_event_voltage_d")
+public class RStatEventVoltageDPO {
+
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ @MppMultiId(value = "data_date")
+ private LocalDate dataDate;
+
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ @MppMultiId(value = "event_type")
+ private String eventType;
+
+ @MppMultiId(value = "voltage_type")
+ private String voltageType;
+
+ @TableField(value = "event_measurement")
+ private Integer eventMeasurement;
+
+ @TableField(value = "event_measurement_ratio")
+ private Float eventMeasurementRatio;
+
+ @TableField(value = "event_count")
+ private Integer eventCount;
+
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventController.java
index 9fe04c9ae..f0eab2294 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventController.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventController.java
@@ -56,7 +56,7 @@ public class RStatEventController extends BaseController {
@ApiOperation("暂态指标统计")
@ApiImplicitParam(name = "orgParam", value = "参数", required = true)
public HttpResult rStartEventHandler(@RequestBody @Validated OrgParam orgParam) {
- log.info(LocalDateTime.now() + "rStartEventHandler始执行");
+ log.info(LocalDateTime.now() + "rStartEventHandler开始执行");
String methodDescribe = getMethodDescribe("rStartEventHandler");
/**
* 支持补录
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventVoltageController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventVoltageController.java
new file mode 100644
index 000000000..6ece115b7
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventVoltageController.java
@@ -0,0 +1,80 @@
+package com.njcn.prepare.harmonic.controller.newalgorithm;
+
+import com.njcn.common.pojo.annotation.OperateInfo;
+import com.njcn.common.pojo.constant.ServerInfo;
+import com.njcn.common.pojo.enums.common.LogEnum;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.param.DeptGetLineParam;
+import com.njcn.prepare.harmonic.pojo.param.OrgParam;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventVoltageService;
+import com.njcn.user.api.DeptFeignClient;
+import com.njcn.user.pojo.po.Dept;
+import com.njcn.web.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * Description:
+ * 接口文档访问地址:http://serverIP:port/swagger-ui.html
+ * Date: 2022/12/28 13:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Slf4j
+@Api(tags = "暂态指标统计(电压等级)")
+@RestController
+@RequestMapping("/rStartEventVoltage")
+@RequiredArgsConstructor
+public class RStatEventVoltageController extends BaseController {
+
+ private final RStatEventVoltageService rStatEventVoltageService;
+
+ private final CommTerminalGeneralClient commTerminalGeneralClient;
+
+ private final DeptFeignClient deptFeignClient;
+
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/rStartEventVoltage")
+ @ApiOperation("暂态指标统计(电压等级)")
+ @ApiImplicitParam(name = "orgParam", value = "参数", required = true)
+ public HttpResult rStartEventVoltageHandler(@RequestBody @Validated OrgParam orgParam) {
+ log.info(LocalDateTime.now() + "rStartEventVoltageHandler开始执行");
+ String methodDescribe = getMethodDescribe("rStartEventVoltageHandler");
+ /**
+ * 支持补录
+ */
+ DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
+
+ if (StringUtils.isEmpty(orgParam.getOrgId())) {
+ Dept data = deptFeignClient.getRootDept().getData();
+ deptGetLineParam.setDeptId(data.getId());
+ } else {
+ deptGetLineParam.setDeptId(orgParam.getOrgId());
+ }
+ deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT);
+ List data = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
+
+ rStatEventVoltageService.handler(data,orgParam.getDataDate(),orgParam.getType());
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
+ }
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventVoltageDPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventVoltageDPOMapper.java
new file mode 100644
index 000000000..f52f05c6e
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventVoltageDPOMapper.java
@@ -0,0 +1,18 @@
+package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO;
+import com.njcn.prepare.harmonic.pojo.po.RStatEventVoltageDPO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description:
+ * 接口文档访问地址:http://serverIP:port/swagger-ui.html
+ * Date: 2022/12/13 15:39【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Mapper
+public interface RStatEventVoltageDPOMapper 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/RStatEventVoltageDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageDPOService.java
new file mode 100644
index 000000000..e9a5463d2
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageDPOService.java
@@ -0,0 +1,14 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.prepare.harmonic.pojo.po.RStatEventVoltageDPO;
+
+
+/**
+ * @author zbj
+ * @since 2023-06-09
+ */
+
+public interface RStatEventVoltageDPOService extends IMppService {
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageService.java
new file mode 100644
index 000000000..a7f264cbf
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageService.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
+
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+
+import java.util.List;
+
+/**
+ * @author zbj
+ * @since 2023-06-09
+ */
+
+public interface RStatEventVoltageService {
+
+ void handler(List data, String dataDate, Integer type);
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
index abf30ca15..77c1ed712 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
/**
*
- * 终端检测监督
+ * 暂态指标统计
*
*
* @author zbj
@@ -48,10 +48,6 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class RStatEventServiceImpl implements RStatEventService {
- private final CommTerminalGeneralClient commTerminalGeneralClient;
-
- private final DeptFeignClient deptFeignClient;
-
private final DicDataFeignClient dicDataFeignClient;
private final RMpEventDetailDMapper rMpEventDetailDMapper;
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageDPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageDPOServiceImpl.java
new file mode 100644
index 000000000..11c920049
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageDPOServiceImpl.java
@@ -0,0 +1,24 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventDPOMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventVoltageDPOMapper;
+import com.njcn.prepare.harmonic.pojo.po.RStatEventDPO;
+import com.njcn.prepare.harmonic.pojo.po.RStatEventVoltageDPO;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventDPOService;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventVoltageDPOService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 终端检测监督
+ *
+ *
+ * @author zbj
+ * @since 2023-06-08
+ */
+@Service
+@RequiredArgsConstructor
+public class RStatEventVoltageDPOServiceImpl extends MppServiceImpl implements RStatEventVoltageDPOService {
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageServiceImpl.java
new file mode 100644
index 000000000..9fc0cd826
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageServiceImpl.java
@@ -0,0 +1,534 @@
+package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
+import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
+import com.njcn.harmonic.pojo.po.RMpEventDetailMPO;
+import com.njcn.harmonic.pojo.po.RStatOrgDPO;
+import com.njcn.harmonic.pojo.po.RStatOrgMPO;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailMMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventDPOMapper;
+import com.njcn.prepare.harmonic.pojo.po.*;
+import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
+import com.njcn.system.api.DicDataFeignClient;
+import com.njcn.system.enums.DicDataEnum;
+import com.njcn.system.enums.DicDataTypeEnum;
+import com.njcn.system.pojo.po.DictData;
+import com.njcn.user.api.DeptFeignClient;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 暂态指标统计(电压等级)
+ *
+ *
+ * @author zbj
+ * @since 2023-06-09
+ */
+@Service
+@RequiredArgsConstructor
+public class RStatEventVoltageServiceImpl implements RStatEventVoltageService {
+
+ private final DicDataFeignClient dicDataFeignClient;
+
+ private final RMpEventDetailDMapper rMpEventDetailDMapper;
+
+ private final RMpEventDetailMMapper rMpEventDetailMMapper;
+
+ private final RStatEventVoltageDPOService rStatEventVoltageDPOService;
+
+ private final RStatEventMPOService rStatEventMPOService;
+
+ private final RStatEventDPOMapper rStatEventDPOMapper;
+
+ private final RStatOrgDMapper rStatOrgDMapper;
+
+ private final RStatOrgMMapper rStatOrgMMapper;
+
+
+ @Override
+ public void handler(List data, String dataDate, Integer type) {
+ switch (type) {
+ case 3:
+ this.rStartEventVoltageMHandler(data, dataDate, type);
+ break;
+ case 5:
+ this.rStartEventVoltageDHandler(data, dataDate, type);
+ break;
+ default:
+ break;
+ }
+ }
+
+ //天表
+ public void rStartEventVoltageDHandler(List data, String dataDate, Integer type) {
+ List rStatEventVoltageDPOS = new ArrayList<>();
+ DecimalFormat df = new DecimalFormat("0.00");
+ Date date = DateUtil.parse(dataDate);
+ LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+
+ /*获取暂态统计指标*/
+ List eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
+
+ /*获取数据类型*/
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ /*获取监测点电压等级*/
+ List voltageList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData();
+ Map voltageMap = voltageList.stream().collect(Collectors.toMap(DictData::getValue, dictData -> dictData));
+
+ QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rStatOrgDPOQueryWrapper = new QueryWrapper<>();
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+
+ rStatOrgDPOQueryWrapper.clear();
+ rStatOrgDPOQueryWrapper.select("effective_measurement").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
+ RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper);
+
+ //循环拷贝
+ List poList = new ArrayList<>();
+ for (RMpEventDetailDPO rMpEventDetailDPO : rMpEventDetailDPOS) {
+ RMpEventDetailDNewPO po = new RMpEventDetailDNewPO();
+ BeanUtils.copyProperties(rMpEventDetailDPO, po);
+ poList.add(po);
+ }
+ for (RMpEventDetailDNewPO rMpEventDetailDNewPO : poList) {
+ for (LineDevGetDTO lineDevGetDTO : v) {
+ if (Objects.equals(lineDevGetDTO.getPointId(), rMpEventDetailDNewPO.getMeasurementPointId())) {
+ rMpEventDetailDNewPO.setVoltage(lineDevGetDTO.getVoltageLevel());
+ }
+ }
+ }
+ eventStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) {
+ return;
+ }
+ //电压
+ voltageMap.forEach((k1, v1) -> {
+ List poResult = poList.stream().filter(p -> Objects.equals(p.getVoltage(), k1)).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(poResult)) {
+ return;
+ }
+ List transientStatisData = getTransientStatisData(dictData, poResult);
+ RStatEventVoltageDPO rStatEventVoltageDPO = new RStatEventVoltageDPO();
+ rStatEventVoltageDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatEventVoltageDPO.setDataDate(localDate);
+ rStatEventVoltageDPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ rStatEventVoltageDPO.setEventType(dictData.getId());
+ rStatEventVoltageDPO.setVoltageType(v1.getId());
+ rStatEventVoltageDPO.setEventMeasurement(transientStatisData.get(0));
+ rStatEventVoltageDPO.setEventCount(transientStatisData.get(1));
+ rStatEventVoltageDPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ if (Objects.isNull(rStatOrgDPO)) {
+ rStatEventVoltageDPO.setEventMeasurementRatio(1.00f);
+ } else {
+ if (rStatOrgDPO.getEffectiveMeasurement() == 0) {
+ rStatEventVoltageDPO.setEventMeasurementRatio(1.00f);
+ } else {
+ String value = df.format(rStatEventVoltageDPO.getEventMeasurement() / rStatOrgDPO.getEffectiveMeasurement());
+ rStatEventVoltageDPO.setEventMeasurementRatio(Float.parseFloat(value));
+ }
+ }
+ rStatEventVoltageDPOS.add(rStatEventVoltageDPO);
+ });
+ }
+ );
+ });
+ }
+
+ /*配网*/
+ if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())) {
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+
+ rStatOrgDPOQueryWrapper.clear();
+ rStatOrgDPOQueryWrapper.select("effective_measurement").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
+ RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper);
+
+ //循环拷贝
+ List poList = new ArrayList<>();
+ for (RMpEventDetailDPO rMpEventDetailDPO : rMpEventDetailDPOS) {
+ RMpEventDetailDNewPO po = new RMpEventDetailDNewPO();
+ BeanUtils.copyProperties(rMpEventDetailDPO, po);
+ poList.add(po);
+ }
+ for (RMpEventDetailDNewPO rMpEventDetailDNewPO : poList) {
+ for (LineDevGetDTO lineDevGetDTO : v) {
+ if (Objects.equals(lineDevGetDTO.getPointId(), rMpEventDetailDNewPO.getMeasurementPointId())) {
+ rMpEventDetailDNewPO.setVoltage(lineDevGetDTO.getVoltageLevel());
+ }
+ }
+ }
+ eventStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) {
+ return;
+ }
+ //电压
+ voltageMap.forEach((k1, v1) -> {
+ List poResult = poList.stream().filter(p -> Objects.equals(p.getVoltage(), k1)).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(poResult)) {
+ return;
+ }
+ List transientStatisData = getTransientStatisData(dictData, poResult);
+ RStatEventVoltageDPO rStatEventVoltageDPO = new RStatEventVoltageDPO();
+ rStatEventVoltageDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatEventVoltageDPO.setDataDate(localDate);
+ rStatEventVoltageDPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ rStatEventVoltageDPO.setEventType(dictData.getId());
+ rStatEventVoltageDPO.setVoltageType(v1.getId());
+ rStatEventVoltageDPO.setEventMeasurement(transientStatisData.get(0));
+ rStatEventVoltageDPO.setEventCount(transientStatisData.get(1));
+ rStatEventVoltageDPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ if (Objects.isNull(rStatOrgDPO)) {
+ rStatEventVoltageDPO.setEventMeasurementRatio(1.00f);
+ } else {
+ if (rStatOrgDPO.getEffectiveMeasurement() == 0) {
+ rStatEventVoltageDPO.setEventMeasurementRatio(1.00f);
+ } else {
+ String value = df.format(rStatEventVoltageDPO.getEventMeasurement() / rStatOrgDPO.getEffectiveMeasurement());
+ rStatEventVoltageDPO.setEventMeasurementRatio(Float.parseFloat(value));
+ }
+ }
+ rStatEventVoltageDPOS.add(rStatEventVoltageDPO);
+ });
+ }
+ );
+ });
+ }
+
+ });
+ if (!CollectionUtils.isEmpty(rStatEventVoltageDPOS)) {
+ rStatEventVoltageDPOService.saveOrUpdateBatchByMultiId(rStatEventVoltageDPOS, 500);
+ }
+ }
+
+ //月表
+ public void rStartEventVoltageMHandler(List data, String dataDate, Integer type) {
+ List rStatEventMPOList = new ArrayList<>();
+ DecimalFormat df = new DecimalFormat("0.00");
+ Date date = DateUtil.parse(dataDate);
+ LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+
+ /*获取暂态统计指标*/
+ List eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
+
+ /*获取数据类型*/
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ //详情表
+ QueryWrapper rMpEventDetailMPOQueryWrapper = new QueryWrapper<>();
+ //org表
+ QueryWrapper rStatOrgMPOQueryWrapper = new QueryWrapper<>();
+ //天表
+ QueryWrapper rStatEventDPOQueryWrapper = new QueryWrapper<>();
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+ rMpEventDetailMPOQueryWrapper.clear();
+ rMpEventDetailMPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7));
+ List rMpEventDetailMPOS = rMpEventDetailMMapper.selectList(rMpEventDetailMPOQueryWrapper);
+
+ rStatOrgMPOQueryWrapper.clear();
+ rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7));
+ RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
+
+ //天表
+ rStatEventDPOQueryWrapper.clear();
+ rStatEventDPOQueryWrapper.
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7)).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ List rStatEventDPO = rStatEventDPOMapper.selectList(rStatEventDPOQueryWrapper);
+
+
+ //求各个类型的平均值
+ Map avgEM = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.averagingInt(RStatEventDPO::getEventMeasurement)));
+
+ //event_measurement的和
+ Map sumEM = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.summingInt(RStatEventDPO::getEventMeasurement)));
+
+ //event_count
+ Map sumEC = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.summingInt(RStatEventDPO::getEventCount)));
+
+ //event_measurement_ratio
+ Map avgEMR = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.averagingDouble(RStatEventDPO::getEventMeasurementRatio)));
+
+
+ eventStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) {
+ return;
+ }
+ //累计发生暂态监测点数
+ Integer statisData = getStatisData(dictData, rMpEventDetailMPOS);
+
+ RStatEventMPO rStatEventMPO = new RStatEventMPO();
+ rStatEventMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatEventMPO.setDataDate(localDate);
+ rStatEventMPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ rStatEventMPO.setEventType(dictData.getId());
+ rStatEventMPO.setEventMeasurementAverage(Float.parseFloat(df.format(avgEM.get(dictData.getId()))));
+ rStatEventMPO.setEventMeasurementAccrued(statisData);
+ rStatEventMPO.setEventCount(sumEC.get(dictData.getId()));
+ rStatEventMPO.setEventMeasurementRatioAverage(Float.parseFloat(df.format(avgEMR.get(dictData.getId()))));
+ rStatEventMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+
+ if (sumEM.get(dictData.getId()) == 0) {
+ rStatEventMPO.setEventFreq(1.00f);
+ } else {
+ String value = df.format(sumEC.get(dictData.getId()) / sumEM.get(dictData.getId()));
+ rStatEventMPO.setEventFreq(Float.parseFloat(value));
+ }
+ if (Objects.isNull(rStatOrgMPO)) {
+ rStatEventMPO.setEventMeasurementRatioAccrued(1.00f);
+ } else {
+ if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
+ rStatEventMPO.setEventMeasurementRatioAccrued(1.00f);
+ } else {
+ String value = df.format(statisData / rStatOrgMPO.getEffectiveMeasurementAccrued());
+ rStatEventMPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
+ }
+ }
+ rStatEventMPOList.add(rStatEventMPO);
+ });
+ });
+ }
+
+ /*配网*/
+ if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())) {
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+ rMpEventDetailMPOQueryWrapper.clear();
+ rMpEventDetailMPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7));
+ List rMpEventDetailMPOS = rMpEventDetailMMapper.selectList(rMpEventDetailMPOQueryWrapper);
+
+ rStatOrgMPOQueryWrapper.clear();
+ rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7));
+ RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
+
+ //天表
+ rStatEventDPOQueryWrapper.clear();
+ rStatEventDPOQueryWrapper.
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')", dataDate.substring(0, 7)).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ List rStatEventDPO = rStatEventDPOMapper.selectList(rStatEventDPOQueryWrapper);
+
+
+ //求各个类型的平均值
+ Map avgEM = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.averagingInt(RStatEventDPO::getEventMeasurement)));
+
+ //event_measurement的和
+ Map sumEM = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.summingInt(RStatEventDPO::getEventMeasurement)));
+
+ //event_count
+ Map sumEC = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.summingInt(RStatEventDPO::getEventCount)));
+
+ //event_measurement_ratio
+ Map avgEMR = rStatEventDPO.stream()
+ .collect(Collectors.groupingBy(RStatEventDPO::getEventType, Collectors.averagingDouble(RStatEventDPO::getEventMeasurementRatio)));
+
+
+ eventStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode())
+ || Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) {
+ return;
+ }
+ //累计发生暂态监测点数
+ Integer statisData = getStatisData(dictData, rMpEventDetailMPOS);
+
+ RStatEventMPO rStatEventMPO = new RStatEventMPO();
+ rStatEventMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatEventMPO.setDataDate(localDate);
+ rStatEventMPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ rStatEventMPO.setEventType(dictData.getId());
+ rStatEventMPO.setEventMeasurementAverage(Float.parseFloat(df.format(avgEM.get(dictData.getId()))));
+ rStatEventMPO.setEventMeasurementAccrued(statisData);
+ rStatEventMPO.setEventCount(sumEC.get(dictData.getId()));
+ rStatEventMPO.setEventMeasurementRatioAverage(Float.parseFloat(df.format(avgEMR.get(dictData.getId()))));
+ rStatEventMPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+
+ if (sumEM.get(dictData.getId()) == 0) {
+ rStatEventMPO.setEventFreq(1.00f);
+ } else {
+ String value = df.format(sumEC.get(dictData.getId()) / sumEM.get(dictData.getId()));
+ rStatEventMPO.setEventFreq(Float.parseFloat(value));
+ }
+ if (Objects.isNull(rStatOrgMPO)) {
+ rStatEventMPO.setEventMeasurementRatioAccrued(1.00f);
+ } else {
+ if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
+ rStatEventMPO.setEventMeasurementRatioAccrued(1.00f);
+ } else {
+ String value = df.format(statisData / rStatOrgMPO.getEffectiveMeasurementAccrued());
+ rStatEventMPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
+ }
+ }
+ rStatEventMPOList.add(rStatEventMPO);
+ });
+ });
+ }
+
+ });
+ if (!CollectionUtils.isEmpty(rStatEventMPOList)) {
+ rStatEventMPOService.saveOrUpdateBatchByMultiId(rStatEventMPOList, 500);
+ }
+ }
+
+
+ //获取监测点类型 1/2/3类字典id
+ private String getmeasurementType(Integer k, Map lineSortMap) {
+ String value = "";
+ switch (k) {
+ case 1:
+ value = lineSortMap.get(DicDataEnum.ONE_LINE.getCode()).getId();
+ break;
+ case 2:
+ value = lineSortMap.get(DicDataEnum.TWO_LINE.getCode()).getId();
+ break;
+ case 3:
+ value = lineSortMap.get(DicDataEnum.THREE_LINE.getCode()).getId();
+ break;
+ default:
+ break;
+ }
+ return value;
+ }
+
+ //获取暂态各个类型发生的监测点数量及发生次数
+ private List getTransientStatisData(DictData dictData, List list) {
+ List result = new ArrayList<>(2);
+ Integer value = 0;
+ Integer count = 0;
+ if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_DIP.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getSagTimes() > 0).count() + "");
+ count = Integer.valueOf(list.stream().mapToInt(RMpEventDetailDNewPO::getSagTimes).sum() + "");
+ }
+ if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_RISE.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getSwellTimes() > 0).count() + "");
+ count = Integer.valueOf(list.stream().mapToInt(RMpEventDetailDNewPO::getSwellTimes).sum() + "");
+ }
+ if (Objects.equals(dictData.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getInterruptTimes() > 0).count() + "");
+ count = Integer.valueOf(list.stream().mapToInt(RMpEventDetailDNewPO::getInterruptTimes).sum() + "");
+ }
+ result.add(value);
+ result.add(count);
+ return result;
+
+ }
+
+ //获取暂态各个类型发生的监测点数量
+ private Integer getStatisData(DictData dictData, List list) {
+ Integer value = 0;
+ if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_DIP.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getSagTimes() > 0).count() + "");
+ }
+ if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_RISE.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getSwellTimes() > 0).count() + "");
+ }
+ if (Objects.equals(dictData.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) {
+ value = Integer.valueOf(list.stream().filter(temp -> temp.getInterruptTimes() > 0).count() + "");
+ }
+
+ return value;
+
+ }
+
+}