public static void Reset(string projectId, string flowCode, ProjectStatus?status = null) { var nodes = ProjectNode.Search(e => e.ProjectId == projectId && e.FlowCode == flowCode && e.Status != ProjectNodeStatus.UnFinish).ToList(); nodes.ForEach(n => { var nodeInfo = NodeInfo.FirstOrDefault(e => e.Code == n.NodeCode); if (nodeInfo.ClearStatus) { n.Status = ProjectNodeStatus.UnFinish; } else { n.Status = ProjectNodeStatus.Pending; } }); ProjectNode.Update(nodes.ToArray()); var projectInfo = FirstOrDefault(p => p.ProjectId == projectId && p.FlowCode == flowCode); projectInfo.NodeCode = NodeCodeRef.Start; projectInfo.NodeNameENUS = "Start"; projectInfo.NodeNameZHCN = "开始"; if (status.HasValue) { projectInfo.Status = status.Value; } else { projectInfo.Status = ProjectStatus.UnFinish; } projectInfo.Update(); UpdateProjectStatus(projectId, GetMainProjectFlowCode(flowCode), ProjectStatus.UnFinish); }
public static ProjectNode FinishProjectNode(string projectId, string flowCode, string nodeCode) { var maxSeq = NodeInfo.Search(e => e.FlowCode == flowCode).Max(e => e.Sequence); var maxNodeCode = NodeInfo.FirstOrDefault(e => e.FlowCode == flowCode && e.Sequence == maxSeq).Code; if (nodeCode == NodeCodeDef.Finish) { nodeCode = maxNodeCode; } var projectNode = Search(e => e.ProjectId == projectId && e.FlowCode == flowCode && e.NodeCode == nodeCode && e.IsHistory == false).FirstOrDefault(); ProjectNode nextNode = projectNode.GetNextNode(), prevNode = projectNode.GetPrevNode(), currentNode = projectNode; if (prevNode != null) { if (prevNode.Status == ProjectNodeStatus.Finish) { projectNode.Status = ProjectNodeStatus.Finish; } else { projectNode.Status = ProjectNodeStatus.Pending; while (prevNode != null) { if (prevNode.Status == ProjectNodeStatus.Finish) { currentNode = prevNode; break; } prevNode = prevNode.GetPrevNode(); } } } else { projectNode.Status = ProjectNodeStatus.Finish; } if (projectNode.Status == ProjectNodeStatus.Finish) { while (nextNode != null && nextNode.Status == ProjectNodeStatus.Pending) { nextNode.Status = ProjectNodeStatus.Finish; nextNode.Update(); currentNode = nextNode; nextNode = nextNode.GetNextNode(); } } projectNode.Update(); if (currentNode.NodeCode == maxNodeCode) { currentNode = ProjectNode.FinishNode; } return(currentNode); }
public static void UnFinishNode(string projectId, string flowCode, string nodeCode, ProjectStatus?status = null) { var currentProjectNode = ProjectNode.UnFinishProjectNode(projectId, flowCode, nodeCode); var node = NodeInfo.FirstOrDefault(e => e.Code == currentProjectNode.NodeCode); var projectInfo = FirstOrDefault(p => p.ProjectId == projectId && p.FlowCode == flowCode); projectInfo.NodeCode = node.Code; projectInfo.NodeNameENUS = node.NameENUS; projectInfo.NodeNameZHCN = node.NameZHCN; if (status.HasValue) { projectInfo.Status = status.Value; } projectInfo.Update(); }