public static FlowNodeInfo GetInitFlowNodeInfo(string FlowName, Dictionary <string, Object> Params = null) { var _IBPMTaskInstanceService = UnityContainerHelper.GetServer <IBPMTaskInstanceService>(); var def = ProcessModelCache.Instance[FlowName]; var node = new FlowNodeInfo(); var list = getFlowTasks(def.Process).Take(2).ToList(); node.CurrentTaskName = list.First().Name; if (list.Count == 2) { node.NextName = list.Last().Name; node.NextIsJoinSign = list.Last().IsJoinSign; node.NextOwner = list.Last().Owner; // 不是会签才取候选人 if (!node.NextIsJoinSign) { node.NextUsers = new List <int>(); var owner = list.Last().Owner; def.Resources.ForEach(r => { if (r.ID == owner) { if (r.IOwner != null) { var call = UnityContainerHelper.GetServer <IOwner>(r.IOwner.Name); node.NextUsers = call.GetOwner("_" + list[1].DefID, Params); } node.NextUsers = node.NextUsers ?? new List <int>(); r.Users.ForEach(u => { var id = int.Parse(u.ID); if (!node.NextUsers.Contains(id)) { node.NextUsers.Add(id); } }); } }); } } return(node); }
public static FlowNodeInfo GetFlowNodeInfo(int TaskID, string System, Dictionary <string, Object> Params = null) { var _IUserTaskService = UnityContainerHelper.GetServer <IUserTaskService>(System); var _IBPMProcessInstanceService = UnityContainerHelper.GetServer <IBPMProcessInstanceService>(); var _IBPMTaskInstanceService = UnityContainerHelper.GetServer <IBPMTaskInstanceService>(); var userTask = _IUserTaskService.Get(TaskID); var process = _IBPMProcessInstanceService.Get(userTask.ProcessID.Value); var def = ProcessModelCache.Instance[process.Name]; var node = new FlowNodeInfo(); node.ProcessID = userTask.ProcessID.Value.ToString(); if (!string.IsNullOrEmpty(userTask.Args)) { node.Params = userTask.Args.Split(',').ToList(); } var list = getFlowTasks(def.Process); var index = list.FindIndex(u => "_" + u.DefID == userTask.TaskModelID); node.CurrentTaskName = list[index].Name; if (index < list.Count - 1) { var nextTask = list[index + 1]; node.NextName = nextTask.Name; node.NextUsers = new List <int>(); node.NextIsJoinSign = nextTask.IsJoinSign; node.NextOwner = nextTask.Owner; // 如果下一个任务已执行过,既被退回重新提交 var tasks = _IBPMTaskInstanceService.GetList(t => t.ProcessID == userTask.ProcessID && t.SourceID == "_" + nextTask.DefID && !t.IsDelete); if (tasks.Count == 1) { if (tasks[0].Type == (int)TaskType.Manual) { node.NextUser = tasks[0].UserID; } else { node.NextJoinSignUsers = tasks[0].Users.Split(','); } } var owner = list[index + 1].Owner; def.Resources.ForEach(r => { if (r.ID == owner) { if (r.IOwner != null) { var call = UnityContainerHelper.GetServer <IOwner>(r.IOwner.Name); node.NextUsers = call.GetOwner("_" + nextTask.DefID, Params); } node.NextUsers = node.NextUsers ?? new List <int>(); if (!string.IsNullOrEmpty(r.Task)) { var orgTask = _IBPMTaskInstanceService.GetList(t => t.ProcessID == userTask.ProcessID && t.SourceID == r.Task && !t.IsDelete); if (orgTask != null && orgTask.Count > 0) { node.NextUsers.Add(orgTask.First().UserID); } } r.Users.ForEach(u => { var id = int.Parse(u.ID); if (!node.NextUsers.Contains(id)) { node.NextUsers.Add(id); } }); } }); } return(node); }