添加算法

This commit is contained in:
huangzj
2023-11-27 13:55:10 +08:00
parent 1a3757163b
commit 937783fdf3
18 changed files with 886 additions and 67 deletions

View File

@@ -1,12 +1,13 @@
package com.njcn.harmonic.pojo.po.dim; package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;
import java.io.Serializable;
import java.time.LocalDate;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDate;
/** /**
* <p> * <p>
* *
@@ -21,30 +22,29 @@ import lombok.Setter;
public class RDimObjGlobalD extends BaseEntity { public class RDimObjGlobalD extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@MppMultiId(value = "Org_Id")
private String orgId; private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate; private LocalDate statisDate;
/** /**
* 源荷对象类型 * 源荷对象类型
*/ */
@MppMultiId(value = "Object_Type")
private String objectType; private String objectType;
/**
* **源荷对象监测率(%
*/
private Float monitorRate;
/** /**
* **源荷对象超标占比(% * **源荷对象超标占比(%
*/ */
private Float limitRate; private Double limitRate;
/** /**
* **源荷对象平均超标占比(% * **源荷对象平均超标占比(%
*/ */
private Float limitAvgRate; private Double limitAvgRate;
} }

View File

@@ -1,12 +1,14 @@
package com.njcn.harmonic.pojo.po.dim; package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;
import java.io.Serializable;
import java.time.LocalDate;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDate;
/** /**
* <p> * <p>
* *
@@ -22,29 +24,33 @@ public class RDimObjGlobalM extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@MppMultiId(value = "Org_Id")
private String orgId; private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate; private LocalDate statisDate;
/** /**
* 源荷对象类型 * 源荷对象类型
*/ */
@MppMultiId(value = "Object_Type")
private String objectType; private String objectType;
/** //
* **源荷对象监测率(% // /**
*/ // * **源荷对象监测率(%
private Float monitorRate; // */
// private Double monitorRate;
/** /**
* **源荷对象超标占比(% * **源荷对象超标占比(%
*/ */
private Float limitRate; private Double limitRate;
/** /**
* **源荷对象平均超标占比(% * **源荷对象平均超标占比(%
*/ */
private Float limitAvgRate; private Double limitAvgRate;
@TableField(value = "Limit_Avg_Day")
private Double limitAvgDay;
} }

View File

@@ -1,12 +1,14 @@
package com.njcn.harmonic.pojo.po.dim; package com.njcn.harmonic.pojo.po.dim;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;
import java.io.Serializable;
import java.time.LocalDate;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDate;
/** /**
* <p> * <p>
* *
@@ -22,29 +24,33 @@ public class RDimObjGlobalY extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@MppMultiId(value = "Org_Id")
private String orgId; private String orgId;
@MppMultiId(value = "Statis_Date")
private LocalDate statisDate; private LocalDate statisDate;
/** /**
* 源荷对象类型 * 源荷对象类型
*/ */
@MppMultiId(value = "Object_Type")
private String objectType; private String objectType;
/** //
* **源荷对象监测率(% // /**
*/ // * **源荷对象监测率(%
private Float monitorRate; // */
// private Double monitorRate;
/** /**
* **源荷对象超标占比(% * **源荷对象超标占比(%
*/ */
private Float limitRate; private Double limitRate;
/** /**
* **源荷对象平均超标占比(% * **源荷对象平均超标占比(%
*/ */
private Float limitAvgRate; private Double limitAvgRate;
@TableField(value = "Limit_Avg_Day")
private Double limitAvgDay;
} }

View File

@@ -43,17 +43,14 @@ public class RDimObjTargetM extends BaseEntity {
/** /**
* **源荷对象**指标超标占比(% * **源荷对象**指标超标占比(%
*/ */
private Float monitorRate; private Double monitorRate;
/** /**
* **源荷对象**指标平均超标占比(% * **源荷对象**指标平均超标占比(%
*/ */
private Float limitRate; private Double limitRate;
/**
* **源荷对象**指标平均超标天数(天)
*/
private Float limitAvgRate;
} }

View File

@@ -43,17 +43,17 @@ public class RDimObjTargetY extends BaseEntity {
/** /**
* **源荷对象**指标超标占比(% * **源荷对象**指标超标占比(%
*/ */
private Float monitorRate; private Double monitorRate;
/** /**
* **源荷对象**指标平均超标占比(% * **源荷对象**指标平均超标占比(%
*/ */
private Float limitRate; private Double limitRate;
//
/** // /**
* **源荷对象**指标平均超标天数(天) // * **源荷对象**指标平均超标天数(天)
*/ // */
private Float limitAvgRate; // private Float limitAvgRate;
} }

