Beispiel #1
0
        /// <summary>
        /// 驳回
        /// </summary>
        /// <param name="stepApprovaObj">当前节点信息</param>
        /// <param name="recordsobj">当前审核人信息</param>
        /// <param name="msg"></param>
        /// <returns></returns>
        private bool Reject(WorkflowApprovalStep stepApprovaObj, WorkflowApprovalRecords recordsobj, ref string msg)
        {
            bool status = false;
            //添加当前节点审核的操作记录
            WorkflowApprovalRecords objRecords = new WorkflowApprovalRecords
            {
                DataType               = 2,
                AuditidTime            = DateTime.Now,
                Memo                   = "审批人 " + recordsobj.AuditidUserName + " 驳回了申请",
                WorkflowApprovalStepId = stepApprovaObj.Id
            };

            status = _workflowApprovalRecordsRepository.Add(objRecords) > 0 ? true : false;

            //修改当前节点的节点状态和人员审核状态
            status = _workflowApprovalStepRepository.Update(s => s.Id == stepApprovaObj.Id, s => new WorkflowApprovalStep {
                AuditNo = false
            });
            _workflowApprovalRecordsRepository.Update(s => s.WorkflowApprovalStepId == stepApprovaObj.Id && s.DataType == 1, s => new WorkflowApprovalRecords {
                AudioStatus = AudioStatus.UnApprovalInfo, AuditidTime = null
            });
            //修改上个节点的节点状态和人员审核状态
            var prevPassNo = _workflowApprovalStepRepository.Entites.Where(s => s.PassType != PassType.Copy && s.WorkflowBusinessId == stepApprovaObj.WorkflowBusinessId && s.PassNo < stepApprovaObj.PassNo).OrderByDescending(s => s.PassNo).FirstOrDefault();

            status = _workflowApprovalStepRepository.Update(s => s.Id == prevPassNo.Id, s => new WorkflowApprovalStep {
                AuditNo = true
            });

            status = _workflowApprovalRecordsRepository.Update(s => s.WorkflowApprovalStepId == prevPassNo.Id && s.DataType == 1, s => new WorkflowApprovalRecords {
                AudioStatus = AudioStatus.WaitAgree, AuditidTime = null
            });
            return(status);
        }
Beispiel #2
0
        /// <summary>
        ///  审核人员变更
        /// </summary>
        /// <returns></returns>
        public Result ApprovalPerson(ApprovalPersonChageDto model, string optName)
        {
            bool   status = false;
            string msg    = "";

            try
            {
                var dataObj = _repository.GetData(model.Id);
                status = _workflowApprovalRecordsRepository.Update(s => s.Id == dataObj.WorkflowApprovalStepId, s => new WorkflowApprovalRecords {
                    AuditidUserName = model.AuditidUserName, AuditidUserId = model.AuditidUserId
                });
                WorkflowApprovalRecords addData = new WorkflowApprovalRecords()
                {
                    AuditidTime            = DateTime.Now,
                    WorkflowApprovalStepId = dataObj.WorkflowApprovalStepId,
                    DataType = 2,
                    Memo     = optName + "将审批人从" + dataObj.AuditidUserName + "换为" + model.AuditidUserName
                };

                status = _workflowApprovalRecordsRepository.Add(addData) > 0 ? true : false;
            }
            catch (Exception ex)
            {
                status = false;
                msg    = ex.Message.ToString();
            }
            return(new Result {
                Succeed = status, Message = msg
            });
        }
        /// <summary>
        /// 读取当前审核人
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public WorkflowApprovalRecords GetData(int Id)
        {
            string sql = $@"SELECT t.Id,t.WorkflowApprovalStepId,t.AuditidUserId,t.AuditidUserName 
FROM  
  [WorkflowMain] a
                         CROSS APPLY( 
                         SELECT TOP 1 c.Id,c.WorkflowApprovalStepId,c.AuditidUserId,c.AuditidUserName FROM [WorkflowApprovalStep]  b,[WorkflowApprovalRecords] c
                         WHERE  c.WorkflowApprovalStepId=b.Id AND a.Id=b.WorkflowBusinessId  and c.Status=1 and a.Id={Id}
						  ORDER BY c.Id  ) AS T"                        ;
            var    obj = new WorkflowApprovalRecords();

            using (var reader = _dbContext.Database.ExcuteReader(sql))
            {
                while (reader.Read())
                {
                    obj.Id = Convert.ToInt32(reader.DbDataReader["Id"]);
                    obj.WorkflowApprovalStepId = Convert.ToInt32(reader.DbDataReader["WorkflowApprovalStepId"]);
                    obj.AuditidUserId          = Convert.ToInt32(reader.DbDataReader["AuditidUserId"].ToString());
                    obj.AuditidUserName        = reader.DbDataReader["AuditidUserName"].ToString();
                }
                return(obj);
            }
        }
