算法提交

This commit is contained in:
hzj
2023-12-13 15:40:48 +08:00
parent e1f697f180
commit e5ca1cbd05
39 changed files with 1834 additions and 135 deletions

View File

@@ -12,6 +12,8 @@ import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService;
import com.njcn.prepare.harmonic.service.mysql.dim.*;
import com.njcn.prepare.harmonic.service.mysql.line.PollutionService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.njcn.prepare.harmonic.service.mysql.send.ConverterdetailstatisticsPOService;
import com.njcn.prepare.harmonic.service.mysql.send.PqTypicalSourceCreatePOService;
import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadPointStatisticalDataDService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
@@ -69,6 +71,10 @@ public class OrgPointExecutor extends BaseExecutor{
private final RDimBusStationEventStartisMPOService rDimBusStationEventStartisMPOService;
private final RDimBusStationEventStartisYPOService rDimBusStationEventStartisYPOService;
private final IRUploadPointStatisticalDataDService irUploadPointStatisticalDataDService;
private final ConverterdetailstatisticsPOService converterdetailstatisticsPOService;
private final PqTypicalSourceCreatePOService pqTypicalSourceCreatePOService;
/**
*
* 3.3.2. 单位标数据质量
@@ -615,4 +621,31 @@ public class OrgPointExecutor extends BaseExecutor{
irUploadPointStatisticalDataDService.insertPointStatisticalDataDay(bindCmp.getRequestData());
}
/**
* 河北国网上送接口
* 2.4.1.18 接收电能质量换流站指标汇总统计数据接口
* xuyang
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "converterdetailstatistics", nodeType = NodeTypeEnum.COMMON)
public boolean converterdetailstatisticsAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "converterdetailstatistics", nodeType = NodeTypeEnum.COMMON)
public void converterdetailstatisticsProcess(NodeComponent bindCmp) {
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
converterdetailstatisticsPOService.handlerDay(calculatedParam);
}
/**
*河北国网上送接口
*2.4.1.9 接收电能质量典型源荷指标统计数据接口
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "pqTypicalSourceCreatePOService", nodeType = NodeTypeEnum.COMMON)
public boolean pqTypicalSourceCreatePOServiceAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "pqTypicalSourceCreatePOService", nodeType = NodeTypeEnum.COMMON)
public void pqTypicalSourceCreatePOServiceProcess(NodeComponent bindCmp) {
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
pqTypicalSourceCreatePOService.handlerDay(calculatedParam);
}
}

View File

@@ -4,6 +4,7 @@ import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.line.PollutionService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatSubstationService;
import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadSubstationStatisticalDataDService;
import com.njcn.prepare.harmonic.service.mysql.send.SubstationQualityStatisticsPOService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
import com.yomahub.liteflow.core.NodeComponent;
@@ -26,6 +27,7 @@ public class SubStationExecutor extends BaseExecutor{
private final PollutionService pollutionService;
private final RStatSubstationService rStatSubstationService;
private final SubstationQualityStatisticsPOService substationQualityStatisticsPOService;
private final IRUploadSubstationStatisticalDataDService rUploadSubstationStatisticalDataDService;
@@ -64,6 +66,26 @@ public class SubStationExecutor extends BaseExecutor{
}
}
}
/**需求:
* FWJK-PMS3.0-TC0013-电能质量管理两级贯通接口V1.10
* 2.4.1.19 接收电能质量换流站指标统计明细数据接口
*
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "substationQualityStatistics", nodeType = NodeTypeEnum.COMMON)
public boolean processSubstationQualityStatistics(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "substationQualityStatistics", nodeType = NodeTypeEnum.COMMON)
public void processSubstationQualityStatisticss(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam<String> calculatedParam = bindCmp.getRequestData();
substationQualityStatisticsPOService.handleDay(calculatedParam);
}
/********************************************算法负责人:xy***********************************************************/

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.send;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.send.ConverterdetailstatisticsPO;
/**
*
* Description:
* Date: 2023/12/11 11:35【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface ConverterdetailstatisticsPOMapper extends BaseMapper<ConverterdetailstatisticsPO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.send;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.send.PqTypicalSourceCreatePO;
/**
*
* Description:
* Date: 2023/12/12 15:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface PqTypicalSourceCreatePOMapper extends BaseMapper<PqTypicalSourceCreatePO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.send;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.send.SubstationQualityStatisticsPO;
/**
*
* Description:
* Date: 2023/12/7 16:21【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SubstationQualityStatisticsPOMapper extends BaseMapper<SubstationQualityStatisticsPO> {
}

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.send.ConverterdetailstatisticsPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.send.ConverterdetailstatisticsPO">
<!--@mbg.generated-->
<!--@Table converterdetailstatistics-->
<result column="id" jdbcType="VARCHAR" property="id" />
<result column="abnormalBusAvgRate" jdbcType="DECIMAL" property="abnormalbusavgrate" />
<result column="abnormalBusNum" jdbcType="INTEGER" property="abnormalbusnum" />
<result column="abnormalBusRate" jdbcType="DECIMAL" property="abnormalbusrate" />
<result column="abnormalConverterAvgRate" jdbcType="DECIMAL" property="abnormalConverterAvgRateabnormalconverteravgrate" />
<result column="abnormalConverterNum" jdbcType="INTEGER" property="abnormalconverternum" />
<result column="abnormalConverterRate" jdbcType="DECIMAL" property="abnormalconverterrate" />
<result column="cityId" jdbcType="VARCHAR" property="cityid" />
<result column="cityName" jdbcType="VARCHAR" property="cityname" />
<result column="monitorAlternatingBusNum" jdbcType="INTEGER" property="monitoralternatingbusnum" />
<result column="monitorAlternatingBusRate" jdbcType="DECIMAL" property="monitoralternatingbusrate" />
<result column="monitorConverterNum" jdbcType="INTEGER" property="monitorconverternum" />
<result column="monitorConverterRate" jdbcType="DECIMAL" property="monitorconverterrate" />
<result column="onlineAlternatingBusNum" jdbcType="INTEGER" property="onlinealternatingbusnum" />
<result column="onlineConverterNum" jdbcType="INTEGER" property="onlineconverternum" />
<result column="provinceName" jdbcType="VARCHAR" property="provincename" />
<result column="provinceId" jdbcType="VARCHAR" property="provinceid" />
<result column="statisticalDate" jdbcType="VARCHAR" property="statisticaldate" />
<result column="statisticalType" jdbcType="VARCHAR" property="statisticaltype" />
<result column="statisticalLevel" jdbcType="VARCHAR" property="statisticallevel" />
<result column="abnormalConverterCount" jdbcType="INTEGER" property="abnormalconvertercount" />
<result column="monitorConverterCount" jdbcType="INTEGER" property="monitorconvertercount" />
<result column="abnormalBusCount" jdbcType="INTEGER" property="abnormalbuscount" />
<result column="monitorAlternatingBusCount" jdbcType="INTEGER" property="monitoralternatingbuscount" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, abnormalBusAvgRate, abnormalBusNum, abnormalBusRate, abnormalConverterAvgRate,
abnormalConverterNum, abnormalConverterRate, cityId, cityName, monitorAlternatingBusNum,
monitorAlternatingBusRate, monitorConverterNum, monitorConverterRate, onlineAlternatingBusNum,
onlineConverterNum, provinceName, provinceId, statisticalDate, statisticalType, statisticalLevel,
abnormalConverterCount, monitorConverterCount, abnormalBusCount, monitorAlternatingBusCount
</sql>
</mapper>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.send.PqTypicalSourceCreatePOMapper">
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, statisticalDate, statisticalLevel, statisticalType, indexType, provinceId, provinceName,
cityId, cityName, countyId, countyName, industryType, interferenceSourceNum, averageOvDays,
flickerAvgOvRate, flickerOvNum, flickerOvRate, iAvgOvRate, iOvNum, iOvRate, inseqAvgOvRate,
inseqOvNum, inseqOvRate, monitorNum, monitoringRate, ovNum, ovRate, unbanOvNum, unbanOvRate,
vAvgOvRate, vOvNum, vOvRate, unbanAvgOvRate, ovDayCount
</sql>
</mapper>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.send.SubstationQualityStatisticsPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.send.SubstationQualityStatisticsPO">
<!--@mbg.generated-->
<!--@Table substation_quality_statistics-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="statisticalDate" jdbcType="VARCHAR" property="statisticaldate" />
<result column="statisticalType" jdbcType="VARCHAR" property="statisticaltype" />
<result column="provinceId" jdbcType="VARCHAR" property="provinceid" />
<result column="provinceName" jdbcType="VARCHAR" property="provincename" />
<result column="cityId" jdbcType="VARCHAR" property="cityid" />
<result column="cityName" jdbcType="VARCHAR" property="cityname" />
<result column="countyId" jdbcType="VARCHAR" property="countyid" />
<result column="countyName" jdbcType="VARCHAR" property="countyname" />
<result column="converterId" jdbcType="VARCHAR" property="converterid" />
<result column="converterName" jdbcType="VARCHAR" property="convertername" />
<result column="voltageLevel" jdbcType="VARCHAR" property="voltagelevel" />
<result column="busId" jdbcType="VARCHAR" property="busid" />
<result column="busName" jdbcType="VARCHAR" property="busname" />
<result column="busVoltageLevel" jdbcType="VARCHAR" property="busvoltagelevel" />
<result column="monitorId" jdbcType="VARCHAR" property="monitorid" />
<result column="effectiveMonitorNum" jdbcType="INTEGER" property="effectivemonitornum" />
<result column="harmvOvDay" jdbcType="INTEGER" property="harmvovday" />
<result column="monthsCount" jdbcType="INTEGER" property="monthscount" />
<result column="monthOvDays" jdbcType="DECIMAL" property="monthovdays" />
<result column="oddVoltLimit" jdbcType="DECIMAL" property="oddvoltlimit" />
<result column="totalOvDays" jdbcType="INTEGER" property="totalovdays" />
<result column="v11" jdbcType="DECIMAL" property="v11" />
<result column="v13" jdbcType="DECIMAL" property="v13" />
<result column="v23" jdbcType="DECIMAL" property="v23" />
<result column="v25" jdbcType="DECIMAL" property="v25" />
<result column="v3" jdbcType="DECIMAL" property="v3" />
<result column="v5" jdbcType="DECIMAL" property="v5" />
<result column="v7" jdbcType="DECIMAL" property="v7" />
<result column="vthd" jdbcType="DECIMAL" property="vthd" />
<result column="vthdLimit" jdbcType="DECIMAL" property="vthdlimit" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, statisticalDate, statisticalType, provinceId, provinceName, cityId, cityName,
countyId, countyName, converterId, converterName, voltageLevel, busId, busName, busVoltageLevel,
monitorId, effectiveMonitorNum, harmvOvDay, monthsCount, monthOvDays, oddVoltLimit,
totalOvDays, v11, v13, v23, v25, v3, v5, v7, vthd, vthdLimit
</sql>
</mapper>

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.send;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.send.ConverterdetailstatisticsPO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/12/11 11:35【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface ConverterdetailstatisticsPOService extends IService<ConverterdetailstatisticsPO>{
void handlerDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,20 @@
package com.njcn.prepare.harmonic.service.mysql.send;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.send.PqTypicalSourceCreatePO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/12/12 15:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface PqTypicalSourceCreatePOService extends IService<PqTypicalSourceCreatePO>{
void handlerDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,19 @@
package com.njcn.prepare.harmonic.service.mysql.send;
import com.njcn.harmonic.pojo.po.send.SubstationQualityStatisticsPO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/12/7 16:21【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface SubstationQualityStatisticsPOService extends IService<SubstationQualityStatisticsPO>{
void handleDay(CalculatedParam<String> calculatedParam);
}

View File

@@ -0,0 +1,290 @@
package com.njcn.prepare.harmonic.service.mysql.send.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pms.api.PmsGeneratrixClient;
import com.njcn.device.pms.api.StatationStatClient;
import com.njcn.device.pms.pojo.dto.PmsGeneratrixDTO;
import com.njcn.device.pms.pojo.param.PmsBaseParam;
import com.njcn.device.pms.pojo.param.PmsGeneratrixParam;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.StatationStat;
import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.send.ConverterdetailstatisticsPO;
import com.njcn.prepare.harmonic.mapper.mysql.send.ConverterdetailstatisticsPOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
import com.njcn.prepare.harmonic.service.mysql.line.RMpEventDetailDService;
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
import com.njcn.prepare.harmonic.service.mysql.send.ConverterdetailstatisticsPOService;
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 com.njcn.user.pojo.vo.PvTerminalTreeVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/12/11 11:35【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class ConverterdetailstatisticsPOServiceImpl extends ServiceImpl<ConverterdetailstatisticsPOMapper, ConverterdetailstatisticsPO> implements ConverterdetailstatisticsPOService{
private final MonitorClient monitorClient;
private final DeptFeignClient deptFeignClient;
private final StatationStatClient statationStatClient;
private final PmsGeneratrixClient pmsGeneratrixClient;
private final DicDataFeignClient dicDataFeignClient;
private final IRStatLimitRateDService irStatLimitRateDService;
private final ROperatingMonitorService rOperatingMonitorService;
private final RMpEventDetailDService rMpEventDetailDService;
@Override
public void handlerDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<ConverterdetailstatisticsPO> converterdetailstatisticsPOList = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
List<DictData> supvVoltageDicList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData();
//过滤交流电压等级
List<String> exchangeList = supvVoltageDicList.stream().filter(temp -> temp.getName().contains("交流")).map(DictData::getId).collect(Collectors.toList());
Map<String, DictData> mapVoltage = supvVoltageDicList.stream().collect(Collectors.toMap(DictData::getId, Function.identity()));
List<StatationStat> stationList = statationStatClient.getstatationStatList(new PmsBaseParam()).getData();
List<DictData> data1 = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_STATE.getCode()).getData();
DictData run = data1.stream().filter(temp->Objects.equals(temp.getCode(),DicDataEnum.RUN.getCode())).findFirst().get();
List<PvTerminalTreeVO> deptList = deptFeignClient.allDeptList().getData();
Map<String, PvTerminalTreeVO> mapCode = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getCode, Function.identity()));
Map<String, PvTerminalTreeVO> mapList = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getId, Function.identity()));
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
ConverterdetailstatisticsPO converterdetailstatisticsPO = new ConverterdetailstatisticsPO();
converterdetailstatisticsPO.setStatisticalDate(calculatedParam.getDataDate());
converterdetailstatisticsPO.setStatisticalType("03");
if (mapCode.containsKey(deptGetChildrenMoreDTO.getUnitId())) {
PvTerminalTreeVO pvTerminalTreeVO = mapCode.get(deptGetChildrenMoreDTO.getUnitId());
String[] split = (pvTerminalTreeVO.getPids() + StrUtil.COMMA + pvTerminalTreeVO.getId())
.split(StrUtil.COMMA);
if (split.length != 4) {
continue;
}
for (int i = 2; i < split.length; i++) {
//省
if (i == 2) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
converterdetailstatisticsPO.setProvinceName(pvTerminalTreeVO.getName());
converterdetailstatisticsPO.setProvinceId(pvTerminalTreeVO.getCode());
converterdetailstatisticsPO.setStatisticalLevel("3");
}
}
//市
if (i == 3) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
converterdetailstatisticsPO.setCityName(pvTerminalTreeVO.getName());
converterdetailstatisticsPO.setCityId(pvTerminalTreeVO.getCode());
converterdetailstatisticsPO.setStatisticalLevel("4");
}
}
}
}
converterdetailstatisticsPO.setId(converterdetailstatisticsPO.getCityId()+"-"+calculatedParam.getDataDate());
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
List<String> tempLineList = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
List<Monitor> tempMonitor = monitorClient.getMonitorList(tempLineList).getData();
tempMonitor = tempMonitor.stream().filter(temp -> Objects.equals(temp.getMonitorState(), run.getId())).collect(Collectors.toList());
List<String> tempIds = tempMonitor.stream().map(Monitor::getId).collect(Collectors.toList());
List<String> generatrixIds = tempMonitor.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
List<String> powerrIds = tempMonitor.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
PmsGeneratrixParam pmsGeneratrixParam = new PmsGeneratrixParam();
pmsGeneratrixParam.setGeneratrixIds(generatrixIds);
List<PmsGeneratrixDTO> data = pmsGeneratrixClient.getGeneratrixInfo(pmsGeneratrixParam).getData();
List<String> exchangelineIds = data.stream().filter(temp -> exchangeList.contains(temp.getGeneratrixVoltageLevel())).
map(PmsGeneratrixDTO::getGeneratrixId).collect(Collectors.toList());
converterdetailstatisticsPO.setOnlineAlternatingBusNum(exchangelineIds.size());
converterdetailstatisticsPO.setOnlineConverterNum(powerrIds.size());
//监测监测点
List<ROperatingMonitorDPO> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(tempIds)) {
list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, tempIds).
eq(ROperatingMonitorDPO::getDataDate, calculatedParam.getDataDate()).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
}
//
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).collect(Collectors.toList());
//监测监测点
List<Monitor> supervisLines = tempMonitor.stream().filter(temp -> collect.contains(temp.getId())).distinct().collect(Collectors.toList());
List<String> supervispowerrIds = supervisLines.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
List<String> supervisgeneratrixIds = supervisLines.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
List<String> supervisexchangelineIds = data.stream().filter(temp -> supervisgeneratrixIds.contains(temp.getGeneratrixVoltageLevel())).
map(PmsGeneratrixDTO::getGeneratrixId).collect(Collectors.toList());
converterdetailstatisticsPO.setMonitorAlternatingBusCount(supervisexchangelineIds.size());
converterdetailstatisticsPO.setMonitorConverterCount(supervispowerrIds.size());
converterdetailstatisticsPO.setMonitorAlternatingBusNum(supervisexchangelineIds.size());
converterdetailstatisticsPO.setMonitorConverterNum(supervispowerrIds.size());
//发生暂态,稳态的监测点集合
List<String> abnormallines;
if (!CollectionUtils.isEmpty(tempIds)) {
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.lambdaQuery().in(RStatLimitRateDPO::getLineId,tempIds).eq(RStatLimitRateDPO::getTime,localDate).eq(RStatLimitRateDPO::getPhasicType,"T").list();
List<RMpEventDetailDPO> rMpEventDetailDPOList = rMpEventDetailDService.lambdaQuery().in(RMpEventDetailDPO::getMeasurementPointId, tempIds).eq(RMpEventDetailDPO::getDataDate, localDate).list();
List<String> limitIds = rStatLimitRateDPOS.stream().filter(temp ->
(temp.getVoltageDevOvertime() +
temp.getFlickerOvertime() +
temp.getUbalanceOvertime() +
temp.getUharm2Overtime() +
temp.getUharm3Overtime() +
temp.getUharm4Overtime() +
temp.getUharm5Overtime() +
temp.getUharm6Overtime() +
temp.getUharm7Overtime() +
temp.getUharm8Overtime() +
temp.getUharm9Overtime() +
temp.getUharm10Overtime() +
temp.getUharm11Overtime() +
temp.getUharm12Overtime() +
temp.getUharm13Overtime() +
temp.getUharm14Overtime() +
temp.getUharm15Overtime() +
temp.getUharm16Overtime() +
temp.getUharm17Overtime() +
temp.getUharm18Overtime() +
temp.getUharm19Overtime() +
temp.getUharm20Overtime() +
temp.getUharm21Overtime() +
temp.getUharm22Overtime() +
temp.getUharm23Overtime() +
temp.getUharm24Overtime() +
temp.getUharm25Overtime() +
temp.getIharm2Overtime() +
temp.getIharm3Overtime() +
temp.getIharm4Overtime() +
temp.getIharm5Overtime() +
temp.getIharm6Overtime() +
temp.getIharm7Overtime() +
temp.getIharm8Overtime() +
temp.getIharm9Overtime() +
temp.getIharm10Overtime() +
temp.getIharm11Overtime() +
temp.getIharm12Overtime() +
temp.getIharm13Overtime() +
temp.getIharm14Overtime() +
temp.getIharm15Overtime() +
temp.getIharm16Overtime() +
temp.getIharm17Overtime() +
temp.getIharm18Overtime() +
temp.getIharm19Overtime() +
temp.getIharm20Overtime() +
temp.getIharm21Overtime() +
temp.getIharm22Overtime() +
temp.getIharm23Overtime() +
temp.getIharm24Overtime() +
temp.getIharm25Overtime() +
temp.getInuharm1Overtime() +
temp.getInuharm2Overtime() +
temp.getInuharm3Overtime() +
temp.getInuharm4Overtime() +
temp.getInuharm5Overtime() +
temp.getInuharm6Overtime() +
temp.getInuharm7Overtime() +
temp.getInuharm8Overtime() +
temp.getInuharm9Overtime() +
temp.getInuharm10Overtime() +
temp.getInuharm11Overtime() +
temp.getInuharm12Overtime() +
temp.getInuharm13Overtime() +
temp.getInuharm14Overtime() +
temp.getInuharm15Overtime() +
temp.getInuharm16Overtime() +
temp.getFreqDevOvertime() +
temp.getINegOvertime()) > 0
).map(RStatLimitRateDPO::getLineId).distinct().collect(Collectors.toList());
List<String> eventLineIds = rMpEventDetailDPOList.stream().filter(temp -> (temp.getInterruptTimes() +
temp.getSagTimes() +
temp.getSwellTimes()) > 0).map(RMpEventDetailDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
limitIds.retainAll(eventLineIds);
abnormallines = limitIds;
} else {
abnormallines = new ArrayList<>();
}
List<Monitor> abnormalmonitor = tempMonitor.stream().filter(temp -> abnormallines.contains(temp.getId())).distinct().collect(Collectors.toList());
List<String> abnormalpowerrIds = supervisLines.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
List<String> abnormalgeneratrixIds = supervisLines.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
converterdetailstatisticsPO.setAbnormalBusNum(abnormalgeneratrixIds.size());
converterdetailstatisticsPO.setAbnormalBusCount(abnormalgeneratrixIds.size());
converterdetailstatisticsPO.setAbnormalConverterCount(abnormalpowerrIds.size());
converterdetailstatisticsPO.setAbnormalConverterNum(abnormalpowerrIds.size());
converterdetailstatisticsPO.setAbnormalBusRate(divideAndRound(converterdetailstatisticsPO.getAbnormalBusNum(),generatrixIds.size()));
converterdetailstatisticsPO.setAbnormalBusAvgRate(divideAndRound(converterdetailstatisticsPO.getAbnormalBusNum(),generatrixIds.size()));
converterdetailstatisticsPO.setAbnormalConverterRate(divideAndRound(converterdetailstatisticsPO.getAbnormalConverterNum(),powerrIds.size()));
converterdetailstatisticsPO.setAbnormalConverterAvgRate(divideAndRound(converterdetailstatisticsPO.getAbnormalConverterNum(),powerrIds.size()));
converterdetailstatisticsPO.setMonitorConverterRate(divideAndRound(converterdetailstatisticsPO.getMonitorConverterNum(),powerrIds.size()));
converterdetailstatisticsPO.setMonitorAlternatingBusRate(divideAndRound(converterdetailstatisticsPO.getMonitorAlternatingBusNum(),generatrixIds.size()));
}
converterdetailstatisticsPOList.add(converterdetailstatisticsPO);
}
if(!CollectionUtils.isEmpty(converterdetailstatisticsPOList)){
this.saveOrUpdateBatch(converterdetailstatisticsPOList);
}
}
/**
* @Description: divideAndRound
* @Param: 两个int做除法返回BigDecimal保留2位小数 考虑到被除数为0的情况
* @return: java.math.BigDecimal
* @Author: clam
* @Date: 2023/12/12
*/
public BigDecimal divideAndRound(Integer a, Integer b) {
if (b == 0) {
return BigDecimal.valueOf(0.00);
}
BigDecimal num1 = new BigDecimal(a);
BigDecimal num2 = new BigDecimal(b);
BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP);
return result;
}
}

