lixiaojun
2023-04-12 fc6b7c9852f18e42fb9bccaf0cc22fbe5389d179
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IStation.Untity;
 
namespace IStation.Server
{
    /// <summary>
    /// 监测处理辅助类
    /// </summary>
    public class MonitorHandleHelper 
    {
 
        /// <summary>
        /// 处理
        /// </summary>
        public static bool Handle(Model.MonitorDataDockingCorpRecord data)
        {
            try
            {
 
                #region 数据验证
 
                if (data == null)
                {
                    LogHelper.Info("监测接收数据处理中,监测接收数据序列化失败,自动跳过当前数据!");
                    return true;
                }
                if (data.Records == null || data.Records.Count < 1)
                {
                    LogHelper.Info($"监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID},接收记录为空,自动跳过当前数据!");
                    return true;
                }
                data.Records = data.Records.Where(x => !string.IsNullOrEmpty(x.SrcValue)).ToList();
                if (data.Records.Count < 1)
                {
                    LogHelper.Info($" 监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID},有效接收记录为空,自动跳过当前数据!");
                    return true;
                }
                var configure = new Service.DataDockingConfigure().GetByID(data.CorpID, data.ConfigureID);
                if (configure == null)
                {
                    LogHelper.Info($"监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID},未检索到数据对接配置信息,自动跳过当前数据!");
                    return true;
                }
                if (configure.UseStatus != Model.eUseStatus.Enable)
                {
                    LogHelper.Info($"监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID},未检索到有效数据对接配置信息,自动跳过当前数据!");
                    return true;
                }
 
                #endregion
 
                #region 处理日志
 
                if (ConfigHelper.IsWriteLog)
                {
                    LogHelper.Info($"监测接收数据处理中,处理数据:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{data.Records.Count}");
                }
 
                #endregion
 
                #region 流程记录生成
 
                var sysId_list = data.Records.Select(x => x.SysId).ToList();
                var dataDockingRecord = new Model.MonitorDataDockingFlowRecord();
                dataDockingRecord.CorpID = data.CorpID;
                dataDockingRecord.ConfigureID = data.ConfigureID;
                dataDockingRecord.DockingTime =DateTime.Now;
                dataDockingRecord.DockingCount = data.Records.Count;
                dataDockingRecord.DockingContent = sysId_list;
                new RedisCache.MonitorDataDockingFlowRecordCacheHelper().SetLastRecord(dataDockingRecord);
 
                #endregion
 
                #region 数据处理
 
                var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(data.CorpID, data.Records.Select(x => x.SysId).ToList());
                if (monitor_list == null || monitor_list.Count < 1)
                {
                    LogHelper.Info($"监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 未检索到测点信息,自动跳过当前数据!");
                    return true;
                }
                monitor_list = monitor_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
                if (monitor_list.Count < 1)
                {
                    LogHelper.Info($"监测接收数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 未检索到有效测点信息,自动跳过当前数据!");
                    return true;
                }
 
                //最后一次记录列表
                var record_last_list = RecordCacheHelper.Get(data.CorpID,monitor_list.Select(x=>x.ID).Distinct());
                if (record_last_list == null || record_last_list.Count < 1)
                {
                    record_last_list = new RedisCache.MonitorRecordCacheHelper().GetLastRecord(data.CorpID, monitor_list.Select(x => x.ID));
                }
 
                //保持数据时间的统一
                var dt_now = DateTime.Now;
 
                //遍历处理
                var record_list = new List<Model.MonitorBasicRecord>();
                foreach (var monitor in monitor_list)
                {
                    switch (monitor.MonitorType)
                    {
                        case Model.eMonitorType.General:
                            {
                                //信号
                                var signal = monitor.SignalList.FirstOrDefault();
                                if (signal == null)
                                {
                                    break;
                                }
                                //对接记录
                                var record_docking = data.Records.Find(t => t.SysId == monitor.ID);
                                if (record_docking == null)
                                {
                                    break;
                                }
                                if (record_docking.RecordType != Model.eMonitorType.General)
                                {
                                    break;
                                }
                                //上一次记录
                                var record_last = record_last_list?.Find(x => x.MonitorPointID == monitor.ID);
                                var record =Calculation.MonitorHandleHelper.Handle(monitor,signal,record_docking,record_last, dt_now);
                                if (record != null)
                                    record_list.Add(record);
 
                            }
                            break;
                        case Model.eMonitorType.Vibration:
                            {
                                //对接记录
                                var record_docking = data.Records.Find(t => t.SysId == monitor.ID);
                                if (record_docking == null)
                                {
                                    break;
                                }
                                if (record_docking.RecordType != Model.eMonitorType.Vibration)
                                {
                                    break;
                                }
                                var sub_record_list = Model.MonitorDataDockingReceiveSubRecord.ToList(record_docking.SrcValue);
                                if (sub_record_list != null && sub_record_list.Count > 0)
                                {
                                    foreach (var sub_record in sub_record_list)
                                    {
                                        var signal = monitor.SignalList?.FirstOrDefault(x => x.ID == sub_record.SysId);
                                        if (signal == null)
                                            continue;
                                        var record_docking_sub = new Model.MonitorDataDockingReceiveRecord()
                                        {
                                            SysId = record_docking.SysId,
                                            RecordType = record_docking.RecordType,
                                            SrcTime = record_docking.SrcTime,
                                            SrcValue = sub_record.SrcValue,
                                            DataStatus=record_docking.DataStatus
                                        };
                                        var record_last = record_last_list?.Find(x => x.MonitorPointID == monitor.ID && x.SignalID == sub_record.SysId);
                                        var record = Calculation.MonitorHandleHelper.Handle(monitor,signal,record_docking_sub,record_last,dt_now);
                                        if(record!=null)
                                            record_list.Add(record);
                                    }
                                }
                            }
                            break;
                        default: 
                            {
                                LogHelper.Error($"接收数据记录处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID}, 测点标识:{monitor.ID} 的监测类型为:{monitor.MonitorType},暂时不支持对接!");
                            }
                            break; 
                    }
                }
 
                //数据判断
                if (record_list == null || record_list.Count < 1)
                {
                    LogHelper.Error($"接收记录数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据处理后为空,自动跳过当前数据!");
                    return true;
                }
 
                RecordCacheHelper.Set(data.CorpID,record_list);
 
                #endregion
 
                #region 数据存储
 
                #region 实时记录
 
                var record_real_list = record_list.Where(x => x is Model.MonitorRealRecordPure).Select(x => x as Model.MonitorRealRecordPure).ToList();
                if (record_real_list != null && record_real_list.Count > 0)
                {
                    var result = new Service.MonitorRealRecord().InsertsLastRecord(record_real_list);
                    if (!result)
                    {
                        LogHelper.Info($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 实时数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存实时记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_real_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #region 时记录
 
                var record_hour_list = record_list.Where(x => x is Model.MonitorHourRecordPure).Select(x => x as Model.MonitorHourRecordPure).ToList();
                if (record_hour_list != null && record_hour_list.Count > 0)
                {
                    var result = new Service.MonitorHourRecord().InsertsLastRecord(record_hour_list);
                    if (!result)
                    {
                        LogHelper.Info($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 时数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存时记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_hour_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #region 日记录
 
                var record_day_list = record_list.Where(x => x is Model.MonitorDayRecordPure).Select(x => x as Model.MonitorDayRecordPure).ToList();
                if (record_day_list != null && record_day_list.Count > 0)
                {
                    var result = new Service.MonitorDayRecord().InsertsLastRecord(record_day_list);
                    if (!result)
                    {
                        LogHelper.Info($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 日数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存日记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_day_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #region 周记录
 
                var record_week_list = record_list.Where(x => x is Model.MonitorWeekRecordPure).Select(x => x as Model.MonitorWeekRecordPure).ToList();
                if (record_week_list != null && record_week_list.Count > 0)
                {
                    var result = new Service.MonitorWeekRecord().InsertsLastRecord(record_week_list);
                    if (!result)
                    {
                        LogHelper.Error($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 周数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存周记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_week_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #region 月记录
 
                var record_month_list = record_list.Where(x => x is Model.MonitorMonthRecordPure).Select(x => x as Model.MonitorMonthRecordPure).ToList();
                if (record_month_list != null && record_month_list.Count > 0)
                {
                    var result = new Service.MonitorMonthRecord().InsertsLastRecord(record_month_list);
                    if (!result)
                    {
                        LogHelper.Error($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 月数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存月记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_month_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #region 年记录
 
                var record_year_list = record_list.Where(x => x is Model.MonitorYearRecordPure).Select(x => x as Model.MonitorYearRecordPure).ToList();
                if (record_year_list != null && record_year_list.Count > 0)
                {
                    var result = new Service.MonitorYearRecord().InsertsLastRecord(record_year_list);
                    if (!result)
                    {
                        LogHelper.Error($"数据处理中,客户标识:{data.CorpID},配置标识:{data.ConfigureID} 年数据存储失败!");
                    }
                    else
                    {
                        if (ConfigHelper.IsWriteLog)
                        {
                            LogHelper.Info($"监测接收数据处理中,保存年记录:客户标识:{data.CorpID},配置标识:{data.ConfigureID},数据数量:{record_year_list.Count}");
                        }
                    }
                }
 
                #endregion
 
                #endregion
 
                #region 运行数据分发
 
                var runQueue = new RabbitMqExChangeHelper();
                runQueue.Push(ConfigHelper.RunExchangeName, record_list);
 
                #endregion
 
                return true;
 
            }
            catch (Exception ex)
            {
                LogHelper.Error("接收数据记录处理失败,自动跳过当前数据!", ex);
                return true;
            }
        }
 
 
 
 
    }
}