/// <summary> /// アラーム情報を作成しQueueStorageへ登録する /// </summary> /// <param name="panelDischargeBreakdownPredictiveResutLog">パネル放電破壊予兆結果ログ</param> /// <param name="messageId">メッセージID</param> /// <param name="alarmDef">アラーム定義</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool CreateAndEnqueueAlarmInfo(PanelDischargeBreakdownPredictiveResutLog panelDischargeBreakdownPredictiveResutLog, string messageId, IEnumerable <DtAlarmDefPanelDischargeBreakdownPremonitor> alarmDef) { bool result = true; _logger.EnterJson("{0}", new { panelDischargeBreakdownPredictiveResutLog, messageId, alarmDef }); int index = 1; int alarmCount = alarmDef.Count(); foreach (var alarm in alarmDef) { string message = null; try { // Sq1.1.3: アラームキューを生成する var alarmInfo = new AlarmInfo { SourceEquipmentUid = panelDischargeBreakdownPredictiveResutLog.SourceEquipmentUid, TypeCode = panelDischargeBreakdownPredictiveResutLog.TypeCode, ErrorCode = panelDischargeBreakdownPredictiveResutLog.ErrorCode, AlarmLevel = alarm.AlarmLevel, AlarmTitle = alarm.AlarmTitle, AlarmDescription = alarm.AlarmDescription, AlarmDatetime = _timeProvider.UtcNow.ToString(Utility.Const.AlarmQueueDateTimeFormat), EventDatetime = panelDischargeBreakdownPredictiveResutLog.EventDt, AlarmDefId = $"{_settings.SystemName}_{_settings.SubSystemName}_{alarm.Sid.ToString()}", MessageId = alarmCount <= 1 ? messageId : $"{messageId}_{index}" }; index++; message = JsonConvert.SerializeObject(alarmInfo); // Sq1.1.4: キューを登録する _queueRepository.SendMessageToAlarmQueue(message); } catch (Exception e) { // アラーム生成エラー or アラームキューにアラーム情報を送信できない(基本設計書 5.1.2.4 エラー処理) _logger.Error(e, string.IsNullOrEmpty(message) ? nameof(Resources.UT_PBP_PBP_005) : nameof(Resources.UT_PBP_PBP_006), new object[] { messageId }); result = false; } } _logger.Leave(); return(result); }
/// <summary> /// アラーム定義を取得する /// </summary> /// <param name="panelDischargeBreakdownPredictiveResutLog">パネル放電破壊予兆結果ログ</param> /// <param name="messageId">メッセージID</param> /// <param name="models">DBから取得したパラメータ</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool ReadAlarmDefinition(PanelDischargeBreakdownPredictiveResutLog panelDischargeBreakdownPredictiveResutLog, string messageId, out IEnumerable <DtAlarmDefPanelDischargeBreakdownPremonitor> models) { models = null; try { _logger.EnterJson("{0}", new { panelDischargeBreakdownPredictiveResutLog, messageId }); // Sq1.1.1: パネル放電破壊予兆監視アラーム定義を取得 models = _dtAlarmDefPanelDischargeBreakdownPremonitorRepository.ReadDtAlarmDefPanelDischargeBreakdownPremonitor(panelDischargeBreakdownPredictiveResutLog); return(true); } catch (RmsException e) { // DBにアクセスできない(基本設計書 5.1.2.4 エラー処理) _logger.Error(e, nameof(Resources.UT_PBP_PBP_003), new object[] { messageId }); return(false); } finally { _logger.LeaveJson("{0}", new { models }); } }
/// <summary> /// DT_ALARM_DEF_PANEL_DISCHARGE_BREAKDOWN_PREMONITORテーブルからDtAlarmDefPanelDischargeBreakdownPremonitorを取得する /// </summary> /// <param name="panelDischargeBreakdownPredictiveResutLog">パネル放電破壊予兆結果ログ</param> /// <returns>取得したデータ</returns> public IEnumerable <DtAlarmDefPanelDischargeBreakdownPremonitor> ReadDtAlarmDefPanelDischargeBreakdownPremonitor(PanelDischargeBreakdownPredictiveResutLog panelDischargeBreakdownPredictiveResutLog) { IEnumerable <DtAlarmDefPanelDischargeBreakdownPremonitor> models = null; try { _logger.EnterJson("{0}", panelDischargeBreakdownPredictiveResutLog); List <DBAccessor.Models.DtAlarmDefPanelDischargeBreakdownPremonitor> entities = null; _dbPolly.Execute(() => { using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings)) { entities = db.DtAlarmDefPanelDischargeBreakdownPremonitor .Where(x => string.IsNullOrEmpty(x.TypeCode) || x.TypeCode == panelDischargeBreakdownPredictiveResutLog.TypeCode) .Where(x => string.IsNullOrEmpty(x.ErrorCode) || x.ErrorCode == panelDischargeBreakdownPredictiveResutLog.ErrorCode) .ToList(); } }); if (entities != null) { models = entities.Select(x => x.ToModel()); } return(models); } catch (Exception e) { throw new RmsException("DT_ALARM_DEF_PANEL_DISCHARGE_BREAKDOWN_PREMONITORテーブルのSelectに失敗しました。", e); } finally { _logger.LeaveJson("{0}", models); } }