public void SecondPhase(DatabaseWrapper conn, int interval, List <DimTracker> trackersList) { Dictionary <string, DimTracker> trackers = trackersList.ToDictionary(x => x.GetKeyValue(), x => x); DateTime from = DateTime.Now.AddMinutes(-interval * 2); DateTime to = DateTime.Now; Dictionary <long, FactActivity> dbData = conn.GetActivities(from, to).ToDictionary(x => x.GetKeyValue(), x => x); List <FactActivity> sensolusData = api.GetActivities(from, to, trackers); List <FactActivity> toAdd = new List <FactActivity>(); List <FactActivity> toUpdate = new List <FactActivity>(); foreach (var obj in sensolusData) { var key = obj.GetKeyValue(); if (!dbData.ContainsKey(key)) { toAdd.Add(obj); } else if (!dbData[key].Equals(obj)) { toUpdate.Add(obj); } } conn.Insert(toAdd); conn.Update(toUpdate); }
public void ThirdPhase(DatabaseWrapper conn, string[] serials) { Dictionary <long, DimRule> rules = conn.GetRules().ToDictionary(x => x.GetKeyValue(), x => x); DateTime from = DateTime.MinValue; DateTime to = DateTime.Now; Dictionary <string, FactActivity> activities = conn.GetActivities(from, to) .GroupBy(x => x.Evttime.ToString() + x.Serial) .Select(x => { var list = x.ToList(); if (list.Count == 1) { return(list.First()); } if (list[0].Evttype == "ON_THE_MOVE" && list[1].Evttype == "STOP") { return(list[1]); } else if (list[1].Evttype == "ON_THE_MOVE" && list[0].Evttype == "STOP") { return(list[0]); } else if (list[0].Evttype == "START") { return(list[1]); } else { return(list[0]); } }) .ToDictionary(x => x.Evttime.ToString() + x.Serial, x => x); Dictionary <string, FactAlert> dbObjs = conn.GetAlerts().ToDictionary(x => x.GetKeyValue(), x => x); List <FactAlert> sensolusData = api.GetAlerts(serials, activities, rules); List <FactAlert> toAdd = new List <FactAlert>(); List <FactAlert> toUpdate = new List <FactAlert>(); foreach (var alert in sensolusData) { string alertKey = alert.GetKeyValue(); if (!dbObjs.ContainsKey(alertKey)) { toAdd.Add(alert); } else if (!dbObjs[alertKey].Alertclear.Equals(alert.Alertclear)) { toUpdate.Add(alert); } } conn.Insert(toAdd); conn.Update(toUpdate); }
public static void Update(this DatabaseWrapper conn, List <FactAlert> list) { if (list.Count == 0) { return; } StringBuilder sb = new StringBuilder("DELETE FROM Fact_Alert WHERE concat_ws(',', alerttime, alerttype, alertruleid, trackerserial) in ("); sb.Append(String.Join(", ", list.Select(x => $"'{x.Alerttime.ToString("yyyy-MM-dd HH:mm:sszz").Replace("'", "''")},{x.Alerttype},{x.Alertruleid},{x.Trackerserial}'")) + ')'); IDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sb.ToString(); cmd.ExecuteNonQuery(); conn.Insert(list); }
public void FirstPhase(DatabaseWrapper conn) { CompareData(conn.GetDimTrackers().ToDictionary(x => x.GetKeyValue(), x => x), api.GetDimTrackers().ToDictionary(x => x.GetKeyValue(), x => x), conn.Insert, conn.Delete); CompareData(conn.GetRules().ToDictionary(x => x.GetKeyValue(), x => x), api.GetRules().ToDictionary(x => x.GetKeyValue(), x => x), conn.Insert, conn.Delete); CompareData(conn.GetZones().ToDictionary(x => x.GetKeyValue(), x => x), api.GetZones().ToDictionary(x => x.GetKeyValue(), x => x), conn.Insert, conn.Delete); Dictionary <string, DimTracker> trackers = conn.GetDimTrackers().ToDictionary(x => x.GetKeyValue(), x => x); Dictionary <string, FactTracker> dbFactTrackers = conn.GetFactTrackers().ToDictionary(x => x.GetKeyValue(), x => x);; List <FactTracker> sensolusFactTrackers = api.GetFactTrackers(trackers); List <FactTracker> toAdd = new List <FactTracker>(); foreach (var fact in sensolusFactTrackers) { if (!dbFactTrackers.ContainsKey(fact.GetKeyValue())) { toAdd.Add(fact); } } conn.Insert(toAdd); }