/// <summary> /// 解析結果データを取得する /// </summary> /// <param name="unjudgedItems">未判定解析結果データ</param> /// <param name="alarmItemsList">アラーム対象解析結果データ</param> /// <returns>成功した場合true、失敗した場合falseを返す</returns> public bool ReadAlarmJudgementTarget(out List <DtAlmilogAnalysisResult> unjudgedItems, out List <List <DtAlmilogAnalysisResult> > alarmItemsList) { unjudgedItems = new List <DtAlmilogAnalysisResult>(); alarmItemsList = new List <List <DtAlmilogAnalysisResult> >(); try { _logger.Enter(); // Sq1.1: アルミスロープログ解析結果を取得する var models = _dtAlmilogAnalysisResultRepository.ReadAlarmJudgementTarget(_alarmCountThreshold); if (models.Any()) { unjudgedItems = models.Where(x => x.IsAlarmJudged == false).ToList(); // アラーム判定は機器UID、Detector名称単位で行うため判定対象データ単位にグループ化する var groupedAlarmJudgementTarget = models.GroupBy(x => new { x.EquipmentUid, x.DetectorName }); // 連続NG数分データが存在しない場合は判定処理を実施しない groupedAlarmJudgementTarget = groupedAlarmJudgementTarget.Where(x => x.Count() >= _alarmCountThreshold); foreach (var group in groupedAlarmJudgementTarget) { // 解析NGのリスト(日付の新しい順) List <DtAlmilogAnalysisResult> ngList = new List <DtAlmilogAnalysisResult>(); foreach (var value in group) { if (value.AnalysisResult == "S") { ngList = new List <DtAlmilogAnalysisResult>(); // NGリストをリセット } else { // アラーム判定日時を設定してから追加する value.AlarmJudgementTime = _timeProvider.UtcNow.ToString(); ngList.Insert(0, value); if (ngList.Count >= _alarmCountThreshold) { // 1アラーム作成に必要となる解析結果(最新のデータを_alarmCountThreshold件) var alarmItems = ngList.Take(_alarmCountThreshold).ToList(); alarmItemsList.Add(alarmItems); } } } } } return(true); } catch (RmsException e) { // DBにアクセスできない(基本設計書 5.2.1.1 エラー処理) _logger.Error(e, nameof(Resources.UT_DAP_DAP_002)); return(false); } finally { _logger.LeaveJson("{0}", new { unjudgedItems, alarmItemsList }); } }