1.终端在线率

2.稳态指标合格率统计
This commit is contained in:
wr
2025-03-12 20:22:47 +08:00
parent ea748ef4b6
commit 7d503a42b1
30 changed files with 1984 additions and 92 deletions

View File

@@ -205,10 +205,10 @@ public class ExecutionCenter extends BaseController {
if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
Dept data = deptFeignClient.getRootDept().getData();
deptGetLineParam.setDeptId(data.getId());
List<DeptGetDeviceDTO> list = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData();
List<DeptGetDeviceDTO> list = commTerminalGeneralClient.deptGetDevice(deptGetLineParam).getData();
DeptGetDeviceDTO dto = list.stream().filter(po -> Objects.equals(po.getUnitId(), data.getId())).collect(Collectors.toList()).get(0);
List<LineDevGetDTO> devList = dto.getDeviceList();
calculatedParam.setIdList(devList.stream().distinct().collect(Collectors.toList()));
calculatedParam.setIdList(devList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList()));
}
LiteflowResponse liteflowResponse;
if (baseParam.isRepair()) {

View File

@@ -298,4 +298,13 @@ public class MeasurementExecutor extends BaseExecutor {
public void dataLimitRateProcess(NodeComponent bindCmp) {
dataCrossingService.limitRateHandler(bindCmp.getRequestData());
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataLimitTarget", nodeType = NodeTypeEnum.COMMON)
public boolean dataLimitTargetAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataLimitTarget", nodeType = NodeTypeEnum.COMMON)
public void dataLimitTargetProcess(NodeComponent bindCmp) {
dataCrossingService.limitTargetHandler(bindCmp.getRequestData());
}
}

View File

@@ -2,6 +2,9 @@ package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.QualifiedDetail;
import java.util.List;
/**
* @Description:
@@ -12,8 +15,23 @@ public interface IDataCrossingService {
/***
* r_stat_limit_rate_d数据越线次数
* @author xy
* @author wr
* @param calculatedParam 查询条件
*/
void limitRateHandler(CalculatedParam calculatedParam);
/***
* r_stat_limit_target_d数据越线次数
* @author wr
* @param calculatedParam 查询条件
*/
void limitTargetHandler(CalculatedParam calculatedParam);
/**
* 监测点稳态指标合格率(日)
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam);
}

View File

@@ -2,6 +2,9 @@ package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.DataOnlineRateDto;
import java.util.List;
/**
* @Description:
@@ -17,4 +20,12 @@ public interface IDataOnlineRateService {
* @param calculatedParam 查询条件
*/
void dataOnlineRate(CalculatedParam calculatedParam);
/**
* 装置数据月在线率
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/12 16:18
*/
List<DataOnlineRateDto.Detail> dataOnlineRateMonth(CalculatedParam calculatedParam);
}

View File

@@ -4,13 +4,12 @@ package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataCrossingService;
import com.njcn.common.utils.PubUtils;
import com.njcn.dataProcess.api.*;
import com.njcn.dataProcess.constant.PhaseType;
import com.njcn.dataProcess.enums.DataCleanEnum;
@@ -25,14 +24,15 @@ import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
@@ -68,6 +68,10 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
private DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient;
@Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@Resource
private DataLimitTargetFeignClient dataLimitTargetFeignClient;
@Override
public void limitRateHandler(CalculatedParam calculatedParam) {
logger.info("{},limitRate表转r_stat_limit_rate_d算法开始=====》", LocalDateTime.now());
@@ -210,17 +214,112 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
if (CollUtil.isNotEmpty(result)) {
//存储数据
List<DataLimitRateDto> dataLimitRate = result.stream().map(DataLimitDetailDto::getDataLimitRate).filter(x-> ObjectUtil.isNotNull(x)).collect(Collectors.toList());
List<DataLimitRateDto> dataLimitRate = result.stream().map(DataLimitDetailDto::getDataLimitRate).filter(x -> ObjectUtil.isNotNull(x)).collect(Collectors.toList());
dataLimitRateFeignClient.batchInsertion(dataLimitRate);
}
if (CollUtil.isNotEmpty(result)) {
//存储数据
List<DataLimitRateDetailDto> detail = result.stream().map(DataLimitDetailDto::getDataLimitRateDetail).filter(x-> ObjectUtil.isNotNull(x)).collect(Collectors.toList());
List<DataLimitRateDetailDto> detail = result.stream().map(DataLimitDetailDto::getDataLimitRateDetail).filter(x -> ObjectUtil.isNotNull(x)).collect(Collectors.toList());
dataLimitRateDetailFeignClient.batchInsertion(detail);
}
}
@Override
public void limitTargetHandler(CalculatedParam calculatedParam) {
log.info(LocalDateTime.now() + "r_stat_limit_target_d开始执行=======》");
List<DataLimitTargetDto> list = new ArrayList<>();
List<DataLimitRateDto> limitRateData = new ArrayList<>();
//远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<String> lineIds = calculatedParam.getIdList();
//以尺寸100分片,查询数据
List<List<String>> pendingIds = ListUtils.partition(lineIds, NUM);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
limitRateData.addAll(dataLimitRateFeignClient.getRawData(lineParam).getData());
}
if (!CollectionUtils.isEmpty(limitRateData)) {
for (DataLimitRateDto limitRate : limitRateData) {
DataLimitTargetDto limitTarget = new DataLimitTargetDto();
limitTarget.setTime(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
limitTarget.setLineId(limitRate.getLineId());
limitTarget.setPhasicType(limitRate.getPhasicType());
chanelData(limitRate, limitTarget);
list.add(limitTarget);
}
}
if (CollUtil.isNotEmpty(list)) {
dataLimitTargetFeignClient.batchInsertion(list);
}
}
@Override
public List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> devIdList = calculatedParam.getIdList();
List<QualifiedDetail> info = new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(devIdList, NUM);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<DataLimitRateDto> data = dataLimitRateFeignClient.getRawData(lineParam).getData();
Map<String, List<DataLimitRateDto>> limitRateMap = data.stream().collect(Collectors.groupingBy(DataLimitRateDto::getLineId));
limitRateMap.forEach((key, value) -> {
QualifiedDetail qualified = new QualifiedDetail();
qualified.setLineId(key);
qualified.setTime(calculatedParam.getDataDate());
int all = value.stream().mapToInt(DataLimitRateDto::getAllTime).sum();
if (all > 0) {
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getFreqDevOvertime).sum() * 100.0 / all)));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getVoltageDevOvertime).sum() * 100.0 / all)));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getUbalanceOvertime).sum() * 100.0 / all)));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getUaberranceOvertime).sum() * 100.0 / all)));
qualified.setINegOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getINegOvertime).sum() * 100.0 / all)));
setOverTime(2,25,"getUharm",value, qualified, all);
setOverTime(2,25,"getIharm",value, qualified, all);
setOverTime(1,16,"getInuharm",value, qualified, all);
}
int flickerAll = value.stream().mapToInt(DataLimitRateDto::getFlickerAllTime).sum();
if (flickerAll > 0) {
qualified.setFlickerOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getFlickerOvertime).sum() * 100.0 / flickerAll)));
}
info.add(qualified);
});
}
return info;
}
private static void setOverTime(Integer start, Integer end, String targetName,List<DataLimitRateDto> value, QualifiedDetail qualified, int all) {
for (int i = start; i <= end; i++) {
// 构造方法名
String methodName = targetName + i + "Overtime";
try {
Field finalField = DataLimitRateDto.class.getDeclaredField(methodName);
finalField.setAccessible(true);
finalField.set(qualified, PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(temp -> {
Integer o;
try {
o = (Integer) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.intValue();
}).sum() * 100.0 / all)));
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
/**
* @Description: getData
@@ -230,18 +329,18 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
* @Date: 2022/10/18
*/
private List<DataLimitDetailDto> getData(String dataDate,
Overlimit overlimit,
List<DataVDto> allTimeList,
List<DataPltDto> flickerAllTimeList,
List<DataHarmDto> dataHarmRateVPOList,
List<DataIDto> dataIPOList,
List<DataHarmDto> dataInHarmVPOList,
List<DataVDto> dataVPOList,
List<DataVDto> dataVPOUnbalanceList,
List<DataIDto> dataIPONegList,
List<DataVDto> dataVPOFreqList,
List<DataVDto> dataVPODevList,
List<DataPltDto> dataPltPOList) {
Overlimit overlimit,
List<DataVDto> allTimeList,
List<DataPltDto> flickerAllTimeList,
List<DataHarmDto> dataHarmRateVPOList,
List<DataIDto> dataIPOList,
List<DataHarmDto> dataInHarmVPOList,
List<DataVDto> dataVPOList,
List<DataVDto> dataVPOUnbalanceList,
List<DataIDto> dataIPONegList,
List<DataVDto> dataVPOFreqList,
List<DataVDto> dataVPODevList,
List<DataPltDto> dataPltPOList) {
List<DataLimitDetailDto> result = new ArrayList<>();
Map<String, List<DataHarmDto>> harmRateVByPhaseType = new HashMap<>();
@@ -288,9 +387,10 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
result.add(t);
return result;
}
/**
* @Description:
* @param lineParam
* @Description:
* @Author: wr
* @Date: 2025/3/11 9:04
*/
@@ -302,7 +402,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
Map<String, List<String>> timeMap = pqDataVerifies.stream()
.collect(Collectors.groupingBy(
PqDataVerify::getLineId,
Collectors.mapping(item->TimeUtils.LocalDateTimeToString(item.getTime()), Collectors.toList())
Collectors.mapping(item -> TimeUtils.LocalDateTimeToString(item.getTime()), Collectors.toList())
));
lineParam.setAbnormalTime(timeMap);
}
@@ -345,8 +445,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
// 获取 Overlimit 类的 getUharmx 方法
Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit ) {
addAbnormalData(v[i - 2], item.getValueType(),item.getPhasicType(), item.getMinTime(), value, limit);
if (value > limit) {
addAbnormalData(v[i - 2], item.getValueType(), item.getPhasicType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -371,8 +471,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
// 获取 Overlimit 类的 getUharmx 方法
Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit ) {
addAbnormalData(i[j - 2], item.getValueType(),item.getPhasicType(), item.getMinTime(), value, limit);
if (value > limit) {
addAbnormalData(i[j - 2], item.getValueType(), item.getPhasicType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -397,7 +497,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit) {
addAbnormalData(uHarm[j - 1],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
addAbnormalData(uHarm[j - 1], item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -409,7 +509,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
if (!CollectionUtils.isEmpty(dataVPOList)) {
for (DataVDto item : dataVPOList) {
if (item.getVThd() > overlimit.getUaberrance()) {
addAbnormalData(thd,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance());
addAbnormalData(thd, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance());
}
}
}
@@ -418,11 +518,11 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
for (DataVDto item : dataVPODevList) {
if (item.getVlDev() >= 0) {
if (item.getVlDev() > overlimit.getVoltageDev()) {
addAbnormalData(uDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getVoltageDev());
addAbnormalData(uDev, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getVoltageDev());
}
} else {
if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) ) {
addAbnormalData(uDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getUvoltageDev());
if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev())) {
addAbnormalData(uDev, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVlDev(), overlimit.getUvoltageDev());
}
}
}
@@ -430,8 +530,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
//长时间闪变
if (!CollectionUtils.isEmpty(dataPltPOList)) {
for (DataPltDto item : dataPltPOList) {
if (item.getPlt() > overlimit.getFlicker() ) {
addAbnormalData(flicker,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker());
if (item.getPlt() > overlimit.getFlicker()) {
addAbnormalData(flicker, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker());
}
}
}
@@ -488,7 +588,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
Method getUharmMethod = Overlimit.class.getMethod("getUharm" + i);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit) {
addAbnormalData(v[i - 2],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
addAbnormalData(v[i - 2], item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -513,8 +613,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
// 获取 Overlimit 类的 getUharmx 方法
Method getUharmMethod = Overlimit.class.getMethod("getIharm" + j);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit ) {
addAbnormalData(i[j - 2],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
if (value > limit) {
addAbnormalData(i[j - 2], item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -538,8 +638,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
// 获取 Overlimit 类的 getUharmx 方法
Method getUharmMethod = Overlimit.class.getMethod("getInuharm" + j);
float limit = (float) getUharmMethod.invoke(overlimit);
if (value > limit ) {
addAbnormalData(uHarm[j - 1],item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
if (value > limit) {
addAbnormalData(uHarm[j - 1], item.getPhasicType(), item.getValueType(), item.getMinTime(), value, limit);
}
} catch (Exception e) {
e.printStackTrace();
@@ -550,16 +650,16 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
//电压总谐波畸变率
if (!CollectionUtils.isEmpty(dataVPOList)) {
for (DataVDto item : dataVPOList) {
if (item.getVThd() > overlimit.getUaberrance() ) {
addAbnormalData(thd,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance());
if (item.getVThd() > overlimit.getUaberrance()) {
addAbnormalData(thd, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVThd(), overlimit.getUaberrance());
}
}
}
//三相电压不平衡度
if (!CollectionUtils.isEmpty(dataVPOUnbalanceList)) {
for (DataVDto item : dataVPOUnbalanceList) {
if (item.getVUnbalance() > overlimit.getUbalance() ) {
addAbnormalData(uAberrance,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVUnbalance(), overlimit.getUbalance());
if (item.getVUnbalance() > overlimit.getUbalance()) {
addAbnormalData(uAberrance, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getVUnbalance(), overlimit.getUbalance());
}
}
}
@@ -567,15 +667,15 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
if (!CollectionUtils.isEmpty(dataIPONegList)) {
for (DataIDto item : dataIPONegList) {
if (item.getINeg() > overlimit.getINeg()) {
addAbnormalData(iNeg,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getINeg(), overlimit.getINeg());
addAbnormalData(iNeg, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getINeg(), overlimit.getINeg());
}
}
}
//频率偏差
if (!CollectionUtils.isEmpty(dataVPOFreqList)) {
for (DataVDto item : dataVPOFreqList) {
if (item.getFreqDev() > overlimit.getFreqDev() ) {
addAbnormalData(freqDev,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getFreqDev(), overlimit.getFreqDev());
if (item.getFreqDev() > overlimit.getFreqDev()) {
addAbnormalData(freqDev, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getFreqDev(), overlimit.getFreqDev());
}
}
}
@@ -584,12 +684,12 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
if (!CollectionUtils.isEmpty(dataVPODevList)) {
for (DataVDto item : dataVPODevList) {
if (item.getVlDev() >= 0) {
if (item.getVlDev() > overlimit.getVoltageDev() ) {
addAbnormalData(uDev,item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev());
if (item.getVlDev() > overlimit.getVoltageDev()) {
addAbnormalData(uDev, item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getVoltageDev());
}
} else {
if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev()) ) {
addAbnormalData(uDev,item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getUvoltageDev());
if (Math.abs(item.getVuDev()) > Math.abs(overlimit.getUvoltageDev())) {
addAbnormalData(uDev, item.getPhasicType(), item.getMinTime(), item.getValueType(), item.getVlDev(), overlimit.getUvoltageDev());
}
}
}
@@ -597,8 +697,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
//长时间闪变
if (!CollectionUtils.isEmpty(dataPltPOList)) {
for (DataPltDto item : dataPltPOList) {
if (item.getPlt() > overlimit.getFlicker() ) {
addAbnormalData(flicker,item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker());
if (item.getPlt() > overlimit.getFlicker()) {
addAbnormalData(flicker, item.getPhasicType(), item.getValueType(), item.getMinTime(), item.getPlt(), overlimit.getFlicker());
}
}
}
@@ -683,7 +783,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
v[0].size() + v[1].size() + v[2].size() + v[3].size() + v[4].size() + v[5].size() + v[6].size() + v[7].size() + v[8].size() + v[9].size() + v[11].size() + v[12].size() + v[13].size() + v[14].size() + v[15].size() + v[16].size() + v[17].size() + v[18].size() + v[19].size() + v[20].size() + v[21].size() + v[22].size() + v[23].size() +
i[0].size() + i[1].size() + i[2].size() + i[3].size() + i[4].size() + i[5].size() + i[6].size() + i[7].size() + i[8].size() + i[9].size() + i[10].size() + i[11].size() + i[12].size() + i[13].size() + i[14].size() + i[15].size() + i[16].size() + i[17].size() + i[18].size() + i[19].size() + i[20].size() + i[21].size() + i[22].size() + i[23].size() +
uHarm[0].size() + uHarm[1].size() + uHarm[2].size() + uHarm[3].size() + uHarm[4].size() + uHarm[5].size() + uHarm[6].size() + uHarm[7].size() + uHarm[8].size() + uHarm[9].size() + uHarm[10].size() + uHarm[11].size() + uHarm[12].size() + uHarm[13].size() + uHarm[14].size() + uHarm[15].size();
if(detailAllTime>0){
if (detailAllTime > 0) {
DataLimitRateDetailDto detail = new DataLimitRateDetailDto();
detail.setLineId(lineId);
detail.setTime(LocalDateTimeUtil.parseDate(dataDate, DatePattern.NORM_DATE_PATTERN));
@@ -830,31 +930,32 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
limitRate.setInuharm16Overtime(uHarm[15].size());
return limitRate;
}
private String toJson(List<AbnormalData> list) {
Map<String, List<AbnormalData>> abnormalMap = list.stream().collect(Collectors.groupingBy(x->x.getPhasic()+"_"+x.getValueType()));
List<AbnormalData.Json> info=new ArrayList<>();
abnormalMap.forEach((key,value)->{
Map<String, List<AbnormalData>> abnormalMap = list.stream().collect(Collectors.groupingBy(x -> x.getPhasic() + "_" + x.getValueType()));
List<AbnormalData.Json> info = new ArrayList<>();
abnormalMap.forEach((key, value) -> {
String[] split = key.split("_");
AbnormalData.Json json=new AbnormalData.Json();
AbnormalData.Json json = new AbnormalData.Json();
json.setPhasic(split[0]);
json.setValueType(split[1]);
json.setTime(String.join(",", value.stream()
.map(abnormal -> abnormal.getTime())
.distinct()
.collect(Collectors.toList())));
json.setValue(String.join(",", value.stream()
.map(abnormal -> abnormal.getValue()+"")
.distinct()
.collect(Collectors.toList())));
.map(abnormal -> abnormal.getTime())
.distinct()
.collect(Collectors.toList())));
json.setValue(String.join(",", value.stream()
.map(abnormal -> abnormal.getValue() + "")
.distinct()
.collect(Collectors.toList())));
info.add(json);
});
if(CollUtil.isNotEmpty(info)){
if (CollUtil.isNotEmpty(info)) {
return JSON.toJSONString(info);
}
return "";
}
private void addAbnormalData(List<AbnormalData> list,String phasicType, String valueType, String time, Double value, float overLimitValue) {
private void addAbnormalData(List<AbnormalData> list, String phasicType, String valueType, String time, Double value, float overLimitValue) {
AbnormalData data = new AbnormalData();
data.setTime(time.substring(11, time.length()));
data.setPhasic(phasicType);
@@ -863,4 +964,107 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
data.setOverLimitValue(overLimitValue);
list.add(data);
}
private void chanelData(DataLimitRateDto limitRate, DataLimitTargetDto limitTarget) {
//有一个指标超标allTime则为1
int allTime = limitRate.getFreqDevOvertime() + limitRate.getVoltageDevOvertime() + limitRate.getUbalanceOvertime() + limitRate.getUaberranceOvertime() + limitRate.getINegOvertime();
try {
Class<?> clazz = limitRate.getClass();
for (int i = 2; i <= 25; i++) {
String methodName = "getUharm" + i + "Overtime";
String methodName2 = "getIharm" + i + "Overtime";
Method method = clazz.getMethod(methodName);
int overtime = (int) method.invoke(limitRate);
allTime += overtime;
Method method2 = clazz.getMethod(methodName2);
int overtime2 = (int) method2.invoke(limitRate);
allTime += overtime2;
}
for (int i = 1; i <= 16; i++) {
String methodName = "getInuharm" + i + "Overtime";
Method method = clazz.getMethod(methodName);
int overtime = (int) method.invoke(limitRate);
allTime += overtime;
}
} catch (Exception e) {
e.getMessage();
}
limitTarget.setAllTime((allTime > 0) ? 1 : 0);
//闪变指标超标flickerAllTime则为1
limitTarget.setFlickerAllTime((limitRate.getFlickerOvertime() > 0) ? 1 : 0);
limitTarget.setFreqDevOvertime((limitRate.getFreqDevOvertime() > 0) ? 1 : 0);
limitTarget.setVoltageDevOvertime((limitRate.getVoltageDevOvertime() > 0) ? 1 : 0);
limitTarget.setUbalanceOvertime((limitRate.getUbalanceOvertime() > 0) ? 1 : 0);
limitTarget.setFlickerOvertime((limitRate.getFlickerOvertime() > 0) ? 1 : 0);
limitTarget.setUaberranceOvertime((limitRate.getUaberranceOvertime() > 0) ? 1 : 0);
limitTarget.setINegOvertime((limitRate.getINegOvertime() > 0) ? 1 : 0);
limitTarget.setUharm2Overtime((limitRate.getUharm2Overtime() > 0) ? 1 : 0);
limitTarget.setUharm3Overtime((limitRate.getUharm3Overtime() > 0) ? 1 : 0);
limitTarget.setUharm4Overtime((limitRate.getUharm4Overtime() > 0) ? 1 : 0);
limitTarget.setUharm5Overtime((limitRate.getUharm5Overtime() > 0) ? 1 : 0);
limitTarget.setUharm6Overtime((limitRate.getUharm6Overtime() > 0) ? 1 : 0);
limitTarget.setUharm7Overtime((limitRate.getUharm7Overtime() > 0) ? 1 : 0);
limitTarget.setUharm8Overtime((limitRate.getUharm8Overtime() > 0) ? 1 : 0);
limitTarget.setUharm9Overtime((limitRate.getUharm9Overtime() > 0) ? 1 : 0);
limitTarget.setUharm10Overtime((limitRate.getUharm10Overtime() > 0) ? 1 : 0);
limitTarget.setUharm11Overtime((limitRate.getUharm11Overtime() > 0) ? 1 : 0);
limitTarget.setUharm12Overtime((limitRate.getUharm12Overtime() > 0) ? 1 : 0);
limitTarget.setUharm13Overtime((limitRate.getUharm13Overtime() > 0) ? 1 : 0);
limitTarget.setUharm14Overtime((limitRate.getUharm14Overtime() > 0) ? 1 : 0);
limitTarget.setUharm15Overtime((limitRate.getUharm15Overtime() > 0) ? 1 : 0);
limitTarget.setUharm16Overtime((limitRate.getUharm16Overtime() > 0) ? 1 : 0);
limitTarget.setUharm17Overtime((limitRate.getUharm17Overtime() > 0) ? 1 : 0);
limitTarget.setUharm18Overtime((limitRate.getUharm18Overtime() > 0) ? 1 : 0);
limitTarget.setUharm19Overtime((limitRate.getUharm19Overtime() > 0) ? 1 : 0);
limitTarget.setUharm20Overtime((limitRate.getUharm20Overtime() > 0) ? 1 : 0);
limitTarget.setUharm21Overtime((limitRate.getUharm21Overtime() > 0) ? 1 : 0);
limitTarget.setUharm22Overtime((limitRate.getUharm22Overtime() > 0) ? 1 : 0);
limitTarget.setUharm23Overtime((limitRate.getUharm23Overtime() > 0) ? 1 : 0);
limitTarget.setUharm24Overtime((limitRate.getUharm24Overtime() > 0) ? 1 : 0);
limitTarget.setUharm25Overtime((limitRate.getUharm25Overtime() > 0) ? 1 : 0);
limitTarget.setIharm2Overtime((limitRate.getIharm2Overtime() > 0) ? 1 : 0);
limitTarget.setIharm3Overtime((limitRate.getIharm3Overtime() > 0) ? 1 : 0);
limitTarget.setIharm4Overtime((limitRate.getIharm4Overtime() > 0) ? 1 : 0);
limitTarget.setIharm5Overtime((limitRate.getIharm5Overtime() > 0) ? 1 : 0);
limitTarget.setIharm6Overtime((limitRate.getIharm6Overtime() > 0) ? 1 : 0);
limitTarget.setIharm7Overtime((limitRate.getIharm7Overtime() > 0) ? 1 : 0);
limitTarget.setIharm8Overtime((limitRate.getIharm8Overtime() > 0) ? 1 : 0);
limitTarget.setIharm9Overtime((limitRate.getIharm9Overtime() > 0) ? 1 : 0);
limitTarget.setIharm10Overtime((limitRate.getIharm10Overtime() > 0) ? 1 : 0);
limitTarget.setIharm11Overtime((limitRate.getIharm11Overtime() > 0) ? 1 : 0);
limitTarget.setIharm12Overtime((limitRate.getIharm12Overtime() > 0) ? 1 : 0);
limitTarget.setIharm13Overtime((limitRate.getIharm13Overtime() > 0) ? 1 : 0);
limitTarget.setIharm14Overtime((limitRate.getIharm14Overtime() > 0) ? 1 : 0);
limitTarget.setIharm15Overtime((limitRate.getIharm15Overtime() > 0) ? 1 : 0);
limitTarget.setIharm16Overtime((limitRate.getIharm16Overtime() > 0) ? 1 : 0);
limitTarget.setIharm17Overtime((limitRate.getIharm17Overtime() > 0) ? 1 : 0);
limitTarget.setIharm18Overtime((limitRate.getIharm18Overtime() > 0) ? 1 : 0);
limitTarget.setIharm19Overtime((limitRate.getIharm19Overtime() > 0) ? 1 : 0);
limitTarget.setIharm20Overtime((limitRate.getIharm20Overtime() > 0) ? 1 : 0);
limitTarget.setIharm21Overtime((limitRate.getIharm21Overtime() > 0) ? 1 : 0);
limitTarget.setIharm22Overtime((limitRate.getIharm22Overtime() > 0) ? 1 : 0);
limitTarget.setIharm23Overtime((limitRate.getIharm23Overtime() > 0) ? 1 : 0);
limitTarget.setIharm24Overtime((limitRate.getIharm24Overtime() > 0) ? 1 : 0);
limitTarget.setIharm25Overtime((limitRate.getIharm25Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm1Overtime((limitRate.getInuharm1Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm2Overtime((limitRate.getInuharm2Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm3Overtime((limitRate.getInuharm3Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm4Overtime((limitRate.getInuharm4Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm5Overtime((limitRate.getInuharm5Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm6Overtime((limitRate.getInuharm6Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm7Overtime((limitRate.getInuharm7Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm8Overtime((limitRate.getInuharm8Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm9Overtime((limitRate.getInuharm9Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm10Overtime((limitRate.getInuharm10Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm11Overtime((limitRate.getInuharm11Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm12Overtime((limitRate.getInuharm12Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm13Overtime((limitRate.getInuharm13Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm14Overtime((limitRate.getInuharm14Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm15Overtime((limitRate.getInuharm15Overtime() > 0) ? 1 : 0);
limitTarget.setInuharm16Overtime((limitRate.getInuharm16Overtime() > 0) ? 1 : 0);
}
}

View File

@@ -14,9 +14,16 @@ import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataOnlineRateDto;
import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.influx.deprecated.InfluxDBPublicParam;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -39,41 +46,57 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
private DataVFeignClient dataVFeignClient;
@Resource
private DataOnlineRateFeignClient onlineRateFeignClient;
@Resource
private CommTerminalGeneralClient commTerminalGeneralClient;
@Resource
private DeptFeignClient deptFeignClient;
@Override
public void dataOnlineRate(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<LineDevGetDTO> devList = calculatedParam.getIdList();
List<String> devIdList = calculatedParam.getIdList();
Map<String, List<LineDevGetDTO>> LineDevGetMap = devList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
List<List<String>> pendingIds = ListUtils.partition(devIdList,NUM);
List<DataOnlineRateDto.Detail> list = new ArrayList<>();
if(ObjectUtil.isNotNull(calculatedParam.getType())){
LineDevGetMap.forEach((key,value)->{
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
List<String> collect = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
lineParam.setLineId(collect);
Integer data = dataVFeignClient.getCountRawData(lineParam).getData();
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
onlineRateDpo.setDevIndex(key);
if(data>0){
onlineRateDpo.setOnlineMin(InfluxDBPublicParam.DAY_MINUTE);
onlineRateDpo.setOfflineMin(0);
}else{
onlineRateDpo.setOnlineMin(0);
onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE);
}
list.add(onlineRateDpo);
});
if(calculatedParam.getType()==1){
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
Dept dept = deptFeignClient.getRootDept().getData();
deptGetLineParam.setDeptId(dept.getId());
List<DeptGetDeviceDTO> DeviceAndMonitorList = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData();
DeptGetDeviceDTO dto = DeviceAndMonitorList.stream().filter(po -> Objects.equals(po.getUnitId(), dept.getId())).collect(Collectors.toList()).get(0);
List<LineDevGetDTO> devList = dto.getDeviceList();
Map<String, List<LineDevGetDTO>> LineDevGetMap = devList.stream()
.filter(x -> devIdList.contains(x.getDevId()))
.collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
LineDevGetMap.forEach((key,value)->{
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
List<String> collect = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
lineParam.setLineId(collect);
Integer data = dataVFeignClient.getCountRawData(lineParam).getData();
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
onlineRateDpo.setDevIndex(key);
if(data>0){
onlineRateDpo.setOnlineMin(InfluxDBPublicParam.DAY_MINUTE);
onlineRateDpo.setOfflineMin(0);
}else{
onlineRateDpo.setOnlineMin(0);
onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE);
}
list.add(onlineRateDpo);
});
}
}else{
List<PqsCommunicateDto> outCommunicateData = new ArrayList<>();
LineDevGetMap.forEach((key,value)->{
lineParam.setLineId(Arrays.asList(key));
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<PqsCommunicateDto> data = communicateFeignClient.getRawDataLatest(lineParam).getData();
outCommunicateData.addAll(data);
});
}
Date dateOut = DateUtil.parse(calculatedParam.getDataDate());
for (PqsCommunicateDto pqsCommunicate : outCommunicateData) {
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
@@ -92,6 +115,31 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
}
}
@Override
public List<DataOnlineRateDto.Detail> dataOnlineRateMonth(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> devIdList = calculatedParam.getIdList();
List<DataOnlineRateDto.Detail> info=new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(devIdList,NUM);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<DataOnlineRateDto.Detail> data = onlineRateFeignClient.getRawData(lineParam).getData();
Map<String, List<DataOnlineRateDto.Detail>> collect = data.stream().collect(Collectors.groupingBy(DataOnlineRateDto.Detail::getDevIndex));
collect.forEach((key,value)->{
DataOnlineRateDto.Detail onlineRateDto=new DataOnlineRateDto.Detail();
onlineRateDto.setTimeId(calculatedParam.getDataDate());
onlineRateDto.setDevIndex(key);
onlineRateDto.setOnlineMin(value.stream().mapToInt(DataOnlineRateDto.Detail::getOnlineMin).sum());
onlineRateDto.setOfflineMin(value.stream().mapToInt(DataOnlineRateDto.Detail::getOfflineMin).sum());
info.add(onlineRateDto);
});
}
return info;
}
/**
* new的时间和当前统计时间 不是/是 同一天
*/