tangxu
2023-04-10 7f8ba13a353ed3da5efbbbf623d586428f4bce96
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using Microsoft.AspNetCore.Mvc;
using System.Net;
using System.Net.Http.Headers;
using Microsoft.Extensions.Hosting.Internal;
using Microsoft.AspNetCore.Http.Extensions;
using IStation.Untity;
using Furion.DynamicApiController;
using System.ComponentModel.DataAnnotations;
using Mapster;
using IStation.Calculation;
 
namespace IStation.Application
{
    /// <summary>
    /// RunSpan
    /// </summary>
    [Route("Run/RunSpan/Mobile")]
    [ApiDescriptionSettings("Run", Name = "运行区间", Order = 799)]
    public class RunSpan_MobileController : IDynamicApiController
    {
 
        /// <summary>
        /// 通过 StationID 获取某天的运行区间信息(手机)
        /// </summary>
        [Route("GetByStationIDOfDay@V1.0")]
        [HttpGet]
        public List<MonitorRunSpanItemMobileDto> GetByStationIDOfDay
            (
                [Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")]
                long CorpID,
                [Required, Range(1, long.MaxValue, ErrorMessage = "StationID 必须大于0")]
                long StationID,
                [Required]
                DateTime Day
            )
        {
            var station = new Service.Station().GetByID(CorpID, StationID);
            if (station == null)
            {
                return default;
            }
 
            var group_list = new Service.MonitorPointGroup().GetByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, StationID);
            if (group_list == null || group_list.Count < 1)
            {
                return default;
            }
            group_list = group_list.Where(x => x.Flags != null && x.Flags.Contains(LogicFlags.机泵))
                                    .OrderBy(x => x.ParentIds == null ? 0 : x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
            if (group_list == null || group_list.Count < 1)
            {
                return default;
            }
 
            var monitor_list = new Service.MonitorPoint()
                    .GetExSignalWithSignalTypeByBelongTypeAndBelongID
                        (CorpID, ObjectType.Station, StationID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
 
            var vm_list = new List<MonitorRunSpanItemMobileDto>();
            foreach (var group in group_list)
            {
                var vm_item = new MonitorRunSpanItemMobileDto();
                vm_item.Name = group.Name;
                vm_item.Spans = new List<MonitorRunSpanMobileDto>();
                vm_list.Add(vm_item);
 
                var monitor_run_list = monitor_list?.Where(x =>x.GroupID==group.ID && x.SignalList.First().SignalType.Identifier == SignalType.运行状态).ToList();
                var monitor_run_default = monitor_run_list?.Find(x => x.Flags != null && x.Flags.Contains(LogicFlags.默认));
                if (monitor_run_default == null)
                    monitor_run_default = monitor_run_list?.FirstOrDefault();
 
                List<Model.MonitorRealRecordContent> record_list = null;
                if (monitor_run_default != null)
                {
                    record_list = new Service.MonitorRealRecord()
                        .GetContentBySignalIDOfDay(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID, Day);
                }
 
                if (record_list == null || record_list.Count < 1)
                {
                    var vm_span = new MonitorRunSpanMobileDto();
                    vm_span.RunStatus = RunStatus.Shut;
                    vm_span.StartTime = Day.Date;
                    var end_time = Day.Date.AddDays(1);
                    if (end_time > DateTime.Now)
                        end_time = DateTime.Now;
                    vm_span.EndTime = end_time;
                    vm_span.Duration = Math.Round((end_time - Day.Date).TotalSeconds,1);
                    vm_item.Spans.Add(vm_span);
                    continue;
                }
 
                foreach (var record in record_list)
                {
                    var run_status = 0;
                    if (double.TryParse(record.DataValue, out double data_value))
                    {
                        run_status = data_value > 0 ? 1 : 0;
                    }
                    var vm_span = vm_item.Spans.LastOrDefault();
                    if (vm_span == null)
                    {
                        vm_span = new MonitorRunSpanMobileDto();
                        vm_span.RunStatus = run_status;
                        vm_span.StartTime = record.DataTime;
                        vm_item.Spans.Add(vm_span);
                    }
                    if (run_status == vm_span.RunStatus)
                    {
                        var end_time = record.DataTime;
                        if (end_time > Day.Date.AddDays(1))
                            end_time = Day.Date.AddDays(1);
                        vm_span.EndTime = end_time;
                        vm_span.Duration = Math.Round((end_time - vm_span.StartTime).TotalSeconds,1);
                    }
                    else
                    {
                        vm_span.EndTime = record.DataTime;
                        var vm_span_next = new MonitorRunSpanMobileDto();
                        vm_span_next.RunStatus = run_status;
                        vm_span_next.StartTime = record.DataTime;
                        var end_time = record.DataTime;
                        if (end_time > Day.Date.AddDays(1))
                            end_time = Day.Date.AddDays(1);
                        vm_span_next.EndTime = end_time;
                        vm_span_next.Duration +=Math.Round( (end_time - record.DataTime).TotalSeconds,1);
                        vm_item.Spans.Add(vm_span_next);
                    }
                }
 
                vm_item.RumTime = Math.Round(vm_item.Spans.Where(x => x.RunStatus == RunStatus.Run).Sum(x => x.Duration),1);
            }
 
            return vm_list;
        }
 
       
 
 
 
 
 
 
 
    }
}