public bool IsFinished(WorkFlowBag workFlowBag) { var endNodeId = FindEndNodeId(workFlowBag.Instance.WorkFlowID, workFlowBag.Instance.WorkFlow.StartNodeID); var old = Find(workFlowBag.Instance.WorkFlowInstanceID); return(old.CurrentNodeID == endNodeId); }
public WorkFlowBag CreateInstance(string workFlowId, string uid, string unitId) { var workFlow = Db.WorkFlow.Find(workFlowId); if (workFlow == null) { throw new Exception("不存在该工作流!workFlowId=>" + workFlowId); } var model = new WorkFlowInstance() { CreateTime = DateTime.Now, CurrentNodeID = workFlow.StartNodeID, Note = Note(uid, "创建工作流实例"), WorkFlowID = workFlowId, WorkFlowInstanceID = workFlowId + "-" + uid + "-" + DateTime.Now.Random(), InstancePeople = uid, UnitID = unitId }; Db.WorkFlowInstance.Add(model); //创建转移日志 Db.CreateInstanceChangeLog(model, "1", uid, "激活" + model.WorkFlow.Name + "实例"); if (Db.SaveChanges() > 0) { var result = new WorkFlowBag(model); return(result); } else { throw new Exception("工作流实例化失败!"); } }
//强制移动 //private MoveResult _MoveNext(WorkFlowBag workFlowBag, string nextNodeId, string operatorId, string reason, RelationMoveParam relation) //{ // var currentId = workFlowBag.Instance.CurrentNodeID; // var result = ChoosePath(currentId, nextNodeId); // return __MoveNext(workFlowBag, result, operatorId, reason, relation); //} public bool DeleteInstance(WorkFlowBag workFlowBag, string operatorId, string reason = "未填写") { var old = Find(workFlowBag.Instance.WorkFlowInstanceID); Db.Entry(old).State = EntityState.Deleted; //记录转移日志 Db.CreateInstanceHistory(old, "3", Note(operatorId, reason)); return(Db.Saved()); }
public static List <WorkFlowPath> NextStepInfo(this WorkFlowBag bag) { var Db = new MyDbContext(); return(Db.NodeRelation.Where(a => a.NodeID == bag.Instance.CurrentNodeID). SelectMany(z => z.ConvertCondition). ToList(). GroupBy(a => a.NodeRelationID). Select(g => new WorkFlowPath(g.Key, g.AsEnumerable().ToList())).ToList()); }
public bool AbortInstance(WorkFlowBag workFlowBag, string operatorId, string reason) { var instanceId = workFlowBag.Instance.WorkFlowInstanceID; var old = Find(instanceId); var note = Note(operatorId, reason); //记录转移日志 Db.CreateInstanceChangeLog(old, "4", operatorId, reason); //记录实例日志 Db.CreateInstanceHistory(old, "2", old.Note + "\n" + note); //删除实例 Db.WorkFlowInstance.Remove(old); return(Db.Saved()); }
private MoveResult __MoveNext(WorkFlowBag workFlowBag, MoveResult result, string operatorId, string reason) { //移动到下一节点 if (result.Successful) { workFlowBag.MoveToNext(Db, result.ToNodeId, operatorId, reason, FindEndNodeId(workFlowBag.Instance.WorkFlowID, workFlowBag.Instance.WorkFlow.StartNodeID)); result.SucessMsgs.Add("已成功转移到下一状态"); } else { result.SucessMsgs.Add("转移到下一状态失败"); } return(result); }
//自动移动 private MoveResult _MoveNext(WorkFlowBag workFlowBag, object moveParam, string operatorId, string reason, RelationMoveParam relation) { var currentId = workFlowBag.Instance.CurrentNodeID; var allPath = Db.NodeRelation.NoTrackingWhere(a => a.NodeID == currentId); var result = ChoosePath(allPath, moveParam); //移动主流程 var moveResult = __MoveNext(workFlowBag, result, operatorId, reason); //移动相关节点(子流程) if (moveResult.Successful && relation != null) { for (var i = 0; i < relation.WorkFlowParam.Count; i++) { var item = relation.WorkFlowParam[i]; //循环递归移动 moveResult.AddRelationMoveResult(_MoveNext(FindInstance(item.WorkFlowInstanceId), relation.GetMoveParam(i), relation.GetOperatorId(i), relation.GetReason(i), relation.GetRelaton(i))); } } return(moveResult); }
public static MyDbContext MoveToNext(this WorkFlowBag bag, MyDbContext db, string nextNodeId, string operatorId, string reason, string endNodeId) { //创建转移日志 db.CreateInstanceChangeLog(bag.Instance, "3", operatorId, reason, nextNodeId); bag.Move(nextNodeId); db.WorkFlowInstance.AddOrUpdate(bag.Instance); var isFinish = endNodeId == bag.Instance.CurrentNodeID; //如果为结束节点 if (isFinish) { //记录实例日志 db.CreateInstanceHistory(bag.Instance, "2", bag.Instance.Note + "\n" + DateTime.Now + "流程已结束"); //创建转移日志 db.CreateInstanceChangeLog(bag.Instance, "2", "system", "[sytem]流程自动结束", null); //删除示例 db.WorkFlowInstance.Remove(db.WorkFlowInstance.Find(bag.Instance.WorkFlowInstanceID)); } return(db); }