Merge branch 'master' of http://192.168.195.14:3000/outsource/HaniBlindBox
This commit is contained in:
commit
2c17784316
|
|
@ -11,28 +11,28 @@
|
||||||
|
|
||||||
// 测试环境配置 - .NET 10 后端
|
// 测试环境配置 - .NET 10 后端
|
||||||
const testing = {
|
const testing = {
|
||||||
baseUrl: 'https://app.zpc-xy.com/honey/api',
|
baseUrl: 'https://app.zpc-xy.com/honey/api',
|
||||||
// baseUrl: 'http://192.168.1.24:5238',
|
// baseUrl: 'http://192.168.1.24:5238',
|
||||||
imageUrl: 'https://youdas-1308826010.cos.ap-shanghai.myqcloud.com',
|
imageUrl: 'https://youdas-1308826010.cos.ap-shanghai.myqcloud.com',
|
||||||
loginPage: '',
|
loginPage: '',
|
||||||
wxAppId: ''
|
wxAppId: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 根据环境变量选择对应配置
|
// 根据环境变量选择对应配置
|
||||||
let currentEnv = testing;//production;//testing;//production_wz;
|
let currentEnv = testing; //production;//testing;//production_wz;
|
||||||
// 衍生配置
|
// 衍生配置
|
||||||
const config = {
|
const config = {
|
||||||
...currentEnv,
|
...currentEnv,
|
||||||
// API请求完整路径
|
// API请求完整路径
|
||||||
apiBaseUrl: currentEnv.baseUrl + '/api/',
|
apiBaseUrl: currentEnv.baseUrl + '/api/',
|
||||||
// 微信登录重定向URL
|
// 微信登录重定向URL
|
||||||
wxLoginUrl: `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${currentEnv.wxAppId}&redirect_uri=${escape(currentEnv.loginPage)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`,
|
wxLoginUrl: `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${currentEnv.wxAppId}&redirect_uri=${escape(currentEnv.loginPage)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`,
|
||||||
// 图片资源路径
|
// 图片资源路径
|
||||||
imageBaseUrl: currentEnv.imageUrl + '/static/web',
|
imageBaseUrl: currentEnv.imageUrl + '/static/web',
|
||||||
// 图标资源路径
|
// 图标资源路径
|
||||||
iconBaseUrl: currentEnv.imageUrl + '/static/web/static/'
|
iconBaseUrl: currentEnv.imageUrl + '/static/web/static/'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
|
|
@ -365,35 +365,35 @@ public class OrderController : ControllerBase
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("order_detail")]
|
[HttpPost("order_detail")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ApiResponse<OrderDetailDto>> GetOrderDetail([FromBody] OrderDetailRequest? request)
|
public async Task<ApiResponse<OrderInfoDto>> GetOrderDetail([FromBody] OrderDetailRequest? request)
|
||||||
{
|
{
|
||||||
var userId = GetCurrentUserId();
|
var userId = GetCurrentUserId();
|
||||||
if (userId == null)
|
if (userId == null)
|
||||||
{
|
{
|
||||||
return ApiResponse<OrderDetailDto>.Unauthorized();
|
return ApiResponse<OrderInfoDto>.Unauthorized();
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
|
if (request == null || string.IsNullOrWhiteSpace(request.OrderNum))
|
||||||
{
|
{
|
||||||
return ApiResponse<OrderDetailDto>.Fail("订单号不能为空");
|
return ApiResponse<OrderInfoDto>.Fail("订单号不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = await _orderService.GetOrderDetailAsync(userId.Value, request.OrderNum);
|
var result = await _orderService.GetOrderDetailAsync(userId.Value, request.OrderNum);
|
||||||
return ApiResponse<OrderDetailDto>.Success(result);
|
return ApiResponse<OrderInfoDto>.Success(result);
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Get order detail failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
|
_logger.LogWarning("Get order detail failed: UserId={UserId}, OrderNum={OrderNum}, Error={Error}",
|
||||||
userId, request?.OrderNum, ex.Message);
|
userId, request?.OrderNum, ex.Message);
|
||||||
return ApiResponse<OrderDetailDto>.Fail(ex.Message);
|
return ApiResponse<OrderInfoDto>.Fail(ex.Message);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Failed to get order detail: UserId={UserId}, OrderNum={OrderNum}",
|
_logger.LogError(ex, "Failed to get order detail: UserId={UserId}, OrderNum={OrderNum}",
|
||||||
userId, request?.OrderNum);
|
userId, request?.OrderNum);
|
||||||
return ApiResponse<OrderDetailDto>.Fail("获取订单详情失败");
|
return ApiResponse<OrderInfoDto>.Fail("获取订单详情失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,8 @@ public interface IOrderService
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userId">用户ID</param>
|
/// <param name="userId">用户ID</param>
|
||||||
/// <param name="orderNum">订单号</param>
|
/// <param name="orderNum">订单号</param>
|
||||||
/// <returns>订单详情</returns>
|
/// <returns>订单详情(扁平结构,包含goods_list)</returns>
|
||||||
Task<OrderDetailDto> GetOrderDetailAsync(int userId, string orderNum);
|
Task<OrderInfoDto> GetOrderDetailAsync(int userId, string orderNum);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1640,6 +1640,7 @@ public class OrderService : IOrderService
|
||||||
GoodsTitle = o.GoodsTitle ?? string.Empty,
|
GoodsTitle = o.GoodsTitle ?? string.Empty,
|
||||||
GoodsImgUrl = o.GoodsImgurl ?? string.Empty,
|
GoodsImgUrl = o.GoodsImgurl ?? string.Empty,
|
||||||
OrderTotal = o.OrderTotal.ToString("0.00"),
|
OrderTotal = o.OrderTotal.ToString("0.00"),
|
||||||
|
OrderZheTotal = o.OrderZheTotal.ToString("0.00"),
|
||||||
Price = o.Price.ToString("0.00"),
|
Price = o.Price.ToString("0.00"),
|
||||||
PrizeNum = o.PrizeNum,
|
PrizeNum = o.PrizeNum,
|
||||||
Status = o.Status,
|
Status = o.Status,
|
||||||
|
|
@ -1667,7 +1668,7 @@ public class OrderService : IOrderService
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task<OrderDetailDto> GetOrderDetailAsync(int userId, string orderNum)
|
public async Task<OrderInfoDto> GetOrderDetailAsync(int userId, string orderNum)
|
||||||
{
|
{
|
||||||
// 1. 验证订单号
|
// 1. 验证订单号
|
||||||
if (string.IsNullOrEmpty(orderNum))
|
if (string.IsNullOrEmpty(orderNum))
|
||||||
|
|
@ -1685,16 +1686,26 @@ public class OrderService : IOrderService
|
||||||
throw new InvalidOperationException("订单不存在");
|
throw new InvalidOperationException("订单不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 验证订单归属(可选,根据业务需求决定是否验证)
|
// 3. 查询订单商品列表(奖品列表)
|
||||||
// 注意:PHP代码中没有验证订单归属,这里保持一致
|
var goodsList = await _dbContext.OrderItems
|
||||||
// 如果需要验证,取消下面的注释
|
.Where(oi => oi.OrderId == order.Id)
|
||||||
// if (order.UserId != userId)
|
.Select(oi => new OrderGoodsItemDto
|
||||||
// {
|
{
|
||||||
// throw new InvalidOperationException("无权访问该订单");
|
GoodsListTitle = oi.GoodslistTitle ?? string.Empty,
|
||||||
// }
|
GoodsListImgUrl = oi.GoodslistImgurl ?? string.Empty,
|
||||||
|
GoodsListPrice = oi.GoodslistPrice,
|
||||||
|
AddTime = DateTimeOffset.FromUnixTimeSeconds(oi.Addtime).LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss")
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
// 4. 构建订单信息DTO
|
// 4. 格式化奖品图片URL
|
||||||
var orderInfo = new OrderInfoDto
|
foreach (var item in goodsList)
|
||||||
|
{
|
||||||
|
item.GoodsListImgUrl = FormatImageUrl(item.GoodsListImgUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 构建扁平结构的订单详情(与PHP旧版一致)
|
||||||
|
return new OrderInfoDto
|
||||||
{
|
{
|
||||||
Id = order.Id,
|
Id = order.Id,
|
||||||
OrderNum = order.OrderNum,
|
OrderNum = order.OrderNum,
|
||||||
|
|
@ -1703,6 +1714,7 @@ public class OrderService : IOrderService
|
||||||
GoodsImgUrl = FormatImageUrl(order.GoodsImgurl),
|
GoodsImgUrl = FormatImageUrl(order.GoodsImgurl),
|
||||||
GoodsPrice = order.GoodsPrice.ToString("0.00"),
|
GoodsPrice = order.GoodsPrice.ToString("0.00"),
|
||||||
OrderTotal = order.OrderTotal.ToString("0.00"),
|
OrderTotal = order.OrderTotal.ToString("0.00"),
|
||||||
|
OrderZheTotal = order.OrderZheTotal.ToString("0.00"),
|
||||||
Price = order.Price.ToString("0.00"),
|
Price = order.Price.ToString("0.00"),
|
||||||
UseMoney = order.UseMoney.ToString("0.00"),
|
UseMoney = order.UseMoney.ToString("0.00"),
|
||||||
UseIntegral = order.UseIntegral.ToString("0.00"),
|
UseIntegral = order.UseIntegral.ToString("0.00"),
|
||||||
|
|
@ -1711,38 +1723,9 @@ public class OrderService : IOrderService
|
||||||
PrizeNum = order.PrizeNum,
|
PrizeNum = order.PrizeNum,
|
||||||
Status = order.Status,
|
Status = order.Status,
|
||||||
AddTime = order.Addtime,
|
AddTime = order.Addtime,
|
||||||
PayTime = order.PayTime > 0 ? order.PayTime : null,
|
PayTime = order.PayTime > 0 ? DateTimeOffset.FromUnixTimeSeconds(order.PayTime).LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss") : null,
|
||||||
OrderType = order.OrderType
|
OrderType = order.OrderType,
|
||||||
};
|
GoodsList = goodsList
|
||||||
|
|
||||||
// 5. 查询订单商品列表(奖品列表)
|
|
||||||
var prizeList = await _dbContext.OrderItems
|
|
||||||
.Where(oi => oi.OrderId == order.Id)
|
|
||||||
.Select(oi => new PrizeItemDto
|
|
||||||
{
|
|
||||||
Id = oi.Id,
|
|
||||||
GoodsListTitle = oi.GoodslistTitle ?? string.Empty,
|
|
||||||
GoodsListImgUrl = oi.GoodslistImgurl ?? string.Empty,
|
|
||||||
GoodsListPrice = oi.GoodslistPrice.ToString("0.00"),
|
|
||||||
GoodsListMoney = oi.GoodslistMoney.ToString("0.00"),
|
|
||||||
Status = oi.Status,
|
|
||||||
LuckNo = oi.LuckNo,
|
|
||||||
ShangId = oi.ShangId
|
|
||||||
})
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
// 6. 格式化奖品图片URL
|
|
||||||
foreach (var prize in prizeList)
|
|
||||||
{
|
|
||||||
prize.GoodsListImgUrl = FormatImageUrl(prize.GoodsListImgUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 7. 构建响应
|
|
||||||
return new OrderDetailDto
|
|
||||||
{
|
|
||||||
OrderInfo = orderInfo,
|
|
||||||
PrizeList = prizeList,
|
|
||||||
PaymentRecords = null // 支付记录暂不实现,PHP代码中也没有返回
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -525,6 +525,12 @@ public class OrderListDto
|
||||||
[JsonPropertyName("order_total")]
|
[JsonPropertyName("order_total")]
|
||||||
public string OrderTotal { get; set; } = "0.00";
|
public string OrderTotal { get; set; } = "0.00";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 折后订单金额
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("order_zhe_total")]
|
||||||
|
public string OrderZheTotal { get; set; } = "0.00";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 实际支付金额
|
/// 实际支付金额
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -633,6 +639,12 @@ public class OrderInfoDto
|
||||||
[JsonPropertyName("order_total")]
|
[JsonPropertyName("order_total")]
|
||||||
public string OrderTotal { get; set; } = "0.00";
|
public string OrderTotal { get; set; } = "0.00";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 折后订单金额
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("order_zhe_total")]
|
||||||
|
public string OrderZheTotal { get; set; } = "0.00";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 实际支付金额
|
/// 实际支付金额
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -685,13 +697,49 @@ public class OrderInfoDto
|
||||||
/// 支付时间戳
|
/// 支付时间戳
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonPropertyName("pay_time")]
|
[JsonPropertyName("pay_time")]
|
||||||
public long? PayTime { get; set; }
|
public string? PayTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 订单类型
|
/// 订单类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonPropertyName("order_type")]
|
[JsonPropertyName("order_type")]
|
||||||
public int OrderType { get; set; }
|
public int OrderType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 奖品列表
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("goods_list")]
|
||||||
|
public List<OrderGoodsItemDto>? GoodsList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 订单商品项DTO(用于订单详情)
|
||||||
|
/// </summary>
|
||||||
|
public class OrderGoodsItemDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 奖品标题
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("goodslist_title")]
|
||||||
|
public string GoodsListTitle { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 奖品图片
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("goodslist_imgurl")]
|
||||||
|
public string GoodsListImgUrl { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 奖品价格
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("goodslist_price")]
|
||||||
|
public decimal GoodsListPrice { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加时间
|
||||||
|
/// </summary>
|
||||||
|
[JsonPropertyName("addtime")]
|
||||||
|
public string AddTime { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user