Skip to content
Snippets Groups Projects
Commit 915607d1 authored by treinar's avatar treinar
Browse files

Optimizing query for forecast summaries

parent c2b1975b
Branches
Tags
2 merge requests!17Develop,!12Ny server 2019
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package no.nibio.vips.logic.controller.session; package no.nibio.vips.logic.controller.session;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.base.Functions;
import java.util.Calendar; import java.util.Calendar;
import java.util.TimeZone; import java.util.TimeZone;
import de.micromata.opengis.kml.v_2_2_0.Coordinate; import de.micromata.opengis.kml.v_2_2_0.Coordinate;
...@@ -908,29 +909,29 @@ public class ForecastBean { ...@@ -908,29 +909,29 @@ public class ForecastBean {
return retVal; return retVal;
} }
/**
* Finds the forecast configuration summaries for a given organization
* @param organizationId
* @return
*/
public List<ForecastConfiguration> getForecastConfigurationSummaries(Integer organizationId) public List<ForecastConfiguration> getForecastConfigurationSummaries(Integer organizationId)
{ {
List<ForecastConfiguration> forecastConfigurations = this.getForecastConfigurations(em.find(Organization.class, organizationId)); List<ForecastSummary> summaries = em.createNamedQuery("ForecastSummary.findByOrganizationId")
// TODO: Filter forecastconfigurations based on criteria (activity, crops, geography etc) .setParameter("organizationId", em.find(Organization.class, organizationId))
List<ForecastConfiguration> filteredConfigs = new ArrayList<>(); .getResultList();
Query q = em.createNamedQuery("ForecastSummary.findByForecastConfigurationId"); Map<Long, List<ForecastSummary>> mappedSummaries = new HashMap<>();
for(ForecastConfiguration config: forecastConfigurations) summaries.forEach((s) -> {
{ List<ForecastSummary> summaryForForecast = mappedSummaries.get(s.getForecastSummaryPK().getForecastConfigurationId()) != null ?
if(config.getForecastConfigurationId() < 0) mappedSummaries.get(s.getForecastSummaryPK().getForecastConfigurationId()) :
{ new ArrayList<>();
continue; summaryForForecast.add(s);
} mappedSummaries.put(s.getForecastSummaryPK().getForecastConfigurationId(), summaryForForecast);
config.setForecastSummaries( });
List<ForecastConfiguration> configurations = em.createNamedQuery("ForecastConfiguration.findByForecastConfigurationIds").setParameter("forecastConfigurationIds", mappedSummaries.keySet()).getResultList();
q.setParameter("forecastConfigurationId", config.getForecastConfigurationId()) configurations.forEach((conf) -> {
.getResultList() conf.setForecastSummaries(mappedSummaries.get(conf.getForecastConfigurationId()));
); });
if(config.getForecastSummaries() != null && !config.getForecastSummaries().isEmpty()) return configurations;
{
filteredConfigs.add(config);
}
}
return filteredConfigs;
} }
/** /**
......
...@@ -42,6 +42,7 @@ import javax.xml.bind.annotation.XmlRootElement; ...@@ -42,6 +42,7 @@ import javax.xml.bind.annotation.XmlRootElement;
@NamedQuery(name = "ForecastSummary.findAll", query = "SELECT f FROM ForecastSummary f"), @NamedQuery(name = "ForecastSummary.findAll", query = "SELECT f FROM ForecastSummary f"),
@NamedQuery(name = "ForecastSummary.findByForecastConfigurationId", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId = :forecastConfigurationId"), @NamedQuery(name = "ForecastSummary.findByForecastConfigurationId", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId = :forecastConfigurationId"),
@NamedQuery(name = "ForecastSummary.findByForecastConfigurationIds", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId IN(:forecastConfigurationIds)"), @NamedQuery(name = "ForecastSummary.findByForecastConfigurationIds", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId IN(:forecastConfigurationIds)"),
@NamedQuery(name = "ForecastSummary.findByOrganizationId", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.forecastConfigurationId IN(SELECT f1.forecastConfigurationId FROM ForecastConfiguration f1 WHERE f1.vipsLogicUserId IN (SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId=:organizationId))"),
@NamedQuery(name = "ForecastSummary.findBySummaryForDate", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.summaryForDate = :summaryForDate"), @NamedQuery(name = "ForecastSummary.findBySummaryForDate", query = "SELECT f FROM ForecastSummary f WHERE f.forecastSummaryPK.summaryForDate = :summaryForDate"),
@NamedQuery(name = "ForecastSummary.findBySummaryCreatedTime", query = "SELECT f FROM ForecastSummary f WHERE f.summaryCreatedTime = :summaryCreatedTime"), @NamedQuery(name = "ForecastSummary.findBySummaryCreatedTime", query = "SELECT f FROM ForecastSummary f WHERE f.summaryCreatedTime = :summaryCreatedTime"),
@NamedQuery(name = "ForecastSummary.findByWarningStatus", query = "SELECT f FROM ForecastSummary f WHERE f.warningStatus = :warningStatus")}) @NamedQuery(name = "ForecastSummary.findByWarningStatus", query = "SELECT f FROM ForecastSummary f WHERE f.warningStatus = :warningStatus")})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment