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(); }); } } }