using YD_Event.Application.Event.Dtos; using YD_Event.Core.Entities; using YD_Event.Core.Enum; using AppUserEntity = YD_Event.Core.Entities.AppUser; using SysUserEntity = YD_Event.Core.Entities.SysUser; using MerchantEntity = YD_Event.Core.Entities.Merchant; namespace YD_Event.Application.Event; /// /// 参赛记录管理 /// public class EventRecordService : BaseService, ITransient { private readonly ISqlSugarRepository _registrationRep; private readonly ISqlSugarRepository _eventRep; private readonly ISqlSugarRepository _certificateRep; private readonly ISqlSugarRepository _appUserRep; private readonly ISqlSugarRepository _sysUserRep; private readonly ISqlSugarRepository _merchantRep; public EventRecordService(ISqlSugarRepository registrationRep, ISqlSugarRepository eventRep, ISqlSugarRepository certificateRep, ISqlSugarRepository appUserRep, ISqlSugarRepository sysUserRep, ISqlSugarRepository merchantRep) : base(registrationRep) { _registrationRep = registrationRep; _eventRep = eventRep; _certificateRep = certificateRep; _appUserRep = appUserRep; _sysUserRep = sysUserRep; _merchantRep = merchantRep; } /// /// 分页查询参赛记录 /// [HttpGet("page")] public async Task> Page([FromQuery] EventRecordPageInput input) { // 参数验证 ValidateInput(input); // Join EventRegistration and EventInfo var query = _registrationRep.AsQueryable() .LeftJoin((r, e) => r.EventId == e.Id) .LeftJoin((r, e, u) => r.CreatedUserId == u.Id) .LeftJoin((r, e, u, s) => r.CreatedUserId == s.Id) .LeftJoin((r, e, u, s, m) => r.CreatedUserId == m.CreatedUserId) .WhereIF(!string.IsNullOrWhiteSpace(input.EventName), (r, e, u, s, m) => e.EventName.Contains(input.EventName)) .WhereIF(input.StartTime.HasValue, (r, e, u, s, m) => e.MatchStartTime >= input.StartTime) .WhereIF(input.EndTime.HasValue, (r, e, u, s, m) => e.MatchStartTime <= input.EndTime) .WhereIF(input.PaymentStatus.HasValue, (r, e, u, s, m) => r.PaymentStatus == input.PaymentStatus) // Filter by User ID (AppUser, SysUser, or Merchant) .WhereIF(input.AppUserId.HasValue, (r, e, u, s, m) => u.Id == input.AppUserId) .WhereIF(input.SysUserId.HasValue, (r, e, u, s, m) => s.Id == input.SysUserId) .WhereIF(input.MerchantId.HasValue, (r, e, u, s, m) => m.CreatedUserId == input.MerchantId) .OrderByDescending((r, e, u, s, m) => r.CreatedTime) .Select((r, e, u, s, m) => new EventRecordOutput { Id = r.Id, EventName = e.EventName, EventType = e.EventType.ToString(), StartTime = e.MatchStartTime, EndTime = e.MatchEndTime, PaymentStatus = r.PaymentStatus, EventId = e.Id, ContactName = r.ContactName, ContactPhone = r.ContactPhone, TeamName = r.TeamName }); return await query.ToPagedListAsync(input); } /// /// 验证输入参数 /// private void ValidateInput(EventRecordPageInput input) { // 检查是否同时提供了多个用户ID类型 var userTypeCount = 0; if (input.AppUserId.HasValue) userTypeCount++; if (input.SysUserId.HasValue) userTypeCount++; if (input.MerchantId.HasValue) userTypeCount++; if (userTypeCount > 1) { throw Oops.Bah("只能提供一种用户类型ID参数(AppUserId、SysUserId或MerchantId)"); } // 验证用户ID有效性 if (input.AppUserId.HasValue && input.AppUserId.Value <= 0) { throw Oops.Bah("普通用户ID无效"); } if (input.SysUserId.HasValue && input.SysUserId.Value <= 0) { throw Oops.Bah("系统用户ID无效"); } if (input.MerchantId.HasValue && input.MerchantId.Value <= 0) { throw Oops.Bah("商户ID无效"); } } /// /// 获取证书列表 /// [HttpGet("{registrationId}/certificates")] public async Task> GetCertificates([FromRoute] long registrationId) { var certs = await _certificateRep.AsQueryable() .Where(c => c.RegistrationId == registrationId) .ToListAsync(); return certs.Select(c => new CertificateOutput { Id = c.Id, Name = c.ParticipantName, AwardLevel = GetAwardLevelName(c.AwardLevel), CertificateType = GetCertificateTypeName(c.CertificateType), ImageUrl = c.CertificateUrl }).ToList(); } private string GetAwardLevelName(int level) { return level switch { 1 => "特等奖", 2 => "一等奖", 3 => "二等奖", 4 => "三等奖", 5 => "优秀奖", _ => "未知" }; } private string GetCertificateTypeName(int type) { return type switch { 1 => "冠军证书", 2 => "亚军证书", 3 => "季军证书", 4 => "优胜证书", 5 => "参与证书", _ => "未知" }; } }