修改算法

This commit is contained in:
huangzj
2023-11-22 13:33:46 +08:00
parent 0bb6fb9912
commit d0a816f982
18 changed files with 685 additions and 13 deletions

View File

@@ -21,7 +21,7 @@ import lombok.Data;
*/ */
@Data @Data
@TableName(value = "r_dim_bus_target_d") @TableName(value = "r_dim_bus_target_d")
public class RDimBusTargetDPO extends BaseEntity { public class RDimBusTargetDPO {
@MppMultiId(value = "Org_Id") @MppMultiId(value = "Org_Id")
private String orgId; private String orgId;

View File

@@ -0,0 +1,84 @@
package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDate;
import java.time.LocalDateTime;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
/**
*
* Description:
* Date: 2023/11/21 13:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@TableName(value = "r_dim_busbar_harmnic_d")
public class RDimBusbarHarmnicDPO {
/**
* 单位code
*/
@MppMultiId(value = "Org_Id")
private String orgId;
/**
* 统计时间 yyyy-mm-dd
*/
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate;
/**
* 母线id
*/
@MppMultiId(value = "BusBar_Id")
private String busbarId;
/**
* 稳态指标类型
*/
@MppMultiId(value = "Target_type")
private String targetType;
/**
* 电压等级
*/
@TableField(value = "Voltage_level")
private String voltageLevel;
/**
* 监测对象类型
*/
@TableField(value = "Monitor_Tag")
private String monitorTag;
/**
* 0稳态指标1.暂态指标'
*/
@MppMultiId(value = "`Level`")
private Integer level;
/**
* 超标次数)
*/
@TableField(value = "`limit_count`")
private Integer limitCount;
/**
* 稳态总统计次数
*/
@TableField(value = "Statis_count")
private Integer statisCount;
@TableField(value = "`State`")
private Integer state;
}

View File

@@ -10,6 +10,10 @@ import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicOrgService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService; import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageService; import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService; import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetMPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetYPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import com.njcn.prepare.harmonic.service.mysql.line.PollutionService; import com.njcn.prepare.harmonic.service.mysql.line.PollutionService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*; import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowComponent;
@@ -45,11 +49,16 @@ public class OrgPointExecutor extends BaseExecutor{
private final RAlarmCountService rAlarmCountService; private final RAlarmCountService rAlarmCountService;
private final RDimBusbarHarmnicDPOService rDimBusbarHarmnicDPOService;
private final RDimStationTargetDPOService rDimStationTargetDPOService; private final RDimStationTargetDPOService rDimStationTargetDPOService;
private final RDimStationTargetMPOService rDimStationTargetMPOService; private final RDimStationTargetMPOService rDimStationTargetMPOService;
private final RDimStationTargetYPOService rDimStationTargetYPOService; private final RDimStationTargetYPOService rDimStationTargetYPOService;
private final RDimBusTargetDPOService rDimBusTargetDPOService;
private final RDimBusTargetMPOService rDimBusTargetMPOService;
private final RDimBusTargetYPOService rDimBusTargetYPOService;
/** /**
@@ -414,6 +423,25 @@ public class OrgPointExecutor extends BaseExecutor{
} }
} }
} }
/**
* 河北主网新增算法表r_dim_busbar_harmnic_d作为中间表
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rDimBusbarHarmnic", nodeType = NodeTypeEnum.COMMON)
public boolean processRDimBusbarHarmnicAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rDimBusbarHarmnic", nodeType = NodeTypeEnum.COMMON)
public void processRDimBusbarHarmnicProcess(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
if (tag.equalsIgnoreCase("r_dim_busbar_harmnic_d")) {
//日表
rDimBusbarHarmnicDPOService.handleDay(calculatedParam);
}
}
/** /**
* 河北主网新增算法表r_dim_station_target_d/m/y * 河北主网新增算法表r_dim_station_target_d/m/y
*/ */
@@ -443,5 +471,34 @@ public class OrgPointExecutor extends BaseExecutor{
} }
} }
/**
* 河北主网新增算法表r_dim_bus_target_d/m/y
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rDimBusTarget", nodeType = NodeTypeEnum.COMMON)
public boolean processRDimBusTargetAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rDimBusTarget", nodeType = NodeTypeEnum.COMMON)
public void processRDimBusTargetProcess(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
if (tag.equalsIgnoreCase("r_dim_bus_target_d")) {
//日表
rDimBusTargetDPOService.handleDay(calculatedParam);
} else if (tag.equalsIgnoreCase("r_dim_bus_target_m")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//月表
rDimBusTargetMPOService.handleMonth(calculatedParam);
}
}else if (tag.equalsIgnoreCase("r_dim_bus_target_y")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//年表
rDimBusTargetYPOService.handleYear(calculatedParam);
}
}
}
} }

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
/**
*
* Description:
* Date: 2023/11/21 13:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusbarHarmnicDPOMapper extends MppBaseMapper<RDimBusbarHarmnicDPO> {
}

View File

@@ -0,0 +1,26 @@
<?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.dim.RDimBusbarHarmnicDPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO">
<!--@mbg.generated-->
<!--@Table r_dim_busbar_harmnic_d-->
<id column="Org_Id" jdbcType="CHAR" property="orgId" />
<id column="Statis_Date" jdbcType="DATE" property="statisDate" />
<id column="BusBar_Id" jdbcType="CHAR" property="busbarId" />
<id column="Target_type" jdbcType="CHAR" property="targetType" />
<id column="Voltage_level" jdbcType="CHAR" property="voltageLevel" />
<result column="Level" jdbcType="BIT" property="level" />
<result column="limit count" jdbcType="INTEGER" property="limitCount" />
<result column="Statis_count" jdbcType="INTEGER" property="statisCount" />
<result column="State" jdbcType="BIT" property="state" />
<result column="Create_By" jdbcType="CHAR" property="createBy" />
<result column="Create_Time" jdbcType="TIMESTAMP" property="createTime" />
<result column="Update_By" jdbcType="CHAR" property="updateBy" />
<result column="Update_Time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
Org_Id, Statis_Date, BusBar_Id, Target_type, Voltage_level, `Level`, `limit count`,
Statis_count, `State`, Create_By, Create_Time, Update_By, Update_Time
</sql>
</mapper>

View File

@@ -21,4 +21,6 @@ public interface PmsMonitorMapper extends BaseMapper<Monitor> {
* @return * @return
*/ */
List<Monitor> queryConfigMonitor(@Param("monitorIdList") List<String> monitorIdList, @Param("codeList") List<String> codeList); List<Monitor> queryConfigMonitor(@Param("monitorIdList") List<String> monitorIdList, @Param("codeList") List<String> codeList);
List<Monitor> queryEffectiveBusbars(@Param("collect") List<String> collect);
} }

