2021-08-02 09:15:19 +04:00

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";
}
}