namespace Yw.Server
|
{
|
/// <summary>
|
/// 指标评价任务辅助类
|
/// </summary>
|
public class QuotaEvaluateJobHelper : IJobHelper
|
{
|
private readonly RabbitMqExChangeHelper _queueHelper = new();
|
|
/// <summary>
|
/// 开始任务
|
/// </summary>
|
public Task StartJob()
|
{
|
return Task.Run(() =>
|
{
|
_queueHelper.Receive<List<Model.MonitorRecord>>(ConfigHelper.MonitorRunExchangeName, (monitorRecordList) =>
|
{
|
try
|
{
|
if (monitorRecordList == null || monitorRecordList.Count < 1)
|
{
|
LogHelper.Info("指标健康评价任务中,数据序列化失败");
|
return true;
|
}
|
|
var index = new Service.HealthIndex().GetDefault();
|
if (index == null)
|
{
|
LogHelper.Info("指标健康评价任务中,尚未配置健康指数!");
|
return true;
|
}
|
|
var serviceBinding = new Lazy<Service.HealthQuotaEvaluationModelBinding>(() => new Service.HealthQuotaEvaluationModelBinding());
|
var serviceModel = new Lazy<Service.HealthQuotaEvaluationModel>(() => new Service.HealthQuotaEvaluationModel());
|
var serviceRecord = new Lazy<Service.HealthQuotaEvaluationRecord>(() => 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;
|
}
|
});
|
});
|
|
}
|
|
/// <summary>
|
/// 取消任务
|
/// </summary>
|
public Task CancelJob()
|
{
|
return Task.Run(() =>
|
{
|
if (_queueHelper == null)
|
return;
|
_queueHelper.Close();
|
});
|
}
|
|
|
}
|
}
|