Exemple #1
0
        /// <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);
            }
        }
Exemple #3
0
        /// <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();
            }
        }
Exemple #4
0
        /// <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 });
            }
        }