예제 #1
0
        /// <summary>
        /// 获取评审报告中指定工作任务的下个工作任务
        /// </summary>
        /// <param name="reviewReport">评审报告</param>
        /// <param name="workTask">指定工作任务</param>
        /// <returns></returns>
        public static IWorkTask GetNextWorkTask(IReviewReport reviewReport, IWorkTask workTask)
        {
            if (reviewReport.DataReports == null)
            {
                return(null);
            }

            var dataReports = reviewReport.DataReports.ToList();

            if (dataReports.Any(p => p.ID == workTask.ID))
            {
                if (reviewReport.DataReportType == DataReportType.Parallel)
                {
                    return(reviewReport);  // 在审批报告中,审批报告是子工作任务的下个流程
                }
                else
                {
                    var index = dataReports.FindIndex(p => p.ID.Equals(workTask.ID));
                    if (0 <= index && index < dataReports.Count - 1)
                    {
                        return(dataReports[index + 1]);
                    }
                    else if (index == dataReports.Count - 1)
                    {
                        return(reviewReport); // 在审批报告中,审批报告是子工作任务的下个流程
                    }
                }
            }
            return(null);
        }
예제 #2
0
        /// <summary>
        /// 获取工作流程后正在执行或已执行完成的工作任务
        /// </summary>
        /// <param name="workTask"></param>
        /// <returns></returns>
        public List <IWorkTask> GetNextWorkTasksExcecutingOrExecuted(IWorkTask workTask)
        {
            List <IWorkTask> workTasks = new List <IWorkTask>();

            if (workTask is IDataReport)
            {
                var workFlow = _workTasks.FirstOrDefault(p => p.GetChildrenWorkTasks().Any(t => t.ID.Equals(workTask.ID)));
                if (workFlow != null)
                {
                    var list = workFlow.GetChildrenWorkTasks().SkipWhile(p => p.ID == workTask.ID)
                               .Where(p => p.WorkTaskStatus == WorkTaskStatus.Executed || p.WorkTaskStatus == WorkTaskStatus.Executing)
                               .ToList();

                    workTasks.AddRange(list);
                    if (workFlow.WorkTaskStatus == WorkTaskStatus.Executed)
                    {
                        workTasks.Add(workFlow);
                        workTasks.AddRange(GetNextWorkTasksExcecutingOrExecuted(workFlow));
                    }
                    return(workTasks);
                }

                IReviewReport reviewReport = null;
                foreach (var item in _workTasks)
                {
                    reviewReport = item.GetChildrenWorkTasks()
                                   .FirstOrDefault(p => p is IReviewReport && (p as IReviewReport).DataReports.Any(t => t.ID == workTask.ID)) as IReviewReport;

                    if (reviewReport != null)
                    {
                        break;
                    }
                }

                if (reviewReport == null)
                {
                    throw new Exception($"工作流程【{workTask.Name}】不属于项目流程【{Name}】!");
                }

                if (reviewReport.DataReportType == DataReportType.Serial)
                {
                    var list = reviewReport.DataReports.SkipWhile(p => p.ID == workTask.ID)
                               .Where(p => p.WorkTaskStatus == WorkTaskStatus.Executed || p.WorkTaskStatus == WorkTaskStatus.Executing)
                               .ToList <IWorkTask>();
                    workTasks.AddRange(list);
                }
                if (reviewReport.WorkTaskStatus == WorkTaskStatus.Executed)
                {
                    workTasks.Add(reviewReport);
                    workTasks.AddRange(GetNextWorkTasksExcecutingOrExecuted(reviewReport));
                }
                return(workTasks);
            }

            if (workTask is IReviewReport)
            {
                var workFlow = _workTasks.FirstOrDefault(p => p.GetChildrenWorkTasks().Any(t => t.ID.Equals(workTask.ID)));
                var list     = workFlow.GetChildrenWorkTasks().SkipWhile(p => p.ID == workTask.ID)
                               .Where(p => p.WorkTaskStatus == WorkTaskStatus.Executed || p.WorkTaskStatus == WorkTaskStatus.Executing)
                               .ToList();

                if (workFlow == null)
                {
                    throw new Exception($"工作流程【{workTask.Name}】不属于项目流程【{Name}】!");
                }

                workTasks.AddRange(list);
                if (workFlow.WorkTaskStatus == WorkTaskStatus.Executed)
                {
                    workTasks.Add(workFlow);
                    workTasks.AddRange(GetNextWorkTasksExcecutingOrExecuted(workFlow));
                }
                return(workTasks);
            }

            if (workTask is IWorkFlow)
            {
                return(_workTasks.SkipWhile(p => p.ID == workTask.ID)
                       .Where(p => p.WorkTaskStatus == WorkTaskStatus.Executed || p.WorkTaskStatus == WorkTaskStatus.Executing)
                       .ToList <IWorkTask>());
            }

            return(workTasks);
        }