完成监测点稳态指标合格率(天、月、季和年)

This commit is contained in:
wr
2025-03-18 20:40:36 +08:00
parent cd84bd00d4
commit b9005d7fc8
31 changed files with 1277 additions and 77 deletions

View File

@@ -25,7 +25,7 @@ public class DeviceExecutor extends BaseExecutor {
/**
* 算法名: 暂无-----终端在线率_日表(r_stat_onlinerate_d)
* 算法名: 终端在线率_日表(r_stat_onlinerate_d)
*
* @param bindCmp
* @return

View File

@@ -358,6 +358,7 @@ public class MeasurementExecutor extends BaseExecutor {
}
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataLimitRate", nodeType = NodeTypeEnum.COMMON)
public boolean dataLimitRateAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
@@ -378,6 +379,22 @@ public class MeasurementExecutor extends BaseExecutor {
dataCrossingService.limitTargetHandler(bindCmp.getRequestData());
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataLimitQualified", nodeType = NodeTypeEnum.COMMON)
public boolean dataLimitQualifiedAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataLimitQualified", nodeType = NodeTypeEnum.COMMON)
public void dataLimitQualifiedProcess(NodeComponent bindCmp) {
dataCrossingService.limitQualifiedDayHandler(bindCmp.getRequestData());
}
/**
* 监测点数据完整性
* @param bindCmp
* @return
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataIntegrity", nodeType = NodeTypeEnum.COMMON)
public boolean dataIntegrityAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);

View File

@@ -2,7 +2,7 @@ package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.QualifiedDetail;
import com.njcn.dataProcess.pojo.dto.DataQualifiedDetail;
import java.util.List;
@@ -33,7 +33,7 @@ public interface IDataCrossingService {
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam);
void limitQualifiedDayHandler(CalculatedParam calculatedParam);
/**
@@ -42,5 +42,27 @@ public interface IDataCrossingService {
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<QualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam);
List<DataQualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam);
/**
* 监测点稳态指标合格率(季)
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<DataQualifiedDetail> limitQualifiedQuarterHandler(CalculatedParam calculatedParam);
/**
* 监测点稳态指标合格率(年)
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<DataQualifiedDetail> limitQualifiedYearHandler(CalculatedParam calculatedParam);
}

View File

@@ -24,6 +24,7 @@ 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.beans.factory.annotation.Value;
@@ -50,7 +51,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class);
@Value("${line.num}")
private Integer NUM = 100;
private Integer NUM = 100;
@Resource
private DataVFeignClient dataVFeignClient;
@Resource
@@ -71,6 +72,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@Resource
private DataLimitTargetFeignClient dataLimitTargetFeignClient;
@Resource
private DataLimitQualifiedFeignClient dataLimitQualifiedFeignClient;
@Override
@@ -260,33 +263,20 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
}
@Override
public List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam) {
public void limitQualifiedDayHandler(CalculatedParam calculatedParam) {
logger.info("{},r_stat_limit_qualified_d算法开始=====》", LocalDateTime.now());
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getQualifiedDetails(calculatedParam, lineParam, lineIdList);
}
@Override
public List<QualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getQualifiedDetails(calculatedParam, lineParam, lineIdList);
}
private List<QualifiedDetail> getQualifiedDetails(CalculatedParam calculatedParam, LineCountEvaluateParam lineParam, List<String> lineIdList) {
List<QualifiedDetail> info = new ArrayList<>();
List<DataQualifiedDetail> info = new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(lineIdList, 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();
DataQualifiedDetail qualified = new DataQualifiedDetail();
qualified.setLineId(key);
qualified.setTime(calculatedParam.getDataDate());
int all = value.stream().mapToInt(DataLimitRateDto::getAllTime).sum();
@@ -309,7 +299,61 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
});
}
if (CollUtil.isNotEmpty(info)) {
dataLimitQualifiedFeignClient.batchInsertion(info);
}
}
@Override
public List<DataQualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getDataQualifiedDetails(lineParam, lineIdList);
}
@Override
public List<DataQualifiedDetail> limitQualifiedQuarterHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfQuarter(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfQuarter(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getDataQualifiedDetails(lineParam, lineIdList);
}
@Override
public List<DataQualifiedDetail> limitQualifiedYearHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfYear(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfYear(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getDataQualifiedDetails(lineParam, lineIdList);
}
@NotNull
private List<DataQualifiedDetail> getDataQualifiedDetails(LineCountEvaluateParam lineParam, List<String> lineIdList) {
List<DataQualifiedDetail> info = new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(lineIdList, NUM);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<DataQualifiedDetail> data = dataLimitQualifiedFeignClient.getRawData(lineParam).getData();
Map<String, List<DataQualifiedDetail>> limitRateMap = data.stream().collect(Collectors.groupingBy(DataQualifiedDetail::getLineId));
for (Map.Entry<String, List<DataQualifiedDetail>> entry : limitRateMap.entrySet()) {
String key = entry.getKey();
List<DataQualifiedDetail> value = entry.getValue();
DataQualifiedDetail qualified = new DataQualifiedDetail();
qualified.setLineId(key);
qualified.setTime(lineParam.getStartTime());
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getFreqDevOvertime).average().getAsDouble()));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getVoltageDevOvertime).average().getAsDouble()));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getUbalanceOvertime).average().getAsDouble()));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getUaberranceOvertime).average().getAsDouble()));
qualified.setINegOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getINegOvertime).average().getAsDouble()));
setOverTime(2, 25, "uharm", value, qualified);
setOverTime(2, 25, "iharm", value, qualified);
setOverTime(1, 16, "inuharm", value, qualified);
info.add(qualified);
}
}
return info;
}
@@ -317,8 +361,31 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
private double getaDouble(double value, int all) {
return value * 100.0 / all;
}
private void setOverTime(Integer start, Integer end, String targetName, List<DataLimitRateDto> value, QualifiedDetail qualified, int all) {
private void setOverTime(Integer start, Integer end, String targetName, List<DataQualifiedDetail> value, DataQualifiedDetail qualified) {
for (int i = start; i <= end; i++) {
// 构造方法名
String methodName = targetName + i + "Overtime";
try {
Field finalField = DataLimitRateDto.class.getDeclaredField(methodName);
finalField.setAccessible(true);
double v = PubUtils.doubleRound(2, value.stream().mapToDouble(temp -> {
Double o;
try {
o = (Double) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.doubleValue();
}).average().getAsDouble());
Field declared = DataQualifiedDetail.class.getDeclaredField(methodName);
declared.setAccessible(true);
declared.set(qualified, v);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
private void setOverTime(Integer start, Integer end, String targetName, List<DataLimitRateDto> value, DataQualifiedDetail qualified, int all) {
for (int i = start; i <= end; i++) {
// 构造方法名
String methodName = targetName + i + "Overtime";
@@ -334,7 +401,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
}
return o.intValue();
}).sum() * 100.0, all));
Field declared = QualifiedDetail.class.getDeclaredField(methodName);
Field declared = DataQualifiedDetail.class.getDeclaredField(methodName);
declared.setAccessible(true);
declared.set(qualified, v);
} catch (NoSuchFieldException | IllegalAccessException e) {