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 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); }