using AutoMapper; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Dtos.System; using OASystem.Domain.Entities.Groups; namespace OASystem.Infrastructure.Repositories.System { /// /// 审核流程 仓储 /// public class ApprovalProcessRepository : BaseRepository { private readonly IMapper _mapper; public ApprovalProcessRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar) { _mapper = mapper; } /// /// 创建审核流程模板 /// /// /// public async Task CreateAuditTemplateAsync(ApprovalProcessDto dto) { var currUserId = dto.CurrUserId; var auditTemp = new Sys_AuditTemplate() { TemplateName = dto.TemplateName, TemplateCode = dto.TemplateCode, BusinessType = dto.BusinessType, Status = dto.Status, }; _sqlSugar.BeginTran(); var tempId = await _sqlSugar.Insertable(auditTemp).ExecuteReturnIdentityAsync(); if (tempId < 1) { _sqlSugar.RollbackTran(); return false; } foreach (var item in dto.TempNodes) { var auditTempNodes = _mapper.Map(item); auditTempNodes.TemplateId = tempId; auditTempNodes.CreateUserId = currUserId; var nodeId = await _sqlSugar.Insertable(auditTempNodes).ExecuteReturnIdentityAsync(); if (nodeId < 1) { _sqlSugar.RollbackTran(); return false; } var nodeUsers = _mapper.Map>(item.NodeUsers); nodeUsers.ForEach(x => { x.NodeId = nodeId; x.CreateUserId = currUserId; }); if (nodeUsers.Any()) { var nodeUsersStatus = await _sqlSugar.Insertable(nodeUsers).ExecuteCommandAsync(); if (nodeUsersStatus < 1) { _sqlSugar.RollbackTran(); return false; } } } _sqlSugar.CommitTran(); return true; } /// /// 获取审核流程模板 /// /// /// public async Task GetTemplateByBusinessTypeAsync(int auditTempId) { var tempInfo = new ApprovalProcessView(); var auditTempInfo = await _sqlSugar.Queryable() .FirstAsync(x => x.Id == auditTempId && x.IsDel == 0); if (auditTempInfo == null) return tempInfo; tempInfo.Id = auditTempInfo.Id; tempInfo.TemplateName = auditTempInfo.TemplateName; tempInfo.BusinessType = auditTempInfo.BusinessType; tempInfo.Status = auditTempInfo.Status; var nodes = await _sqlSugar.Queryable() .Where(x => x.TemplateId == auditTempId && x.IsDel == 0) .Select(x => new AuditTemplateNodeView() { Id = x.Id, TemplateId = x.TemplateId, NodeName = x.NodeName, NodeOrder = x.NodeOrder, ApproveType = x.ApproveType, IsRequired = x.IsRequired }) .OrderBy(x => x.NodeOrder) .ToListAsync(); foreach (var node in nodes) { node.NodeUsers = await _sqlSugar.Queryable() .Where(x => x.NodeId == node.Id && x.IsDel == 0) .Select(x => new AuditTemplateNodeUserView() { Id = x.Id, NodeId = x.NodeId, UserId = x.UserId, UserName = x.UserName }) .ToListAsync(); } tempInfo.TempNodes = nodes; return tempInfo; } /// /// 获取审核流程 /// /// /// public async Task GetFlowByBusinessAsync(int businessId, int businessType) { return await _sqlSugar.Queryable() .FirstAsync(x => x.IsDel == 0 && x.BusinessId == businessId && x.BusinessType == businessType); } /// /// 获取审核模板节点 /// /// /// public async Task> GetTemplateNodesAsync(int templateId) { return await _sqlSugar.Queryable() .Where(x => x.TemplateId == templateId) .OrderBy(x => x.NodeOrder) .ToListAsync(); } /// /// 获取审核模板节点用户 /// /// /// public async Task> GetTemplateNodeUsersAsync(int nodeId) { return await _sqlSugar.Queryable() .Where(x => x.NodeId == nodeId) .ToListAsync(); } /// /// 审核、重复操作权限验证 /// /// 模板Id /// 业务类型 /// 业务类型Id /// 用户Id /// public async Task VerifyAuditAuthAsync(int tempId,int busTypeId,int busDataId,int userId) { if (tempId < 1 || busTypeId < 1 || busDataId < 1) return false; var flow = await _sqlSugar.Queryable().FirstAsync(x => x.IsDel == 0 && x.BusinessType == busTypeId && x.TemplateId == tempId && x.BusinessId == busDataId); if (flow == null) return false; if (flow.Status == 2 || flow.Status == 3) return false; var node = await _sqlSugar.Queryable() .FirstAsync(x => x.IsDel == 0 && x.TemplateId == tempId && x.Id == flow.CurrentNodeId); if (node == null) return false; return await _sqlSugar.Queryable().AnyAsync(x => x.IsDel == 0 && x.NodeId == node.Id && x.UserId == userId); } } }