有功功率趋势指标列表详细excel导出
This commit is contained in:
@@ -38,16 +38,15 @@ public interface Param {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 以下的四个Map为有功功率页面查看指标详情的四个指标分组下的具体指标(指标对应的可能不对 到时候直接改map里的key即可)
|
* 以下的四个Map为有功功率页面查看指标详情的四个指标分组下的具体指标(指标对应的可能不对 到时候直接改map里的key即可)
|
||||||
* 页面展示的指标名称 对应 的表ele_epd_pqd中的名称
|
* put(name:表ele_epd_pqd中的名称,value:页面展示的指标名称)
|
||||||
* map的key为的表ele_epd_pqd中的名称value为页面上展示的名称
|
|
||||||
*/
|
*/
|
||||||
Map<String,String> DATABSEMAP = new HashMap(){{
|
Map<String,String> DATABSEMAP = new HashMap(){{
|
||||||
put("频率偏差","频率偏差");
|
put("频率偏差","频率偏差");
|
||||||
put("线电压偏差","电压偏差");
|
put("线电压偏差","电压偏差");
|
||||||
put("相电压长时闪变","长时闪变");
|
put("相电压长时闪变","长时闪变");
|
||||||
put("线电压总有效值","谐波电压");
|
//put("线电压总有效值","谐波电压");
|
||||||
put("电流总有效值","谐波电流");
|
//put("电流总有效值","谐波电流");
|
||||||
put("相电压总有效值","间谐波电压");
|
//put("相电压总有效值","间谐波电压");
|
||||||
put("电压负序不平衡度","负序电压不平衡度");
|
put("电压负序不平衡度","负序电压不平衡度");
|
||||||
put("电流负序不平衡度","负序电流");
|
put("电流负序不平衡度","负序电流");
|
||||||
put("总稳态指标","三相总有功功率");
|
put("总稳态指标","三相总有功功率");
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.njcn.harmonic.constant;
|
package com.njcn.harmonic.constant;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 徐扬
|
* @author 徐扬
|
||||||
*/
|
*/
|
||||||
@@ -71,4 +70,20 @@ public interface Param {
|
|||||||
String DECIMAL_FORMATSTR = "#0.0000";
|
String DECIMAL_FORMATSTR = "#0.0000";
|
||||||
|
|
||||||
String DECIMAL_FORMATTWOSTR = "#.##";
|
String DECIMAL_FORMATTWOSTR = "#.##";
|
||||||
|
|
||||||
|
String voltageOffset = "电压偏差";
|
||||||
|
|
||||||
|
String vTimes = "谐波电压";
|
||||||
|
|
||||||
|
String iTimes = "谐波电流";
|
||||||
|
|
||||||
|
String ubalance = "三相电压不平衡度";
|
||||||
|
|
||||||
|
String voltageFluctuation = "电压波动";
|
||||||
|
|
||||||
|
String flicker = "闪变";
|
||||||
|
|
||||||
|
String interHarmonic = "间谐波电压含有率";
|
||||||
|
|
||||||
|
String sequenceCurrentUnbalance = "电流不平衡度";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,33 +28,33 @@ public class PowerStatisticsParam extends BaseParam {
|
|||||||
private String field;
|
private String field;
|
||||||
|
|
||||||
@ApiModelProperty("区间1时间集合")
|
@ApiModelProperty("区间1时间集合")
|
||||||
private List<String> time0;
|
private List<String> time0 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间2时间集合")
|
@ApiModelProperty("区间2时间集合")
|
||||||
private List<String> time1;
|
private List<String> time1 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间3时间集合")
|
@ApiModelProperty("区间3时间集合")
|
||||||
private List<String> time2;
|
private List<String> time2 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间4时间集合")
|
@ApiModelProperty("区间4时间集合")
|
||||||
private List<String> time3;
|
private List<String> time3 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间5时间集合")
|
@ApiModelProperty("区间5时间集合")
|
||||||
private List<String> time4;
|
private List<String> time4 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间6时间集合")
|
@ApiModelProperty("区间6时间集合")
|
||||||
private List<String> time5;
|
private List<String> time5 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间7时间集合")
|
@ApiModelProperty("区间7时间集合")
|
||||||
private List<String> time6;
|
private List<String> time6 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间8时间集合")
|
@ApiModelProperty("区间8时间集合")
|
||||||
private List<String> time7;
|
private List<String> time7 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间9时间集合")
|
@ApiModelProperty("区间9时间集合")
|
||||||
private List<String> time8;
|
private List<String> time8 = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("区间10时间集合")
|
@ApiModelProperty("区间10时间集合")
|
||||||
private List<String> time9;
|
private List<String> time9 = new ArrayList<>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.njcn.harmonic.pojo.vo;
|
package com.njcn.harmonic.pojo.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -19,12 +20,15 @@ public class PowerStatisticsTargetVO {
|
|||||||
private String time;
|
private String time;
|
||||||
|
|
||||||
@ApiModelProperty("电压偏差")
|
@ApiModelProperty("电压偏差")
|
||||||
|
@ExcelProperty(index =2,value = {"电压","B"})
|
||||||
private Integer voltageOffset = 0;
|
private Integer voltageOffset = 0;
|
||||||
|
|
||||||
@ApiModelProperty("谐波电压")
|
@ApiModelProperty("谐波电压")
|
||||||
|
@ExcelProperty(index =3,value = {"电压","C"})
|
||||||
private Integer vTimes = 0;
|
private Integer vTimes = 0;
|
||||||
|
|
||||||
@ApiModelProperty("谐波电流")
|
@ApiModelProperty("谐波电流")
|
||||||
|
@ExcelProperty(index =4,value = {"电流","A"})
|
||||||
private Integer iTimes = 0;
|
private Integer iTimes = 0;
|
||||||
|
|
||||||
@ApiModelProperty("三相电压不平衡度")
|
@ApiModelProperty("三相电压不平衡度")
|
||||||
@@ -69,34 +73,58 @@ public class PowerStatisticsTargetVO {
|
|||||||
@ApiModelProperty("电流不平衡度详情")
|
@ApiModelProperty("电流不平衡度详情")
|
||||||
private List<ThdDataVO> sequenceCurrentUnbalanceList = new ArrayList<>();
|
private List<ThdDataVO> sequenceCurrentUnbalanceList = new ArrayList<>();
|
||||||
|
|
||||||
@ApiModelProperty("越限相别(用于后端辅助计算)")
|
@ApiModelProperty("相别(用于后端辅助计算)")
|
||||||
private String phasicType;
|
private String phasicType;
|
||||||
|
|
||||||
@ApiModelProperty("越限统计方式(用于后端辅助计算)")
|
@ApiModelProperty("统计方式(用于后端辅助计算)")
|
||||||
private String valueType;;
|
private String valueType;;
|
||||||
|
|
||||||
@ApiModelProperty("电压偏差国标限制(用于后端辅助计算)")
|
@ApiModelProperty("电压偏差国标限值(用于后端辅助计算)")
|
||||||
private Float voltageOffsetLimit;
|
private Float voltageOffsetLimit;
|
||||||
|
|
||||||
@ApiModelProperty("谐波电压国标限制(用于后端辅助计算)")
|
@ApiModelProperty("谐波电压国标限值(用于后端辅助计算)")
|
||||||
private Float vTimesLimit;
|
private List<Float> vTimesLimit = new ArrayList<>();;
|
||||||
|
|
||||||
@ApiModelProperty("谐波电流国标限制(用于后端辅助计算)")
|
@ApiModelProperty("谐波电流国标限值(用于后端辅助计算)")
|
||||||
private Float iTimesLimit;
|
private List<Float> iTimesLimit = new ArrayList<>();;
|
||||||
|
|
||||||
@ApiModelProperty("三相电压不平衡度国标限制(用于后端辅助计算)")
|
@ApiModelProperty("三相电压不平衡度国标限值(用于后端辅助计算)")
|
||||||
private Float ubalanceLimit;
|
private Float ubalanceLimit;
|
||||||
|
|
||||||
@ApiModelProperty("电压波动国标限制(用于后端辅助计算)")
|
@ApiModelProperty("电压波动国标限值(用于后端辅助计算)")
|
||||||
private Float voltageFluctuationLimit;
|
private Float voltageFluctuationLimit;
|
||||||
|
|
||||||
@ApiModelProperty("闪变国标限制(用于后端辅助计算)")
|
@ApiModelProperty("闪变国标限值(用于后端辅助计算)")
|
||||||
private Float flickerLimit;
|
private Float flickerLimit;
|
||||||
|
|
||||||
@ApiModelProperty("间谐波电压含有率国标限制(用于后端辅助计算)")
|
@ApiModelProperty("间谐波电压含有率国标限值(用于后端辅助计算)")
|
||||||
private Float interHarmonicLimit;
|
private List<Float> interHarmonicLimit = new ArrayList<>();;
|
||||||
|
|
||||||
@ApiModelProperty("电流不平衡度国标限制(用于后端辅助计算)")
|
@ApiModelProperty("电流不平衡度国标限值(用于后端辅助计算)")
|
||||||
private Float sequenceCurrentUnbalanceLimit;
|
private Float sequenceCurrentUnbalanceLimit;
|
||||||
|
|
||||||
|
@ApiModelProperty("电压偏差具体值(用于后端辅助计算)")
|
||||||
|
private Double voltageOffsetData;
|
||||||
|
|
||||||
|
@ApiModelProperty("谐波电压具体值(用于后端辅助计算)")
|
||||||
|
private List<Double> vTimesData = new ArrayList<>();;
|
||||||
|
|
||||||
|
@ApiModelProperty("谐波电流具体值(用于后端辅助计算)")
|
||||||
|
private List<Double> iTimesData = new ArrayList<>();;
|
||||||
|
|
||||||
|
@ApiModelProperty("三相电压不平衡度具体值(用于后端辅助计算)")
|
||||||
|
private Double ubalanceData;
|
||||||
|
|
||||||
|
@ApiModelProperty("电压波动具体值(用于后端辅助计算)")
|
||||||
|
private Double voltageFluctuationData;
|
||||||
|
|
||||||
|
@ApiModelProperty("闪变具体值(用于后端辅助计算)")
|
||||||
|
private Double flickerData;
|
||||||
|
|
||||||
|
@ApiModelProperty("间谐波电压含有率具体值(用于后端辅助计算)")
|
||||||
|
private List<Double> interHarmonicData = new ArrayList<>();
|
||||||
|
|
||||||
|
@ApiModelProperty("电流不平衡度具体值(用于后端辅助计算)")
|
||||||
|
private Double sequenceCurrentUnbalanceData;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,24 +17,6 @@ public class ThdDataVO {
|
|||||||
@ApiModelProperty("单位")
|
@ApiModelProperty("单位")
|
||||||
private String unit;
|
private String unit;
|
||||||
|
|
||||||
@ApiModelProperty("平均值A相")
|
|
||||||
private String AVGPhaseA;
|
|
||||||
|
|
||||||
@ApiModelProperty("平均值B相")
|
|
||||||
private String AVGPhaseB;
|
|
||||||
|
|
||||||
@ApiModelProperty("平均值C相")
|
|
||||||
private String AVGPhaseC;
|
|
||||||
|
|
||||||
@ApiModelProperty("CP95A相")
|
|
||||||
private String CP95PhaseA;
|
|
||||||
|
|
||||||
@ApiModelProperty("CP95B相")
|
|
||||||
private String CP95PhaseB;
|
|
||||||
|
|
||||||
@ApiModelProperty("CP95C相")
|
|
||||||
private String CP95PhaseC;
|
|
||||||
|
|
||||||
@ApiModelProperty("最小值A相")
|
@ApiModelProperty("最小值A相")
|
||||||
private String MINPhaseA;
|
private String MINPhaseA;
|
||||||
|
|
||||||
@@ -53,22 +35,28 @@ public class ThdDataVO {
|
|||||||
@ApiModelProperty("最大值C相")
|
@ApiModelProperty("最大值C相")
|
||||||
private String MAXPhaseC;
|
private String MAXPhaseC;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值A相")
|
||||||
|
private String AVGPhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值B相")
|
||||||
|
private String AVGPhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值C相")
|
||||||
|
private String AVGPhaseC;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95A相")
|
||||||
|
private String CP95PhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95B相")
|
||||||
|
private String CP95PhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95C相")
|
||||||
|
private String CP95PhaseC;
|
||||||
|
|
||||||
@ApiModelProperty("国标限值")
|
@ApiModelProperty("国标限值")
|
||||||
private Float limit;
|
private Float limit;
|
||||||
|
|
||||||
public void init(){
|
@ApiModelProperty("时间")
|
||||||
this.AVGPhaseA = "0";
|
private String time;
|
||||||
this.AVGPhaseB = "0";
|
|
||||||
this.AVGPhaseC = "0";
|
|
||||||
this.CP95PhaseA = "0";
|
|
||||||
this.CP95PhaseB = "0";
|
|
||||||
this.CP95PhaseC = "0";
|
|
||||||
this.MINPhaseA = "0";
|
|
||||||
this.MINPhaseB = "0";
|
|
||||||
this.MINPhaseC = "0";
|
|
||||||
this.MAXPhaseA = "0";
|
|
||||||
this.MAXPhaseB = "0";
|
|
||||||
this.MAXPhaseC = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package com.njcn.harmonic.pojo.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指标详情数据Excel实体类
|
||||||
|
* @author guofeihu
|
||||||
|
* @since 2024-08-20
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ThdDataVOExcel {
|
||||||
|
|
||||||
|
@ApiModelProperty("时间")
|
||||||
|
@ExcelProperty(index =0,value = "时间")
|
||||||
|
private String time;
|
||||||
|
|
||||||
|
@ApiModelProperty("名称")
|
||||||
|
@ExcelProperty(index =1,value = "指标")
|
||||||
|
private String anotherName;
|
||||||
|
|
||||||
|
@ApiModelProperty("单位")
|
||||||
|
@ExcelProperty(index =2,value = "单位")
|
||||||
|
private String unit;
|
||||||
|
|
||||||
|
@ApiModelProperty("最小值A相")
|
||||||
|
@ExcelProperty(index =3,value = {"最小值","A"})
|
||||||
|
private String MINPhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("最小值B相")
|
||||||
|
@ExcelProperty(index =4,value = {"最小值","B"})
|
||||||
|
private String MINPhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("最小值C相")
|
||||||
|
@ExcelProperty(index =5,value = {"最小值","C"})
|
||||||
|
private String MINPhaseC;
|
||||||
|
|
||||||
|
@ApiModelProperty("最大值A相")
|
||||||
|
@ExcelProperty(index =6,value = {"最大值","A"})
|
||||||
|
private String MAXPhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("最大值B相")
|
||||||
|
@ExcelProperty(index =7,value = {"最大值","B"})
|
||||||
|
private String MAXPhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("最大值C相")
|
||||||
|
@ExcelProperty(index =8,value = {"最大值","C"})
|
||||||
|
private String MAXPhaseC;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值A相")
|
||||||
|
@ExcelProperty(index =9,value = {"平均值","A"})
|
||||||
|
private String AVGPhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值B相")
|
||||||
|
@ExcelProperty(index =10,value = {"平均值","B"})
|
||||||
|
private String AVGPhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("平均值C相")
|
||||||
|
@ExcelProperty(index =11,value = {"平均值","C"})
|
||||||
|
private String AVGPhaseC;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95A相")
|
||||||
|
@ExcelProperty(index =12,value = {"cp95","A"})
|
||||||
|
private String CP95PhaseA;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95B相")
|
||||||
|
@ExcelProperty(index =13,value = {"cp95","B"})
|
||||||
|
private String CP95PhaseB;
|
||||||
|
|
||||||
|
@ApiModelProperty("CP95C相")
|
||||||
|
@ExcelProperty(index =14,value = {"cp95","C"})
|
||||||
|
private String CP95PhaseC;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -100,6 +100,12 @@
|
|||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.njcn</groupId>
|
||||||
|
<artifactId>advance-api</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ package com.njcn.harmonic.service.activepowerrange.impl;
|
|||||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.alibaba.excel.EasyExcel;
|
||||||
|
import com.alibaba.excel.ExcelWriter;
|
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
||||||
import com.njcn.harmonic.constant.Param;
|
import com.njcn.harmonic.constant.Param;
|
||||||
import com.njcn.harmonic.pojo.param.PowerStatisticsParam;
|
import com.njcn.harmonic.pojo.param.PowerStatisticsParam;
|
||||||
import com.njcn.harmonic.pojo.vo.PowerStatisticsExcelRangVO;
|
import com.njcn.harmonic.pojo.vo.*;
|
||||||
import com.njcn.harmonic.pojo.vo.PowerStatisticsTargetVO;
|
|
||||||
import com.njcn.harmonic.pojo.vo.PowerStatisticsVO;
|
|
||||||
import com.njcn.harmonic.pojo.vo.ThdDataVO;
|
|
||||||
import com.njcn.harmonic.service.activepowerrange.PowerStatisticsService;
|
import com.njcn.harmonic.service.activepowerrange.PowerStatisticsService;
|
||||||
import com.njcn.influx.pojo.bo.CommonQueryParam;
|
import com.njcn.influx.pojo.bo.CommonQueryParam;
|
||||||
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
|
||||||
@@ -28,6 +28,7 @@ import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
|
|||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -51,12 +52,23 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
|
|
||||||
private final EpdFeignClient epdFeignClient;
|
private final EpdFeignClient epdFeignClient;
|
||||||
|
|
||||||
private List<String> METHODS = Arrays.asList("AVG","CP95","MIN","MAX");
|
private List<String> METHODS = Arrays.asList(InfluxDBTableConstant.AVG,InfluxDBTableConstant.CP95,InfluxDBTableConstant.MIN,InfluxDBTableConstant.MAX);
|
||||||
|
|
||||||
private List<String> PHASE = Arrays.asList("A","B","C");
|
private List<String> PHASE = Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C);
|
||||||
|
|
||||||
|
private List<String> times = Arrays.asList("0~10%","10~20%","20~30%","30~40%","40~50%","50~60%","60~70%","70~80%","80~90%","90~100%");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PowerStatisticsVO getDataByLineId(PowerStatisticsParam powerStatisticsParam) {
|
public PowerStatisticsVO getDataByLineId(PowerStatisticsParam powerStatisticsParam) {
|
||||||
|
//每次执行区间查询前都走一遍定时任务算法(防止当天没有区间相关数据)
|
||||||
|
RActivePowerRangeParam rActivePowerRangeParam = new RActivePowerRangeParam();
|
||||||
|
BeanUtil.copyProperties(powerStatisticsParam, rActivePowerRangeParam);
|
||||||
|
//设置查询
|
||||||
|
rActivePowerRangeParam.setSearch(true);
|
||||||
|
rActivePowerRangeParam.setSearchForAdd(true);
|
||||||
|
//执行定时任务根据前端点击的时间范围及监测点
|
||||||
|
rActivePowerRangeFeignClient.record(rActivePowerRangeParam);
|
||||||
|
//执行完就可以获取到区间数据了
|
||||||
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeFeignClient.getDataByLineId(powerStatisticsParam.getLineId(),
|
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeFeignClient.getDataByLineId(powerStatisticsParam.getLineId(),
|
||||||
powerStatisticsParam.getSearchBeginTime(),powerStatisticsParam.getSearchEndTime()).getData();
|
powerStatisticsParam.getSearchBeginTime(),powerStatisticsParam.getSearchEndTime()).getData();
|
||||||
if(rActivePowerRangePO == null){
|
if(rActivePowerRangePO == null){
|
||||||
@@ -87,11 +99,10 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
@Override
|
@Override
|
||||||
public List<PowerStatisticsTargetVO> getTargetLimitById(PowerStatisticsParam powerStatisticsParam) {
|
public List<PowerStatisticsTargetVO> getTargetLimitById(PowerStatisticsParam powerStatisticsParam) {
|
||||||
List<PowerStatisticsTargetVO> data = new ArrayList<>();
|
List<PowerStatisticsTargetVO> data = new ArrayList<>();
|
||||||
|
|
||||||
RActivePowerRangeParam rActivePowerRangeParam = new RActivePowerRangeParam();
|
RActivePowerRangeParam rActivePowerRangeParam = new RActivePowerRangeParam();
|
||||||
BeanUtil.copyProperties(powerStatisticsParam, rActivePowerRangeParam);
|
BeanUtil.copyProperties(powerStatisticsParam, rActivePowerRangeParam);
|
||||||
rActivePowerRangeParam.setSearch(true);
|
rActivePowerRangeParam.setSearch(true);
|
||||||
//重点说明:powerStatisticsTargetVO结构(维度)为:time可能多组相同,取决于功率表data_harmpower_p中的相别及统计方式,标识每个指标是否越限,总之一句话:当前时间中八个指标是否越限及他们的相别和统计方式是什么
|
//重点说明:powerStatisticsTargetVO结构(维度)为:time可能多组相同,取决于功率表data_harmpower_p中的相别及统计方式,标识每个指标是否越限,总之一句话:每条数据当前时间中八个指标是否越限及他们的相别和统计方式是什么
|
||||||
//基于record结构需要做维度的转换
|
//基于record结构需要做维度的转换
|
||||||
List<PowerStatisticsTargetVO> record = rActivePowerRangeFeignClient.record(rActivePowerRangeParam).getData();
|
List<PowerStatisticsTargetVO> record = rActivePowerRangeFeignClient.record(rActivePowerRangeParam).getData();
|
||||||
//根据时间分组:
|
//根据时间分组:
|
||||||
@@ -99,126 +110,211 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
map.forEach((key, value) ->{
|
map.forEach((key, value) ->{
|
||||||
PowerStatisticsTargetVO powerStatisticsTargetVO = new PowerStatisticsTargetVO();
|
PowerStatisticsTargetVO powerStatisticsTargetVO = new PowerStatisticsTargetVO();
|
||||||
powerStatisticsTargetVO.setTime(key);
|
powerStatisticsTargetVO.setTime(key);
|
||||||
ThdDataVO thdDataVO = new ThdDataVO();
|
powerStatisticsTargetVO.setField(powerStatisticsParam.getField());
|
||||||
thdDataVO.init();
|
//各指标越限的相别及统计方式集合
|
||||||
Map<String,String> voltageOffsetPV = new HashMap<>();
|
List<Map<String,String>> pvs = new ArrayList<>();
|
||||||
Map<String,String> vTimesPV = new HashMap<>();
|
//遍历当前时间下的区间指标(注意:可能多组只是说统计方式和相别不同)
|
||||||
Map<String,String> iTimesPV = new HashMap<>();
|
|
||||||
Map<String,String> ubalancePV = new HashMap<>();
|
|
||||||
Map<String,String> voltageFluctuationPV = new HashMap<>();
|
|
||||||
Map<String,String> flickerPV = new HashMap<>();
|
|
||||||
Map<String,String> interHarmonicPV = new HashMap<>();
|
|
||||||
Map<String,String> sequenceCurrentUnbalancePV = new HashMap<>();
|
|
||||||
for(PowerStatisticsTargetVO vo : value){
|
for(PowerStatisticsTargetVO vo : value){
|
||||||
if(vo.getVoltageOffset() == 1){
|
//以下这些判断只要有一个指标越限了(不管是什么统计方式和相别)直接标识该指标越限(这些字段用于前端展示)
|
||||||
powerStatisticsTargetVO.setVoltageOffset(1);
|
if(vo.getVoltageOffset().intValue() == 1) powerStatisticsTargetVO.setVoltageOffset(1);
|
||||||
voltageOffsetPV.put(vo.getPhasicType(),vo.getValueType());
|
if(vo.getVTimes().intValue() == 1) powerStatisticsTargetVO.setVTimes(1);
|
||||||
}
|
if(vo.getITimes().intValue() == 1) powerStatisticsTargetVO.setITimes(1);
|
||||||
if(vo.getVTimes() == 1){
|
if(vo.getUbalance().intValue() == 1) powerStatisticsTargetVO.setUbalance(1);
|
||||||
powerStatisticsTargetVO.setVTimes(1);
|
if(vo.getVoltageFluctuation().intValue() == 1) powerStatisticsTargetVO.setVoltageFluctuation(1);
|
||||||
vTimesPV.put(vo.getPhasicType(),vo.getValueType());
|
if(vo.getFlicker().intValue() == 1) powerStatisticsTargetVO.setFlicker(1);
|
||||||
}
|
if(vo.getInterHarmonic().intValue() == 1) powerStatisticsTargetVO.setInterHarmonic(1);
|
||||||
if(vo.getITimes() == 1){
|
if(vo.getSequenceCurrentUnbalance().intValue() == 1) powerStatisticsTargetVO.setSequenceCurrentUnbalance(1);
|
||||||
powerStatisticsTargetVO.setITimes(1);
|
//以下逻辑用于前端点击指标时能看到指标具体的越限情况(比方说A相AVG越限了)
|
||||||
iTimesPV.put(vo.getPhasicType(),vo.getValueType());
|
Map<String,String> pv = new HashMap<>();
|
||||||
}
|
pv.put(vo.getPhasicType(),vo.getValueType());
|
||||||
if(vo.getUbalance() == 1){
|
//除了带有谐波次数的指标需要特殊处理其他正常添加到pvs中
|
||||||
powerStatisticsTargetVO.setUbalance(1);
|
if(vo.getVoltageOffsetData()!=null) pv.put(Param.voltageOffset,df.format(vo.getVoltageOffsetData()));
|
||||||
ubalancePV.put(vo.getPhasicType(),vo.getValueType());
|
if(vo.getUbalanceData()!=null) pv.put(Param.ubalance,df.format(vo.getUbalanceData()));
|
||||||
}
|
if(vo.getVoltageFluctuationData()!=null) pv.put(Param.voltageFluctuation,df.format(vo.getVoltageFluctuationData()));
|
||||||
if(vo.getVoltageFluctuation() == 1){
|
if(vo.getFlickerData()!=null) pv.put(Param.flicker,df.format(vo.getFlickerData()));
|
||||||
powerStatisticsTargetVO.setVoltageFluctuation(1);
|
if(vo.getSequenceCurrentUnbalanceData()!=null) pv.put(Param.sequenceCurrentUnbalance,df.format(vo.getSequenceCurrentUnbalanceData()));
|
||||||
voltageFluctuationPV.put(vo.getPhasicType(),vo.getValueType());
|
pvs.add(pv);
|
||||||
}
|
|
||||||
if(vo.getFlicker() == 1){
|
|
||||||
powerStatisticsTargetVO.setFlicker(1);
|
|
||||||
flickerPV.put(vo.getPhasicType(),vo.getValueType());
|
|
||||||
}
|
|
||||||
if(vo.getInterHarmonic() == 1){
|
|
||||||
powerStatisticsTargetVO.setInterHarmonic(1);
|
|
||||||
interHarmonicPV.put(vo.getPhasicType(),vo.getValueType());
|
|
||||||
}
|
|
||||||
if(vo.getSequenceCurrentUnbalance() == 1){
|
|
||||||
powerStatisticsTargetVO.setSequenceCurrentUnbalance(1);
|
|
||||||
sequenceCurrentUnbalancePV.put(vo.getPhasicType(),vo.getValueType());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
powerStatisticsTargetVO.setVoltageOffsetList(initPV(voltageOffsetPV,"电压偏差",value.get(0).getVoltageOffsetLimit()));
|
powerStatisticsTargetVO.setVoltageOffsetList(initPV(pvs,Param.voltageOffset,value.get(0).getVoltageOffsetLimit()));
|
||||||
powerStatisticsTargetVO.setVTimesList(initPV(vTimesPV,"谐波电压",value.get(0).getVTimesLimit()));
|
//谐波电压带有谐波次数需要特殊处理
|
||||||
powerStatisticsTargetVO.setITimestList(initPV(iTimesPV,"谐波电流",value.get(0).getITimesLimit()));
|
powerStatisticsTargetVO.setVTimesList(initFrequencyPV(value,Param.vTimes,value.get(0).getVTimesLimit()));
|
||||||
powerStatisticsTargetVO.setUbalanceList(initPV(ubalancePV,"三相电压不平衡度",value.get(0).getUbalanceLimit()));
|
//谐波电流带有谐波次数需要特殊处理
|
||||||
powerStatisticsTargetVO.setVoltageFluctuationList(initPV(voltageFluctuationPV,"电压波动",value.get(0).getVoltageFluctuationLimit()));
|
powerStatisticsTargetVO.setITimestList(initFrequencyPV(value,Param.iTimes,value.get(0).getITimesLimit()));
|
||||||
powerStatisticsTargetVO.setFlickerList(initPV(flickerPV,"闪变",value.get(0).getFlickerLimit()));
|
powerStatisticsTargetVO.setUbalanceList(initPV(pvs,Param.ubalance,value.get(0).getUbalanceLimit()));
|
||||||
powerStatisticsTargetVO.setInterHarmonicList(initPV(interHarmonicPV,"间谐波电压含有率",value.get(0).getInterHarmonicLimit()));
|
powerStatisticsTargetVO.setVoltageFluctuationList(initPV(pvs,Param.voltageFluctuation,value.get(0).getVoltageFluctuationLimit()));
|
||||||
powerStatisticsTargetVO.setSequenceCurrentUnbalanceList(initPV(sequenceCurrentUnbalancePV,"电流不平衡度",value.get(0).getSequenceCurrentUnbalanceLimit()));
|
powerStatisticsTargetVO.setFlickerList(initPV(pvs,Param.flicker,value.get(0).getFlickerLimit()));
|
||||||
|
//间谐波电压含有率带有谐波次数需要特殊处理
|
||||||
|
powerStatisticsTargetVO.setInterHarmonicList(initFrequencyPV(value,Param.interHarmonic,value.get(0).getInterHarmonicLimit()));
|
||||||
|
powerStatisticsTargetVO.setSequenceCurrentUnbalanceList(initPV(pvs,Param.sequenceCurrentUnbalance,value.get(0).getSequenceCurrentUnbalanceLimit()));
|
||||||
data.add(powerStatisticsTargetVO);
|
data.add(powerStatisticsTargetVO);
|
||||||
});
|
});
|
||||||
return data;
|
return data.stream().sorted(Comparator.comparing(PowerStatisticsTargetVO::getTime)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ThdDataVO> initPV(Map<String,String> pv,String name,Float limit){
|
private List<ThdDataVO> initPV(List<Map<String,String>> pv, String name, Float limit){
|
||||||
List<ThdDataVO> thdDataVOS = new ArrayList<>();
|
List<ThdDataVO> thdDataVOS = new ArrayList<>();
|
||||||
ThdDataVO tdv = new ThdDataVO();
|
ThdDataVO tdv = new ThdDataVO();
|
||||||
tdv.setAnotherName(name);
|
tdv.setAnotherName(name);
|
||||||
tdv.setLimit(limit);
|
tdv.setLimit(limit);
|
||||||
tdv.init();
|
//便利统计方式和相别集合渲染对应字段
|
||||||
pv.forEach((phasicType, valueType) ->{
|
for(Map<String,String> arr :pv){
|
||||||
switch (valueType){
|
arr.forEach((phasicType, valueType) ->{
|
||||||
case InfluxDBTableConstant.AVG:
|
switch (valueType){
|
||||||
switch (valueType){
|
case InfluxDBTableConstant.AVG:
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_A:
|
switch (phasicType){
|
||||||
tdv.setAVGPhaseA("1");
|
case InfluxDBTableConstant.PHASE_TYPE_A:
|
||||||
break;
|
tdv.setAVGPhaseA(arr.get(name));
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_B:
|
break;
|
||||||
tdv.setAVGPhaseB("1");
|
case InfluxDBTableConstant.PHASE_TYPE_B:
|
||||||
break;
|
tdv.setAVGPhaseB(arr.get(name));
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_C:
|
break;
|
||||||
tdv.setAVGPhaseC("1");
|
case InfluxDBTableConstant.PHASE_TYPE_C:
|
||||||
break;
|
tdv.setAVGPhaseC(arr.get(name));
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.CP95:
|
||||||
|
switch (phasicType){
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_A:
|
||||||
|
tdv.setCP95PhaseA(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_B:
|
||||||
|
tdv.setCP95PhaseB(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_C:
|
||||||
|
tdv.setCP95PhaseC(arr.get(name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.MIN:
|
||||||
|
switch (phasicType){
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_A:
|
||||||
|
tdv.setMINPhaseA(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_B:
|
||||||
|
tdv.setMINPhaseB(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_C:
|
||||||
|
tdv.setMINPhaseC(arr.get(name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.MAX:
|
||||||
|
switch (phasicType){
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_A:
|
||||||
|
tdv.setMAXPhaseA(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_B:
|
||||||
|
tdv.setMAXPhaseB(arr.get(name));
|
||||||
|
break;
|
||||||
|
case InfluxDBTableConstant.PHASE_TYPE_C:
|
||||||
|
tdv.setMAXPhaseC(arr.get(name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//如果所有的相别和统计方式都没有值则可直接忽略该条数据
|
||||||
|
if(tdv.getAVGPhaseA() != null || tdv.getAVGPhaseB() != null
|
||||||
|
|| tdv.getAVGPhaseC() != null || tdv.getCP95PhaseA() != null
|
||||||
|
|| tdv.getCP95PhaseB() != null || tdv.getCP95PhaseC() != null
|
||||||
|
|| tdv.getMINPhaseA() != null || tdv.getMINPhaseB() != null
|
||||||
|
|| tdv.getMINPhaseC() != null || tdv.getMAXPhaseA() != null
|
||||||
|
|| tdv.getMAXPhaseB() != null || tdv.getMAXPhaseC() != null){
|
||||||
|
thdDataVOS.add(tdv);
|
||||||
|
}
|
||||||
|
return thdDataVOS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Double> getFrequencyData(List<PowerStatisticsTargetVO> pv,String valueType,String phasicType,String name){
|
||||||
|
//根据不同的相别及统计方式分别获取该时间组下区间指标集合的具体值
|
||||||
|
List<PowerStatisticsTargetVO> data = pv.stream().filter(param->phasicType.equals(param.getPhasicType()) && valueType.equals(param.getValueType())).collect(Collectors.toList());
|
||||||
|
if(!data.isEmpty()){
|
||||||
|
switch (name){
|
||||||
|
case Param.vTimes:
|
||||||
|
return data.get(0).getVTimesData();
|
||||||
|
case Param.iTimes:
|
||||||
|
return data.get(0).getITimesData();
|
||||||
|
case Param.interHarmonic:
|
||||||
|
return data.get(0).getInterHarmonicData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String frequencyPVList(List<Double> data,int index){
|
||||||
|
try {
|
||||||
|
return df.format(data.get(index));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ThdDataVO> initFrequencyPV(List<PowerStatisticsTargetVO> pv, String name, List<Float> limit){
|
||||||
|
List<ThdDataVO> thdDataVOS = new ArrayList<>();
|
||||||
|
if(!limit.isEmpty()){
|
||||||
|
//根据不同的相别及统计方式分别获取该时间组下区间指标集合的具体值
|
||||||
|
List<Double> avgA = getFrequencyData(pv,InfluxDBTableConstant.AVG,InfluxDBTableConstant.PHASE_TYPE_A,name);
|
||||||
|
List<Double> avgB = getFrequencyData(pv,InfluxDBTableConstant.AVG,InfluxDBTableConstant.PHASE_TYPE_B,name);
|
||||||
|
List<Double> avgC = getFrequencyData(pv,InfluxDBTableConstant.AVG,InfluxDBTableConstant.PHASE_TYPE_C,name);
|
||||||
|
List<Double> cp94A = getFrequencyData(pv,InfluxDBTableConstant.CP95,InfluxDBTableConstant.PHASE_TYPE_A,name);
|
||||||
|
List<Double> cp94B = getFrequencyData(pv,InfluxDBTableConstant.CP95,InfluxDBTableConstant.PHASE_TYPE_B,name);
|
||||||
|
List<Double> cp94C = getFrequencyData(pv,InfluxDBTableConstant.CP95,InfluxDBTableConstant.PHASE_TYPE_C,name);
|
||||||
|
List<Double> minA = getFrequencyData(pv,InfluxDBTableConstant.MIN,InfluxDBTableConstant.PHASE_TYPE_A,name);
|
||||||
|
List<Double> minB = getFrequencyData(pv,InfluxDBTableConstant.MIN,InfluxDBTableConstant.PHASE_TYPE_B,name);
|
||||||
|
List<Double> minC = getFrequencyData(pv,InfluxDBTableConstant.MIN,InfluxDBTableConstant.PHASE_TYPE_C,name);
|
||||||
|
List<Double> maxA = getFrequencyData(pv,InfluxDBTableConstant.MAX,InfluxDBTableConstant.PHASE_TYPE_A,name);
|
||||||
|
List<Double> maxB = getFrequencyData(pv,InfluxDBTableConstant.MAX,InfluxDBTableConstant.PHASE_TYPE_B,name);
|
||||||
|
List<Double> maxC = getFrequencyData(pv,InfluxDBTableConstant.MAX,InfluxDBTableConstant.PHASE_TYPE_C,name);
|
||||||
|
int k = 0,j = 0;
|
||||||
|
double c = 0;
|
||||||
|
switch (name){
|
||||||
|
//谐波电压和电流默认谐波次数2-25
|
||||||
|
case Param.vTimes:
|
||||||
|
case Param.iTimes:
|
||||||
|
k = 2;
|
||||||
|
j = 25;
|
||||||
break;
|
break;
|
||||||
case InfluxDBTableConstant.CP95:
|
//间谐波电压含有率默认谐波次数1-16
|
||||||
switch (valueType){
|
case Param.interHarmonic:
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_A:
|
k = 1;
|
||||||
tdv.setCP95PhaseA("1");
|
j = 16;
|
||||||
break;
|
c = 0.5;
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_B:
|
|
||||||
tdv.setCP95PhaseB("1");
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_C:
|
|
||||||
tdv.setCP95PhaseC("1");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.MIN:
|
|
||||||
switch (valueType){
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_A:
|
|
||||||
tdv.setMINPhaseA("1");
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_B:
|
|
||||||
tdv.setMINPhaseB("1");
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_C:
|
|
||||||
tdv.setMINPhaseC("1");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.MAX:
|
|
||||||
switch (valueType){
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_A:
|
|
||||||
tdv.setMAXPhaseA("1");
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_B:
|
|
||||||
tdv.setMAXPhaseB("1");
|
|
||||||
break;
|
|
||||||
case InfluxDBTableConstant.PHASE_TYPE_C:
|
|
||||||
tdv.setMAXPhaseC("1");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
for (int i = k; i <= j; i++) {
|
||||||
thdDataVOS.add(tdv);
|
ThdDataVO tdv = new ThdDataVO();
|
||||||
|
tdv.setAnotherName(name +(((i-c)+"").replace(".0",""))+"次");
|
||||||
|
try {
|
||||||
|
tdv.setLimit(limit.get(i-k));
|
||||||
|
//frequencyPVList次方法提提高容灾,如果真的出现数组越界只有一种情况:有些有功功率查不到对应的某些指标数据
|
||||||
|
tdv.setAVGPhaseA(frequencyPVList(avgA,i-k));
|
||||||
|
tdv.setAVGPhaseB(frequencyPVList(avgB,i-k));
|
||||||
|
tdv.setAVGPhaseC(frequencyPVList(avgC,i-k));
|
||||||
|
tdv.setCP95PhaseA(frequencyPVList(cp94A,i-k));
|
||||||
|
tdv.setCP95PhaseB(frequencyPVList(cp94B,i-k));
|
||||||
|
tdv.setCP95PhaseC(frequencyPVList(cp94C,i-k));
|
||||||
|
tdv.setMINPhaseA(frequencyPVList(minA,i-k));
|
||||||
|
tdv.setMINPhaseA(frequencyPVList(minB,i-k));
|
||||||
|
tdv.setMINPhaseA(frequencyPVList(minC,i-k));
|
||||||
|
tdv.setMAXPhaseA(frequencyPVList(maxA,i-k));
|
||||||
|
tdv.setMAXPhaseA(frequencyPVList(maxB,i-k));
|
||||||
|
tdv.setMAXPhaseA(frequencyPVList(maxC,i-k));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//如果所有的相别和统计方式都没有值则可直接忽略该条数据
|
||||||
|
if(tdv.getAVGPhaseA() != null || tdv.getAVGPhaseB() != null
|
||||||
|
|| tdv.getAVGPhaseC() != null || tdv.getCP95PhaseA() != null
|
||||||
|
|| tdv.getCP95PhaseB() != null || tdv.getCP95PhaseC() != null
|
||||||
|
|| tdv.getMINPhaseA() != null || tdv.getMINPhaseB() != null
|
||||||
|
|| tdv.getMINPhaseC() != null || tdv.getMAXPhaseA() != null
|
||||||
|
|| tdv.getMAXPhaseB() != null || tdv.getMAXPhaseC() != null){
|
||||||
|
thdDataVOS.add(tdv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return thdDataVOS;
|
return thdDataVOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,6 +322,7 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
public List<ThdDataVO> getTargetByTime(PowerStatisticsParam powerStatisticsParam) {
|
public List<ThdDataVO> getTargetByTime(PowerStatisticsParam powerStatisticsParam) {
|
||||||
List<ThdDataVO> result = new ArrayList();
|
List<ThdDataVO> result = new ArrayList();
|
||||||
List<EleEpdPqd> eleEpdPqds = new ArrayList<>();
|
List<EleEpdPqd> eleEpdPqds = new ArrayList<>();
|
||||||
|
//获取固定指标具体请看Param.DATABSEMAP
|
||||||
if("1".equals(powerStatisticsParam.getStatisticalId())){
|
if("1".equals(powerStatisticsParam.getStatisticalId())){
|
||||||
com.njcn.device.pq.constant.Param.DATABSEMAP.forEach((key,value) ->{
|
com.njcn.device.pq.constant.Param.DATABSEMAP.forEach((key,value) ->{
|
||||||
List<EleEpdPqd> epdPqds = epdFeignClient.findListByShowName(key).getData();
|
List<EleEpdPqd> epdPqds = epdFeignClient.findListByShowName(key).getData();
|
||||||
@@ -277,10 +374,12 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
eleEpdPqds.forEach(epdPqd->{
|
eleEpdPqds.forEach(epdPqd->{
|
||||||
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
||||||
commonQueryParams.clear();
|
commonQueryParams.clear();
|
||||||
|
//带有谐波次数的指标
|
||||||
if(epdPqd.getHarmEnd()!=null && epdPqd.getHarmStart()!=null){
|
if(epdPqd.getHarmEnd()!=null && epdPqd.getHarmStart()!=null){
|
||||||
for (int i = epdPqd.getHarmStart().intValue(); i <= epdPqd.getHarmEnd().intValue(); i++) {
|
for (int i = epdPqd.getHarmStart().intValue(); i <= epdPqd.getHarmEnd().intValue(); i++) {
|
||||||
ThdDataVO thdDataVO = new ThdDataVO();
|
ThdDataVO thdDataVO = new ThdDataVO();
|
||||||
thdDataVO.setUnit(epdPqd.getUnit());
|
thdDataVO.setUnit(epdPqd.getUnit());
|
||||||
|
thdDataVO.setTime(powerStatisticsParam.getSearchBeginTime());
|
||||||
String index = i+"";
|
String index = i+"";
|
||||||
if(epdPqd.getShowName().equals("间谐波电压含有率")){
|
if(epdPqd.getShowName().equals("间谐波电压含有率")){
|
||||||
thdDataVO.setAnotherName(Integer.parseInt(index) - 0.5 + "次");
|
thdDataVO.setAnotherName(Integer.parseInt(index) - 0.5 + "次");
|
||||||
@@ -291,9 +390,11 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
result.add(thdDataVO);
|
result.add(thdDataVO);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
//无谐波次数的指标
|
||||||
ThdDataVO thdDataVO = new ThdDataVO();
|
ThdDataVO thdDataVO = new ThdDataVO();
|
||||||
thdDataVO.setAnotherName(epdPqd.getShowName());
|
thdDataVO.setAnotherName(epdPqd.getShowName());
|
||||||
thdDataVO.setUnit(epdPqd.getUnit());
|
thdDataVO.setUnit(epdPqd.getUnit());
|
||||||
|
thdDataVO.setTime(powerStatisticsParam.getSearchBeginTime());
|
||||||
getThdDataVO(null,thdDataVO,epdPqd,powerStatisticsParam);
|
getThdDataVO(null,thdDataVO,epdPqd,powerStatisticsParam);
|
||||||
result.add(thdDataVO);
|
result.add(thdDataVO);
|
||||||
}
|
}
|
||||||
@@ -302,14 +403,15 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//将各个指标的所有的相别统计方式以表格的维度进行组装数据
|
//将各个指标的所有的相别统计方式以表格的维度进行组装数据
|
||||||
private ThdDataVO getThdDataVO(String columnName,ThdDataVO thdDataVO,EleEpdPqd epdPqd,PowerStatisticsParam powerStatisticsParam){
|
private ThdDataVO getThdDataVO(String columnName, ThdDataVO thdDataVO, EleEpdPqd epdPqd, PowerStatisticsParam powerStatisticsParam){
|
||||||
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
||||||
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
||||||
commonQueryParam.setLineId(powerStatisticsParam.getLineId());
|
commonQueryParam.setLineId(powerStatisticsParam.getLineId());
|
||||||
commonQueryParam.setTableName(epdPqd.getClassId());
|
commonQueryParam.setTableName(epdPqd.getClassId());
|
||||||
commonQueryParam.setColumnName(columnName == null ? epdPqd.getOtherName():columnName);
|
commonQueryParam.setColumnName(columnName == null ? epdPqd.getOtherName():columnName);
|
||||||
commonQueryParam.setStartTime(powerStatisticsParam.getSearchBeginTime()+Param.START_TIME);
|
commonQueryParam.setStartTime(powerStatisticsParam.getSearchBeginTime());
|
||||||
commonQueryParam.setEndTime(powerStatisticsParam.getSearchEndTime()+ Param.END_TIME);
|
commonQueryParam.setEndTime(powerStatisticsParam.getSearchEndTime());
|
||||||
|
//唯一不同的条件时统计方式和相别,所以这边直接把所有的情况都考虑进去
|
||||||
commonQueryParam.setDataType(METHODS.get(0));
|
commonQueryParam.setDataType(METHODS.get(0));
|
||||||
commonQueryParam.setPhasic(PHASE.get(0));
|
commonQueryParam.setPhasic(PHASE.get(0));
|
||||||
commonQueryParams.add(commonQueryParam);
|
commonQueryParams.add(commonQueryParam);
|
||||||
@@ -499,10 +601,80 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exportExcelListTemplate(PowerStatisticsParam powerStatisticsParam, HttpServletResponse response) {
|
public void exportExcelListTemplate(PowerStatisticsParam powerStatisticsParam, HttpServletResponse response) {
|
||||||
ExportParams exportParams = new ExportParams(powerStatisticsParam.getSearchValue(), "指标越限列表数据");
|
//获取各个区间的详细数据(就是调用getTargetByTime方法在进行某些指标的名称的处理)
|
||||||
List<PowerStatisticsTargetVO> powerStatisticsTargetVOS = getTargetLimitById(powerStatisticsParam);
|
List<ThdDataVOExcel> time0 = getExcelListRecord(powerStatisticsParam.getTime0(),powerStatisticsParam.getLineId());
|
||||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, PowerStatisticsTargetVO.class, powerStatisticsTargetVOS);
|
List<ThdDataVOExcel> time1 = getExcelListRecord(powerStatisticsParam.getTime1(),powerStatisticsParam.getLineId());
|
||||||
PoiUtil.exportFileByWorkbook(workbook, powerStatisticsParam.getSearchValue()+".xlsx", response);
|
List<ThdDataVOExcel> time2 = getExcelListRecord(powerStatisticsParam.getTime2(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time3 = getExcelListRecord(powerStatisticsParam.getTime3(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time4 = getExcelListRecord(powerStatisticsParam.getTime4(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time5 = getExcelListRecord(powerStatisticsParam.getTime5(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time6 = getExcelListRecord(powerStatisticsParam.getTime6(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time7 = getExcelListRecord(powerStatisticsParam.getTime7(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time8 = getExcelListRecord(powerStatisticsParam.getTime8(),powerStatisticsParam.getLineId());
|
||||||
|
List<ThdDataVOExcel> time9 = getExcelListRecord(powerStatisticsParam.getTime9(),powerStatisticsParam.getLineId());
|
||||||
|
try {
|
||||||
|
//10个区间10个sheet10组数据
|
||||||
|
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), ThdDataVOExcel.class).build();
|
||||||
|
WriteSheet sheet0 = EasyExcel.writerSheet(0, times.get(0) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time0, sheet0);
|
||||||
|
WriteSheet sheet1 = EasyExcel.writerSheet(1, times.get(1) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time1, sheet1);
|
||||||
|
WriteSheet sheet2 = EasyExcel.writerSheet(2, times.get(2) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time2, sheet2);
|
||||||
|
WriteSheet sheet3 = EasyExcel.writerSheet(3, times.get(3) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time3, sheet3);
|
||||||
|
WriteSheet sheet4 = EasyExcel.writerSheet(4, times.get(4) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time4, sheet4);
|
||||||
|
WriteSheet sheet5 = EasyExcel.writerSheet(5, times.get(5) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time5, sheet5);
|
||||||
|
WriteSheet sheet6 = EasyExcel.writerSheet(6, times.get(6) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time6, sheet6);
|
||||||
|
WriteSheet sheet7 = EasyExcel.writerSheet(7, times.get(7) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time7, sheet7);
|
||||||
|
WriteSheet sheet8 = EasyExcel.writerSheet(8, times.get(8) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time8, sheet8);
|
||||||
|
WriteSheet sheet9 = EasyExcel.writerSheet(9, times.get(9) ).head(ThdDataVOExcel.class).build();
|
||||||
|
excelWriter.write(time9, sheet9);
|
||||||
|
excelWriter.finish();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<ThdDataVOExcel> getExcelListRecord(List<String> times, String lineId){
|
||||||
|
List<ThdDataVO> thdDataVOS = new ArrayList<>();
|
||||||
|
List<ThdDataVOExcel> thdDataVOExcels = new ArrayList<>();
|
||||||
|
PowerStatisticsParam powerStatisticsParam = new PowerStatisticsParam();
|
||||||
|
powerStatisticsParam.setLineId(lineId);
|
||||||
|
for(String time : times){
|
||||||
|
powerStatisticsParam.setSearchBeginTime(time);
|
||||||
|
powerStatisticsParam.setSearchEndTime(time);
|
||||||
|
for (int i = 1; i <= 4; i++) {
|
||||||
|
powerStatisticsParam.setStatisticalId(i+"");
|
||||||
|
List<ThdDataVO> thdDataVOList = getTargetByTime(powerStatisticsParam);
|
||||||
|
if(i != 1){
|
||||||
|
for(ThdDataVO thdDataVO : thdDataVOList){
|
||||||
|
switch (i){
|
||||||
|
case 2:
|
||||||
|
thdDataVO.setAnotherName("谐波电压"+thdDataVO.getAnotherName());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
thdDataVO.setAnotherName("谐波电流"+thdDataVO.getAnotherName());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
thdDataVO.setAnotherName("间谐波电压"+thdDataVO.getAnotherName());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
thdDataVOS.addAll(thdDataVOList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(ThdDataVO thdDataVO : thdDataVOS){
|
||||||
|
ThdDataVOExcel thdDataVOExcel = new ThdDataVOExcel();
|
||||||
|
BeanUtils.copyProperties(thdDataVO, thdDataVOExcel);
|
||||||
|
thdDataVOExcels.add(thdDataVOExcel);
|
||||||
|
}
|
||||||
|
return thdDataVOExcels;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,10 @@ import com.njcn.prepare.harmonic.pojo.param.RActivePowerRangeParam;
|
|||||||
import com.njcn.prepare.harmonic.pojo.po.RActivePowerRangePO;
|
import com.njcn.prepare.harmonic.pojo.po.RActivePowerRangePO;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.event.RActivePowerRangeService;
|
import com.njcn.prepare.harmonic.service.mysql.event.RActivePowerRangeService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@@ -34,6 +36,7 @@ import java.util.stream.Collectors;
|
|||||||
* @author guofeihu
|
* @author guofeihu
|
||||||
* @since 2024-08-22
|
* @since 2024-08-22
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRangeMapper, RActivePowerRangePO> implements RActivePowerRangeService {
|
public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRangeMapper, RActivePowerRangePO> implements RActivePowerRangeService {
|
||||||
@@ -48,20 +51,42 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
|
|
||||||
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Param.DATE_FORMAT);
|
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Param.DATE_FORMAT);
|
||||||
|
|
||||||
|
private SimpleDateFormat sdf = new SimpleDateFormat(Param.DATE_FORMAT);
|
||||||
|
|
||||||
|
private List<String> PHASE = Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 整个算法的业务逻辑:
|
||||||
|
* 1:查询InfluxDb的功率表:data_harmpower_p
|
||||||
|
* 2:遍历功率集合将功率(p字段) / line_id监测点绑定的新能源场站中的风电场的额定功率,看落在哪个区间内
|
||||||
|
* 3:遍历功率集合将每条功率对应的各个指标(指标的所有相别和统计方式都要一一比较)与国标限值比较看看是否越限(功率对应的各个指标详情请见下方)
|
||||||
|
* --------------------------------指标---------------------------------
|
||||||
|
* 电压偏差 data_v vu_dev 电压偏差 如果vu_dev>0,使用上偏差限值对比;如果vu_dev<0,使用下偏差限值对比
|
||||||
|
* 谐波电压 data_v v_thd 电压总谐波总谐波畸变率 有一个指标超标,则谐波电压超标
|
||||||
|
* data_harmrate_v v2-v25 2-25次谐波电压含有率
|
||||||
|
* 谐波电流 data_i i2-i25 2-25次谐波电流幅值 有一个指标超标,则谐波电压超标
|
||||||
|
* 三相电压不平衡度 data_v v_unbalance
|
||||||
|
* 电压波动 data_fluc fluc
|
||||||
|
* 长时闪变 data_plt plt
|
||||||
|
* 间谐波电压含有率 data_inharm_v v1-v16 0.5-15.5次间谐波电压含有率 有一个指标超标,则谐波电压超标
|
||||||
|
* 电流不平衡度 data_i i_unbalance 这个不确定,找宝哥确认下
|
||||||
|
* @param rActivePowerRangeParam
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<PowerStatisticsTargetVO> record(RActivePowerRangeParam rActivePowerRangeParam) {
|
public List<PowerStatisticsTargetVO> record(RActivePowerRangeParam rActivePowerRangeParam) {
|
||||||
if(rActivePowerRangeParam == null){
|
if(rActivePowerRangeParam == null){
|
||||||
rActivePowerRangeParam = new RActivePowerRangeParam();
|
rActivePowerRangeParam = new RActivePowerRangeParam();
|
||||||
}
|
}
|
||||||
//根据事件间隔查询 SELECT * FROM "data_harmpower_p" limit 1 得到P
|
//返回的最终结果
|
||||||
// 便利 用p / 风电场额定有功功率 * 100% 看落在那个占比
|
|
||||||
List<PowerStatisticsTargetVO> powerStatisticsTargetVOS = new ArrayList<>();
|
List<PowerStatisticsTargetVO> powerStatisticsTargetVOS = new ArrayList<>();
|
||||||
//定义开始和结束时间
|
//默认初始化开始和结束时间
|
||||||
String startTime = getTime(rActivePowerRangeParam.getInterval(),0);
|
String startTime = getTime(rActivePowerRangeParam.getInterval(),0);
|
||||||
String endTime = getTime(rActivePowerRangeParam.getInterval(),1);
|
String endTime = getTime(rActivePowerRangeParam.getInterval(),1);
|
||||||
//获取时间段内的有功功率集合
|
//获取时间段内的有功功率集合
|
||||||
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
||||||
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
||||||
|
//控制参数中如果search为true,则获取有功功率集合的时间段内为BaseParam中的searchBeginTime和searchEndTime(用于前端有功功率查询页面相关接口)
|
||||||
if(rActivePowerRangeParam.isSearch()){
|
if(rActivePowerRangeParam.isSearch()){
|
||||||
startTime = rActivePowerRangeParam.getSearchBeginTime()+Param.BEGIN;
|
startTime = rActivePowerRangeParam.getSearchBeginTime()+Param.BEGIN;
|
||||||
endTime = rActivePowerRangeParam.getSearchEndTime()+Param.END;
|
endTime = rActivePowerRangeParam.getSearchEndTime()+Param.END;
|
||||||
@@ -70,25 +95,37 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
//时间段
|
//时间段
|
||||||
commonQueryParam.setStartTime(startTime);
|
commonQueryParam.setStartTime(startTime);
|
||||||
commonQueryParam.setEndTime(endTime);
|
commonQueryParam.setEndTime(endTime);
|
||||||
//不传统计方式及相别
|
//临时模拟增加的条件(用于调试主要是数据量太大非常消耗时间)
|
||||||
|
// commonQueryParam.setDataType("AVG");
|
||||||
|
// commonQueryParam.setPhasic("A");
|
||||||
|
// commonQueryParam.setStartTime("2024-09-01 00:00:00");
|
||||||
|
// commonQueryParam.setEndTime("2024-09-01 00:00:00");
|
||||||
//功率表data_harmpower_p及字段p
|
//功率表data_harmpower_p及字段p
|
||||||
commonQueryParam.setTableName(InfluxDBTableConstant.DATA_HARM_POWER_P);
|
commonQueryParam.setTableName(InfluxDBTableConstant.DATA_HARM_POWER_P);
|
||||||
commonQueryParam.setColumnName("p");
|
commonQueryParam.setColumnName("p");
|
||||||
commonQueryParams.add(commonQueryParam);
|
commonQueryParams.add(commonQueryParam);
|
||||||
|
//这边没有设置他的统计方式和相别是因为根据有功功率查询各个指标的时候要把所有的指标和统计方式都查出来一一比较
|
||||||
List<StatisticalDataDTO> dataHarmPowerPS = commonService.getNewDeviceRtDataByTime(commonQueryParams);
|
List<StatisticalDataDTO> dataHarmPowerPS = commonService.getNewDeviceRtDataByTime(commonQueryParams);
|
||||||
|
//由于前端写死了各个指标的相别(只有A、B、C所以这边直接限制死了)
|
||||||
|
dataHarmPowerPS = dataHarmPowerPS.stream().filter(param->PHASE.contains(param.getPhaseType())).collect(Collectors.toList());
|
||||||
//有功功率趋势表是按照监测点来划分的 所以这边需要根据监测点来分组
|
//有功功率趋势表是按照监测点来划分的 所以这边需要根据监测点来分组
|
||||||
Map<String,List<StatisticalDataDTO>> map = dataHarmPowerPS.stream().collect(Collectors.groupingBy(StatisticalDataDTO::getLineId));
|
Map<String,List<StatisticalDataDTO>> map = dataHarmPowerPS.stream().collect(Collectors.groupingBy(StatisticalDataDTO::getLineId));
|
||||||
RActivePowerRangeParam finalRActivePowerRangeParam = rActivePowerRangeParam;
|
RActivePowerRangeParam finalRActivePowerRangeParam = rActivePowerRangeParam;
|
||||||
|
//以下这段逻辑较耗时(主要是for循环),主要是要遍历所有的有功功率,在根据有功功率查询各个指标进行比较(最耗时的是有功功率查询各个指标,所以一但有功功率很多则遍历较慢)
|
||||||
|
log.info("当前遍历的功率根据监测点分组后长度为:{},集合总长为:{},现在开始遍历,{}",map.size(),dataHarmPowerPS.size(),sdf.format(new Date()));
|
||||||
map.forEach((key, value) ->{
|
map.forEach((key, value) ->{
|
||||||
//获取监测点的国标限值
|
//获取监测点的国标限值
|
||||||
List<Overlimit> overlimits = overLimitClient.getOverLimitByLineIds(Arrays.asList(key)).getData();
|
List<Overlimit> overlimits = overLimitClient.getOverLimitByLineIds(Arrays.asList(key)).getData();
|
||||||
|
//该监测点必须要有国标限值
|
||||||
if(overlimits != null && !overlimits.isEmpty()){
|
if(overlimits != null && !overlimits.isEmpty()){
|
||||||
Overlimit overlimit = overlimits.get(0);
|
Overlimit overlimit = overlimits.get(0);
|
||||||
//获取监测点
|
//获取监测点
|
||||||
LineDTO lineDTO = commLineClient.getLineDetail(key).getData();
|
LineDTO lineDTO = commLineClient.getLineDetail(key).getData();
|
||||||
|
//监测点必须绑定新能源站
|
||||||
if(lineDTO != null && lineDTO.getNewStationId() != null){
|
if(lineDTO != null && lineDTO.getNewStationId() != null){
|
||||||
|
//获取监测点的新能源站
|
||||||
NewStation newStation = newStationClient.selectById(lineDTO.getNewStationId()).getData();
|
NewStation newStation = newStationClient.selectById(lineDTO.getNewStationId()).getData();
|
||||||
//风电场
|
//新能源站有些切必须是风电场
|
||||||
if(newStation != null && com.njcn.device.pq.constant.Param.WINDFARM.equals(newStation.getStationType())){
|
if(newStation != null && com.njcn.device.pq.constant.Param.WINDFARM.equals(newStation.getStationType())){
|
||||||
RActivePowerRangePO rActivePowerRangePO = new RActivePowerRangePO();
|
RActivePowerRangePO rActivePowerRangePO = new RActivePowerRangePO();
|
||||||
rActivePowerRangePO.setLineId(key);
|
rActivePowerRangePO.setLineId(key);
|
||||||
@@ -96,19 +133,27 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
rActivePowerRangePO.setId(IdUtil.simpleUUID());
|
rActivePowerRangePO.setId(IdUtil.simpleUUID());
|
||||||
LambdaQueryWrapper<RActivePowerRangePO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<RActivePowerRangePO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
lambdaQueryWrapper.eq(RActivePowerRangePO::getLineId,key).eq(RActivePowerRangePO::getTimeId,LocalDate.now());
|
lambdaQueryWrapper.eq(RActivePowerRangePO::getLineId,key).eq(RActivePowerRangePO::getTimeId,LocalDate.now());
|
||||||
//强制刷新
|
//控制参数-强制刷新
|
||||||
if(finalRActivePowerRangeParam.isRefresh()){
|
if(finalRActivePowerRangeParam.isRefresh()){
|
||||||
this.baseMapper.delete(lambdaQueryWrapper);
|
this.baseMapper.delete(lambdaQueryWrapper);
|
||||||
}
|
}
|
||||||
//计算各个区间个数
|
//控制参数-是否查询及查询新增(主要用于harmonic-boot-getDataByLineId方法,避免每次执行都会执行for循环,也即当日执行完一次即可)
|
||||||
|
if(!this.baseMapper.selectList(lambdaQueryWrapper).isEmpty() && (finalRActivePowerRangeParam.isSearch() && finalRActivePowerRangeParam.isSearchForAdd())){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int index = 1;
|
||||||
|
//耗时开始-计算各个区间个数及是否越限
|
||||||
for(StatisticalDataDTO statisticalDataDTO : value){
|
for(StatisticalDataDTO statisticalDataDTO : value){
|
||||||
|
log.info("前监测点为:{},遍历第{}条...,现在开始遍历,{}",key,index,sdf.format(new Date()));
|
||||||
PowerStatisticsTargetVO powerStatisticsTargetVO = new PowerStatisticsTargetVO();
|
PowerStatisticsTargetVO powerStatisticsTargetVO = new PowerStatisticsTargetVO();
|
||||||
|
//设置时间为当前功率的时间
|
||||||
powerStatisticsTargetVO.setTime(statisticalDataDTO.getTime().atZone(ZoneId.systemDefault()).format(formatter));
|
powerStatisticsTargetVO.setTime(statisticalDataDTO.getTime().atZone(ZoneId.systemDefault()).format(formatter));
|
||||||
|
//当前功率的p字段 / 风电场额定功率
|
||||||
double temp = statisticalDataDTO.getValue() / Double.parseDouble(newStation.getRatedPower());
|
double temp = statisticalDataDTO.getValue() / Double.parseDouble(newStation.getRatedPower());
|
||||||
if(temp <= 0.1){
|
if(temp <= 0.1){
|
||||||
//占有率区间个数+1
|
//占有率区间个数+1
|
||||||
rActivePowerRangePO.setMinsNum0(rActivePowerRangePO.getMinsNum0() + 1);
|
rActivePowerRangePO.setMinsNum0(rActivePowerRangePO.getMinsNum0() + 1);
|
||||||
//指标越限列表区间区分字段
|
//指标越限列表区间区分字段(用于前端查询)
|
||||||
powerStatisticsTargetVO.setField("0");
|
powerStatisticsTargetVO.setField("0");
|
||||||
//判断每个指标是否越限(根据type来区分设置到哪个区间对应的是否越限字段)
|
//判断每个指标是否越限(根据type来区分设置到哪个区间对应的是否越限字段)
|
||||||
installLimit(rActivePowerRangePO,statisticalDataDTO,overlimit,0,powerStatisticsTargetVO);
|
installLimit(rActivePowerRangePO,statisticalDataDTO,overlimit,0,powerStatisticsTargetVO);
|
||||||
@@ -149,8 +194,10 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
powerStatisticsTargetVO.setField("9");
|
powerStatisticsTargetVO.setField("9");
|
||||||
installLimit(rActivePowerRangePO,statisticalDataDTO,overlimit,9,powerStatisticsTargetVO);
|
installLimit(rActivePowerRangePO,statisticalDataDTO,overlimit,9,powerStatisticsTargetVO);
|
||||||
}
|
}
|
||||||
//重点说明:powerStatisticsTargetVO结构(维度)为:time可能多组相同,取决于功率表data_harmpower_p中的相别及统计方式,标识每个指标是否越限,总之一句话:当前时间中八个指标是否越限及他们的相别和统计方式是什么
|
//重点说明:powerStatisticsTargetVO结构(维度)为:time可能多组相同,取决于功率表data_harmpower_p中的相别及统计方式,标识每个指标是否越限,总之一句话:每条数据当前时间中八个指标是否越限及他们的相别和统计方式是什么
|
||||||
powerStatisticsTargetVOS.add(powerStatisticsTargetVO);
|
powerStatisticsTargetVOS.add(powerStatisticsTargetVO);
|
||||||
|
log.info("前监测点为:{},遍历第{}条...,遍历结束,{}",key,index,sdf.format(new Date()));
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
//根据日期及lineId当天不能重复执行
|
//根据日期及lineId当天不能重复执行
|
||||||
if(this.baseMapper.selectList(lambdaQueryWrapper).isEmpty() && (finalRActivePowerRangeParam.isSearch() && finalRActivePowerRangeParam.isSearchForAdd() || !finalRActivePowerRangeParam.isSearch())){
|
if(this.baseMapper.selectList(lambdaQueryWrapper).isEmpty() && (finalRActivePowerRangeParam.isSearch() && finalRActivePowerRangeParam.isSearchForAdd() || !finalRActivePowerRangeParam.isSearch())){
|
||||||
@@ -160,15 +207,23 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//区间过滤下
|
log.info("当前遍历的功率根据监测点分组后长度为:{},集合总长为:{},遍历结束,{}",map.size(),dataHarmPowerPS.size(),sdf.format(new Date()));
|
||||||
|
//区间过滤下(用于前端查询)
|
||||||
if(rActivePowerRangeParam.isSearch()){
|
if(rActivePowerRangeParam.isSearch()){
|
||||||
return powerStatisticsTargetVOS.stream().filter(param->param.getField().equals(finalRActivePowerRangeParam.getField())).collect(Collectors.toList());
|
if(finalRActivePowerRangeParam.getField() != null){
|
||||||
|
return powerStatisticsTargetVOS.stream().filter(param->param.getField().equals(finalRActivePowerRangeParam.getField())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return powerStatisticsTargetVOS;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installLimit(RActivePowerRangePO rActivePowerRangePO,StatisticalDataDTO statisticalDataDTO,Overlimit overlimit,int type,PowerStatisticsTargetVO powerStatisticsTargetVO){
|
private void installLimit(RActivePowerRangePO rActivePowerRangePO,StatisticalDataDTO statisticalDataDTO,Overlimit overlimit,int type,PowerStatisticsTargetVO powerStatisticsTargetVO){
|
||||||
//以下的结果集按道理最多只有一条(因为确定的相别统计方式及开始和结束时间都一致)
|
//记录统计方式
|
||||||
|
powerStatisticsTargetVO.setValueType(statisticalDataDTO.getValueType());
|
||||||
|
//记录相别
|
||||||
|
powerStatisticsTargetVO.setPhasicType(statisticalDataDTO.getPhaseType());
|
||||||
|
//以下的结果集按道理最多只有一条(因为确定的相别统计方式及开始和结束时间都一致,除了有谐波次数的指标)
|
||||||
//电压偏差
|
//电压偏差
|
||||||
List<StatisticalDataDTO> vu_dev = commonQuery(InfluxDBTableConstant.DATA_V,"vu_dev",statisticalDataDTO,null,null);
|
List<StatisticalDataDTO> vu_dev = commonQuery(InfluxDBTableConstant.DATA_V,"vu_dev",statisticalDataDTO,null,null);
|
||||||
//谐波电压
|
//谐波电压
|
||||||
@@ -188,113 +243,133 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
List<StatisticalDataDTO> i_unbalance = commonQuery(InfluxDBTableConstant.DATA_I,"i_unbalance",statisticalDataDTO,null,null);
|
List<StatisticalDataDTO> i_unbalance = commonQuery(InfluxDBTableConstant.DATA_I,"i_unbalance",statisticalDataDTO,null,null);
|
||||||
//此标识用来记录当前区间下指标是否越限(0%~10%是否越限,10%~20%是否越限.....)
|
//此标识用来记录当前区间下指标是否越限(0%~10%是否越限,10%~20%是否越限.....)
|
||||||
boolean isLimit = false;
|
boolean isLimit = false;
|
||||||
//电压偏差是否越限比较
|
//电压偏差国标限值
|
||||||
//电压偏差国标限制
|
|
||||||
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getVoltageDev());
|
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getVoltageDev());
|
||||||
|
//电压偏差是否越限比较
|
||||||
for(StatisticalDataDTO dto : vu_dev){
|
for(StatisticalDataDTO dto : vu_dev){
|
||||||
|
//电压偏差具体值
|
||||||
|
powerStatisticsTargetVO.setVoltageOffsetData(dto.getValue());
|
||||||
|
//电压偏差国标限值有额外的判断
|
||||||
|
if(dto.getValue()>0){
|
||||||
|
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getVoltageDev());
|
||||||
|
}else{
|
||||||
|
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getUvoltageDev());
|
||||||
|
}
|
||||||
//如果vu_dev>0,使用上偏差限值对比;如果vu_dev<0,使用下偏差限值对比
|
//如果vu_dev>0,使用上偏差限值对比;如果vu_dev<0,使用下偏差限值对比
|
||||||
if((dto.getValue()>0 && Double.compare(dto.getValue(),overlimit.getVoltageDev())>0)
|
if((dto.getValue()>0 && Double.compare(dto.getValue(),overlimit.getVoltageDev())>0)
|
||||||
|| (dto.getValue()<0 && Double.compare(dto.getValue(),overlimit.getUvoltageDev())>0)){
|
|| (dto.getValue()<0 && Double.compare(dto.getValue(),overlimit.getUvoltageDev())>0)){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
//标志电压偏差越限
|
//标志电压偏差越限
|
||||||
powerStatisticsTargetVO.setVoltageOffset(1);
|
powerStatisticsTargetVO.setVoltageOffset(1);
|
||||||
//记录电压偏差越限的相别
|
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
//记录电压偏差越限的统计方式
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
|
||||||
//电压偏差国标限制有判断
|
|
||||||
if(dto.getValue()>0){
|
|
||||||
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getVoltageDev());
|
|
||||||
}else{
|
|
||||||
powerStatisticsTargetVO.setVoltageOffsetLimit(overlimit.getUvoltageDev());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//谐波电压比较较为特殊需要比较两个点(以v为主)
|
||||||
//谐波电压是否越限比较
|
//谐波电压是否越限比较
|
||||||
//谐波电压国标限制
|
|
||||||
powerStatisticsTargetVO.setVTimesLimit(overlimit.getUaberrance());
|
|
||||||
for(StatisticalDataDTO dto : v_thd){
|
for(StatisticalDataDTO dto : v_thd){
|
||||||
if(Double.compare(dto.getValue(),overlimit.getUaberrance())>0){
|
if(Double.compare(dto.getValue(),overlimit.getUaberrance())>0){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
powerStatisticsTargetVO.setVTimes(1);
|
powerStatisticsTargetVO.setVTimes(1);
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int num = 2;
|
||||||
for(StatisticalDataDTO dto : v){
|
for(StatisticalDataDTO dto : v){
|
||||||
if(frequencyCompare(overlimit,2,50,dto.getValue(),"uharm")){
|
Float value = frequencyValue(overlimit,num,"uharm");
|
||||||
isLimit = true;
|
if(value != null){
|
||||||
powerStatisticsTargetVO.setVTimes(1);
|
//记录谐波电压2到25次国标限值(当然这里还是要以influxDb里为主,虽然当前遍历的集合明确查询2-25次但是为了防止influxDb可能缺失一些次数的数据,所以国标限值次数跟着influxDb走)
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
powerStatisticsTargetVO.getVTimesLimit().add(value);
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
//谐波电压具体值
|
||||||
|
powerStatisticsTargetVO.getVTimesData().add(dto.getValue());
|
||||||
|
if(Double.compare(dto.getValue(),value)>0){
|
||||||
|
isLimit = true;
|
||||||
|
//标志谐波电压越限
|
||||||
|
powerStatisticsTargetVO.setVTimes(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
num++;
|
||||||
}
|
}
|
||||||
|
num = 2;
|
||||||
//谐波电流是否越限比较
|
//谐波电流是否越限比较
|
||||||
//谐波电流国标限制(由于有谐波次数所以这边直接默认取第一个)
|
|
||||||
powerStatisticsTargetVO.setVTimesLimit(overlimit.getIharm2());
|
|
||||||
for(StatisticalDataDTO dto : i){
|
for(StatisticalDataDTO dto : i){
|
||||||
if(frequencyCompare(overlimit,2,25,dto.getValue(),"iharm")){
|
Float value = frequencyValue(overlimit,num,"iharm");
|
||||||
isLimit = true;
|
if(value != null){
|
||||||
powerStatisticsTargetVO.setITimes(1);
|
//记录谐波电流2到25次国标限值(当然这里还是要以influxDb里为主,虽然当前遍历的集合明确查询2-25次但是为了防止influxDb可能缺失一些次数的数据,所以国标限值次数跟着influxDb走)
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
powerStatisticsTargetVO.getITimesLimit().add(value);
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
//谐波电流具体值
|
||||||
|
powerStatisticsTargetVO.getITimesData().add(dto.getValue());
|
||||||
|
if(Double.compare(dto.getValue(),value)>0){
|
||||||
|
isLimit = true;
|
||||||
|
//标志谐波电流越限
|
||||||
|
powerStatisticsTargetVO.setITimes(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
num++;
|
||||||
}
|
}
|
||||||
//三相电压不平衡度是否越限比较
|
//三相电压不平衡度国标限值
|
||||||
//三相电压不平衡度国标限制
|
|
||||||
powerStatisticsTargetVO.setUbalanceLimit(overlimit.getUbalance());
|
powerStatisticsTargetVO.setUbalanceLimit(overlimit.getUbalance());
|
||||||
|
//三相电压不平衡度是否越限比较
|
||||||
for(StatisticalDataDTO dto : v_unbalance){
|
for(StatisticalDataDTO dto : v_unbalance){
|
||||||
|
//三相电压不平衡度具体值
|
||||||
|
powerStatisticsTargetVO.setUbalanceData(dto.getValue());
|
||||||
if(Double.compare(dto.getValue(),overlimit.getUbalance())>0){
|
if(Double.compare(dto.getValue(),overlimit.getUbalance())>0){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
|
//标志三相电压不平衡度越限
|
||||||
powerStatisticsTargetVO.setUbalance(1);
|
powerStatisticsTargetVO.setUbalance(1);
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//电压波动是否越限比较
|
//电压波动国标限值
|
||||||
//电压波动国标限制
|
|
||||||
powerStatisticsTargetVO.setVoltageFluctuationLimit(overlimit.getVoltageFluctuation());
|
powerStatisticsTargetVO.setVoltageFluctuationLimit(overlimit.getVoltageFluctuation());
|
||||||
|
//电压波动是否越限比较
|
||||||
for(StatisticalDataDTO dto : fluc){
|
for(StatisticalDataDTO dto : fluc){
|
||||||
|
//电压波动具体值
|
||||||
|
powerStatisticsTargetVO.setVoltageFluctuationData(dto.getValue());
|
||||||
if(Double.compare(dto.getValue(),overlimit.getVoltageFluctuation())>0){
|
if(Double.compare(dto.getValue(),overlimit.getVoltageFluctuation())>0){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
|
//标志电压波动越限
|
||||||
powerStatisticsTargetVO.setVoltageFluctuation(1);
|
powerStatisticsTargetVO.setVoltageFluctuation(1);
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//长时闪变是否越限比较
|
//长时闪变国标限值
|
||||||
//长时闪变国标限制
|
|
||||||
powerStatisticsTargetVO.setFlickerLimit(overlimit.getFlicker());
|
powerStatisticsTargetVO.setFlickerLimit(overlimit.getFlicker());
|
||||||
|
//长时闪变是否越限比较
|
||||||
for(StatisticalDataDTO dto : plt){
|
for(StatisticalDataDTO dto : plt){
|
||||||
|
//长时闪变具体值
|
||||||
|
powerStatisticsTargetVO.setFlickerData(dto.getValue());
|
||||||
if(Double.compare(dto.getValue(),overlimit.getFlicker())>0){
|
if(Double.compare(dto.getValue(),overlimit.getFlicker())>0){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
|
//标志长时闪变越限
|
||||||
powerStatisticsTargetVO.setFlicker(1);
|
powerStatisticsTargetVO.setFlicker(1);
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
num = 1;
|
||||||
//间谐波电压含有率是否越限比较
|
//间谐波电压含有率是否越限比较
|
||||||
//间谐波电压含有率国标限制(由于有谐波次数所以这边直接默认取第一个)
|
|
||||||
powerStatisticsTargetVO.setInterHarmonicLimit(overlimit.getInuharm1());
|
|
||||||
for(StatisticalDataDTO dto : v1){
|
for(StatisticalDataDTO dto : v1){
|
||||||
if(frequencyCompare(overlimit,1,16,dto.getValue(),"inuharm")){
|
Float value = frequencyValue(overlimit,num,"inuharm");
|
||||||
isLimit = true;
|
if(value != null){
|
||||||
powerStatisticsTargetVO.setInterHarmonic(1);
|
//记录间谐波电压含有率1到16次国标限值(当然这里还是要以influxDb里为主,虽然当前遍历的集合明确查询1-16次但是为了防止influxDb可能缺失一些次数的数据,所以国标限值次数跟着influxDb走)
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
powerStatisticsTargetVO.getInterHarmonicLimit().add(value);
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
//间谐波电压含有率具体值
|
||||||
|
powerStatisticsTargetVO.getInterHarmonicData().add(dto.getValue());
|
||||||
|
if(Double.compare(dto.getValue(),value)>0){
|
||||||
|
isLimit = true;
|
||||||
|
//标志间谐波电压含有率越限
|
||||||
|
powerStatisticsTargetVO.setInterHarmonic(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
num++;
|
||||||
}
|
}
|
||||||
//电流不平衡度是否越限比较
|
//电流不平衡度国标限值
|
||||||
//间谐波电压含有率国标限制
|
|
||||||
powerStatisticsTargetVO.setSequenceCurrentUnbalanceLimit(overlimit.getINeg());
|
powerStatisticsTargetVO.setSequenceCurrentUnbalanceLimit(overlimit.getINeg());
|
||||||
|
//电流不平衡度是否越限比较
|
||||||
for(StatisticalDataDTO dto : i_unbalance){
|
for(StatisticalDataDTO dto : i_unbalance){
|
||||||
|
//电流不平衡度具体值
|
||||||
|
powerStatisticsTargetVO.setSequenceCurrentUnbalanceData(dto.getValue());
|
||||||
if(Double.compare(dto.getValue(),overlimit.getINeg())>0){
|
if(Double.compare(dto.getValue(),overlimit.getINeg())>0){
|
||||||
isLimit = true;
|
isLimit = true;
|
||||||
|
//标志电流不平衡度越限
|
||||||
powerStatisticsTargetVO.setSequenceCurrentUnbalance(1);
|
powerStatisticsTargetVO.setSequenceCurrentUnbalance(1);
|
||||||
powerStatisticsTargetVO.setPhasicType(dto.getPhaseType());
|
|
||||||
powerStatisticsTargetVO.setValueType(dto.getValueType());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//区间是否越限标识
|
||||||
switch (type){
|
switch (type){
|
||||||
case 0:
|
case 0:
|
||||||
if(isLimit) rActivePowerRangePO.setIsOrNot0(1);
|
if(isLimit) rActivePowerRangePO.setIsOrNot0(1);
|
||||||
@@ -329,11 +404,13 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//组装公共查询
|
//组装公共查询(有谐波次数查询和没有谐波次数查询)
|
||||||
private List<StatisticalDataDTO> commonQuery(String tableName,String columnName,StatisticalDataDTO statisticalDataDTO,Integer start,Integer end){
|
private List<StatisticalDataDTO> commonQuery(String tableName,String columnName,StatisticalDataDTO statisticalDataDTO,Integer start,Integer end){
|
||||||
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
List<CommonQueryParam> commonQueryParams = new ArrayList<>();
|
||||||
|
//不管哪种时间是固定的
|
||||||
String time = statisticalDataDTO.getTime().atZone(ZoneId.systemDefault()).format(formatter);
|
String time = statisticalDataDTO.getTime().atZone(ZoneId.systemDefault()).format(formatter);
|
||||||
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
CommonQueryParam commonQueryParam = new CommonQueryParam();
|
||||||
|
//无谐波次数查询
|
||||||
if(start == null){
|
if(start == null){
|
||||||
commonQueryParam.setStartTime(time);
|
commonQueryParam.setStartTime(time);
|
||||||
commonQueryParam.setEndTime(time);
|
commonQueryParam.setEndTime(time);
|
||||||
@@ -344,6 +421,7 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
commonQueryParam.setColumnName(columnName);
|
commonQueryParam.setColumnName(columnName);
|
||||||
commonQueryParams.add(commonQueryParam);
|
commonQueryParams.add(commonQueryParam);
|
||||||
}else{
|
}else{
|
||||||
|
//有谐波次数查询
|
||||||
for (int i = start; i <= end; i++) {
|
for (int i = start; i <= end; i++) {
|
||||||
commonQueryParam = new CommonQueryParam();
|
commonQueryParam = new CommonQueryParam();
|
||||||
commonQueryParam.setStartTime(time);
|
commonQueryParam.setStartTime(time);
|
||||||
@@ -359,22 +437,20 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
return commonService.getNewDeviceRtDataByTime(commonQueryParams);
|
return commonService.getNewDeviceRtDataByTime(commonQueryParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean frequencyCompare(Overlimit overlimit,int start,int end,Double value,String flag){
|
//反射获取国标限值对应的字段值
|
||||||
Class clazz = overlimit.getClass();
|
private Float frequencyValue(Overlimit overlimit,int num,String flag){
|
||||||
try {
|
try {
|
||||||
for (int i = start; i <= end; i++) {
|
Class clazz = overlimit.getClass();
|
||||||
Field field = clazz.getDeclaredField(flag+i);
|
Field field = clazz.getDeclaredField(flag+num);
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
if(Double.compare(value,Float.parseFloat(field.get(overlimit).toString()))>0){
|
return Float.parseFloat(field.get(overlimit).toString());
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//根据时间间隔获取间隔前时间或获取昨晚最晚时间
|
||||||
private String getTime(long interval,int type){
|
private String getTime(long interval,int type){
|
||||||
DateTimeFormatter sdf = DateTimeFormatter.ofPattern(DateUtils.DATE_FORMAT_10);
|
DateTimeFormatter sdf = DateTimeFormatter.ofPattern(DateUtils.DATE_FORMAT_10);
|
||||||
LocalDate yesterday;
|
LocalDate yesterday;
|
||||||
@@ -396,6 +472,7 @@ public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRan
|
|||||||
if(!rActivePowerRangePOS.isEmpty()){
|
if(!rActivePowerRangePOS.isEmpty()){
|
||||||
RActivePowerRangePO rActivePowerRangePO = new RActivePowerRangePO();
|
RActivePowerRangePO rActivePowerRangePO = new RActivePowerRangePO();
|
||||||
rActivePowerRangePO.setLineId(lineId);
|
rActivePowerRangePO.setLineId(lineId);
|
||||||
|
//多条记录则次数累加,是否越限只有有一个区间越限则统一视为该区间越限
|
||||||
for(RActivePowerRangePO rangePO : rActivePowerRangePOS){
|
for(RActivePowerRangePO rangePO : rActivePowerRangePOS){
|
||||||
rActivePowerRangePO.setMinsNum0(rangePO.getMinsNum0()+rActivePowerRangePO.getMinsNum0());
|
rActivePowerRangePO.setMinsNum0(rangePO.getMinsNum0()+rActivePowerRangePO.getMinsNum0());
|
||||||
rActivePowerRangePO.setMinsNum1(rangePO.getMinsNum1()+rActivePowerRangePO.getMinsNum1());
|
rActivePowerRangePO.setMinsNum1(rangePO.getMinsNum1()+rActivePowerRangePO.getMinsNum1());
|
||||||
|
|||||||
Reference in New Issue
Block a user