View File

@@ -20,4 +20,13 @@
</if> </if>
</where> </where>
</select> </select>
<select id="queryEffectiveBusbars" resultType="com.njcn.device.pms.pojo.po.Monitor">
select * from pms_monitor where id IN
<foreach collection="collect" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper> </mapper>

View File

@@ -1,8 +1,11 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.github.jeffreyning.mybatisplus.service.IMppService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetDPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetDPO;
/** import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
* *
* Description: * Description:
* Date: 2023/11/20 10:29【需求编号】 * Date: 2023/11/20 10:29【需求编号】
@@ -13,4 +16,5 @@ import com.njcn.harmonic.pojo.po.dim.RDimBusTargetDPO;
public interface RDimBusTargetDPOService extends IMppService<RDimBusTargetDPO> { public interface RDimBusTargetDPOService extends IMppService<RDimBusTargetDPO> {
} void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -2,8 +2,11 @@ package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.IMppService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO;
/** import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
* *
* Description: * Description:
* Date: 2023/11/20 10:29【需求编号】 * Date: 2023/11/20 10:29【需求编号】
@@ -14,4 +17,5 @@ import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO;
public interface RDimBusTargetMPOService extends IMppService<RDimBusTargetMPO> { public interface RDimBusTargetMPOService extends IMppService<RDimBusTargetMPO> {
} void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -2,8 +2,11 @@ package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.IMppService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetYPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetYPO;
/** import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
* *
* Description: * Description:
* Date: 2023/11/20 10:29【需求编号】 * Date: 2023/11/20 10:29【需求编号】
@@ -14,4 +17,5 @@ import com.njcn.harmonic.pojo.po.dim.RDimBusTargetYPO;
public interface RDimBusTargetYPOService extends IMppService<RDimBusTargetYPO> { public interface RDimBusTargetYPOService extends IMppService<RDimBusTargetYPO> {
} void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -0,0 +1,21 @@
package com.njcn.prepare.harmonic.service.mysql.dim;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/**
*
* Description:
* Date: 2023/11/21 13:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RDimBusbarHarmnicDPOService extends IMppService<RDimBusbarHarmnicDPO> {
void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
}

View File

@@ -1,11 +1,44 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatIntegrityDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.ROperatingMonitorDServiceImpl;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import com.njcn.prepare.harmonic.service.mysql.line.IRMpPartHarmonicDetailDService;
import com.njcn.prepare.harmonic.service.mysql.line.IRMpSurplusHarmonicDetailDService;
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetDPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetDPO;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetDPOMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetDPOMapper;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* *
@@ -16,6 +49,111 @@ import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetDPOMapper;
* @version V1.0.0 * @version V1.0.0
*/ */
@Service @Service
public class RDimBusTargetDPOServiceImpl extends MppServiceImpl<RDimBusTargetDPOMapper, RDimBusTargetDPO> implements IService<RDimBusTargetDPO> { @RequiredArgsConstructor
public class RDimBusTargetDPOServiceImpl extends MppServiceImpl<RDimBusTargetDPOMapper, RDimBusTargetDPO> implements RDimBusTargetDPOService {
private final DicDataFeignClient dicDataFeignClient;
private final RDimBusbarHarmnicDPOService rDimBusbarHarmnicDPOService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override
public void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimBusTargetDPO> rDimBusTargetDPOList = new ArrayList<>();
//指标对象类型
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
List<String> collect = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())).map(DictData::getId).collect(Collectors.toList());
List<RDimBusbarHarmnicDPO> rdibBusbarHarms = rDimBusbarHarmnicDPOService.lambdaQuery().eq(RDimBusbarHarmnicDPO::getStatisDate, localDate).in(RDimBusbarHarmnicDPO::getTargetType, collect).list();
if (CollectionUtils.isEmpty(rdibBusbarHarms)){
return;
}
Map<String, Map<String, List<RDimBusbarHarmnicDPO>>> collect1 = rdibBusbarHarms.stream().collect(Collectors.groupingBy(RDimBusbarHarmnicDPO::getOrgId,
Collectors.groupingBy(RDimBusbarHarmnicDPO::getTargetType)));
collect1.forEach((orgId,v)->{
v.forEach((tag,rdibBusbarHarmList)->{
RDimBusTargetDPO rDimBusTargetDPO = new RDimBusTargetDPO();
rDimBusTargetDPO.setOrgId(orgId);
rDimBusTargetDPO.setTargetType(tag);
rDimBusTargetDPO.setStatisDate(localDate);
//有效接入母线数量
Double effectiveBuses = Double.valueOf(rdibBusbarHarmList.size());
long count = rdibBusbarHarmList.stream().filter(temp -> temp.getLimitCount() > 0).count();
double v1 = count / effectiveBuses;
double limitrate = Math.round(v1 * 100.0) / 100.0;
rDimBusTargetDPO.setLimitRate(limitrate);
double asDouble = rdibBusbarHarmList.stream().filter(temp -> temp.getStatisCount() > 0).mapToDouble(temp -> {
return Double.valueOf(temp.getLimitCount()) / temp.getStatisCount();
}).average().getAsDouble();
double passRate = Math.round(asDouble * 100.0) / 100.0;
rDimBusTargetDPO.setPassRate(1-passRate);
});
});
}
private void overLimitTimes(DictData temp, List<RMpSurplusHarmonicDetailD> rMpSurplusHarmonicDetailDList, List<RMpPartHarmonicDetailD> rMpPartHarmonicDetailDList, List<Monitor> monitorList) {
Double overLimitTimes =0.00;
Map<String, Integer> collect = monitorList.stream().collect(Collectors.toMap(Monitor::getId, Monitor::getStatisticalInterval));
if (Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode())) {
overLimitTimes = rMpPartHarmonicDetailDList.stream().mapToDouble(po -> {
return po.getVDevTimes() * collect.get(po.getMeasurementPointId());
}
).sum();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
overLimitTimes = rMpSurplusHarmonicDetailDList.stream().mapToDouble(po -> {
return po.getFlickerTimes() * collect.get(po.getMeasurementPointId());
}
).sum();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
overLimitTimes = rMpPartHarmonicDetailDList.stream().mapToDouble(po -> {
return po.getUnbalanceTimes() * collect.get(po.getMeasurementPointId());
}
).sum();
} else if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())){
overLimitTimes = rMpPartHarmonicDetailDList.stream().mapToDouble(po -> {
return po.getVTimes() * collect.get(po.getMeasurementPointId());
}
).sum();
}
}
/**
* @Description: overLimitBusbarsCount
* @Param:
* @return: java.lang.Integer
* @Author: clam
* @Date: 2023/11/21
*/
private Integer overLimitBusbarsCount(DictData temp, List<RMpSurplusHarmonicDetailD> rMpSurplusHarmonicDetailDList, List<RMpPartHarmonicDetailD> rMpPartHarmonicDetailDList) {
Integer busbarsCount =0;
if (Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode())) {
busbarsCount = rMpPartHarmonicDetailDList.stream().filter(po -> Objects.equals(po.getIsVDev(), 1)).collect(Collectors.toList()).size();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
busbarsCount = rMpSurplusHarmonicDetailDList.stream().filter(po -> Objects.equals(po.getIsFlicker(), 1)).collect(Collectors.toList()).size();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
busbarsCount = rMpPartHarmonicDetailDList.stream().filter(po -> Objects.equals(po.getIsUnbalance(), 1)).collect(Collectors.toList()).size();
} else if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())){
busbarsCount = rMpPartHarmonicDetailDList.stream().filter(po -> Objects.equals(po.getIsVThd(), 1)).collect(Collectors.toList()).size();
}
return busbarsCount;
}
} }

