public Task <CycleProcessingContext> ProcessAsync([NotNull] CycleProcessingContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (!context.IsValid()) { _logger.Warning($"{GetType().Name}: действие не будет выполнено, т.к. в обработке сеанса возникли ошибки"); return(Task.FromResult(context)); } var sessionProcessingInfo = context.TryGetSessionProcessingInfo(); if (sessionProcessingInfo == null) { return(Task.FromResult(context)); } var iterationParams = context.TryGetIterationParams(); if (iterationParams == null) { return(Task.FromResult(context)); } var cycleNumber = sessionProcessingInfo.CurrentCycleNumber; var iterationNumber = iterationParams.CurrentIteration; try { var currentCycleNumber = sessionProcessingInfo.CurrentCycleNumber; var currentIteration = iterationParams.CurrentIteration; var nextIterationToEcgMeassuring = iterationParams.IterationToGetEcg; var nextIterationToCommonParamsMeassuring = iterationParams.IterationToGetCommonParams; var nextIterationToPressureParamsMeassuring = iterationParams.IterationToGetPressureParams; _logger?.Trace($"{GetType().Name}: определение необходимости сбора параметров. Цикл {currentCycleNumber}, итерация {currentIteration}"); var ecgCheckPoint = new IterationBasedCheckPoint(currentCycleNumber, nextIterationToEcgMeassuring); var commonParamsCheckPoint = new IterationBasedCheckPoint(currentCycleNumber, nextIterationToCommonParamsMeassuring); var pressureParamsCheckPoint = new IterationBasedCheckPoint(currentCycleNumber, nextIterationToPressureParamsMeassuring); var needRequestEcg = false; if (currentIteration == nextIterationToEcgMeassuring) { needRequestEcg = !_ecgParamsCheckPoints.Contains(ecgCheckPoint); if (needRequestEcg) { _ecgParamsCheckPoints.Add(ecgCheckPoint); } } var needRequestCommonParams = false; if (currentIteration == nextIterationToCommonParamsMeassuring) { needRequestCommonParams = !_commonParamsCheckPoints.Contains(commonParamsCheckPoint); if (needRequestCommonParams) { _commonParamsCheckPoints.Add(commonParamsCheckPoint); } } var needRequestPressureParams = false; if (currentIteration == nextIterationToPressureParamsMeassuring) { needRequestPressureParams = !_pressureParamsCheckPoints.Contains(pressureParamsCheckPoint); if (needRequestPressureParams) { _pressureParamsCheckPoints.Add(pressureParamsCheckPoint); } } var ecgStatus = needRequestEcg ? "требуется" : "не требуется"; var commonParamsStatus = needRequestCommonParams ? "требуется" : "не требуется"; var pressureParamsStatus = needRequestPressureParams ? "требуется" : "не требуется"; _logger?.Trace($"{GetType().Name}: Цикл {currentCycleNumber}, итерация {currentIteration}: запрос ЭКГ {ecgStatus}, запрос общих параметров {commonParamsStatus}, запрос давления {pressureParamsStatus}"); context.AddOrUpdate( new CheckPointCycleProcessingContextParams( needRequestEcg, needRequestCommonParams, needRequestPressureParams)); } catch (Exception e) { context.AddOrUpdate( new ExceptionCycleProcessingContextParams( new SessionProcessingException( SessionProcessingErrorCodes.Unknown, e.Message, e, cycleNumber, iterationNumber))); } return(Task.FromResult(context)); }
private bool Equals(IterationBasedCheckPoint other) { return(CurrentCycleNumber == other.CurrentCycleNumber && CurrentIterationNumber == other.CurrentIterationNumber); }