-- ============================================================ -- 根据产品 F_AveragePrice 更新库存领取的单价、总价 -- 说明:领取记录在 lq_inventory_usage,单价 F_UnitPrice、总价 F_TotalAmount; -- 单价取产品 F_AveragePrice,若为 0 或 NULL 则取 F_Price;总价 = 单价 × 领取数量。 -- 同时按批次汇总,回写 lq_inventory_usage_application 的 F_TotalAmount。 -- ============================================================ -- 一、预览:将要更新的使用记录条数及金额变化(不修改数据) SELECT u.F_Id AS 使用记录ID, u.F_ProductId AS 产品ID, p.F_ProductName AS 产品名称, u.F_UsageQuantity AS 领取数量, u.F_UnitPrice AS 当前单价, u.F_TotalAmount AS 当前总价, IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price) AS 新单价_取自产品, IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price) * u.F_UsageQuantity AS 新总价 FROM lq_inventory_usage u INNER JOIN lq_product p ON u.F_ProductId = p.F_Id WHERE u.F_IsEffective = 1 AND (u.F_UnitPrice != IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price) OR u.F_TotalAmount != IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price) * u.F_UsageQuantity) LIMIT 500; -- 二、更新库存使用记录:单价、总价(按产品 F_AveragePrice,否则 F_Price) UPDATE lq_inventory_usage u INNER JOIN lq_product p ON u.F_ProductId = p.F_Id SET u.F_UnitPrice = IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price), u.F_TotalAmount = IFNULL(NULLIF(p.F_AveragePrice, 0), p.F_Price) * u.F_UsageQuantity, u.F_UpdateTime = NOW() WHERE u.F_IsEffective = 1; -- 三、按批次汇总,更新申请表的 F_TotalAmount UPDATE lq_inventory_usage_application a INNER JOIN ( SELECT F_UsageBatchId, SUM(F_TotalAmount) AS batch_total FROM lq_inventory_usage WHERE F_IsEffective = 1 GROUP BY F_UsageBatchId ) t ON a.F_UsageBatchId = t.F_UsageBatchId SET a.F_TotalAmount = t.batch_total WHERE a.F_IsEffective = 1;