View File

@@ -0,0 +1,294 @@
package com.njcn.prepare.harmonic.service.mysql.send.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
import com.njcn.harmonic.pojo.po.send.PqTypicalSourceCreatePO;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.send.PqTypicalSourceCreatePOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
import com.njcn.prepare.harmonic.service.mysql.send.PqTypicalSourceCreatePOService;
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 com.njcn.user.pojo.vo.PvTerminalTreeVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/12/12 15:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class PqTypicalSourceCreatePOServiceImpl extends ServiceImpl<PqTypicalSourceCreatePOMapper, PqTypicalSourceCreatePO> implements PqTypicalSourceCreatePOService{
private final DeptFeignClient deptFeignClient;
private final DicDataFeignClient dicDataFeignClient;
private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper;
private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper;
private final ROperatingMonitorService rOperatingMonitorService;
/*
*01 电压
*02 长时间闪变
*03 三相电压不平衡
*04 电压总谐波畸变率
*05 各次谐波电压
*06 负序电流
*
* */
@Override
public void handlerDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<PqTypicalSourceCreatePO> pqTypicalSourceCreatePOList = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
QueryWrapper<RMpPartHarmonicDetailD> queryWrapper = new QueryWrapper<>();
QueryWrapper<RMpSurplusHarmonicDetailD> rMpSurplusHarmonicDetailDQueryWrapper = new QueryWrapper<>();
List<PvTerminalTreeVO> deptList = deptFeignClient.allDeptList().getData();
Map<String, PvTerminalTreeVO> mapCode = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getCode, Function.identity()));
Map<String, PvTerminalTreeVO> mapList = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getId, Function.identity()));
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
List<String> collect1 = deptGetChildrenMoreDTO.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
//站内有效监测点数量
Integer effectiveMonitorNum;
List<RMpPartHarmonicDetailD> rMpPartHarmonicDetailDS;
List<RMpSurplusHarmonicDetailD> rMpSurplusHarmonicDetailDS;
if (!CollectionUtils.isEmpty(collect1)) {
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, collect1).
eq(ROperatingMonitorDPO::getDataDate, calculatedParam.getDataDate()).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
effectiveMonitorNum = list.size();
queryWrapper.clear();
queryWrapper.
in("measurement_point_id",collect1).
eq("data_date",localDate);
rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailDQueryWrapper.clear();
rMpSurplusHarmonicDetailDQueryWrapper.
in("measurement_point_id",collect1).
eq("data_date",localDate);
rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper);
} else {
rMpSurplusHarmonicDetailDS = new ArrayList<>();
rMpPartHarmonicDetailDS = new ArrayList<>();
effectiveMonitorNum = 0;
}
// rStatOrgDPOQueryWrapper.clear();
// rStatOrgDPOQueryWrapper.select("effective_measurement").
// eq("org_no",deptGetChildrenMoreDTO.getUnitId()).
// eq("data_type",dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
// eq("data_date",localDate);
// RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper);
indicatorTypeDate.forEach(dictData -> {
if(Objects.equals(dictData.getCode(), DicDataEnum.HARMONIC_VOLTAGE.getCode())||
Objects.equals(dictData.getCode(), DicDataEnum.FLICKER.getCode())||
Objects.equals(dictData.getCode(), DicDataEnum.phase_Voltage.getCode())||
// Objects.equals(dictData.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())||
Objects.equals(dictData.getCode(), DicDataEnum.NEG_CURRENT.getCode()
)){
PqTypicalSourceCreatePO pqTypicalSourceCreatePO = new PqTypicalSourceCreatePO();
pqTypicalSourceCreatePO = initPqTypicalSourceCreatePO(pqTypicalSourceCreatePO,dictData.getCode(),rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS,collect1.size());
pqTypicalSourceCreatePO.setStatisticalDate(calculatedParam.getDataDate());
pqTypicalSourceCreatePO.setStatisticalType("03");
pqTypicalSourceCreatePO.setMonitorNum(effectiveMonitorNum);
pqTypicalSourceCreatePO.setMonitoringRate(divideAndRound(effectiveMonitorNum,collect1.size()));
if (mapCode.containsKey(deptGetChildrenMoreDTO.getUnitId())) {
PvTerminalTreeVO pvTerminalTreeVO = mapCode.get(deptGetChildrenMoreDTO.getUnitId());
String[] split = (pvTerminalTreeVO.getPids() + StrUtil.COMMA + pvTerminalTreeVO.getId())
.split(StrUtil.COMMA);
if (split.length <3) {
return;
}
for (int i = 2; i < split.length; i++) {
//省
if (i == 2) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
pqTypicalSourceCreatePO.setProvinceName(pvTerminalTreeVO.getName());
pqTypicalSourceCreatePO.setProvinceId(pvTerminalTreeVO.getCode());
pqTypicalSourceCreatePO.setStatisticalLevel("3");
}
}
//市
if (i == 3) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
pqTypicalSourceCreatePO.setCityName(pvTerminalTreeVO.getName());
pqTypicalSourceCreatePO.setCityId(pvTerminalTreeVO.getCode());
pqTypicalSourceCreatePO.setStatisticalLevel("4");
}
}
//县
if (i == 4) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
pqTypicalSourceCreatePO.setCountyName(pvTerminalTreeVO.getName());
pqTypicalSourceCreatePO.setCountyId(pvTerminalTreeVO.getCode());
pqTypicalSourceCreatePO.setStatisticalLevel("5");
}
}
}
}
pqTypicalSourceCreatePO.setId(deptGetChildrenMoreDTO.getUnitId()+"-"+pqTypicalSourceCreatePO.getIndexType()+"-"+calculatedParam.getDataDate());
pqTypicalSourceCreatePOList.add(pqTypicalSourceCreatePO);
}
});
}
if(!CollectionUtils.isEmpty(pqTypicalSourceCreatePOList)){
this.saveOrUpdateBatch(pqTypicalSourceCreatePOList);
}
}
private PqTypicalSourceCreatePO initPqTypicalSourceCreatePO(PqTypicalSourceCreatePO pqTypicalSourceCreatePO,
String code,
List<RMpPartHarmonicDetailD> rMpPartHarmonicDetailDS,
List<RMpSurplusHarmonicDetailD> rMpSurplusHarmonicDetailDS,
int count) {
BigDecimal initialvalue = new BigDecimal(0.00);
pqTypicalSourceCreatePO.setInterferenceSourceNum(count);
pqTypicalSourceCreatePO.setFlickerOvNum(0);
pqTypicalSourceCreatePO.setFlickerOvRate(initialvalue);
pqTypicalSourceCreatePO.setFlickerAvgOvRate(initialvalue);
pqTypicalSourceCreatePO.setIOvNum(0);
pqTypicalSourceCreatePO.setIOvRate(initialvalue);
pqTypicalSourceCreatePO.setIAvgOvRate(initialvalue);
//负序电流
int inseqOvNum = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsINeg()==1).count()+"");
pqTypicalSourceCreatePO.setInseqOvNum(inseqOvNum);
pqTypicalSourceCreatePO.setInseqOvRate(divideAndRound(inseqOvNum,count));
pqTypicalSourceCreatePO.setInseqAvgOvRate(divideAndRound(inseqOvNum,count));
pqTypicalSourceCreatePO.setUnbanOvNum(0);
pqTypicalSourceCreatePO.setUnbanOvRate(initialvalue);
pqTypicalSourceCreatePO.setUnbanAvgOvRate(initialvalue);
pqTypicalSourceCreatePO.setVOvNum(0);
pqTypicalSourceCreatePO.setVOvRate(initialvalue);
pqTypicalSourceCreatePO.setVAvgOvRate(initialvalue);
//稳态指标是否超标(0:否 1:是)
int ovNum = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsHarmonic()==1).count()+"");
pqTypicalSourceCreatePO.setOvNum(ovNum);
pqTypicalSourceCreatePO.setOvRate(divideAndRound(ovNum,count));
if(ovNum>0){
pqTypicalSourceCreatePO.setOvDayCount(1);
pqTypicalSourceCreatePO.setAverageOvDays(new BigDecimal(1.00));
}else {
pqTypicalSourceCreatePO.setOvDayCount(0);
pqTypicalSourceCreatePO.setAverageOvDays(initialvalue);
}
if (Objects.equals(code,DicDataEnum.FLICKER.getCode())) {
pqTypicalSourceCreatePO.setIndexType("02");
int value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsFlicker()==1).count()+"");
pqTypicalSourceCreatePO.setFlickerOvNum(value);
pqTypicalSourceCreatePO.setFlickerOvRate(divideAndRound(value,count));
pqTypicalSourceCreatePO.setFlickerAvgOvRate(divideAndRound(value,count));
} else if (Objects.equals(code,DicDataEnum.NEG_CURRENT.getCode())) {
pqTypicalSourceCreatePO.setIndexType("06");
int value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsINeg()==1).count()+"");
pqTypicalSourceCreatePO.setInseqOvNum(value);
pqTypicalSourceCreatePO.setInseqOvRate(divideAndRound(value,count));
pqTypicalSourceCreatePO.setInseqAvgOvRate(divideAndRound(value,count));
}
// else if (Objects.equals(code,DicDataEnum.HARMONIC_CURRENT.getCode())) {
// pqTypicalSourceCreatePO.setIndexType("02");
//
// }
else if (Objects.equals(code,DicDataEnum.phase_Voltage.getCode())) {
int value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsUnbalance()==1).count()+"");
pqTypicalSourceCreatePO.setIndexType("03");
pqTypicalSourceCreatePO.setUnbanOvNum(value);
pqTypicalSourceCreatePO.setUnbanOvRate(divideAndRound(value,count));
pqTypicalSourceCreatePO.setUnbanAvgOvRate(divideAndRound(value,count));
} else if (Objects.equals(code,DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
int value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsV()==1).count()+"");
pqTypicalSourceCreatePO.setIndexType("01");
pqTypicalSourceCreatePO.setVOvNum(value);
pqTypicalSourceCreatePO.setVOvRate(divideAndRound(value,count));
pqTypicalSourceCreatePO.setVAvgOvRate(divideAndRound(value,count));
}
return pqTypicalSourceCreatePO;
}
/**
* @Description: divideAndRound
* @Param: 两个int做除法返回BigDecimal保留2位小数 考虑到被除数为0的情况
* @return: java.math.BigDecimal
* @Author: clam
* @Date: 2023/12/12
*/
public BigDecimal divideAndRound(Integer a, Integer b) {
if (b == 0) {
return BigDecimal.valueOf(0.00);
}
BigDecimal num1 = new BigDecimal(a);
BigDecimal num2 = new BigDecimal(b);
BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP);
return result;
}
}

