/// <summary> /// メール送信が必要か判定する /// </summary> /// <param name="messageId">メッセージID</param> /// <param name="alarmConfig">アラーム設定</param> /// <param name="alarmDefId">アラーム定義ID</param> /// <param name="needMail">メール送信が必要な場合true、不要な場合false</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool NeedsMailSending(string messageId, DtAlarmConfig alarmConfig, string alarmDefId, out bool needMail) { needMail = false; try { _logger.EnterJson("{0}", new { messageId, alarmConfig, alarmDefId }); if (string.IsNullOrEmpty(alarmConfig.MailAddress)) { // メール送信先が設定されていない } else { // メール送信先がある場合 // アラームデータから同一アラーム定義IDで送信済みの最新データを取得 var latestMailSentAlarm = _dtAlarmRepository.ReadLatestMailSentDtAlarm(alarmDefId); if (latestMailSentAlarm == null) { // 同一アラーム定義IDで送信済みのデータが存在しない needMail = true; } else if (alarmConfig.MailSendingInterval == null || alarmConfig.MailSendingInterval == 0) { // メール送信間隔が設定されていない needMail = true; } else { // Sq1.1.4: メール間隔日数を確認する var nextAlarmSendingDay = latestMailSentAlarm.CreateDatetime.AddDays((double)alarmConfig.MailSendingInterval); if (_timeProvider.UtcNow > nextAlarmSendingDay) { // メール送信間隔日数が経過している場合 needMail = true; } } } return(true); } catch (RmsException e) { // アラーム設定取得失敗(基本設計書 5.3.4 エラー処理) _logger.Error(e, nameof(Resources.OP_ALR_ALR_006), new object[] { messageId }); needMail = false; return(false); } finally { _logger.LeaveJson("{0}", new { needMail }); } }
/// <summary> /// DT_ALARM_CONFIGテーブルからDtAlarmConfigを取得する /// </summary> /// <param name="alarmLevel">アラームレベル</param> /// <param name="allowNotExist">取得件数が0件である場合を正常系とする場合はtrueを、異常系とする場合はfalseを指定する</param> /// <returns>取得したデータ</returns> public DtAlarmConfig ReadDtAlarmConfig(byte alarmLevel, bool allowNotExist = true) { DtAlarmConfig model = null; try { _logger.EnterJson("{0}", new { alarmLevel }); DBAccessor.Models.DtAlarmConfig entity = null; _dbPolly.Execute(() => { using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings)) { entity = db.DtAlarmConfig.FirstOrDefault(x => x.AlarmLevelFrom <= alarmLevel && alarmLevel <= x.AlarmLevelTo); } }); if (entity != null) { model = entity.ToModel(); } else { if (!allowNotExist) { var info = new { AlarmLevelFrom = alarmLevel, AlarmLevelTo = alarmLevel }; throw new RmsException(string.Format("DT_ALARM_CONFIGテーブルに該当レコードが存在しません。(検索条件: {0})", JsonConvert.SerializeObject(info))); } } return(model); } catch (Exception e) { throw new RmsException("DT_ALARM_CONFIGテーブルのSelectに失敗しました。", e); } finally { _logger.LeaveJson("{0}", model); } }
/// <summary> /// メール送信情報を作成しQueueStorageへ登録する /// </summary> /// <param name="messageId">メッセージID</param> /// <param name="alarmInfo">アラーム情報</param> /// <param name="alarmConfig">アラーム設定</param> /// <param name="equipment">機器データ</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool CreateAndEnqueueAlarmInfo(string messageId, AlarmInfo alarmInfo, DtAlarmConfig alarmConfig, DtEquipment equipment) { try { _logger.EnterJson("{0}", new { alarmInfo, alarmConfig, equipment }); var mailInfo = new MailInfo { MailAddressTo = alarmConfig.MailAddress, MailAddressFrom = _settings.AlarmMailAddressFrom, MailSubject = alarmInfo.AlarmTitle, CustomerNumber = equipment.DtInstallBase.CustomerNumber, CustomerName = equipment.DtInstallBase.CustomerName, EquipmentSerialNumber = equipment.DtInstallBase.EquipmentSerialNumber, EquipmentNumber = equipment.DtInstallBase.EquipmentNumber, EquipmentName = equipment.DtInstallBase.EquipmentName, TypeCode = alarmInfo.TypeCode, ErrorCode = alarmInfo.ErrorCode, AlarmLevel = alarmInfo.AlarmLevel, EventDate = alarmInfo.EventDatetime, AlarmDescription = alarmInfo.AlarmDescription }; string message = JsonConvert.SerializeObject(mailInfo); _queueRepository.SendMessageToMailQueue(message); return(true); } catch (RmsException e) { // メールキュー登録失敗(基本設計書 5.3.4 エラー処理) _logger.Error(e, nameof(Resources.OP_ALR_ALR_007), new object[] { messageId }); return(false); } finally { _logger.Leave(); } }
/// <summary> /// アラーム設定を取得する /// </summary> /// <param name="alarmInfo">アラーム情報</param> /// <param name="equipment">機器データ</param> /// <param name="alarmConfig">アラーム設定</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool ReadDtAlarmConfig(AlarmInfo alarmInfo, out DtEquipment equipment, out DtAlarmConfig alarmConfig) { equipment = null; alarmConfig = null; try { _logger.EnterJson("{0}", alarmInfo); // Sq1.1.2: アラーム設定を取得する // Sq1.1.3: メール送信先を取得する equipment = _dtEquipmentRepository.ReadDtEquipment(alarmInfo.SourceEquipmentUid, false); alarmConfig = _dtAlarmConfigRepository.ReadDtAlarmConfig(alarmInfo.AlarmLevel, false); return(true); } catch (RmsException e) { // アラーム設定取得失敗(基本設計書 5.3.4 エラー処理) _logger.Error(e, nameof(Resources.OP_ALR_ALR_005), new object[] { alarmInfo?.MessageId }); return(false); } finally { _logger.LeaveJson("{0}", new { equipment, alarmConfig }); } }