using MiAssessment.Admin.Business.Attributes; using MiAssessment.Admin.Business.Models; using MiAssessment.Admin.Business.Models.Common; using MiAssessment.Admin.Business.Models.Order; using MiAssessment.Admin.Business.Services.Interfaces; using Microsoft.AspNetCore.Mvc; namespace MiAssessment.Admin.Business.Controllers; /// /// 订单管理控制器 /// [Route("api/admin/order")] public class OrderController : BusinessControllerBase { private readonly IOrderService _orderService; /// /// 构造函数 /// /// 订单服务 public OrderController(IOrderService orderService) { _orderService = orderService; } /// /// 获取订单列表 /// /// 查询请求 /// 分页订单列表 [HttpGet("getList")] [BusinessPermission("order:view")] public async Task GetList([FromQuery] OrderQueryRequest request) { try { var result = await _orderService.GetOrderListAsync(request); return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 获取订单详情 /// /// 订单ID /// 订单详情 [HttpGet("getDetail")] [BusinessPermission("order:view")] public async Task GetDetail([FromQuery] long id) { try { var result = await _orderService.GetOrderDetailAsync(id); if (result == null) { return Error(ErrorCodes.OrderNotFound, "订单不存在"); } return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 发起退款 /// /// 退款请求 /// 操作结果 [HttpPost("refund")] [BusinessPermission("order:update")] public async Task Refund([FromBody] RefundRequest request) { if (!ModelState.IsValid) { return ValidationError("参数验证失败"); } try { var result = await _orderService.RefundAsync( request.OrderId, request.RefundAmount, request.RefundReason); if (result) { return Ok("退款申请已提交"); } return Error(ErrorCodes.OrderCannotRefund, "退款申请失败"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 导出订单列表 /// /// 查询请求 /// 导出数据 [HttpGet("export")] [BusinessPermission("order:view")] public async Task Export([FromQuery] OrderQueryRequest request) { try { var result = await _orderService.ExportOrdersAsync(request); return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } }