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