From ed7c8d6d34f88993f1718d8c00b274a52e8a5951 Mon Sep 17 00:00:00 2001 From: tobias Date: Tue, 18 Mar 2025 22:05:41 +0100 Subject: [PATCH] JSON-Ausgabe eingebaut --- .../info/peper/vz/rest/VzRestController.java | 43 +++++++++++++------ .../info/peper/vz/rest/bo/Statistics.java | 37 +++++++++++++++- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/src/main/java/info/peper/vz/rest/VzRestController.java b/src/main/java/info/peper/vz/rest/VzRestController.java index 4f3cd04..5db0990 100644 --- a/src/main/java/info/peper/vz/rest/VzRestController.java +++ b/src/main/java/info/peper/vz/rest/VzRestController.java @@ -5,6 +5,8 @@ import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.time.Duration; import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.time.temporal.ChronoField; import java.util.List; import java.util.Locale; @@ -17,6 +19,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import info.peper.vz.rest.bo.Statistics; import info.peper.vz.rest.bo.db.Aggregate; import info.peper.vz.rest.bo.db.EnergyPrice; @@ -76,8 +79,8 @@ class VzRestController { return prices; } - @GetMapping(value="/rest-vz/summary", produces = {"text/plain"}) - String getSummary(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart, + @GetMapping(value="/rest-vz/stats", produces = {"application/json"}) + Statistics getStats(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart, @RequestParam(name = "timestampEnd", defaultValue = "-1")long timestampEnd, @RequestParam(name = "duration", defaultValue = "")final String duration, @RequestParam("houseId")final int houseId, @@ -96,9 +99,6 @@ class VzRestController { } } - final NumberFormat formatCurrency = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); - final NumberFormat formatPercent = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); - final NumberFormat formatEnergy = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); final List prices = this.getPrices(timestampStart, timestampEnd, houseId); float savedMoney = 0; @@ -122,16 +122,31 @@ class VzRestController { timestampMax = aggregate.getTimestampEnd(); } } + return new Statistics(timestampMin, timestampMax, totalProduced, totalInjected, totalObtained, (long)(savedMoney*100)); + } + + @GetMapping(value="/rest-vz/summary", produces = {"text/plain"}) + String getSummary(@RequestParam(name = "timestampStart", defaultValue = "-1")long timestampStart, + @RequestParam(name = "timestampEnd", defaultValue = "-1")long timestampEnd, + @RequestParam(name = "duration", defaultValue = "")final String duration, + @RequestParam("houseId")final int houseId, + @RequestParam(name = "solarFactor", defaultValue = "1.0")final float solarFactor) { + + final Statistics stats = this.getStats(timestampStart, timestampEnd, duration, houseId, solarFactor); + + final NumberFormat formatCurrency = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); + final NumberFormat formatPercent = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); + final NumberFormat formatEnergy = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.GERMAN)); final StringBuilder sb = new StringBuilder(); - sb.append("Start: " + Instant.ofEpochMilli(timestampMin).toString() + "\n"); - sb.append("Ende: " + Instant.ofEpochMilli(timestampMax).toString() + "\n"); - sb.append("Erzeugter Strom von der Photovoltaik: " + formatEnergy.format((float)totalProduced/1000000) + " kWh\n"); - sb.append("Eingespeister Strom von der Photovoltaik: " + formatEnergy.format((float)totalInjected/1000000) + " kWh\n"); - sb.append("Genutzter Strom von der Photovoltaik: " + formatEnergy.format((float)(totalProduced-totalInjected)/1000000) + " kWh (="); - sb.append(formatPercent.format((float)(totalProduced-totalInjected)/(float)totalProduced*100) + " %)\n"); - sb.append("Bezogener Strom: " + formatEnergy.format((float)totalObtained/1000000) + " kWh\n"); - sb.append("Autakie: " + formatPercent.format((float)(totalProduced-totalInjected)/(float)(totalObtained+totalProduced-totalInjected)*100) + " %\n"); - sb.append("Eingespartes Geld: " + formatCurrency.format(savedMoney) + "€\n"); + sb.append("Start: .................................. " + ZonedDateTime.ofInstant(Instant.ofEpochMilli(stats.getTimestampStart()), ZoneId.systemDefault()).toString() + "\n"); + sb.append("Ende: ................................... " + ZonedDateTime.ofInstant(Instant.ofEpochMilli(stats.getTimestampEnd()), ZoneId.systemDefault()).toString() + "\n"); + sb.append("Erzeugter Strom von der Photovoltaik: ... " + formatEnergy.format((float)stats.getProducedEnergy()/1000000) + " kWh\n"); + sb.append("Eingespeister Strom von der Photovoltaik: " + formatEnergy.format((float)stats.getInjectedEnergy()/1000000) + " kWh\n"); + sb.append("Genutzter Strom von der Photovoltaik: ... " + formatEnergy.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/1000000) + " kWh (="); + sb.append(formatPercent.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/(float)stats.getProducedEnergy()*100) + " %)\n"); + sb.append("Bezogener Strom: ........................ " + formatEnergy.format((float)stats.getObtainedEnergy()/1000000) + " kWh\n"); + sb.append("Autakie: ................................ " + formatPercent.format((float)(stats.getProducedEnergy()-stats.getInjectedEnergy())/(float)(stats.getObtainedEnergy()+stats.getProducedEnergy()-stats.getInjectedEnergy())*100) + " %\n"); + sb.append("Eingespartes Geld: ...................... " + formatCurrency.format(((float)stats.getSavedMoney())/100) + "€\n"); return sb.toString(); } diff --git a/src/main/java/info/peper/vz/rest/bo/Statistics.java b/src/main/java/info/peper/vz/rest/bo/Statistics.java index 6fe6d65..4ad7cf1 100644 --- a/src/main/java/info/peper/vz/rest/bo/Statistics.java +++ b/src/main/java/info/peper/vz/rest/bo/Statistics.java @@ -1,5 +1,40 @@ package info.peper.vz.rest.bo; public class Statistics { - + private final long timestampStart; + private final long timestampEnd; + private final long producedEnergy; + private final long injectedEnergy; + private final long obtainedEnergy; + private final long savedMoney; + + public Statistics(long timestampStart, long timestampEnd, long producedEnergy, long injectedEnergy, + long obtainedEnergy, long savedMoney) { + super(); + this.timestampStart = timestampStart; + this.timestampEnd = timestampEnd; + this.producedEnergy = producedEnergy; + this.injectedEnergy = injectedEnergy; + this.obtainedEnergy = obtainedEnergy; + this.savedMoney = savedMoney; + } + public long getTimestampStart() { + return timestampStart; + } + public long getTimestampEnd() { + return timestampEnd; + } + public long getProducedEnergy() { + return producedEnergy; + } + public long getInjectedEnergy() { + return injectedEnergy; + } + public long getObtainedEnergy() { + return obtainedEnergy; + } + public long getSavedMoney() { + return savedMoney; + } + }