示例#1
0
        /// <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 });
            }
        }