diff --git a/BackendWorkerService/Models/SolarModel.cs b/BackendWorkerService/Models/SolarModel.cs index 2b72f5f..3d280a8 100644 --- a/BackendWorkerService/Models/SolarModel.cs +++ b/BackendWorkerService/Models/SolarModel.cs @@ -54,6 +54,6 @@ namespace BackendWorkerService.Models public string device_id { get; set; } public string timestamp { get; set; } public string device_sys_tag { get; set; } - public List> value { get; set; } + public Dictionary value { get; set; } } } \ No newline at end of file diff --git a/BackendWorkerService/Services/Implement/SolarService.cs b/BackendWorkerService/Services/Implement/SolarService.cs index a99f000..843fa8b 100644 --- a/BackendWorkerService/Services/Implement/SolarService.cs +++ b/BackendWorkerService/Services/Implement/SolarService.cs @@ -62,7 +62,7 @@ namespace BackendWorkerService.Services.Implement device.site_id = value[0].Split("/")[2].Trim(); device.device_sys_tag = value[0].Split("/")[3].Trim(); device.device_id = value[0].Split("/")[value[0].Split("/").Length - 3].Trim(); - device.site_name = sites.Where(x => x.site_id == device.site_id).FirstOrDefault().site_name ?? ""; + device.site_name = sites.Where(x => x.site_id == device.site_id).FirstOrDefault()?.site_name ?? ""; if (!data.Any(x => x.site_id == device.site_id && x.device_sys_tag == device.device_sys_tag && x.device_id == device.device_id)) data.Add(device); @@ -217,7 +217,7 @@ namespace BackendWorkerService.Services.Implement d.site_id = dd.site_id; d.device_id = dd.device_id; d.device_sys_tag = dd.device_sys_tag; - d.value = new List>(); + d.value = new Dictionary(); var realValue = new Dictionary(); if (history["abstime"] != null && history["abstime"].HasValues) @@ -247,12 +247,15 @@ namespace BackendWorkerService.Services.Implement } } - if (data.Any(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp)) - data.Where(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp).FirstOrDefault().value.Add(realValue); - else + if (realValue.Count > 0) { - d.value.Add(realValue); - data.Add(d); + if (data.Any(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp)) + data.Where(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp).FirstOrDefault().value.Add(realValue.First().Key, realValue.First().Value); + else + { + d.value.Add(realValue.First().Key, realValue.First().Value); + data.Add(d); + } } } } @@ -262,7 +265,7 @@ namespace BackendWorkerService.Services.Implement d.site_id = dd.site_id; d.device_id = dd.device_id; d.device_sys_tag = dd.device_sys_tag; - d.value = new List>(); + d.value = new Dictionary(); var realValue = new Dictionary(); if (histories["abstime"] != null && histories["abstime"].HasValues) @@ -292,12 +295,15 @@ namespace BackendWorkerService.Services.Implement } } - if (data.Any(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp)) - data.Where(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp).FirstOrDefault().value.Add(realValue); - else + if (realValue.Count > 0) { - d.value.Add(realValue); - data.Add(d); + if (data.Any(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp)) + data.Where(x => x.site_id == d.site_id && x.device_id == d.device_id && x.device_sys_tag == dd.device_sys_tag && x.timestamp == d.timestamp).FirstOrDefault().value.Add(realValue.First().Key, realValue.First().Value); + else + { + d.value.Add(realValue.First().Key, realValue.First().Value); + data.Add(d); + } } } } @@ -343,323 +349,81 @@ namespace BackendWorkerService.Services.Implement { var types = data.GroupBy(x => x.device_sys_tag).Select(x => x.Key.ToLower()); sql = ""; + string table_name = string.Empty; + string[] cusTypes = { "inverter", "sensor", "meter", "site" }; foreach (var t in types) { - foreach (var d in data.Where(x => x.device_sys_tag.ToLower() == t)) + var currData = data.Where(x => x.device_sys_tag.ToLower() == t).ToList(); + + if (currData.Any(x => x.value.Count > 0)) { - if (t == "inverter") + #region check column + if (cusTypes.Contains(t)) { - sql += @$"WITH updated_rows AS ( - UPDATE inverter_history_hour - SET - ""Irradiance"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Irradiance".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Irradiance".ToUpper()))["Irradiance".ToUpper()])}, - ""ACV1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACV1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV1".ToUpper()))["ACV1".ToUpper()])}, - ""ACA1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA1".ToUpper()))["ACA1".ToUpper()])}, - ""ACW1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACW1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW1".ToUpper()))["ACW1".ToUpper()])}, - ""AC1F"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC1F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC1F".ToUpper()))["AC1F".ToUpper()])}, - ""AC1WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC1WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC1WH".ToUpper()))["AC1WH".ToUpper()])}, - ""ACV2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACV2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV2".ToUpper()))["ACV2".ToUpper()])}, - ""ACA2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA2".ToUpper()))["ACA2".ToUpper()])}, - ""ACW2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACW2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW2".ToUpper()))["ACW2".ToUpper()])}, - ""AC2F"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC2F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC2F".ToUpper()))["AC2F".ToUpper()])}, - ""AC2WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC2WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC2WH".ToUpper()))["AC2WH".ToUpper()])}, - ""ACV3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACV3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV3".ToUpper()))["ACV3".ToUpper()])}, - ""ACA3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA3".ToUpper()))["ACA3".ToUpper()])}, - ""ACW3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACW3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW3".ToUpper()))["ACW3".ToUpper()])}, - ""AC3F"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC3F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC3F".ToUpper()))["AC3F".ToUpper()])}, - ""AC3WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("AC3WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC3WH".ToUpper()))["AC3WH".ToUpper()])}, - ""DCV1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCV1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV1".ToUpper()))["DCV1".ToUpper()])}, - ""DCA1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA1".ToUpper()))["DCA1".ToUpper()])}, - ""DCW1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCW1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW1".ToUpper()))["DCW1".ToUpper()])}, - ""DC1KW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC1KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC1KW".ToUpper()))["DC1KW".ToUpper()])}, - ""DC1WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC1WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC1WH".ToUpper()))["DC1WH".ToUpper()])}, - ""DCV2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCV2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV2".ToUpper()))["DCV2".ToUpper()])}, - ""DCA2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA2".ToUpper()))["DCA2".ToUpper()])}, - ""DCW2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCW2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW2".ToUpper()))["DCW2".ToUpper()])}, - ""DC2KW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC2KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC2KW".ToUpper()))["DC2KW".ToUpper()])}, - ""DC2WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC2WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC2WH".ToUpper()))["DC2WH".ToUpper()])}, - ""DCV3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCV3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV3".ToUpper()))["DCV3".ToUpper()])}, - ""DCA3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA3".ToUpper()))["DCA3".ToUpper()])}, - ""DCW3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCW3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW3".ToUpper()))["DCW3".ToUpper()])}, - ""DC3KW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC3KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC3KW".ToUpper()))["DC3KW".ToUpper()])}, - ""DC3WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC3WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC3WH".ToUpper()))["DC3WH".ToUpper()])}, - ""DC4V"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC4V".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4V".ToUpper()))["DC4V".ToUpper()])}, - ""DC4A"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC4A".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4A".ToUpper()))["DC4A".ToUpper()])}, - ""DC4W"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC4W".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4W".ToUpper()))["DC4W".ToUpper()])}, - ""DC4KW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC4KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4KW".ToUpper()))["DC4KW".ToUpper()])}, - ""DC4WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC4WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4WH".ToUpper()))["DC4WH".ToUpper()])}, - ""DCV5"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCV5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV5".ToUpper()))["DCV5".ToUpper()])}, - ""DCA5"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCA5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA5".ToUpper()))["DCA5".ToUpper()])}, - ""DCW5"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCW5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW5".ToUpper()))["DCW5".ToUpper()])}, - ""DC5KW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC5KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC5KW".ToUpper()))["DC5KW".ToUpper()])}, - ""DC5WH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DC5WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC5WH".ToUpper()))["DC5WH".ToUpper()])}, - ""PR"" = {(d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper()))["PR".ToUpper()])}, - ""RA1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("RA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA1".ToUpper()))["RA1".ToUpper()])}, - ""RA2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("RA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA2".ToUpper()))["RA2".ToUpper()])}, - ""RA3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("RA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA3".ToUpper()))["RA3".ToUpper()])}, - ""RA4"" = {(d.value.FirstOrDefault(x => x.ContainsKey("RA4".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA4".ToUpper()))["RA4".ToUpper()])}, - ""RA5"" = {(d.value.FirstOrDefault(x => x.ContainsKey("RA5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA5".ToUpper()))["RA5".ToUpper()])}, - ""DCKW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("DCKW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCKW".ToUpper()))["DCKW".ToUpper()])}, - ""ACKW"" = {(d.value.FirstOrDefault(x => x.ContainsKey("ACKW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACKW".ToUpper()))["ACKW".ToUpper()])}, - ""KWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper()))["KWH".ToUpper()])}, - ""TODAYKWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper()))["TODAYKWH".ToUpper()])}, - ""TOTALKWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper()))["TOTALKWH".ToUpper()])}, - ""KWHKWP"" = {(d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper()))["KWHKWP".ToUpper()])} - WHERE site_id = '{d.site_id}' and ""device_Id"" = '{d.device_id}' and ""TIMESTAMP"" = '{d.timestamp}' - RETURNING * - ) - insert into inverter_history_hour (site_id, ""device_Id"", ""TIMESTAMP"", ""Irradiance"", ""ACV1"", ""ACA1"", ""ACW1"", ""AC1F"", ""AC1WH"", ""ACV2"", ""ACA2"", ""ACW2"", ""AC2F"", ""AC2WH"", ""ACV3"", ""ACA3"", ""ACW3"", ""AC3F"", - ""AC3WH"", ""DCV1"", ""DCA1"", ""DCW1"", ""DC1KW"", ""DC1WH"", ""DCV2"", ""DCA2"", ""DCW2"", ""DC2KW"", ""DC2WH"", ""DCV3"", ""DCA3"", ""DCW3"", ""DC3KW"", ""DC3WH"", ""DC4V"", ""DC4A"", ""DC4W"", ""DC4KW"", - ""DC4WH"", ""DCV5"", ""DCA5"", ""DCW5"", ""DC5KW"", ""DC5WH"", ""PR"", ""RA1"", ""RA2"", ""RA3"", ""RA4"", ""RA5"", ""DCKW"", ""ACKW"", ""KWH"", ""TODAYKWH"", ""TOTALKWH"", ""KWHKWP"", ""CrdDate"") - select '{d.site_id}', '{d.device_id}', '{d.timestamp}', - {(d.value.FirstOrDefault(x => x.ContainsKey("Irradiance".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Irradiance".ToUpper()))["Irradiance".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACV1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV1".ToUpper()))["ACV1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA1".ToUpper()))["ACA1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACW1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW1".ToUpper()))["ACW1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC1F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC1F".ToUpper()))["AC1F".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC1WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC1WH".ToUpper()))["AC1WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACV2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV2".ToUpper()))["ACV2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA2".ToUpper()))["ACA2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACW2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW2".ToUpper()))["ACW2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC2F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC2F".ToUpper()))["AC2F".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC2WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC2WH".ToUpper()))["AC2WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACV3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACV3".ToUpper()))["ACV3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACA3".ToUpper()))["ACA3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACW3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACW3".ToUpper()))["ACW3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC3F".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC3F".ToUpper()))["AC3F".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("AC3WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("AC3WH".ToUpper()))["AC3WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCV1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV1".ToUpper()))["DCV1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA1".ToUpper()))["DCA1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCW1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW1".ToUpper()))["DCW1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC1KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC1KW".ToUpper()))["DC1KW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC1WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC1WH".ToUpper()))["DC1WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCV2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV2".ToUpper()))["DCV2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA2".ToUpper()))["DCA2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCW2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW2".ToUpper()))["DCW2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC2KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC2KW".ToUpper()))["DC2KW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC2WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC2WH".ToUpper()))["DC2WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCV3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV3".ToUpper()))["DCV3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA3".ToUpper()))["DCA3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCW3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW3".ToUpper()))["DCW3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC3KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC3KW".ToUpper()))["DC3KW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC3WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC3WH".ToUpper()))["DC3WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC4V".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4V".ToUpper()))["DC4V".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC4A".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4A".ToUpper()))["DC4A".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC4W".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4W".ToUpper()))["DC4W".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC4KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4KW".ToUpper()))["DC4KW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC4WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC4WH".ToUpper()))["DC4WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCV5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCV5".ToUpper()))["DCV5".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCA5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCA5".ToUpper()))["DCA5".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCW5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCW5".ToUpper()))["DCW5".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC5KW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC5KW".ToUpper()))["DC5KW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DC5WH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DC5WH".ToUpper()))["DC5WH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper()))["PR".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("RA1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA1".ToUpper()))["RA1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("RA2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA2".ToUpper()))["RA2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("RA3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA3".ToUpper()))["RA3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("RA4".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA4".ToUpper()))["RA4".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("RA5".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("RA5".ToUpper()))["RA5".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("DCKW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("DCKW".ToUpper()))["DCKW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("ACKW".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("ACKW".ToUpper()))["ACKW".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper()))["KWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper()))["TODAYKWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper()))["TOTALKWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper()))["KWHKWP".ToUpper()])}, - now() - WHERE NOT EXISTS (SELECT 1 FROM updated_rows);"; + table_name = t == "inverter" ? "inverter_history_hour" + : t == "sensor" ? "sensoravg_history_hour" + : t == "meter" ? "meter_history_hour" + : t == "site" ? "station_history_hour" + : ""; + + sql += @$" DO $$ + DECLARE + columns_to_add TEXT[] := ARRAY['{string.Join("','", currData.SelectMany(x => x.value.Keys).Distinct())}']; + col TEXT; + BEGIN + FOREACH col IN ARRAY columns_to_add LOOP + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = '{table_name}' AND column_name = col + ) THEN + EXECUTE format('ALTER TABLE {table_name} ADD COLUMN %I FLOAT(53)', col); + ELSE + + END IF; + END LOOP; + END $$; "; } - else if (t == "sensor") + #endregion + + foreach (var d in currData) { - sql += @$"WITH updated_rows AS ( - UPDATE sensoravg_history_hour - SET - ""Totalsun"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Totalsun".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Totalsun".ToUpper()))["Totalsun".ToUpper()])}, - ""Temp"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Temp".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Temp".ToUpper()))["Temp".ToUpper()])}, - ""Wm2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Wm2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Wm2".ToUpper()))["Wm2".ToUpper()])}, - ""SENSORAVG04"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG04".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG04".ToUpper()))["SENSORAVG04".ToUpper()])}, - ""SENSORAVG05"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG05".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG05".ToUpper()))["SENSORAVG05".ToUpper()])}, - ""SENSORAVG06"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG06".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG06".ToUpper()))["SENSORAVG06".ToUpper()])}, - ""SENSORAVG07"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG07".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG07".ToUpper()))["SENSORAVG07".ToUpper()])}, - ""SENSORAVG08"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG08".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG08".ToUpper()))["SENSORAVG08".ToUpper()])}, - ""SENSORAVG09"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG09".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG09".ToUpper()))["SENSORAVG09".ToUpper()])}, - ""SENSORAVG10"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG10".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG10".ToUpper()))["SENSORAVG10".ToUpper()])}, - ""SENSORAVG11"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG11".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG11".ToUpper()))["SENSORAVG11".ToUpper()])}, - ""SENSORAVG12"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG12".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG12".ToUpper()))["SENSORAVG12".ToUpper()])}, - ""SENSORAVG13"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG13".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG13".ToUpper()))["SENSORAVG13".ToUpper()])}, - ""SENSORAVG14"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG14".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG14".ToUpper()))["SENSORAVG14".ToUpper()])}, - ""SENSORAVG15"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG15".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG15".ToUpper()))["SENSORAVG15".ToUpper()])}, - ""SENSORAVG16"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG16".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG16".ToUpper()))["SENSORAVG16".ToUpper()])}, - ""SENSORAVG17"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG17".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG17".ToUpper()))["SENSORAVG17".ToUpper()])}, - ""SENSORAVG18"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG18".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG18".ToUpper()))["SENSORAVG18".ToUpper()])}, - ""SENSORAVG19"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG19".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG19".ToUpper()))["SENSORAVG19".ToUpper()])}, - ""SENSORAVG20"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG20".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG20".ToUpper()))["SENSORAVG20".ToUpper()])}, - ""SENSORAVG21"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG21".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG21".ToUpper()))["SENSORAVG21".ToUpper()])}, - ""SENSORAVG22"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG22".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG22".ToUpper()))["SENSORAVG22".ToUpper()])}, - ""SENSORAVG23"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG23".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG23".ToUpper()))["SENSORAVG23".ToUpper()])}, - ""SENSORAVG24"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG24".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG24".ToUpper()))["SENSORAVG24".ToUpper()])}, - ""SENSORAVG25"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG25".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG25".ToUpper()))["SENSORAVG25".ToUpper()])}, - ""SENSORAVG26"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG26".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG26".ToUpper()))["SENSORAVG26".ToUpper()])}, - ""SENSORAVG27"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG27".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG27".ToUpper()))["SENSORAVG27".ToUpper()])}, - ""SENSORAVG28"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG28".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG28".ToUpper()))["SENSORAVG28".ToUpper()])}, - ""SENSORAVG29"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG29".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG29".ToUpper()))["SENSORAVG29".ToUpper()])}, - ""SENSORAVG30"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG30".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG30".ToUpper()))["SENSORAVG30".ToUpper()])}, - ""SENSORAVG31"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG31".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG31".ToUpper()))["SENSORAVG31".ToUpper()])}, - ""SENSORAVG32"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG32".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG32".ToUpper()))["SENSORAVG32".ToUpper()])}, - ""SENSORAVG33"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG33".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG33".ToUpper()))["SENSORAVG33".ToUpper()])}, - ""SENSORAVG34"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG34".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG34".ToUpper()))["SENSORAVG34".ToUpper()])}, - ""SENSORAVG35"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG35".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG35".ToUpper()))["SENSORAVG35".ToUpper()])}, - ""SENSORAVG36"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG36".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG36".ToUpper()))["SENSORAVG36".ToUpper()])}, - ""SENSORAVG37"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG37".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG37".ToUpper()))["SENSORAVG37".ToUpper()])}, - ""SENSORAVG38"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG38".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG38".ToUpper()))["SENSORAVG38".ToUpper()])}, - ""SENSORAVG39"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG39".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG39".ToUpper()))["SENSORAVG39".ToUpper()])}, - ""SENSORAVG40"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG40".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG40".ToUpper()))["SENSORAVG40".ToUpper()])}, - ""SENSORAVG41"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG41".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG41".ToUpper()))["SENSORAVG41".ToUpper()])}, - ""SENSORAVG42"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG42".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG42".ToUpper()))["SENSORAVG42".ToUpper()])}, - ""SENSORAVG43"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG43".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG43".ToUpper()))["SENSORAVG43".ToUpper()])}, - ""SENSORAVG44"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG44".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG44".ToUpper()))["SENSORAVG44".ToUpper()])}, - ""SENSORAVG45"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG45".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG45".ToUpper()))["SENSORAVG45".ToUpper()])}, - ""SENSORAVG46"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG46".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG46".ToUpper()))["SENSORAVG46".ToUpper()])}, - ""SENSORAVG47"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG47".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG47".ToUpper()))["SENSORAVG47".ToUpper()])}, - ""SENSORAVG48"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG48".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG48".ToUpper()))["SENSORAVG48".ToUpper()])}, - ""SENSORAVG49"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG49".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG49".ToUpper()))["SENSORAVG49".ToUpper()])}, - ""SENSORAVG50"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG50".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG50".ToUpper()))["SENSORAVG50".ToUpper()])} - WHERE site_id = '{d.site_id}' and ""device_Id"" = '{d.device_id}' and ""TIMESTAMP"" = '{d.timestamp}' + int i = 1; + var orderDic = d.value.OrderBy(x => x.Key).ToList(); + + if (cusTypes.Contains(t)) + { + sql += @$" WITH updated_rows AS ( + UPDATE {table_name} + SET "; + + foreach (var v in orderDic) + { + sql += $@" ""{v.Key}"" = {v.Value} "; + + if (i++ != orderDic.Count) + sql += ", "; + } + + #region different type insert + sql += $@" WHERE site_id = '{d.site_id}' and ""device_Id"" = '{d.device_id}' and ""TIMESTAMP"" = '{d.timestamp}' RETURNING * - ) - insert into sensoravg_history_hour (""site_id"", ""device_Id"", ""TIMESTAMP"", ""Totalsun"", ""Temp"", ""Wm2"", ""SENSORAVG04"", ""SENSORAVG05"", ""SENSORAVG06"", ""SENSORAVG07"", ""SENSORAVG08"", - ""SENSORAVG09"", ""SENSORAVG10"", ""SENSORAVG11"", ""SENSORAVG12"", ""SENSORAVG13"", ""SENSORAVG14"", ""SENSORAVG15"", ""SENSORAVG16"", ""SENSORAVG17"", - ""SENSORAVG18"", ""SENSORAVG19"", ""SENSORAVG20"", ""SENSORAVG21"", ""SENSORAVG22"", ""SENSORAVG23"", ""SENSORAVG24"", ""SENSORAVG25"", ""SENSORAVG26"", - ""SENSORAVG27"", ""SENSORAVG28"", ""SENSORAVG29"", ""SENSORAVG30"", ""SENSORAVG31"", ""SENSORAVG32"", ""SENSORAVG33"", ""SENSORAVG34"", ""SENSORAVG35"", - ""SENSORAVG36"", ""SENSORAVG37"", ""SENSORAVG38"", ""SENSORAVG39"", ""SENSORAVG40"", ""SENSORAVG41"", ""SENSORAVG42"", ""SENSORAVG43"", ""SENSORAVG44"", - ""SENSORAVG45"", ""SENSORAVG46"", ""SENSORAVG47"", ""SENSORAVG48"", ""SENSORAVG49"", ""SENSORAVG50"") - select '{d.site_id}', '{d.device_id}', '{d.timestamp}', - {(d.value.FirstOrDefault(x => x.ContainsKey("Totalsun".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Totalsun".ToUpper()))["Totalsun".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("Temp".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Temp".ToUpper()))["Temp".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("Wm2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Wm2".ToUpper()))["Wm2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG04".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG04".ToUpper()))["SENSORAVG04".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG05".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG05".ToUpper()))["SENSORAVG05".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG06".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG06".ToUpper()))["SENSORAVG06".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG07".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG07".ToUpper()))["SENSORAVG07".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG08".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG08".ToUpper()))["SENSORAVG08".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG09".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG09".ToUpper()))["SENSORAVG09".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG10".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG10".ToUpper()))["SENSORAVG10".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG11".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG11".ToUpper()))["SENSORAVG11".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG12".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG12".ToUpper()))["SENSORAVG12".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG13".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG13".ToUpper()))["SENSORAVG13".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG14".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG14".ToUpper()))["SENSORAVG14".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG15".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG15".ToUpper()))["SENSORAVG15".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG16".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG16".ToUpper()))["SENSORAVG16".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG17".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG17".ToUpper()))["SENSORAVG17".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG18".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG18".ToUpper()))["SENSORAVG18".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG19".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG19".ToUpper()))["SENSORAVG19".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG20".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG20".ToUpper()))["SENSORAVG20".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG21".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG21".ToUpper()))["SENSORAVG21".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG22".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG22".ToUpper()))["SENSORAVG22".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG23".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG23".ToUpper()))["SENSORAVG23".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG24".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG24".ToUpper()))["SENSORAVG24".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG25".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG25".ToUpper()))["SENSORAVG25".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG26".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG26".ToUpper()))["SENSORAVG26".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG27".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG27".ToUpper()))["SENSORAVG27".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG28".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG28".ToUpper()))["SENSORAVG28".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG29".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG29".ToUpper()))["SENSORAVG29".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG30".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG30".ToUpper()))["SENSORAVG30".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG31".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG31".ToUpper()))["SENSORAVG31".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG32".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG32".ToUpper()))["SENSORAVG32".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG33".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG33".ToUpper()))["SENSORAVG33".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG34".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG34".ToUpper()))["SENSORAVG34".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG35".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG35".ToUpper()))["SENSORAVG35".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG36".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG36".ToUpper()))["SENSORAVG36".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG37".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG37".ToUpper()))["SENSORAVG37".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG38".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG38".ToUpper()))["SENSORAVG38".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG39".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG39".ToUpper()))["SENSORAVG39".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG40".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG40".ToUpper()))["SENSORAVG40".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG41".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG41".ToUpper()))["SENSORAVG41".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG42".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG42".ToUpper()))["SENSORAVG42".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG43".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG43".ToUpper()))["SENSORAVG43".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG44".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG44".ToUpper()))["SENSORAVG44".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG45".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG45".ToUpper()))["SENSORAVG45".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG46".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG46".ToUpper()))["SENSORAVG46".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG47".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG47".ToUpper()))["SENSORAVG47".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG48".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG48".ToUpper()))["SENSORAVG48".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG49".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG49".ToUpper()))["SENSORAVG49".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG50".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SENSORAVG50".ToUpper()))["SENSORAVG50".ToUpper()])} - WHERE NOT EXISTS (SELECT 1 FROM updated_rows);"; - } - else if (t == "meter") - { - sql += @$"WITH updated_rows AS ( - UPDATE meter_history_hour - SET - ""V1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("V1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V1".ToUpper()))["V1".ToUpper()])}, - ""V2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("V2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V2".ToUpper()))["V2".ToUpper()])}, - ""V3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("V3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V3".ToUpper()))["V3".ToUpper()])}, - ""A1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("A1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A1".ToUpper()))["A1".ToUpper()])}, - ""A2"" = {(d.value.FirstOrDefault(x => x.ContainsKey("A2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A2".ToUpper()))["A2".ToUpper()])}, - ""A3"" = {(d.value.FirstOrDefault(x => x.ContainsKey("A3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A3".ToUpper()))["A3".ToUpper()])}, - ""W1"" = {(d.value.FirstOrDefault(x => x.ContainsKey("W1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("W1".ToUpper()))["W1".ToUpper()])}, - ""kwh"" = {(d.value.FirstOrDefault(x => x.ContainsKey("kwh".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("kwh".ToUpper()))["kwh".ToUpper()])}, - ""PF"" = {(d.value.FirstOrDefault(x => x.ContainsKey("PF".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PF".ToUpper()))["PF".ToUpper()])}, - ""Q"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Q".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Q".ToUpper()))["Q".ToUpper()])}, - ""Freq"" = {(d.value.FirstOrDefault(x => x.ContainsKey("Freq".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Freq".ToUpper()))["Freq".ToUpper()])} - WHERE site_id = '{d.site_id}' and ""device_Id"" = '{d.device_id}' and ""TIMESTAMP"" = '{d.timestamp}' - RETURNING * - ) - insert into meter_history_hour (""site_id"", ""device_Id"", ""TIMESTAMP"", ""V1"", ""V2"", ""V3"", ""A1"", ""A2"", ""A3"", ""W1"", ""kwh"", ""PF"", ""Q"", ""Freq"") - select '{d.site_id}', '{d.device_id}', '{d.timestamp}', - {(d.value.FirstOrDefault(x => x.ContainsKey("V1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V1".ToUpper()))["V1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("V2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V2".ToUpper()))["V2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("V3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("V3".ToUpper()))["V3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("A1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A1".ToUpper()))["A1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("A2".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A2".ToUpper()))["A2".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("A3".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("A3".ToUpper()))["A3".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("W1".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("W1".ToUpper()))["W1".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("kwh".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("kwh".ToUpper()))["kwh".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("PF".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PF".ToUpper()))["PF".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("Q".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Q".ToUpper()))["Q".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("Freq".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("Freq".ToUpper()))["Freq".ToUpper()])} - WHERE NOT EXISTS (SELECT 1 FROM updated_rows);"; - } - else if (t == "site") - { - sql += @$"WITH updated_rows AS ( - UPDATE station_history_hour - SET - ""SITETYPE"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SITETYPE".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SITETYPE".ToUpper()))["SITETYPE".ToUpper()])}, - ""KWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper()))["KWH".ToUpper()])}, - ""TODAYKWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper()))["TODAYKWH".ToUpper()])}, - ""TOTALKWH"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper()))["TOTALKWH".ToUpper()])}, - ""KWHKWP"" = {(d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper()))["KWHKWP".ToUpper()])}, - ""PR"" = {(d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper()))["PR".ToUpper()])}, - ""MP"" = {(d.value.FirstOrDefault(x => x.ContainsKey("MP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("MP".ToUpper()))["MP".ToUpper()])}, - ""SOLARHOUR"" = {(d.value.FirstOrDefault(x => x.ContainsKey("SOLARHOUR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SOLARHOUR".ToUpper()))["SOLARHOUR".ToUpper()])}, - ""MONEY"" = {(d.value.FirstOrDefault(x => x.ContainsKey("MONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("MONEY".ToUpper()))["MONEY".ToUpper()])}, - ""TODAYMONEY"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYMONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYMONEY".ToUpper()))["TODAYMONEY".ToUpper()])}, - ""TOTALMONEY"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALMONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALMONEY".ToUpper()))["TOTALMONEY".ToUpper()])}, - ""CARBON"" = {(d.value.FirstOrDefault(x => x.ContainsKey("CARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("CARBON".ToUpper()))["CARBON".ToUpper()])}, - ""TODAYCARBON"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYCARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYCARBON".ToUpper()))["TODAYCARBON".ToUpper()])}, - ""TOTALCARBON"" = {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALCARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALCARBON".ToUpper()))["TOTALCARBON".ToUpper()])} - WHERE site_id = '{d.site_id}' and ""device_Id"" = '{d.device_id}' and ""TIMESTAMP"" = '{d.timestamp}' - RETURNING * - ) - insert into station_history_hour (""site_id"", ""device_Id"", ""TIMESTAMP"", ""SITETYPE"", ""KWH"", ""TODAYKWH"", ""TOTALKWH"", ""KWHKWP"", ""PR"", ""MP"", ""SOLARHOUR"", ""MONEY"", - ""TODAYMONEY"", ""TOTALMONEY"", ""CARBON"", ""TODAYCARBON"", ""TOTALCARBON"") - select '{d.site_id}', '{d.device_id}', '{d.timestamp}', - {(d.value.FirstOrDefault(x => x.ContainsKey("SITETYPE".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SITETYPE".ToUpper()))["SITETYPE".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWH".ToUpper()))["KWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYKWH".ToUpper()))["TODAYKWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALKWH".ToUpper()))["TOTALKWH".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("KWHKWP".ToUpper()))["KWHKWP".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("PR".ToUpper()))["PR".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("MP".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("MP".ToUpper()))["MP".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("SOLARHOUR".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("SOLARHOUR".ToUpper()))["SOLARHOUR".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("MONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("MONEY".ToUpper()))["MONEY".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYMONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYMONEY".ToUpper()))["TODAYMONEY".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALMONEY".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALMONEY".ToUpper()))["TOTALMONEY".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("CARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("CARBON".ToUpper()))["CARBON".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TODAYCARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TODAYCARBON".ToUpper()))["TODAYCARBON".ToUpper()])}, - {(d.value.FirstOrDefault(x => x.ContainsKey("TOTALCARBON".ToUpper())) == null ? 0 : d.value.FirstOrDefault(x => x.ContainsKey("TOTALCARBON".ToUpper()))["TOTALCARBON".ToUpper()])} - WHERE NOT EXISTS (SELECT 1 FROM updated_rows);"; + ) + insert into {table_name} (site_id, ""device_Id"", ""TIMESTAMP"", ""{string.Join(@""",""", orderDic.Select(x => x.Key))}"") + select '{d.site_id}', '{d.device_id}', '{d.timestamp}', "; + #endregion + + i = 1; + foreach (var v in orderDic) + { + sql += $@"{v.Value}"; + + if (i++ != orderDic.Count) + sql += ", "; + } + + sql += " WHERE NOT EXISTS (SELECT 1 FROM updated_rows); "; + } } } } @@ -997,7 +761,7 @@ namespace BackendWorkerService.Services.Implement d.site_id = dd.site_id; d.device_id = dd.device_id; d.device_sys_tag = dd.device_sys_tag; - d.value = new List>(); + d.value = new Dictionary(); var realValue = new Dictionary(); if (history["real"] != null && history["real"].HasValues) @@ -1020,7 +784,7 @@ namespace BackendWorkerService.Services.Implement d.site_id = dd.site_id; d.device_id = dd.device_id; d.device_sys_tag = dd.device_sys_tag; - d.value = new List>(); + d.value = new Dictionary(); var realValue = new Dictionary(); if (histories["real"] != null && histories["real"].HasValues)