/// <summary> /// 流程运行开始 /// </summary> /// <param name="input">表单Id</param> /// <returns></returns> public async Task <ViewResultBase> Start(WorkflowEngineStartTaskInput input) { input.Type = ResourceWorkflowEngine.开始节点; var output = await _workflowEngineLogic.GetWorkflowEngineStartTaskOutput(input); output.ProcessName = output.ProcessName + "-" + CurrentUser.Name + "(" + DateTime.Now.ToString(DateTimeConfig.DateTimeFormatS) + ")"; return(View(output)); }
/// <summary> /// 获取第一步开始流程信息 /// 1、活动Id /// 2、对应表单地址 /// 3、能够操作的按钮 /// </summary> /// <returns></returns> public Task <WorkflowEngineDealWithTaskOutput> GetWorkflowEngineStartTaskOutput( WorkflowEngineStartTaskInput input) { const string sql = @"select ActivityId,form.Url FormUrl,activity.Buttons,activity.Name,process.Name ProcessName from Workflow_ProcessActivity activity left join Workflow_Form form on activity.FormId=form.FormId left join Workflow_Process process on activity.ProcessId=process.ProcessId where activity.ProcessId=@processId and activity.[Type]=@type"; return(SqlMapperUtil.SqlWithParamsSingle <WorkflowEngineDealWithTaskOutput>(sql, new { processId = input.ProcessId, input.Type })); }
/// <summary> /// 获取第一步开始流程信息 /// </summary> /// <returns></returns> public Task <WorkflowEngineDealWithTaskOutput> GetWorkflowEngineStartTaskOutput( WorkflowEngineStartTaskInput input) { return(_workflowEngineRepository.GetWorkflowEngineStartTaskOutput(input)); }
/// <summary> /// 开始启动流程 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <OperateStatus> StartWorkflowEngineProcess(WorkflowEngineStartTaskInput input) { try { //查询流程信息 var processActivity = await _workflowProcessActivityLogic.GetWorkflowProcessActivityByProcessId(new IdInput { Id = input.ProcessId }); var processLine = await _workflowProcessLineLogic.GetWorkflowProcessLineByProcessId(new IdInput { Id = input.ProcessId }); //插入流程实例信息 var processInstance = new WorkflowProcessInstance { Status = (byte)EnumProcessStatu.处理中, ProcessInstanceId = CombUtil.NewComb(), ProcessId = input.ProcessId, Title = input.Title, Urgency = input.Urgency, CreateTime = DateTime.Now, CreateUserId = input.PrincipalUser.UserId, CreateUserName = input.PrincipalUser.Name, CreateUserOrganization = input.PrincipalUser.OrganizationName, UpdateTime = DateTime.Now, UpdateUserId = input.PrincipalUser.UserId, UpdateUserName = input.PrincipalUser.Name, UpdateUserOrganization = input.PrincipalUser.OrganizationName, }; //插入流程实例活动信息 IList <WorkflowProcessInstanceActivity> processInstanceActivitys = new List <WorkflowProcessInstanceActivity>(); foreach (var activity in processActivity) { var processInstanceActivity = activity.MapTo <WorkflowProcessInstanceActivity>(); processInstanceActivity.ProcessInstanceId = processInstance.ProcessInstanceId; processInstanceActivity.Marked = false; processInstanceActivitys.Add(processInstanceActivity); } //插入流程实例连线信息 IList <WorkflowProcessInstanceLine> processInstanceLines = new List <WorkflowProcessInstanceLine>(); foreach (var line in processLine) { var processInstanceLine = line.MapTo <WorkflowProcessInstanceLine>(); processInstanceLine.ProcessInstanceId = processInstance.ProcessInstanceId; processInstanceLine.Marked = false; processInstanceLines.Add(processInstanceLine); } //插入数据 await _workflowProcessInstanceLogic.InsertAsync(processInstance); await _workflowProcessInstanceActivityLogic.InsertMultipleDapperAsync(processInstanceActivitys); await _workflowProcessInstanceLineLogic.InsertMultipleDapperAsync(processInstanceLines); //获取发起步骤 var startTask = await GetWorkflowEngineStartTaskOutput(input); //插入第一步流程任务信息 var processTask = new WorkflowProcessInstanceTask { TaskId = CombUtil.NewComb(), Title = input.Title, ProcessInstanceId = processInstance.ProcessInstanceId, CurrentActivityId = startTask.ActivityId, CurrentActivityName = startTask.Name, SendUserId = input.PrincipalUser.UserId, SendUserName = input.PrincipalUser.Name, SendTime = DateTime.Now, ReceiveUserId = input.PrincipalUser.UserId, ReceiveUserName = input.PrincipalUser.Name, ReceiveTime = DateTime.Now, DoUserId = input.PrincipalUser.UserId, DoUserName = input.PrincipalUser.Name, DoTime = DateTime.Now, Status = (byte)EnumActivityStatus.完成 }; await _workflowProcessTaskLogic.InsertAsync(processTask); //下一步 var operateStatus = await SaveWorkflowEngineTaskNext(new WorkflowEngineRunnerInput { Title = processInstance.Title, ProcessInstanceId = processInstance.ProcessInstanceId, CurrentActivityId = startTask.ActivityId, CurrentActivityName = startTask.Name, CurrentTaskId = processTask.TaskId, CurrentUser = input.PrincipalUser, ProcessId = startTask.ProcessId }); return(operateStatus); } catch (Exception ex) { LogWriter.WriteLog(FolderName.Workflow, "启动流程发生异常:" + ex.Message); return(new OperateStatus { ResultSign = ResultSign.Error, Message = ex.Message }); } }
public async Task <JsonResult> StartWorkflowEngineProcess(WorkflowEngineStartTaskInput input) { input.PrincipalUser = CurrentUser; input.Type = ResourceWorkflowEngine.开始节点; return(Json(await _workflowEngineLogic.StartWorkflowEngineProcess(input))); }