lixiaojun
2024-05-15 e45eab5980c08520aee01a72224ccdfd12600543
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
namespace IStation.Application
{
    /// <summary>
    /// StationStatistics
    /// </summary>
    [Route("SZJT/Station/Statistics/Mobile")]
    [ApiDescriptionSettings("SZJT", Name = "泵站统计(手机)", Order = 1300)]
    public class StationStatistics_MobileController : IDynamicApiController
    {
 
        /// <summary>
        /// 获取单月统计记录
        /// </summary>
        [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;
 
        }
 
 
    }
}