Compare commits

...

1 Commits
master ... dev

Author SHA1 Message Date
wenjy 06883ec1b5 change - 添加异常数据记录 3 weeks ago

@ -57,5 +57,11 @@ namespace Sln.Iot.Model.dao
/// </summary>
[SugarColumn(ColumnName = "cause")]
public string cause { get; set; }
/// <summary>
/// 告警记录ID推送数据使用ORM不用
/// </summary>
[SugarColumn(IsIgnore = true)]
public long alarmId { get; set; }
}
}

@ -0,0 +1,83 @@
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2025 Wen JY
* CLR4.0.30319.42000
* ThinkPad T14
* Sln.Iot.Model.dao
* 50695B31-9DE2-4EE5-A13D-D58B53CDEBBA
*
* WenJY
*
* 2025-06-05 10:38:09
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using SqlSugar;
namespace Sln.Iot.Model.dao;
///<summary>
///告警数据记录
///</summary>
[SugarTable("ems_record_alarm_data"), Tenant("tao_iot")]
public class RecordAlarmData
{
/// <summary>
/// 编号
///</summary>
[SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true)]
public long objid { get; set; }
/// <summary>
/// Desc:计量设备编号
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,ColumnName="monitor_id")]
public string monitorId {get;set;}
/// <summary>
/// Desc:采集设备编号
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="collect_device_id")]
public string collectDeviceId {get;set;}
/// <summary>
/// 触发规则0大于 1小于
/// </summary>
[SugarColumn(ColumnName = "alarm_type")]
public int triggerRule { get; set; }
/// <summary>
/// 监测字段0温度1湿度2振动-速度(mm/s)3振动-位移(um)4振动-加速度(g)5振动-温度(℃),6-噪音7-照度)
/// </summary>
[SugarColumn(ColumnName = "cause")]
public int monitorField { get;set; }
/// <summary>
/// 告警值
/// </summary>
[SugarColumn(ColumnName = "alarm_data")]
public decimal alarmValue { get;set; }
/// <summary>
/// 采集时间
///</summary>
[SugarColumn(ColumnName="collect_time" )]
public DateTime? collectTime { get; set; }
}

@ -19,7 +19,7 @@ namespace Sln.Iot.Model.dto
/// 是否报警1-是;0-否
/// </summary>
public int isFlag { get;set; }
/// <summary>
/// 设备参数
/// </summary>

@ -1,5 +0,0 @@
namespace Sln.Iot.Repository;
public class Class1
{
}

@ -0,0 +1,9 @@
using Sln.Iot.Model.dao;
using Sln.Iot.Repository.service.@base;
namespace Sln.Iot.Repository.service;
public interface IRecordAlarmDataService:IBaseService<RecordAlarmData>
{
}

@ -0,0 +1,36 @@
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2025 Wen JY
* CLR4.0.30319.42000
* ThinkPad T14
* Sln.Iot.Repository.service.Impl
* 0838E02D-6FDB-4D1D-8A1F-B78B582EE185
*
* WenJY
*
* 2025-06-05 10:46:10
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using Sln.Iot.Model.dao;
using Sln.Iot.Repository.service.@base;
namespace Sln.Iot.Repository.service.Impl;
public class RecordAlarmDataServiceImpl: BaseServiceImpl<RecordAlarmData>, IRecordAlarmDataService
{
public RecordAlarmDataServiceImpl(Repository<RecordAlarmData> rep) : base(rep)
{
}
}

@ -28,6 +28,8 @@ namespace Sln.Iot.Serial
IBaseAlarmRuleService _alarmRuleService = service.GetService<IBaseAlarmRuleService>();
IRecordAlarmDataService _alarmDataService = service.GetService<IRecordAlarmDataService>();
WebSocketBusiness webSocket = service.GetService<WebSocketBusiness>();
var logger = service.GetService<SerilogHelper>();
@ -108,7 +110,7 @@ namespace Sln.Iot.Serial
logger.Info($"物联网数据保存{(inRes ? "" : "")}");
ParamAlarmFilter(iotEnvInstants,_alarmRuleService,logger, webSocket);
ParamAlarmFilter(iotEnvInstants,_alarmRuleService,logger, webSocket,_alarmDataService);
}
catch (Exception ex)
{
@ -127,7 +129,7 @@ namespace Sln.Iot.Serial
}
}
private static void ParamAlarmFilter(List<RecordIotEnvInstant> iotEnvInstants, IBaseAlarmRuleService _alarmRuleService, SerilogHelper _logger, WebSocketBusiness _webSocket)
private static void ParamAlarmFilter(List<RecordIotEnvInstant> iotEnvInstants, IBaseAlarmRuleService _alarmRuleService, SerilogHelper _logger, WebSocketBusiness _webSocket,IRecordAlarmDataService _alarmDataService)
{
if (iotEnvInstants == null)
{
@ -170,11 +172,26 @@ namespace Sln.Iot.Serial
: 0;
var comparer = CreateComparer(rule.triggerRule);
if (comparer(paramValue, rule.triggerValue))
{
var alarmId=SnowFlakeSingle.Instance.NextId();
rule.alarmId = alarmId;
ruleRes.Add(rule);
alarmContents.Add($"{item.monitorId}传感器数据在{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}触发{rule.ruleName}异常告警,告警规则:{(rule.triggerRule == 0 ? "" : "")},阈值:{rule.triggerValue},详细信息:{rule.cause}");
SaveAlarmData(new RecordAlarmData()
{
objid = alarmId,
monitorId = item.monitorId,
collectDeviceId = item.monitorId.substring(0,5),
triggerRule = rule.triggerRule,
monitorField = rule.monitorField,
alarmValue = paramValue,
collectTime = DateTime.Now,
},_alarmDataService,_logger);
}
}
@ -194,5 +211,22 @@ namespace Sln.Iot.Serial
}
}
private static void SaveAlarmData(RecordAlarmData alarmData,IRecordAlarmDataService _alarmDataService, SerilogHelper _logger)
{
try
{
var insert = _alarmDataService.Insert(alarmData);
string str = JsonConvert.SerializeObject(alarmData);
_logger.Info($"传感器:{alarmData.monitorId};告警数据:{str},保存{(insert ? "" : "")}");
}
catch (Exception e)
{
_logger.Info($"传感器:{alarmData.monitorId};告警数据保存异常:{e.Message}");
}
}
}
}

@ -19,10 +19,4 @@
<ProjectReference Include="..\Sln.Iot.Socket\Sln.Iot.Socket.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="libnserial.so.1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

Binary file not shown.

@ -28,9 +28,6 @@
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="libnserial.so.1">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

Binary file not shown.
Loading…
Cancel
Save