67 lines
2.7 KiB
Java
67 lines
2.7 KiB
Java
/*
|
|
* Copyright (C) 2021 Anton Romanov - All Rights Reserved
|
|
* You may use, distribute and modify this code, please write to: romanov73@gmail.com.
|
|
*
|
|
*/
|
|
|
|
package ru.ulstu.controller;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.ui.Model;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import ru.ulstu.datamodel.ts.TimeSeries;
|
|
import ru.ulstu.datamodel.ts.TimeSeriesValue;
|
|
import ru.ulstu.service.TimeSeriesService;
|
|
import ru.ulstu.service.UtilService;
|
|
import springfox.documentation.annotations.ApiIgnore;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Controller
|
|
@ApiIgnore
|
|
public class IndexController {
|
|
private final UtilService utilService;
|
|
private final TimeSeriesService timeSeriesService;
|
|
|
|
private final static Logger LOG = LoggerFactory.getLogger(IndexController.class);
|
|
|
|
public IndexController(UtilService utilService,
|
|
TimeSeriesService timeSeriesService) {
|
|
this.utilService = utilService;
|
|
this.timeSeriesService = timeSeriesService;
|
|
}
|
|
|
|
@GetMapping("/index.html")
|
|
public String index(Model model) {
|
|
TimeSeries timeSeries = utilService.getRandomTimeSeries(100);
|
|
TimeSeries timeSeriesModel = null;
|
|
TimeSeries forecast = null;
|
|
try {
|
|
timeSeriesModel = timeSeriesService.smoothTimeSeries(timeSeries);
|
|
forecast = timeSeriesService.getForecast(timeSeries, 5).getTimeSeries();
|
|
} catch (Exception e) {
|
|
LOG.warn(e.getMessage());
|
|
}
|
|
|
|
Set<String> dates = timeSeries.getValues().stream()
|
|
.map(v -> v.getDate().format(DateTimeFormatter.ISO_DATE))
|
|
.collect(Collectors.toSet());
|
|
dates.addAll(forecast.getValues().stream()
|
|
.map(v -> v.getDate().format(DateTimeFormatter.ISO_DATE))
|
|
.collect(Collectors.toSet()));
|
|
model.addAttribute("dates", dates);
|
|
model.addAttribute("timeSeries", timeSeries.getValues().stream().map(TimeSeriesValue::getValue).toArray());
|
|
model.addAttribute("model", timeSeriesModel.getValues().stream().map(TimeSeriesValue::getValue).toArray());
|
|
timeSeries.getValues().remove(timeSeries.getValues().size() - 1);
|
|
List<Double> forecastValues = timeSeries.getValues().stream().map(v -> (Double) null).collect(Collectors.toList());
|
|
forecastValues.addAll(forecast.getValues().stream().map(TimeSeriesValue::getValue).collect(Collectors.toList()));
|
|
model.addAttribute("forecast", forecastValues.toArray());
|
|
return "index.html";
|
|
}
|
|
}
|