Esempio n. 1
0
 public static Participant Map(Domain.Participant p)
 {
     return(new Participant {
         Id = p.Id,
         FirstName = p.FirstName,
         LastName = p.LastName,
         MiddleName = p.MiddleName
     });
 }
Esempio n. 2
0
        /// <summary>
        /// 获取一个流程实例
        /// </summary>
        /// <param name="processInstID">流程实例ID</param>
        /// <returns></returns>
        private ProcessInst GetToRunProcessInst(string processInstID, IUser user)
        {
            ProcessInst processInst = Persistence.GetProcessInst(processInstID);
            ProcessDefine processDefine = GetProcessDefine(processInst.ProcessDefID);
            string processDefID = processInst.ProcessDefID;

            //如果流程还未启动,产生一个活动实例
            if (processInst.CurrentState == (short)ProcessInstStatus.NoStart)
            {
                Activity srcActivity = processDefine.StartActivity;
                ActivityInst srcActInst = Persistence.GetActivityInsts(processInstID, srcActivity.ID, ActivityInstStatus.Compeleted)[0];
                IList<Activity> destActivities = Persistence.GetOutActivities(processDefID, srcActivity.ID);

                UnitOfWork.ExecuteWithTrans<ProcessInst>(() =>
                {
                    foreach (var destActivity in destActivities)
                    {
                        DateTime startTime = DateTime.Now.AddSeconds(-1);
                        ActivityInst destActInst = new ActivityInst()
                        {
                            ActivityDefID = destActivity.ID,
                            CurrentState = (short)ActivityInstStatus.NoStart,
                            ID = IdGenerator.NewComb().ToString(),
                            CreateTime = startTime,
                            Description = destActivity.Description,
                            EndTime = WFUtil.MaxDate,
                            Name = destActivity.Name,
                            ProcessInstID = processInstID,
                            RollbackFlag = 0,
                            StartTime = startTime,
                            SubProcessInstID = string.Empty,
                            Type = (short)destActivity.ActivityType.Cast<ActivityType>(ActivityType.ManualActivity)
                        };

                        Domain.Transition transition = new Domain.Transition()
                        {
                            ID = IdGenerator.NewComb().ToString(),
                            DestActID = destActivity.ID,
                            DestActInstID = destActInst.ID,
                            DestActInstName = destActInst.Name,
                            DestActName = destActivity.Name,
                            ProcessInstID = processInstID,
                            ProcessInstName = processInst.Name,
                            SrcActID = srcActivity.ID,
                            SrcActInstID = srcActInst.ID,
                            SrcActInstName = srcActInst.Name,
                            SrcActName = srcActivity.Name,
                            TransTime = startTime
                        };

                        TransControl transControl = new TransControl()
                        {
                            ID = IdGenerator.NewComb().ToString(),
                            DestActID = destActivity.ID,
                            DestActName = destActivity.Name,
                            ProcessInstID = processInst.ID,
                            SrcActID = srcActivity.ID,
                            SrcActName = srcActivity.Name,
                            TransTime = startTime,
                            TransWeight = 100
                        };

                        if (destActivity is ManualActivity)
                        {
                            ManualActivity ma = destActivity as ManualActivity;
                            WorkItem wi = new WorkItem()
                            {
                                ID = IdGenerator.NewComb().ToString(),
                                ActionMask = string.Empty,
                                ActionURL = ma.CustomURL.SpecifyURL,
                                ActivityInstID = destActInst.ID,
                                ActivityInstName = destActInst.Name,
                                AllowAgent = (short)(ma.AllowAgent ? 1 : 0),
                                BizState = (short)WorkItemBizStatus.Common,
                                CreateTime = startTime,
                                Creator = user.ID,
                                CreatorName = user.Name,
                                CurrentState = (short)WorkItemStatus.WaitExecute,
                                Description = destActInst.Description,
                                EndTime = WFUtil.MaxDate,
                                Executor = string.Empty,
                                ExecutorName = string.Empty,
                                IsTimeOut = 0,
                                Name = destActInst.Name,
                                Participant = string.Empty,
                                ProcessID = processDefID,
                                ProcessInstID = processInst.ID,
                                ProcessInstName = processInst.Name,
                                ProcessName = processDefine.Name,
                                RemindTime = WFUtil.MaxDate,
                                RootProcessInstID = string.Empty,
                                StartTime = startTime,
                                TimeOutTime = WFUtil.MaxDate,
                                Type = destActInst.Type
                            };

                            //foreach (var participantor in ma.Participant.Participantors)
                            //{
                            //    Domain.Participant participant = new Domain.Participant()
                            //    {
                            //        ID = IdGenerator.NewComb().ToString(),
                            //        CreateTime = createTime,
                            //        DelegateType = (short)DelegateType.Sponsor,
                            //        Name = participantor.Name,
                            //        ParticipantID = participantor.ID,
                            //        ParticipantIndex = participantor.SortOrder,
                            //        ParticipantType = (short)participantor.ParticipantorType.Cast<ParticipantorType>(ParticipantorType.Person),
                            //        PartiInType = (short)PartiInType.Exe,
                            //        WorkItemID = wi.ID,
                            //        WorkItemState = (short)wi.CurrentState
                            //    };

                            //    repository.SaveOrUpdate(participant);
                            //}

                            Domain.Participant participant = new Domain.Participant()
                            {
                                ID = IdGenerator.NewComb().ToString(),
                                CreateTime = startTime,
                                DelegateType = (short)DelegateType.Sponsor,
                                Name = user.Name,
                                ParticipantID = user.ID,
                                ParticipantIndex = 1,
                                ParticipantType = (short)ParticipantorType.Person,
                                PartiInType = (short)PartiInType.Exe,
                                WorkItemID = wi.ID,
                                WorkItemState = (short)wi.CurrentState
                            };

                            repository.SaveOrUpdate(participant);

                            repository.SaveOrUpdate(wi);
                        }

                        srcActInst.CurrentState = (short)ActivityInstStatus.Compeleted;
                        repository.SaveOrUpdate(srcActInst);
                        repository.SaveOrUpdate(destActInst);
                        repository.SaveOrUpdate(transition);
                        repository.SaveOrUpdate(transControl);
                    }
                });
            }

            return processInst;
        }
