示例#1
0
        /// <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
            }));
        }
示例#3
0
 /// <summary>
 ///     获取第一步开始流程信息
 /// </summary>
 /// <returns></returns>
 public Task <WorkflowEngineDealWithTaskOutput> GetWorkflowEngineStartTaskOutput(
     WorkflowEngineStartTaskInput input)
 {
     return(_workflowEngineRepository.GetWorkflowEngineStartTaskOutput(input));
 }
示例#4
0
        /// <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
                });
            }
        }
示例#5
0
 public async Task <JsonResult> StartWorkflowEngineProcess(WorkflowEngineStartTaskInput input)
 {
     input.PrincipalUser = CurrentUser;
     input.Type          = ResourceWorkflowEngine.开始节点;
     return(Json(await _workflowEngineLogic.StartWorkflowEngineProcess(input)));
 }