/// <summary>
        ///     更新活动状态
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public Task <int> UpdateActivityMarked(WorkflowEngineActivityOrLineMarkedInput input)
        {
            const string sql =
                "UPDATE Workflow_ProcessInstance_Activity SET Marked='True' WHERE ActivityId=@activity AND ProcessInstanceId=@processInstanceId";

            return(SqlMapperUtil.InsertUpdateOrDeleteSql <WorkflowEngineActivityOrLineMarkedInput>(sql, new
            {
                activity = input.Activity,
                processInstanceId = input.ProcessInstanceId
            }));
        }
        /// <summary>
        ///     更新连线状态
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <OperateStatus> UpdateLineMarked(WorkflowEngineActivityOrLineMarkedInput input)
        {
            var operateStatus = new OperateStatus();

            if ((await _repository.UpdateLineMarked(input)) > 0)
            {
                operateStatus.ResultSign = ResultSign.Successful;
                return(operateStatus);
            }
            return(operateStatus);
        }
Beispiel #3
0
        /// <summary>
        ///     ¸üÐÂÁ¬Ïß״̬
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public Task <int> UpdateLineMarked(WorkflowEngineActivityOrLineMarkedInput input)
        {
            const string sql =
                "UPDATE Workflow_ProcessInstance_Line SET Marked='True' WHERE [From]=@from AND [To]=@to AND ProcessInstanceId=@processInstanceId";

            return(SqlMapperUtil.InsertUpdateOrDeleteSql <WorkflowProcessInstanceLine>(sql, new
            {
                from = input.Activity,
                to = input.ToActivity,
                processInstanceId = input.ProcessInstanceId
            }));
        }
        /// <summary>
        ///     保存流程到下一步
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <OperateStatus> SaveWorkflowEngineTaskNext(WorkflowEngineRunnerInput input)
        {
            //根据当前模块Id及实例Id获取下一步流程信息
            var nextActivitys = await GetWorkflowEngineNextActivitysDoubleWay(input);

            IList <WorkflowProcessInstanceTask> tasks = new List <WorkflowProcessInstanceTask>();
            //更新状态
            var markedInput = new WorkflowEngineActivityOrLineMarkedInput
            {
                Activity          = input.CurrentActivityId,
                ProcessInstanceId = input.ProcessInstanceId
            };

            //插入流程任务表
            foreach (var activity in nextActivitys)
            {
                //判断该节点是否为结束节点
                var processTask = new WorkflowProcessInstanceTask
                {
                    TaskId              = CombUtil.NewComb(),
                    Title               = input.Title,
                    ProcessInstanceId   = input.ProcessInstanceId,
                    PrevTaskId          = input.CurrentTaskId,
                    PrevActivityId      = input.CurrentActivityId,
                    PrevActivityName    = input.CurrentActivityName,
                    CurrentActivityId   = activity.ActivityId,
                    CurrentActivityName = activity.Name,
                    SendUserId          = input.CurrentUser.UserId,
                    SendUserName        = input.CurrentUser.Name,
                    SendTime            = DateTime.Now,
                    Status              = (byte)EnumTask.正在处理,
                    ReceiveTime         = DateTime.Now
                };
                if (activity.AcitvityType == EnumAcitvityType.结束)
                {
                    processTask.Status          = (byte)EnumTask.完成;
                    processTask.ReceiveUserId   = input.CurrentUser.UserId;
                    processTask.ReceiveUserName = input.CurrentUser.Name;
                    processTask.DoUserId        = input.CurrentUser.UserId;
                    processTask.DoUserName      = input.CurrentUser.Name;
                    processTask.DoTime          = DateTime.Now;
                    markedInput.ToActivity      = processTask.CurrentActivityId;
                    await _workflowProcessInstanceLineLogic.UpdateLineMarked(markedInput);

                    tasks.Add(processTask);
                    //修改流程总状态及处理人
                    var processInstance = await _workflowProcessInstanceLogic.GetByIdAsync(input.ProcessInstanceId);

                    processInstance.Status              = (byte)EnumProcessStatu.已完成;
                    processInstance.EndUserId           = input.CurrentUser.UserId;
                    processInstance.EndUserName         = input.CurrentUser.Name;
                    processInstance.EndTime             = DateTime.Now;
                    processInstance.EndUserOrganization = input.CurrentUser.OrganizationName;
                    await _workflowProcessInstanceLogic.UpdateAsync(processInstance);

                    break;
                }
                //获取流程下一步处理人员
                var receiveUsers = await Task.Run(() => GetWorkflowEngineTaskNextReceiveUser(activity).ToList());

                if (!receiveUsers.Any())
                {
                    return(new OperateStatus
                    {
                        ResultSign = ResultSign.Error,
                        Message = string.Format(ResourceWorkflow.处理人为空, activity.Name)
                    });
                }
                //获取流程处理人,为该流程所有处理人新增一条待办记录
                foreach (var receive in receiveUsers)
                {
                    processTask.ReceiveUserId   = receive.ReceiveUserId;
                    processTask.ReceiveUserName = receive.ReceiveUserName;
                    markedInput.ToActivity      = processTask.CurrentActivityId;
                    await _workflowProcessInstanceLineLogic.UpdateLineMarked(markedInput);

                    tasks.Add(processTask);
                }
            }
            //更新状态
            markedInput = new WorkflowEngineActivityOrLineMarkedInput
            {
                Activity          = input.CurrentActivityId,
                ProcessInstanceId = input.ProcessInstanceId
            };
            //更新活动状态
            await _workflowProcessInstanceActivityLogic.UpdateActivityMarked(markedInput);

            //修改当前步骤为完成
            await _workflowProcessTaskLogic.UpdateProcessTaskStatus(new WorkflowEngineProcessTaskStatusInput()
            {
                Comment       = input.Comment,
                PrincipalUser = input.CurrentUser,
                Status        = EnumActivityStatus.完成,
                TaskId        = input.CurrentTaskId
            });

            return(await _workflowProcessTaskLogic.InsertMultipleDapperAsync(tasks));
        }