后台订单详情显示项目

This commit is contained in:
马梓彭 2026-05-13 16:13:01 +08:00
parent db56ff359a
commit 91ffc069d6
2 changed files with 151 additions and 70 deletions

View File

@ -602,53 +602,74 @@ public class MyController : IDynamicApiController
.FirstAsync();
}
// 3. 获取赛事名称
var eventName = await _eventRepository.AsQueryable()
// 3. 获取赛事信息和名称
var eventQuery = await _eventRepository.AsQueryable()
.Where(e => e.Id == order.EventId)
.Select(e => e.EventName)
.Select(e => new { e.EventName, e.ChargeMode })
.FirstAsync();
var eventName = eventQuery.EventName;
var chargeMode = eventQuery.ChargeMode;
// 4. 获取报名项目列表(如果有关联的报名记录)
// 4. 判断是否需要返回项目列表
List<MyOrderItemDto> items = new List<MyOrderItemDto>();
if (order.RegistrationId > 0)
// 仅当 ChargeMode 不是 Free 或 FixedPrice 时才查询项目列表
if (chargeMode != ChargeMode.Free && chargeMode != ChargeMode.FixedPrice)
{
if (order.OrderType == 2)
if (order.RegistrationId > 0)
{
// 退款订单:通过 RefundOrderId 字段精准找到对应的软删除记录
var refundOrderId = order.Id;
// 先找被软删除的人员中 RefundOrderId 等于当前退款订单ID的
var deletedPersons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(p => p.RegistrationId == order.RegistrationId &&
p.DeleteMark == true &&
p.RefundOrderId == refundOrderId)
.Select(p => p.RegistrationItemId)
.ToListAsync();
if (deletedPersons.Any())
if (order.OrderType == 2)
{
// 找出这些人员关联的项目(去重)
var distinctItemIds = deletedPersons.Distinct().ToList();
items = await _db.Queryable<EventRegistrationItem>()
// 退款订单:通过 RefundOrderId 字段精准找到对应的软删除记录
var refundOrderId = order.Id;
// 先找被软删除的人员中 RefundOrderId 等于当前退款订单ID的
var deletedPersons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(i => distinctItemIds.Contains(i.Id))
.Select(i => new MyOrderItemDto
{
ProjectName = i.ProjectName,
GroupName = i.GroupName,
Fee = i.TotalPrice
})
.Where(p => p.RegistrationId == order.RegistrationId &&
p.DeleteMark == true &&
p.RefundOrderId == refundOrderId)
.Select(p => p.RegistrationItemId)
.ToListAsync();
if (deletedPersons.Any())
{
// 找出这些人员关联的项目(去重)
var distinctItemIds = deletedPersons.Distinct().ToList();
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(i => distinctItemIds.Contains(i.Id))
.Select(i => new MyOrderItemDto
{
ProjectName = i.ProjectName,
GroupName = i.GroupName,
Fee = i.TotalPrice
})
.ToListAsync();
}
else
{
// 如果没有找到匹配的人员,再试试找项目的 RefundOrderId 等于当前退款订单ID的
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(i => i.RegistrationId == order.RegistrationId &&
i.DeleteMark == true &&
i.RefundOrderId == refundOrderId)
.Select(i => new MyOrderItemDto
{
ProjectName = i.ProjectName,
GroupName = i.GroupName,
Fee = i.TotalPrice
})
.ToListAsync();
}
}
else
{
// 如果没有找到匹配的人员,再试试找项目的 RefundOrderId 等于当前退款订单ID的
// 其他订单:显示全部的项目
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(i => i.RegistrationId == order.RegistrationId &&
i.DeleteMark == true &&
i.RefundOrderId == refundOrderId)
.Where(i => i.RegistrationId == order.RegistrationId)
.Select(i => new MyOrderItemDto
{
ProjectName = i.ProjectName,
@ -656,24 +677,8 @@ public class MyController : IDynamicApiController
Fee = i.TotalPrice
})
.ToListAsync();
}
}
else
{
// 其他订单:显示全部的项目
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(i => i.RegistrationId == order.RegistrationId)
.Select(i => new MyOrderItemDto
{
ProjectName = i.ProjectName,
GroupName = i.GroupName,
Fee = i.TotalPrice
})
.ToListAsync();
}
}
// 如果是退款订单,查找关联的原始订单,显示原始支付金额

View File

