-- ============================================================
-- 根据产品 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;
