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