/// <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); }
/// <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); } }
/// <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 }); }