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
}