예제 #1
0
        /// <summary>
        /// DT_ALMILOG_PREMONITORテーブルからDtAlmilogPremonitorを取得する
        /// </summary>
        /// <param name="almilogAnalysisResult">アルミスロープログ解析結果</param>
        /// <param name="allowNotExist">取得件数が0件である場合を正常系とする場合はtrueを、異常系とする場合はfalseを指定する</param>
        /// <param name="allowMultiple">取得件数が2件以上である場合を正常系とする場合はtrueを、異常系とする場合はfalseを指定する</param>
        /// <returns>取得したデータ</returns>
        public IEnumerable <DtAlmilogPremonitor> ReadDtAlmilogPremonitor(DtAlmilogAnalysisResult almilogAnalysisResult, bool allowNotExist = true, bool allowMultiple = true)
        {
            IEnumerable <DtAlmilogPremonitor> models = null;

            try
            {
                _logger.EnterJson("{0}", almilogAnalysisResult);

                List <DBAccessor.Models.DtAlmilogPremonitor> entities = null;
                _dbPolly.Execute(() =>
                {
                    using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings))
                    {
                        entities = db.DtAlmilogPremonitor
                                   .Where(x => x.DetectorName == almilogAnalysisResult.DetectorName)
                                   .Where(x => x.JudgeResult == almilogAnalysisResult.AnalysisResult)
                                   .ToList();
                    }
                });

                if (!allowNotExist && (entities == null || entities.Count <= 0))
                {
                    var info = new { Sid = almilogAnalysisResult?.Sid, AnalysisResult = almilogAnalysisResult?.AnalysisResult, DetectorName = almilogAnalysisResult?.DetectorName };
                    throw new RmsException(string.Format("DT_ALMILOG_PREMONITORテーブルに該当レコードが存在しません。(アルミスロープログ解析結果: {0})", JsonConvert.SerializeObject(info)));
                }

                if (!allowMultiple && entities.Count > 1)
                {
                    var info = new { Sid = almilogAnalysisResult?.Sid, AnalysisResult = almilogAnalysisResult?.AnalysisResult, DetectorName = almilogAnalysisResult?.DetectorName };
                    throw new RmsException(string.Format("DT_ALMILOG_PREMONITORテーブルに該当レコードが複数あります。(アルミスロープログ解析結果: {0})", JsonConvert.SerializeObject(info)));
                }

                if (entities != null)
                {
                    models = entities.Select(x => x.ToModel());
                }

                return(models);
            }
            catch (RmsException)
            {
                throw;
            }
            catch (Exception e)
            {
                var info = new { Sid = almilogAnalysisResult?.Sid, AnalysisResult = almilogAnalysisResult?.AnalysisResult, DetectorName = almilogAnalysisResult?.DetectorName };
                throw new RmsException(string.Format("DT_ALMILOG_PREMONITORテーブルのSelectに失敗しました。(アルミスロープログ解析結果: {0})", JsonConvert.SerializeObject(info)), e);
            }
            finally
            {
                _logger.LeaveJson("{0}", models);
            }
        }
예제 #2
0
        /// <summary>
        /// アルミロープログ解析結果をDBに登録する
        /// </summary>
        /// <param name="dipAlmiSlopeLog">骨塩アルミスロープログ</param>
        /// <param name="messageId">メッセージID</param>
        /// <param name="_analysisData">アルミスロープログ解析対象データ</param>
        /// <param name="_analysisResult">アルミスロープログ解析結果</param>
        /// <param name="model">DBへの登録結果</param>
        /// <returns>成功した場合true、失敗した場合falseを返す</returns>
        public bool RegistAlmiLogAnalysisResultToDb(DipAlmiSlopeLog dipAlmiSlopeLog, string messageId, AlmiLogAnalysisData _analysisData, AlmiLogAnalysisResult _analysisResult, out DtAlmilogAnalysisResult model)
        {
            model = null;

            try
            {
                _logger.EnterJson("{0}", new { dipAlmiSlopeLog, messageId, _analysisData, _analysisResult });

                var dtAlmilogAnalysisResult = new DtAlmilogAnalysisResult
                {
                    EquipmentUid              = dipAlmiSlopeLog.SourceEquipmentUid,
                    AnalysisResult            = _analysisResult.JudgeResult,
                    CalculateInclinationValue = _analysisResult.CulSlopeValue,
                    CalculateAreaValue        = _analysisResult.CulAreaValue,
                    MaxInclinationValue       = _analysisData.MaxSlopeValue,
                    MinInclinationValue       = _analysisData.MinSlopeValue,
                    StandardAreaValue         = _analysisResult.CulStdValue,
                    AlmilogMonth              = dipAlmiSlopeLog.OccurrenceYm,
                    DetectorName              = dipAlmiSlopeLog.DetectorName,
                    DetectorId               = dipAlmiSlopeLog.DetectorId,
                    GpValue                  = int.Parse(dipAlmiSlopeLog.GpValue),
                    ImageFileName            = dipAlmiSlopeLog.FileName,
                    FileNameNo               = short.Parse(dipAlmiSlopeLog.SNumber),
                    ReverseResult            = _analysisResult.SlopeReverseResult,
                    ReverseResultInclination = _analysisResult.Inclination,
                    IsAlarmJudged            = false,
                    IsBillTarget             = dipAlmiSlopeLog.ServiceFlg == true ? false : true,
                    LogFileName              = dipAlmiSlopeLog.LogFileName
                };

                model = _dtAlmilogAnalysisResultRepository.CreateDtAlmilogAnalysisResult(dtAlmilogAnalysisResult);

                return(true);
            }
            catch (RmsParameterException e)
            {
                _logger.Error(e, nameof(Resources.UT_DAA_DAA_006), new object[] { messageId });
                return(false);
            }
            catch (RmsException e)
            {
                _logger.Error(e, nameof(Resources.UT_DAA_DAA_006), new object[] { messageId });
                return(false);
            }
            finally
            {
                _logger.LeaveJson("{0}", new { model });
            }
        }
