/// <summary> /// GetApproveFlowInstance /// </summary> /// <param name="flow"></param> /// <returns></returns> public ApprovalFlow GetApproveFlowInstance(Guid approvalFlowTypeID, Guid flowID, Guid userID, string comment) { try { int approveStatus = (int)ApprovalStatus.Waitting; ApprovalFlow flow = new ApprovalFlow(); flow.Id = Guid.NewGuid(); flow.ApprovalFlowTypeId = approvalFlowTypeID; flow.ChangeNote = comment; flow.CreateTime = DateTime.Now; flow.CreateUserId = userID; flow.FlowId = flowID; ApprovalFlowNode node = BusinessHandlerFactory.ApprovalFlowNodeBusinessHandler.GetFirstApproveFlowsNode(approvalFlowTypeID); if (node != null) { flow.NextNodeID = node.Id; } flow.Status = approveStatus; flow.SubFlowId = GetNextSubflowIDByFlowId(flowID); return(flow); } catch (Exception ex) { return(this.HandleException <ApprovalFlow>("获取流程结点失败", ex)); } }
/// <summary> /// 根据当前flowtypeID 取得第一个节点 /// </summary> /// <param name="FlowID"></param> /// <param name="historyID"></param> /// <returns></returns> public ApprovalFlowNode GetFirstApproveFlowsNode(Guid flowTypeId) { try { ApprovalFlowNode node = this.Fetch(n => n.ApprovalFlowTypeId == flowTypeId).OrderBy(o => o.Order).FirstOrDefault(); return(node); } catch (Exception ex) { return(this.HandleException <ApprovalFlowNode>("获取第一个流程结点失败", ex)); } }
/// <summary> /// 处理审核流程 /// </summary> /// <param name="flow"></param> public void SetApproveAction(ApprovalFlow flow, string action, Guid userID, string comment) { try { if (flow.NextNodeID != Guid.Empty) { ApprovalFlowType flowType = BusinessHandlerFactory.ApprovalFlowTypeBusinessHandler.Fetch( f => f.Id == flow.ApprovalFlowTypeId).FirstOrDefault(); //准备审批节点记录表, ApprovalFlowRecord record = BusinessHandlerFactory.ApprovalFlowRecordBusinessHandler.GetApproveFlowRecordInstance(flow, userID, comment); BusinessHandlerFactory.ApprovalFlowRecordBusinessHandler.Add(record); //审批被拒绝 if ("REJECT".Equals(action.ToUpper())) { flow.Status = (int)ApprovalStatus.Reject; UpdateEntityByApprovalStatus(flowType.ApprovalTypeValue, flow.FlowId, ApprovalStatus.Reject); } else { //获取当前节点的下一个节点 ApprovalFlowNode newNextNode = BusinessHandlerFactory.ApprovalFlowNodeBusinessHandler.GetNextApproveFlowsNode(flowType.Id, flow.NextNodeID); if (newNextNode == null) //审批通过,无下个一节点.审批结束 { flow.NextNodeID = Guid.Empty; //审核通过后,下个节点信息保存为空Guid flow.Status = (int)ApprovalStatus.Approvaled; UpdateEntityByApprovalStatus(flowType.ApprovalTypeValue, flow.FlowId, ApprovalStatus.Approvaled); } else //审核通过,更新审核流程的下一个节点信息 { flow.NextNodeID = newNextNode.Id; flow.Status = (int)ApprovalStatus.Waitting; } } this.Save(flow); this.Save(); } } catch (Exception ex) { this.HandleException("处理审批流程失败", ex); } }
/// <summary> /// 根据当前审批流程获得已审批节点记录集合 /// </summary> /// <param name="FlowID"></param> /// <param name="historyID"></param> /// <returns></returns> public IEnumerable <ApprovalFlowNode> GetFinishApproveFlowsNodes(Guid FlowID, int historyID) { try { List <ApprovalFlowNode> listNodes = new List <ApprovalFlowNode>(); List <ApprovalFlowRecord> listApprovalFlowRecord = BusinessHandlerFactory.ApprovalFlowRecordBusinessHandler.Fetch( r => r.FlowId == FlowID && r.SubFlowId == historyID).OrderByDescending(p => p.ApproveTime).ToList(); foreach (ApprovalFlowRecord item in listApprovalFlowRecord) { ApprovalFlowNode af = new ApprovalFlowNode(); listNodes.Add(this.Fetch(r => r.Id == item.ApprovalFlowNodeId).FirstOrDefault()); } return(listNodes); } catch (Exception ex) { return(this.HandleException <IEnumerable <ApprovalFlowNode> >("根据当前审批流程获得已审批节点记录集合失败", ex)); } }