Skip to content

Commit 1ff5df8

Browse files
Changes for leakage detection
1 parent 34182fb commit 1ff5df8

File tree

6 files changed

+1177
-4
lines changed

6 files changed

+1177
-4
lines changed

DataSimulator/src/com/techolution/mauritius/data/simulator/service/FlowDataSimiulator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void startProcess(int meterId, String startTime, String endTime, long sle
7272
}
7373
}
7474

75-
String query = "select last(value) from meterreadingvalues where time <='"+startTime+"' and meter_id='"+meterId+"'";// now() - 10d and meter_id = '124' group by time(1d) fill(0)
75+
String query = "select last(value) from meterreadingvalues where time <'"+startTime+"' and meter_id='"+meterId+"'";// now() - 10d and meter_id = '124' group by time(1d) fill(0)
7676
System.out.println("Query is:"+query);
7777

7878

@@ -103,7 +103,7 @@ public void startProcess(int meterId, String startTime, String endTime, long sle
103103
try {
104104
Telemetry telemetry=new Telemetry();
105105
telemetry.setDate(startDate);
106-
double flow=ThreadLocalRandom.current().nextDouble(200.25, 300.85);
106+
double flow=ThreadLocalRandom.current().nextDouble(1.00, 2.00);
107107
telemetry.setFlow(flow);
108108
baseReadingValue=baseReadingValue+flow;
109109
telemetry.setReading(baseReadingValue);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.techolution.mauritius.smartwater.supply.controller;
2+
3+
import java.util.List;
4+
5+
import org.apache.commons.logging.Log;
6+
import org.apache.commons.logging.LogFactory;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.web.bind.annotation.CrossOrigin;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RequestMethod;
11+
import org.springframework.web.bind.annotation.ResponseBody;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
import com.techolution.mauritius.smartwater.supply.domain.ConsumptionLeakage;
15+
import com.techolution.mauritius.smartwater.supply.domain.LeakageData;
16+
import com.techolution.mauritius.smartwater.supply.service.SupplyAnalyticsService;
17+
18+
@CrossOrigin(origins = {"*"})
19+
@RestController
20+
@RequestMapping(value="/leakage")
21+
22+
public class LeakageDataController {
23+
24+
private Log log = LogFactory.getLog(LeakageDataController.class);
25+
26+
@Autowired
27+
SupplyAnalyticsService analyticService;
28+
29+
@RequestMapping(method=RequestMethod.GET,value="/daily/metrics")
30+
public @ResponseBody LeakageData getDailyLeakageStats()
31+
{
32+
log.info("Entering LeakageDataController.getDailyLeakageStats");
33+
LeakageData resultdata=analyticService.getCurrentDayLeakageData();
34+
log.info("Exiting LeakageDataController.getDailyLeakageStats");
35+
return resultdata;
36+
}
37+
@RequestMapping(method=RequestMethod.GET,value="/daily/consumerleakage")
38+
public @ResponseBody List<ConsumptionLeakage> getDailyConsumerLeakageStats()
39+
{
40+
log.info("Entering LeakageDataController.getDailyConsumerLeakageStats");
41+
List<ConsumptionLeakage> resultList=analyticService.getCurrentDayConsumerLeakage();
42+
log.info("Exiting LeakageDataController.getDailyConsumerLeakageStats");
43+
return resultList;
44+
}
45+
46+
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.techolution.mauritius.smartwater.supply.domain;
2+
3+
import java.io.Serializable;
4+
import java.util.Date;
5+
6+
public class ConsumptionLeakage implements Serializable {
7+
8+
/**
9+
*
10+
*/
11+
private static final long serialVersionUID = 1L;
12+
private String meterId;
13+
private Date date;
14+
private double leakage;
15+
16+
public String getMeterId() {
17+
return meterId;
18+
}
19+
public void setMeterId(String meterId) {
20+
this.meterId = meterId;
21+
}
22+
public Date getDate() {
23+
return date;
24+
}
25+
public void setDate(Date date) {
26+
this.date = date;
27+
}
28+
public double getLeakage() {
29+
return leakage;
30+
}
31+
public void setLeakage(double leakage) {
32+
this.leakage = leakage;
33+
}
34+
35+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.techolution.mauritius.smartwater.supply.domain;
2+
3+
import java.io.Serializable;
4+
import java.util.Date;
5+
6+
public class LeakageData implements Serializable {
7+
8+
private Date metricsDate;
9+
10+
private double consumptionLeakage;
11+
12+
private double networkLeakage;
13+
14+
public Date getMetricsDate() {
15+
return metricsDate;
16+
}
17+
18+
public void setMetricsDate(Date metricsDate) {
19+
this.metricsDate = metricsDate;
20+
}
21+
22+
public double getConsumptionLeakage() {
23+
return consumptionLeakage;
24+
}
25+
26+
public void setConsumptionLeakage(double consumptionLeakage) {
27+
this.consumptionLeakage = consumptionLeakage;
28+
}
29+
30+
public double getNetworkLeakage() {
31+
return networkLeakage;
32+
}
33+
34+
public void setNetworkLeakage(double networkLeakage) {
35+
this.networkLeakage = networkLeakage;
36+
}
37+
38+
39+
}

supplydataservice/src/main/java/com/techolution/mauritius/smartwater/supply/service/SupplyAnalyticsService.java

Lines changed: 125 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.techolution.mauritius.smartwater.supply.service;
22

3+
import java.sql.Date;
34
import java.text.SimpleDateFormat;
5+
import java.time.Instant;
46
import java.util.ArrayList;
57
import java.util.Calendar;
68
import java.util.List;
@@ -20,6 +22,8 @@
2022
import org.springframework.stereotype.Component;
2123

2224
import com.techolution.mauritius.smartwater.supply.InfluxProperties;
25+
import com.techolution.mauritius.smartwater.supply.domain.ConsumptionLeakage;
26+
import com.techolution.mauritius.smartwater.supply.domain.LeakageData;
2327
import com.techolution.mauritius.smartwater.supply.domain.MeterConnection;
2428
import com.techolution.mauritius.smartwater.supply.domain.MeterTrendData;
2529
import com.techolution.mauritius.smartwater.supply.domain.WaterSupplyDailyConnectionStats;
@@ -52,6 +56,8 @@ public class SupplyAnalyticsService {
5256
private static String DOWN="DOWN";
5357
private static String DEFAULT_LOCATION="TEST";
5458

59+
private static String SERIES_NAME_CONSUMERLEAKAGE="consumerleakage";
60+
private static String SERIES_NAME_NETWORKLEAKAGE="networkleakage";
5561

5662

5763

@@ -290,7 +296,7 @@ public Map <Long, MeterConnection> getAllConnections(){
290296

291297
public WaterSupplyDailyConnectionStats getStats(){
292298

293-
log.info("Entering SupplyDataService.getStats");
299+
log.info("Entering SupplyAnalyticsService.getStats");
294300

295301
WaterSupplyDailyConnectionStats connectionStats=new WaterSupplyDailyConnectionStats();
296302
getConnectionsMap();
@@ -396,8 +402,125 @@ public WaterSupplyDailyConnectionStats getStats(){
396402

397403

398404
influxDB.close();
399-
log.info("Exiting SupplyDataService.getStats");
405+
log.info("Exiting SupplyAnalyticsService.getStats");
400406
return connectionStats;
401407
}
408+
409+
public LeakageData getCurrentDayLeakageData(){
410+
411+
log.info("Entering SupplyAnalyticsService.getStats");
412+
413+
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
414+
415+
Calendar start=Calendar.getInstance(TimeZone.getTimeZone(influxProperties.getDatatimezone()));
416+
String startTime=myFormat.format(start.getTime());
417+
418+
start.add(Calendar.DATE,1);
419+
String endTime=myFormat.format(start.getTime());
420+
421+
String leakageval="select sum(value) from networkleakage,consumerleakage where time >='"+startTime+"' and time <'"+endTime+"' ";
422+
423+
424+
InfluxDB influxDB = InfluxDBFactory.connect(influxProperties.getUrl(),influxProperties.getUsername(),influxProperties.getPassword());
425+
long startStarttime=System.currentTimeMillis();
426+
QueryResult queryResult = influxDB.query(new Query(leakageval, influxProperties.getDbname()));
427+
long endtime=System.currentTimeMillis();
428+
log.debug("Time After countOfSupply query execution:"+endtime);
429+
log.debug("Time Taken for query execution:"+(endtime-startStarttime));
430+
431+
LeakageData leakageData=new LeakageData();
432+
// leakageData.setMetricsDate((Calendar.getInstance(influxProperties.getDatatimezone())));
433+
434+
List<Result> results=queryResult.getResults();
435+
if(results!=null && results.size()>0){
436+
Result result=results.get(0);
437+
List<Series> serieslist=result.getSeries();
438+
serieslist.forEach(series -> {
439+
String seriesName= series.getName();
440+
List<List<Object>> values=series.getValues();
441+
if(values !=null && values.size()>0){
442+
List<Object> value=values.get(0);
443+
if(SERIES_NAME_CONSUMERLEAKAGE.equalsIgnoreCase(seriesName)){
444+
leakageData.setConsumptionLeakage((Double)value.get(1));
445+
String time=(String)value.get(0);
446+
Instant instant=Instant.parse(time);
447+
448+
leakageData.setMetricsDate(Date.from(instant));
449+
}else{
450+
leakageData.setNetworkLeakage((Double)value.get(1));
451+
String time=(String)value.get(0);
452+
Instant instant=Instant.parse(time);
453+
454+
leakageData.setMetricsDate(Date.from(instant));
455+
}
456+
}
457+
458+
});
459+
}
460+
461+
462+
log.info("Exiting SupplyAnalyticsService.getStats");
463+
return leakageData;
464+
465+
}
466+
467+
468+
public List<ConsumptionLeakage> getCurrentDayConsumerLeakage(){
469+
470+
log.info("Entering SupplyAnalyticsService.getCurrentDayConsumerLeakage");
471+
472+
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
473+
474+
Calendar start=Calendar.getInstance(TimeZone.getTimeZone(influxProperties.getDatatimezone()));
475+
String startTime=myFormat.format(start.getTime());
476+
477+
start.add(Calendar.DATE,1);
478+
String endTime=myFormat.format(start.getTime());
479+
480+
String leakageval="select sum(value) from consumerleakage where time >='"+startTime+"' and time <'"+endTime+"' group by meter_id ";
481+
482+
483+
InfluxDB influxDB = InfluxDBFactory.connect(influxProperties.getUrl(),influxProperties.getUsername(),influxProperties.getPassword());
484+
long startStarttime=System.currentTimeMillis();
485+
QueryResult queryResult = influxDB.query(new Query(leakageval, influxProperties.getDbname()));
486+
long endtime=System.currentTimeMillis();
487+
log.debug("Time After countOfSupply query execution:"+endtime);
488+
log.debug("Time Taken for query execution:"+(endtime-startStarttime));
489+
490+
491+
List<ConsumptionLeakage> resultList=new ArrayList<ConsumptionLeakage>();
492+
493+
// leakageData.setMetricsDate((Calendar.getInstance(influxProperties.getDatatimezone())));
494+
495+
List<Result> results=queryResult.getResults();
496+
if(results!=null && results.size()>0){
497+
Result result=results.get(0);
498+
List<Series> serieslist=result.getSeries();
499+
serieslist.forEach(series -> {
500+
ConsumptionLeakage leakage= new ConsumptionLeakage();
501+
502+
String meterId=series.getTags().get(METER_ID);
503+
leakage.setMeterId(meterId);
504+
List<List<Object>> values=series.getValues();
505+
if(values !=null && values.size()>0){
506+
List<Object> value=values.get(0);
507+
leakage.setLeakage( (Double)value.get(1));
508+
509+
String time=(String)value.get(0);
510+
Instant instant=Instant.parse(time);
511+
leakage.setDate(Date.from(instant));
512+
513+
514+
}
515+
resultList.add(leakage);
516+
517+
});
518+
}
519+
520+
521+
log.info("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakage");
522+
return resultList;
523+
524+
}
402525

403526
}

0 commit comments

Comments
 (0)