21
This commit is contained in:
parent
7e4beb00af
commit
b3d0782b91
|
|
@ -45,6 +45,10 @@ public class GoodsService : IGoodsService
|
|||
|
||||
#region 商品管理
|
||||
|
||||
// 使用模板奖品的类型(无限赏类型):库存直接使用 goods 表的 stock/sale_stock
|
||||
// 其他类型(箱号类型):库存需要从 goods_items 表汇总计算
|
||||
private static readonly int[] TemplateTypes = { 2, 8, 9, 15, 16, 17 };
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<PagedResult<GoodsListResponse>> GetGoodsListAsync(GoodsListRequest request)
|
||||
{
|
||||
|
|
@ -66,8 +70,36 @@ public class GoodsService : IGoodsService
|
|||
.Take(request.PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
// 映射结果
|
||||
var list = goods.Select(MapToGoodsListResponse).ToList();
|
||||
// 获取非无限赏类型商品的ID列表,用于计算实际库存
|
||||
var nonTemplateGoodsIds = goods
|
||||
.Where(g => !TemplateTypes.Contains(g.Type))
|
||||
.Select(g => g.Id)
|
||||
.ToList();
|
||||
|
||||
// 批量查询非无限赏商品的奖品库存汇总
|
||||
var stockSummary = new Dictionary<int, (int TotalStock, int SurplusStock)>();
|
||||
if (nonTemplateGoodsIds.Any())
|
||||
{
|
||||
var summary = await _dbContext.GoodsItems
|
||||
.AsNoTracking()
|
||||
.Where(gi => nonTemplateGoodsIds.Contains(gi.GoodsId) && gi.GoodsListId == 0) // 只统计父奖品
|
||||
.GroupBy(gi => gi.GoodsId)
|
||||
.Select(g => new
|
||||
{
|
||||
GoodsId = g.Key,
|
||||
TotalStock = g.Sum(x => x.Stock),
|
||||
SurplusStock = g.Sum(x => x.SurplusStock)
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
foreach (var s in summary)
|
||||
{
|
||||
stockSummary[s.GoodsId] = (s.TotalStock, s.SurplusStock);
|
||||
}
|
||||
}
|
||||
|
||||
// 映射结果,传入库存汇总数据
|
||||
var list = goods.Select(g => MapToGoodsListResponse(g, stockSummary)).ToList();
|
||||
|
||||
return PagedResult<GoodsListResponse>.Create(list, total, request.Page, request.PageSize);
|
||||
}
|
||||
|
|
@ -812,8 +844,35 @@ public class GoodsService : IGoodsService
|
|||
/// <summary>
|
||||
/// 映射商品到列表响应
|
||||
/// </summary>
|
||||
private GoodsListResponse MapToGoodsListResponse(Good goods)
|
||||
/// <param name="goods">商品实体</param>
|
||||
/// <param name="stockSummary">非无限赏商品的库存汇总(可选)</param>
|
||||
private GoodsListResponse MapToGoodsListResponse(Good goods, Dictionary<int, (int TotalStock, int SurplusStock)>? stockSummary = null)
|
||||
{
|
||||
int stock, saleStock;
|
||||
|
||||
// 判断是否为无限赏类型(使用模板奖品的类型)
|
||||
if (TemplateTypes.Contains(goods.Type))
|
||||
{
|
||||
// 无限赏类型:直接使用 goods 表的库存字段
|
||||
stock = goods.Stock;
|
||||
saleStock = goods.SaleStock;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非无限赏类型(箱号类型):从奖品汇总计算库存
|
||||
if (stockSummary != null && stockSummary.TryGetValue(goods.Id, out var summary))
|
||||
{
|
||||
stock = summary.TotalStock;
|
||||
saleStock = summary.TotalStock - summary.SurplusStock;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 没有奖品数据时,显示0
|
||||
stock = 0;
|
||||
saleStock = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return new GoodsListResponse
|
||||
{
|
||||
Id = goods.Id,
|
||||
|
|
@ -823,8 +882,8 @@ public class GoodsService : IGoodsService
|
|||
Type = goods.Type,
|
||||
TypeName = BoxTypeNames.GetValueOrDefault(goods.Type, "未知类型"),
|
||||
Status = goods.Status,
|
||||
Stock = goods.Stock,
|
||||
SaleStock = goods.SaleStock,
|
||||
Stock = stock,
|
||||
SaleStock = saleStock,
|
||||
Sort = goods.Sort,
|
||||
FlwStartTime = goods.FlwStartTime,
|
||||
FlwEndTime = goods.FlwEndTime,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user