protected static async Task <bool> UpdateValue(PuskStopData dataRecord, PuskStopReaderRecord readerRecord) { if (String.IsNullOrEmpty(readerRecord.ValueIess)) { return(false); } double val0 = await EDSClass.getValFromServer(readerRecord.ValueIess, dataRecord.TimeOn); double val1 = await EDSClass.getValFromServer(readerRecord.ValueIess, dataRecord.TimeOff); dataRecord.ValueStart = val0; dataRecord.ValueEnd = val1; return(true); }
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); }
public static async Task <SortedList <int, List <PuskStopData> > > AnalizePuskStopDataFull(List <PuskStopReaderRecord> req, DateTime dateStart, DateTime dateEnd) { EDSReport report = new EDSReport(dateStart, dateEnd, EDSReportPeriod.sec); Dictionary <string, EDSReportRequestRecord> records = new Dictionary <string, EDSReportRequestRecord>(); foreach (PuskStopReaderRecord de in req) { EDSReportRequestRecord pointRec = null; if (!records.ContainsKey(de.iess)) { EDSPointInfo point = await EDSPointInfo.GetPointInfo(de.iess); pointRec = report.addRequestField(point, EDSReportFunction.val); records.Add(de.iess, pointRec); } else { pointRec = records[de.iess]; } de.rec = pointRec; if (!String.IsNullOrEmpty(de.ValueIess) && !records.ContainsKey(de.ValueIess)) { EDSPointInfo point = await EDSPointInfo.GetPointInfo(de.ValueIess); pointRec = report.addRequestField(point, EDSReportFunction.val); records.Add(de.ValueIess, pointRec); } } bool ok = await report.ReadData(); List <DateTime> keys = report.ResultData.Keys.ToList(); SortedList <int, List <PuskStopData> > FullResult = new SortedList <int, List <PuskStopData> >(); foreach (PuskStopReaderRecord readField in req) { bool inverted = readField.inverted; List <PuskStopData> result = new List <PuskStopData>(); FullResult.Add(FullResult.Count, result); SortedList <DateTime, double> data = new SortedList <DateTime, double>(); foreach (DateTime dt in keys) { data.Add(dt, report.ResultData[dt][readField.rec.Id]); } double val0 = data.Values.First(); PuskStopData record = new PuskStopData(); DateTime ds = dateStart.AddSeconds(0); if ((inverted && val0 < 0.5) || (!inverted && val0 > 0.9)) { try { DateTime dt = inverted ? data.First(de => de.Value > 0.5).Key : data.First(de => de.Value < 0.5).Key; record.TimeOff = dt; record.TimeOn = dateStart; record.Length = (dt - dateStart).TotalSeconds; ds = dt.AddSeconds(0); result.Add(record); } catch { record.TimeOn = dateStart; record.TimeOff = dateEnd; record.Length = (dateEnd - dateStart).TotalSeconds; result.Add(record); continue; } } while (ds <= dateEnd) { try { DateTime dt = inverted ? data.First(de => de.Key > ds && de.Value < 0.5).Key : data.First(de => de.Key > ds && de.Value > 0.5).Key; record = new PuskStopData(); record.TimeOn = dt; try { DateTime dt1 = inverted ? data.First(de => de.Key > dt && de.Value > 0.5).Key : data.First(de => de.Key > dt && de.Value < 0.5).Key; record.TimeOff = dt1; record.Length = (record.TimeOff - record.TimeOn).TotalSeconds; result.Add(record); ds = dt1.AddSeconds(0); } catch { record.TimeOff = dateEnd; record.Length = (record.TimeOff - record.TimeOn).TotalSeconds; result.Add(record); break; } } catch { break; } } } for (int i = 0; i < FullResult.Keys.Count; i++) { List <PuskStopData> data = FullResult[i]; PuskStopReaderRecord reqRec = req[i]; if (String.IsNullOrEmpty(reqRec.ValueIess)) { continue; } EDSReportRequestRecord requestRecord = records[reqRec.ValueIess]; foreach (PuskStopData pi in data) { if (report.ResultData.Keys.Contains(pi.TimeOn)) { pi.ValueStart = report.ResultData[pi.TimeOn][requestRecord.Id]; } else { pi.ValueStart = await EDSClass.getValFromServer(reqRec.ValueIess, pi.TimeOn); } if (report.ResultData.Keys.Contains(pi.TimeOff)) { pi.ValueEnd = report.ResultData[pi.TimeOff][requestRecord.Id]; } else { pi.ValueEnd = await EDSClass.getValFromServer(reqRec.ValueIess, pi.TimeOff); } } } return(FullResult); }