using HoneyBox.Admin.Business.Attributes; using HoneyBox.Admin.Business.Models; using HoneyBox.Admin.Business.Models.Order; using HoneyBox.Admin.Business.Services.Interfaces; using Microsoft.AspNetCore.Mvc; namespace HoneyBox.Admin.Business.Controllers; /// /// 订单管理控制器 /// [Route("api/admin/business/orders")] public class OrderController : BusinessControllerBase { private readonly IOrderService _orderService; public OrderController(IOrderService orderService) { _orderService = orderService; } #region 订单查询 /// /// 获取订单列表 /// /// 查询请求 /// 分页订单列表 [HttpGet] [BusinessPermission("order:list")] public async Task GetOrderList([FromQuery] OrderListRequest request) { var result = await _orderService.GetOrderListAsync(request); return Ok(result); } /// /// 获取订单详情 /// /// 订单ID /// 订单详情 [HttpGet("{id}")] [BusinessPermission("order:view")] public async Task GetOrderDetail(int id) { var result = await _orderService.GetOrderDetailAsync(id); if (result == null) { return NotFoundError("订单不存在"); } return Ok(result); } /// /// 获取卡单列表 /// /// 查询请求 /// 分页卡单列表 [HttpGet("stuck")] [BusinessPermission("order:list")] public async Task GetStuckOrders([FromQuery] OrderListRequest request) { var result = await _orderService.GetStuckOrdersAsync(request); return Ok(result); } /// /// 获取兑换订单列表 /// /// 查询请求 /// 分页兑换订单列表 [HttpGet("recovery")] [BusinessPermission("order:list")] public async Task GetRecoveryOrders([FromQuery] OrderListRequest request) { var result = await _orderService.GetRecoveryOrdersAsync(request); return Ok(result); } /// /// 获取综合订单列表(支持按账号类型和状态过滤) /// /// 查询请求 /// 分页订单列表 [HttpGet("list")] [BusinessPermission("order:list")] public async Task GetComprehensiveOrders([FromQuery] ComprehensiveOrderListRequest request) { var result = await _orderService.GetComprehensiveOrdersAsync(request); return Ok(result); } #endregion #region 发货管理 /// /// 获取发货订单列表 /// /// 查询请求 /// 分页发货订单列表 [HttpGet("shipping")] [BusinessPermission("order:ship")] public async Task GetShippingOrders([FromQuery] ShippingOrderListRequest request) { var result = await _orderService.GetShippingOrdersAsync(request); return Ok(result); } /// /// 获取发货订单详情 /// /// 发货记录ID /// 发货订单详情 [HttpGet("shipping/{id}")] [BusinessPermission("order:ship")] public async Task GetShippingOrderDetail(int id) { var result = await _orderService.GetShippingOrderDetailAsync(id); if (result == null) { return NotFoundError("发货订单不存在"); } return Ok(result); } /// /// 发货处理 /// /// 发货记录ID /// 发货请求 /// 操作结果 [HttpPut("{id}/ship")] [BusinessPermission("order:ship")] public async Task ShipOrder(int id, [FromBody] ShipOrderRequest request) { if (string.IsNullOrWhiteSpace(request.CourierName)) { return ValidationError("快递公司名称不能为空"); } if (string.IsNullOrWhiteSpace(request.CourierNumber)) { return ValidationError("快递单号不能为空"); } var operatorId = (int)(GetCurrentUserId() ?? 0); try { var result = await _orderService.ShipOrderAsync(id, request, operatorId); return result ? Ok("发货成功") : Error(BusinessErrorCodes.InternalError, "发货失败"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 取消发货订单 /// /// 发货记录ID /// 操作结果 [HttpDelete("{id}/ship")] [BusinessPermission("order:ship")] public async Task CancelShippingOrder(int id) { var operatorId = (int)(GetCurrentUserId() ?? 0); try { var result = await _orderService.CancelShippingOrderAsync(id, operatorId); return result ? Ok("取消发货成功") : Error(BusinessErrorCodes.InternalError, "取消发货失败"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } #endregion #region 订单导出 /// /// 导出订单 /// /// 导出请求 /// CSV文件 [HttpGet("export")] [BusinessPermission("order:export")] public async Task ExportOrders([FromQuery] OrderExportRequest request) { var bytes = await _orderService.ExportOrdersAsync(request); var fileName = $"orders_{DateTime.Now:yyyyMMddHHmmss}.csv"; return File(bytes, "text/csv", fileName); } /// /// 导出发货订单 /// /// 导出请求 /// CSV文件 [HttpGet("shipping/export")] [BusinessPermission("order:export")] public async Task ExportShippingOrders([FromQuery] ShippingExportRequest request) { var bytes = await _orderService.ExportShippingOrdersAsync(request); var fileName = $"shipping_orders_{DateTime.Now:yyyyMMddHHmmss}.csv"; return File(bytes, "text/csv", fileName); } /// /// 导出回收订单 /// /// 导出请求 /// CSV文件 [HttpGet("recovery/export")] [BusinessPermission("order:export")] public async Task ExportRecoveryOrders([FromQuery] RecoveryExportRequest request) { var bytes = await _orderService.ExportRecoveryOrdersAsync(request); var fileName = $"recovery_orders_{DateTime.Now:yyyyMMddHHmmss}.csv"; return File(bytes, "text/csv", fileName); } /// /// 获取发货订单统计信息 /// /// 查询请求 /// 统计信息 [HttpGet("shipping/stats")] [BusinessPermission("order:ship")] public async Task GetShippingStats([FromQuery] ShippingOrderListRequest request) { var result = await _orderService.GetShippingStatsAsync(request); return Ok(result); } /// /// 导出综合订单 /// /// 导出请求 /// CSV文件 [HttpGet("list/export")] [BusinessPermission("order:export")] public async Task ExportComprehensiveOrders([FromQuery] ComprehensiveOrderExportRequest request) { var bytes = await _orderService.ExportComprehensiveOrdersAsync(request); var fileName = $"comprehensive_orders_{DateTime.Now:yyyyMMddHHmmss}.csv"; return File(bytes, "text/csv", fileName); } #endregion }