/// <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); }
/// <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)); }