/// <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); }
/// <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); }