Beispiel #4
0
        /// <summary>
        ///  发起审批
        /// </summary>
        /// <param name="SubjectId"></param>
        /// <returns></returns>
        public Result CreateWork(WorkflowMain model)
        {
            string msg    = string.Empty;
            bool   status = false;

            try
            {
                if (model.SubjectId <= 0)
                {
                    return new Result()
                           {
                               Succeed = status, Message = "流程参数丢失"
                           }
                }
                ;

                var SubjectObj = (from a in _subjectRepository.Entites
                                  join b in _repositoryTypeSubject.Entites on a.SubjectTypeId equals b.Id
                                  select new { b.SubjectTypeName, a.SubjectName }
                                  ).FirstOrDefault();

                model.BusinessCode = PingYinHelper.GetFirstSpell(SubjectObj.SubjectTypeName) + "_" + DateTime.Now.ToString("yyMMddHHmmssff") + "_" + new Random().Next(1000, 9999);
                model.SubjectName  = SubjectObj.SubjectName;
                //获取流程节点
                var stepList = _subjectStepBusiness.GetDataListBySubjectId(model.SubjectId);
                List <WorkflowApprovalStep> stepEmpList = Mapper.Map <List <WorkflowApprovalStep> >(stepList).OrderBy(s => s.PassNo).ToList();
                //通过流程节点id查询节点对应人
                int i = 0;
                foreach (var item in stepEmpList)
                {
                    i++;

                    var objStep = _subjectRuleRepository.Entites.Where(s => s.SubjectStepId == item.Id).FirstOrDefault();
                    List <WorkflowApprovalRecords> list = new List <WorkflowApprovalRecords>();
                    if (item.PassType != PassType.Summary)
                    {
                        EmployeeDptJobDto modelEmployeeDptJobDto = new EmployeeDptJobDto
                        {
                            CompanyId            = objStep.CompanyId,
                            DptId                = objStep.DepId,
                            JobId                = objStep.JobId,
                            LoadChildDptEmployee = false,
                            OnlySelf             = false
                        };
                        //当前节点对应的人员集合(无序)
                        var userList = ApiBusinessHelper.GetEmployeeDptJobByUserIdAsync(modelEmployeeDptJobDto).Result;

                        foreach (var itemChild in userList)
                        {
                            var approvalRecord = new WorkflowApprovalRecords
                            {
                                AuditidUserId   = itemChild.userId,
                                AuditidUserName = itemChild.EmployeeName,
                                DataType        = 1,
                                AudioStatus     = AudioStatus.UnApprovalInfo
                            };
                            if (i == 1 && item.PassType == PassType.Audit)
                            {
                                approvalRecord.AudioStatus = AudioStatus.WaitAgree;
                            }
                            else if (i == 1 && item.PassType == PassType.Copy)
                            {
                                approvalRecord.AudioStatus = AudioStatus.Agree;//抄送人员默认是审核成功(不卡流程)
                            }
                            else if (i > 1 && i < stepEmpList.Count && item.PassType == PassType.Copy)
                            {
                                approvalRecord.AudioStatus = AudioStatus.Agree;//抄送人员默认是审核成功(不卡流程)
                            }
                            approvalRecord.ReadStatus = 1;
                            list.Add(approvalRecord);
                        }
                    }
                    else
                    {
                        //复盘节点
                        var approvalRecordFP = new WorkflowApprovalRecords
                        {
                            DataType    = 1,
                            AudioStatus = AudioStatus.UnApprovalInfo
                        };
                        if (objStep.UserId > 0)
                        {//创建人
                            approvalRecordFP.AuditidUserId   = model.CreateUserId;
                            approvalRecordFP.AuditidUserName = model.CreateUserName;
                            list.Add(approvalRecordFP);
                        }

                        if (objStep.DepId > 0)
                        {   //获取部门经理
                            var empLD = ApiBusinessHelper.GetEmployeeManagerByUserId(model.CreateUserId).Result;
                            approvalRecordFP.AuditidUserId   = empLD.userId;
                            approvalRecordFP.AuditidUserName = empLD.employeeName;
                            list.Add(approvalRecordFP);
                        }
                    }
                    item.workflowApprovalRecordList = list;
                }

                //stepEmpList.Where(s => s.PassNo == 1).ToList().ForEach(s => s.AuditNo = true);
                using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
                {
                    stepEmpList.ForEach(s => s.Id  = 0);
                    model.WorkflowApprovalStepList = stepEmpList;
                    status = _repository.Add(model) > 0 ? true : false;
                    ts.Complete();//提交事务
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message.ToString();
            }
            return(new Result()
            {
                Succeed = status, Message = msg
            });
        }