protected override async Task Execute(CancellationToken token)
        {
            try
            {
                var currentDateTime      = DateTime.UtcNow;
                var humanTaskInstanceLst = await _humanTaskInstanceQueryRepository.GetPendingDeadLines(token, currentDateTime);

                foreach (var humanTaskInstance in humanTaskInstanceLst)
                {
                    var deadLines        = humanTaskInstance.DeadLines.Where(d => currentDateTime >= d.EndDateTime);
                    var executionContext = new BaseExpressionContext(humanTaskInstance.InputParameters);
                    var deadLineIds      = deadLines.Select(_ => _.Id).ToList();
                    foreach (var id in deadLineIds)
                    {
                        var deadLine = deadLines.First(_ => _.Id == id);
                        if (deadLine.Escalations != null && deadLine.Escalations.Any())
                        {
                            foreach (var escalation in deadLine.Escalations)
                            {
                                if (!string.IsNullOrWhiteSpace(escalation.Condition) && !ExpressionParser.IsValid(escalation.Condition, executionContext))
                                {
                                    continue;
                                }

                                if (!string.IsNullOrWhiteSpace(escalation.NotificationId))
                                {
                                    var parameters = _parameterParser.ParseToPartParameters(escalation.ToParts, humanTaskInstance.InputParameters);
                                    await _mediator.Send(new CreateNotificationInstanceCommand { NotificationId = escalation.NotificationId, Parameters = parameters }, token);
                                }
                            }
                        }

                        humanTaskInstance.RemoveDeadLine(deadLine.Name, deadLine.Usage);
                    }

                    await _humanTaskInstanceCommandRepository.Update(humanTaskInstance, token);
                }

                await _humanTaskInstanceCommandRepository.SaveChanges(token);
            }
            catch (Exception)
            {
            }
        }
Exemplo n.º 2
0
        public virtual DateTime?Evaluate(HumanTaskDefinitionDeadLine deadLine, BaseExpressionContext expressionContext)
        {
            DateTime?nextUTC = null;

            if (!string.IsNullOrWhiteSpace(deadLine.Until))
            {
                var interval = ISO8601Parser.ParseTimeInterval(deadLine.Until);
                if (interval != null)
                {
                    nextUTC = interval.EndDateTime;
                }
            }

            if (nextUTC == null && !string.IsNullOrWhiteSpace(deadLine.For))
            {
                nextUTC = ExpressionParser.GetDateTime(deadLine.For, expressionContext);
            }

            return(nextUTC);
        }
Exemplo n.º 3
0
        public virtual ICollection <HumanTaskInstanceDeadLine> Evaluate(ICollection <HumanTaskDefinitionDeadLine> deadLines, Dictionary <string, string> parameters)
        {
            var expressionContext = new BaseExpressionContext(parameters);
            var result            = new List <HumanTaskInstanceDeadLine>();

            foreach (var deadLine in deadLines)
            {
                var nextUTC = Evaluate(deadLine, expressionContext);
                if (nextUTC != null)
                {
                    result.Add(new HumanTaskInstanceDeadLine
                    {
                        EndDateTime = nextUTC.Value,
                        Name        = deadLine.Name,
                        Usage       = deadLine.Usage,
                        Escalations = deadLine.Escalations
                    });
                }
            }

            return(result);
        }