View File

@@ -2,7 +2,6 @@ package com.njcn.prepare.executor;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetDPOService; import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetDPOService;
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetMPOService; import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetMPOService;
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetYPOService; import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetYPOService;
@@ -61,6 +60,10 @@ public class OrgPointExecutor extends BaseExecutor{
private final IRDimObjTargetMService irDimObjTargetMService; private final IRDimObjTargetMService irDimObjTargetMService;
private final IRDimObjTargetYService irDimObjTargetYService; private final IRDimObjTargetYService irDimObjTargetYService;
private final IRDimObjGlobalDService irDimObjGlobalDService;
private final IRDimObjGlobalMService irDimObjGlobalMService;
private final IRDimObjGlobalYService irDimObjGlobalYService;
/** /**
@@ -533,5 +536,34 @@ public class OrgPointExecutor extends BaseExecutor{
} }
} }
/**
* 河北主网新增算法表r_dim_obj_target_d/m/y
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rDimObjGlobal", nodeType = NodeTypeEnum.COMMON)
public boolean processRDimObjGlobalAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rDimObjGlobal", nodeType = NodeTypeEnum.COMMON)
public void processRDimObjGlobalProcess(NodeComponent bindCmp) {
String tag = bindCmp.getTag();
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
if (tag.equalsIgnoreCase("r_dim_obj_global_d")) {
//日表
irDimObjGlobalDService.handleDay(calculatedParam);
} else if (tag.equalsIgnoreCase("r_dim_obj_global_m")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//月表
irDimObjGlobalMService.handleMonth(calculatedParam);
}
}else if (tag.equalsIgnoreCase("r_dim_obj_global_y")) {
//数据补招不执行非日表算法
if (!calculatedParam.isRepair()) {
//年表
irDimObjGlobalYService.handleYear(calculatedParam);
}
}
}
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim; package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
/** /**
@@ -11,6 +12,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface RDimObjGlobalDMapper extends BaseMapper<RDimObjGlobalD> { public interface RDimObjGlobalDMapper extends MppBaseMapper<RDimObjGlobalD> {
} }

View File

@@ -1,6 +1,6 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim; package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
/** /**
@@ -11,6 +11,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface RDimObjGlobalMMapper extends BaseMapper<RDimObjGlobalM> { public interface RDimObjGlobalMMapper extends MppBaseMapper<RDimObjGlobalM> {
} }

View File

@@ -1,6 +1,6 @@
package com.njcn.prepare.harmonic.mapper.mysql.dim; package com.njcn.prepare.harmonic.mapper.mysql.dim;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
/** /**
@@ -11,6 +11,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface RDimObjGlobalYMapper extends BaseMapper<RDimObjGlobalY> { public interface RDimObjGlobalYMapper extends MppBaseMapper<RDimObjGlobalY> {
} }

View File

@@ -1,7 +1,7 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO; import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
@@ -13,6 +13,7 @@ import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface IRDimObjGlobalDService extends IService<RDimObjGlobalD> { public interface IRDimObjGlobalDService extends IMppService<RDimObjGlobalD> {
void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
} }

View File

@@ -1,7 +1,9 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/** /**
* <p> * <p>
@@ -11,6 +13,7 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface IRDimObjGlobalMService extends IService<RDimObjGlobalM> { public interface IRDimObjGlobalMService extends IMppService<RDimObjGlobalM> {
void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
} }

View File

@@ -1,7 +1,9 @@
package com.njcn.prepare.harmonic.service.mysql.dim; package com.njcn.prepare.harmonic.service.mysql.dim;
import com.baomidou.mybatisplus.extension.service.IService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
/** /**
* <p> * <p>
@@ -11,6 +13,7 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
* @author cdf * @author cdf
* @since 2023-11-22 * @since 2023-11-22
*/ */
public interface IRDimObjGlobalYService extends IService<RDimObjGlobalY> { public interface IRDimObjGlobalYService extends IMppService<RDimObjGlobalY> {
void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
} }

View File

@@ -1,11 +1,35 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalDMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalDMapper;
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.dim.IRDimObjGlobalDService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalDService;
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 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;
/** /**
* <p> * <p>
@@ -16,6 +40,120 @@ import org.springframework.stereotype.Service;
* @since 2023-11-22 * @since 2023-11-22
*/ */
@Service @Service
public class RDimObjGlobalDServiceImpl extends ServiceImpl<RDimObjGlobalDMapper, RDimObjGlobalD> implements IRDimObjGlobalDService { @RequiredArgsConstructor
public class RDimObjGlobalDServiceImpl extends MppServiceImpl<RDimObjGlobalDMapper, RDimObjGlobalD> implements IRDimObjGlobalDService {
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatLimitRateDService irStatLimitRateDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override
public void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimObjGlobalD> rDimObjGlobalDS = new ArrayList<>();
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> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
List<DictData> finalIndicatorTypeDate = 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())||
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
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();
List<Monitor> monitorList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)){
continue;
}
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
Map<String, List<Monitor>> collect1 = monitorList.stream().
collect(Collectors.groupingBy(Monitor::getMonitorTag));
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, beginDay, endDay);
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
continue;
}
collect1.forEach((tag, monitors)->{
RDimObjGlobalD rDimObjGlobalD = new RDimObjGlobalD();
rDimObjGlobalD.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimObjGlobalD.setStatisDate(localDate);
rDimObjGlobalD.setObjectType(tag);
//有效接入监测点
int effectivePoint = monitors.size();
//对应指标的超表监测点
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getUaberranceOvertime()>0||
po.getUaberranceOvertime()>0||
po.getFlickerOvertime()>0 ||
po.getINegOvertime()>0||
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).count()+"");
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
rDimObjGlobalD.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalD.setLimitRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalDS.add(rDimObjGlobalD);
});
}
}
if (!CollectionUtils.isEmpty(rDimObjGlobalDS)) {
this.saveOrUpdateBatchByMultiId(rDimObjGlobalDS, 500);
}
}
} }

