From f13d4efcdb2bb3072b9243ee022a5eb27be87a5f Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Fri, 25 Mar 2022 10:59:52 +0100
Subject: [PATCH] Implemented today's date into the sql statements

---
 .../java/com/application/DB/Constants.java    |  24 +++++++++
 src/main/java/com/application/DB/DB.java      |  49 +++++++++---------
 .../com/application/DB/Constants.class        | Bin 0 -> 1028 bytes
 target/classes/com/application/DB/DB.class    | Bin 10226 -> 10348 bytes
 4 files changed, 49 insertions(+), 24 deletions(-)
 create mode 100644 target/classes/com/application/DB/Constants.class

diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index ae70439..65b1741 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -1,14 +1,38 @@
 package com.application.DB;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.Date;
+
 /**
  * This class contains constants to be used related to database activities
  */
 public final class Constants {
 
+    // Format for today's date
+    static DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
     private Constants() {
         // Empty constructor
     }
 
+    // Today's date
+    public static final String TODAYS_DATE = format.format(LocalDateTime.now());
+
+    // Database ID/name
     public static final String PROJECT_ID = "sf-drying-optimization";
 
+    // Location Valasen
+    public static final int LOCATION_ID = 124;
+    public static final String TABLE_NAME_VALMATICS = "int_dk_valmaticsdryingbatches_v2";
+    public static final String TABLE_NAME_KWH = "int_sd_winccsensordata";
+
+    // Location Arjang
+    /*
+    public static final int LOCATION_ID = 174;
+    public static final String TABLE_NAME_VALMATICS = "int_dk_valmaticsdryingbatches";
+    public static final String TABLE_NAME_KWH = "int_sd_swappconsensordata";
+     */
+
 }
diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java
index b425377..eb340cd 100644
--- a/src/main/java/com/application/DB/DB.java
+++ b/src/main/java/com/application/DB/DB.java
@@ -158,7 +158,7 @@ public class DB {
             // Preparing a query statement
             /*
             final String sqlStatement = "SELECT DISTINCT TimeStamp, VariantValue " +
-                    "FROM sf-drying-optimization.124.int_sd_winccsensordata " +
+                    "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_KWH + "` " +
                     "WHERE TimeStamp BETWEEN " + '"'+ entry.getKey() + '"' +
                     " AND " + '"' + entry.getValue() + '"' +
                     " ORDER BY TimeStamp ASC";
@@ -168,7 +168,7 @@ public class DB {
             // Preparing a query statement
             // Query statement 124 Valåsen
             final String sqlStatement = "SELECT `TimeStamp`, `VariantValue` " +
-                    "FROM `sf-drying-optimization.124.int_sd_winccsensordata` " +
+                    "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_KWH + "` " +
                     "WHERE TimeStamp BETWEEN " + '"'+ entry.getKey() + '"' +
                     " AND " + '"' + entry.getValue() + '"' +
                     " AND ValueID = 51" +
@@ -178,12 +178,13 @@ public class DB {
             /*
             // Query statement 174 Årjang
             final String sqlStatement =
-                    "SELECT Timestamp, RealValue FROM `sf-drying-optimization.174.int_sd_swappconsensordata` " +
-                            "WHERE TimeStamp BETWEEN " + '"'+ entry.getKey() + '"' +
-                            " AND " + '"' + entry.getValue() + '"' +
-                            "AND ValueID = 19 " +
-                            "AND RealValue <> 0 " +
-                            "ORDER BY TimeStamp ASC";
+                    "SELECT Timestamp, RealValue
+                    "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_KWH + "` " +
+                    "WHERE TimeStamp BETWEEN " + '"'+ entry.getKey() + '"' +
+                    " AND " + '"' + entry.getValue() + '"' +
+                    "AND ValueID = 19 " +
+                    "AND RealValue <> 0 " +
+                    "ORDER BY TimeStamp ASC";
 
              */
 
@@ -210,16 +211,12 @@ public class DB {
                 // Riktig format, men i string
                 String formatedTimeStamp = getDateFormat().format(timeStamp);
 
-/*
-                // Checks for negative values and unresonable large values
-                if(variantValue > 0){ //&& variantValue < 5000000){
+                // Checks for negative values
+                if(variantValue > 0) {
                     // Adding the data to a list in order to sort through later
                     data.put(formatedTimeStamp, variantValue);
                 }
 
- */
-                data.put(formatedTimeStamp, variantValue);
-
                 //System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\t\t\tBaseline: %s\n",formatedTimeStamp,variantValue,baseline);
                 // Checks if the data is empty
                 }
@@ -243,7 +240,6 @@ public class DB {
             System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\n",entry.getKey(),entry.getValue());
         }
 
-
         return sortedFinalResults;
     }
 
