You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何汇总同商品不同批次的StockOnHand总和?

汇总同一商品不同批次的StockOnHand总数

我通过API获取了可用库存列表,结构如下:

{
  "Total": 4,
  "Page": 1,
  "ProductAvailabilityList": [
    {
      "ID": "53350e22-0a89-4bdd-b11c-90bb3315dbe1",
      "SKU": "test product 1",
      "Name": "Test product 1",
      "Barcode": null,
      "Location": "Main Warehouse",
      "Bin": null,
      "Batch": null,
      "ExpiryDate": null,
      "OnHand": 0,
      "Allocated": 1,
      "Available": 1,
      "OnOrder": 0,
      "StockOnHand": 0
    },
    {
      "ID": "92a8c8fd-318e-455a-945c-8c5f588c055e",
      "SKU": "test product 2",
      "Name": "Test product 2",
      "Barcode": null,
      "Location": "Main Warehouse",
      "Bin": null,
      "Batch": null,
      "ExpiryDate": null,
      "OnHand": 0,
      "Allocated": 1,
      "Available": 1,
      "OnOrder": 0,
      "StockOnHand": 0
    },
    {
      "ID": "a2bd1fc5-f52c-4005-89a7-b9fdb4f180e1",
      "SKU": "test product 3",
      "Name": "Test product 3",
      "Barcode": null,
      "Location": "Main Warehouse",
      "Bin": null,
      "Batch": null,
      "ExpiryDate": null,
      "OnHand": 0,
      "Allocated": 1,
      "Available": 1,
      "OnOrder": 0,
      "StockOnHand": 0
    },
    {
      "ID": "3e14fcbc-6e80-4c36-8c2c-36e29f79e192",
      "SKU": "test product 4",
      "Name": "Test product 4",
      "Barcode": null,
      "Location": "Main Warehouse",
      "Bin": null,
      "Batch": null,
      "ExpiryDate": null,
      "OnHand": 0,
      "Allocated": 5,
      "Available": 2,
      "OnOrder": 0,
      "StockOnHand": 0
    }
  ]
}

需求是汇总特定商品的StockOnHand总数,但同一商品若有不同Batch编号,会被拆分成不同的数组项,直接统计会出现重复或遗漏。

解决方案:按商品唯一标识分组累加

通过按SKU(优先使用SKU,因其通常是商品的唯一标识,也可根据需求换成Name)分组,再累加每个分组内的StockOnHand数值,即可得到商品的总库存数。

JavaScript实现示例

// 假设API返回的库存数据已存入response变量
const inventoryItems = response.ProductAvailabilityList;

// 按SKU分组并汇总StockOnHand
const totalStockBySKU = inventoryItems.reduce((result, item) => {
  const sku = item.SKU;
  if (!result[sku]) {
    result[sku] = {
      SKU: sku,
      Name: item.Name,
      TotalStockOnHand: 0
    };
  }
  result[sku].TotalStockOnHand += item.StockOnHand;
  return result;
}, {});

// 转换为数组格式便于展示或后续处理
const aggregatedStockList = Object.values(totalStockBySKU);
console.log(aggregatedStockList);

Python实现示例

# 假设API返回的库存数据已存入inventory_list变量
inventory_list = response['ProductAvailabilityList']

total_stock_by_sku = {}
for item in inventory_list:
    sku = item['SKU']
    if sku not in total_stock_by_sku:
        total_stock_by_sku[sku] = {
            'SKU': sku,
            'Name': item['Name'],
            'TotalStockOnHand': 0
        }
    total_stock_by_sku[sku]['TotalStockOnHand'] += item['StockOnHand']

# 转换为列表格式
aggregated_stock_list = list(total_stock_by_sku.values())
print(aggregated_stock_list)

扩展说明

如果需要更精细的分组(比如同一SKU不同仓库分开统计),只需修改分组键的生成逻辑:

  • JavaScript:const key = ${item.SKU}-${item.Location};
  • Python:key = f"{item['SKU']}-{item['Location']}"

内容的提问来源于stack exchange,提问作者Paul's Homemade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:20:27