我正在与我们的仓库进行整合。我们收到包含所有SKU及其库存水平的XML消息。对于每个SKU,我需要更新我的rails应用程序中的库存级别。但是,每次我请求XML消息时,处理都非常慢,直到浏览器超时。我怀疑这是因为我必须按名称查找每个SKU并更新它的库存水平。 XML中应返回大约1000个SKU,这意味着每个SKU有2个查找,1个保存。
我有办法优化此集成的性能吗? 我对Rails相当新,但我觉得应该有一种更有效的方法。
示例XML:
<InventoryXML>
<Item>
<ItemID>ABC-12-2345</ItemID>
<ItemQty>14</ItemQty>
<Warehouses>
<Warehouse>
<Name>Constitution</Name>
<Quantity>9</Quantity>
</Warehouse>
<Warehouse>
<Name>Vegas</Name>
<Quantity>1</Quantity>
</Warehouse>
<Warehouse>
<Name>Atlanta</Name>
<Quantity>4</Quantity>
</Warehouse>
</Warehouses>
</Item>
</InventoryXML>
代码:
def process_inventory
@doc.xpath('//Item').each do |item|
name = item.xpath('//ItemID').text
warehouses = item.xpath('//Warehouses')
warehouses.xpath('Warehouse').each do |warehouse|
if warehouse.xpath('Name').text == "Vegas"
self.update_inventory_for_sku(2, name, warehouse.xpath('Quantity').text.to_i)
elsif warehouse.xpath('Name').text == "PA"
self.update_inventory_for_sku(1, name, warehouse.xpath('Quantity').text.to_i)
end
end
end
return "Succesfully updated SKU inventory"
end
def update_inventory_for_sku(vendor_id, name, quantity)
sku = VendorSku.where({vendor_id: vendor_id, name: name}).first
if sku
sku.update_attributes(inventory_quantity: quantity)
else
self.hub_error_message += "\nSKU not found: " + name.to_s + "for vendor_id: " + vendor_id.to_s
end
end