View File

@@ -1,11 +1,36 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
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.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalMMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalMMapper;
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.dim.IRDimObjGlobalMService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalMService;
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 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;
/** /**
* <p> * <p>
@@ -16,6 +41,152 @@ import org.springframework.stereotype.Service;
* @since 2023-11-22 * @since 2023-11-22
*/ */
@Service @Service
public class RDimObjGlobalMServiceImpl extends ServiceImpl<RDimObjGlobalMMapper, RDimObjGlobalM> implements IRDimObjGlobalMService { @RequiredArgsConstructor
public class RDimObjGlobalMServiceImpl extends MppServiceImpl<RDimObjGlobalMMapper, RDimObjGlobalM> implements IRDimObjGlobalMService {
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatLimitRateDService irStatLimitRateDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimObjGlobalM> rDimObjGlobalMS = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
List<DictData> finalIndicatorTypeDate = 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())||
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
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();
List<Monitor> monitorList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)){
continue;
}
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
Map<String, List<Monitor>> collect1 = monitorList.stream().
collect(Collectors.groupingBy(Monitor::getMonitorTag));
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
continue;
}
collect1.forEach((tag, monitors)->{
RDimObjGlobalM rDimObjGlobalM = new RDimObjGlobalM();
rDimObjGlobalM.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimObjGlobalM.setStatisDate(localDate);
rDimObjGlobalM.setObjectType(tag);
//有效接入监测点
Long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
//对应指标的超表监测点
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getUaberranceOvertime()>0||
po.getUaberranceOvertime()>0||
po.getFlickerOvertime()>0 ||
po.getINegOvertime()>0||
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).distinct().count()+"");
int overLimits = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getUaberranceOvertime()>0||
po.getUaberranceOvertime()>0||
po.getFlickerOvertime()>0 ||
po.getINegOvertime()>0||
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).count()+"");
double v1 = Double.valueOf(overLimits) / overLimitsPoint;
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
rDimObjGlobalM.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalM.setLimitRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalM.setLimitAvgDay((Math.round(v1 * 100.0) / 100.0));
rDimObjGlobalMS.add(rDimObjGlobalM);
});
} }
}
if (!CollectionUtils.isEmpty(rDimObjGlobalMS)) {
this.saveOrUpdateBatchByMultiId(rDimObjGlobalMS, 500);
}
}
}

View File