@@ -280,21 +276,26 @@ public class DB {
 
         // Sqlstatement for Valåsen(124)
         final String sqlStatement =
-                        "SELECT MAX(Name) as DryingSchedule, MAX(KilnName) as Kiln_name, DryingStarted, Max(CalculatedStop) as CalculatedStop\n" +
-                        "FROM `sf-drying-optimization.124.int_dk_valmaticsdryingbatches_v2` \n" +
-                        "WHERE KilnName = 5 \n" +
-                        "AND DATE(DryingStarted) BETWEEN \"1990-08-17\" AND \"2022-08-17\"\n" +
-                        "AND DATE(CalculatedStop) BETWEEN \"1990-08-17\" AND \"2022-08-17\"\n" +
-                        "AND DATE(CalculatedStart) BETWEEN \"1990-08-17\" AND \"2022-08-17\"\n" +
-                        "Group by DryingStarted\n" +
-                        "Order by DryingStarted ASC";
+                        "SELECT MAX(Name) as DryingSchedule, MAX(KilnName) as Kiln_name, DryingStarted, Max(CalculatedStop) as CalculatedStop " +
+                        "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_VALMATICS + "` " +
+                        "WHERE KilnName = 5 " +
+                        //"AND DATE(DryingStarted) BETWEEN \"1990-08-17\" AND \"2022-08-17\" " +
+                        //"AND DATE(CalculatedStop) BETWEEN \"1990-08-17\" AND \"2022-08-17\" " +
+                        //"AND DATE(CalculatedStart) BETWEEN \"1990-08-17\" AND \"2022-08-17\" " +
+                        "AND DryingStarted BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" " +
+                        "AND CalculatedStop BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" " +
+                        "AND CalculatedStart BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" " +
+                        "Group by DryingStarted " +
+                        "Order by DryingStarted ASC ";
+
+        System.out.println(sqlStatement);
 
 
         /*
         // Sqlstatement for Årjang(174)
         final String sqlStatement =
                         "SELECT MAX(Name) as DryingSchedule, MAX(KilinId)+1 as KilnName, DryingStarted, Max(DryingCompleted) as DryingCompleted\n" +
-                        "FROM `sf-drying-optimization.174.int_dk_valmaticsdryingbatches` \n" +
+                        "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_VALMATICS + "` " +
                         "WHERE KilinId = 16  \n" +
                         "AND DATE(DryingStarted) BETWEEN \"1990-08-17\" AND \"2022-08-17\"\n" +
                         "AND DATE(DryingCompleted) BETWEEN \"1990-08-17\" AND \"2022-08-17\"\n" +
diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class
new file mode 100644
index 0000000000000000000000000000000000000000..36d1dfcf105d9904e54bdde59aeb74409a514b91
GIT binary patch
literal 1028
zcmX^0Z`VEs1_l!bb1nu>1|<##WiAF4231Z54hA(Y26YAv5LXk#)naGRW@pf0WME6n
zFUn0UVPsJ8$x19s)Gx`*P1T2p>ANJBq=sbXrn-TZl%y6}Gcs_8_`5hp2FJTNhPW~^
z2thREB<7{-2bUCO=A~ORGH?Y1`FpuKhs1ljFf#Bu=jRodB<7WbCFYc-axmyJGI0C&
zJ3EGW`ul+uFnTgGFfi0GGKhpYI{CQ9`#Ji$#)moj_&SDoItOzw=rJ<zA<1}$dvGx5
zGcvH*Waed-*fBCNYiNcsGO#%3r=&76@cU%urTUfTCZ!gIBqrsgf?SxNoR|}qSd<Ck
zLj_q%GBS%98RUGD^K<nR3kq^FlM_oa^Yipwob+MtEw*N4;IK)~fm*{AoL^d$oa&Yd
zGL#RlNDmZfJPZ;Hl8g+(m6es1y1u@;DJcpb9#*-zR>j5a3<f+5h73kL3|tJ{><q>{
z3?>YwAdVRi0}lf)BZCY+ConPyfXvqihp&H9R%&tyBZF9Rnr=!_WoBNwZhk>YW^QH`
z*zJrA3YmE&@hREyWr;bti6xoI#Sm3Vi6zMysm1YSMvM$%ASJ~q@#UF$$;rj3dByof
zDTyVCj0{R(d+<g+BLioCT0mk+Nor9ZBZGwoX4Gp!gz%bT&B!2*u*(M&Ik05L$iSSJ
zU(U!Nt$}P1iV|x^21}^LU|UL3a|`l|5_9xJpbW?4<kaHg{32_p5#W%6rc4Gy1`Y;J
z1_lN;1`bekFfcGkf+7J-^D*!;Ff#BnFfcGN2rx)82r>x4`N9m63?fMKq70G@Vn}>(
z1||k3P#R!hWRPNDU@&H2WME`qU|`kS&cL`4Y@{>;0|OTW69WT-00Rqy5Q7W@0|O64
z5rZs)90LOb2ZKC=B-8*yuu297Q6Z)s49uGuST-@R>|kKs#=y3jfgNNZBLl)fJ_Zg3
MQ3gf^1+Ybm0Nt(i;s5{u

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 30cd375022bc63510dd2aad4cd576d38dced7e46..386565ccedb8265adb368a8df6a4c7ae9917907c 100644
GIT binary patch
delta 4288
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
PpFlJtD<d<*YX(UGq6LiU

delta 4184
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
CXk=&r

-- 
GitLab