You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
6.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Autofac;
using Common.Const;
using Entity.DbModel.Station;
using HybirdFrameworkCore.Autofac;
using Repository.Station;
namespace Service;
public class FaultHandling
{
public EquipAlarmDefineRepository EquipAlarmDefineRepository=AppInfo.Container.Resolve<EquipAlarmDefineRepository>();
public EquipAlarmRecordRepository EquipAlarmRecordRepository=AppInfo.Container.Resolve<EquipAlarmRecordRepository>();
public EquipAlarmProcessRecordRepository EquipAlarmProcessRecordRepository =AppInfo.Container.Resolve<EquipAlarmProcessRecordRepository>();
//设备不唯一的情况下设备编码加EquipAlarmDefine中报警编码组成实时报警中的报警编码
//没有报警也要把编码传进来,以为例如充电机不是一个数据帧报过来的
//情况1没有报警编码直接消除
//情况2收到报警编码消失消除
/// <summary>
/// 设备报警批量处理方法,统一调用方法
/// </summary>
/// <param name="lstAlarm">设备报警列表</param>
/// <param name="equip_type_code">设备编码
/// 0充电机
/// 1电表
/// 2液冷机
/// 3plc
/// 4电池
/// 5消防
/// 6rfid
/// 7Ups
/// 8温湿度
/// </param>
/// <param name="equip_code">设备编码,数字类型</param>
/// <param name="type">报警编码为空是否直接消除</param>
/// <param name="created_by">创建人--同一帧数据创建人相同用123...代替,以此递增</param>
public void SaveAlarmInfo(List<string> lstAlarm,EquipmentType equip_type_code,string equip_code,bool type,string created_by="1")
{
if (lstAlarm.Count > 0)
{
#region 有报警比较两边差异,新出现的报警就添加,消失的报警就处理并记录
var lstEquipAlarmRecord = EquipAlarmRecordRepository.QueryListByClause(i =>
i.EquipTypeCode == (int)equip_type_code && i.CreatedBy == created_by);
var sqllstAlarm = lstEquipAlarmRecord.Select(obj => obj.ErrorCode).ToList();
// 找出实时报警中存在但数据库中不存在的元素
List<string> uniqueToList1 = lstAlarm.Except(sqllstAlarm).ToList();
// 找出数据库中存在但实时报警中不存在的元素
List<string> uniqueToList2 = sqllstAlarm.Except(lstAlarm).ToList();
if (uniqueToList1.Count > 0)
{
//这里要添加新的报警数据
foreach (var errorCode in uniqueToList1)
{
EquipAlarmDefine? alarmDefine =
EquipAlarmDefineRepository.SelectByEquipCodeAndErrorCode((int)equip_type_code, equip_code);
if (alarmDefine != null)
{
EquipAlarmRecord record = new EquipAlarmRecord()
{
EquipTypeCode = (int)alarmDefine.EquipTypeCode,
EquipCode = alarmDefine.EquipCode,
ErrorCode = errorCode,//因为像充电机设备不唯一的情况,报警编码会在前面加上设备编码用来区分
ErrorLevel = alarmDefine.ErrorLevel,
ErrorMsg = alarmDefine.ErrorMsg,
ProcessMethod = alarmDefine.ProcessMethod,
StartTime = DateTime.Now
};
EquipAlarmRecordRepository.Insert(record);
}
}
}
if (uniqueToList2.Count > 0)
{
//这些是要清除实时报警,并且处理记录的。
// 使用LINQ找出ErrorCode在uniqueToList2中的EquipAlarmRecord对象
List<EquipAlarmRecord> filteredObjectList = lstEquipAlarmRecord
.Where(obj => uniqueToList2.Contains(obj.ErrorCode))
.ToList();
foreach (var VARIABLE in filteredObjectList)
{
EquipAlarmProcessRecord EquipAlarmProcessRecord = new EquipAlarmProcessRecord();
EquipAlarmProcessRecord.EquipTypeCode = VARIABLE.EquipTypeCode;
EquipAlarmProcessRecord.EquipCode = VARIABLE.EquipCode;
EquipAlarmProcessRecord.ErrorCode = VARIABLE.ErrorCode;
EquipAlarmProcessRecord.ErrorLevel = VARIABLE.ErrorLevel;
EquipAlarmProcessRecord.ErrorMsg = VARIABLE.ErrorMsg;
EquipAlarmProcessRecord.ProcessMethod = VARIABLE.ProcessMethod;
EquipAlarmProcessRecord.StartTime = VARIABLE.StartTime;
EquipAlarmProcessRecord.ProcessTime = DateTime.Now;
EquipAlarmProcessRecordRepository.Insert(EquipAlarmProcessRecord);
}
EquipAlarmRecordRepository.Delete(filteredObjectList);
}
#endregion
}
else if(type)
{
#region 没报警把已处理记录更新并删除实时报警
var lstEquipAlarmRecord = EquipAlarmRecordRepository.QueryListByClause(i =>
i.EquipTypeCode == (int)equip_type_code && i.CreatedBy == created_by);
if (lstEquipAlarmRecord.Count > 0)
{
foreach (var VARIABLE in lstEquipAlarmRecord)
{
EquipAlarmProcessRecord EquipAlarmProcessRecord = new EquipAlarmProcessRecord();
EquipAlarmProcessRecord.EquipTypeCode = VARIABLE.EquipTypeCode;
EquipAlarmProcessRecord.EquipCode = VARIABLE.EquipCode;
EquipAlarmProcessRecord.ErrorCode = VARIABLE.ErrorCode;
EquipAlarmProcessRecord.ErrorLevel = VARIABLE.ErrorLevel;
EquipAlarmProcessRecord.ErrorMsg = VARIABLE.ErrorMsg;
EquipAlarmProcessRecord.ProcessMethod = VARIABLE.ProcessMethod;
EquipAlarmProcessRecord.StartTime = VARIABLE.StartTime;
EquipAlarmProcessRecord.ProcessTime = DateTime.Now;
EquipAlarmProcessRecordRepository.Insert(EquipAlarmProcessRecord);
}
}
EquipAlarmRecordRepository.Delete(lstEquipAlarmRecord);
#endregion
}
}
}