1
1
package com .techolution .mauritius .smartwater .supply .service ;
2
2
3
- import java . sql . Date ;
3
+
4
4
import java .text .SimpleDateFormat ;
5
5
import java .time .Instant ;
6
6
import java .util .ArrayList ;
7
7
import java .util .Calendar ;
8
+ import java .util .Collection ;
9
+ import java .util .Date ;
10
+ import java .util .HashMap ;
8
11
import java .util .List ;
9
12
import java .util .Map ;
10
13
import java .util .TimeZone ;
23
26
24
27
import com .techolution .mauritius .smartwater .supply .InfluxProperties ;
25
28
import com .techolution .mauritius .smartwater .supply .domain .ConsumptionLeakage ;
29
+ import com .techolution .mauritius .smartwater .supply .domain .DailyWaterSupplyData ;
26
30
import com .techolution .mauritius .smartwater .supply .domain .LeakageData ;
27
31
import com .techolution .mauritius .smartwater .supply .domain .MeterConnection ;
28
32
import com .techolution .mauritius .smartwater .supply .domain .MeterTrendData ;
@@ -58,6 +62,8 @@ public class SupplyAnalyticsService {
58
62
59
63
private static String SERIES_NAME_CONSUMERLEAKAGE ="consumerleakage" ;
60
64
private static String SERIES_NAME_NETWORKLEAKAGE ="networkleakage" ;
65
+ private static String SERIES_NAME_CONSUMERLEAKAGE_ON ="consumerleakageontime" ;
66
+ private static String SERIES_NAME_CONSUMERLEAKAGE_OFF ="consumerleakageofftime" ;
61
67
62
68
63
69
@@ -104,6 +110,16 @@ public List<MeterTrendData> getConnectionsAboveDailyBaseline(){
104
110
105
111
}
106
112
113
+ Map <Long , MeterConnection > connMap =getConnectionsMap ();
114
+
115
+ retList .forEach (trendData -> {
116
+
117
+ MeterConnection connection =connMap .get (new Long (trendData .getMeterId ()));
118
+ if (connection !=null ){
119
+ trendData .setLocation (connection .getHouse_namenum ());
120
+ }
121
+ });
122
+
107
123
108
124
log .info ("Existing SupplyAnalyticsService.getConnectionsAboveDailyBaseline" );
109
125
return retList ;
@@ -170,6 +186,15 @@ public List<MeterTrendData> getConnectionsBelowDailyBaseline(){
170
186
171
187
}
172
188
189
+ Map <Long , MeterConnection > connMap =getConnectionsMap ();
190
+
191
+ retList .forEach (trendData -> {
192
+
193
+ MeterConnection connection =connMap .get (new Long (trendData .getMeterId ()));
194
+ if (connection !=null ){
195
+ trendData .setLocation (connection .getHouse_namenum ());
196
+ }
197
+ });
173
198
174
199
log .info ("Existing SupplyAnalyticsService.getConnectionsBelowDailyBaseline" );
175
200
return retList ;
@@ -458,7 +483,7 @@ public LeakageData getCurrentDayLeakageData(){
458
483
});
459
484
}
460
485
461
-
486
+ influxDB . close ();
462
487
log .info ("Exiting SupplyAnalyticsService.getStats" );
463
488
return leakageData ;
464
489
@@ -504,7 +529,7 @@ public List<ConsumptionLeakage> getCurrentDayConsumerLeakage(){
504
529
List <List <Object >> values =series .getValues ();
505
530
if (values !=null && values .size ()>0 ){
506
531
List <Object > value =values .get (0 );
507
- leakage .setLeakage ( (Double )value .get (1 ));
532
+ leakage .setLeakageVolume ( (Double )value .get (1 ));
508
533
509
534
String time =(String )value .get (0 );
510
535
Instant instant =Instant .parse (time );
@@ -516,11 +541,133 @@ public List<ConsumptionLeakage> getCurrentDayConsumerLeakage(){
516
541
517
542
});
518
543
}
519
-
544
+ influxDB . close ();
520
545
521
546
log .info ("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakage" );
522
547
return resultList ;
523
548
549
+ }
550
+
551
+ public List <ConsumptionLeakage > getCurrentDayConsumerLeakageDetails (){
552
+
553
+ log .info ("Entering SupplyAnalyticsService.getCurrentDayConsumerLeakageDetails" );
554
+
555
+ // SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
556
+ List <ConsumptionLeakage > outputlist = new ArrayList <ConsumptionLeakage >();
557
+
558
+ //TODO Add date specific filtering again
559
+ /*String startTime=myFormat.format(data.getStartDate());
560
+ String endTime=myFormat.format(data.getEndDate());
561
+ Calendar currentCal=Calendar.getInstance();
562
+ Date currentTime=currentCal.getTime();
563
+ if(data.getEndDate().after(currentTime)){
564
+
565
+ currentCal.add(Calendar.DATE, -1);
566
+ endTime=myFormat.format(currentCal.getTime());
567
+ }*/
568
+
569
+ // 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";
570
+ String query = "select * from " +SERIES_NAME_CONSUMERLEAKAGE_ON +" , " +SERIES_NAME_CONSUMERLEAKAGE_OFF +" order by time asc" ;
571
+
572
+
573
+ SimpleDateFormat dateFormat =new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss" );
574
+ dateFormat .setTimeZone (TimeZone .getTimeZone (influxProperties .getDatatimezone ()));
575
+ InfluxDB influxDB = InfluxDBFactory .connect (influxProperties .getUrl (),influxProperties .getUsername (),influxProperties .getPassword ());
576
+ long startStarttime =System .currentTimeMillis ();
577
+ QueryResult queryResult = influxDB .query (new Query (query , influxProperties .getDbname ()));
578
+ long endtime =System .currentTimeMillis ();
579
+ log .debug ("Time After getCurrentDayConsumerLeakageDetails query execution:" +endtime );
580
+ log .debug ("Time Taken for getCurrentDayConsumerLeakageDetails query execution:" +(endtime -startStarttime ));
581
+ log .debug ("Query is:" +query );
582
+
583
+ List <Result > resultlist =queryResult .getResults ();
584
+
585
+ Map <String ,ConsumptionLeakage > outputmap =new HashMap <String ,ConsumptionLeakage >();
586
+ if (resultlist != null && resultlist .size ()>0 ){
587
+
588
+ Result result =resultlist .get (0 );
589
+ List <Series > serieslist =result .getSeries ();
590
+ serieslist .forEach (series -> {
591
+
592
+ String name =series .getName ();
593
+
594
+ List <List <Object >> valuelist =series .getValues ();
595
+ valuelist .parallelStream ().forEach ( values -> {
596
+
597
+ String timestamp =(String )values .get (0 );
598
+ String meter_id =(String )values .get (1 );
599
+
600
+ Instant instant =Instant .parse (timestamp );
601
+ Date dt =Date .from (instant );
602
+
603
+
604
+
605
+ ConsumptionLeakage leakageData =outputmap .get (meter_id );
606
+ if (leakageData == null ){
607
+ leakageData =new ConsumptionLeakage ();
608
+ }
609
+ leakageData .setMeterId (meter_id );
610
+
611
+ if (SERIES_NAME_CONSUMERLEAKAGE_ON .equalsIgnoreCase (name )){
612
+ leakageData .setStartTime (dateFormat .format (dt ));
613
+ }else {
614
+ leakageData .setEndTime (dateFormat .format (dt ));
615
+ }
616
+
617
+ outputmap .put (meter_id , leakageData );
618
+
619
+
620
+ });
621
+ });
622
+
623
+ }
624
+
625
+
626
+ //TODO Add time base filter. It also assumes that data will be here whenever data is there in consumerleakageontime and consumerleakageofftime
627
+ String leakagevalquery ="select sum(value) from consumerleakage group by meter_id " ;
628
+ long leakagevalqueryresultStarttime =System .currentTimeMillis ();
629
+ QueryResult leakagevalqueryresult = influxDB .query (new Query (leakagevalquery , influxProperties .getDbname ()));
630
+ long leakagevalqueryresultendtime =System .currentTimeMillis ();
631
+ log .debug ("Time Taken for leakagevalquery query execution:" +(leakagevalqueryresultendtime -leakagevalqueryresultStarttime ));
632
+ List <Result > leakageValResult =leakagevalqueryresult .getResults ();
633
+ if (leakageValResult != null && leakageValResult .size ()>0 ){
634
+ Result result =leakageValResult .get (0 );
635
+
636
+ List <Series > serieslist =result .getSeries ();
637
+
638
+ serieslist .forEach (series -> {
639
+ String meterId =series .getTags ().get ("meter_id" );
640
+
641
+ List <List <Object >> valuelist =series .getValues ();
642
+ if (valuelist !=null && valuelist .size ()>0 ){
643
+ List <Object > value =valuelist .get (0 );
644
+ ConsumptionLeakage leakage =outputmap .get (meterId );
645
+ leakage .setLeakageVolume ((Double )value .get (1 ));
646
+ }
647
+
648
+ });
649
+ }
650
+
651
+
652
+ /*Collection<DailyWaterSupplyData> ouput=outputmap.values();
653
+ List<DailyWaterSupplyData> outputlist=new ArrayList<DailyWaterSupplyData>();
654
+ outputlist.addAll(ouput);*/
655
+
656
+ Map <Long , MeterConnection > connmap =getConnectionsMap ();
657
+ Collection <ConsumptionLeakage > ouput =outputmap .values ();
658
+ outputlist .addAll (ouput );
659
+ outputlist .forEach (consumptionleakage -> {
660
+ Long meterId =new Long (consumptionleakage .getMeterId ());
661
+ MeterConnection meterconn = connmap .get (meterId );
662
+ if (meterconn !=null ){
663
+ consumptionleakage .setLocation (meterconn .getHouse_namenum ());
664
+ }
665
+ });
666
+
667
+ influxDB .close ();
668
+ log .info ("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakageDetails" );
669
+ return outputlist ;
670
+
524
671
}
525
672
526
673
}
0 commit comments