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);
}
}
}