diff --git a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/controller/LeakageDataController.java b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/controller/LeakageDataController.java index 44657e1..12ad644 100644 --- a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/controller/LeakageDataController.java +++ b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/controller/LeakageDataController.java @@ -38,7 +38,7 @@ public class LeakageDataController { public @ResponseBody List getDailyConsumerLeakageStats() { log.info("Entering LeakageDataController.getDailyConsumerLeakageStats"); - List resultList=analyticService.getCurrentDayConsumerLeakage(); + List resultList=analyticService.getCurrentDayConsumerLeakageDetails(); log.info("Exiting LeakageDataController.getDailyConsumerLeakageStats"); return resultList; } diff --git a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/domain/ConsumptionLeakage.java b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/domain/ConsumptionLeakage.java index 5309531..7fc7ffc 100644 --- a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/domain/ConsumptionLeakage.java +++ b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/domain/ConsumptionLeakage.java @@ -11,8 +11,31 @@ public class ConsumptionLeakage implements Serializable { private static final long serialVersionUID = 1L; private String meterId; private Date date; - private double leakage; + private double leakageVolume; + private String location; + private String startTime; + private String endTime; + + + public String getLocation() { + return location; + } + public void setLocation(String location) { + this.location = location; + } + public String getStartTime() { + return startTime; + } + public void setStartTime(String startTime) { + this.startTime = startTime; + } + public String getEndTime() { + return endTime; + } + public void setEndTime(String endTime) { + this.endTime = endTime; + } public String getMeterId() { return meterId; } @@ -25,11 +48,12 @@ public Date getDate() { public void setDate(Date date) { this.date = date; } - public double getLeakage() { - return leakage; + public double getLeakageVolume() { + return leakageVolume; } - public void setLeakage(double leakage) { - this.leakage = leakage; + public void setLeakageVolume(double leakageVolume) { + this.leakageVolume = leakageVolume; } + } diff --git a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/service/SupplyAnalyticsService.java b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/service/SupplyAnalyticsService.java index 465b033..bc52092 100644 --- a/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/service/SupplyAnalyticsService.java +++ b/supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/service/SupplyAnalyticsService.java @@ -1,10 +1,13 @@ package com.techolution.mauritius.smartwater.supply.service; -import java.sql.Date; + import java.text.SimpleDateFormat; import java.time.Instant; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TimeZone; @@ -23,6 +26,7 @@ import com.techolution.mauritius.smartwater.supply.InfluxProperties; import com.techolution.mauritius.smartwater.supply.domain.ConsumptionLeakage; +import com.techolution.mauritius.smartwater.supply.domain.DailyWaterSupplyData; import com.techolution.mauritius.smartwater.supply.domain.LeakageData; import com.techolution.mauritius.smartwater.supply.domain.MeterConnection; import com.techolution.mauritius.smartwater.supply.domain.MeterTrendData; @@ -58,6 +62,8 @@ public class SupplyAnalyticsService { private static String SERIES_NAME_CONSUMERLEAKAGE="consumerleakage"; private static String SERIES_NAME_NETWORKLEAKAGE="networkleakage"; + private static String SERIES_NAME_CONSUMERLEAKAGE_ON="consumerleakageontime"; + private static String SERIES_NAME_CONSUMERLEAKAGE_OFF="consumerleakageofftime"; @@ -104,6 +110,16 @@ public List getConnectionsAboveDailyBaseline(){ } + Map connMap=getConnectionsMap(); + + retList.forEach(trendData -> { + + MeterConnection connection=connMap.get(new Long(trendData.getMeterId())); + if(connection!=null){ + trendData.setLocation(connection.getHouse_namenum()); + } + }); + log.info("Existing SupplyAnalyticsService.getConnectionsAboveDailyBaseline"); return retList; @@ -170,6 +186,15 @@ public List getConnectionsBelowDailyBaseline(){ } + Map connMap=getConnectionsMap(); + + retList.forEach(trendData -> { + + MeterConnection connection=connMap.get(new Long(trendData.getMeterId())); + if(connection!=null){ + trendData.setLocation(connection.getHouse_namenum()); + } + }); log.info("Existing SupplyAnalyticsService.getConnectionsBelowDailyBaseline"); return retList; @@ -458,7 +483,7 @@ public LeakageData getCurrentDayLeakageData(){ }); } - + influxDB.close(); log.info("Exiting SupplyAnalyticsService.getStats"); return leakageData; @@ -504,7 +529,7 @@ public List getCurrentDayConsumerLeakage(){ List> values=series.getValues(); if(values !=null && values.size()>0){ List value=values.get(0); - leakage.setLeakage( (Double)value.get(1)); + leakage.setLeakageVolume( (Double)value.get(1)); String time=(String)value.get(0); Instant instant=Instant.parse(time); @@ -516,11 +541,133 @@ public List getCurrentDayConsumerLeakage(){ }); } - + influxDB.close(); log.info("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakage"); return resultList; +} + + public List getCurrentDayConsumerLeakageDetails(){ + + log.info("Entering SupplyAnalyticsService.getCurrentDayConsumerLeakageDetails"); + + // SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); + List outputlist= new ArrayList(); + + //TODO Add date specific filtering again + /*String startTime=myFormat.format(data.getStartDate()); + String endTime=myFormat.format(data.getEndDate()); + Calendar currentCal=Calendar.getInstance(); + Date currentTime=currentCal.getTime(); + if(data.getEndDate().after(currentTime)){ + + currentCal.add(Calendar.DATE, -1); + endTime=myFormat.format(currentCal.getTime()); + }*/ + + // String query = "select time,value from "+SERIES_NAME_CONSUMERLEAKAGE_ON+" , "+SERIES_NAME_CONSUMERLEAKAGE_OFF+ " where meter_id='"+data.getMeterId()+"' and time >= '"+startTime+"' and time <='"+endTime+"' order by time asc"; + String query = "select * from "+SERIES_NAME_CONSUMERLEAKAGE_ON+" , "+SERIES_NAME_CONSUMERLEAKAGE_OFF+" order by time asc"; + + + SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dateFormat.setTimeZone(TimeZone.getTimeZone(influxProperties.getDatatimezone())); + InfluxDB influxDB = InfluxDBFactory.connect(influxProperties.getUrl(),influxProperties.getUsername(),influxProperties.getPassword()); + long startStarttime=System.currentTimeMillis(); + QueryResult queryResult = influxDB.query(new Query(query, influxProperties.getDbname())); + long endtime=System.currentTimeMillis(); + log.debug("Time After getCurrentDayConsumerLeakageDetails query execution:"+endtime); + log.debug("Time Taken for getCurrentDayConsumerLeakageDetails query execution:"+(endtime-startStarttime)); + log.debug("Query is:"+query); + + List resultlist=queryResult.getResults(); + + Map outputmap=new HashMap(); + if(resultlist != null && resultlist.size()>0){ + + Result result=resultlist.get(0); + List serieslist=result.getSeries(); + serieslist.forEach(series -> { + + String name=series.getName(); + + List> valuelist=series.getValues(); + valuelist.parallelStream().forEach( values -> { + + String timestamp=(String)values.get(0); + String meter_id=(String)values.get(1); + + Instant instant=Instant.parse(timestamp); + Date dt=Date.from(instant); + + + + ConsumptionLeakage leakageData=outputmap.get(meter_id); + if(leakageData == null){ + leakageData =new ConsumptionLeakage(); + } + leakageData.setMeterId(meter_id); + + if(SERIES_NAME_CONSUMERLEAKAGE_ON.equalsIgnoreCase(name)){ + leakageData.setStartTime(dateFormat.format(dt)); + }else{ + leakageData.setEndTime(dateFormat.format(dt)); + } + + outputmap.put(meter_id, leakageData); + + + }); + }); + + } + + + //TODO Add time base filter. It also assumes that data will be here whenever data is there in consumerleakageontime and consumerleakageofftime + String leakagevalquery="select sum(value) from consumerleakage group by meter_id "; + long leakagevalqueryresultStarttime=System.currentTimeMillis(); + QueryResult leakagevalqueryresult = influxDB.query(new Query(leakagevalquery, influxProperties.getDbname())); + long leakagevalqueryresultendtime=System.currentTimeMillis(); + log.debug("Time Taken for leakagevalquery query execution:"+(leakagevalqueryresultendtime-leakagevalqueryresultStarttime)); + List leakageValResult=leakagevalqueryresult.getResults(); + if(leakageValResult != null && leakageValResult.size()>0){ + Result result=leakageValResult.get(0); + + List serieslist=result.getSeries(); + + serieslist.forEach(series -> { + String meterId=series.getTags().get("meter_id"); + + List> valuelist=series.getValues(); + if(valuelist !=null && valuelist.size()>0){ + List value=valuelist.get(0); + ConsumptionLeakage leakage=outputmap.get(meterId); + leakage.setLeakageVolume((Double)value.get(1)); + } + + }); + } + + + /*Collection ouput=outputmap.values(); + List outputlist=new ArrayList(); + outputlist.addAll(ouput);*/ + + Map connmap=getConnectionsMap(); + Collection ouput=outputmap.values(); + outputlist.addAll(ouput); + outputlist.forEach(consumptionleakage -> { + Long meterId=new Long(consumptionleakage.getMeterId()); + MeterConnection meterconn= connmap.get(meterId); + if(meterconn!=null){ + consumptionleakage.setLocation(meterconn.getHouse_namenum()); + } + }); + + influxDB.close(); + log.info("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakageDetails"); + return outputlist; + } }