|
|
|
|
@@ -10,10 +10,13 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
|
|
|
|
import com.njcn.common.pojo.enums.common.ServerEnum;
|
|
|
|
|
import com.njcn.common.utils.HarmonicTimesUtil;
|
|
|
|
|
import com.njcn.common.utils.PubUtils;
|
|
|
|
|
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
|
|
|
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
|
|
|
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
|
|
|
|
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
|
|
|
|
import com.njcn.device.biz.pojo.po.Overlimit;
|
|
|
|
|
import com.njcn.device.pq.api.DeptLineFeignClient;
|
|
|
|
|
import com.njcn.device.pq.api.LineFeignClient;
|
|
|
|
|
import com.njcn.device.pq.pojo.po.DeptLine;
|
|
|
|
|
@@ -21,15 +24,21 @@ import com.njcn.device.pq.pojo.vo.LineDetailVO;
|
|
|
|
|
import com.njcn.device.pq.pojo.vo.ReportLineInfoVo;
|
|
|
|
|
import com.njcn.harmonic.api.RStatLimitRateDClient;
|
|
|
|
|
import com.njcn.harmonic.pojo.param.RStatLimitQueryParam;
|
|
|
|
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
|
|
|
|
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
|
|
|
|
|
import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO;
|
|
|
|
|
import com.njcn.harmonic.utils.WordUtil2;
|
|
|
|
|
import com.njcn.influx.constant.InfluxDbSqlConstant;
|
|
|
|
|
import com.njcn.influx.imapper.*;
|
|
|
|
|
import com.njcn.influx.pojo.po.*;
|
|
|
|
|
import com.njcn.influx.query.InfluxQueryWrapper;
|
|
|
|
|
import com.njcn.oss.constant.OssPath;
|
|
|
|
|
import com.njcn.oss.utils.FileStorageUtil;
|
|
|
|
|
import com.njcn.supervision.enums.ProblemTypeEnum;
|
|
|
|
|
import com.njcn.supervision.mapper.device.LineWarningMapper;
|
|
|
|
|
import com.njcn.supervision.pojo.param.device.OnlineParam;
|
|
|
|
|
import com.njcn.supervision.pojo.po.device.LineWarning;
|
|
|
|
|
import com.njcn.supervision.pojo.vo.device.LineLimitDetailVo;
|
|
|
|
|
import com.njcn.supervision.pojo.vo.device.OnlineVo;
|
|
|
|
|
import com.njcn.supervision.service.device.ILineWarningService;
|
|
|
|
|
import com.njcn.supervision.service.leaflet.IWarningLeafletService;
|
|
|
|
|
@@ -76,6 +85,12 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
private final DeptFeignClient deptFeignClient;
|
|
|
|
|
private final WordUtil2 wordUtil2;
|
|
|
|
|
|
|
|
|
|
private final DataVMapper dataVMapper;
|
|
|
|
|
private final IDataIMapper dataIMapper;
|
|
|
|
|
private final DataHarmRateVMapper dataHarmRateVMapper;
|
|
|
|
|
private final DataInHarmVMapper dataInHarmVMapper;
|
|
|
|
|
private final DataPltMapper dataPltMapper;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void addLineWarning() {
|
|
|
|
|
@@ -135,8 +150,8 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void addHeBeiNorthLineWarning(String startTime, String endTime) {
|
|
|
|
|
List<LineWarning> result = new ArrayList<>();
|
|
|
|
|
//获取指标集合(8个指标)
|
|
|
|
|
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.INDICATOR_TYPE.getCode()).getData();
|
|
|
|
|
//获取指标集合(10个指标)
|
|
|
|
|
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
|
|
|
|
Map<String, DictData> targetMap = dataList.stream().collect(Collectors.toMap(DictData::getCode, Function.identity()));
|
|
|
|
|
//获取监测点和部门表关系
|
|
|
|
|
List<DeptLine> deptLines = deptLineFeignClient.getAllData().getData();
|
|
|
|
|
@@ -152,22 +167,26 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
limitTarget.forEach(item->{
|
|
|
|
|
String deptId = Objects.isNull(deptLineMap.get(item.getLineId()))?null:deptLineMap.get(item.getLineId()).get(0).getId();
|
|
|
|
|
//频率偏差
|
|
|
|
|
LineWarning l1 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.PLPC_ENUM.getCode()).getId(),item.getFreqDevOvertime());
|
|
|
|
|
LineWarning l1 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.FREQUENCY_DEV.getCode()).getId(),item.getFreqDevOvertime());
|
|
|
|
|
//电压偏差
|
|
|
|
|
LineWarning l2 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.DYPC_ENUM.getCode()).getId(),item.getVoltageDevOvertime());
|
|
|
|
|
LineWarning l2 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.VOLTAGE_DEV.getCode()).getId(),item.getVoltageDevOvertime());
|
|
|
|
|
//长时闪变
|
|
|
|
|
LineWarning l3 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.CSSB_ENUM.getCode()).getId(),item.getFlickerOvertime());
|
|
|
|
|
LineWarning l3 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.FLICKER.getCode()).getId(),item.getFlickerOvertime());
|
|
|
|
|
//谐波电压
|
|
|
|
|
LineWarning l4 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.XBDY_ENUM.getCode()).getId(),item.getUharmOvertime());
|
|
|
|
|
LineWarning l4 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.HARMONIC_VOLTAGE.getCode()).getId(),item.getUharmOvertime());
|
|
|
|
|
//谐波电流
|
|
|
|
|
LineWarning l5 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.XBDL_ENUM.getCode()).getId(),item.getIharmOvertime());
|
|
|
|
|
LineWarning l5 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.HARMONIC_CURRENT.getCode()).getId(),item.getIharmOvertime());
|
|
|
|
|
//间谐波电压
|
|
|
|
|
LineWarning l6 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.JXBDY_ENUM.getCode()).getId(),item.getInuharmOvertime());
|
|
|
|
|
LineWarning l6 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.INTERHARMONIC_VOLTAGE.getCode()).getId(),item.getInuharmOvertime());
|
|
|
|
|
//负序电压不平衡度
|
|
|
|
|
LineWarning l7 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.SXDYBPHD_ENUM.getCode()).getId(),item.getUbalanceOvertime());
|
|
|
|
|
LineWarning l7 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.PHASE_VOLTAGE.getCode()).getId(),item.getUbalanceOvertime());
|
|
|
|
|
//负序电流
|
|
|
|
|
LineWarning l8 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.FXDL_ENUM.getCode()).getId(),item.getINegOvertime());
|
|
|
|
|
result.addAll(Arrays.asList(l1,l2,l3,l4,l5,l6,l7,l8));
|
|
|
|
|
LineWarning l8 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.NEG_CURRENT.getCode()).getId(),item.getINegOvertime());
|
|
|
|
|
//电压总谐波畸变率
|
|
|
|
|
LineWarning l9 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.THD_V.getCode()).getId(),item.getUaberranceOvertime());
|
|
|
|
|
//总稳态指标
|
|
|
|
|
LineWarning l10 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.TOTAL_INDICATOR.getCode()).getId(),item.getAllOvertime());
|
|
|
|
|
result.addAll(Arrays.asList(l1,l2,l3,l4,l5,l6,l7,l8,l9,l10));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//将装置无数据的统计入库 按运维要求,判断装置的最新数据不是当天,则认为装置无数据
|
|
|
|
|
@@ -196,9 +215,9 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
deptGetLineParam.setServerName(ServerEnum.HARMONIC.getName());
|
|
|
|
|
List<DeptGetChildrenMoreDTO> list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
|
|
|
|
|
List<String> lineList = list.stream()
|
|
|
|
|
.flatMap(dto -> dto.getLineBaseList().stream().map(LineDevGetDTO::getPointId))
|
|
|
|
|
.distinct()
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
.flatMap(dto -> dto.getLineBaseList().stream().map(LineDevGetDTO::getPointId))
|
|
|
|
|
.distinct()
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
QueryWrapper<LineWarning> queryWrapper = new QueryWrapper<>();
|
|
|
|
|
queryWrapper.between("A.alarm_time", param.getSearchBeginTime(),param.getSearchEndTime());
|
|
|
|
|
//监测点id
|
|
|
|
|
@@ -238,10 +257,10 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
//获取无数据监测点集合
|
|
|
|
|
List<ReportLineInfoVo> list1 = getReportLineInfo(true,param.getIdList(),null,param.getSearchBeginTime(),param.getSearchEndTime(),param.getDeptId(),allLineWarnings);
|
|
|
|
|
//获取谐波电压超标监测点集合
|
|
|
|
|
String vCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.XBDY_ENUM.getCode()).getData().getId();
|
|
|
|
|
String vCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.HARMONIC_VOLTAGE.getCode()).getData().getId();
|
|
|
|
|
List<ReportLineInfoVo> list2 = getReportLineInfo(false,param.getIdList(),vCode,param.getSearchBeginTime(),param.getSearchEndTime(),null,allLineWarnings);
|
|
|
|
|
//获取谐波电流超标监测点集合
|
|
|
|
|
String iCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.XBDL_ENUM.getCode()).getData().getId();
|
|
|
|
|
String iCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.HARMONIC_CURRENT.getCode()).getData().getId();
|
|
|
|
|
List<ReportLineInfoVo> list3 = getReportLineInfo(false,param.getIdList(),iCode,param.getSearchBeginTime(),param.getSearchEndTime(),null,allLineWarnings);
|
|
|
|
|
try {
|
|
|
|
|
Map<String, Object> dataMap = new HashMap<String, Object>();
|
|
|
|
|
@@ -250,7 +269,6 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
dataMap.put("${deptName}", param.getDeptName());
|
|
|
|
|
dataMap.put("${startTime}", new SimpleDateFormat(DatePattern.CHINESE_DATE_PATTERN).format(new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN).parse(param.getSearchBeginTime())));
|
|
|
|
|
dataMap.put("${endTime}", new SimpleDateFormat(DatePattern.CHINESE_DATE_PATTERN).format(new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN).parse(param.getSearchEndTime())));
|
|
|
|
|
dataMap.put("${noData}", CollUtil.isEmpty(list1)?"0":String.valueOf(list1.size()));
|
|
|
|
|
dataMap.put("${harmonicV}", CollUtil.isEmpty(list2)?"0":String.valueOf(list2.size()));
|
|
|
|
|
dataMap.put("${harmonicI}", CollUtil.isEmpty(list3)?"0":String.valueOf(list3.size()));
|
|
|
|
|
dataMap.put("${alarmDay}", String.valueOf(param.getAlarmThreshold()));
|
|
|
|
|
@@ -259,8 +277,13 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
List<String[]> dataList1 = new ArrayList<String[]>(),dataList2 = new ArrayList<String[]>(),dataList3 = new ArrayList<String[]>();
|
|
|
|
|
if (CollUtil.isNotEmpty(list1)) {
|
|
|
|
|
list1.forEach(item->{
|
|
|
|
|
dataList1.add(new String[]{deptName,item.getLineVoltage(),item.getLineName(),item.getSubName(),item.getObjName(),item.getSubVName(),item.getUpdateTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)),item.getIp()});
|
|
|
|
|
if (Objects.isNull(param.getLineType()) || Objects.equals("",param.getLineType())) {
|
|
|
|
|
dataList1.add(new String[]{deptName,item.getLineVoltage(),item.getLineName(),item.getSubName(),item.getObjName(),item.getSubVName(),item.getUpdateTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)),item.getIp()});
|
|
|
|
|
} else if (Integer.parseInt(param.getLineType()) == item.getPowerFlag()) {
|
|
|
|
|
dataList1.add(new String[]{deptName,item.getLineVoltage(),item.getLineName(),item.getSubName(),item.getObjName(),item.getSubVName(),item.getUpdateTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)),item.getIp()});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
dataMap.put("${noData}", CollUtil.isEmpty(dataList1)?"0":String.valueOf(dataList1.size()));
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(list2)) {
|
|
|
|
|
list2.forEach(item->{
|
|
|
|
|
@@ -272,6 +295,7 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
dataList3.add(new String[]{deptName,item.getLineName(),item.getSubName(),item.getObjName(),String.valueOf(item.getOverDays()),String.valueOf(item.getShortCapacity()),String.valueOf(item.getDevCapacity()),String.valueOf(item.getDealCapacity())});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<List<String[]>> tableList = Arrays.asList(dataList1,dataList2,dataList3);
|
|
|
|
|
InputStream inputStream = wordUtil2.getReportFile(inputUrl,dataMap,tableList);
|
|
|
|
|
//上传文件服务器
|
|
|
|
|
@@ -311,12 +335,252 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void getOverLimitDetail(OnlineParam.DetailParam param) {
|
|
|
|
|
|
|
|
|
|
public List<LineLimitDetailVo> getOverLimitDetail(OnlineParam.DetailParam param) {
|
|
|
|
|
String targetCode = dicDataFeignClient.getDicDataById(param.getTargetId()).getData().getCode();
|
|
|
|
|
//获取监测点统计间隔
|
|
|
|
|
Integer timeInterval = commTerminalGeneralClient.getMonitorDetail(param.getLineId()).getData().getInterval();
|
|
|
|
|
//获取限值
|
|
|
|
|
Overlimit overlimit = commTerminalGeneralClient.getOverLimitData(param.getLineId()).getData();
|
|
|
|
|
//处理数据
|
|
|
|
|
return chanelTarget(param,overlimit,timeInterval,targetCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//指标数据处理
|
|
|
|
|
public List<LineLimitDetailVo> chanelTarget(OnlineParam.DetailParam param, Overlimit overlimit, Integer timeInterval, String targetCode) {
|
|
|
|
|
List<LineLimitDetailVo> result = new ArrayList<>(),finalList = new ArrayList<>();
|
|
|
|
|
//频率偏差
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.FREQUENCY_DEV.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),1).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getFreqDev(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getFreqDev();
|
|
|
|
|
channelEachData(item,maxData>0?overlimit.getFreqDev():-overlimit.getFreqDev(),"getFreqDev",result,DicDataEnum.FREQUENCY_DEV.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//电压偏差
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.VOLTAGE_DEV.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),2).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
Float overLimit;
|
|
|
|
|
Double maxData;
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
List<DataV> voltageList = getVoltageDev(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
);
|
|
|
|
|
List<Double> voltage = voltageList.stream().map(DataV::getVuDev).collect(Collectors.toList());
|
|
|
|
|
if (Math.abs(voltage.get(0)) >= Math.abs(voltage.get(1))){
|
|
|
|
|
overLimit = overlimit.getUvoltageDev();
|
|
|
|
|
maxData = voltage.get(0);
|
|
|
|
|
} else {
|
|
|
|
|
overLimit = overlimit.getVoltageDev();
|
|
|
|
|
maxData = voltage.get(1);
|
|
|
|
|
}
|
|
|
|
|
channelEachData(item,overLimit,"getVoltageDev",result,DicDataEnum.VOLTAGE_DEV.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//长时闪变
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.FLICKER.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),3).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getFlicker(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getPlt();
|
|
|
|
|
channelEachData(item,overlimit.getFlicker(),"getFlicker",result,DicDataEnum.FLICKER.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//电压总谐波畸变率
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.THD_V.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),4).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getVThd(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getVThd();
|
|
|
|
|
channelEachData(item,overlimit.getUaberrance(),"getUaberrance",result,DicDataEnum.THD_V.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//谐波电压
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.HARMONIC_VOLTAGE.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
//电压总谐波畸变率
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),4).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getVThd(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getVThd();
|
|
|
|
|
channelEachData(item,overlimit.getUaberrance(),"getUaberrance",result,DicDataEnum.THD_V.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//谐波电压含有率2~25次
|
|
|
|
|
List<RStatLimitRateDPO> list2 = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),7).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list2)) {
|
|
|
|
|
list2.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
DataHarmRateV dataHarmRateV = getDataHarmRateV(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59").get(0);
|
|
|
|
|
channelHarmonicData(dataHarmRateV,null,null,item,overlimit,result,"getUharm",DicDataEnum.HARMONIC_VOLTAGE.getName(),timeInterval,2,25);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//谐波电流
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.HARMONIC_CURRENT.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),8).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
DataI dataI = getDataI(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59").get(0);
|
|
|
|
|
channelHarmonicData(null,dataI,null,item,overlimit,result,"getIharm",DicDataEnum.HARMONIC_CURRENT.getName(),timeInterval,2,25);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//间谐波电压
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.INTERHARMONIC_VOLTAGE.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),9).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
DataInHarmV dataInHarmV = getDataInHarmV(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59").get(0);
|
|
|
|
|
channelHarmonicData(null,null,dataInHarmV,item,overlimit,result,"getInuharm",DicDataEnum.INTERHARMONIC_VOLTAGE.getName(),timeInterval,1,16);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//负序电压不平衡度
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.PHASE_VOLTAGE.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),5).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getUnbalance(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getVUnbalance();
|
|
|
|
|
channelEachData(item,overlimit.getUbalance(),"getUbalance",result,DicDataEnum.PHASE_VOLTAGE.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//负序电流
|
|
|
|
|
if (Objects.equals(targetCode,DicDataEnum.NEG_CURRENT.getCode()) || Objects.equals(targetCode,DicDataEnum.TOTAL_INDICATOR.getCode())) {
|
|
|
|
|
List<RStatLimitRateDPO> list = limitRateDClient.getOverData(param.getLineId(),param.getSearchBeginTime(),param.getSearchEndTime(),6).getData();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
list.forEach(item->{
|
|
|
|
|
String time = item.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
|
|
|
|
double maxData = getINeg(param.getLineId()
|
|
|
|
|
, time + " 00:00:00"
|
|
|
|
|
, time + " 23:59:59"
|
|
|
|
|
).get(0).getINeg();
|
|
|
|
|
channelEachData(item,overlimit.getINeg(),"getINeg",result,DicDataEnum.NEG_CURRENT.getName(),timeInterval,maxData);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(result)) {
|
|
|
|
|
Map<LocalDate,List<LineLimitDetailVo>> map = result.stream().collect(Collectors.groupingBy(LineLimitDetailVo::getTime,LinkedHashMap::new,Collectors.toList()));
|
|
|
|
|
map.forEach((k,v)->{
|
|
|
|
|
StringBuilder describe = new StringBuilder();
|
|
|
|
|
LineLimitDetailVo lineLimitDetailVo = new LineLimitDetailVo();
|
|
|
|
|
lineLimitDetailVo.setTime(k);
|
|
|
|
|
v.forEach(item->{
|
|
|
|
|
describe.append(item.getOverLimitInfo());
|
|
|
|
|
});
|
|
|
|
|
lineLimitDetailVo.setOverLimitInfo(describe.toString());
|
|
|
|
|
finalList.add(lineLimitDetailVo);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return finalList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//处理单指标
|
|
|
|
|
public void channelEachData(RStatLimitRateDPO dpo, float limit, String getColum, List<LineLimitDetailVo> result, String targetName, Integer timeInterval, double maxData) {
|
|
|
|
|
try {
|
|
|
|
|
Class<?> clazz = dpo.getClass();
|
|
|
|
|
String methodName = getColum + "Overtime";
|
|
|
|
|
Method method;
|
|
|
|
|
method = clazz.getMethod(methodName);
|
|
|
|
|
int value = (int) method.invoke(dpo);
|
|
|
|
|
LineLimitDetailVo vo = new LineLimitDetailVo();
|
|
|
|
|
vo.setTime(dpo.getTime());
|
|
|
|
|
vo.setOverLimitInfo(targetName + "最大幅值:" + PubUtils.doubleRound(2,maxData) + ",限值:" + limit + ",超标时间:" + value * timeInterval + "分钟;");
|
|
|
|
|
result.add(vo);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//处理谐波数据 谐波电压、谐波电流、间谐波电压
|
|
|
|
|
public void channelHarmonicData(DataHarmRateV dataHarmRateV, DataI dataI, DataInHarmV dataInHarmV, RStatLimitRateDPO dpo, Overlimit overlimit, List<LineLimitDetailVo> result, String getColum, String targetName, Integer timeInterval, Integer startTimes, Integer endTimes) {
|
|
|
|
|
LinkedHashMap<Integer,Integer> overMap = new LinkedHashMap<>();
|
|
|
|
|
StringBuilder describe = new StringBuilder();
|
|
|
|
|
LineLimitDetailVo vo = new LineLimitDetailVo();
|
|
|
|
|
vo.setTime(dpo.getTime());
|
|
|
|
|
//查看具体哪几次超标
|
|
|
|
|
Class<?> clazz = dpo.getClass();
|
|
|
|
|
for (int i = startTimes; i <= endTimes; i++) {
|
|
|
|
|
String methodName = getColum + i + "Overtime";
|
|
|
|
|
try {
|
|
|
|
|
Method method = clazz.getMethod(methodName);
|
|
|
|
|
int value = (int) method.invoke(dpo);
|
|
|
|
|
if (value > 0) {
|
|
|
|
|
overMap.put(i,value);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Class<?> clazz2 = null;
|
|
|
|
|
String targetName2 = null;
|
|
|
|
|
double value2 = 0.0;
|
|
|
|
|
if (Objects.nonNull(dataHarmRateV)) {
|
|
|
|
|
clazz2 = dataHarmRateV.getClass();
|
|
|
|
|
targetName2 = "getV";
|
|
|
|
|
} else if (Objects.nonNull(dataI)) {
|
|
|
|
|
clazz2 = dataI.getClass();
|
|
|
|
|
targetName2 = "getI";
|
|
|
|
|
} else if (Objects.nonNull(dataInHarmV)) {
|
|
|
|
|
clazz2 = dataInHarmV.getClass();
|
|
|
|
|
targetName2 = "getV";
|
|
|
|
|
}
|
|
|
|
|
for(Integer key:overMap.keySet()){
|
|
|
|
|
int value = overMap.get(key);
|
|
|
|
|
String methodName = targetName2 + key;
|
|
|
|
|
Method method;
|
|
|
|
|
try {
|
|
|
|
|
method = clazz2.getMethod(methodName);
|
|
|
|
|
if (Objects.nonNull(dataHarmRateV)) {
|
|
|
|
|
value2 = (double) method.invoke(dataHarmRateV);
|
|
|
|
|
} else if (Objects.nonNull(dataI)) {
|
|
|
|
|
value2 = (double) method.invoke(dataI);
|
|
|
|
|
} else if (Objects.nonNull(dataInHarmV)) {
|
|
|
|
|
value2 = (double) method.invoke(dataInHarmV);
|
|
|
|
|
}
|
|
|
|
|
describe.append(key).append("次").append(targetName).append("CP95值最大幅值:").append(PubUtils.doubleRound(2,value2)).append("%,限值:").append(getOverLimitData(overlimit, getColum, key)).append("%,超标时间:").append(value * timeInterval).append("分钟;");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
vo.setOverLimitInfo(describe.toString().trim());
|
|
|
|
|
result.add(vo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ReportLineInfoVo> getReportLineInfo(boolean type, List<String> idList, String codeId, String startTime, String endTime, String deptId,List<LineWarning> allLineWarnings) {
|
|
|
|
|
@@ -501,4 +765,141 @@ public class LineWarningServiceImpl extends MppServiceImpl<LineWarningMapper, Li
|
|
|
|
|
updateList.add(line);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private float getOverLimitData(Overlimit overlimit, String targetName, Integer times) {
|
|
|
|
|
float result;
|
|
|
|
|
Class<?> clazz = overlimit.getClass();
|
|
|
|
|
String methodName = targetName + times;
|
|
|
|
|
try {
|
|
|
|
|
Method method = clazz.getMethod(methodName);
|
|
|
|
|
result = (float) method.invoke(overlimit);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取频率偏差-日最大值-最大值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataV> getFreqDev(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper2 = new InfluxQueryWrapper(DataV.class);
|
|
|
|
|
influxQueryWrapper2.eq(DataV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataV::getValueType, InfluxDbSqlConstant.MAX)
|
|
|
|
|
.eq(DataV::getPhasicType,"T")
|
|
|
|
|
.max(DataV::getFreqDev)
|
|
|
|
|
.between(DataV::getTime, startTime, endTime);
|
|
|
|
|
return dataVMapper.getStatisticsByWraper(influxQueryWrapper2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取电压偏差-日最大值&&日最小值 日最大值的最大值 日最小值的最小值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataV> getVoltageDev(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
|
|
|
|
influxQueryWrapper.eq(DataV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataV::getValueType, InfluxDbSqlConstant.MIN)
|
|
|
|
|
.regular(DataV::getPhasicType,Arrays.asList("A","B","C"))
|
|
|
|
|
.min(DataV::getVuDev)
|
|
|
|
|
.between(DataV::getTime, startTime, endTime);
|
|
|
|
|
List<DataV> result = new ArrayList<>(dataVMapper.getStatisticsByWraper(influxQueryWrapper));
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper2 = new InfluxQueryWrapper(DataV.class);
|
|
|
|
|
influxQueryWrapper2.eq(DataV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataV::getValueType, InfluxDbSqlConstant.MAX)
|
|
|
|
|
.regular(DataV::getPhasicType,Arrays.asList("A","B","C"))
|
|
|
|
|
.max(DataV::getVuDev)
|
|
|
|
|
.between(DataV::getTime, startTime, endTime);
|
|
|
|
|
result.addAll(dataVMapper.getStatisticsByWraper(influxQueryWrapper2));
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取长时闪变-日最大值-最大值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataPlt> getFlicker(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class);
|
|
|
|
|
influxQueryWrapper.eq(DataPlt::getLineId, lineIndex)
|
|
|
|
|
.regular(DataPlt::getPhaseType,Arrays.asList("A","B","C"))
|
|
|
|
|
.max(DataPlt::getPlt)
|
|
|
|
|
.between(DataPlt::getTime, startTime, endTime);
|
|
|
|
|
return dataPltMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取电压总谐波畸变率-日CP95-最大值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataV> getVThd(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
|
|
|
|
influxQueryWrapper.eq(DataV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataV::getValueType, InfluxDbSqlConstant.CP95)
|
|
|
|
|
.regular(DataV::getPhasicType,Arrays.asList("A","B","C"))
|
|
|
|
|
.max(DataV::getVThd)
|
|
|
|
|
.between(DataV::getTime, startTime, endTime);
|
|
|
|
|
return dataVMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取负序电压不平衡度-日最大值-最大值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataV> getUnbalance(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
|
|
|
|
|
influxQueryWrapper.eq(DataV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataV::getValueType, InfluxDbSqlConstant.MAX)
|
|
|
|
|
.eq(DataV::getPhasicType,"T")
|
|
|
|
|
.max(DataV::getVUnbalance)
|
|
|
|
|
.between(DataV::getTime, startTime, endTime);
|
|
|
|
|
return dataVMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取负序电流-日最大值-最大值
|
|
|
|
|
*/
|
|
|
|
|
public List<DataI> getINeg(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
|
|
|
|
|
influxQueryWrapper.eq(DataI::getLineId, lineIndex)
|
|
|
|
|
.eq(DataI::getValueType, InfluxDbSqlConstant.MAX)
|
|
|
|
|
.eq(DataI::getPhaseType,"T")
|
|
|
|
|
.max(DataI::getINeg)
|
|
|
|
|
.between(DataI::getTime, startTime, endTime);
|
|
|
|
|
return dataIMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取谐波电压含有率 2~25次数据
|
|
|
|
|
*/
|
|
|
|
|
public List<DataHarmRateV> getDataHarmRateV(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class);
|
|
|
|
|
influxQueryWrapper.maxSamePrefixAndSuffix(InfluxDbSqlConstant.V,"", HarmonicTimesUtil.harmonicTimesList(2,25,1));
|
|
|
|
|
influxQueryWrapper.eq(DataHarmRateV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataHarmRateV::getValueType, InfluxDbSqlConstant.CP95)
|
|
|
|
|
.regular(DataHarmRateV::getPhaseType,Arrays.asList("A","B","C"))
|
|
|
|
|
.between(DataHarmRateV::getTime, startTime, endTime);
|
|
|
|
|
return dataHarmRateVMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取谐波电流含有率 2~25次数据
|
|
|
|
|
*/
|
|
|
|
|
public List<DataI> getDataI(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
|
|
|
|
|
influxQueryWrapper.maxSamePrefixAndSuffix(InfluxDbSqlConstant.I,"", HarmonicTimesUtil.harmonicTimesList(2,25,1));
|
|
|
|
|
influxQueryWrapper.eq(DataI::getLineId, lineIndex)
|
|
|
|
|
.eq(DataI::getValueType, InfluxDbSqlConstant.CP95)
|
|
|
|
|
.regular(DataI::getPhaseType,Arrays.asList("A","B","C"))
|
|
|
|
|
.between(DataI::getTime, startTime, endTime);
|
|
|
|
|
return dataIMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取间谐波电压含有率 2~25次数据
|
|
|
|
|
*/
|
|
|
|
|
public List<DataInHarmV> getDataInHarmV(String lineIndex, String startTime, String endTime) {
|
|
|
|
|
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataInHarmV.class);
|
|
|
|
|
influxQueryWrapper.maxSamePrefixAndSuffix(InfluxDbSqlConstant.V,"", HarmonicTimesUtil.harmonicTimesList(1,16,1));
|
|
|
|
|
influxQueryWrapper.eq(DataInHarmV::getLineId, lineIndex)
|
|
|
|
|
.eq(DataInHarmV::getValueType, InfluxDbSqlConstant.CP95)
|
|
|
|
|
.regular(DataInHarmV::getPhaseType,Arrays.asList("A","B","C"))
|
|
|
|
|
.between(DataInHarmV::getTime, startTime, endTime);
|
|
|
|
|
return dataInHarmVMapper.getStatisticsByWraper(influxQueryWrapper);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|