namespace IStation.Application { /// /// StationStatistics /// [Route("SZJT/Station/Statistics/Mobile")] [ApiDescriptionSettings("SZJT", Name = "泵站统计(手机)", Order = 1300)] public class StationStatistics_MobileController : IDynamicApiController { /// /// 获取单月统计记录 /// [Route("GetSingleMonthStatisticsInfo")] [HttpGet] public StationStatisticsMonthRecordMobileDto GetSingleMonthStatisticsInfo(long StationID, int Year, int Month) { var keyContent = $"SZJT_Station_Statistics_Mobile_GetSingleMonthStatisticsInfo_{StationID}_{Year}_{Month}"; var cacheKey = MemoryCacheKeyHelper.GetKey(MemoryCacheKey.WebApiLevel, MemoryCacheKey.Module, keyContent); var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var allMonitorList = new Yw.Service.MonitorPoint().GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.DataType.LogicSite, StationID); Yw.Service.MonitorPoint.PublishCache(cacheKey); if (allMonitorList == null || allMonitorList.Count < 1) { return default; } var startTime = new DateTime(Year, Month, 1); var endTime = startTime.AddMonths(1); var monthRecord = new StationStatisticsMonthRecordMobileDto(); for (DateTime dt = startTime.Date; dt < endTime.Date; dt = dt.AddDays(1)) { var dayRecord = new StationStatisticsDayRecordMobileDto(); dayRecord.Day = dt; dayRecord.Ws = null; dayRecord.Ed = null; monthRecord.DayRecords.Add(dayRecord); } var serviceRecord = new Yw.Service.MonitorRealRecord(); var monitor_ws = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.累积流量)); if (monitor_ws != null) { var ws_list = serviceRecord.GetLimitBySignalIDOfTimeRange(monitor_ws.SignalList.First().ID, startTime, endTime, 3600); if (ws_list != null && ws_list.Count > 0) { var first = ws_list.First(); var last = ws_list.Last(); if (double.TryParse(first.DataValue, out double firstDataValue) && double.TryParse(last.DataValue, out double lastDataValue)) { monthRecord.Ws = Math.Round(lastDataValue - firstDataValue, 2); } foreach (var dayRecord in monthRecord.DayRecords) { var ws_day_list = ws_list.Where(x => x.DataTime >= dayRecord.Day.Date && x.DataTime < dayRecord.Day.AddDays(1).Date && x.DataStatus.Count < 1).ToList(); if (ws_day_list != null && ws_day_list.Count > 0) { var firstDay = ws_day_list.First(); var lastDay = ws_day_list.Last(); if (double.TryParse(firstDay.DataValue, out double firstDayDataValue) && double.TryParse(lastDay.DataValue, out double lastDayDataValue)) { dayRecord.Ws = Math.Round(lastDayDataValue - firstDayDataValue, 2); } } } } } var monitor_ed = allMonitorList.Find(x => x.SignalList.Exists(t => t.SignalType.Code == Yw.Monitor.SignalType.有功电度)); if (monitor_ed != null) { var ed_list = serviceRecord.GetLimitBySignalIDOfTimeRange(monitor_ed.SignalList.First().ID, startTime, endTime, 3600); if (ed_list != null && ed_list.Count > 0) { var first = ed_list.First(); var last = ed_list.Last(); if (double.TryParse(first.DataValue, out double firstDataValue) && double.TryParse(last.DataValue, out double lastDataValue)) { monthRecord.Ed = Math.Round(lastDataValue - firstDataValue, 2); } foreach (var dayRecord in monthRecord.DayRecords) { var ed_day_list = ed_list.Where(x => x.DataTime >= dayRecord.Day.Date && x.DataTime < dayRecord.Day.AddDays(1).Date).ToList(); if (ed_day_list != null && ed_day_list.Count > 0) { var firstDay = ed_day_list.First(); var lastDay = ed_day_list.Last(); if (double.TryParse(firstDay.DataValue, out double firstDayDataValue) && double.TryParse(lastDay.DataValue, out double lastDayDataValue)) { dayRecord.Ed = Math.Round(lastDayDataValue - firstDayDataValue, 2); } } } } } return monthRecord; }, Yw.Service.ConfigHelper.CacheLevel1); return vm_list; } } }