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