private async Task <bool> GetLaunchUser(long proInsId, List <Users> launchUsers, List <WfActivitySelectModel> model, WfActivity act, JsonModel jsonResult) { if (launchUsers.Count == 0) { long launchUserId = 0; if (proInsId == 0) { launchUserId = User.UserInfo.UserId; } else { var proIns = await WorkflowSvc.GetProcessInstanceAsync(proInsId); if (proIns == null) { jsonResult.message = $"找不到id为{proInsId}的流程实例!"; return(false); } launchUserId = proIns.CreateUserId; } var launchUser = await UsersRepository.GetByIdAsync(launchUserId); launchUsers.Add(launchUser); } model.Add(new WfActivitySelectModel() { Activity = act, UserList = launchUsers }); return(true); }
public async Task <ActionResult> Index(TableSource src, long proInsId = 0, long currActInsId = 0, long id = 0) { var result = new JsonModel(); result.statusCode = 300; var process = await WorkflowSvc.GetProcessBySource(src); if (process == null) { result.message = $"请假流程还未创建,请先创建{src}流程!"; return(Json(result, JsonRequestBehavior.AllowGet)); } var model = await GetModel(src, id, result); if (model == null) { return(Json(result, JsonRequestBehavior.AllowGet)); } model.Id = id; model.ProcessId = process.Id; model.ProcessInstanceId = proInsId; model.CurrActInsId = currActInsId; model.DealActivityList = new List <WfActivityInstance>(); model.TableSource = src; if (proInsId != 0) { model.DealActivityList = await WorkflowSvc.GetDealActivityListAsync(proInsId); } return(View(model)); }
public ActionResult ApplyList(string name, string title, DateTime?startTime, DateTime?endTime, WfProcessState?state, string activityName, string orderField, string orderDirection, int pageSize = 30, int pageCurrent = 1) { ViewBag.startTime = startTime; ViewBag.endTime = endTime; var list = WorkflowSvc.GetApplyList(false, name, title, startTime, endTime, state, activityName, orderField, orderDirection, pageSize, pageCurrent); return(View(list)); }
public ActionResult MyCompleteTaskList(string keyWord, DateTime?createStartTime, DateTime?createEndTime, DateTime?dealStartTime, DateTime?dealEndTime, string orderField = "Id", string orderDirection = "desc", int pageSize = 30, int pageCurrent = 1) { ViewBag.KeyWord = keyWord; ViewBag.CreateStartTime = createStartTime; ViewBag.CreateEndTime = createEndTime; ViewBag.DealStartTime = dealStartTime; ViewBag.DealEndTime = dealEndTime; var list = WorkflowSvc.GetMyCompleteTaskList((keyWord ?? "").Trim(), createStartTime, createEndTime, dealStartTime, dealEndTime, orderField, orderDirection, pageSize, pageCurrent); return(View(list)); }
public async Task <ActionResult> DealActivity(DealActivityModel model) { var jsonModel = await WorkflowSvc.DealProcess(model.ProcessInstanceId, model.ActivityInstanceId, model.ClickButton, model.Comment, model.NextStepId, model.AssignToUserIds, model.AssignToUserNames, model.BackStepId); return(Json(jsonModel)); }
private async Task <WfApplyBase> GetModel(TableSource src, long id, JsonModel result) { WfApplyBase model = null; switch (src) { case TableSource.LeaveInfo: model = new LeaveInfoModel() { Days = 1, StartTime = DateTime.Now.AddDays(1), EndTime = DateTime.Now.AddDays(2) }; break; case TableSource.SealInfo: model = new SealInfoModel() { ApplyUserName = User.UserInfo.RealName, ApplyTime = DateTime.Now }; break; case TableSource.MeetingRoomInfo: model = new MeetingRoomInfoModel() { UsedTime = DateTime.Now, ApplyTime = DateTime.Now, ApplyName = User.UserInfo.RealName }; break; default: break; } if (id != 0) { var sourceData = await WorkflowSvc.GetSourceAsync(src, id); if (sourceData == null) { result.message = $"找不到Id为{model.Id}的{src}!"; return(null); } Mapper.Map(sourceData, model); } return(model); }
public async Task <ActionResult> FlowProcessing(long proInsId) { var flowInstance = await WorkflowSvc.GetProcessInstanceAsync(proInsId); bool isCompleted = (flowInstance != null && flowInstance.ProcessState == WfProcessState.Completed); ViewBag.IsCompleted = isCompleted.ToString().ToLower(); var lstKeys = WorkflowSvc.GetActivityPathAsync(proInsId); ViewBag.FlowPathKeys = String.Join(",", lstKeys); ViewBag.CurrFlowData = await WorkflowSvc.GetProcessContentAsync(proInsId); return(View()); }
public async Task <ActionResult> ApplyInfo(TableSource src, long srcId) { var jsonModel = new JsonModel(); jsonModel.statusCode = 300; var source = await WorkflowSvc.GetSourceAsync(src, srcId); if (source == null) { jsonModel.message = $"找不到id为{src}的数据源{srcId}!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } var model = new DealActivityViewModel() { TableSource = src, SourceData = source }; return(View(model)); }
private async Task DealProcess(WfApplyBase model, long srcId, JsonModel result, string conditions = null) { if (model.ProcessInstanceId != 0) { var processInstance = await WorkflowSvc.GetProcessInstanceAsync(model.ProcessInstanceId); if (processInstance == null) { result.statusCode = 300; result.message = $"找不到id为{model.ProcessInstanceId}的流程实例!"; return; } processInstance.Conditions = conditions; result = await WorkflowSvc.DealProcess(model.ProcessInstanceId, model.CurrActInsId, WfActivityButton.Send, "重新提交信息", model.NextStepId, model.AssignToUserIds, model.AssignToUserNames); return; } //创建流程 result = await WorkflowSvc.StartProcess(model.ProcessId, srcId, conditions, model.NextStepId, model.AssignToUserIds, model.AssignToUserNames); if (result.statusCode == 200) { result.message = "申请成功,请等待审批!"; } }
public ActionResult MyTaskList(int pageSize = 30, int pageCurrent = 1) { var list = WorkflowSvc.GetMyTaskList(pageSize, pageCurrent); return(View(list)); }
/// <summary> /// 选择下一步骤及人员 /// </summary> /// <param name="type"></param> /// <param name="processId"></param> /// <param name="currActId"></param> /// <param name="conditions"></param> /// <returns></returns> public async Task <ActionResult> FlowStepSelect(WfActivityType type, long processId, string currActId, string conditions, long proInsId = 0) { var jsonResult = new JsonModel(); jsonResult.statusCode = 300; #region 找流程 var process = await WorkflowSvc.GetProcessById(processId); if (process == null) { jsonResult.message = $"找不到id为{processId}的流程!"; return(Json(jsonResult, JsonRequestBehavior.AllowGet)); } #endregion #region 找当前节点 WfActivity currAct = null; switch (type) { case WfActivityType.Start: currAct = process.GetFirstActivity(); break; case WfActivityType.Task: if (string.IsNullOrEmpty(currActId)) { jsonResult.message = "请输入当前节点Id!"; return(Json(jsonResult, JsonRequestBehavior.AllowGet)); } currAct = process.GetActivity(currActId); break; default: break; } if (currAct == null) { jsonResult.message = "当前节点不存在!"; return(Json(jsonResult, JsonRequestBehavior.AllowGet)); } #endregion #region 找可选节点列表 var condition = GetCondition(conditions); var nextList = process.GetNextActivityList(currAct.key, condition); if (nextList == null || nextList.Count == 0) { jsonResult.message = "可选节点为空!请重新编辑流程!"; return(Json(jsonResult, JsonRequestBehavior.AllowGet)); } List <Users> launchUsers = new List <Users>(); var model = new List <WfActivitySelectModel>(); foreach (var act in nextList) { switch (act.dealType) { case WfActivityDealType.Creater: var getResult = await GetLaunchUser(proInsId, launchUsers, model, act, jsonResult); if (!getResult) { return(Json(jsonResult, JsonRequestBehavior.AllowGet)); } break; case WfActivityDealType.Role: await GetRoleUsers(model, act); break; default: break; } } #endregion return(View(model)); }
/// <summary> /// 处理节点 /// </summary> /// <param name="proInsId"></param> /// <param name="actInsId"></param> /// <returns></returns> public async Task <ActionResult> DealActivity(long proInsId, long actInsId) { var jsonModel = new JsonModel(); jsonModel.statusCode = 300; #region //获取流程实例 var processInstance = await WorkflowSvc.GetProcessInstanceAsync(proInsId); if (processInstance == null) { jsonModel.message = $"找不到id为{proInsId}的流程实例!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } #endregion #region //判断显示哪些按钮:1:回退;2:发送;3:完成。 var process = await WorkflowSvc.GetProcessById(processInstance.WfProcessId); if (process == null) { jsonModel.message = $"找不到id为{processInstance.WfProcessId}的流程!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } var currActIns = await WorkflowSvc.GetActivityAsync(proInsId, actInsId); if (currActIns == null) { jsonModel.message = $"流程{processInstance.ProcessName}({proInsId})中找不到id为{actInsId}的节点实例!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } if (currActIns.ActivityState != WfActivityState.Running) { jsonModel.message = $"该节点实例[{currActIns.ActivityName}(id:{currActIns.Id})]已经处理,状态为[{currActIns.ActivityState.GetDescriotion()}]!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } //如果是第一个节点,这跳转到对应的申请页面 var firstAct = process.GetFirstActivity(); if (firstAct.key == currActIns.ActivityGuid) { return(RedirectToAction("Index", "WorkflowApply", new { proInsId = processInstance.Id, id = processInstance.SourceId, currActInsId = currActIns.Id, src = processInstance.TableSource })); } WfActivityButton buttons = WfActivityButton.None; //是否有回退按钮 if (currActIns.PreActInstanceId != 0) { buttons = buttons | WfActivityButton.FallBack; } var conditions = GetCondition(processInstance.Conditions); var nextList = process.GetNextActivityList(currActIns.ActivityGuid, conditions); if (nextList == null || nextList.Count == 0) { jsonModel.message = "可选节点为空!请重新编辑流程!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } if (nextList.Any(m => m.activityType == WfActivityType.End)) { buttons = buttons | WfActivityButton.Complete; } if (nextList.Any(m => m.activityType == WfActivityType.Task)) { buttons = buttons | WfActivityButton.Send; } #endregion #region 获取历史处理信息 var dealActivityList = await WorkflowSvc.GetDealActivityListAsync(processInstance.Id); #endregion #region //获取展示信息 var src = await WorkflowSvc.GetSourceAsync(processInstance.TableSource, processInstance.SourceId); if (src == null) { jsonModel.message = $"找不到id为{processInstance.SourceId}的数据源{processInstance.TableSource}!"; return(Json(jsonModel, JsonRequestBehavior.AllowGet)); } #endregion var model = new DealActivityViewModel() { ActivityInstance = currActIns, Buttons = buttons, SourceData = src, TableSource = processInstance.TableSource, DealActivityList = dealActivityList, ProcessInstance = processInstance }; return(View(model)); }
/// <summary> /// 流程信息 /// </summary> /// <param name="proInsId">流程实例Id</param> /// <returns></returns> public async Task <ActionResult> FlowActivityList(long proInsId) { var activityList = await WorkflowSvc.GetActivityListAsync(proInsId); return(View(activityList)); }
public async Task <ActionResult> BackStepSelect(long proInsId, long actInsId) { var result = new JsonModel(); result.statusCode = 300; #region 检查数据完整性 var processInstance = await WorkflowSvc.GetProcessInstanceAsync(proInsId); if (processInstance == null) { result.message = $"找不到Id为{proInsId}的流程实例!"; return(Json(result)); } var process = await WorkflowSvc.GetProcessById(processInstance.WfProcessId); if (process == null) { result.message = $"找不到Id为{processInstance.WfProcessId}的流程"; return(Json(result)); } var currActInstance = await WorkflowSvc.GetActivityAsync(processInstance.Id, actInsId); if (currActInstance == null) { result.message = $"在流程实例[{processInstance.ProcessName}({processInstance.Id})]中找不到id为{actInsId}的节点实例"; return(Json(result)); } var currActivity = process.GetActivity(currActInstance.ActivityGuid); if (currActivity == null) { result.message = $"在流程[{process.Name}({process.Id})]中找不到key为{currActInstance.ActivityGuid}的节点"; return(Json(result)); } #endregion #region 获取回退节点 WfActivity backStep = null; switch (currActivity.backType) { case WfActivityBackType.PreStep: var preActInstance = await WorkflowSvc.GetActivityAsync(processInstance.Id, currActInstance.PreActInstanceId); backStep = process.GetActivity(preActInstance.ActivityGuid); break; case WfActivityBackType.FirstStep: backStep = process.GetFirstActivity(); break; case WfActivityBackType.OtherStep: backStep = process.GetActivity(currActivity.backStep); break; default: break; } #endregion return(View(backStep)); }