예제 #3
0
        /// <summary>
        /// 引数に指定したDtAlmilogAnalysisResultをDT_ALMILOG_ANALYSIS_RESULTテーブルへ登録する
        /// </summary>
        /// <param name="inData">登録するデータ</param>
        /// <returns>処理結果</returns>
        public DtAlmilogAnalysisResult CreateDtAlmilogAnalysisResult(DtAlmilogAnalysisResult inData)
        {
            DtAlmilogAnalysisResult model = null;

            try
            {
                _logger.EnterJson("{0}", inData);

                DBAccessor.Models.DtAlmilogAnalysisResult entity = new DBAccessor.Models.DtAlmilogAnalysisResult(inData);

                // バリデーション
                Validator.ValidateObject(entity, new ValidationContext(entity, null, null));

                _dbPolly.Execute(() =>
                {
                    entity.CreateDatetime = _timePrivder.UtcNow;

                    using (DBAccessor.Models.RmsDbContext db = new DBAccessor.Models.RmsDbContext(_appSettings))
                    {
                        var dbdata = db.DtAlmilogAnalysisResult.Add(entity).Entity;
                        db.SaveChanges();
                        model = dbdata.ToModel();
                    }
                });

                return(model);
            }
            catch (ValidationException e)
            {
                throw new RmsParameterException(e.ValidationResult.ErrorMessage, e);
            }
            catch (Exception e)
            {
                throw new RmsException("DT_ALMILOG_ANALYSIS_RESULTテーブルへのInsertに失敗しました。", e);
            }
            finally
            {
                _logger.LeaveJson("{0}", model);
            }
        }
예제 #4
0
        /// <summary>
        /// アラーム情報を作成しQueueStorageへ登録する
        /// </summary>
        /// <param name="analysisResult">アラーム対象解析結果</param>
        /// <param name="alarmDef">アラーム定義</param>
        /// <param name="alarmDescription">アラーム説明</param>
        /// <returns>成功した場合true、失敗した場合falseを返す</returns>
        private bool CreateAndEnqueueAlarmInfo(DtAlmilogAnalysisResult analysisResult, DtAlmilogPremonitor alarmDef, string alarmDescription)
        {
            string message = null;

            try
            {
                _logger.EnterJson("{0}", new { analysisResult, alarmDef, alarmDescription });

                // Sq1.4: アラームキューを生成する
                var alarmInfo = new AlarmInfo
                {
                    SourceEquipmentUid = analysisResult.EquipmentUid,
                    TypeCode           = null,
                    ErrorCode          = alarmDef.AnalysisResultErrorCode,
                    AlarmLevel         = alarmDef.AlarmLevel,
                    AlarmTitle         = alarmDef.AlarmTitle,
                    AlarmDescription   = alarmDescription,
                    AlarmDatetime      = _timeProvider.UtcNow.ToString(Utility.Const.AlarmQueueDateTimeFormat),
                    EventDatetime      = analysisResult.AlarmJudgementTime,
                    AlarmDefId         = $"{_settings.SystemName}_{_settings.SubSystemName}_{alarmDef.Sid.ToString()}",
                    MessageId          = null
                };

                message = JsonConvert.SerializeObject(alarmInfo);

                // Sq1.5: キューを登録する
                _queueRepository.SendMessageToAlarmQueue(message);
                return(true);
            }
            catch (Exception e)
            {
                // アラーム生成エラー or アラームキューにアラーム情報を送信できない(基本設計書 5.2.1.1 エラー処理)
                _logger.Error(e, string.IsNullOrEmpty(message) ? nameof(Resources.UT_DAP_DAP_005) : nameof(Resources.UT_DAP_DAP_006), new object[] { analysisResult?.Sid });
                return(false);
            }
            finally
            {
                _logger.LeaveJson("{0}", new { message });
            }
        }