View File

@@ -0,0 +1,208 @@
package com.njcn.prepare.harmonic.service.mysql.send.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pms.api.StatationStatClient;
import com.njcn.device.pms.pojo.param.PmsBaseParam;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.StatationStat;
import com.njcn.harmonic.pojo.po.day.RStatDataVDPO;
import com.njcn.harmonic.pojo.po.send.SubstationQualityStatisticsPO;
import com.njcn.prepare.harmonic.mapper.mysql.send.SubstationQualityStatisticsPOMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.pojo.po.RStatSubstationMPO;
import com.njcn.prepare.harmonic.service.mysql.day.IRStatDataVDService;
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatSubstationMPOService;
import com.njcn.prepare.harmonic.service.mysql.send.SubstationQualityStatisticsPOService;
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 com.njcn.user.pojo.vo.PvTerminalTreeVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2023/12/7 16:21【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class SubstationQualityStatisticsPOServiceImpl extends ServiceImpl<SubstationQualityStatisticsPOMapper, SubstationQualityStatisticsPO> implements SubstationQualityStatisticsPOService{
private final MonitorClient monitorClient;
private final DeptFeignClient deptFeignClient;
private final StatationStatClient statationStatClient;
// private final PmsGeneratrixClient pmsGeneratrixClient;
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatDataVDService IRStatDataVDService;
private final RStatSubstationMPOService rStatSubstationMPOService;
@Override
public void handleDay(CalculatedParam<String> calculatedParam) {
List<SubstationQualityStatisticsPO> substationQualityStatisticsPOList = new ArrayList<>();
List<Monitor> monitorList = monitorClient.getMonitorList(new ArrayList<>()).getData();
// List<GeneratrixAndPowerStationDTO> pmsGeneratrixDTOList = pmsGeneratrixClient.getGeneratrixAndPowerStationInfo(new PmsGeneratrixParam()).getData();
List<StatationStat> stationList = statationStatClient.getstatationStatList(new PmsBaseParam()).getData();
List<PvTerminalTreeVO> deptList = deptFeignClient.allDeptList().getData();
Map<String, PvTerminalTreeVO> mapCode = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getCode, Function.identity()));
Map<String, PvTerminalTreeVO> mapList = deptList.stream().collect(Collectors.toMap(PvTerminalTreeVO::getId, Function.identity()));
DateTime begin = DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
DateTime end = DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
//日date
// LocalDate date = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(),DatePattern.NORM_DATE_PATTERN);
//月date
LocalDate localDate = LocalDateTimeUtil.parseDate( DateUtil.format(begin, DatePattern.NORM_DATE_PATTERN), DatePattern.NORM_DATE_PATTERN);
List<DictData> supvVoltageDicList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData();
Map<String, DictData> mapVoltage = supvVoltageDicList.stream().collect(Collectors.toMap(DictData::getId, Function.identity()));
DictData run = dicDataFeignClient.getDicDataByCode(DicDataEnum.RUN.getCode()).getData();
for (StatationStat temp : stationList) {
SubstationQualityStatisticsPO substationQualityStatisticsPO = new SubstationQualityStatisticsPO();
// List<GeneratrixAndPowerStationDTO> tempGeneratrixDTOList = pmsGeneratrixDTOList.stream().filter(pmsGeneratrixDTO -> Objects.equals(pmsGeneratrixDTO.getPowerId(), temp.getPowerId())).collect(Collectors.toList());
List<Monitor> tempMonitorList = monitorList.stream().filter(monitor -> Objects.equals(monitor.getPowerrId(), temp.getPowerId())).collect(Collectors.toList());
List<String> monitorIdList = tempMonitorList.stream().map(Monitor::getId).collect(Collectors.toList());
substationQualityStatisticsPO.setStatisticalDate(calculatedParam.getDataDate());
substationQualityStatisticsPO.setStatisticalType("03");
if (mapCode.containsKey(temp.getOrgId())) {
PvTerminalTreeVO pvTerminalTreeVO = mapCode.get(temp.getOrgId());
String[] split = (pvTerminalTreeVO.getPids() + StrUtil.COMMA + pvTerminalTreeVO.getId())
.split(StrUtil.COMMA);
for (int i = 2; i < split.length; i++) {
//省
if (i == 2) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
substationQualityStatisticsPO.setProvinceName(pvTerminalTreeVO.getName());
substationQualityStatisticsPO.setProvinceId(pvTerminalTreeVO.getCode());
}
}
//市
if (i == 3) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
substationQualityStatisticsPO.setCityName(pvTerminalTreeVO.getName());
substationQualityStatisticsPO.setCityId(pvTerminalTreeVO.getCode());
}
}
//县
if (i == 4) {
if (mapList.containsKey(split[i])) {
pvTerminalTreeVO = mapList.get(split[i]);
substationQualityStatisticsPO.setCountyName(pvTerminalTreeVO.getName());
substationQualityStatisticsPO.setCountyId(pvTerminalTreeVO.getCode());
}
}
}
}
substationQualityStatisticsPO.setConverterId(temp.getPowerId());
substationQualityStatisticsPO.setConverterName(temp.getPowerName());
substationQualityStatisticsPO.setId(temp.getPowerId()+"-"+calculatedParam.getDataDate());
//电站等级
if (mapVoltage.containsKey(temp.getVoltageLevel())) {
substationQualityStatisticsPO.setVoltageLevel(String.format("%02d", mapVoltage.get(temp.getVoltageLevel()).getAlgoDescribe()));
}
substationQualityStatisticsPO.setBusId("");
substationQualityStatisticsPO.setBusName("");
substationQualityStatisticsPO.setBusVoltageLevel("");
substationQualityStatisticsPO.setMonitorId("");
//站内有效监测点数量
Integer effectiveMonitorNum = 0;
if (!CollectionUtils.isEmpty(monitorIdList)) {
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, monitorIdList).
eq(ROperatingMonitorDPO::getDataDate, calculatedParam.getDataDate()).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
effectiveMonitorNum = list.size();
}
substationQualityStatisticsPO.setEffectiveMonitorNum(effectiveMonitorNum);
//换流站电压等级》500kv奇次谐波电压限值为1.6压总谐波畸变率95%概率值限值为2.0
substationQualityStatisticsPO.setOddVoltLimit(BigDecimal.valueOf(1.6).setScale(1,BigDecimal.ROUND_HALF_UP));
substationQualityStatisticsPO.setVthdLimit(BigDecimal.valueOf(2.0).setScale(1,BigDecimal.ROUND_HALF_UP));
RStatSubstationMPO one = rStatSubstationMPOService.lambdaQuery().eq(RStatSubstationMPO::getSubstationId, temp.getPowerId()).eq(RStatSubstationMPO::getDataDate, localDate).one();
if (!Objects.isNull(one)){
substationQualityStatisticsPO.setHarmvOvDay(one.getVOverDay().intValue());
substationQualityStatisticsPO.setMonthsCount(localDate.getMonthValue());
substationQualityStatisticsPO.setMonthOvDays(BigDecimal.valueOf(one.getVOverDay()));
substationQualityStatisticsPO.setTotalOvDays(one.getHarmonicOverDay().intValue());
}
if (!CollectionUtils.isEmpty(monitorIdList)) {
List<RStatDataVDPO> cp95 = IRStatDataVDService.lambdaQuery().
in(RStatDataVDPO::getLineId, monitorIdList).
eq(RStatDataVDPO::getTime, calculatedParam.getDataDate()).
eq(RStatDataVDPO::getValueType, "CP95").list();
if (!CollectionUtils.isEmpty(cp95)) {
double vthd = cp95.stream().mapToDouble(RStatDataVDPO::getVThd).average().getAsDouble();
substationQualityStatisticsPO.setVthd(BigDecimal.valueOf(vthd).setScale(1,BigDecimal.ROUND_HALF_UP));
double v3 = cp95.stream().mapToDouble(RStatDataVDPO::getVThd).average().getAsDouble();
substationQualityStatisticsPO.setV3(BigDecimal.valueOf(v3).setScale(1,BigDecimal.ROUND_HALF_UP));
double v5 = cp95.stream().mapToDouble(RStatDataVDPO::getV5).average().getAsDouble();
substationQualityStatisticsPO.setV5(BigDecimal.valueOf(v5).setScale(1,BigDecimal.ROUND_HALF_UP));
double v7 = cp95.stream().mapToDouble(RStatDataVDPO::getV7).average().getAsDouble();
substationQualityStatisticsPO.setV7(BigDecimal.valueOf(v7).setScale(1,BigDecimal.ROUND_HALF_UP));
double v11 = cp95.stream().mapToDouble(RStatDataVDPO::getV11).average().getAsDouble();
substationQualityStatisticsPO.setV11(BigDecimal.valueOf(v11).setScale(1,BigDecimal.ROUND_HALF_UP));
double v13 = cp95.stream().mapToDouble(RStatDataVDPO::getV13).average().getAsDouble();
substationQualityStatisticsPO.setV13(BigDecimal.valueOf(v13).setScale(1,BigDecimal.ROUND_HALF_UP));
double v23 = cp95.stream().mapToDouble(RStatDataVDPO::getV23).average().getAsDouble();
substationQualityStatisticsPO.setV23(BigDecimal.valueOf(v23).setScale(1,BigDecimal.ROUND_HALF_UP));
double v25 = cp95.stream().mapToDouble(RStatDataVDPO::getV25).average().getAsDouble();
substationQualityStatisticsPO.setV25(BigDecimal.valueOf(v25).setScale(1,BigDecimal.ROUND_HALF_UP));
}
}
substationQualityStatisticsPOList.add(substationQualityStatisticsPO);
}
if(!CollectionUtils.isEmpty(substationQualityStatisticsPOList)){
this.saveOrUpdateBatch(substationQualityStatisticsPOList);
}
}
}