@ -262,27 +262,103 @@ public class OrderService : BaseService<YD_Event.Core.Entities.Order>, ITransien
if (orderInfo == null || orderInfo.Order == null) throw Oops.Bah("订单不存在");
var registrationId = orderInfo.Order.RegistrationId;
var items = await _itemRepository.AsQueryable().Where(x => x.RegistrationId == registrationId).ToListAsync();
var persons = await _personRepository.AsQueryable().Where(x => x.RegistrationId == registrationId).ToListAsync();
List<EventRegistrationItem> items = new();
List<EventRegistrationPerson> persons = new();
List<OrderItemDto> itemDtos = new();
List<OrderPersonDto> personDtos = new();
string projectNames = "";
string groupNames = "";
// 将项目和人员转换为DTO
var itemDtos = items.Select(x => new OrderItemDto
{
Id = x.Id,
ProjectId = x.ProjectId,
ProjectName = x.ProjectName,
GroupName = x.GroupName,
Fee = x.TotalPrice
}).ToList();
// 判断是否需要返回项目列表:仅当 ChargeMode 不是 Free 或 FixedPrice 时才查询项目
if (orderInfo.ChargeMode != ChargeMode.Free && orderInfo.ChargeMode != ChargeMode.FixedPrice)
{
if (orderInfo.Order.OrderType == 2)
{
// 退款订单:通过 RefundOrderId 字段精准找到对应的软删除记录
var refundOrderId = orderInfo.Order.Id;
// 先找被软删除的人员中 RefundOrderId 等于当前退款订单ID的
var deletedPersons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(x => x.RegistrationId == registrationId &&
x.DeleteMark == true &&
x.RefundOrderId == refundOrderId)
.Select(x => x.RegistrationItemId)
.ToListAsync();
if (deletedPersons.Any())
{
// 找出这些人员关联的项目(去重)
var distinctItemIds = deletedPersons.Distinct().ToList();
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(x => distinctItemIds.Contains(x.Id))
.ToListAsync();
// 查询对应的人员
persons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(x => x.RegistrationId == registrationId &&
x.DeleteMark == true &&
x.RefundOrderId == refundOrderId)
.ToListAsync();
}
else
{
// 如果没有找到匹配的人员,再试试找项目的 RefundOrderId 等于当前退款订单ID的
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(x => x.RegistrationId == registrationId &&
x.DeleteMark == true &&
x.RefundOrderId == refundOrderId)
.ToListAsync();
// 查询对应的人员
var itemIds = items.Select(x => x.Id).ToList();
if (itemIds.Any())
{
persons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(x => itemIds.Contains(x.RegistrationItemId))
.ToListAsync();
}
}
}
else
{
// 普通订单:显示全部的项目(包括已删除的)
items = await _db.Queryable<EventRegistrationItem>()
.ClearFilter()
.Where(x => x.RegistrationId == registrationId)
.ToListAsync();
persons = await _db.Queryable<EventRegistrationPerson>()
.ClearFilter()
.Where(x => x.RegistrationId == registrationId)
.ToListAsync();
}
var personDtos = persons.Select(x => new OrderPersonDto
{
Name = x.Name,
GroupName = x.GroupName,
RegistrationItemId = x.RegistrationItemId,
ProjectId = x.ProjectId,
ProjectName = x.ProjectName
}).ToList();
// 将项目和人员转换为DTO
itemDtos = items.Select(x => new OrderItemDto
{
Id = x.Id,
ProjectId = x.ProjectId,
ProjectName = x.ProjectName,
GroupName = x.GroupName,
Fee = x.TotalPrice
}).ToList();
personDtos = persons.Select(x => new OrderPersonDto
{
Name = x.Name,
GroupName = x.GroupName,
RegistrationItemId = x.RegistrationItemId,
ProjectId = x.ProjectId,
ProjectName = x.ProjectName
}).ToList();
projectNames = string.Join(",", items.Select(x => x.ProjectName).Distinct());
groupNames = string.Join(",", items.Select(x => x.GroupName).Distinct());
}
return new OrderDetailOutput
{
@ -300,8 +376,8 @@ public class OrderService : BaseService<YD_Event.Core.Entities.Order>, ITransien
orderInfo.Order.OrderStatus == OrderStatus.Completed ? "已完成" : "",
EventName = orderInfo.EventName,
ChargeMode = orderInfo.ChargeMode,
ProjectNames = string.Join(",", items.Select(x => x.ProjectName).Distinct()),
GroupNames = string.Join(",", items.Select(x => x.GroupName).Distinct()),
ProjectNames = projectNames,
GroupNames = groupNames,
Items = itemDtos,
Persons = personDtos,
PaymentMethod = orderInfo.Registration?.PaymentMethod == 2 ? "线上" : "线下",