View File

@@ -2,6 +2,11 @@ package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetMPOService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetMPOMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetMPOMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO;
@@ -15,6 +20,11 @@ import com.njcn.harmonic.pojo.po.dim.RDimBusTargetMPO;
* @version V1.0.0 * @version V1.0.0
*/ */
@Service @Service
public class RDimBusTargetMPOServiceImpl extends MppServiceImpl<RDimBusTargetMPOMapper, RDimBusTargetMPO> implements IService<RDimBusTargetMPO> { @RequiredArgsConstructor
public class RDimBusTargetMPOServiceImpl extends MppServiceImpl<RDimBusTargetMPOMapper, RDimBusTargetMPO> implements RDimBusTargetMPOService {
@Override
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
}
} }

View File

@@ -2,6 +2,11 @@ package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetDPOService;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusTargetYPOService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.harmonic.pojo.po.dim.RDimBusTargetYPO; import com.njcn.harmonic.pojo.po.dim.RDimBusTargetYPO;
@@ -16,6 +21,11 @@ import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusTargetYPOMapper;
* @version V1.0.0 * @version V1.0.0
*/ */
@Service @Service
public class RDimBusTargetYPOServiceImpl extends MppServiceImpl<RDimBusTargetYPOMapper, RDimBusTargetYPO> implements IService<RDimBusTargetYPO> { @RequiredArgsConstructor
public class RDimBusTargetYPOServiceImpl extends MppServiceImpl<RDimBusTargetYPOMapper, RDimBusTargetYPO> implements RDimBusTargetYPOService {
@Override
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
}
} }

