小程序参赛记录

This commit is contained in:
马梓彭 2026-04-14 11:18:15 +08:00
parent 9540dbcd9f
commit f7eed7e479
2 changed files with 64 additions and 37 deletions

View File

@ -489,69 +489,96 @@ public class MyController : IDynamicApiController
{ {
var userId = GetCurrentUserId(); var userId = GetCurrentUserId();
var query = _orderRepository.AsQueryable() // 1. 先查询订单
.LeftJoin<EventRegistration>((o, r) => o.RegistrationId == r.Id) var order = await _orderRepository.GetFirstAsync(o => o.Id == id && o.CreatedUserId == userId && !o.DeleteMark);
.Where((o, r) => o.Id == id && o.CreatedUserId == userId && !o.DeleteMark) if (order == null) throw Oops.Bah("订单不存在");
.Select((o, r) => new { Order = o, Registration = r });
var orderInfo = await query.FirstAsync();
if (orderInfo == null || orderInfo.Order == null) throw Oops.Bah("订单不存在");
// 2. 查询关联的报名信息
EventRegistration? registration = null;
if (order.RegistrationId > 0)
{
registration = await _registrationRepository.GetFirstAsync(r => r.Id == order.RegistrationId && !r.DeleteMark);
}
// 3. 获取赛事名称
var eventName = await _eventRepository.AsQueryable() var eventName = await _eventRepository.AsQueryable()
.Where(e => e.Id == orderInfo.Order.EventId) .Where(e => e.Id == order.EventId)
.Select(e => e.EventName) .Select(e => e.EventName)
.FirstAsync(); .FirstAsync();
var items = await _registrationItemRepository.AsQueryable() // 4. 获取报名项目列表(如果有关联的报名记录)
.Where(i => i.RegistrationId == orderInfo.Order.RegistrationId && !i.DeleteMark) List<MyOrderItemDto> items = new List<MyOrderItemDto>();
.Select(i => new MyOrderItemDto if (order.RegistrationId > 0)
{ {
ProjectName = i.ProjectName, items = await _registrationItemRepository.AsQueryable()
GroupName = i.GroupName, .Where(i => i.RegistrationId == order.RegistrationId && !i.DeleteMark)
Fee = i.TotalPrice .Select(i => new MyOrderItemDto
}) {
.ToListAsync(); ProjectName = i.ProjectName,
GroupName = i.GroupName,
Fee = i.TotalPrice
})
.ToListAsync();
}
return new MyOrderDetailDto return new MyOrderDetailDto
{ {
Id = orderInfo.Order.Id, Id = order.Id,
OrderNo = orderInfo.Order.OrderNo, OrderNo = order.OrderNo,
EventName = eventName, EventName = eventName,
ActualAmount = orderInfo.Order.ActualAmount, ActualAmount = order.ActualAmount,
RefundAmount = orderInfo.Order.OrderType == 2 ? orderInfo.Order.ActualAmount : null, RefundAmount = order.OrderType == 2 ? order.ActualAmount : null,
RefundTime = orderInfo.Order.OrderType == 2 ? orderInfo.Order.PaymentTime : null, RefundTime = order.OrderType == 2 ? order.PaymentTime : null,
OrderStatus = orderInfo.Order.OrderStatus, OrderStatus = order.OrderStatus,
PaymentTime = orderInfo.Order.PaymentTime, PaymentTime = order.PaymentTime,
PaymentMethod = orderInfo.Registration?.PaymentMethod ?? 0, PaymentMethod = registration?.PaymentMethod ?? 0,
Items = items Items = items
}; };
} }
/// <summary> /// <summary>
/// 我的参赛记录(暂不对外提供) /// 我的参赛记录
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[ApiDescriptionSettings(false)] [HttpGet("registrations")]
[NonAction] [DisplayName("我的参赛记录")]
public async Task<PageResult<MyRegistrationDto>> GetRegistrations([FromQuery] MyPageInput input) public async Task<PageResult<MyRegistrationDto>> GetRegistrations([FromQuery] MyPageInput input)
{ {
var userId = GetCurrentUserId(); var userId = GetCurrentUserId();
var query = _registrationRepository.AsQueryable()
.LeftJoin<EventInfo>((r, e) => r.EventId == e.Id) // 1. 先分页查询报名记录
var regQuery = _registrationRepository.AsQueryable()
.Where(r => r.CreatedUserId == userId && !r.DeleteMark) .Where(r => r.CreatedUserId == userId && !r.DeleteMark)
.Select((r, e) => new MyRegistrationDto .OrderByDescending(r => r.RegistrationTime);
var pagedRegs = await regQuery.ToPagedListAsync(input);
// 2. 获取所有赛事ID,然后批量查询赛事信息
var eventIds = pagedRegs.Rows.Select(r => r.EventId).Distinct().ToList();
var eventList = await _eventRepository.AsQueryable()
.Where(e => eventIds.Contains(e.Id))
.ToListAsync();
var eventsDict = eventList.ToDictionary(e => e.Id, e => e.EventName);
// 3. 构建 DTO 列表
var result = new PageResult<MyRegistrationDto>
{
PageNo = pagedRegs.PageNo,
PageSize = pagedRegs.PageSize,
Total = pagedRegs.Total,
Pages = pagedRegs.Pages,
Rows = pagedRegs.Rows.Select(r => new MyRegistrationDto
{ {
Id = r.Id, Id = r.Id,
EventName = e.EventName, EventName = eventsDict.ContainsKey(r.EventId) ? eventsDict[r.EventId] : "",
TeamName = r.TeamName, TeamName = r.TeamName,
Status = r.PaymentStatus, Status = r.PaymentStatus,
RegistrationTime = r.RegistrationTime, RegistrationTime = r.RegistrationTime,
ProjectNames = "" ProjectNames = ""
}) }).ToList()
.OrderByDescending(r => r.RegistrationTime); };
var result = await query.ToPagedListAsync(input); // 4. 填充项目名称
if (result.Rows.Any()) if (result.Rows.Any())
{ {
var registrationIds = result.Rows.Select(r => r.Id).ToList(); var registrationIds = result.Rows.Select(r => r.Id).ToList();

View File

@ -3622,7 +3622,7 @@
</member> </member>
<member name="M:YD_Event.Application.Client.MyController.GetRegistrations(YD_Event.Application.Client.Dtos.MyPageInput)"> <member name="M:YD_Event.Application.Client.MyController.GetRegistrations(YD_Event.Application.Client.Dtos.MyPageInput)">
<summary> <summary>
我的参赛记录(暂不对外提供) 我的参赛记录
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>