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