From 0bb0c9b1892303cd500f8b435b388a37d7880201 Mon Sep 17 00:00:00 2001 From: zhangbaojian <1065122561@qq.com> Date: Fri, 9 Jun 2023 16:22:15 +0800 Subject: [PATCH] =?UTF-8?q?zbj//1.=E6=9A=82=E6=80=81=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=EF=BC=88=E7=94=B5=E5=8E=8B=E7=AD=89=E7=BA=A7?= =?UTF-8?q?=EF=BC=89=20=E6=97=A5=20=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/po/RMpEventDetailDNewPO.java | 46 ++ .../pojo/po/RStatEventVoltageDPO.java | 49 ++ .../newalgorithm/RStatEventController.java | 2 +- .../RStatEventVoltageController.java | 80 +++ .../RStatEventVoltageDPOMapper.java | 18 + .../RStatEventVoltageDPOService.java | 14 + .../RStatEventVoltageService.java | 16 + .../impl/RStatEventServiceImpl.java | 6 +- .../impl/RStatEventVoltageDPOServiceImpl.java | 24 + .../impl/RStatEventVoltageServiceImpl.java | 534 ++++++++++++++++++ 10 files changed, 783 insertions(+), 6 deletions(-) create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RMpEventDetailDNewPO.java create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatEventVoltageDPO.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatEventVoltageController.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/newalgorithm/RStatEventVoltageDPOMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageDPOService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/RStatEventVoltageService.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageDPOServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventVoltageServiceImpl.java 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; + + } + +}