Esempio n. 3
0
        /// <summary>
        /// 产生迁移活动
        /// </summary>
        /// <param name="srcActInst"></param>
        public void RouteActivityInst(ActivityInst srcActInst)
        {
            Activity srcActivity = Context.ProcessDefine.Activities.FirstOrDefault(a => a.ID == srcActInst.ActivityDefID);
            IList<Activity> activateActivities = GetActivateActivities(Context.ProcessInst.ProcessDefID, srcActInst);
            string processInstID = Context.ProcessInst.ID;
            string processDefID = Context.ProcessInst.ProcessDefID;

            UnitOfWork.ExecuteWithTrans<WorkItem>(() =>
            {
                foreach (var destActivity in activateActivities)
                {
                    DateTime createTime = DateTime.Now;
                    ActivityInst destActInst = new ActivityInst()
                    {
                        ActivityDefID = destActivity.ID,
                        CurrentState = (short)(destActivity.ActivityType == ActivityType.EndActivity || destActivity.ActivityType == ActivityType.AutoActivity ? ActivityInstStatus.Compeleted : ActivityInstStatus.NoStart),
                        ID = IdGenerator.NewComb().ToString(),
                        CreateTime = createTime,
                        Description = destActivity.Description,
                        EndTime = WFUtil.MaxDate,
                        Name = destActivity.Name,
                        ProcessInstID = processInstID,
                        RollbackFlag = 0,
                        StartTime = createTime,
                        SubProcessInstID = string.Empty,
                        Type = (short)destActivity.ActivityType.Cast<ActivityType>(ActivityType.ManualActivity)
                    };

                    Domain.Transition transition = new Domain.Transition()
                    {
                        ID = IdGenerator.NewComb().ToString(),
                        DestActID = destActivity.ID,
                        DestActInstID = destActInst.ID,
                        DestActInstName = destActInst.Name,
                        DestActName = destActivity.Name,
                        ProcessInstID = processInstID,
                        ProcessInstName = Context.ProcessInst.Name,
                        SrcActID = srcActivity.ID,
                        SrcActInstID = srcActInst.ID,
                        SrcActInstName = srcActInst.Name,
                        SrcActName = srcActivity.Name,
                        TransTime = createTime
                    };

                    TransControl transControl = new TransControl()
                    {
                        ID = IdGenerator.NewComb().ToString(),
                        DestActID = destActivity.ID,
                        DestActName = destActivity.Name,
                        ProcessInstID = processInstID,
                        SrcActID = srcActivity.ID,
                        SrcActName = srcActivity.Name,
                        TransTime = createTime,
                        TransWeight = 100
                    };

                    //srcActInst.CurrentState = (short)ActivityInstStatus.Compeleted;
                    if (destActivity is ManualActivity)
                    {
                        #region ManualActivityHandler

                        ManualActivity ma = destActivity as ManualActivity;
                        WorkItem wi = new WorkItem()
                        {
                            ID = IdGenerator.NewComb().ToString(),
                            ActionMask = string.Empty,
                            ActionURL = ma.CustomURL.SpecifyURL,
                            ActivityInstID = destActInst.ID,
                            ActivityInstName = destActInst.Name,
                            AllowAgent = (short)(ma.AllowAgent ? 1 : 0),
                            BizState = (short)WorkItemBizStatus.Common,
                            CreateTime = createTime,
                            Creator = WFUtil.User.ID,
                            CreatorName = WFUtil.User.Name,
                            CurrentState = (short)WorkItemStatus.WaitExecute,
                            Description = destActInst.Description,
                            EndTime = WFUtil.MaxDate,
                            Executor = string.Empty,
                            ExecutorName = string.Empty,
                            IsTimeOut = 0,
                            Name = destActInst.Name,
                            Participant = Persistence.GetParticipant(processDefID, destActivity.ID),
                            ProcessID = processDefID,
                            ProcessInstID = processInstID,
                            ProcessInstName = Context.ProcessInst.Name,
                            ProcessName = Context.ProcessDefine.Name,
                            RemindTime = WFUtil.MaxDate,
                            RootProcessInstID = string.Empty,
                            StartTime = createTime,
                            TimeOutTime = WFUtil.MaxDate,
                            Type = destActInst.Type,
                            //ExecuteTime = null,
                        };

                        IList<Participantor> participantors = assignParticipant == null ? ma.Participant.Participantors : new List<Participantor> { assignParticipant() };

                        foreach (var participantor in participantors)
                        {
                            Domain.Participant participant = new Domain.Participant()
                            {
                                ID = IdGenerator.NewComb().ToString(),
                                CreateTime = createTime,
                                DelegateType = (short)DelegateType.Sponsor,
                                Name = participantor.Name,
                                ParticipantID = participantor.ID,
                                ParticipantIndex = participantor.SortOrder,
                                ParticipantType = (short)participantor.ParticipantorType.Cast<ParticipantorType>(ParticipantorType.Person),
                                PartiInType = (short)PartiInType.Exe,
                                WorkItemID = wi.ID,
                                WorkItemState = (short)wi.CurrentState
                            };

                            Persistence.Repository.SaveOrUpdate(participant);
                        }

                        Persistence.Repository.SaveOrUpdate(wi);

                        #endregion
                    }
                    else if (destActivity is AutoActivity)
                    {
                        if (!HandlerAutoActivity(processDefID, srcActivity, destActivity, destActInst))
                            destActInst.CurrentState = (short)ActivityInstStatus.Suspended;
                    }

                    srcActInst.CurrentState = (short)ActivityInstStatus.Compeleted;
                    Persistence.Repository.SaveOrUpdate(srcActInst);
                    Persistence.Repository.SaveOrUpdate(destActInst);
                    Persistence.Repository.SaveOrUpdate(transition);
                    Persistence.Repository.SaveOrUpdate(transControl);
                }
            });
        }