using Furion.FriendlyException;
using Microsoft.Extensions.Logging;
using YD_Event.Application.Certificate.Dtos;
using YD_Event.Core.Entities;
using SqlSugar;
using Mapster;
namespace YD_Event.Application.Certificate;
///
/// 证书管理服务
///
public class CertificateService : BaseService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _repository;
private readonly ISqlSugarRepository _templateRepository;
private readonly ISqlSugarRepository _eventCertificateRepository;
private readonly IIdGenerator _idGenerator;
private readonly Microsoft.Extensions.Logging.ILogger _logger;
public CertificateService(
ISqlSugarRepository repository,
ISqlSugarRepository templateRepository,
ISqlSugarRepository eventCertificateRepository,
IIdGenerator idGenerator,
Microsoft.Extensions.Logging.ILogger logger) : base(repository)
{
_repository = repository;
_templateRepository = templateRepository;
_eventCertificateRepository = eventCertificateRepository;
_idGenerator = idGenerator;
_logger = logger;
}
///
/// 证书分页查询
///
[DisplayName("证书分页查询")]
public async Task> Page(CertificateQueryInput input)
{
var query = _repository.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), x => x.Name.Contains(input.Name))
.WhereIF(!string.IsNullOrWhiteSpace(input.Code), x => x.Code.Contains(input.Code))
.WhereIF(input.Status.HasValue, x => x.Status == input.Status.Value);
return await query.OrderBy(x => x.Sort)
.OrderByDescending(x => x.CreatedTime)
.Select(x => new CertificateListOutput
{
Id = x.Id,
Name = x.Name,
Code = x.Code,
TemplateId = x.TemplateId,
Remark = x.Remark,
Status = x.Status,
Sort = x.Sort,
CreatedTime = x.CreatedTime
})
.ToPagedListAsync(input);
}
///
/// 添加证书
///
[DisplayName("添加证书")]
public async Task Add(AddCertificateInput input)
{
var isExist = await _repository.IsAnyAsync(x => x.Code == input.Code);
if (isExist) throw Oops.Oh("证书编码已存在");
// 校验模板是否存在
var isTemplateExist = await _templateRepository.IsAnyAsync(x => x.Id == input.TemplateId);
if (!isTemplateExist) throw Oops.Bah("无效的模板ID");
var entity = input.Adapt();
entity.Id = _idGenerator.NextId();
await _repository.InsertAsync(entity);
}
///
/// 更新证书
///
[DisplayName("更新证书")]
public async Task Update(UpdateCertificateInput input)
{
var isExist = await _repository.IsAnyAsync(x => x.Code == input.Code && x.Id != input.Id);
if (isExist) throw Oops.Oh("证书编码已存在");
// 校验模板是否存在
var isTemplateExist = await _templateRepository.IsAnyAsync(x => x.Id == input.TemplateId);
if (!isTemplateExist) throw Oops.Bah("无效的模板ID");
var entity = await _repository.GetByIdAsync(input.Id);
if (entity == null) throw Oops.Bah("证书不存在");
input.Adapt(entity);
await _repository.UpdateAsync(entity);
}
///
/// 删除证书
///
[DisplayName("删除证书")]
[UnitOfWork]
public async Task Delete(DeleteCertificateInput input)
{
_logger.LogInformation("开始删除证书:证书ID列表={Ids}", string.Join(",", input.Ids ?? new List()));
if (input.Ids == null || !input.Ids.Any())
{
_logger.LogWarning("删除证书失败:未选择证书");
return;
}
// 执行删除
await _repository.DeleteAsync(x => input.Ids.Contains(x.Id));
_logger.LogInformation("删除证书成功:证书ID列表={Ids}", string.Join(",", input.Ids));
}
///
/// 获取证书详情
///
[DisplayName("获取证书详情")]
public async Task Detail(IdInput input)
{
var entity = await _repository.GetByIdAsync(input.Id);
if (entity == null) throw Oops.Bah("证书不存在");
var result = entity.Adapt();
// 填充模板信息
var template = await _templateRepository.GetByIdAsync(entity.TemplateId);
if (template != null)
{
result.Template = template.Adapt();
}
return result;
}
}