|
|
|
|
@@ -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) {
|
|
|
|
|
|