-- 1. 修复【金额券】：余额已为 0，且尚未到期，但状态被错误标记为“已过期”(3) 的券，统一修复为“已使用”(2)
UPDATE user_coupons 
SET status = 2, 
    used_at = IFNULL(used_at, updated_at)
WHERE balance_amount = 0 
  AND status = 3 
  AND valid_end > NOW();

-- 2. 修复【核销记录一致性】：已经在 order_coupons 表中有抵扣记录，但状态仍为“已过期”(3) 的券
UPDATE user_coupons uc
JOIN order_coupons oc ON uc.id = oc.user_coupon_id
SET uc.status = 2,
    uc.used_at = IFNULL(uc.used_at, oc.created_at)
WHERE uc.status = 3 
  AND uc.valid_end > NOW();

-- 3. (可选) 检查修复后的 User 9090 数据
-- SELECT id, status, balance_amount, valid_end, used_at FROM user_coupons WHERE user_id = 9090;