@@ -1,11 +1,36 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
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.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY; import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalYMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalYMapper;
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.dim.IRDimObjGlobalYService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalYService;
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 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;
/** /**
* <p> * <p>
@@ -16,6 +41,155 @@ import org.springframework.stereotype.Service;
* @since 2023-11-22 * @since 2023-11-22
*/ */
@Service @Service
public class RDimObjGlobalYServiceImpl extends ServiceImpl<RDimObjGlobalYMapper, RDimObjGlobalY> implements IRDimObjGlobalYService { @RequiredArgsConstructor
public class RDimObjGlobalYServiceImpl extends MppServiceImpl<RDimObjGlobalYMapper, RDimObjGlobalY> implements IRDimObjGlobalYService {
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatLimitRateDService irStatLimitRateDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimObjGlobalY> rDimObjGlobalYS = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
List<DictData> finalIndicatorTypeDate = 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())||
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
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();
List<Monitor> monitorList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)){
continue;
}
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
Map<String, List<Monitor>> collect1 = monitorList.stream().
collect(Collectors.groupingBy(Monitor::getMonitorTag));
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
continue;
}
collect1.forEach((tag, monitors)->{
RDimObjGlobalY rDimObjGlobalY = new RDimObjGlobalY();
rDimObjGlobalY.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimObjGlobalY.setStatisDate(localDate);
rDimObjGlobalY.setObjectType(tag);
//有效接入监测点
Long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
//对应指标的超表监测点
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getUaberranceOvertime()>0||
po.getUaberranceOvertime()>0||
po.getFlickerOvertime()>0 ||
po.getINegOvertime()>0||
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).distinct().count()+"");
int overLimits = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getUaberranceOvertime()>0||
po.getUaberranceOvertime()>0||
po.getFlickerOvertime()>0 ||
po.getINegOvertime()>0||
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).count()+"");
Double v1 = 0.00;
if(!(overLimitsPoint==0)){
v1 = Double.valueOf(overLimits) / overLimitsPoint;
} }
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
rDimObjGlobalY.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalY.setLimitRate(Math.round(v * 100.0) / 100.0);
rDimObjGlobalY.setLimitAvgDay((Math.round(v1 * 100.0) / 100.0));
rDimObjGlobalYS.add(rDimObjGlobalY);
});
}
}
if (!CollectionUtils.isEmpty(rDimObjGlobalYS)) {
this.saveOrUpdateBatchByMultiId(rDimObjGlobalYS, 500);
}
}
}

View File

@@ -1,14 +1,36 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
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.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetM; import com.njcn.harmonic.pojo.po.dim.RDimObjTargetM;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetMMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; 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.dim.IRDimObjTargetMService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetMService;
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 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;
/** /**
* <p> * <p>
@@ -19,10 +41,132 @@ import org.springframework.stereotype.Service;
* @since 2023-11-22 * @since 2023-11-22
*/ */
@Service @Service
@RequiredArgsConstructor
public class RDimObjTargetMServiceImpl extends MppServiceImpl<RDimObjTargetMMapper, RDimObjTargetM> implements IRDimObjTargetMService { public class RDimObjTargetMServiceImpl extends MppServiceImpl<RDimObjTargetMMapper, RDimObjTargetM> implements IRDimObjTargetMService {
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatLimitRateDService irStatLimitRateDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override @Override
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) { public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimObjTargetM> rdiObjTargetMs = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
List<DictData> finalIndicatorTypeDate = 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())||
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
between(ROperatingMonitorDPO::getDataDate, begin,end).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
List<Monitor> monitorList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)){
continue;
}
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
Map<String, List<Monitor>> collect1 = monitorList.stream().
collect(Collectors.groupingBy(Monitor::getMonitorTag));
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
continue;
}
collect1.forEach((tag, monitors)->{
finalIndicatorTypeDate.stream().forEach(temp->{
RDimObjTargetM rDimObjTargetM = new RDimObjTargetM();
rDimObjTargetM.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimObjTargetM.setStatisDate(localDate);
rDimObjTargetM.setTargetType(temp.getId());
rDimObjTargetM.setObjectType(tag);
//有效接入监测点
long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
//对应指标的超表监测点
int overLimitsPoint = overLimitsPointCount(temp,rStatLimitRateDPOS);
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
rDimObjTargetM.setMonitorRate(Math.round(v * 100.0) / 100.0);
rDimObjTargetM.setLimitRate(Math.round(v * 100.0) / 100.0);
rdiObjTargetMs.add(rDimObjTargetM);
});
});
} }
} }
if (!CollectionUtils.isEmpty(rdiObjTargetMs)) {
this.saveOrUpdateBatchByMultiId(rdiObjTargetMs, 500);
}
}
private int overLimitsPointCount(DictData temp, List<RStatLimitRateDPO> rStatLimitRateDPOS) {
Integer overLimiCount =0;
if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime()>0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getFlickerOvertime()>0).distinct().count()+"");
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getINegOvertime()>0).distinct().count()+"");
}
return overLimiCount;
}
}

