#5 -- fix NPE
This commit is contained in:
parent
8dd4ec6570
commit
9560190368
@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import ru.ulstu.datamodel.ChartForm;
|
||||
import ru.ulstu.datamodel.ModelingResult;
|
||||
import ru.ulstu.datamodel.exception.ModelingException;
|
||||
import ru.ulstu.datamodel.ts.TimeSeries;
|
||||
import ru.ulstu.datamodel.ts.TimeSeriesValue;
|
||||
import ru.ulstu.db.DbService;
|
||||
@ -22,9 +23,11 @@ import ru.ulstu.service.UtilService;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Controller
|
||||
@ -52,7 +55,7 @@ public class IndexController {
|
||||
}
|
||||
|
||||
@GetMapping("chart")
|
||||
public String chart(@ModelAttribute ChartForm chartForm, Model model) throws IOException {
|
||||
public String chart(@ModelAttribute ChartForm chartForm, Model model) throws IOException, ModelingException, ExecutionException, InterruptedException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
|
||||
model.addAttribute("sets", dbService.getSets());
|
||||
if (chartForm.getSet() != null) {
|
||||
model.addAttribute("listTimeSeries", dbService.getTimeSeriesMeta(chartForm.getSet()));
|
||||
@ -65,21 +68,12 @@ public class IndexController {
|
||||
return "index.html";
|
||||
}
|
||||
|
||||
private void addChartToModel(TimeSeries timeSeries, Model model) {
|
||||
int countForecastPoints = 10;
|
||||
TimeSeries timeSeriesModel = null;
|
||||
ModelingResult modelingResult = null;
|
||||
TimeSeries forecast = null;
|
||||
TimeSeries testForecast = null;
|
||||
try {
|
||||
timeSeriesModel = timeSeriesService.smoothTimeSeries(timeSeries);
|
||||
modelingResult = timeSeriesService.getForecast(timeSeries, countForecastPoints);
|
||||
forecast = modelingResult.getTimeSeries();
|
||||
testForecast = modelingResult.getTestForecast();
|
||||
} catch (Exception e) {
|
||||
LOG.warn(e.getMessage());
|
||||
}
|
||||
|
||||
private void addChartToModel(TimeSeries timeSeries, Model model) throws ExecutionException, InterruptedException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, ModelingException {
|
||||
int countForecastPoints = timeSeries.getLength() > 20 ? 10 : timeSeries.getLength() / 3;
|
||||
TimeSeries timeSeriesModel = timeSeriesService.smoothTimeSeries(timeSeries);
|
||||
ModelingResult modelingResult = timeSeriesService.getForecast(timeSeries, countForecastPoints);
|
||||
TimeSeries forecast = modelingResult.getTimeSeries();
|
||||
TimeSeries testForecast = modelingResult.getTestForecast();
|
||||
Set<String> dates = timeSeries.getValues().stream()
|
||||
.map(v -> v.getDate().format(DateTimeFormatter.ISO_DATE))
|
||||
.collect(Collectors.toSet());
|
||||
|
@ -28,7 +28,7 @@ public class Smape extends ScoreMethod {
|
||||
//double actualValue = getValueOnSameDate(modelValue, original).getValue();
|
||||
double actualValue = Optional.ofNullable(tsValues.get(modelValue.getDate()))
|
||||
.orElseThrow(() -> new ModelingException("Значение модельного ряда не найдено в оригинальном ряде: "
|
||||
+ modelValue.getDate()));
|
||||
+ modelValue.getDate() + " " + tsValues + " " + model));
|
||||
sum += abs(modelValue.getValue() - actualValue)
|
||||
/ ((abs(actualValue) + abs(modelValue.getValue())) / 2);
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ public class MethodParamBruteForce {
|
||||
if (methodInstance.canMakeForecast(reducedTimeSeries, parametersValues, countPoints)) {
|
||||
results.add(executors.submit(() -> {
|
||||
TimeSeries forecast = methodInstance.getForecast(reducedTimeSeries, parametersValues, countPoints);
|
||||
forecast = syncDates(forecast, timeSeries);
|
||||
return new ModelingResult(forecast, null,
|
||||
parametersValues,
|
||||
scoreMethod.getScore(tsValues, forecast),
|
||||
@ -87,6 +88,15 @@ public class MethodParamBruteForce {
|
||||
bestResult.getTimeSeriesMethod());
|
||||
}
|
||||
|
||||
private TimeSeries syncDates(TimeSeries forecast, TimeSeries timeSeries) {
|
||||
List<TimeSeriesValue> forecastValues = forecast.getValues();
|
||||
for (int i = 1; i <= forecastValues.size(); i++) {
|
||||
forecastValues.get(forecastValues.size() - i)
|
||||
.setDate(timeSeries.getValues().get(timeSeries.getValues().size() - i).getDate());
|
||||
}
|
||||
return forecast;
|
||||
}
|
||||
|
||||
public TimeSeries getForecastWithOptimalLength(TimeSeries timeSeries) {
|
||||
throw new RuntimeException("Not implemented");
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
2021-04-30T09:32:57.120554;37.13
|
||||
2021-05-31T09:32:57.120554;39.89
|
||||
2021-06-30T09:32:57.120554;41.6
|
||||
2021-07-30T09:32:57.120554;35.39
|
||||
2021-08-31T09:32:57.120554;33.46
|
||||
2021-09-30T09:32:57.120554;45.42
|
||||
2021-10-30T09:32:57.120554;41.99
|
||||
2021-11-30T09:32:57.120554;40.93
|
||||
2021-12-30T09:32:57.120554;36.07
|
|
@ -0,0 +1 @@
|
||||
{"key":"Mazak VCN 410A работа по программе","size":9,"hasDateTime":true}
|
Loading…
Reference in New Issue
Block a user