namespace Yw.Server
{
///
/// 指标评价任务辅助类
///
public class QuotaEvaluateJobHelper : IJobHelper
{
private readonly RabbitMqExChangeHelper _queueHelper = new();
///
/// 开始任务
///
public Task StartJob()
{
return Task.Run(() =>
{
_queueHelper.Receive>(ConfigHelper.MonitorRunExchangeName, (monitorRecordList) =>
{
try
{
if (monitorRecordList == null || monitorRecordList.Count < 1)
{
LogHelper.Info("指标健康评价任务中,数据序列化失败");
return true;
}
var index = new Service.ChengHang().GetDefault();
if (index == null)
{
LogHelper.Info("指标健康评价任务中,尚未配置健康指数!");
return true;
}
var serviceBinding = new Lazy(() => new Service.HealthQuotaEvaluationModelBinding());
var serviceModel = new Lazy(() => new Service.HealthQuotaEvaluationModel());
var serviceRecord = new Lazy(() => new Service.HealthQuotaEvaluationRecord());
//遍历处理
foreach (var monitorRecord in monitorRecordList)
{
var binding = serviceBinding.Value.GetValidBySignalID(monitorRecord.SignalID);
if (binding != null)
{
var model = serviceModel.Value.GetByID(binding.ModelID);
if (model != null)
{
if (model.Way == Health.eEvaluateWay.Auto)
{
var dataValue = model.Evaluate(monitorRecord.DataValue, out Health.eEvaluateMode evaluateMode);
if (dataValue < index.MinValue)
{
dataValue = index.MinValue;
}
if (dataValue > index.MaxValue)
{
dataValue = index.MaxValue;
}
var evaluateRecord = new Model.HealthQuotaEvaluationRecord()
{
SignalID = monitorRecord.SignalID,
EvaluateModelID = model.ID,
EvaluateMode = evaluateMode,
EvaluateTime = DateTime.Now,
EvaluateValue = dataValue
};
var bol = serviceRecord.Value.InsertLastRecord(evaluateRecord);
if (bol)
{
LogHelper.Info($"指标健康评价任务中,信号id:{monitorRecord.SignalID},评价模型id:{model.ID},完成自动评价:{evaluateRecord.EvaluateValue}。");
}
else
{
LogHelper.Info($"指标健康评价任务中,信号id:{monitorRecord.SignalID},评价模型id:{model.ID},自动评价保存失败:{evaluateRecord.EvaluateValue}。");
}
}
}
}
}
return true;
}
catch (Exception ex)
{
LogHelper.Error("指标评价任务中,数据消息队列出错,自动跳过", ex);
return true;
}
});
});
}
///
/// 取消任务
///
public Task CancelJob()
{
return Task.Run(() =>
{
if (_queueHelper == null)
return;
_queueHelper.Close();
});
}
}
}