ningshuxia
2022-12-01 391e0e408d09e698850eb5daaef485d088612b4f
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
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;
using IStation.Model;
using Microsoft.AspNetCore.Authorization;
using Furion.FriendlyException;
 
namespace IStation.Application
{
    /// <summary>
    /// MonitorGeneralRealRecord
    /// </summary>
    [Route("Run/MonitorGeneralRealRecord/Mgr")]
    [ApiDescriptionSettings("Run", Name = "监测常规实时记录(管理)", Order = 930)]
    public class MonitorGeneralRealRecord_MgrController : IDynamicApiController
    {
        /// <summary>
        /// 重新分析某天(仅针对一个常规实时分析测点一天的分析,会删除已有记录)
        /// </summary>
        [Route("AnalyAgainOfDay@V1.0")]
        [HttpPost]
        public AnalyAgainMonitorGeneralRealRecordOfDayResultDto AnalyAgainOfDay([Required] AnalyAgainMonitorGeneralRealRecordOfDayInput input)
        {
            var corpId = input.CorpID;
            var monitorId = input.MonitorPointID;
            var day = input.Day;
            var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(corpId,monitorId);
            if (monitor == null)
            {
                throw Oops.Oh(ErrorCodes.D001, $"测点:{monitorId}");
            }
            if (monitor.CronType != Model.Monitor.eCronType.Real)
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}","不是实时测点");
            }
            if (monitor.SourceType != Model.Monitor.eSourceType.Analyse)
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "不是分析测点");
            }
            if (string.IsNullOrEmpty(monitor.SourceParas))
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置分析参数");
            }
            var analyModel = Model.Monitor.AnalyseParameters.ToModel(monitor.SourceParas);
            if (analyModel == null)
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "分析参数配置错误");
            }
            if (string.IsNullOrEmpty(analyModel.FormulaType))
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置公式类型");
            }
            if (string.IsNullOrEmpty(analyModel.FormulaParas))
            {
                throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置公式参数");
            }
 
            var startTime = day.Date;//开始时间
            var endTime = day.AddDays(1).Date.AddSeconds(-1);//结束时间
            var getMonitorPoint = new Func<long, Model.MonitorPoint_Signal_SignalType>(x => {
                return new Service.MonitorPoint().GetExSignalWithSignalTypeByID(corpId, x);
            });
            var getLastRecord = new Func<long,long, Model.MonitorBasicRecord>((x,y) => {
                return new Service.MonitorRealRecord().GetLastBySignalIDOfDay(corpId, x, y, day.AddDays(-1));
            });
            var getRecordList = new Func<long, long, List<Model.MonitorBasicRecord>>((x, y) => {
                return new Service.MonitorRealRecord().GetBySignalIDOfDay(corpId, x, y, day)?.Select(t=>t as Model.MonitorBasicRecord).ToList();
            });
 
            List<Model.MonitorRealRecordPure> recordList = null;
            string msg = string.Empty;
            switch (analyModel.FormulaType)
            {
                case Model.Monitor.FormulaType.Calculation_SingleMapping://单一映射转换
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuSingleMapping
                            (startTime,endTime,monitor,analyModel.FormulaParas,getMonitorPoint,getRecordList,getLastRecord,out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_CompareMapping://比较映射转换
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuCompareMapping
                                (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_RangeMapping://区间映射转换
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuRangeMapping
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_OnceRatio://一元系数换算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuOnceRatio
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_TwiceRatio://二元系数换算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuTwiceRatio
                               (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_RunStatus://运行状态计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuRunStatus
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_Sum://和值计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuSum
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_Diff://差值计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuDiff
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_NumericAccumulate://数值累积计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuNumberAccumulate
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_EnumAccumulate://枚举累积计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuEnumAccumulate
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_E://效率计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuE
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_WP://千吨能耗计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuWP
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                case Model.Monitor.FormulaType.Calculation_UWP://单位能耗计算
                    {
                        recordList = MonitorFormulaHistoryCalcuHelper.CalcuUWP
                            (startTime, endTime, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
                    }
                    break;
                default:msg = $"不支持的公式类型:{analyModel.FormulaType}";break;
            }
 
            if (recordList == null || recordList.Count < 1)
            {
                return new AnalyAgainMonitorGeneralRealRecordOfDayResultDto(false, msg);
            }
            var bol = new Service.MonitorRealRecord().InsertsAgain(recordList);
            return new AnalyAgainMonitorGeneralRealRecordOfDayResultDto(bol, msg);
        }
 
 
 
    }
}