View File

@@ -0,0 +1,283 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
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.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusbarHarmnicDPOMapper;
import com.njcn.harmonic.pojo.po.dim.RDimBusbarHarmnicDPO;
import com.njcn.prepare.harmonic.service.mysql.dim.RDimBusbarHarmnicDPOService;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
*
* Description:
* Date: 2023/11/21 13:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RDimBusbarHarmnicDPOServiceImpl extends MppServiceImpl<RDimBusbarHarmnicDPOMapper, RDimBusbarHarmnicDPO> implements RDimBusbarHarmnicDPOService{
private final DicDataFeignClient dicDataFeignClient;
private final IRStatLimitRateDService irStatLimitRateDService;
private final ROperatingMonitorService rOperatingMonitorService;
private final RMpEventDetailDService rMpEventDetailDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override
public void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimBusbarHarmnicDPO> rDimBusbarHarmnicDPOList = new ArrayList<>();
//指标对象类型
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
String beginDay = LocalDateTimeUtil.format(LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
String endDay = LocalDateTimeUtil.format(LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
/*获取暂态统计指标*/
List<DictData> eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
List<Monitor> monitorList = new ArrayList<>();
//有效母线数
Integer effectiveBusbars=0;
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
eq(ROperatingMonitorDPO::getDataDate, localDate).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
if(!CollectionUtils.isEmpty(list)){
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
//分组获取最频繁统计监测点
Map<String, Optional<Monitor>> collect1 = monitorList.stream().collect(Collectors.groupingBy(Monitor::getLineId,
Collectors.minBy(Comparator.comparingInt(Monitor::getStatisticalInterval))));
monitorList = collect1.values().stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
}
if (CollectionUtils.isEmpty(monitorList)) {
continue;
}
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, beginDay, endDay);
List<RMpEventDetailDPO> rMpEventDetailDPOList = rMpEventDetailDService.lambdaQuery().in(RMpEventDetailDPO::getMeasurementPointId, linids).eq(RMpEventDetailDPO::getDataDate, localDate).list();
monitorList.stream().forEach(busbar->{
//稳态
indicatorTypeDate.stream().forEach(temp->{
//总稳态指标排除
if (Objects.equals(temp.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RDimBusbarHarmnicDPO rDimBusbarHarmnicDPO = new RDimBusbarHarmnicDPO();
rDimBusbarHarmnicDPO.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimBusbarHarmnicDPO.setStatisDate(localDate);
rDimBusbarHarmnicDPO.setBusbarId(busbar.getLineId());
rDimBusbarHarmnicDPO.setTargetType(temp.getId());
rDimBusbarHarmnicDPO.setLevel(0);
rDimBusbarHarmnicDPO.setState(1);
rDimBusbarHarmnicDPO.setMonitorTag(busbar.getMonitorTag());
rDimBusbarHarmnicDPO.setVoltageLevel(busbar.getVoltageLevel());
Optional<RStatLimitRateDPO> first = rStatLimitRateDPOS.stream().filter(rStatLimitRateDPO -> Objects.equals(rStatLimitRateDPO.getLineId(), busbar.getId())).findFirst();
RStatLimitRateDPO rStatLimitRateDPO = new RStatLimitRateDPO();
if (first.isPresent()) {
rStatLimitRateDPO = first.get();
}else {
return;
}
if(Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())){
rDimBusbarHarmnicDPO.setStatisCount(rStatLimitRateDPO.getFlickerAllTime());
}else {
rDimBusbarHarmnicDPO.setStatisCount(rStatLimitRateDPO.getAllTime());
}
rDimBusbarHarmnicDPO.setLimitCount(overLimitBusbarsCount(temp,rStatLimitRateDPO));
rDimBusbarHarmnicDPOList.add(rDimBusbarHarmnicDPO);
});
//暂态
eventStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.DISTURBANCE.getCode())
|| Objects.equals(dictData.getCode(), DicDataEnum.OTHER.getCode())
|| Objects.equals(dictData.getCode(), DicDataEnum.RECORDING_WAVE.getCode())
|| Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATORS.getCode())) {
return;
}
RDimBusbarHarmnicDPO rDimBusbarHarmnicDPO = new RDimBusbarHarmnicDPO();
rDimBusbarHarmnicDPO.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimBusbarHarmnicDPO.setStatisDate(localDate);
rDimBusbarHarmnicDPO.setTargetType(dictData.getId());
rDimBusbarHarmnicDPO.setBusbarId(busbar.getLineId());
rDimBusbarHarmnicDPO.setLevel(1);
rDimBusbarHarmnicDPO.setState(1);
rDimBusbarHarmnicDPO.setMonitorTag(busbar.getMonitorTag());
rDimBusbarHarmnicDPO.setVoltageLevel(busbar.getVoltageLevel());
Optional<RMpEventDetailDPO> first = rMpEventDetailDPOList.stream().filter(rMpEventDetailDPO -> Objects.equals(rMpEventDetailDPO.getMeasurementPointId(), busbar.getId())).findFirst();
RMpEventDetailDPO rMpEventDetailDPO = new RMpEventDetailDPO();
if (first.isPresent()) {
rMpEventDetailDPO = first.get();
}else {
return;
}
rDimBusbarHarmnicDPO.setLimitCount(eventBusbarsCount(dictData,rMpEventDetailDPO));
rDimBusbarHarmnicDPOList.add(rDimBusbarHarmnicDPO);
});
});
}
}
if (!CollectionUtils.isEmpty(rDimBusbarHarmnicDPOList)) {
this.saveOrUpdateBatchByMultiId(rDimBusbarHarmnicDPOList, 500);
}
}
private Integer eventBusbarsCount(DictData dictData, RMpEventDetailDPO rMpEventDetailDPO) {
Integer eventCount =0;
if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_DIP.getCode())) {
eventCount = rMpEventDetailDPO.getSagTimes();
} else if ( Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_RISE.getCode())) {
eventCount = rMpEventDetailDPO.getSwellTimes();
} else if ( Objects.equals(dictData.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) {
eventCount = rMpEventDetailDPO.getInterruptTimes();
}
return eventCount;
}
/**
* @Description: overLimitBusbarsCount
* @Param:
* @return: java.lang.Integer
* @Author: clam
* @Date: 2023/11/21
*/
private Integer overLimitBusbarsCount(DictData temp,RStatLimitRateDPO rStatLimitRateDPO ) {
Integer overLimiCount =0;
if (Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode())) {
overLimiCount = rStatLimitRateDPO.getVoltageDevOvertime();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
overLimiCount = rStatLimitRateDPO.getFlickerOvertime();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
overLimiCount = rStatLimitRateDPO.getUbalanceOvertime();
} else if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())){
overLimiCount = rStatLimitRateDPO.getUaberranceOvertime();
}else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
overLimiCount = Stream.of( rStatLimitRateDPO.getUharm2Overtime(),
rStatLimitRateDPO.getUharm3Overtime(),
rStatLimitRateDPO.getUharm4Overtime(),
rStatLimitRateDPO.getUharm5Overtime(),
rStatLimitRateDPO.getUharm6Overtime(),
rStatLimitRateDPO.getUharm7Overtime(),
rStatLimitRateDPO.getUharm8Overtime(),
rStatLimitRateDPO.getUharm9Overtime(),
rStatLimitRateDPO.getUharm10Overtime() ,
rStatLimitRateDPO.getUharm11Overtime() ,
rStatLimitRateDPO.getUharm12Overtime() ,
rStatLimitRateDPO.getUharm13Overtime() ,
rStatLimitRateDPO.getUharm14Overtime() ,
rStatLimitRateDPO.getUharm15Overtime() ,
rStatLimitRateDPO.getUharm16Overtime() ,
rStatLimitRateDPO.getUharm17Overtime() ,
rStatLimitRateDPO.getUharm18Overtime() ,
rStatLimitRateDPO.getUharm19Overtime() ,
rStatLimitRateDPO.getUharm20Overtime() ,
rStatLimitRateDPO.getUharm21Overtime() ,
rStatLimitRateDPO.getUharm22Overtime() ,
rStatLimitRateDPO.getUharm23Overtime() ,
rStatLimitRateDPO.getUharm24Overtime() ,
rStatLimitRateDPO.getUharm25Overtime()).max(Integer::compare).get();
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
overLimiCount = Stream.of(rStatLimitRateDPO.getIharm2Overtime(),
rStatLimitRateDPO.getIharm3Overtime() ,
rStatLimitRateDPO.getIharm4Overtime() ,
rStatLimitRateDPO.getIharm5Overtime() ,
rStatLimitRateDPO.getIharm6Overtime() ,
rStatLimitRateDPO.getIharm7Overtime() ,
rStatLimitRateDPO.getIharm8Overtime() ,
rStatLimitRateDPO.getIharm9Overtime() ,
rStatLimitRateDPO.getIharm10Overtime() ,
rStatLimitRateDPO.getIharm11Overtime() ,
rStatLimitRateDPO.getIharm12Overtime() ,
rStatLimitRateDPO.getIharm13Overtime() ,
rStatLimitRateDPO.getIharm14Overtime() ,
rStatLimitRateDPO.getIharm15Overtime() ,
rStatLimitRateDPO.getIharm16Overtime() ,
rStatLimitRateDPO.getIharm17Overtime() ,
rStatLimitRateDPO.getIharm18Overtime() ,
rStatLimitRateDPO.getIharm19Overtime() ,
rStatLimitRateDPO.getIharm20Overtime() ,
rStatLimitRateDPO.getIharm21Overtime() ,
rStatLimitRateDPO.getIharm22Overtime() ,
rStatLimitRateDPO.getIharm23Overtime() ,
rStatLimitRateDPO.getIharm24Overtime() ,
rStatLimitRateDPO.getIharm25Overtime()).max(Integer::compare).get()
;
} else if (Objects.equals(temp.getCode(), DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())){
overLimiCount = Stream.of(rStatLimitRateDPO.getInuharm1Overtime(),
rStatLimitRateDPO.getInuharm2Overtime(),
rStatLimitRateDPO.getInuharm3Overtime(),
rStatLimitRateDPO.getInuharm4Overtime(),
rStatLimitRateDPO.getInuharm5Overtime(),
rStatLimitRateDPO.getInuharm6Overtime(),
rStatLimitRateDPO.getInuharm7Overtime(),
rStatLimitRateDPO.getInuharm8Overtime() ,
rStatLimitRateDPO.getInuharm9Overtime() ,
rStatLimitRateDPO.getInuharm10Overtime() ,
rStatLimitRateDPO.getInuharm11Overtime() ,
rStatLimitRateDPO.getInuharm12Overtime() ,
rStatLimitRateDPO.getInuharm13Overtime() ,
rStatLimitRateDPO.getInuharm14Overtime() ,
rStatLimitRateDPO.getInuharm15Overtime() ,
rStatLimitRateDPO.getInuharm16Overtime() ).max(Integer::compare).get();
}else if ( Objects.equals(temp.getCode(), DicDataEnum.FREQUENCY_DEV.getCode())) {
overLimiCount = rStatLimitRateDPO.getFreqDevOvertime();
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
overLimiCount = rStatLimitRateDPO.getINegOvertime();
}
return overLimiCount;
}
}

