protected List <PuskStopData> createPuskStopData(string type_data, Dictionary <string, List <PuskStopData> > DiffData) { List <PuskStopData> result = new List <PuskStopData>(); DiagDBEntities diagDB = new DiagDBEntities(); IEnumerable <PuskStopInfo> req = (from pi in diagDB.PuskStopInfoes where pi.GG == GG && pi.TypeData.Contains(type_data) && pi.TimeOff > DateStart && pi.TimeOn < DateEnd orderby pi.TimeOn select pi); PuskStopData prevData = null; PuskStopData last = null; bool first = true; foreach (PuskStopInfo pi in req) { if (first && pi.TimeOn > DateStart) { try { PuskStopInfo rf = (from p in diagDB.PuskStopInfoes where p.GG == GG && p.TypeData.Contains(type_data) && p.TimeOff < DateStart orderby p.TimeOff descending select p).First(); prevData = new PuskStopData(); prevData.TimeOff = rf.TimeOff; prevData.ValueStart = rf.ValueStart; prevData.ValueEnd = rf.ValueEnd; } catch { } } first = false; PuskStopData dat = new PuskStopData(); dat.Length = pi.Length; dat.TimeOn = pi.TimeOn; dat.TimeOff = pi.TimeOff; dat.ValueEnd = pi.ValueEnd; dat.ValueStart = pi.ValueStart; dat.TypeData = pi.TypeData; dat.Comment = ""; dat.PrevRecord = prevData; prevData = dat; result.Add(dat); if (DiffData != null && !DiffData.ContainsKey(pi.TypeData)) { DiffData.Add(pi.TypeData, new List <PuskStopData>()); } DiffData[pi.TypeData].Add(dat); last = dat; } return(result); }
public async static Task <bool> FillPuskStopData(List <PuskStopReaderRecord> reqList, DateTime dateStart, DateTime dateEnd) { try { EDSClass.Disconnect(); } catch { } EDSClass.Connect(); if (!EDSClass.Connected) { return(false); } /*bool ok = await RefreshLevelsMNU(reqList, dateStart, dateEnd); * return ok;*/ SortedList <int, List <PuskStopData> > FullResult = await AnalizePuskStopDataFull(reqList, dateStart, dateEnd); for (int index = 0; index < reqList.Count; index++) { List <PuskStopData> data = FullResult[index]; PuskStopReaderRecord reqRecord = reqList[index]; int gg = reqRecord.gg; string typeData = reqRecord.DBRecord; if (data.Count > 0) { DiagDBEntities diagDB = new DiagDBEntities(); PuskStopData first = data.First(); PuskStopData last = data.Last(); IQueryable <PuskStopInfo> reqFirst = from pi in diagDB.PuskStopInfoes where pi.GG == gg && pi.TypeData == typeData && pi.TimeOff == first.TimeOn select pi; if (reqFirst.Count() > 0) { PuskStopInfo firstDB = reqFirst.First(); firstDB.TimeOff = first.TimeOff; firstDB.Length = (firstDB.TimeOff - firstDB.TimeOn).TotalSeconds; firstDB.ValueEnd = first.ValueEnd; diagDB.SaveChanges(); if (data.Count > 1) { data.RemoveAt(0); } else { continue; } } IQueryable <PuskStopInfo> reqLast = from pi in diagDB.PuskStopInfoes where pi.GG == gg && pi.TypeData == typeData && pi.TimeOn == last.TimeOff select pi; if (reqLast.Count() > 0) { PuskStopInfo lastDB = reqLast.First(); lastDB.TimeOn = last.TimeOn; lastDB.Length = (lastDB.TimeOff - lastDB.TimeOn).TotalSeconds; lastDB.ValueStart = last.ValueStart; diagDB.SaveChanges(); if (data.Count > 0) { data.Remove(last); } else { continue; } } IQueryable <PuskStopInfo> req = from pi in diagDB.PuskStopInfoes where pi.GG == gg && pi.TypeData == typeData && pi.TimeOn > dateStart && pi.TimeOn <= dateEnd select pi; SortedList <DateTime, PuskStopInfo> dataDB = new SortedList <DateTime, PuskStopInfo>(); foreach (PuskStopInfo pi in req) { if (!dataDB.ContainsKey(pi.TimeOn)) { dataDB.Add(pi.TimeOn, pi); } } foreach (PuskStopData rec in data) { PuskStopInfo recDB = new PuskStopInfo(); if (dataDB.ContainsKey(rec.TimeOn)) { recDB = dataDB[rec.TimeOn]; } recDB.GG = gg; recDB.TypeData = typeData; recDB.TimeOn = rec.TimeOn; recDB.TimeOff = rec.TimeOff; recDB.Length = rec.Length; recDB.ValueEnd = rec.ValueEnd; recDB.ValueStart = rec.ValueStart; recDB.Comment = ""; if (!dataDB.ContainsKey(rec.TimeOn)) { diagDB.PuskStopInfoes.Add(recDB); } } diagDB.SaveChanges(); } } return(true); }