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