View File

@@ -1,11 +1,13 @@
package com.njcn.prepare.harmonic.service.mysql.line; package com.njcn.prepare.harmonic.service.mysql.line;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/** /**
* @author xy * @author xy
*/ */
public interface IRMpPartHarmonicDetailDService { public interface IRMpPartHarmonicDetailDService extends IMppService<RMpPartHarmonicDetailD> {
/** /**
* 计算监测点稳态指标超标明细日表1数据 * 计算监测点稳态指标超标明细日表1数据

View File

@@ -1,11 +1,13 @@
package com.njcn.prepare.harmonic.service.mysql.line; package com.njcn.prepare.harmonic.service.mysql.line;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/** /**
* @author xy * @author xy
*/ */
public interface IRMpSurplusHarmonicDetailDService { public interface IRMpSurplusHarmonicDetailDService extends IMppService<RMpSurplusHarmonicDetailD> {
/** /**
* 计算监测点稳态指标超标明细日表2数据 * 计算监测点稳态指标超标明细日表2数据

View File

@@ -36,6 +36,7 @@ public enum DicDataEnum {
PHASE_VOLTAGE("负序电压不平衡度", "phase_Voltage"), PHASE_VOLTAGE("负序电压不平衡度", "phase_Voltage"),
FREQUENCY_DEV("频率偏差", "Frequency_Dev"), FREQUENCY_DEV("频率偏差", "Frequency_Dev"),
NEG_CURRENT("负序电流", "Neg_Current"), NEG_CURRENT("负序电流", "Neg_Current"),
THD_V("电压总谐波畸变率", "Thd_V"),
TOTAL_INDICATOR("总稳态指标", "Total_Indicator"), TOTAL_INDICATOR("总稳态指标", "Total_Indicator"),
/** /**