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.

139 lines
6.4 KiB

using Common.Const;
using DotNetty.Transport.Channels;
using Entity.DbModel.Station;
5 months ago
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Repository.Station;
5 months ago
using Service.Charger.Handler;
5 months ago
using Service.WaterCool.Client;
5 months ago
using Service.WaterCool.Msg.WaterCool;
namespace Service.WaterCool.Handler;
[Order(8)]
[Scope("InstancePerDependency")]
public class WaterCoolStatusHandler : SimpleChannelInboundHandler<WaterCoolStatus>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(WaterCoolStatusHandler));
public EquipAlarmRecordRepository EquipAlarmRecordRepository { get; set; }
5 months ago
public EquipAlarmDefineRepository EquipAlarmDefineRepository { get; set; }
public EquipAlarmProcessRecordRepository EquipAlarmProcessRecordRepository { get; set; }
5 months ago
protected override void ChannelRead0(IChannelHandlerContext ctx, WaterCoolStatus msg)
{
Log.Info($"receive OtherMsg={msg}");
5 months ago
if (WaterCoolClientMgr.TryGetClient(ctx.Channel, out string sn, out WaterCoolClient? client))
{
WaterCoolClientMgr.Dictionary[sn].WaterCoolStatus = msg;
WaterCoolClientMgr.Dictionary[sn].IsConnect = true;
if (msg != null && msg.TmsTroubleCode >= 1)
{
SaveAlarmInfo(new List<string> { msg.TmsTroubleCode.ToString() }, sn);
}
5 months ago
}
5 months ago
}
private void SaveAlarmInfo(List<string> lstAlarm, string sn)
{
string waterCool = "waterCool";
int typeCode = (int)EquipmentType.WaterCool;
if (lstAlarm.Count > 0)
{
#region 有报警比较两边差异,新出现的报警就添加,消失的报警就处理并记录
var lstEquipAlarmRecord =
EquipAlarmRecordRepository.QueryListByClause(e => e.EquipTypeCode == typeCode).ToList();
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(typeCode, waterCool,
errorCode);
if (alarmDefine != null)
{
EquipAlarmRecord record = new EquipAlarmRecord()
{
EquipTypeCode = alarmDefine.EquipTypeCode,
EquipCode = sn,
ErrorCode = alarmDefine.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
{
#region 没报警把已处理记录更新并删除实时报警
var lstEquipAlarmRecord =
EquipAlarmRecordRepository.QueryListByClause(e => e.EquipTypeCode ==typeCode ).ToList();
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(e => e.EquipTypeCode == typeCode);
}
#endregion
}
}
5 months ago
}