Exemple #1
0
        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));
        }
Exemple #2
0
 private bool Equals(IterationBasedCheckPoint other)
 {
     return(CurrentCycleNumber == other.CurrentCycleNumber && CurrentIterationNumber == other.CurrentIterationNumber);
 }