算法提交
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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***********************************************************/
|
||||
|
||||
@@ -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> {
|
||||
}
|
||||
@@ -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> {
|
||||
}
|
||||
@@ -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> {
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user