示例#1
0
        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)));
        }
示例#2
0
        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));
        }
示例#3
0
        /// <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);
        }