removed: Consumption: beginValue, endValue, previous

This commit is contained in:
Patrick Haßel 2024-10-08 14:28:12 +02:00
parent ac4b1283df
commit 9bf3323346
3 changed files with 3 additions and 29 deletions

View File

@ -2,12 +2,10 @@ package de.ph87.data.series.period.consumption;
import de.ph87.data.series.period.Period; import de.ph87.data.series.period.Period;
import de.ph87.data.series.period.consumption.unit.Unit; import de.ph87.data.series.period.consumption.unit.Unit;
import jakarta.annotation.Nullable;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.Duration;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import static de.ph87.data.series.period.consumption.slice.SliceService.DL; import static de.ph87.data.series.period.consumption.slice.SliceService.DL;
@ -61,33 +59,12 @@ public class Consumption {
@Column(nullable = false) @Column(nullable = false)
private double lastValue; private double lastValue;
@Column public Consumption(@NonNull final Period period, @NonNull final Unit unit, @NonNull final ZonedDateTime aligned, @NonNull final ZonedDateTime date, final double value) {
@Nullable
private Double beginValue;
@Column
@Nullable
private Double endValue;
public Consumption(@NonNull final Period period, @NonNull final Unit unit, @NonNull final ZonedDateTime aligned, @NonNull final ZonedDateTime date, final double value, @Nullable final Consumption previous) {
this.id = new Id(period, unit, aligned); this.id = new Id(period, unit, aligned);
this.firstDate = date; this.firstDate = date;
this.firstValue = value; this.firstValue = value;
this.lastDate = date; this.lastDate = date;
this.lastValue = value; this.lastValue = value;
if (previous != null) {
final double totalDelta = this.firstValue - previous.getLastValue();
final long totalMillis = Duration.between(previous.getLastDate(), this.firstDate).toMillis();
final double deltaPerMilli = totalDelta / totalMillis;
final long deltaBeginMillis = Duration.between(this.id.aligned, this.firstDate).toMillis();
final double deltaBeginValue = deltaPerMilli * deltaBeginMillis;
this.beginValue = this.firstValue - deltaBeginValue;
final long deltaEndMillis = Duration.between(this.id.aligned, this.firstDate).toMillis();
final double deltaEndValue = deltaPerMilli * deltaEndMillis;
previous.endValue = previous.lastValue + deltaEndValue;
}
} }
@Getter @Getter

View File

@ -14,8 +14,6 @@ public interface ConsumptionRepository extends CrudRepository<Consumption, Consu
Optional<Consumption> findByIdPeriodAndIdUnitAndIdAligned(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime aligned); Optional<Consumption> findByIdPeriodAndIdUnitAndIdAligned(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime aligned);
Optional<Consumption> findFirstByIdPeriodAndIdUnitAndIdAlignedBeforeOrderByIdAlignedDesc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime aligned);
Optional<Consumption> findFirstByIdPeriodAndIdUnitAndIdAlignedLessThanOrderByIdAlignedDesc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime begin); Optional<Consumption> findFirstByIdPeriodAndIdUnitAndIdAlignedLessThanOrderByIdAlignedDesc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime begin);
Optional<Consumption> findFirstByIdPeriodAndIdUnitAndIdAlignedGreaterThanOrderByIdAlignedAsc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime begin); Optional<Consumption> findFirstByIdPeriodAndIdUnitAndIdAlignedGreaterThanOrderByIdAlignedAsc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime begin);

View File

@ -30,9 +30,8 @@ public class ConsumptionService {
existing.setLastValue(event.getValue()); existing.setLastValue(event.getValue());
log.debug("Existing Consumption updated: {}", existing); log.debug("Existing Consumption updated: {}", existing);
} else { } else {
final Consumption previous = consumptionRepository.findFirstByIdPeriodAndIdUnitAndIdAlignedBeforeOrderByIdAlignedDesc(period, unit, aligned).orElse(null); final Consumption created = consumptionRepository.save(new Consumption(period, unit, aligned, event.getDate(), event.getValue()));
final Consumption created = consumptionRepository.save(new Consumption(period, unit, aligned, event.getDate(), event.getValue(), previous)); log.debug("New Consumption created: created={}", created);
log.debug("New Consumption created: created={}, previous={}", created, previous);
} }
} }
} }