public string ParseDateTime(string s) { try { AppData.CheckLoggedOn(); DateTime dateTime; object data = ScadaUtils.TryParseDateTime(s, out dateTime) ? (object)WebUtils.DateTimeToJs(dateTime) : null; return(JsSerializer.Serialize(new DataTransferObject(data))); } catch (Exception ex) { AppData.Log.WriteException(ex, Localization.UseRussian ? "Ошибка при преобразовани строки в число" : "Error parsing date and time"); return(GetErrorDtoJs(ex)); } }
public string GetEvents(int year, int month, int day, string cnlNums, int viewID, int lastCount, int startEvNum, long dataAge) { try { UserRights userRights; AppData.CheckLoggedOn(out userRights); // создание фильтра событий HashSet <int> cnlSet = GetCnlSet(cnlNums, viewID, userRights); EventTableLight.EventFilter eventFilter = cnlSet == null ? new EventTableLight.EventFilter(EventTableLight.EventFilters.None) : new EventTableLight.EventFilter(EventTableLight.EventFilters.Cnls); eventFilter.CnlNums = cnlSet; // получение событий DataAccess dataAccess = AppData.DataAccess; DateTime date = new DateTime(year, month, day); EventTableLight tblEvent = dataAccess.DataCache.GetEventTable(date); long newDataAge = WebUtils.DateTimeToJs(tblEvent.FileModTime); DispEvent[] eventsToSend; if (tblEvent.FileModTime > DateTime.MinValue && dataAge < newDataAge) { // применение фильтра событий bool reversed; List <EventTableLight.Event> events = tblEvent.GetFilteredEvents(eventFilter, lastCount, startEvNum, out reversed); // преобразование событий для передачи int evCnt = events.Count; eventsToSend = new DispEvent[evCnt]; if (reversed) { for (int i = 0, j = evCnt - 1; i < evCnt; i++, j--) { eventsToSend[i] = dataAccess.GetDispEvent(events[j], DataFormatter); } } else { for (int i = 0; i < evCnt; i++) { eventsToSend[i] = dataAccess.GetDispEvent(events[i], DataFormatter); } } } else { eventsToSend = new DispEvent[0]; } return(JsSerializer.Serialize(new ArcDTO(eventsToSend, newDataAge))); } catch (Exception ex) { AppData.Log.WriteException(ex, Localization.UseRussian ? "Ошибка при получении событий по фильтру, где каналы={0}, ид. представления={1}" : "Error getting events by the filter where channels={0}, view id={1}", cnlNums, viewID); return(GetErrorDtoJs(ex)); } }
/// <summary> /// Получить часовые данные входных каналов /// </summary> private HourCnlData[] GetHourCnlDataArr(int year, int month, int day, int startHour, int endHour, IList <int> cnlList, bool existing, ref long[] dataAgeArr) { if (startHour > endHour) { throw new ArgumentException("Start hour must be less or equal than end hour."); } DataAccess dataAccess = AppData.DataAccess; DataCache dataCache = dataAccess.DataCache; DateTime date = new DateTime(year, month, day); DateTime startDT = date.AddHours(startHour); DateTime startDate = startDT.Date; DateTime endDT = date.AddHours(endHour); DateTime endDate = endDT.Date; int hourCnt = endHour - startHour + 1; int dayCnt = (int)(endDate - startDate).TotalDays + 1; List <HourCnlData> hourCnlDataList = new List <HourCnlData>(hourCnt); long[] newDataAgeArr = new long[dayCnt]; DateTime nowDT = DateTime.Now; DateTime curDate = startDate; for (int dayInd = 0; dayInd < dayCnt; dayInd++) { SrezTableLight tblHour = dataCache.GetHourTable(curDate); long newDataAge = WebUtils.DateTimeToJs(tblHour.FileModTime); long prevDataAge = dayInd < dataAgeArr.Length ? dataAgeArr[dayInd] : 0; bool modified = prevDataAge <= 0 || prevDataAge < newDataAge; newDataAgeArr[dayInd] = newDataAge; DateTime nextDate = curDate.AddDays(1.0); if (existing) { // получение всех существующих часовых срезов DateTime dayStartDT = curDate > startDate ? curDate : startDT; DateTime dayEndDT = curDate < endDate ? nextDate : endDT; foreach (SrezTableLight.Srez snapshot in tblHour.SrezList.Values) { DateTime snapshotDT = snapshot.DateTime; if (dayStartDT <= snapshotDT && snapshotDT <= dayEndDT) { double hour = (snapshotDT - date).TotalHours; if (modified) { AppendHourCnlData(hourCnlDataList, hour, cnlList, snapshot, snapshotDT, nowDT); } else { AppendEmptyHourCnlData(hourCnlDataList, hour); } } } } else { // заполнение данных по целым часам int dayStartHour = curDate > startDate ? 0 : startDT.Hour; int dayEndHour = curDate < endDate ? 23 : endDT.Hour; for (int dayHour = dayStartHour; dayHour <= dayEndHour; dayHour++) { DateTime snapshotDT = curDate.AddHours(dayHour); SrezTableLight.Srez snapshot; tblHour.SrezList.TryGetValue(snapshotDT, out snapshot); double hour = (snapshotDT - date).TotalHours; if (modified) { AppendHourCnlData(hourCnlDataList, hour, cnlList, snapshot, snapshotDT, nowDT); } else { AppendEmptyHourCnlData(hourCnlDataList, hour); } } } curDate = nextDate; } dataAgeArr = newDataAgeArr; return(hourCnlDataList.ToArray()); }