示例#1
0
        public Deskwork CreateStep(DeskworkStep step)
        {
            EnsureActive();
            if (Steps.Count > 0)
            {
                var last = Steps.OrderBy(x => x.Id).Last();
                if (!last.Done)
                {
                    throw new UserFriendlyException("请首先完成上一个流程");
                }
            }

            Steps.Add(step);
            DomainEvents.Add(new StepChangeEventData());
            return(this);
        }
示例#2
0
        public async Task <bool> FinishStep(FinishStepInput input)
        {
            var work = await _workRepository.GetAllIncluding(x => x.Steps)
                       .FirstOrDefaultAsync(x => x.Id == input.WorkId);

            EnsureWorkActive(work);

            DeskworkStep next = null;

            if (input.ReceiverId != null)
            {
                var receiver = await UserCache.GetAsync(input.ReceiverId.Value);

                next = new DeskworkStep(AbpSession.UserId.Value,
                                        AbpSession.GetCurrentUser().Name,
                                        receiver.Id,
                                        receiver.Name,
                                        receiver.OrganizationUnitName
                                        );
            }

            work.CompleteStep(AbpSession.UserId.Value, input.StepId, input.Result, next);
            return(true);
        }
示例#3
0
        public Deskwork CompleteStep(long currentUserId, long currentStepId, string result, DeskworkStep next)
        {
            EnsureActive();

            var currentStep = Steps.Single(x => x.Id == currentStepId);

            if (!currentStep.Done)
            {
                throw new UserFriendlyException("当前流程已结束");
            }
            if (currentStep.ReceiverId != currentUserId)
            {
                throw new UserFriendlyException("不能完成他人的流程");
            }
            currentStep.Complete(result);

            if (next == null)
            {
                // 没有转交给他人,直接完成当前工单
                Complete();
            }
            else
            {
                CreateStep(next);
            }

            return(this);
        }