public ActionResult FlowHandle(FlowProjectDto dto) { var form = FlowContract.FlowRelateForms.Where(c => c.FlowDesignId == dto.FlowId).Select(m => new { m.FlowForm.FilePath, m.FlowForm.ActionPath }).SingleOrDefault(); dto.FileUrl = form.FilePath; dto.ActionUrl = form.ActionPath; return(View(FlowContract.GetFlowOperateStatus(dto, Operator.UserId))); }
public ActionResult ExecuteAudit(FlowProjectDto dto) { var Edto = new FlowExecuteDto() { FlowId = dto.FlowId, TaskId = dto.TaskId, ItemId = dto.ItemId, ExecuteType = ExecuteType.Submit, SenderId = Operator.UserId, SenderName = Operator.NickName }; //推送 ExecTask(); return(Json(Execute(Edto), JsonRequestBehavior.AllowGet)); }
/// <summary> /// 获取 根据指定任务和用户的当前任务操作的状态dto /// </summary> /// <param name="dto">当前任务操作的状态dto</param> /// <param name="userId">当前用户Id</param> /// <returns>当前任务操作的状态dto</returns> public FlowProjectDto GetFlowOperateStatus(FlowProjectDto dto, string userId) { var currentTask = FlowTaskRepository.Entities.Where(c => c.Id == dto.TaskId).Select(m => new { m.Id, m.PrevId, m.StepId, m.Status, m.ReceiverId, m.PrevStepId }).SingleOrDefault(); FlowOperateStatusDto status = new FlowOperateStatusDto(); if (currentTask == null) { status.HasSave = true; status.HasSumbit = true; status.HasBack = false; status.HasCallBack = false; status.HasAudit = false; status.HasAssign = false; status.IsCompleted = false; status.GroupTask = false; } else { var currentStep = FlowStepRepository.Entities.Where(c => c.FlowDesignId == dto.FlowId && c.StepId == currentTask.StepId). Select(m => new { m.StepType, m.CountersignStrategy, m.CountersignPer, m.BackType }).SingleOrDefault(); #region 根据任务状态判断任务可执行的操作 if ((currentTask.Status == 1 || currentTask.Status == 2) && currentTask.ReceiverId == userId) { //是否可结束流程 if (currentStep.StepType == 2) { status.IsCompleted = true; } else //任务会审时判断是否需要选指定人 { switch (currentStep.CountersignStrategy) { case 0: int count = GetSiblingTask(dto.ItemId, currentTask.StepId).Where(c => c.Status < 10).Count(); if (count > 1) { status.HasAudit = true; } else { status.HasAssign = true; } break; case 2: decimal percentage = currentStep.CountersignPer <= 0 ? 100 : currentStep.CountersignPer; IQueryable <WorkFlowTask> TaskQueryable = GetSiblingTask(dto.ItemId, currentTask.StepId).Where(c => c.PrevId == currentTask.PrevId); if (Math.Round((((decimal)(TaskQueryable.Where(p => p.Status == 10).Count() + 1) / (decimal)TaskQueryable.Where(p => p.Status <= 10).Count()) * 100), 2, MidpointRounding.AwayFromZero) < percentage) { status.HasAudit = true; } else { status.HasAssign = true; } break; default: status.HasAssign = true; break; } } //是否可退回 if (currentStep.BackType == 0) { status.HasBack = false; } else { status.HasBack = true; } } if (currentTask.ReceiverId == userId) { //判断是否具有编辑表单的权限 if (currentTask.PrevStepId == -1 && (currentTask.Status == 1 || currentTask.Status == 2)) { status.HasSave = true; } //判断任务是否可以撤销 OperationResult result = IsCallBack(dto.TaskId); if (result.ResultType == OperationResultType.Success && currentTask.PrevId != Guid.Empty) { status.HasCallBack = true; } else { status.HasCallBack = false; } } status.GroupTask = true; #endregion } dto.OperateStatus = status; return(dto); }