public List <string> GetActivityPathAsync(long prosInsId) { var list = WfActivityInstanceRepository .AdminQueryEnable() .Where(m => m.ProcessInstanceId == prosInsId && (m.ActivityState == WfActivityState.Completed || m.ActivityState == WfActivityState.Running)) .OrderBy(m => m.Id) .Select(m => m.ActivityGuid) .ToListAsync(); // 流程图路径 var pathKeys = new List <string>(); foreach (var guid in list.Result) { // 如果被退回 if (pathKeys.Contains(guid)) { // 移除该步骤之后的路径 var index = pathKeys.IndexOf(guid) + 1; pathKeys.RemoveRange(index, pathKeys.Count - index); continue; } pathKeys.Add(guid); } return(pathKeys); }
public IPagedList <WfActivityInstance> GetMyCompleteTaskList(string keyWord, DateTime?createStartTime, DateTime?createEndTime, DateTime?dealStartTime, DateTime?dealEndTime, string orderField, string orderDirection, int pageSize = 30, int pageCurrent = 1) { var query = WfActivityInstanceRepository.AdminQueryEnable().Where(m => m.ActivityType == WfActivityType.Task && m.DealUserId == User.UserInfo.UserId); if (!string.IsNullOrEmpty(keyWord)) { query = query.Where(d => d.ProcessName.Contains(keyWord) || d.CreateUserName.Contains(keyWord) || d.ActivityName.Contains(keyWord)); } if (createStartTime.HasValue) { query = query.Where(d => d.CreateTime >= createStartTime.Value); } if (createEndTime.HasValue) { query = query.Where(d => d.CreateTime <= createEndTime.Value); } if (dealStartTime.HasValue) { query = query.Where(d => d.DealTime >= dealStartTime.Value); } if (dealEndTime.HasValue) { query = query.Where(d => d.DealTime <= dealEndTime.Value); } return(ToPageList(query, orderField, orderDirection, m => m.Id, pageCurrent, pageSize));; }
private async Task SendProgress(string nextStepId, string assignToUserIds, string assignToUserNames, JsonModel jsonModel, WfProcessInstance processInstance, WfProcess process, WfActivityInstance currActIns) { var nextAct = process.GetActivity(nextStepId); if (nextAct == null) { jsonModel.statusCode = 300; jsonModel.message = $"流程 {process.Name}的节点 {nextStepId} 找不到!"; return; } var nextActInstance = CreateActivityInstance(process, processInstance, nextAct, WfActivityState.Running, assignToUserIds, assignToUserNames); nextActInstance.PreActInstanceId = currActIns.Id; processInstance.CurrActivityName = nextActInstance.ActivityName; await WfActivityInstanceRepository.SaveAsync(nextActInstance); }
public Task <WfActivityInstance> GetRunningActivity(long proInsId) { var obj = WfActivityInstanceRepository .AdminQueryEnable() .FirstOrDefaultAsync(m => m.ProcessInstanceId == proInsId && m.ActivityState == WfActivityState.Running); return(obj); }
public Task <WfActivityInstance> GetActivityAsync(long prosInsId, long id) { var obj = WfActivityInstanceRepository .AdminQueryEnable() .FirstOrDefaultAsync(m => m.ProcessInstanceId == prosInsId && m.Id == id); return(obj); }
public Task <List <WfActivityInstance> > GetActivityListAsync(long prosInsId) { var list = WfActivityInstanceRepository .AdminQueryEnable() .Where(m => m.ProcessInstanceId == prosInsId) .OrderBy(m => m.Id) .ToListAsync(); return(list); }
/// <summary> /// 生成回退节点 /// </summary> /// <param name="processInstance"></param> /// <param name="process"></param> /// <param name="currActIns"></param> /// <returns></returns> private async Task FallBackProgress(WfProcessInstance processInstance, WfProcess process, WfActivityInstance currActIns, string backStepId) { var preActInstance = await WfActivityInstanceRepository.GetLatestActivityAsync(processInstance.Id, backStepId); var backActivity = process.GetActivity(backStepId); var backActInstance = CreateActivityInstance(process, processInstance, backActivity, WfActivityState.Running, preActInstance.AssignToUserIds, preActInstance.AssignToUserNames); backActInstance.PreActInstanceId = preActInstance.PreActInstanceId; backActInstance.BackActivityInstanceId = currActIns.Id; processInstance.CurrActivityName = backActInstance.ActivityName; currActIns.ActivityState = WfActivityState.Sendbacked; await WfActivityInstanceRepository.SaveAsync(backActInstance); }
public IPagedList <WfActivityInstance> GetMyTaskList(int pageSize = 30, int pageCurrent = 1) { var userId = $"[{User.UserInfo.UserId}]"; var queryProcess = WfProcessInstanceRepository.AdminQueryEnable() .Where(m => m.ProcessState == WfProcessState.Running); var queryActivity = WfActivityInstanceRepository .AdminQueryEnable() .Where(m => m.ActivityState == WfActivityState.Running && m.ActivityType == WfActivityType.Task && !string.IsNullOrEmpty(m.AssignToUserIds) && m.AssignToUserIds.Contains(userId)); queryActivity = queryActivity.Join( queryProcess, act => act.ProcessInstanceId, pro => pro.Id, (act, pro) => act); var list = queryActivity .OrderByDescending(m => m.Id) .ToPagedList(pageCurrent, pageSize); return(list); }
public async Task <JsonModel> DealProcess(long proInsId, long currActInsId, WfActivityButton clickBtn, string comment, string nextStepId, string assignToUserIds, string assignToUserNames, string backStepId) { var jsonModel = new JsonModel(); jsonModel.statusCode = 300; #region //获取流程数据 var processInstance = await GetProcessInstanceAsync(proInsId); if (processInstance == null) { jsonModel.message = $"找不到id为{proInsId}的流程实例!"; return(jsonModel); } var process = await GetProcessById(processInstance.WfProcessId); if (process == null) { jsonModel.message = $"找不到id为{processInstance.WfProcessId}的流程!"; return(jsonModel); } var currActIns = await GetActivityAsync(proInsId, currActInsId); if (currActIns == null) { jsonModel.message = $"流程{processInstance.ProcessName}({processInstance.Id})中找不到id为{currActInsId}的节点实例!"; return(jsonModel); } #endregion #region 当前节点处理 currActIns.Comment = comment; currActIns.DealTime = DateTime.Now; currActIns.DealUserId = User.UserInfo.UserId; currActIns.DealUserName = User.UserInfo.RealName; currActIns.ActivityState = WfActivityState.Completed; await WfActivityInstanceRepository.SaveAsync(currActIns); #endregion switch (clickBtn) { case WfActivityButton.FallBack: await FallBackProgress(processInstance, process, currActIns, backStepId); jsonModel.statusCode = 200; break; case WfActivityButton.Send: await SendProgress(nextStepId, assignToUserIds, assignToUserNames, jsonModel, processInstance, process, currActIns); jsonModel.statusCode = 200; break; case WfActivityButton.Complete: await CompleteProcess(processInstance); jsonModel.statusCode = 200; break; default: jsonModel.message = $"错误的按钮:{clickBtn}!"; break; } return(jsonModel); }
public async Task <JsonModel> StartProcess(long processId, long sourceId, string condition, string nextStepId, string assignToUserIds, string assignToUserNames) { var result = new JsonModel(); //创建流程实例 var process = await GetProcessById(processId); if (result == null) { result.statusCode = 300; result.message = "流程不存在!processId:" + processId; return(result); } var processInstance = new WfProcessInstance() { CommonStatus = CommonStatus.Enabled, ProcessName = process.Name, ProcessState = WfProcessState.Running, SourceId = sourceId, TableSource = process.TableSource, WfProcessId = process.Id, Conditions = condition }; await WfProcessInstanceRepository.SaveAsync(processInstance); //创建流程节点 var firstAct = process.GetFirstActivity(); if (firstAct == null) { result.statusCode = 300; result.message = $"流程 {process.Name}的第一个节点找不到!"; return(result); } WfActivityInstance firstActInstance = CreateActivityInstance(process, processInstance, firstAct, WfActivityState.Completed, User.UserInfo.UserId, User.UserInfo.RealName); firstActInstance.DealTime = DateTime.Now; firstActInstance.DealUserId = User.UserInfo.UserId; firstActInstance.DealUserName = User.UserInfo.RealName; await WfActivityInstanceRepository.SaveAsync(firstActInstance); //创建下一步节点 var nextAct = process.GetActivity(nextStepId); if (nextAct == null) { result.statusCode = 300; result.message = $"流程 {process.Name}的节点 {nextStepId} 找不到!"; return(result); } var nextActInstance = CreateActivityInstance(process, processInstance, nextAct, WfActivityState.Running, assignToUserIds, assignToUserNames); nextActInstance.PreActInstanceId = firstActInstance.Id; await WfActivityInstanceRepository.SaveAsync(nextActInstance); processInstance.CurrActivityName = nextActInstance.ActivityName; await WfProcessInstanceRepository.SaveAsync(processInstance); return(result); }