diff --git a/YD_Event.Application/Client/MyController.cs b/YD_Event.Application/Client/MyController.cs index 7f1f306..4e63cf4 100644 --- a/YD_Event.Application/Client/MyController.cs +++ b/YD_Event.Application/Client/MyController.cs @@ -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 items = new List(); - 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() - .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() + // 退款订单:通过 RefundOrderId 字段精准找到对应的软删除记录 + var refundOrderId = order.Id; + + // 先找被软删除的人员中 RefundOrderId 等于当前退款订单ID的 + var deletedPersons = await _db.Queryable() .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() + .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() + .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() .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() - .ClearFilter() - .Where(i => i.RegistrationId == order.RegistrationId) - .Select(i => new MyOrderItemDto - { - ProjectName = i.ProjectName, - GroupName = i.GroupName, - Fee = i.TotalPrice - }) - .ToListAsync(); - } } // 如果是退款订单,查找关联的原始订单,显示原始支付金额 diff --git a/YD_Event.Application/Order/OrderService.cs b/YD_Event.Application/Order/OrderService.cs index 29cac01..69a34bb 100644 --- a/YD_Event.Application/Order/OrderService.cs +++ b/YD_Event.Application/Order/OrderService.cs @@ -262,27 +262,103 @@ public class OrderService : BaseService, 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 items = new(); + List persons = new(); + List itemDtos = new(); + List 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() + .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() + .ClearFilter() + .Where(x => distinctItemIds.Contains(x.Id)) + .ToListAsync(); + + // 查询对应的人员 + persons = await _db.Queryable() + .ClearFilter() + .Where(x => x.RegistrationId == registrationId && + x.DeleteMark == true && + x.RefundOrderId == refundOrderId) + .ToListAsync(); + } + else + { + // 如果没有找到匹配的人员,再试试找项目的 RefundOrderId 等于当前退款订单ID的 + items = await _db.Queryable() + .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() + .ClearFilter() + .Where(x => itemIds.Contains(x.RegistrationItemId)) + .ToListAsync(); + } + } + } + else + { + // 普通订单:显示全部的项目(包括已删除的) + items = await _db.Queryable() + .ClearFilter() + .Where(x => x.RegistrationId == registrationId) + .ToListAsync(); + persons = await _db.Queryable() + .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, 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 ? "线上" : "线下",