View File

@@ -1,14 +1,36 @@
package com.njcn.prepare.harmonic.service.mysql.dim.impl; package com.njcn.prepare.harmonic.service.mysql.dim.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
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.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetY; import com.njcn.harmonic.pojo.po.dim.RDimObjTargetY;
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetYMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetYMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam; 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.dim.IRDimObjTargetYService; import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetYService;
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 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;
/** /**
* <p> * <p>
@@ -19,10 +41,132 @@ import org.springframework.stereotype.Service;
* @since 2023-11-22 * @since 2023-11-22
*/ */
@Service @Service
@RequiredArgsConstructor
public class RDimObjTargetYServiceImpl extends MppServiceImpl<RDimObjTargetYMapper, RDimObjTargetY> implements IRDimObjTargetYService { public class RDimObjTargetYServiceImpl extends MppServiceImpl<RDimObjTargetYMapper, RDimObjTargetY> implements IRDimObjTargetYService {
private final DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorService rOperatingMonitorService;
private final IRStatLimitRateDService irStatLimitRateDService;
//咨询后直接用Mapper查询这个算法只用pms补考虑pq后续不知道要不要改
private final PmsMonitorMapper pmsMonitorMapper;
@Override @Override
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) { public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
List<RDimObjTargetY> rdiObjTargetys = new ArrayList<>();
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
String begin = LocalDateTimeUtil.format(DateUtil.beginOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
String end = LocalDateTimeUtil.format(DateUtil.endOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
List<DictData> finalIndicatorTypeDate = 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())||
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
if (CollectionUtils.isEmpty(lineBaseList)) {
continue;
}
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
between(ROperatingMonitorDPO::getDataDate, begin,end).
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
List<Monitor> monitorList = new ArrayList<>();
if(CollectionUtils.isEmpty(list)){
continue;
}
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
Map<String, List<Monitor>> collect1 = monitorList.stream().
collect(Collectors.groupingBy(Monitor::getMonitorTag));
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
continue;
}
collect1.forEach((tag, monitors)->{
finalIndicatorTypeDate.stream().forEach(temp->{
RDimObjTargetY rDimObjTargetY = new RDimObjTargetY();
rDimObjTargetY.setOrgId(deptGetChildrenMoreDTO.getUnitId());
rDimObjTargetY.setStatisDate(localDate);
rDimObjTargetY.setTargetType(temp.getId());
rDimObjTargetY.setObjectType(tag);
//有效接入监测点
long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
//对应指标的超表监测点
int overLimitsPoint = overLimitsPointCount(temp,rStatLimitRateDPOS);
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
rDimObjTargetY.setMonitorRate(Math.round(v * 100.0) / 100.0);
rDimObjTargetY.setLimitRate(Math.round(v * 100.0) / 100.0);
rdiObjTargetys.add(rDimObjTargetY);
});
});
} }
} }
if (!CollectionUtils.isEmpty(rdiObjTargetys)) {
this.saveOrUpdateBatchByMultiId(rdiObjTargetys, 500);
}
}
private int overLimitsPointCount(DictData temp, List<RStatLimitRateDPO> rStatLimitRateDPOS) {
Integer overLimiCount =0;
if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
po.getIharm2Overtime()>0||
po.getIharm3Overtime() >0||
po.getIharm4Overtime() >0||
po.getIharm5Overtime() >0||
po.getIharm6Overtime() >0||
po.getIharm7Overtime() >0||
po.getIharm8Overtime() >0||
po.getIharm9Overtime() >0||
po.getIharm10Overtime() >0||
po.getIharm11Overtime() >0||
po.getIharm12Overtime() >0||
po.getIharm13Overtime() >0||
po.getIharm14Overtime() >0||
po.getIharm15Overtime() >0||
po.getIharm16Overtime() >0||
po.getIharm17Overtime() >0||
po.getIharm18Overtime() >0||
po.getIharm19Overtime() >0||
po.getIharm20Overtime() >0||
po.getIharm21Overtime() >0||
po.getIharm22Overtime() >0||
po.getIharm23Overtime() >0||
po.getIharm24Overtime() >0||
po.getIharm25Overtime() >0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getFlickerOvertime()>0).distinct().count()+"");
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getINegOvertime()>0).distinct().count()+"");
}
return overLimiCount;
}
}

View File

@@ -19,7 +19,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;