public override NodeReturn Run(FlowContent flowContent) { NodeReturn ret = new NodeReturn(); if (flowContent.CurrentNodeKey.Split(',').Contains(this.NodeKey)) { ret.isOver = true; } else { ret.isOver = false; WF_Instance node = instanceBll.getByID(flowContent.CurrentInstanceID); List <string> user = new List <string>(); if (node.ApplyUserCode != node.WriterUserCode) { user.Add(node.ApplyUserCode); user.Add(node.WriterUserCode); } else { user.Add(node.WriterUserCode); } ret.ToDoUserList = user; } return(ret); }
public static Common.Business.WF_Instance Fetch(WF_Instance data) { Common.Business.WF_Instance item = (Common.Business.WF_Instance)Activator.CreateInstance(typeof(Common.Business.WF_Instance)); //using (ObjectFactory.BypassPropertyChecks(item)) { item.Client = data.Client; item.WorkflowId = data.WorkflowId; item.ItemId = data.ItemId; item.BarCode = data.BarCode; item.CurrentState = data.CurrentState; item.FromState = data.FromState; item.ActivityId = data.ActivityId; item.Suggestion = data.Suggestion; item.CheckReason = data.CheckReason; item.Submitter = data.Submitter; item.SubmitDate = data.SubmitDate; item.TimeStamp = data.TimeStamp; item.CreatedUser = data.CreatedUser; item.CreatedDate = data.CreatedDate; item.ChangedUser = data.ChangedUser; item.ChangedDate = data.ChangedDate; } ObjectFactory.MarkAsChild(item); ObjectFactory.MarkOld(item); return(item); }
public static int Reopen(string todoUserCode, int instanceID, int isShow, int prevID, string taskName, int todotype, FlowNode node, string nodeKey, string currenUserCode) { WF_ToDo todo = new WF_ToDo(); WF_Instance instance = instanceBll.getByID(instanceID); WF_TemplateNode tmpNode = nodebll.getByNodeKey(instance.TmpKey, nodeKey); //todo 插入批号 todo.Batch = -1; todo.CreateTime = DateTime.Now; todo.CreateUserCode = currenUserCode; todo.InstanceID = instanceID; todo.IsDelete = 0; todo.IsShow = isShow; todo.Nodekey = nodeKey; todo.PrevID = prevID; todo.ResponseUserCode = todoUserCode; todo.State = (int)TodoState.UnDo; todo.ToDoName = taskName; todo.TodoType = todotype; todo.UpdateTime = DateTime.Now; todo.UpdateUserCode = currenUserCode; todo.URL = tmpNode.URL; int todoid = todobll.save(todo); return(todoid); }
public bool update(WF_Instance entity) { using (IDbConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["wfdb"].ToString())) { conn.Open(); return(conn.Update <WF_Instance>(entity)); } }
public int save(WF_Instance entity) { using (IDbConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["wfdb"].ToString())) { conn.Open(); int id = conn.Insert <WF_Instance>(entity); return(id); } }
public ActionResult Add(WF_Instance wfInstance, int id, int flowTo) { var currentUserId = 1; // 1. Add the new data into workflow-instance wfInstance.DelFlag = (short)DelFlagEnum.Normal; wfInstance.StartTime = DateTime.Now; wfInstance.FilePath = string.Empty; wfInstance.SenderId = currentUserId; wfInstance.Level = 0; wfInstance.Status = (short)WF_InstanceEnum.Processing; wfInstance.WFInstanceId = Guid.Empty; wfInstance.WF_TempId = id; WF_InstanceService.Add(wfInstance); // 2. Start the workflow var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(new FinanceActivity(), null); wfInstance.WFInstanceId = wfApp.Id; // save the workflow id WF_InstanceService.Update(wfInstance); // 3. Add two new procedures to the workflow procedure // The first produce handler is self WF_Procedure startProcedure = new WF_Procedure(); startProcedure.WF_InstanceId = wfInstance.Id; startProcedure.SubTime = DateTime.Now; startProcedure.ProcedureName = "Submit the approval table"; startProcedure.IsEndProcedure = false; startProcedure.IsStartProcedure = true; startProcedure.HandleBy = currentUserId; startProcedure.ProcessComment = "submit approval"; startProcedure.ProcessResult = "pass"; startProcedure.ProcessStatus = (short)WF_InstanceEnum.Processing; WF_ProcedureService.Add(startProcedure); // Initial the next procedure handler WF_Procedure nextProcedure = new WF_Procedure(); nextProcedure.WF_InstanceId = wfInstance.Id; nextProcedure.SubTime = DateTime.Now; nextProcedure.ProcessTime = DateTime.Now; nextProcedure.ProcessComment = string.Empty; nextProcedure.IsEndProcedure = false; nextProcedure.IsStartProcedure = false; nextProcedure.HandleBy = flowTo; nextProcedure.ProcessResult = ""; nextProcedure.ProcessStatus = (short)WF_InstanceEnum.Unprocess; WF_ProcedureService.Add(nextProcedure); return(RedirectToAction("showMyCheck")); }
public ActionResult Add(WF_Instance instance, int id, int flowTo) { var currentUserId = LoginUser.Id; //在工作流实例表添加一条数据 instance.DelFlag = this.delFlagNormal; instance.StartTime = DateTime.Now; instance.FilePath = string.Empty; instance.StartBy = currentUserId; instance.Level = 0; instance.Status = (short)Wei.OA.Model.Enum.WF_InstanceEnum.Processing; instance.WFInstanceId = Guid.Empty; instance.WF_TempId = id; WF_InstanceService.Add(instance); //启动工作流 var wfApp = WorkflowApplictionHelper.CreateWorkflowApp(new FinancialActivity(), null); //可以通过反射,更灵活的添加不同的activity instance.WFInstanceId = wfApp.Id; WF_InstanceService.Update(instance); //在步骤表中添加两个步骤,一个当前已经处理完的步骤 WF_Step startStep = new WF_Step(); startStep.WF_InstanceId = instance.Id; startStep.SubTime = DateTime.Now; startStep.StepName = "提交审批表单"; startStep.IsEndStep = false; startStep.IsStartStep = true; startStep.ProcessBy = currentUserId; startStep.ProcessComment = "提交申请"; startStep.ProcessResult = "通过"; startStep.ProcessTime = DateTime.Now; startStep.StepStatus = (short)Wei.OA.Model.Enum.WFStepEnum.Processed; WF_StepService.Add(startStep); //下一步谁审批的步骤 WF_Step nextStep = new WF_Step(); nextStep.WF_InstanceId = instance.Id; nextStep.SubTime = DateTime.Now; nextStep.ProcessTime = DateTime.Now; nextStep.ProcessComment = String.Empty; nextStep.IsEndStep = false; nextStep.IsStartStep = false; nextStep.ProcessBy = flowTo; nextStep.ProcessResult = ""; nextStep.StepName = ""; nextStep.StepStatus = (short)Wei.OA.Model.Enum.WFStepEnum.UnProcess; WF_StepService.Add(nextStep); return(RedirectToAction("ShowMyCheck")); }
private int InsertInstance(int instanceState, string formID, string createUserCode, string writerUserCode, string applyUserCode) { WF_Instance instance = new WF_Instance(); instance.ApplyUserCode = applyUserCode; instance.CreateTime = DateTime.Now; instance.CreateUserCode = createUserCode; instance.FormID = formID; instance.IsDelete = (int)IsDelete.UnDelete; instance.State = instanceState; instance.TmpKey = this.Tmpkey; instance.UpdateTime = DateTime.Now; instance.UpdateUserCode = createUserCode; instance.WriterUserCode = writerUserCode; return(instancebll.save(instance)); }
public override NodeReturn Run(FlowContent flowContent) { this.RunEndFlowEvent(flowContent); WF_Instance instance = instancebll.getByID(flowContent.CurrentInstanceID); if (instance != null) { instance.State = (int)Common.InstanceState.End; instance.UpdateTime = DateTime.Now; instance.UpdateUserCode = flowContent.CurrenUserCode; instancebll.update(instance); } NodeReturn ret = new NodeReturn(); ret.isOver = true; return(ret); }
public static Flow getFlowByTodo(int todoid, string currenUserCode) { WF_ToDo todo = todobll.getByID(todoid); WF_Instance instance = instancebll.getByID(todo.InstanceID); WF_Template tmp = tmpbll.getByKey(instance.TmpKey); Flow flo = GetFlowByTmpKey(tmp.key); flo.Tmpkey = instance.TmpKey; flo.FormName = tmp.TmpName; flo.CurrenUserCode = currenUserCode; flo.ApplyUserCode = instance.ApplyUserCode; flo.FormID = instance.FormID; flo.InstanceID = instance.ID; flo.InstanceState = instance.State; flo.TodoID = todoid; flo.WriterUserCode = instance.WriterUserCode; flo.Init(); return(flo); }
public int save(WF_Instance entity) { return(dao.save(entity)); }
public ActionResult Add(WF_Instance instance, int id, int flowTo) { var CurrentUserId = LoginUser.ID; //1->在工作流实例表中添加一条数据 instance.DelFlag = DelFlag; instance.StartTime = DateTime.Now; instance.FilePath = string.Empty; instance.StartBy = CurrentUserId; //当前用户 也就是发起人 instance.Level = 0; //紧急程度 instance.Status = (short)WF_InstanceEnum.Processing; instance.WF_TempID = id; //WF_TempBLL.Add(instance); WF_InstanceBLL.Add(instance); //2->在步骤表里面添加两条步骤 //2->1 一个当前已处理的步骤 WF_Step startStep = new WF_Step(); startStep.WF_InstanceID = instance.ID; startStep.SubTime = DateTime.Now; startStep.StepName = "提交申请表单"; startStep.IsEndStep = false; startStep.IsStartStep = true; startStep.ProcessBy = CurrentUserId; startStep.ProcessContent = "提交申请"; startStep.ProcessResult = "通过"; startStep.ProcessTime = DateTime.Now; startStep.StepStaus = (short)WFStepEnum.Processed; WF_StepBLL.Add(startStep); //2->2 下一步谁审批的步骤 。项目经理审批 WF_Step nextStep = new WF_Step(); nextStep.WF_InstanceID = instance.ID; nextStep.SubTime = DateTime.Now; nextStep.ProcessTime = DateTime.Now; nextStep.ProcessContent = string.Empty; nextStep.IsStartStep = false; nextStep.IsEndStep = false; nextStep.ProcessBy = flowTo; nextStep.ProcessResult = ""; nextStep.StepName = ""; nextStep.StepStaus = (short)WFStepEnum.UnProecess; WF_StepBLL.Add(nextStep); //3->启动工作流 //根据流程类型 来初始化对应流程 spring 实现 //通过容器创建一个对象 依赖注入只能在子类中实现 // IApplicationContext ctx = ContextRegistry.GetContext(); var wftemp = WF_TempBLL.GetEntities(u => u.ID == id).FirstOrDefault(); //Activity activityType = ctx.GetObject(wftemp.ActityType.Split('.')[3]) as Activity; var wfApp = WorkflowApplicationHelper.CreateWorkflowApp( //new FincallActivity(), Assembly.Load("HeiMa8.OA.WorkFlow").CreateInstance(wftemp.ActityType) as Activity, null); instance.WFInstanceId = wfApp.Id; WF_InstanceBLL.Update(instance); return(Content("ok")); }
public ActionResult StartWorkflow(WF_Instance wF_Instance) { //将流程列表中添加数据 wF_Instance.ApplicationId = Convert.ToInt32(Guid.Empty); wF_Instance.Result = 0 + ""; wF_Instance.StartedBy = loginUser.id.ToString(); wF_Instance.Status = 0 + ""; wF_Instance.SubTime = DateTime.Now; wF_Instance.WF_TempID = int.Parse(Request["hiddenTempId"]); WF_InstanceService.AddEntity(wF_Instance); //然后启动流程 var dict = new Dictionary <string, object> { { "TempBookMarkName", "总监审批" } }; Guid guid = Guid.Empty; WorkflowApplicationHelper.CreateWorkflow(new FincalActivity(), dict, out guid); wF_Instance.ApplicationId = Convert.ToInt32(guid); //保存步骤 WF_StepInfo stepInfo = new WF_StepInfo(); stepInfo.ChildStepID = 0; stepInfo.Comment = "开始进行财务审批"; stepInfo.DelFlag = 0; stepInfo.IsProcessed = true; stepInfo.IsStartStep = true; stepInfo.IsEndStep = false; stepInfo.ProcessBy = loginUser.id; stepInfo.ParentStepID = 0; stepInfo.ParentStepID = 0; stepInfo.ProcessTime = DateTime.Now; stepInfo.Remark = "开始财务审批"; stepInfo.StepName = "第一步"; stepInfo.StepResult = 1 + ""; stepInfo.SubTime = DateTime.Now; stepInfo.Title = "开始财务审批"; stepInfo.WF_InstanceID = wF_Instance.ID; WF_StepInfoService.AddEntity(stepInfo); //保存步骤 WF_StepInfo masterStepInfo = new WF_StepInfo(); masterStepInfo.ChildStepID = 0; masterStepInfo.Comment = "总监开始进行财务审批"; masterStepInfo.DelFlag = 0; masterStepInfo.IsProcessed = false; masterStepInfo.IsStartStep = false; masterStepInfo.IsEndStep = false; masterStepInfo.ProcessBy = int.Parse(Request["FlowTo"]); masterStepInfo.ParentStepID = 0; masterStepInfo.ParentStepID = 0; masterStepInfo.ProcessTime = DateTime.Now; masterStepInfo.Remark = "总监开始财务审批"; masterStepInfo.StepName = "总监审批"; masterStepInfo.StepResult = 1 + ""; masterStepInfo.SubTime = DateTime.Now; masterStepInfo.Title = "开始财务审批"; masterStepInfo.WF_InstanceID = wF_Instance.ID; WF_StepInfoService.AddEntity(masterStepInfo); return(Content("ok")); }
public ActionResult Add(WF_Instance instance, int id, int flowTo) { var currentUserId = LoginUser.ID; //在工作流实例表添加一条数据: instance.DelFlag = delflagNormal; instance.StartTime = DateTime.Now; instance.FilePath = string.Empty; instance.StartBy = currentUserId; instance.Level = 0; instance.Status = (short)Heima8.OA.Model.Enum.WF_InstanceEnum.Processing; instance.WFInstanceId = Guid.Empty; instance.WF_TempID = id; WF_InstanceService.Add(instance); //第二点:启动工作流 //1、获得工作流类型 var temp = GetWfTemp(instance); var activity = WorkflowFactory.GetActivity(temp.ActityType); WorkflowApplication wfApp = null; //2、家具产品对应的逻辑 if (activity is ProductFlow) { //家具逻辑中,设计之后数控和小锯是二选一 var designRole = RoleInfoService.GetEntities(r => r.DelFlag == delflagNormal && r.RoleName.Contains("设计")) .FirstOrDefault(); string flowToKeyWord = GetRoleHelper.GetFlowToRoleKeyWord(designRole, id); wfApp = WorkflowApplicationHelper.CreateWorkflowApp(activity, new Dictionary <string, object>() { { "AfterDesignFlowTo", flowToKeyWord } }); }//else if{ 其他工作流的逻辑} else {//没有对应的工作流提前结束 return(RedirectToAction("ShowMyCheck")); } instance.WFInstanceId = wfApp.Id; WF_InstanceService.Update(instance); //第三点:在步骤表里面添加两条步骤。一个当前已经处理的完成步骤。 WF_Step startStep = new WF_Step(); startStep.WF_InstanceID = instance.ID; startStep.SubTime = DateTime.Now; startStep.StepName = "提交审批表单"; startStep.IsEndStep = false; startStep.IsStartStep = true; startStep.ProcessBy = currentUserId; startStep.PorcessComment = "提交申请"; startStep.ProcessResult = "通过"; startStep.ProcessTime = DateTime.Now; // startStep.StepName = "提交审批表单"; startStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.Processed; WF_StepService.Add(startStep); //二个步骤:下一步谁审批的步骤。 项目经理审批 WF_Step nextStep = new WF_Step(); nextStep.WF_InstanceID = instance.ID; nextStep.SubTime = DateTime.Now; nextStep.ProcessTime = DateTime.Now; nextStep.PorcessComment = string.Empty; nextStep.IsEndStep = false; nextStep.IsStartStep = false; nextStep.ProcessBy = flowTo; nextStep.ProcessResult = ""; nextStep.StepName = ""; nextStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.UnProecess; WF_StepService.Add(nextStep); return(RedirectToAction("ShowMyCheck")); }
WF_Temp GetWfTemp(WF_Instance instance) { return(WF_TempService.GetEntities(t => t.DelFlag == delflagNormal && t.ID == instance.WF_TempID).FirstOrDefault()); }
/// <summary> /// 待办处理操作 /// </summary> /// <param name="vallist">流程实例变量</param> /// <param name="todoID">待办id</param> /// <param name="operationUserCode">操作人工号 </param> /// <param name="operationType">操作类型</param> public void Operation(Dictionary <string, string> vallist, int todoID, string operationUserCode, Operation operationType, string common = null, string toNodeKey = null, string todoUserCode = null) { //禁止流程启动 if (operationType == Common.Operation.Start) { throw new Exception("不能执行流程启动操作"); } WF_ToDo todo = todobll.getByID(todoID); WF_Instance instance = instancebll.getByID(todo.InstanceID); if (instance.State != (int)Common.InstanceState.Enable) { throw new Exception("当前流程实例状态不是启用状态"); } if (todo.ResponseUserCode != operationUserCode) { List <WF_Agent> agentlist = agentBll.getAgentByOrg(todo.ResponseUserCode); if (agentlist == null || agentlist.Count == 0 || agentlist.Where(p => p.AgentUserCode == operationUserCode).Count() == 0) { throw new Exception("当前操作人不是待办责任人,也不是待办责任人的代理人"); } } if (todo.State != (int)Common.TodoState.UnDo) { throw new Exception("当前待办已经被处理了"); } FlowContent flowcontent = new FlowContent(); flowcontent.CurrenUserCode = operationUserCode; flowcontent.TmpKey = this.Tmpkey; flowcontent.CurrentInstanceID = todo.InstanceID; flowcontent.OperationType = (int)Common.Operation.Start; flowcontent.TaskName = todo.ToDoName; flowcontent.InstanceState = instance.State; flowcontent.CurrentNodeKey = todo.Nodekey; flowcontent.OperationType = (int)operationType; flowcontent.CurrentTodoID = todo.ID.ToString(); flowcontent.FormID = instance.FormID; if (this.beforOperation != null) { this.beforOperation(flowcontent); } FlowNode node = NodeFactory.getFlowNode(instance.TmpKey, todo.Nodekey, this.endFlow); // 处理 同意 if (operationType == Common.Operation.Agree) { this.Apply(vallist, todoID, operationUserCode, operationType, common, flowcontent, node); } //todo 处理 撤回 //if (operationType == Common.Operation.CallBack) //{ //this.Apply(vallist, todoID, operationUserCode, operationType, common, flowcontent, node); //} // 处理 流程跳转 if (operationType == Common.Operation.GoTo) { this.GoTo(vallist, todoID, operationUserCode, operationType, common, flowcontent, node, toNodeKey); } //todo 处理 传阅 //if (operationType == Common.Operation.Read) //{ // this.Apply(vallist, todoID, operationUserCode, operationType, common, flowcontent, node); //} // 处理 驳回 if (operationType == Common.Operation.Reject) { this.Reject(vallist, todoID, operationUserCode, operationType, common, flowcontent, node, toNodeKey); } // 处理 转签 if (operationType == Common.Operation.Redirect) { this.Redirect(vallist, todoID, operationUserCode, operationType, common, flowcontent, node, todoUserCode); } // 处理 加签 if (operationType == Common.Operation.Add) { this.Add(vallist, todoID, operationUserCode, operationType, common, flowcontent, node, todoUserCode); } if (this.afterOperation != null) { this.afterOperation(flowcontent); } }
public bool update(WF_Instance entity) { return(dao.update(entity)); }
public WfResult Execute(WfRunner runner) { var result = instanceService.GetInstance(runner); if (result.Instance == null) { // create instance var instance = new WF_Instance(); instance.InitializeId(); instance.DCreate = DateTime.Now; instance.AppInstanceId = runner.AppInstanceId; instance.CreateUser_Id = runner.AC.User.Id; instance.CreateUser_Name = runner.AC.User.UserName ?? runner.AC.User.NickName; instance.Process_Id = result.Process.Id; instance.Process_Name = result.Process.Name; instance.StartTask_Id = result.Task.Id; instance.Status = WfProcessStatus.Running; instanceService.Insert(instance); var iTask = new WF_InstanceTask(); iTask.InitializeId(); iTask.DCreate = DateTime.Now; iTask.AppInstanceId = runner.AppInstanceId; iTask.Process_Id = result.Process.Id; iTask.Process_Name = result.Process.Name; iTask.Task_Id = result.Task.Id; iTask.Task_Name = result.Task.Name; iTask.DFetch = DateTime.Now; iTask.Status = WfTaskStatus.Dealing; iTask.Audit = WfAuditState.UnSend; iTask.Action = WfActionType.Begin; iTask.CreateUser_Id = runner.AC.User.Id; iTask.User_Id = instance.CreateUser_Id; iTask.User_Name = instance.CreateUser_Name; iTaskService.Insert(iTask); result.Instance = instance; result.InstanceTask = iTask; } if (runner.LoadPrevInstanceTask && result.InstanceTask.Prev_Id.HasValue) { result.PrevInstanceTask = iTaskService.Get(result.InstanceTask.Prev_Id.Value); } if (runner.LoadBackInstanceTask) { result.BackInstanceTask = GetBackInstanceTask(result); } if (runner.LoadNextTasks) { result.NextTasks = GetNextTasks(result); } if (runner.LoadCanWithdraw) { if (result.InstanceTask.Status == WfTaskStatus.Processed) { result.CanWithdraw = CanWithdraw(runner, result); } else { result.CanWithdraw = false; } } return(result); }