赛事报名

This commit is contained in:
马梓彭 2026-03-31 22:18:53 +08:00
parent c96e7a63b3
commit 95d991fe51
3 changed files with 43 additions and 2 deletions

View File

@ -212,6 +212,11 @@ public class UserEventDetailOutput
/// 报名ID (如果已报名) /// 报名ID (如果已报名)
/// </summary> /// </summary>
public long? RegistrationId { get; set; } public long? RegistrationId { get; set; }
/// <summary>
/// 上级项目类型名称
/// </summary>
public string? ParentProjectTypeName { get; set; }
} }
/// <summary> /// <summary>

View File

@ -34,6 +34,7 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
private readonly ISqlSugarRepository<EventUnit> _unitRepository; private readonly ISqlSugarRepository<EventUnit> _unitRepository;
private readonly ISqlSugarRepository<EventProject> _eventProjectRepository; private readonly ISqlSugarRepository<EventProject> _eventProjectRepository;
private readonly ISqlSugarRepository<YD_Event.Core.Entities.Project> _projectRepository; private readonly ISqlSugarRepository<YD_Event.Core.Entities.Project> _projectRepository;
private readonly ISqlSugarRepository<ProjectType> _projectTypeRepository;
private readonly ISqlSugarRepository<EventRegistration> _registrationRepository; private readonly ISqlSugarRepository<EventRegistration> _registrationRepository;
private readonly ISqlSugarRepository<EventRegistrationItem> _registrationItemRepository; private readonly ISqlSugarRepository<EventRegistrationItem> _registrationItemRepository;
private readonly ISqlSugarRepository<EventRegistrationPerson> _registrationPersonRepository; private readonly ISqlSugarRepository<EventRegistrationPerson> _registrationPersonRepository;
@ -57,6 +58,7 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
ISqlSugarRepository<EventUnit> unitRepository, ISqlSugarRepository<EventUnit> unitRepository,
ISqlSugarRepository<EventProject> eventProjectRepository, ISqlSugarRepository<EventProject> eventProjectRepository,
ISqlSugarRepository<YD_Event.Core.Entities.Project> projectRepository, ISqlSugarRepository<YD_Event.Core.Entities.Project> projectRepository,
ISqlSugarRepository<ProjectType> projectTypeRepository,
ISqlSugarRepository<EventRegistration> registrationRepository, ISqlSugarRepository<EventRegistration> registrationRepository,
ISqlSugarRepository<EventRegistrationItem> registrationItemRepository, ISqlSugarRepository<EventRegistrationItem> registrationItemRepository,
ISqlSugarRepository<EventRegistrationPerson> registrationPersonRepository, ISqlSugarRepository<EventRegistrationPerson> registrationPersonRepository,
@ -79,6 +81,7 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
_unitRepository = unitRepository; _unitRepository = unitRepository;
_eventProjectRepository = eventProjectRepository; _eventProjectRepository = eventProjectRepository;
_projectRepository = projectRepository; _projectRepository = projectRepository;
_projectTypeRepository = projectTypeRepository;
_registrationRepository = registrationRepository; _registrationRepository = registrationRepository;
_registrationItemRepository = registrationItemRepository; _registrationItemRepository = registrationItemRepository;
_registrationPersonRepository = registrationPersonRepository; _registrationPersonRepository = registrationPersonRepository;
@ -190,7 +193,32 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
var eventProjects = await _eventProjectRepository.GetListAsync(x => x.EventId == id); var eventProjects = await _eventProjectRepository.GetListAsync(x => x.EventId == id);
var projectIds = eventProjects.Select(x => x.ProjectId).Distinct().ToList(); var projectIds = eventProjects.Select(x => x.ProjectId).Distinct().ToList();
var baseProjects = await _projectRepository.GetListAsync(x => projectIds.Contains(x.Id) && x.Status == AvailabilityStatus.Enable); var baseProjects = await _projectRepository.AsQueryable()
.LeftJoin<ProjectType>((p, t) => p.ProjectTypeId == t.Id)
.Where(p => projectIds.Contains(p.Id) && p.Status == AvailabilityStatus.Enable)
.Select((p, t) => new { p.Id, ProjectTypeId = t.Id })
.ToListAsync();
// 获取所有项目类型
var allProjectTypes = await _projectTypeRepository.AsQueryable()
.Where(t => !t.DeleteMark && t.Status == AvailabilityStatus.Enable)
.ToListAsync();
// 获取上级项目类型名称(如果有项目,取第一个项目的上级类型名称)
string? parentProjectTypeName = null;
if (baseProjects.Any())
{
var firstProject = baseProjects.First();
var currentProjectType = allProjectTypes.FirstOrDefault(t => t.Id == firstProject.ProjectTypeId);
if (currentProjectType != null && currentProjectType.ParentId > 0)
{
var parentProjectType = allProjectTypes.FirstOrDefault(t => t.Id == currentProjectType.ParentId);
parentProjectTypeName = parentProjectType?.Name;
}
}
// 获取完整的基础项目信息
var fullBaseProjects = await _projectRepository.GetListAsync(x => projectIds.Contains(x.Id) && x.Status == AvailabilityStatus.Enable);
var completionStats = await _projectService.GetProjectStatisticsBatchAsync( var completionStats = await _projectService.GetProjectStatisticsBatchAsync(
projectIds, projectIds,
@ -198,7 +226,7 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
output.Projects = eventProjects.Select(ep => output.Projects = eventProjects.Select(ep =>
{ {
var p = baseProjects.FirstOrDefault(b => b.Id == ep.ProjectId); var p = fullBaseProjects.FirstOrDefault(b => b.Id == ep.ProjectId);
var completionCount = 0; var completionCount = 0;
if (p != null && completionStats.TryGetValue(p.Id, out var count)) if (p != null && completionStats.TryGetValue(p.Id, out var count))
{ {
@ -212,6 +240,9 @@ public class UserEventRegistrationService : IDynamicApiController, ITransient
CompletionCount = completionCount CompletionCount = completionCount
}; };
}).Where(x => !string.IsNullOrEmpty(x.Name)).ToList(); }).Where(x => !string.IsNullOrEmpty(x.Name)).ToList();
// 添加上级项目类型名称
output.ParentProjectTypeName = parentProjectTypeName;
var userId = _authManager.UserId; var userId = _authManager.UserId;
var registration = await _registrationRepository.GetFirstAsync(x => x.EventId == id && x.CreatedUserId == userId && !x.DeleteMark); var registration = await _registrationRepository.GetFirstAsync(x => x.EventId == id && x.CreatedUserId == userId && !x.DeleteMark);

View File

@ -4385,6 +4385,11 @@
报名ID (如果已报名) 报名ID (如果已报名)
</summary> </summary>
</member> </member>
<member name="P:YD_Event.Application.Event.Dtos.UserEventDetailOutput.ParentProjectTypeName">
<summary>
上级项目类型名称
</summary>
</member>
<member name="T:YD_Event.Application.Event.Dtos.UserEventLimitOutput"> <member name="T:YD_Event.Application.Event.Dtos.UserEventLimitOutput">
<summary> <summary>
用户端赛事限制输出 用户端赛事限制输出