using System.Security.Claims;
using HoneyBox.Core.Interfaces;
using HoneyBox.Model.Base;
using HoneyBox.Model.Models;
using HoneyBox.Model.Models.Lottery;
using HoneyBox.Model.Models.Order;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OrderPrizeOrderLogRequest = HoneyBox.Model.Models.Order.PrizeOrderLogRequest;
namespace HoneyBox.Api.Controllers;
///
/// 订单控制器 - 处理订单创建、查询和抽奖结果
///
///
/// 提供一番赏、无限赏、商城等订单的创建、金额计算、查询和抽奖结果查询功能
///
[ApiController]
[Route("api")]
public class OrderController : ControllerBase
{
private readonly IOrderService _orderService;
private readonly ILotteryService _lotteryService;
private readonly ILogger _logger;
public OrderController(
IOrderService orderService,
ILotteryService lotteryService,
ILogger logger)
{
_orderService = orderService;
_lotteryService = lotteryService;
_logger = logger;
}
#region 一番赏订单
///
/// 一番赏订单金额计算
///
///
/// POST /api/ordermoney
///
/// 计算一番赏订单金额,包含优惠券抵扣、余额抵扣等
/// Requirements: 1.1-1.6
///
/// 订单金额计算请求参数
/// 订单金额计算结果
[HttpPost("ordermoney")]
[Authorize]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status401Unauthorized)]
public async Task> CalculateOrderMoney([FromBody] OrderMoneyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CalculateOrderMoneyAsync(userId.Value, request);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Calculate order money failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to calculate order money: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("计算订单金额失败");
}
}
///
/// 一番赏订单创建
///
///
/// POST /api/orderbuy
///
/// 创建一番赏订单并执行抽奖,返回订单信息和抽奖结果
/// Requirements: 2.1-2.6
///
/// 订单创建请求参数
/// 订单创建结果,包含订单号和支付信息
[HttpPost("orderbuy")]
[Authorize]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status401Unauthorized)]
public async Task> CreateOrder([FromBody] OrderBuyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CreateOrderAsync(userId.Value, request);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Create order failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
// 未绑定手机号返回特殊状态码 -9,前端根据此状态码跳转绑定页面
if (ex.Message.Contains("绑定手机号"))
{
return ApiResponse.Fail(ex.Message, -9);
}
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to create order: UserId={UserId}, GoodsId={GoodsId}, Message={Message}, StackTrace={StackTrace}",
userId, request?.GoodsId, ex.Message, ex.StackTrace);
return ApiResponse.Fail($"创建订单失败: {ex.Message}");
}
}
#endregion
#region 无限赏订单
///
/// 无限赏订单金额计算
/// POST /api/infinite_ordermoney
/// Requirements: 3.1-3.3
///
[HttpPost("infinite_ordermoney")]
[Authorize]
public async Task> CalculateInfiniteOrderMoney([FromBody] InfiniteOrderMoneyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CalculateInfiniteOrderMoneyAsync(userId.Value, request);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Calculate infinite order money failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to calculate infinite order money: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("计算订单金额失败");
}
}
///
/// 无限赏订单创建
/// POST /api/infinite_orderbuy
/// Requirements: 4.1-4.3
///
[HttpPost("infinite_orderbuy")]
[Authorize]
public async Task> CreateInfiniteOrder([FromBody] InfiniteOrderBuyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CreateInfiniteOrderAsync(userId.Value, request);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Create infinite order failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
// 未绑定手机号返回特殊状态码 -9,前端根据此状态码跳转绑定页面
if (ex.Message.Contains("绑定手机号"))
{
return ApiResponse.Fail(ex.Message, -9);
}
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to create infinite order: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("创建订单失败");
}
}
#endregion
#region 商城订单
///
/// 商城订单金额计算
/// POST /api/mall_ordermoney
/// Requirements: 5.1-5.3
///
[HttpPost("mall_ordermoney")]
[Authorize]
public async Task> CalculateMallOrderMoney([FromBody] MallOrderMoneyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
var result = await _orderService.CalculateMallOrderMoneyAsync(userId.Value, request);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Calculate mall order money failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to calculate mall order money: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("计算订单金额失败");
}
}
#endregion
#region 订单查询
///
/// 订单列表查询
///
///
/// POST /api/order_list
///
/// 获取当前用户的订单列表,支持按状态筛选和分页
/// Requirements: 6.1-6.4
///
/// 订单列表请求参数
/// 订单列表分页数据
[HttpPost("order_list")]
[Authorize]
[ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status401Unauthorized)]
public async Task>> GetOrderList([FromBody] OrderListRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse>.Unauthorized();
}
try
{
request ??= new OrderListRequest();
if (request.Page < 1) request.Page = 1;
if (request.PageSize < 1) request.PageSize = 10;
var result = await _orderService.GetOrderListAsync(userId.Value, request);
return ApiResponse>.Success(result);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get order list: UserId={UserId}", userId);
return ApiResponse>.Fail("获取订单列表失败");
}
}
///
/// 订单详情查询
/// POST /api/order_detail
/// Requirements: 7.1-7.3
///
[HttpPost("order_detail")]
[Authorize]
public async Task> GetOrderDetail([FromBody] OrderDetailRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
{
return ApiResponse.Fail("订单号不能为空");
}
var result = await _orderService.GetOrderDetailAsync(userId.Value, request.OrderNum);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get order detail failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
userId, request?.OrderNum, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get order detail: UserId={UserId}, OrderNum={OrderNum}",
userId, request?.OrderNum);
return ApiResponse.Fail("获取订单详情失败");
}
}
#endregion
#region 抽奖结果查询
///
/// 一番赏抽奖结果查询
/// POST /api/prizeorderlog
/// Requirements: 8.1-8.3
///
[HttpPost("prizeorderlog")]
[Authorize]
public async Task> GetPrizeOrderLog([FromBody] OrderPrizeOrderLogRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
{
return ApiResponse.Fail("订单号不能为空");
}
var result = await _orderService.GetPrizeOrderLogAsync(userId.Value, request.OrderNum);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get prize order log failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
userId, request?.OrderNum, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get prize order log: UserId={UserId}, OrderNum={OrderNum}",
userId, request?.OrderNum);
return ApiResponse.Fail("获取抽奖结果失败");
}
}
///
/// 无限赏抽奖结果查询
/// POST /api/infinite_prizeorderlog
/// Requirements: 9.1-9.2
///
[HttpPost("infinite_prizeorderlog")]
[Authorize]
public async Task> GetInfinitePrizeOrderLog([FromBody] OrderPrizeOrderLogRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
{
return ApiResponse.Fail("订单号不能为空");
}
var result = await _orderService.GetInfinitePrizeOrderLogAsync(userId.Value, request.OrderNum);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get infinite prize order log failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
userId, request?.OrderNum, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get infinite prize order log: UserId={UserId}, OrderNum={OrderNum}",
userId, request?.OrderNum);
return ApiResponse.Fail("获取抽奖结果失败");
}
}
///
/// 无限赏中奖记录查询
/// GET /api/infinite_shang_log
/// Requirements: 4.1-4.3
///
[HttpGet("infinite_shang_log")]
public async Task> GetInfiniteShangLog([FromQuery] InfiniteShangLogRequest? request)
{
try
{
if (request == null || request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
// 设置默认分页参数
var page = request.Page > 0 ? request.Page : 1;
var pageSize = request.PageSize > 0 ? request.PageSize : 100;
var result = await _lotteryService.GetInfiniteShangLogAsync(
request.GoodsId,
request.ShangId ?? 0,
request.IsMibao ?? 0,
page,
pageSize);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get infinite shang log failed: GoodsId={GoodsId}, Error={Error}",
request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get infinite shang log: GoodsId={GoodsId}",
request?.GoodsId);
return ApiResponse.Fail("获取中奖记录失败");
}
}
///
/// 无限赏用户抽奖记录查询(盒子抽奖记录)
/// POST /api/infinite_prizerecords
/// Requirements: 5.1-5.3
///
[HttpPost("infinite_prizerecords")]
[Authorize]
public async Task> GetInfinitePrizeRecords([FromBody] InfinitePrizeRecordsRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null || request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
// 设置默认分页参数
var page = request.Page > 0 ? request.Page : 1;
var pageSize = request.PageSize > 0 ? request.PageSize : 100;
var result = await _lotteryService.GetInfinitePrizeRecordsAsync(
userId.Value,
request.GoodsId,
page,
pageSize);
return ApiResponse.Success(result);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get infinite prize records failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get infinite prize records: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("获取抽奖记录失败");
}
}
///
/// 道具卡抽奖(重抽)
/// POST /api/item_card_chou
/// Requirements: 6.1-6.4
///
[HttpPost("item_card_chou")]
[Authorize]
public async Task> DrawWithItemCard([FromBody] ItemCardDrawRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (string.IsNullOrWhiteSpace(request.OrderListIds))
{
return ApiResponse.Fail("参数错误");
}
// 解析订单项ID列表
var orderListIds = request.OrderListIds
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(s => int.TryParse(s.Trim(), out var id) ? id : 0)
.Where(id => id > 0)
.ToList();
if (!orderListIds.Any())
{
return ApiResponse.Fail("参数错误");
}
var result = await _lotteryService.DrawWithItemCardAsync(userId.Value, request.GoodsId, orderListIds);
return ApiResponse.Success(result, "重抽成功");
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Item card draw failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to draw with item card: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("重抽失败,请刷新重试");
}
}
#endregion
#region 订单模块扩展 (9个接口)
///
/// 获取订单支付状态
/// GET /api/get_order_status
/// Requirements: 6.1
///
[HttpGet("get_order_status")]
[Authorize]
public async Task> GetOrderStatus([FromQuery] string order_num)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (string.IsNullOrWhiteSpace(order_num))
{
return ApiResponse.Fail("订单编号不能为空");
}
var result = await _orderService.GetOrderStatusAsync(userId.Value, order_num);
return ApiResponse.Success(result, result.Message);
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get order status failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
userId, order_num, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get order status: UserId={UserId}, OrderNum={OrderNum}",
userId, order_num);
return ApiResponse.Fail("获取订单状态失败");
}
}
///
/// 获取订单列表(GET方式)
/// GET /api/get_order_list
/// Requirements: 6.2
///
[HttpGet("get_order_list")]
[Authorize]
public async Task> GetOrderListByGet([FromQuery] int page = 1, [FromQuery] int page_size = 10)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
var result = await _orderService.GetOrderListByGetAsync(userId.Value, page, page_size);
return ApiResponse.Success(result, "获取成功");
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get order list: UserId={UserId}", userId);
return ApiResponse.Fail("获取订单列表失败");
}
}
///
/// 创建网页支付订单
/// POST /api/create_web_pay_order
/// Requirements: 6.3
///
[HttpPost("create_web_pay_order")]
[Authorize]
public async Task> CreateWebPayOrder([FromBody] CreateWebPayOrderRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
{
return ApiResponse.Fail("订单编号不能为空");
}
var result = await _orderService.CreateWebPayOrderAsync(userId.Value, request.OrderNum);
return ApiResponse.Success(result, "创建成功");
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Create web pay order failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
userId, request?.OrderNum, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to create web pay order: UserId={UserId}, OrderNum={OrderNum}",
userId, request?.OrderNum);
return ApiResponse.Fail("创建支付订单失败");
}
}
///
/// 获取订单URL链接
/// GET /api/get_order_url_link
/// Requirements: 6.4
///
[HttpGet("get_order_url_link")]
public async Task> GetOrderUrlLink([FromQuery] string order_num)
{
try
{
if (string.IsNullOrWhiteSpace(order_num))
{
return ApiResponse.Fail("订单编号不能为空");
}
var result = await _orderService.GetOrderUrlLinkAsync(order_num);
return ApiResponse.Success(result, "获取成功");
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Get order url link failed: OrderNum={OrderNum}, Error={Error}",
order_num, ex.Message);
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get order url link: OrderNum={OrderNum}", order_num);
return ApiResponse.Fail("获取失败");
}
}
///
/// 商城下单
/// POST /api/mall_orderbuy
/// Requirements: 6.5
///
[HttpPost("mall_orderbuy")]
[Authorize]
public async Task> CreateMallOrder([FromBody] MallOrderBuyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CreateMallOrderAsync(userId.Value, request);
return ApiResponse.Success(result, "下单成功");
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Create mall order failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
// 未绑定手机号返回特殊状态码 -9,前端根据此状态码跳转绑定页面
if (ex.Message.Contains("绑定手机号"))
{
return ApiResponse.Fail(ex.Message, -9);
}
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to create mall order: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("购买失败,请刷新重试");
}
}
///
/// 获取抽奖结果(别名)
/// POST /api/prize_order_log
/// Requirements: 6.6
///
[HttpPost("prize_order_log")]
[Authorize]
public async Task> GetPrizeOrderLogAlias([FromBody] OrderPrizeOrderLogRequest? request)
{
// 复用已有的 prizeorderlog 接口逻辑
return await GetPrizeOrderLog(request);
}
///
/// 获取道具卡列表
/// GET /api/item_card_list
/// Requirements: 6.7
///
[HttpGet("item_card_list")]
[Authorize]
public async Task> GetItemCardList([FromQuery] int page = 1, [FromQuery] int page_size = 20)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
var result = await _orderService.GetItemCardListAsync(userId.Value, page, page_size);
return ApiResponse.Success(result, "请求成功");
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get item card list: UserId={UserId}", userId);
return ApiResponse.Fail("获取道具卡列表失败");
}
}
///
/// 连击赏秘宝下单
/// POST /api/infinite_mibao_orderbuy
/// Requirements: 6.8
///
[HttpPost("infinite_mibao_orderbuy")]
[Authorize]
public async Task> CreateInfiniteMibaoOrder([FromBody] InfiniteMibaoOrderBuyRequest? request)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
if (request == null)
{
return ApiResponse.Fail("请求参数不能为空");
}
if (request.GoodsId <= 0)
{
return ApiResponse.Fail("商品ID不能为空");
}
if (request.PrizeNum <= 0)
{
return ApiResponse.Fail("抽奖次数不能为空");
}
var result = await _orderService.CreateInfiniteMibaoOrderAsync(userId.Value, request);
return ApiResponse.Success(result, "下单成功");
}
catch (InvalidOperationException ex)
{
_logger.LogWarning("Create infinite mibao order failed: UserId={UserId}, GoodsId={GoodsId}, Error={Error}",
userId, request?.GoodsId, ex.Message);
// 未绑定手机号返回特殊状态码 -9,前端根据此状态码跳转绑定页面
if (ex.Message.Contains("绑定手机号"))
{
return ApiResponse.Fail(ex.Message, -9);
}
return ApiResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to create infinite mibao order: UserId={UserId}, GoodsId={GoodsId}",
userId, request?.GoodsId);
return ApiResponse.Fail("购买失败,请刷新重试");
}
}
///
/// 获取测试用户Token(仅测试环境)
/// GET /api/get_user_test
/// Requirements: 6.9
///
[HttpGet("get_user_test")]
[Authorize]
public async Task> GetUserTest([FromQuery] int user_id)
{
var userId = GetCurrentUserId();
if (userId == null)
{
return ApiResponse.Unauthorized();
}
try
{
var result = await _orderService.GetUserTestTokenAsync(userId.Value, user_id);
if (string.IsNullOrEmpty(result))
{
return ApiResponse.Success(string.Empty, "获取失败");
}
return ApiResponse.Success(result, "获取成功");
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get user test token: UserId={UserId}, TargetUserId={TargetUserId}",
userId, user_id);
return ApiResponse.Success(string.Empty, "获取失败");
}
}
#endregion
#region Private Helper Methods
///
/// 获取当前登录用户ID
///
private int? GetCurrentUserId()
{
var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier);
if (userIdClaim == null || !int.TryParse(userIdClaim.Value, out var userId))
{
return null;
}
return userId;
}
#endregion
}