DaqEAlarmRecordService.cs
6.55 KB
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
using CNCFanucDataReading;
using FreeSql;
using FreeSql.Internal;
using System;
using System.Threading.Tasks;
namespace CNCFanucDataReading
{
public class DaqEAlarmRecordService : IDisposable
{
private readonly IFreeSql _fsql;
private bool _disposed = false;
public DaqEAlarmRecordService(string connectionString)
{
if (string.IsNullOrEmpty(connectionString))
throw new ArgumentException("数据库连接字符串不能为空", nameof(connectionString));
_fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, connectionString)
.UseAutoSyncStructure(false) // 自动同步实体结构到数据库
.Build();
}
/// <summary>
/// 保存报警信息
/// </summary>
public async Task SaveAlarmInfo(DaqEAlarmRecord daqEAlarmRecord)
{
if (daqEAlarmRecord == null)
return;
try
{
// 检查是否已存在相同的当前报警
var existingAlarm = await _fsql.Select<DaqEAlarmRecord>()
.Where(a => a.EquipmentCode == daqEAlarmRecord.EquipmentCode)
.Where(a => a.AlarmMessage == daqEAlarmRecord.AlarmMessage)
.Where(a => a.IsEnd == false) // 当前未解除的报警
.FirstAsync();
if (existingAlarm == null)
{
// 新报警,插入记录
daqEAlarmRecord.IsEnd = false;
daqEAlarmRecord.ErrorDuration = 5;
daqEAlarmRecord.IsHandled = false ;
daqEAlarmRecord.CreateTime = DateTime.Now;
daqEAlarmRecord.UpdateTime = DateTime.Now;
await _fsql.Insert(daqEAlarmRecord).ExecuteAffrowsAsync();
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {daqEAlarmRecord.EquipmentName} 新报警记录: {daqEAlarmRecord.AlarmMessage}");
}
else
{
// 已存在的报警,更新记录(更新时间,持续时间)
existingAlarm.UpdateTime = DateTime.Now;
existingAlarm.ErrorDuration =Convert.ToInt32((DateTime.Now - existingAlarm.CreateTime).TotalSeconds);
await _fsql.Update<DaqEAlarmRecord>()
.SetSource(existingAlarm)
.UpdateColumns(a => new { a.UpdateTime, a.ErrorDuration })
.ExecuteAffrowsAsync();
}
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 保存报警信息失败: {ex.Message}");
}
}
/// <summary>
/// 更新报警状态为已解除
/// </summary>
//public async Task UpdateAlarmIsEnd(string equipmentCode, string alarmMessage)
//{
// try
// {
// await _fsql.Update<DaqEAlarmRecord>()
// .Set(a => a.IsEnd, true)
// .Set(a => a.UpdateTime, DateTime.Now)
// .Where(a => a.EquipmentCode == equipmentCode)
// .Where(a => a.AlarmMessage == alarmMessage)
// .Where(a => a.IsEnd == false) // 只更新未解除的报警
// .ExecuteAffrowsAsync();
// }
// catch (Exception ex)
// {
// Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 更新报警状态失败: {ex.Message}");
// }
//}
/// <summary>
/// 批量保存报警信息
/// </summary>
public async Task SaveBatchAlarms(List<DaqEAlarmRecord> alarmInfos)
{
if (alarmInfos == null || alarmInfos.Count == 0)
return;
try
{
foreach (var alarm in alarmInfos)
{
await SaveAlarmInfo(alarm);
}
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 批量保存报警信息失败: {ex.Message}");
}
}
/// <summary>
/// 更新单条报警为已解除
/// </summary>
public async Task<bool> UpdateAlarmIsEnd(string equipmentCode, string alarmMessage)
{
try
{
var result = await _fsql.Update<DaqEAlarmRecord>()
.Set(a => a.IsEnd, true)
.Set(a => a.UpdateTime, DateTime.Now)
.Where(a => a.EquipmentCode == equipmentCode)
.Where(a => a.AlarmMessage == alarmMessage)
.Where(a => a.IsEnd == false) // 只更新未解除的报警
.ExecuteAffrowsAsync();
return result > 0;
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 更新报警状态失败: {ex.Message}");
return false;
}
}
/// <summary>
/// 批量更新报警为已解除
/// </summary>
public async Task<int> BatchResolveAlarmsAsync(string equipmentCode, List<string> alarmMessages)
{
try
{
var result = await _fsql.Update<DaqEAlarmRecord>()
.Set(a => a.IsEnd, true)
.Set(a => a.UpdateTime, DateTime.Now)
.Where(a => a.EquipmentCode == equipmentCode)
.Where(a => alarmMessages.Contains(a.AlarmMessage))
.Where(a => a.IsEnd == false)
.ExecuteAffrowsAsync();
return result;
}
catch (Exception ex)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 批量更新报警状态失败: {ex.Message}");
return 0;
}
}
/// <summary>
/// 获取设备未解除的报警列表
/// </summary>
public async Task<List<DaqEAlarmRecord>> GetUnresolvedAlarmsByEquipmentAsync(string equipmentCode)
{
return await _fsql.Select<DaqEAlarmRecord>()
.Where(a => a.EquipmentCode == equipmentCode)
.Where(a => a.IsEnd == false)
.ToListAsync();
}
public void Dispose()
{
if (!_disposed)
{
_fsql?.Dispose();
_disposed = true;
}
}
}
}